iOS自动打包脚本相关命令
xcodebuild
终端执行man xcodebuild或xcodebuild -h查看具体使用方法。
Plist 文件操作
终端执行 /usr/libexec/PlistBuddy -h 查看使用方法。
一、批量出包所需的物料
从事游戏行业的开发者一定深知行业内马甲包的乱相,吃这一碗饭,在此不做评判。下面简单整理一下整个出包过程。
1.一个完整xcode工程
2.相关参数,存在在info.plist中的系统参数或自定义参数
3.p12证书与distribution描述文件
4.需要替换的资源文件,icon等
二、获取信息
用一个xcode工程出包,图形化界面的Xcode只需要点一下archive,选择导出类型,证书,然后export即可。同理,命令行出包的步骤也是如此。相关命令如下:
a.导入p12证书到keychain
security import p12证书路径 -k ~/Library/Keychains/login.keychain-db -P p12证书密码 -T /usr/bin/codesign
//1 identity imported.
b.获取friendlyName eg:iPhone Distribution:Zeng Yang (49P4585YSG)
openssl pkcs12 -nodes -in p12证书路径 -info -nokeys -passin 'pass:bingniao' 2>/dev/null | grep 'friendlyName'
//friendlyName: iPhone Distribution: Zeng Yang (49P4585YSG)
c.输出mobileprovision相关信息
openssl smime -in .mobileprovision的描述文件 -inform der -verify
写入信息到临时plist文件,方便后续读取
openssl smime -in .mobileprovision的描述文件 -inform der -verify >~/tmp_provisionProfile.plist
d.读取相关信息 UUID、mobileProvision、team id等
//获取UUID eg:acc104c7-ccf6-402e-92cd-4db3eb7c5c78
/usr/libexec/PlistBuddy -c 'print UUID' ~/tmp_provisionProfile.plist
//获取mobileProvision文件名 eg:Distribution_dblfk
/usr/libexec/PlistBuddy -c 'print Name' ~/tmp_provisionProfile.plist
//获取team id eg:49P4585YSG
/usr/libexec/PlistBuddy -c 'print TeamIdentifier:0' ~/tmp_provisionProfile.plist
e.获取xcode版本
获取xcode 版本
xcodebuild -version | head -n 1 | awk '{print $2}'
三、开始出包
a.修改info.plist文件
通过PlistBuddy进行操作info.plist文件
b.替换icon等资源文件
使用相关shell脚本命令进行强制替换即可。
c.出包
相关参数与资源处理完成之后即可进行出包操作。
出包流程:
1.clean操作,清理工程;
2.archive操作,导出 .xcarchive 文件;
3.export操作,导出IPA包;
执行命令前,请先cd到工程根目录。
clean
xcodebuild clean -configuration Release -alltargets
archive
xcodebuild archive -scheme <scheme名> -configuration Release -archivePath <~/tmp_app.xcarchive> PROVISIONING_PROFILE="<mobileProvision文件名>" CODE_SIGN_IDENTITY="<friendlyName>" PROVISIONING_PROFILE_SPECIFIER="<UUID>" PRODUCT_BUNDLE_IDENTIFIER="<bundle id>" DEVELOPMENT_TEAM="<team id>"
export
exportOptionsPlist.plist可采用模板写文件
因为 Xcode 9 默认不允许访问钥匙串的内容,必须要设置 allowProvisioningUpdates 才会允许。所有在这里导出做一下版本判断
version < 9.0
xcodebuild -exportArchive -archivePath <导出的.xcarchive文件路径> -exportPath <~/exportPath> -exportOptionsPlist <~/tmp_exportOptions.plist路径> -configuration Release
version >= 9.0
xcodebuild -exportArchive -archivePath <导出的.xcarchive文件路径> -exportPath <~/exportPath> -exportOptionsPlist <~/tmp_exportOptions.plist路径> -allowProvisioningUpdates
exportOptionsPlist.plist
$method 选择: app-store、development、ad-hoc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>teamID</key>
<string>{teamId}</string>
<key>method</key>
<string>{$method}</string>
<key>provisioningProfiles</key>
<dict>
<key>{bundleId}</key>
<string>{uuid}</string>
</dict>
<key>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
</dict>
</plist>