前言
由于公司需要,所有項目都必須上CI CD,所有就有了接下來的Ios CI配置的坎坷之路。IOS CI的資料和并不多,因為官方也有不錯的配套工具。例如直接用xocde來打包,如果內(nèi)部流程簡單,沒有多個測試環(huán)境,發(fā)布頻率較小的話,這無疑是最好的選擇。還有就是macOS 版 Transporter App,您可以便捷地將 App 上傳至 App Store Connect 以便在 App Store 上分發(fā)。除了上傳構(gòu)建版本,您還可以上傳元數(shù)據(jù)包,查看交付進(jìn)度(包括警告、錯誤和交付日志)以及交付歷史,但是對于多環(huán)境的配置的切換和版本號的設(shè)置方面還需手動,這樣就還是有出錯的機會,所以就有了今天我們要說的CICD工具。目前最主流的CICD工具是Jenkins,他擁有著龐大的社區(qū)共享的插件酷,耗不夸張的說,CICD就約等于Jenkins,但不幸的是我們公司用的是一個叫Teamcity的工具,對IOS的交付來說并不太友好,所有很多腳本都是需要自己寫,就有了下面的腳本教程。或許腳本內(nèi)容大家不需要,但是我覺得步驟和流程方面還是有一定參考價值的,這里主要是通過App store里的TestFlight來做測試環(huán)境的,正式的話是直接發(fā)布到App store,至于TestFlight這里就不普及,可以自行去了解,正式發(fā)布到App store的話這邊還沒發(fā)布到正式,所以無法進(jìn)行過多講解。
步驟
1.Set Version(修改project.pbxproj文件或Info.plist文件的版本號)
一般CICD工具都是會生成一個構(gòu)建的版本號的,我們可以拿這個版本號來當(dāng)我們App版本號,其實就是設(shè)置project.pbxproj文件或Info.plist文件的版本號后再進(jìn)行編譯,筆者這邊是設(shè)置了project.pbxproj文件,具體腳本如下:
sed -i "" "s/AppBuildVersion/%Version%/g" project.pbxproj
注:這里的%Version%是CICD工具的一個變量
2.設(shè)置項目配置
這里也是通過 sed -i命令行進(jìn)行修改配置文件,由于每個人的配置文件都可能不同,因為我這邊用的是React Ntive來開發(fā)的,跟原生還是有一定差異, 所以這里就不提供腳本了,大概搜一下sed -i命令,幾分鐘就能寫出該基本。
3.Install Mobileprovision(安裝App描述文件)
每個IOS APP都會有一個自己的描述文件的,里面記錄了你這App的一些基礎(chǔ)信息和可用安裝APP的設(shè)備(開發(fā)者描述文件)以及有權(quán)限編譯和分發(fā)APP的證書,詳細(xì)還需自己自行了解,這里就不再贅述太多。
我們這邊的話需要安裝兩個描述文件,一個是開發(fā)者描述文件(編譯時依賴)與發(fā)布描述文件(推送至App store Connetc時依賴),這兩個文件可以去開發(fā)者平臺創(chuàng)建后下載下來,具體安裝腳本如下:
DevUuid=`grep UUID -A1 -a dev_profile.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
cp dev_profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$DevUuid.mobileprovision
ReleaseUuid=`grep UUID -A1 -a release_profile.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
cp release_profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$ReleaseUuid.mobileprovision
4.Security Import(證書導(dǎo)入)
證書這里的話也是有開發(fā)者證書與發(fā)布證書的說法,這里跟描述文件那里比較相似,需要將兩份證書導(dǎo)入進(jìn)去后才有權(quán)限進(jìn)行編譯和APP分發(fā),具體腳本如下:
security import dev.p12 -k ~/Library/Keychains/login.keychain -P %DevCertificatePassword%
security import release.p12 -k ~/Library/Keychains/login.keychain -P %ReleaseCertificatePassword%
5.Security Unlock Keychain(證書解鎖)
CICD Runner由于Mac Security 的ssh遠(yuǎn)程認(rèn)證出現(xiàn)問題,需要輸入Mac系統(tǒng)用戶密碼才可以獲取到證書權(quán)限,具體腳本如下:
security unlock-keychain -p %Password% ~/Library/Keychains/login.keychain
6.Archive(打包)
這里唯一注意的是要設(shè)置一下打包完成后包的存放路徑,之后導(dǎo)出Ipa的時候要用到,腳本如下:
xcodebuild -workspace ios/DemoApp.xcworkspace -scheme DemoApp clean archive -allowProvisioningUpdates -archivePath CICD/ios/build/DemoApp.xcarchive
7.Export Archive As Ipa(將打包的xcarchive導(dǎo)出為ipa文件)
這里也是要設(shè)置下導(dǎo)出Ipa的路徑,進(jìn)行推送時要用到,腳本如下:
xcodebuild -exportArchive -archivePath CICD/ios/build/DemoApp.xcarchive -exportPath CICD/ios/build -exportOptionsPlist CICD/ios/test.plist -allowProvisioningUpdates
8.Distribute App(將ipa文件推送上傳至app store準(zhǔn)備分發(fā))
這里先進(jìn)行Ipa的驗證,通過之后就可以把包推送到App store Connetc了,腳本如下:
xcrun altool --validate-app -f DemoApp.ipa -t ios -u DeveloperAppleId -p DeveloperPassword
xcrun altool --upload-app -f DemoApp.ipa -t ios -u DeveloperAppleId -p DeveloperPassword