公司申请了一台 mac mini 本来是用来方便iOS专属打包,而搭建Jenkins自动发布平台的,但是鉴于领导是android控 于是乎 对 mac mini 配置进行 大大改造 以至于 本来好好的 iOS项目的打包功能 也陷入瘫痪(关键你改了 你说一声,你也不吭声)。。。。

   好吧接下来说问题,

   开始自动化编译ipa,哗哗打印日志 突然

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: **** --resource-rules=/var/folders/zy/9qwmy3j50qb2g8pbtj9hxyvm000086/T/HjWeg6NTbj/Payload/****.app/ResourceRules.plist --entitlements /var/folders/zy/9qwmy3j50qb2g8pbtj9hxyvm000086/T/HjWeg6NTbj/entitlements_plistGMvHUypG /var/folders/zy/9qwmy3j50qb2g8pbtj9hxyvm000086/T/HjWeg6NTbj/Payload/******.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!

问题来了,在 Mac OS X >= 10.10 的系统中 针对 /ResourceRules.plist 的检测已经废弃了,

对比


于是乎 Mac OS X >= 10.10 的系统中并且 xcode 8 build环境  ,build ****.app 的时候 没有了ResourceRules.plist

但是 xcode 8 的 内部的一个 负责打包的可执行脚本 还是要检测ResourceRules.plist 来打包程序,结果找不到,所以报错,卡卡卡。。


解决方案 这样 打开路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/binjenkins 自动化打包 ipa 的 一些坑_第1张图片


打开 编辑之前 建议将原脚本 备份一下,省的出什么幺蛾子。

备份完毕

找到 codesign_args

jenkins 自动化打包 ipa 的 一些坑_第2张图片


look 签名时 检测 了 --resource-rules=$destApp/ResourceRules.plist  可但是 .app 文件内并无此文件,

所以对这个变量稍作修改了,

修改如下

 my @codesign_args;
    if (-e '$destApp/ResourceRules.plist') {  # If ResourceRules.plist exists, include it in codesign arguments, for backwards compatability
        @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
                         "--sign", $opt{sign},
                         "--resource-rules=$destApp/ResourceRules.plist");
    } else { # If ResourceRules.plist isn't found, don't include it in the codesign arguments
        @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
                         "--sign", $opt{sign});
    }


规避 ResourceRules.plist 的检测 打包;


如上就是解决

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: **** --resource-rules=/var/folders/zy/9qwmy3j50qb2g8pbtj9hxyvm000086/T/HjWeg6NTbj/Payload/****.app/ResourceRules.plist --entitlements /var/folders/zy/9qwmy3j50qb2g8pbtj9hxyvm000086/T/HjWeg6NTbj/entitlements_plistGMvHUypG /var/folders/zy/9qwmy3j50qb2g8pbtj9hxyvm000086/T/HjWeg6NTbj/Payload/******.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!

问题 如果问题还是没有解决

多看看 是不是证书和签名的问题 避免 签名证书 存放到 系统钥匙串中,一定要存放到登录钥匙串中!!!而且尽量只存在一个证书(开发或者生产的,避免jenkins找不到该使用哪一个), 同时还有删除一些 无用的私钥,这也是是一个容易被忽略的坑 ;

一般咱们在自己的mac上编译打包的时候,在打包过程中会提示 “是否允许访问私钥” 一般选择 “总是允许”,但是鉴于jenkins是远程自动化打包,所以事先要对所使用的证书的私钥设置成“允许所有程序访问”,当然了取决于 所处环境的安全策略要求了。。


如下图

jenkins 自动化打包 ipa 的 一些坑_第3张图片

jenkins 自动化打包 ipa 的 一些坑_第4张图片


如此即可。。


其实以上都是一些老生常谈的问题,但是不管操作过多少次,每次使用jenkins都是出现各种新鲜花样的问题,但是问题还是在掌控之中能够处理的,大家仅以慰藉,希望能对大家有所帮助。