gyts62 发表于 2018-9-4 08:07:09

jenkins 自动化打包 ipa 的 一些坑

  公司申请了一台 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都是出现各种新鲜花样的问题,但是问题还是在掌控之中能够处理的,大家仅以慰藉,希望能对大家有所帮助。


页: [1]
查看完整版本: jenkins 自动化打包 ipa 的 一些坑