前言:ios
iOS程序包分为“.app格式的二进制文件包”和“.ipa格式的渠道包”两种。xcodebuild 是一款用来打包 Xcode projects 或者 workspaces 的命令行工具。用xcodebuild把工程打成 app格式后,再用xcrun来签名和打成ipa格式的包。本篇文章简单讲解一下本身使用的app打包命令。shell
正文:xcode
1、经过xcodebuild命令和xcrun命令打包服务器
xcodebuild命令和xcrun两个命令必需在xxx.xcodeproj或者xxx.xcworkspace所在的目录执行。app
(1) xcodebuildiphone
shell编译工具,用xcodebuild把工程打成 app 格式,好比咱们有个叫作hello的项目,xcodebuild命令以下:工具
xcodebuild -workspace hello.xcworkspace -scheme hello -derivedDataPath "./" -sdk iphoneos -configuration Release clean build
参数解释:ui
-workspace workspacename :指定 workspace 的名称。spa
-scheme schemename:指定 scheme 的名称,编译 workspace 时是必须的。命令行
-derivedDataPath path:覆盖编译 workspace 的 scheme 时的结果数据存放的路径。
-sdk [<sdkfullpath> | <sdkname>]:指定编译时所用的 SDK。参数能够是 SDK 的绝对路径,也能够是 SDK 的名称。
可使用以下命令查看所支持的SDK : xcodebuild -showsdks .
-configuration configurationname:当编译每一个 target 时使用 configurationname 指定的配置。默认是Release的。
CODE_SIGN_IDENTITY:选择签名的证书。
能够用系统自带的工具“钥匙访问串”来查看名字,若是不带侧参数,那么在工程配置中必定要配置好证书以及受权文件!
clean built:每次生成app以前都会清除掉旧的记录。
编译过程:
好比有个ios工程叫hello,它由两个project组成,一个是业务代码hello,一个是引入的第三方库Pods。project hello里
project hello, 对应target hello
project Pods, 对应 target XX一、XX二、XX3...
那么,上面的xcodebuild命令会作以下的事情:
(1)先clean掉project Pods对应的各个target XX一、XX二、XX3...
(2)而后build project Pods对应的各个target XX一、XX二、XX3..., 生成xxx.a文件。
(3)接下来build project Pods对应的target Pods-hello,生成libPods-hello.a文件。
(4)最后build project hello对应的target hello(此时会检查钥匙串中对应的证书)
即
=== CLEAN TARGET XXX OF PROJECT Pods WITH CONFIGURATION Distribution ===
=== BUILD TARGET XXX OF PROJECT Pods WITH CONFIGURATION Distribution ===
=== BUILD TARGET Pods-hello OF PROJECT Pods WITH CONFIGURATION Distribution ===
=== BUILD TARGET hello OF PROJECT hello WITH CONFIGURATION Distribution ===
xcodebuild会根据你的Xcode中的证书配置去钥匙串里,找你的工程里配置的签名证书。因此,必定要把证书安装在mac的钥匙串里(打包服务器同样),而且,Xcode的build setting中指定的Code Sign Identity与安装的证书一致。不然会报错:“No certificate matching 'iPhone Distribution: XXXX': Select a different signing certificate for CODE_SIGN_IDENTITY, a team that matches your selected certificate, or switch to automatic provisioning.”。
xcodebuild 执行成功以后,会在工程的根目录下产生一个build文件夹,在build/Distribution-iphoneos目录下就能找到生成的app文件。
(2) xcrun
xcrun是ipa打包工具,用xcrun来对.app格式的包签名和打成ipa格式的包。下面用xcrun把第一步xcodebuild产生的.app文件生成.ipa文件:
xcrun -sdk iphoneos PackageApplication -v Build/Products/Distribution-iphoneos/hello.app -o `pwd`/Build/Products/hello.ipa
参数解释:
-v 对应的是app文件的绝对相对路径
–o 对应ipa文件的路径跟文件名,`pwd` 是当前路径的意思
2、对ipa包重签名
要先准备好配置文件EIMMyApp.mobileprovison,以及签名的plist格式的Entitilements文件。另外,要把对应的证书安装到钥匙串中。而后按照下面的5步运行就能够对.ipa包进行重签名了:
(1).ipa包解压成.app包:
unzip myAppName.ipa ,生成Payload/myAppName.app
(2)移除老的 code signatures:
rm -r Payload/myAppName.app/_CodeSignature
(3)拷贝EIMMyApp.mobileprovison来覆盖原来的embedded.mobileprovision :
cp EIMMyApp.mobileprovision Payload/myAppName.app/embedded.mobileprovision
(4)重签名:
codesign -f -v -s "iPhone Distribution: XXXX" --entitlements entitlements.plist Payload/myAppName.app
(咱们知道如今的签名都是根据plist格式的Entitlements文件来指定的)
(5)将.app包打包成.ipa包:
zip -yr eimQQ.resigned.ipa Payload