公司申请了一台 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/bin
打开 编辑之前 建议将原脚本 备份一下,省的出什么幺蛾子。
备份完毕
找到 codesign_args
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都是出现各种新鲜花样的问题,但是问题还是在掌控之中能够处理的,大家仅以慰藉,希望能对大家有所帮助。