ویرگول
ورودثبت نام
Mohsen Dehghani
Mohsen Dehghani
خواندن ۶ دقیقه·۴ سال پیش

خروجی گرفتن ipa از طریق codemagic.io مخصوص پروژه react-native

اگر شما هم مثل من از مک بوک قدیمی استفاده میکنید، ممکنه به دلیل بروز نشدن سیستم عامل و به تبع اون، برنامه 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: &quotdadhesab&quot XCODE_SCHEME: &quotdadhesab.sibapp&quot node: latest scripts: - npm install - echo &quotsdk.dir=$HOME/programs/android-sdk-macosx&quot > &quot$FCI_BUILD_DIR/android/local.properties&quot # - | # build Android # cd android # ./gradlew assembleDebug - | # build iOS cd ios pod install xcodebuild build -workspace &quot$XCODE_WORKSPACE.xcworkspace&quot -scheme &quot$XCODE_SCHEME&quot CODE_SIGN_IDENTITY=&quot&quot 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: &quotdadhesab.xcworkspace&quot # YOUR WORKSPACE NAME HERE XCODE_SCHEME: &quotdadhesab.sibapp&quot # 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=&quot$HOME/Library/MobileDevice/Provisioning Profiles&quot mkdir -p &quot$PROFILES_HOME&quot PROFILE_PATH=&quot$(mktemp &quot$PROFILES_HOME&quot/$(uuidgen).mobileprovision)&quot echo ${FCI_PROVISIONING_PROFILE} | base64 --decode > &quot$PROFILE_PATH&quot echo &quotSaved provisioning profile $PROFILE_PATH&quot - 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 &quot$FCI_BUILD_DIR/ios/$XCODE_WORKSPACE&quot --scheme &quot$XCODE_SCHEME&quot 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 و طرز استفاده میتونید مطالب اشاره شده در همین صفحه و مستندات مربوطه رو مطالعه کنید و اگر سوالی داشتید بپرسید.


reactnativexcodeiosipacodemagic
وکیل سابق، برنامه نویس، عکاس، ویولونیست، دوستدار حیوانات
شاید از این پست‌ها خوشتان بیاید