本机:Mac Serria,Xcode8
参考文章:
- 使用python打包:http://www.jianshu.com/p/1229476fbce4
- 使用shell脚本,自动打包:http://www.jianshu.com/p/bd4c22952e01
不想看这些,可以直接滑到最后的配置总结
使用文章1的方式(xcodebuild,xcrun)进行打包或者脚本调用,build success,但是无法打包
使用文章2的方式(xcodebuild archive ,exportArchive,exportOptionsPlist)成功了,并且包大小与之前使用Xcode打出的包大小完全一致(根据文章2的各打包方式分析,由此猜测是Xcode的因素),但还是命令行一步步来,麻烦
于是,就想着把两个文章结合起来,也就是说修改autobuild.py脚本,使用xcodebuild archive等命令打包,代码可前往autoArchive下载使用,可打adhoc包和AppStore包并直接上传蒲公英或者AppStore。
执行python命令行需要的配置,即执行过程中遇到的问题:
- autobuild.py执行需要
最新版python3
,可以去官网下载,下载安装之后可以使用which python3
查看安装地址。也可以通过homebrew安装brew install python
.
//更新python后运行报错
File “autobuild.py”, line 6, in
import requests
ImportError: No module named requests
-
python中HTTP处理用到了
requests
,如果之前未安装过,需要安装一下,安装方式如下方式一:先安装pip,再安装requests
sudo easy_install pip
sudo pip install requests
使用此种方法,如果还是无法调用requests,需修改系统的PYTHONPATH,将PYTHONPATH 指向requests的路径
export PYTHONPATH=$PYTHONPATH:./requests(绝对路径)(未成功,没仔细研究)
方式二:requests官网下载
//我是从github下载源码,然后嵌入到python包里
cd ./requests (路径直接拖上来)
python3 setup.py install
-
再记下python缩进错误
python的代码对缩进方式非常严格,tab和空格不可混用,遇到IndentationError就要检查下自己的缩进,当然一般是看不出来什么的,所以我都是把整段代码重敲一遍,就OK了。敲黑板:一定要注意,不要随便用xcode打开python做改动,一不小心就把缩进弄错了,查看修改保存都用编辑器。
最后,一行代码,打包上传蒲公英,完美执行,哈哈哈,撒花
更厉害的python:http://www.2cto.com/kf/201312/262436.html
使用plistBuddy
管理plist文件
exportArchive需要配置的plist文件可以使用手动打包导出的文件夹内的exportOption.plist(已自动生成的配置)
由于plistBuddy不在默认path中所以必须使用绝对路径调用,加入-c否则会进入人机交互模式不会执行后面的命令。
可以使用-h查看使用信息
/usr/libexec/PlistBuddy -h
举例:修改bundleVersion
/usr/libexec/PlistBuddy -c 'Set :CFBundleVersion 1991’ /xxx.plist
提交到开发者中心
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即开发者账号和密码。成功会有个success-message的key,而失败会有product-errors的key
- Jenkins/ssh远程登录打包出错:
code sign ...User interaction is not allowed
1.原来是需要UI界面来提示使用钥匙串中的证书进行签名,默认的证书都添加到了登录中,可以在打包前使用下面命令打开钥匙串:
security -v unlock-keychain -p "这是登录用户的密码"~/Library/Keychains/login.keychain
2.还可以使用Jenkins的xcode插件
注:远程登录,也需要电脑切换为该远程用户登录,并配置好证书和相关配置文件,否则出现no profile错误
Xcode10自动打包Error
- cocoapods三方provisioning profiles配置错误
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命令执行错误
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
解决:定位报错的文件、定位104行、将
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}"
改为if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}"
配置总结
- 最新版本python:python3官网下载或者
brew install python
- http请求:requests下载
- 配置requests
//requests根目录
cd ./requests-master
//执行setup.py文件
python3 setup.py install
- 下载脚本autoArchive
Xcode11 autoArchive打包修改
如果遇到三方库签名失败,去掉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)