Jenkins + Xcode9 打包报错: requires

作者: lockheed2021 | 来源:发表于2018-01-16 17:24 被阅读956次

问题详情

图片.png

因为 Xcode 9 默认不允许访问钥匙串的内容,必须要设置 allowProvisioningUpdates 才会允许,Jenkins的Xcode插件目前无法支持此项完成打包流程。

解决方案:将 Jenkins 项目里的 Xcode integration 构建步骤去掉,选择脚本构建步骤,配合ExportOptions.plist进行打包:

QQ20180409-104527.png

plist文件配置

1.可以参照下面步骤2的格式创建一个,或者先使用xcode9手动打包一次(一次就够了,只要获得这个文件即可)然后在导出的文件夹中找到以下文件:ExportOptions.plist

图片.png
  1. ExportOptions.plist详细配置如下:
图片.png
  1. 将plist文件拷贝到Jenkins的工作目录(其他目录也可以,但是尽量是一个不随便变动的路径)

  2. 配置脚本

脚本配置

参考配置格式(一定记得替换脚本中的xcarchive文件、xcodeproj/xcworkspace文件、exportOptionsPlist文件和scheme的路径为你自己的路径,Debug看情况而定,如果要打ad-hoc的包记得切换为Release):

由于Jenkins的安装方式不同,工作空间的路径也会有所区别,以下脚本中的路径为通过dmg安装包的方式安装之后的路径,如果是通过war包安装的Jenkins,路径中的/Users/USERNAME/.jenkins需要替换为/Users/share/Jenkins/Home

注意:如果是 workspace 的项目,那就将第一段的命令中 -project /Users/USERNAME/.jenkins/workspace/PROJECT NAME/APPNAME.xcodeproj修改为 -workspace /Users/USERNAME/.jenkins/workspace/PROJECT NAME/APPNAME.xcworkspace 即可。
记得替换命令中的APPNAME,USERNAME,PROJECT NAME, SCHEMENAME 为自己项目的参数

xcodebuild -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Debug-iphoneos/APPNAME.xcarchive" -project /Users/USERNAME/.jenkins/workspace/PROJECT NAME/APPNAME.xcodeproj -sdk iphoneos -scheme "SCHEMENAME" -configuration "Debug" archive

xcodebuild -exportArchive -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Debug-iphoneos/APPNAME.xcarchive" -exportPath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/APPNAME_debug" -exportOptionsPlist '/Users/USERNAME/.jenkins/workspace/APPNAME/build/ExportOptions.plist' -allowProvisioningUpdates

接下来就可以愉快的开始打包啦,如果还有其他疑问欢迎留言

参考链接(感谢两位大神提供的资料)

https://www.jianshu.com/p/8b3d6b0d71e2
http://www.cocoachina.com/cms/wap.php?action=article&id=20803

相关文章

网友评论

  • 努力爬行中的蜗牛:你好,方便留个qq吗,有些问题想请教下
    Untils:膜拜大神
    努力爬行中的蜗牛:@北极企鹅QAQ 3064662835
    lockheed2021:@跋涉_21 我加你吧
  • 路过你的全部:大神,感觉你的文章,解救我于水深火热之中:pray: 麻烦问下,打包完成之后,因项目需要,需要更改打包后.ipa的包名,这样改怎样修改命令呢才能实现呢? 谢谢!
    路过你的全部:@北极企鹅QAQ 还有一点不明白的是,那个scheme,后面的名字就是项目名称吗?
    路过你的全部:@北极企鹅QAQ 谢谢,试了下,这样好像只是新建了一个APPNAME.ipa 的文件夹,把打包的.ipa文件放在了这个文件夹内,包名没有改变
    lockheed2021:不是大神哈,能帮到忙就好~ 将第二行的-exportPath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/APPNAME_debug 改为 -exportPath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/APPNAME_debug/APPNAME.ipa 试试
  • 一号线:你好,我的/Users/USERNAME/.jenkins/下只有 /Users/USERNAME/.jenkins/war,并没有/Users/USERNAME/.jenkins/workspace。
    lockheed2021:@一号线 是这样的,如果你不是通过war包安装的,可以尝试将路径改为Users/共享(share)/Jenkins/Home/workspace
  • 小vv:脚本里的BasketballLeague.xcarchive 应该改成APPNAME.xcarchive :joy:
    lockheed2021:@小vv 这就尴尬了……打包插件对xcode9的支持也不大好,包都打不了:disappointed_relieved:
    小vv:@北极企鹅QAQ :sweat_smile: 好像是Jenkins对Java9的支持不太好 得降级
    lockheed2021:哎呀,这里确实错了,我这就改!谢谢!你的问题解决了吗?
  • 小vv:小哥 你好 请问 我导出ipa都成功了 但是还是报错是什么鬼

    Exported MedicalAlliance.xcarchive to: /Users/Shared/Jenkins/Home/workspace/MedicalAlliance-iOS/build/MedicalAlliance_Release
    ** EXPORT SUCCEEDED **

    FATAL: Could not initialize class hudson.util.ProcessTree$UnixReflection
    java.lang.NoClassDefFoundError: Could not initialize class hudson.util.ProcessTree$UnixReflection
    at hudson.util.ProcessTree$UnixProcess.kill(ProcessTree.java:647)
    at hudson.util.ProcessTree$UnixProcess.killRecursively(ProcessTree.java:668)
    at hudson.util.ProcessTree$Unix.killAll(ProcessTree.java:589)
    at hudson.Launcher$LocalLauncher.kill(Launcher.java:949)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:510)
    at hudson.model.Run.execute(Run.java:1724)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:421)
    Finished: FAILURE
  • 小vv:如果要打release包 脚本里的debug全部换成release吗?

    xcodebuild -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Release-iphoneos/APPNAME.xcarchive" -project /Users/USERNAME/.jenkins/workspace/PROJECT NAME/APPNAME.xcodeproj -sdk iphoneos -scheme "SCHEMENAME" -configuration "Release" archive

    xcodebuild -exportArchive -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Release-iphoneos/BasketballLeague.xcarchive" -exportPath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/APPNAME_Release" -exportOptionsPlist '/Users/USERNAME/.jenkins/workspace/APPNAME/build/ExportOptions.plist' -allowProvisioningUpdates
    lockheed2021:-configuration "Debug" archive 这里的要换,至于路径中的DEBUG我认为不必换

本文标题:Jenkins + Xcode9 打包报错: requires

本文链接:https://www.haomeiwen.com/subject/ujfeoxtx.html