اگر شما هم مثل من از مک بوک قدیمی استفاده میکنید، ممکنه به دلیل بروز نشدن سیستم عامل و به تبع اون، برنامه xcode، برای بیلد کردن پروژه های آی او اس با فریم ورک ری اکت نیتیو یا گرفتن خروجی ipa برای ارسال به اپ استور های داخلی مثل سیب اپ دچار مشکل شده باشید. در مورد خاص من، زمانی این اتفاق افتاد که پکیج react-native-firebase رو به نسخه ۶ آپدیت کردم و از اون زمان به بعد بیلد کردن قسمت ios پروژه ری اکت نیتیو با خطایی مواجه میشد که قابل رفع نبود.
با کمی جستجو در گوگل با یادداشت میلاد احمدی و codemagic آشنا شدم و سعی کردم مراحلی که توضیح داده شده رو انجام بدم.
لازم به ذکر هست که بر خلاف پروژه های فلاتر، توی سایت codemagic برای تنظیم فایل yaml. برای پروژه های ری اکت نیتیو، رابط گرافیکی خاصی در نظر گرفته نشده و صرفا یک تمپلت پیش فرض پیشنهاد میشه.
بعد از چند مرتبه آزمون و خطا متوجه شدم که اگر مایل باشید صرفا یک خروجی .app امضا (ساین) نشده برای آی او اس از پروژه مورد نظرتون دریافت کنید میتونید فایل yaml. رو مثل نمونه زیر تکمیل کنید، به root پروژه پوش کنید و مراحل بیلد گرفتن رو ادامه بدید:
# Check out https://docs.codemagic.io/getting-started/building-a-react-native-app/ for more information # Please review and update values in curly braces workflows: react-native: name: React Native App environment: vars: XCODE_WORKSPACE: "dadhesab" XCODE_SCHEME: "dadhesab.sibapp" node: latest scripts: - npm install - echo "sdk.dir=$HOME/programs/android-sdk-macosx" > "$FCI_BUILD_DIR/android/local.properties" # - | # build Android # cd android # ./gradlew assembleDebug - | # build iOS cd ios pod install xcodebuild build -workspace "$XCODE_WORKSPACE.xcworkspace" -scheme "$XCODE_SCHEME" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO artifacts: # - android/app/build/outputs/**/*.apk - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.dSYM
خروجی .app قابل دانلود حجم نسبتا زیادی خواهد داشت و میتونید با استفاده از این روش اون رو تبدیل کنید به فایل ipa و برای اپ استور های داخلی ارسال کنید.
تا اینجای داستان نگرانی از بابت امکان بدست اوردن خروجی ipa برطرف شد ولی سوالی که هنوز برای من وجود داشت چگونگی دریافت مستقیم خروجی با فرمت .ipa و از اون مهمتر، امکان تست کردن فایل ipa روی دیوایس قبل از ارسال و انتشار بود!
همون طور که میدونید برای اجرای فایل ipa روی دیوایس مشخص اپل باید ابتدا اقدام به امضا (ساین) به وسیله سرتیفیکیت و provisioning profile مربوط به دیوایس ثبت شده خودتون کنید و برای این منظور تصمیم گرفتم از سرتیفیکیت و پروفایل developing که بصورت خودکار بوسیله xcode ایجاد شده استفاده کنم.
برای بدست اوردن فایل سرتیفیکیت با پسوند .p12 از این روش و برای بدست اوردن پروفایل با پسوند .mobileprovision از این روش استفاده کردم.
بعد از چند بار آزمون و خطا و fail شدن بیلدها، با استفاده از تمپلت پایین تونستم خروجی کم حجم ipa و قابل نصب روی دستگاه تولید کنم. دقت کنید که باید مقادیر سرتیفیکیت ها و پروفایل ها تون بوسیله دستور cat <path to your provisioning profile or certificate> | base64 | pbcopy در ترمینال انکریپت شده باشد و در داخل تمپلیت پایین در قسمت Encrypted() کپی پیست شده باشد.
workflows: react-native-ios: name: React Native iOS # max_build_duration: 60 # instance_type: mac_pro environment: vars: XCODE_WORKSPACE: "dadhesab.xcworkspace" # YOUR WORKSPACE NAME HERE XCODE_SCHEME: "dadhesab.sibapp" # THE NAME OF YOUR SCHEME HERE FCI_CERTIFICATE: Encrypted() FCI_CERTIFICATE_PASSWORD: Encrypted() FCI_PROVISIONING_PROFILE: Encrypted() node: latest xcode: latest cocoapods: default # triggering: # events: # - push # - tag # - pull_request # branch_patterns: # - pattern: develop # include: true # source: true scripts: - name: Install npm dependencies script: npm install - name: Install CocoaPods dependencies script: | cd ios && pod install - name: Set up keychain to be used for codesigning using Codemagic CLI 'keychain' command script: keychain initialize - name: Set up Provisioning profiles from environment variables script: | PROFILES_HOME="$HOME/Library/MobileDevice/Provisioning Profiles" mkdir -p "$PROFILES_HOME" PROFILE_PATH="$(mktemp "$PROFILES_HOME"/$(uuidgen).mobileprovision)" echo ${FCI_PROVISIONING_PROFILE} | base64 --decode > "$PROFILE_PATH" echo "Saved provisioning profile $PROFILE_PATH" - name: Set up signing certificate script: | echo $FCI_CERTIFICATE | base64 --decode > /tmp/certificate.p12 keychain add-certificates --certificate /tmp/certificate.p12 --certificate-password $FCI_CERTIFICATE_PASSWORD # - name: Increment build number # script: cd ios && agvtool new-version -all $(($BUILD_NUMBER +1)) - name: Set up code signing settings on Xcode project script: xcode-project use-profiles - name: Build ipa for distribution script: xcode-project build-ipa --workspace "$FCI_BUILD_DIR/ios/$XCODE_WORKSPACE" --scheme "$XCODE_SCHEME" artifacts: - build/ios/ipa/*.ipa - /tmp/xcodebuild_logs/*.log - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.dSYM publishing: email: recipients: - your-email@gmail.com
برای نصب فایل .ipa روی دستگاه اپل میتونید از این روش استفاده کنید.
برای آشنایی بیشتر با codemagic و طرز استفاده میتونید مطالب اشاره شده در همین صفحه و مستندات مربوطه رو مطالعه کنید و اگر سوالی داشتید بپرسید.