使用xcodebuild和xcrun打包签名
xcodebuild -project drawBoard.xcodeproj -target drawBoard -configuration Release
如果 build 成功,会看到 * BUILD SUCCEEDED * 字样,且在终端会打印出这次 build 的签名信息,如下:
Signing Identity: “iPhone Developer: xxx(59xxxxxx)”
Provisioning Profile: “iOS Team Provisioning Profile: *”
且在该目录下会多出一个 build 目录,该目录下有 Release-iphoneos 和 TestImg.build 文件,根据我们 build -configuration 配置的参数不同,Release-iphoneos 的文件名会不同。
在 Release-iphoneos 文件夹下,有我们需要的drawBoard.app文件,但是要安装到真机上,我们需要将该文件导出为ipa文件,这里使用 xcrun 命令。
xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/drawBoard.app -o ~/Desktop/drawBoard.ipa
将打包过程脚本化
工作中,特别是所做项目进入测试阶段,肯定会经常打 Ad-hoc 包给测试人员进行测试,但是我们肯定不想每次进行打包的时候都要进行一些工程的设置修改,以及一系列的 next 按钮点击操作,现在就让这些操作都交给脚本化吧。
脚本化中使用如下的命令打包:
xcodebuild -project name.xcodeproj -target targetname -configuration Release -sdk iphoneos build CODE_SIGN_IDENTITY=” (CODESIGNIDENTITY)"PROVISIONINGPROFILE=" (PROVISIONING_PROFILE)”
或者
xcodebuild -workspace name.xcworkspace -scheme schemename -configuration Release -sdk iphoneos build CODE_SIGN_IDENTITY=” (CODESIGNIDENTITY)"PROVISIONINGPROFILE=" (PROVISIONING_PROFILE)”
然后使用 xcrun 生成 ipa 文件:
`xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/$(target|scheme).app”
清除 build 过程中产生的中间文件
结合蒲公英分发平台,将 ipa 文件上传至蒲公英分发平台,同时在终端会打印上传结果以及上传应用后该应用的 URL。蒲公英分发平台能够方便地将 ipa 文件尽快分发到测试人员,该平台有开放 API,可避免人工上传。
该脚本的使用可使用 python autobuild.py -h 查看,与 xcodebuild 的使用相似:
Usage: autobuild.py [options]
Options:
-h, –help: show this help message and exit
-w name.xcworkspace, –workspace=name.xcworkspace: Build the workspace name.xcworkspace.
-p name.xcodeproj, –project=name.xcodeproj: Build the project name.xcodeproj.
-s schemename, –scheme=schemename: Build the scheme specified by schemename. Required if building a workspace.
-t targetname, –target=targetname: Build the target specified by targetname. Required if building a project.
-o output_filename, –output=output_filename: specify output filename
在脚本顶部,有几个全局变量,根据自己的项目情况修改。
CODE_SIGN_IDENTITY = “iPhone Distribution: companyname (9xxxxxxx9A)”
PROVISIONING_PROFILE = “xxxxx-xxxx-xxx-xxxx-xxxxxxxxx”
CONFIGURATION = “Release”
SDK = “iphoneos”
USER_KEY = “15d6xxxxxxxxxxxxxxxxxx”
API_KEY = “efxxxxxxxxxxxxxxxxxxxx”
其中,CODE_SIGN_IDENTITY 为开发者证书标识,可以在 Keychain Access -> Certificates -> 选中证书右键弹出菜单 -> Get Info -> Common Name 获取,类似 iPhone Distribution: Company name Co. Ltd (xxxxxxxx9A), 包括括号内的内容。
PROVISIONING_PROFILE: 这个是 mobileprovision 文件的 identifier,获取方式:
Xcode -> Preferences -> 选中申请开发者证书的 Apple ID -> 选中开发者证书 -> View Details… -> 根据 Provisioning Profiles 的名字选中打包所需的 mobileprovision 文件 -> 右键菜单 -> Show in Finder -> 找到该文件后,除了该文件后缀名的字符串就是 PROVISIONING_PROFILE 字段的内容。
当然也可以使用脚本获取, 此处参考 命令行获取mobileprovision文件的UUID:
if [ $# -ne 1 ]
then
echo “Usage: getmobileuuid the-mobileprovision-file-path”
exit 1
fi
mobileprovision_uuid=/usr/libexec/PlistBuddy -c "Print UUID" /dev/stdin <<< $(/usr/bin/security cms -D -i $1)
echo “UUID is:”
echo ${mobileprovision_uuid}
USER_KEY, API_KEY: 是蒲公英开放 API 的密钥
https://github.com/carya/Util