明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

react-native如何完成自動(dòng)打包?react-native自動(dòng)打包的方法

[摘要]本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于react-native如何實(shí)現(xiàn)自動(dòng)打包?react-native自動(dòng)打包的方法,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。你是否也在幻想寫(xiě)完代碼后,無(wú)需打開(kāi)xcode和android studio,只要執(zhí)行一個(gè)shell腳本,就能把a(bǔ)ndroid...
本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于react-native如何實(shí)現(xiàn)自動(dòng)打包?react-native自動(dòng)打包的方法,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

你是否也在幻想寫(xiě)完代碼后,無(wú)需打開(kāi)xcode和android studio,只要執(zhí)行一個(gè)shell腳本,就能把a(bǔ)ndroid和ios都打包出來(lái)?而且自動(dòng)幫你傳到蒲公英和App Store,接著產(chǎn)品自動(dòng)去下載測(cè)試。而你~~~直接去喝咖啡了。

注意:本篇僅講述如何用自動(dòng)腳本處理,所以已經(jīng)假設(shè)看官們已經(jīng)能正常手動(dòng)打包。若有更多繁枝細(xì)節(jié),則需要另開(kāi)篇幅。

準(zhǔn)備材料

一臺(tái)macos主機(jī)+顯示器,比如:mac-mini

自動(dòng)構(gòu)建工具,比如:gitlab-runner、travis-ci、jenkins

蘋(píng)果開(kāi)發(fā)者認(rèn)證

macos主機(jī)需作為構(gòu)建工具的節(jié)點(diǎn),并且需要安裝如下的軟件或操作:

git

xcode 9.4+

xcode -> 設(shè)置 -> accounts -> 添加蘋(píng)果公司認(rèn)證或者個(gè)人認(rèn)證所用的app_id

android studio

android sdk

java jdk 8

注意:如果你不想搞構(gòu)建平臺(tái),只想簡(jiǎn)簡(jiǎn)單單地,那么你可以把下面的那么多代碼整合成一個(gè)shell腳本,然后在自己的電腦里執(zhí)行。

打包android

cd android
rm -rf build/ app/build/
./gradlew assembleRelease

最后的apk文件在:android/app/build/outputs/apk/app-release.apk

打包ios

先構(gòu)建基礎(chǔ)包app

cd ios
# 必須先創(chuàng)建目錄
mkdir -p build
rm -rf build/archive.xcarchive build/ipa-*

# 獲取目錄名
project_list=`ls   grep .xcodeproj`
project_name=${project_list%%.*}

# 打包出app
# 這和你點(diǎn)擊 xcode -> Product -> Archive 是一樣的效果的。
xcodebuild clean
xcodebuild archive \
  -project ./${project_name}.xcodeproj \
  -scheme ${project_name} \
  -configuration Release \
  -archivePath ./build/archive.xcarchive

接著我們需要把a(bǔ)pp導(dǎo)出為ipa格式,這樣才能上傳到App Store或者測(cè)試平臺(tái)比如:蒲公英 、 fir.im

傳到App Store需要導(dǎo)出正式的ipa包,而傳到蒲公英需要使用測(cè)試ipa包(ad-hoc),所以需要執(zhí)行兩遍

cd ios

# 正式ipa包
xcodebuild -exportArchive \
    -archivePath ./build/archive.xcarchive \
    -exportPath ./build/ipa-app-store \
    -exportOptionsPlist ./exportOptions/app-store.plist \
    -allowProvisioningUpdates
    
# 測(cè)試ipa包
xcodebuild -exportArchive \
    -archivePath ./build/archive.xcarchive \
    -exportPath ./build/ipa-ad-hoc \
    -exportOptionsPlist ./exportOptions/ad-hoc.plist \
    -allowProvisioningUpdates

上面編譯肯定是不通過(guò)的,因?yàn)槟闳鄙賰蓚(gè)文件app-store.plistad-hoc.plist。這個(gè)你自己其實(shí)能找到,那就是在xcode里打包并Export出來(lái)的文件夾里,都會(huì)有一個(gè)ExportOptions.plist文件

298157778-5b684528d544f_articlex.png
根據(jù)你在Export時(shí)選擇的是App Store 還是 Ad Hoc,分別復(fù)制進(jìn)項(xiàng)目exportOptions/app-store.plistexportOptions/ad-hoc.plist

上傳蒲公英

筆者用的蒲公英,fir的看官自己去找

PGY_API_KEY=你的api_key
PGY_HOST=https://www.pgyer.com/apiv2/app/upload

# ios
IPA=`ls ./ios/build/ipa-ad-hoc/*.ipa`
curl \ 
    --form "file=@$IPA" \
    --form "_api_key=$PGY_API_KEY" \
    $PGY_HOST
    
# android
curl \ 
    --form "file=@./android/app/build/outputs/apk/app-release.apk" \
    --form "_api_key=$PGY_API_KEY" \
    $PGY_HOST

上傳AppStore

其實(shí)是先上傳到 appstoreconnect.apple.com,和你在xcode里點(diǎn)擊Upload To App Store是一樣的

先驗(yàn)證是否可以上傳

APP_STORE_ACCOUNT=證書(shū)創(chuàng)建者賬號(hào)
APP_STORE_PASSWORD=密碼
IPA=`ls ./ios/build/ipa-app-store/*.ipa`

/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool \
    --validate-app \
    --file "$IPA" \
    --type ios \
    --username $APP_STORE_ACCOUNT \
    --password $APP_STORE_PASSWORD

驗(yàn)證成功的話,你才能上傳,否則上傳會(huì)失敗的,不用浪費(fèi)時(shí)間

APP_STORE_ACCOUNT=證書(shū)創(chuàng)建者賬號(hào)
APP_STORE_PASSWORD=密碼
IPA=`ls ./ios/build/ipa-app-store/*.ipa`

# xcode臨時(shí)生成的目錄,不刪除可能導(dǎo)致上傳到appStore時(shí)失敗
rm -rf ~/.itmstransporter/ ~/.old_itmstransporter/

# 開(kāi)始上傳
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool \
    --upload-app \
    --file "$IPA" \
    --type ios \
    --username $APP_STORE_ACCOUNT \
    --password $APP_STORE_PASSWORD

上傳android

從筆者的研究來(lái)看,僅小米應(yīng)用的上傳有提供接口,其他應(yīng)用平臺(tái)都要手動(dòng)上傳。

注意事項(xiàng):

1、每個(gè)節(jié)點(diǎn)機(jī)器上都需要生成一個(gè)certificate。你需要手動(dòng)生成,或者利用xcode自動(dòng)幫你生成。這一步不做無(wú)法打包ios
2、前面幾次打包,mac會(huì)有輸入密碼的提示,需要及時(shí)輸入,并務(wù)必點(diǎn)擊按鈕始終允許
3、如果用了gitlab-runner,那么在.gitlab-ci.yml中用 alias altool=xx將無(wú)效,即無(wú)法識(shí)別altool,不知為何.
4、ios打包一定要用macos系統(tǒng),嘗試用linux將得不償失。android打包倒是可以用linux,但也麻煩的要死,所以為什么不和ios一起呢?
5、如果macos作為自動(dòng)構(gòu)建的子節(jié)點(diǎn),那么記得做一個(gè)開(kāi)機(jī)啟動(dòng)腳本start.sh,并把腳本加入用戶管理的啟動(dòng)項(xiàng)。這個(gè)sh文件需要右鍵打開(kāi)顯示簡(jiǎn)介,接著把打開(kāi)方式設(shè)置為終端才行

1495684574-5b69047a6e75b_articlex.png

2532800737-5b6904a9b2e7c_articlex.png

相關(guān)文章推薦:

HTML中元信息meta標(biāo)記屬性的分析(附代碼)

關(guān)于高德地圖WEB版基礎(chǔ)控件的展示

以上就是react-native如何實(shí)現(xiàn)自動(dòng)打包?react-native自動(dòng)打包的方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


網(wǎng)站建設(shè)是一個(gè)廣義的術(shù)語(yǔ),涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。