matlab fir overflow,实战fir脚本打ipa包

fir提供了很不错的自动化打包脚本,传送门如下

不过实战的时候,会遇到一些坑,这里整理一下经验

最简单的打包命令如下:

firbuild_ipa

这样会自动打包ipa,不过会输出到一个临时目录,如

Results at '/var/folders/ky/syfrlzpn2bb8fmn5pr51tstm0000gp/T/d20160306-64805-akfs4h/1457249301.ipa'

对于一个CI平台来说,这样的存放路径毫无意义,所以一般会这样写

firbuild_ipa-o ./

这样就会把ipa拷贝到当前目录,命名规则是bundledisplayname+bundleversion+build号,还是挺不错的命名方式。

接下来我们考虑一下,如果是使用了Pod的项目,需要怎么处理:

podinstall; fir build_ipa -w workspace路径 -Crelease-S scheme名字

以上命令很容易理解,先把pod需要的东西配置好,然后用自动生成的workspace来打包。

遗留一个问题,如果是一个全新的项目,第一次pod install以后是不会自动生成scheme的,必须要用xcode显式打开一下,目前还没解决这个问题

到这里还是可以满足需求的,不过我们还要考虑更通用的CI场景。对于CI所在的服务器来说,应该是预先不知道开发者账号密码的(业务解耦)。这样的话,要求新开CI任务的时候,业务方上传provision文件和p12文件即可。

所以如果在这种场景下,以上的命令会报错

CodeSignerror:Nomatching provisioning profiles found:Noprovisioning profiles with a valid signing

fir的团队显然考虑到了这种场景,提供了一个额外的参数:

-f, [--profile=PROFILE]# Set the export provisioning profile

然而,如果你直接使用的话,xcode7的环境下应该会报如下错误:

xcodebuild:error: The flag -exportArchiveisrequiredwhenspecifying -exportProvisioningProfile.xcodebuild:error: The flag -archivePathisrequiredwhenspecifying -exportArchive.

xcodebuild的帮助文档是查不到这个参数的,我隐隐觉得不妙了。不过还是根据上述提示加上了-exportArchive和-archivePath,这下fir不干了,直接跳到了帮助界面,表示不认识这两个参数。

好吧,幸好fir的脚本是开源的,如此小bug是不是修改一下build_ipa这个函数就好了?然而为了保险,我还是先转换成命令行运行一下,然后就收到了如此的错误:

xcodebuild:error: The flag -scheme cannot be specified alongwith-exportArchive.

╮╯_╰╭搞毛,原来想用exportArchive就不能指定scheme,但是想要用workspace编译又要指定scheme,死循环了咋办?!

好的,为了理清思路,我们还是先搞清楚,exportArchive,exportProvisioningProfile之类的参数应该怎么用,然后就会找到这篇文章

简单来说这个外国人的意思是这样的,先用archive命令把做一次归档,然后再用exportArchive的方式给二进制文件指定provision文件签名。

思路是简单的,可惜现实还是残酷的,上面已经提到了,如果本地没有签名文件的话,xcodebuild的最后一步,会提示签名失败。又死循环了?!

这个时候google起到了关键的作用,万能的SO上面,有水友已经解决了这个问题

黑科技宏定义:CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO,让你解决打包签名的困扰。

所以,如果想用fir打一个无签名的包,可以如下指定

firbuild_ipa-w workspace路径 -C release -Sscheme名字CODE_SIGN_IDENTITY=""CODE_SIGNING_REQUIRED=NO

如此就会输出一个无签名的ipa文件,解压发现Payload目录下,并没有_CodeSignature目录。

接下来的思路就很明确了,我们再补上重签名流程即可,推荐这篇文章的教程,有附上可用的脚本

最后再补一下,如果想要做到更完美,可以自行解析provision文件里面的TeamName和TeamIdentifier,然后再丢给resign.sh处理,这样resign.sh也不需要业务方提供了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值