गाइड

Mac के बिना React Native iOS ऐप बिल्ड करें

React Native का ज़्यादातर काम Windows या Linux पर ठीक चलता है। iOS बिल्ड नहीं चलता। CocoaPods और xcodebuild को macOS चाहिए, इसलिए उस एक कदम के लिए आप Mac उधार लेते हैं। नीचे एक GitHub Actions वर्कफ़्लो है जो यही करता है। हमने इसे 2 अक्टूबर 2026 को चलाया। इसने Xcode 26.6 से React Native 0.87.1 बिल्ड किया।

Windows और Linux पर क्या चलता है

आपका JavaScript और TypeScript कोड, Metro और Jest किसी भी डेस्कटॉप पर चलते हैं। हमारे टेस्ट में, नए बने ऐप का Jest टेस्ट GitHub के ubuntu-24.04 रनर पर पास हुआ, और उसके windows-2025 रनर पर भी। दोनों में Node 22 था। आप दोनों सिस्टम पर Android ऐप भी बिल्ड करके चला सकते हैं। React Native डॉक्स Windows और Linux, दोनों के लिए Android सेटअप समझाते हैं।

iOS के बारे में वही डॉक्स साफ़ बोलते हैं। Windows और Linux के सेटअप पेज पर लिखा है कि native कोड वाले प्रोजेक्ट को iOS के लिए बिल्ड करने को Mac ज़रूरी है। उनका सुझाव Expo Go है। यह डेवलपमेंट के दौरान आपका JavaScript असली iPhone पर चलाता है। इससे स्क्रीन और लॉजिक का काम हो जाता है। पर इससे ऐसा ऐप नहीं बनता जिसे आप शिप कर सकें।

किसे macOS चाहिए

  • pod install। iOS प्रोजेक्ट React Native और उसकी native dependencies को CocoaPods से लाता है। Codegen भी इसी कदम में चलता है।
  • xcodebuild। Xcode और iOS SDK सिर्फ़ macOS के लिए हैं। Apple अपने Xcode system requirements पेज पर Xcode 26.6 के लिए macOS Tahoe 26.2 या उसके बाद का वर्ज़न बताता है।
  • Simulator। यह Xcode के अंदर आता है, इसलिए यह भी सिर्फ़ Mac पर है।
  • Signing और अपलोड। यह हिस्सा Mac के बिना iOS ऐप पब्लिश करने वाली गाइड में है।

हमने जो वर्कफ़्लो चलाया

यह reactnative.dev वाली कमांड से एक नया ऐप बनाता है। यह Linux और Windows पर टेस्ट चलाता है। फिर macos-26 रनर पर iOS बिल्ड करता है। init फ़्लैग React Native CLI डॉक्स से हैं। वे npm चुनते हैं, pod वाला प्रॉम्प्ट छोड़ते हैं, और git सेटअप छोड़ते हैं। इसे .github/workflows/rn-ios.yml पर रखें और Actions टैब से शुरू करें।

name: rn-ios
on: workflow_dispatch
jobs:
  test-linux:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v7
        with:
          node-version: 22
      - run: npx @react-native-community/cli@latest init RNDemo --pm npm --install-pods false --skip-git-init true
      - run: npm test
        working-directory: RNDemo
  test-windows:
    runs-on: windows-latest
    steps:
      - uses: actions/setup-node@v7
        with:
          node-version: 22
      - run: npx @react-native-community/cli@latest init RNDemo --pm npm --install-pods false --skip-git-init true
      - run: npm test
        working-directory: RNDemo
  build-ios:
    runs-on: macos-26
    steps:
      - uses: actions/setup-node@v7
        with:
          node-version: 22
      - run: sudo xcode-select -s /Applications/Xcode_26.6.app
      - run: xcodebuild -version && node -v && ruby -v
      - run: npx @react-native-community/cli@latest init RNDemo --pm npm --install-pods false --skip-git-init true
      - run: node -p "require('react-native/package.json').version"
        working-directory: RNDemo
      - run: bundle install
        working-directory: RNDemo/ios
      - run: bundle exec pod install
        working-directory: RNDemo/ios
      - name: Build for the iOS Simulator (Debug)
        run: |
          xcodebuild -workspace RNDemo.xcworkspace -scheme RNDemo \
            -configuration Debug -sdk iphonesimulator \
            -destination 'generic/platform=iOS Simulator' \
            -derivedDataPath build build
        working-directory: RNDemo/ios
      - name: Build for the iOS Simulator (Release, JS bundled)
        run: |
          xcodebuild -workspace RNDemo.xcworkspace -scheme RNDemo \
            -configuration Release -sdk iphonesimulator \
            -destination 'generic/platform=iOS Simulator' \
            -derivedDataPath build build
        working-directory: RNDemo/ios
      - run: ls -la build/Build/Products/Release-iphonesimulator/RNDemo.app/main.jsbundle && du -sh build/Build/Products/*-iphonesimulator/RNDemo.app
        working-directory: RNDemo/ios

अपनी रिपॉज़िटरी में init वाले कदम की जगह अपने कोड का checkout और उसके packages का install रखें। बाकी सब वैसा ही रहता है। RNDemo की जगह अपने workspace और scheme का नाम डालें।

रन ने क्या प्रिंट किया

ये लाइनें build-ios जॉब के लॉग से कॉपी की गई हैं। पूरे macOS जॉब में 2 मिनट 42 सेकंड लगे।

Xcode 26.6
Build version 17F113
v22.23.2
0.87.1
Pod install took 43 [s] to run
Pod installation complete! There are 87 dependencies from the Podfile and 86 total pods installed.
** BUILD SUCCEEDED **
Welcome to Metro v0.87.1
** BUILD SUCCEEDED **
-rw-r--r--  1 runner  staff  1268567 Oct  2 04:02 build/Build/Products/Release-iphonesimulator/RNDemo.app/main.jsbundle
154M	build/Build/Products/Debug-iphonesimulator/RNDemo.app
 38M	build/Build/Products/Release-iphonesimulator/RNDemo.app

Debug बिल्ड में लगभग 39 सेकंड लगे और Release बिल्ड में लगभग 35। यह तेज़ है, क्योंकि React Native 0.87 पहले से बना हुआ core डाउनलोड करता है। pod install के लॉग में यह साफ़ लिखा था। पुराने वर्ज़न कहीं ज़्यादा native कोड कंपाइल करते हैं, इसलिए वहाँ लंबे बिल्ड की उम्मीद रखें।

दो बार बिल्ड क्यों? Debug ऐप चलते समय अपना JavaScript Metro से लोड करता है। Release बिल्ड JavaScript को ऐप के अंदर main.jsbundle के रूप में पैक करता है, जो यहाँ 1.27 MB है। अगर Release बिल्ड पास हो, तो आपका bundle और native कोड दोनों कंपाइल होते हैं।

इसे हर pull request पर चलाएँ

ऊपर वाला वर्कफ़्लो हाथ से शुरू होता है। iOS की गड़बड़ी को merge से पहले पकड़ने के लिए trigger लाइन बदलें, ताकि यह pull requests पर भी चले:

on:
  pull_request:
  workflow_dispatch:

बिल्ड फ़ेल होने पर लॉग लंबा होता है। हमारा लॉग दो छोटे बिल्ड के लिए 18,000 लाइनों से आगे चला गया। लॉग में "error:" खोजें और पहला नतीजा पढ़ें। बाद की errors अक्सर पहली वाली का ही असर होती हैं। अगर pod install फ़ेल हो, तो पहले Podfile और अपनी native dependencies देखें।

इसका खर्च

GitHub हर जॉब को पूरे मिनट तक ऊपर राउंड करके बिल करता है। हमारा macOS जॉब 3 मिनट का बना। $0.062 प्रति मिनट पर, जो अक्टूबर 2026 में GitHub के रनर प्राइसिंग रेफ़रेंस में दिया रेट है, यह लगभग 19 सेंट होता है। पब्लिक रिपॉज़िटरी स्टैंडर्ड रनर के लिए कुछ नहीं देतीं। हफ़्ते में कुछ बिल्ड के लिए iOS बिल्ड पाने का यह सबसे सस्ता तरीका है।

Expo पर एक और रास्ता है। EAS Build, Expo के क्लाउड में iOS कंपाइल करता है। Free प्लान में हर महीने 15 iOS बिल्ड मिलते हैं, कम प्राथमिकता वाली कतार में। उसके बाद मीडियम iOS बिल्ड $2 का है। यह अक्टूबर 2026 में expo.dev/pricing के अनुसार है।

जहाँ CI काफ़ी नहीं रहता

CI जॉब साबित करता है कि ऐप कंपाइल होता है। वह आपको ऐप दिखा नहीं सकता। सिम्युलेटर बिल्ड सिर्फ़ iOS Simulator में चलता है, जिसे Mac की स्क्रीन चाहिए। जब कोई native module सिर्फ़ iOS पर टूटे, तब आप Xcode खुला चाहते हैं। आप breakpoints चाहते हैं, और ऐसा Simulator जिस पर क्लिक कर सकें। इसके लिए देखें remote Mac के साथ Windows से Xcode इस्तेमाल करना।

होस्टेड रनर भी हर बार खाली शुरू होता है। हर रन Node packages, gems और pods फिर से डाउनलोड करता है। हमारे रन में macOS जॉब के साथ GitHub का एक नोटिस भी था। उसमें लिखा था कि क्षमता की कमी के कारण macOS arm64 जॉब कतार में ज़्यादा देर रुक सकते हैं।

इसके लिए किसे Mac किराए पर नहीं लेना चाहिए

अगर आप हफ़्ते में कुछ ही बार बिल्ड करते हैं, तो होस्टेड रनर या EAS पर रहें। GitHub के बेस रेट पर डेडिकेटेड Mac लगभग 2,242 macOS मिनट प्रति माह पर फ़ायदेमंद होता है। जब आपको स्क्रीन चाहिए, तब भी यह फ़ायदेमंद है। अगर दोनों में से कुछ भी सच नहीं, तो किराए का Mac ऐसा खर्च है जिसकी आपको ज़रूरत नहीं।

अगर आप वह सीमा पार करते हैं, तो यही वर्कफ़्लो self-hosted macOS रनर पर चलता है। runs-on बदलें और xcode-select को अपने Xcode पर सेट करें। Pods और derived data रन के बीच गर्म रहते हैं। M6 प्लान के लिए प्राइसिंग देखें।

अक्सर पूछे जाने वाले सवाल

क्या मैं Windows पर React Native iOS ऐप बिल्ड कर सकता हूँ?

+

आप इसे Windows पर लिख और टेस्ट कर सकते हैं, पर iOS बिल्ड को macOS चाहिए। React Native डॉक्स कहते हैं कि native कोड वाले प्रोजेक्ट को iOS के लिए बिल्ड करने को Mac ज़रूरी है। क्लाउड Mac या CI रनर उस कदम को संभाल लेता है।

क्या मैं Windows पर iOS Simulator चला सकता हूँ?

+

नहीं। Simulator, Xcode के साथ आता है, जो सिर्फ़ macOS पर चलता है। आप remote desktop से किसी remote Mac का Simulator देख सकते हैं। या डेवलपमेंट के दौरान असली iPhone पर Expo Go इस्तेमाल कर सकते हैं।

GitHub Actions पर React Native iOS बिल्ड में कितना समय लगता है?

+

अक्टूबर 2026 के हमारे रन में, नए React Native 0.87.1 ऐप के पूरे macOS जॉब में 2 मिनट 42 सेकंड लगे। इसमें pod install, और Debug व Release दोनों सिम्युलेटर बिल्ड शामिल थे। बड़े ऐप ज़्यादा समय लेते हैं।

क्या Simulator के लिए बिल्ड करने को Apple Developer अकाउंट चाहिए?

+

नहीं। हमारे वर्कफ़्लो ने बिना किसी signing के Simulator के लिए बिल्ड किया। डिवाइस, TestFlight या App Store के लिए ऐप sign करने को पेड Apple Developer Program चाहिए।

संबंधित गाइड