1. 程式人生 > 實用技巧 >React Native iOS 自動打包+釋出歷險記(未完待續)

React Native iOS 自動打包+釋出歷險記(未完待續)

一、配置環境
iOS在環境這塊比安卓的要簡單一些,不用配置環境變數,只需要準備一臺mac(原先想用linux來搞,被勸退)。安裝或升級到xcode最新版。
測試下使用xcode工具打離線包,專案先初始化好,然後按標準流程打包即可:
1、從develop.appstore下載並匯入到本地證書;
2、還是從develop.appstore生成profile並下載下來;
3、在網上隨便找一篇教程照著做就行了,這裡不詳述。

二、命令打包

cd專案的ios目錄下:
第1步:

react-native bundle --entry-file index.js --platform ios --dev false
--bundle-output ./release_ios/main.jsbundle --assets-dest ./release_ios

第2步:

xcodebuild archive -workspace AwesomeProject.xcworkspace -scheme AwesomeProject -configuration Release -archivePath archive/release.ipa 
CODE_SIGN_IDENTITY=./cert/release.p12 PROVISIONING_PROFILE=./cert/testappprofile3.mobileprovision

第3步:

xcodebuild -exportArchive -archivePath archive/release.ipa.xcarchive -exportPath archive/release -exportOptionsPlist AwesomeProject/Adhoc.plist

所有的步驟都基於xcode工具已經能正常匯出ipa包的前提下的坑!xcode工具匯出的坑解決時間短,就不記錄了。

缺少第1步,直接執行第2步會報錯(這一步卡了2天):

error SHA-1 for file /Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/lib/polyfills/require.js (/Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/lib/polyfills/require.js) is not computed. Run CLI with --verbose flag for
more details. ReferenceError: SHA-1 for file /Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/lib/polyfills/require.js (/Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/lib/polyfills/require.js) is not computed at DependencyGraph.getSha1 (/Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/node-haste/DependencyGraph.js:263:13) at /Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/DeltaBundler/Transformer.js:211:26 at Generator.next (<anonymous>) at asyncGeneratorStep (/Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/DeltaBundler/Transformer.js:46:24) at _next (/Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/DeltaBundler/Transformer.js:66:9) at /Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/DeltaBundler/Transformer.js:71:7 at new Promise (<anonymous>) at /Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/DeltaBundler/Transformer.js:63:12 at Transformer.transformFile (/Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/DeltaBundler/Transformer.js:236:7) at /Users/yangdejian/desktop/work/app/AwesomeProject/node_modules/metro/src/Bundler.js:87:34 …… …… ** ARCHIVE FAILED ** The following build commands failed: PhaseScriptExecution Bundle\ React\ Native\ code\ and\ images /Users/yangdejian/Library/Developer/Xcode/DerivedData/AwesomeProject-dagximgtjqvkfdhiqllocbioygbe/Build/Intermediates.noindex/ArchiveIntermediates/AwesomeProject/IntermediateBuildFilesPath/AwesomeProject.build/Release-iphoneos/AwesomeProject.build/Script-00DD1BFF1BD5951E006B06BC.sh


第3步,不能直接用專案下的Info.plist(ad-hoc和appstore包的配置不一樣),會報錯:(參考:https://www.jianshu.com/p/4281908243a3 )

Error Domain=IDECodesignResolverErrorDomain Code=1 "No signing certificate "iOS Development" found" UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedRecoverySuggestion=No "iOS Development" signing certificate matching team ID "G758H44A7X" with a private key was found., IDEProvisioningError_UserInfoKey_IDEProvisioningErrorSpecifier=iOS Development, NSLocalizedDescription=No signing certificate "iOS Development" found, IDEProvisioningError_UserInfoKey_IDEProvisioningErrorPlatform=com.apple.platform.iphoneos, IDEProvisioningError_UserInfoKey_IDEProvisioningErrorAction=5, IDEProvisioningError_UserInfoKey_IDEProvisioningErrorTeam=<IDEProvisioningBasicTeam: 0x7fc78b2f4ac0; teamID='G758H44A7X', teamName='(null)'>}
error: exportArchive: No signing certificate "iOS Development" found

因為不知道怎麼構建這個plist檔案,最後網上找到辦法,直接xcode匯出來,然後複製匯出的ExportOptions.plist過來(這一步也卡了3-4個小時)

【TODO】三、編寫打包指令碼(併發布離線測試包)

【TODO】四、jenkins配置測試

【TODO】五、自動上架appstore