fir提供了很不錯的自動化打包腳本,傳送門如下
https://github.com/FIRHQ/fir-cli/blob/master/README.md
不過實戰(zhàn)的時候,會遇到一些坑,這里整理一下經(jīng)驗
最簡單的打包命令如下:
fir build_ipa
這樣會自動打包ipa,不過會輸出到一個臨時目錄,如
Results at '/var/folders/ky/syfrlzpn2bb8fmn5pr51tstm0000gp/T/d20160306-64805-akfs4h/1457249301.ipa'
對于一個CI平臺來說,這樣的存放路徑毫無意義,所以一般會這樣寫
fir build_ipa -o ./
這樣就會把ipa拷貝到當前目錄,命名規(guī)則是bundledisplayname+bundleversion+build號,還是挺不錯的命名方式。
接下來我們考慮一下,如果是使用了Pod的項目,需要怎么處理:
pod install;
fir build_ipa -w workspace路徑 -C release -S scheme名字
以上命令很容易理解,先把pod需要的東西配置好,然后用自動生成的workspace來打包。
遺留一個問題,如果是一個全新的項目,第一次pod install以后是不會自動生成scheme的,必須要用xcode顯式打開一下,目前還沒解決這個問題
到這里還是可以滿足需求的,不過我們還要考慮更通用的CI場景。對于CI所在的服務(wù)器來說,應(yīng)該是預(yù)先不知道開發(fā)者賬號密碼的(業(yè)務(wù)解耦)。這樣的話,要求新開CI任務(wù)的時候,業(yè)務(wù)方上傳provision文件和p12文件即可。
所以如果在這種場景下,以上的命令會報錯
Code Sign error: No matching provisioning profiles found: No provisioning profiles with a valid signing
fir的團隊顯然考慮到了這種場景,提供了一個額外的參數(shù):
-f, [--profile=PROFILE] # Set the export provisioning profile
然而,如果你直接使用的話,xcode7的環(huán)境下應(yīng)該會報如下錯誤:
xcodebuild: error: The flag -exportArchive is required when specifying -exportProvisioningProfile.
xcodebuild: error: The flag -archivePath is required when specifying -exportArchive.
xcodebuild的幫助文檔是查不到這個參數(shù)的,我隱隱覺得不妙了。不過還是根據(jù)上述提示加上了-exportArchive和-archivePath,這下fir不干了,直接跳到了幫助界面,表示不認識這兩個參數(shù)。
好吧,幸好fir的腳本是開源的,如此小bug是不是修改一下build_ipa這個函數(shù)就好了?然而為了保險,我還是先轉(zhuǎn)換成命令行運行一下,然后就收到了如此的錯誤:
xcodebuild: error: The flag -scheme cannot be specified along with -exportArchive.
╮╯_╰╭搞毛,原來想用exportArchive就不能指定scheme,但是想要用workspace編譯又要指定scheme,死循環(huán)了咋辦?!
好的,為了理清思路,我們還是先搞清楚,exportArchive,exportProvisioningProfile之類的參數(shù)應(yīng)該怎么用,然后就會找到這篇文章
http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/
簡單來說這個外國人的意思是這樣的,先用archive命令把做一次歸檔,然后再用exportArchive的方式給二進制文件指定provision文件簽名。
思路是簡單的,可惜現(xiàn)實還是殘酷的,上面已經(jīng)提到了,如果本地沒有簽名文件的話,xcodebuild的最后一步,會提示簽名失敗。又死循環(huán)了?!
這個時候google起到了關(guān)鍵的作用,萬能的SO上面,有水友已經(jīng)解決了這個問題
http://stackoverflow.com/questions/11034133/building-ios-applications-using-xcodebuild-without-codesign
黑科技宏定義:CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO,讓你解決打包簽名的困擾。
所以,如果想用fir打一個無簽名的包,可以如下指定
fir build_ipa -w workspace路徑 -C release -S scheme名字 CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
如此就會輸出一個無簽名的ipa文件,解壓發(fā)現(xiàn)Payload目錄下,并沒有_CodeSignature目錄。
接下來的思路就很明確了,我們再補上重簽名流程即可,推薦這篇文章的教程,有附上可用的腳本
http://www.ifun.cc/blog/2014/02/22/ios-appzhong-xin-qian-ming-fang-fa-jie-shao/
最后再補一下,如果想要做到更完美,可以自行解析provision文件里面的TeamName和TeamIdentifier,然后再丟給resign.sh處理,這樣resign.sh也不需要業(yè)務(wù)方提供了。