本機(jī):Mac Serria,Xcode8
參考文章:
- 使用python打包:http://www.reibang.com/p/1229476fbce4
- 使用shell腳本麦向,自動(dòng)打包:http://www.reibang.com/p/bd4c22952e01
不想看這些,可以直接滑到最后的配置總結(jié)
使用文章1的方式(xcodebuild,xcrun)進(jìn)行打包或者腳本調(diào)用客叉,build success诵竭,但是無(wú)法打包
使用文章2的方式(xcodebuild archive ,exportArchive,exportOptionsPlist)成功了,并且包大小與之前使用Xcode打出的包大小完全一致(根據(jù)文章2的各打包方式分析兼搏,由此猜測(cè)是Xcode的因素)卵慰,但還是命令行一步步來(lái),麻煩
于是佛呻,就想著把兩個(gè)文章結(jié)合起來(lái)裳朋,也就是說(shuō)修改autobuild.py腳本,使用xcodebuild archive等命令打包吓著,代碼可前往autoArchive下載使用鲤嫡,可打adhoc包和AppStore包并直接上傳蒲公英或者AppStore。
執(zhí)行python命令行需要的配置夜矗,即執(zhí)行過(guò)程中遇到的問(wèn)題:
- autobuild.py執(zhí)行需要
最新版python3
泛范,可以去官網(wǎng)下載,下載安裝之后可以使用which python3
查看安裝地址。也可以通過(guò)homebrew安裝brew install python
.
//更新python后運(yùn)行報(bào)錯(cuò)
File “autobuild.py”, line 6, in
import requests
ImportError: No module named requests
-
python中HTTP處理用到了
requests
紊撕,如果之前未安裝過(guò)罢荡,需要安裝一下,安裝方式如下方式一:先安裝pip,再安裝requests
sudo easy_install pip
sudo pip install requests
使用此種方法对扶,如果還是無(wú)法調(diào)用requests区赵,需修改系統(tǒng)的PYTHONPATH,將PYTHONPATH 指向requests的路徑
export PYTHONPATH=$PYTHONPATH:./requests(絕對(duì)路徑)(未成功浪南,沒(méi)仔細(xì)研究)
//我是從github下載源碼笼才,然后嵌入到python包里
cd ./requests (路徑直接拖上來(lái))
python3 setup.py install
-
再記下python縮進(jìn)錯(cuò)誤
python的代碼對(duì)縮進(jìn)方式非常嚴(yán)格,tab和空格不可混用,遇到IndentationError就要檢查下自己的縮進(jìn)络凿,當(dāng)然一般是看不出來(lái)什么的骡送,所以我都是把整段代碼重敲一遍,就OK了絮记。敲黑板:一定要注意摔踱,不要隨便用xcode打開(kāi)python做改動(dòng),一不小心就把縮進(jìn)弄錯(cuò)了怨愤,查看修改保存都用編輯器派敷。
最后,一行代碼,打包上傳蒲公英篮愉,完美執(zhí)行腐芍,哈哈哈,撒花
更厲害的python:http://www.2cto.com/kf/201312/262436.html
使用plistBuddy
管理plist文件
exportArchive需要配置的plist文件可以使用手動(dòng)打包導(dǎo)出的文件夾內(nèi)的exportOption.plist(已自動(dòng)生成的配置)
由于plistBuddy不在默認(rèn)path中所以必須使用絕對(duì)路徑調(diào)用,加入-c否則會(huì)進(jìn)入人機(jī)交互模式不會(huì)執(zhí)行后面的命令试躏。
可以使用-h查看使用信息
/usr/libexec/PlistBuddy -h
舉例:修改bundleVersion
/usr/libexec/PlistBuddy -c 'Set :CFBundleVersion 1991’ /xxx.plist
提交到開(kāi)發(fā)者中心
altoolPath="/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
${altoolPath} --validate-app -f ./xxx.ipa -u username -p password --output-format xml >>
${altoolPath} --upload-app -f ./xxx.ipa -u username -p password --output-format xml
其中猪勇,username、password即開(kāi)發(fā)者賬號(hào)和密碼冗酿。成功會(huì)有個(gè)success-message的key埠对,而失敗會(huì)有product-errors的key
- Jenkins/ssh遠(yuǎn)程登錄打包出錯(cuò):
code sign ...User interaction is not allowed
1.原來(lái)是需要UI界面來(lái)提示使用鑰匙串中的證書(shū)進(jìn)行簽名,默認(rèn)的證書(shū)都添加到了登錄中裁替,可以在打包前使用下面命令打開(kāi)鑰匙串:
security -v unlock-keychain -p "這是登錄用戶的密碼"~/Library/Keychains/login.keychain
2.還可以使用Jenkins的xcode插件
注:遠(yuǎn)程登錄项玛,也需要電腦切換為該遠(yuǎn)程用戶登錄,并配置好證書(shū)和相關(guān)配置文件弱判,否則出現(xiàn)no profile錯(cuò)誤
Xcode10自動(dòng)打包Error
- cocoapods三方provisioning profiles配置錯(cuò)誤
Build system information
error: Alamofire does not support provisioning profiles. Alamofire does not support provisioning profiles, but provisioning profile Demo has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor. (in target 'Alamofire')
解決:workspace使用cocoapods且podfile中指明use_frameworks! xcodebuild命令行需要配置CODE_SIGNING_ALLOWED = "NO"
- cocoapods shell命令執(zhí)行錯(cuò)誤
total size is 7334201 speedup is 1.00
/Users/kouakini/YouLiZhiYu_iOS/Pods/Target Support Files/Pods-YouLiZhiYu/Pods-YouLiZhiYu-frameworks.sh: line 104: EXPANDED_CODE_SIGN_IDENTITY: unbound variable
Command PhaseScriptExecution failed with a nonzero exit code
解決:定位報(bào)錯(cuò)的文件襟沮、定位104行、將
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}"
改為if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}"
配置總結(jié)
- 最新版本python:python3官網(wǎng)下載或者
brew install python
- http請(qǐng)求:requests下載
- 配置requests
//requests根目錄
cd ./requests-master
//執(zhí)行setup.py文件
python3 setup.py install
- 下載腳本autoArchive
Xcode11 autoArchive打包修改
如果遇到三方庫(kù)簽名失敗昌腰,去掉CODE_SIGN_IDENTITY="%s"
舊:
buildCmd = 'xcodebuild archive -workspace %s -scheme %s -configuration %s -archivePath %s CODE_SIGN_IDENTITY="%s" PROVISIONING_PROFILE="%s"' %(workspace, SCHEME, CONFIGURATION, archive, CODE_SIGN_IDENTITY, provisionprofile)
新:
buildCmd = 'xcodebuild archive -workspace %s -scheme %s -configuration %s -archivePath %s PROVISIONING_PROFILE="%s"' %(workspace, SCHEME, CONFIGURATION, archive, provisionprofile)