實戰(zhàn)fir腳本打ipa包

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ù)方提供了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容