公司搭建了一套基于jenkins的持續(xù)集成環(huán)境,我們一個基于cocos2d-x引擎的手游項目的打包流程也集成在這個環(huán)境里,從此打包也確實方便了很多,在管理后臺里選上對應(yīng)參數(shù),打包按鈕一按,等上個10來分鐘,熱乎乎的包(IOS&ANDROID&WIN32)就出來了,還會自動生成二維碼...
一哥們把mac升級到了10.12.4,對應(yīng)xcode版本也從7.x升級到了8.3,導(dǎo)致打包流程出了一大堆問題
-
問題1:

我們打包時會使用luajit,用到了php模塊,由于mac升級,自帶的php版本也升級了,導(dǎo)致ZipArchive的某些api有變化,比如我們在open一個文件時是這么調(diào)用的
$zip->open($zipfile, ZIPARCHIVE::OVERWRITE | ZIPARCHIVE::CM_STORE)
當文件不存在的時候,還是會open成功,但$zip對象不會被初始化(老版本是會初始化的),后來只能修改如下:
$zip->open($zipfile, ZIPARCHIVE::CREATE |ZIPARCHIVE::OVERWRITE
| ZIPARCHIVE::CM_STORE)
問題解決
-
問題2:
xcrun:error:unable to find utility"PackageApplication",nota developer
toolorinPATHError:Errorcode72forcommand:xcrunwithargs:-sdk,iphoneos,
PackageApplication,-v
原來cocos2d提供的python打包腳本是使用xcodebuild + xcrun的PackageApplication打包,但在xcode8.3已經(jīng)被棄用了,新的方法是使用archive和exportArchive來打包
下圖是我對打包腳本(project_compile.py)的修改:

這其中還涉及到獲取描述文件UUID的方法,參照:https://my.oschina.net/ioslighter/blog/494342,以及exportOptionsPlist文件的格式
-
問題3:
xcodebuild: error: The project named "ACTGame" does not contain a scheme
named "ACTGame".
The "-list" option can be used to find the names of the schemes in the project.
在新的打包命令中,有指定scheme參數(shù),按照提示,在項目的xcode工程目錄輸入xcodebuild -list
發(fā)現(xiàn)有ACTGame這個scheme,而且直接xcode打包沒問題,百思不得其解,后來去打包機的工程目錄查看scheme,發(fā)現(xiàn)沒有ACTGame這個scheme,后來經(jīng)過查詢得知,需要打開工程->Product->Scheme->Manage Schemes,把要打包的scheme的shared屬性勾上(如果沒有對應(yīng)的scheme,點擊右上角的Autocreate Schemes Now自動生成對應(yīng)的scheme),這時會在xcodeprj文件夾xcshareddata目錄中生成ACTGame.xcsheme文件,把這個文件提交到打包機,問題解決。
-
問題4:
=== BUILD TARGET ACTGame OF PROJECT ACTGame WITH CONFIGURATION Release ===
Check dependencies
Provisioning profile "gamepub_ds_delopment" doesn't include the
currently selected device "kedlly's iPhone6".
Code signing is required for product type 'Application' in SDK 'iOS 10.3'
** ARCHIVE FAILED **
這個純粹是開發(fā)人員做死,把iphone手機連接到了打包機上,然后對應(yīng)的開發(fā)證書又沒有把他的手機uuid添加進去,手機一拔,問題解決
-
問題5:
打出來的包在ios9以后的機器上無法訪問http地址,這個參考App Transport Security (ATS)
-
問題6:

??打出來的包沒有開通push權(quán)限
這是因為在Xcode8之后,如果需要使用Push Notifications的功能,需要勾選Capabilities -> Push Notifications為YES,否則進行遠程推送就會有問題,并且會收到蘋果發(fā)來的這封郵件。另外push證書需要在appid把push權(quán)限打開后導(dǎo)出,否則在打包時會報錯。
以上就是我在從7升級xcode8.3以后遇到的坑,在此作個記錄,也希望能幫到其他人,少走彎路。