xcodebuild 与 xcrun 命令行生成ipa


1.因为在使用xcode 工具打ipa不能一步做到全自动化,容易给自己和他人出错的机会。加上个人本身对linux bash shell脚本相对熟悉,mac shell  和linux基本一样的,于是就有了想做个脚本,来自动化处理 app(or静态库)---> 签名---->ipa的过程。

xcodebuild:通过工程文件,生成app文件。

xcrun:通过app文件,来生成ipa文件(包含了签名的过程)。

2.要想实现上面的过程首先要了解两个工具:xcodebuild 、xcrun。具体的作用这里就不详细解释了,网上随便可以搜索,你也可以使用 -help 帮助或者man 命令来查看使用手册。!


3如果找不到xcodebuild 或者xcrun命令,可以使用find命令来搜索一下

sudo find / -name "xcodebuild"

4.如果不想每次执行xcodebuild命令都要输入一串的路径的话可以使用export命令来设置一下环境变量。

export PATH="$PATH:/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild"

5.使用xcodebuild生成app的完成命令
xcodebuild -sdk  iphoneos8.1   -target test  -configuration Release  -arch arm64  -arch armv7  CODE_SIGN_IDENTITY="iPhone Distribution: xxxxxxx" clean build
参数解释:
-sdk :可以使用如下命令查看所支持的SDK
xcodebuild -showsdks
xcodebuild 与 xcrun 命令行生成ipa_第1张图片

-target:可以使用如下命令查看所支持的target
xcodebuild -list

xcodebuild 与 xcrun 命令行生成ipa_第2张图片
-configureation 默认是Release的。
-arch :是指定要生成的指令集
CODE_SIGN_IDENTITY:选择签名的证书,不知道自己证书名字的同学,可以用系统自带的工具“钥匙访问串”来查看,如果不带侧参数,那么在工程配置中一定要配置好证书以及授权文件!
xcodebuild 与 xcrun 命令行生成ipa_第3张图片
clean built:每次生成app之前都会清楚掉旧的记录


当命令执行之后,会输出大量的信息,其中关键信息是在最后,会提示你build 成功或者失败:


如果是失败,那么请检查你的工程是否可以编译通过,并且检查工程配置中的签名文件是否正确,如果不在工程配置文件中指定签名文件那必须在参数中指定签名文件。(如果你的工程在真机中能编译通过,那么使用xcodebuild 命令行肯定是可以build 成功的)。
xcodebuild 与 xcrun 命令行生成ipa_第4张图片

注意:

必须 设置Xcode的Build Settings->Code Signing Resource Rules Path的值为:$(SDKROOT)/ResourceRules.plist 


xcodebuild 执行成功之后,会在工程的根目录下产生一个build文件夹,在build/Release-iphoneos目录下就能找到生成的app文件


到这里,app文件就生成成功了,那么下一步是生成ipa文件!

7. 通过app文件生成ipa文件

sudo xcrun -sdk iphoneos PackageApplication    -v build/Release-iphoneos/test.app  -o `pwd`/build/Release-iphoneos/test2.ipa --sign "iPhone Distribution: xxxxxxxxxx"
注:这里的  `pwd` 是当前路径的意思哈!

参数就不解释了。man或者-help查一下,命令执行成功之后,会有如果提示:
xcodebuild 与 xcrun 命令行生成ipa_第5张图片

这里的compressed应该是指压缩率!,虽然从上面的日志没有明显说工程了,但是也没有报什么错误,在最后一行说明了输出ipa的路径,我们找到ipa,然后我们吧ipa装到设备上面(非越狱)验证一下,是否可以安装。实践证明,是可以的!!!!

如果你仔细的看了执行命令后的输出信息,你会发现,其他输出信息中会提示有两个错误:
Program /usr/bin/codesign returned 1 : [build/Release-iphoneos/test.app: resource envelope is obsolete]
Codesign check fails : build/Release-iphoneos/test.app: resource envelope is obsolete



其实这个不用担心,这个是苹果系统自带工具codesign的一个bug,你可以上网搜索到官方给出的答复:( 点击打开原文链接)
the command line tool “codesign” has changed in 10.9.5 and 10.10, you need to pass “--no-strict” option to the command, (the problem has been reported and will be fixed). To workaround the problem, please save a copy and modify PackageApplication to pass “—no-strict” to codesign, you can locate PackageApplication by running the following:- xcrun -sdk iphoneos -f PackageApplication

8.最后将ipa文件安装到设备上面(非越狱),这里不多说了,大家都知道怎么做的!

9.上传到苹果服务器,看看是否能通过检查





PS:个人有点懒,文章排版有点不够美观,大家见谅哈,以后再整理整理
PS:欢迎大家留言

后续:
本人重新写了一个脚本,文章传送门
iOS--脚本配置Xcode Project(打包)

你可能感兴趣的:(xcodebuild 与 xcrun 命令行生成ipa)