【发布时间】:2017-11-20 13:31:48
【问题描述】:
如果我使用 Jenkins Web GUI(直接在 Mac 上运行)构建 iOS(Xamarin.Forms 项目的一部分),我会从控制台输出中得到以下有意义的错误:
未知错误-1=ffffffffffffffff
更详细的日志
[exec] _CodesignNativeLibraries:
[exec] CodesignNativeLibraries Task
[exec] AppBundleDir: bin/iPhone/Release/AppiOS.app
[exec] CodesignAllocate: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
[exec] DisableTimestamp: False
[exec] IntermediateOutputPath: obj/iPhone/Release/codesign
[exec] Keychain: <null>
[exec] SigningKey: XXX
[exec] ExtraArgs: <null>
[exec] _CodesignAppBundle:
[exec] Codesign Task
[exec] CodesignAllocate: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
[exec] DisableTimestamp: False
[exec] Entitlements: obj/iPhone/Release/Entitlements.xcent
[exec] Keychain: <null>
[exec] Resources:
[exec] bin/iPhone/Release/AppiOS.app
[exec] ResourceRules: <null>
[exec] SigningKey: XXX
[exec] ExtraArgs: <null>
[exec] IsAppExtension: False
[exec] Tool /usr/bin/codesign execution started with arguments: -v --force --sign XXX --entitlements /Users/someuser/.jenkins/workspace/Project/ProjectName/ProjectName.iOS/obj/iPhone/Release/Entitlements.xcent /Users/someuser/.jenkins/workspace/Project/ProjectName/ProjectName.iOS/bin/iPhone/Release/AppiOS.app
[exec] bin/iPhone/Release/AppiOS.app : error : /Users/someuser/.jenkins/workspace/Project/ProjectName/ProjectName.iOS/bin/iPhone/Release/AppiOS.app: unknown error -1=ffffffffffffffff [/Users/someuser/.jenkins/workspace/Project/ProjectName/ProjectName.iOS/ProjectName.iOS.csproj]
另一方面,如果我构建它,它可以正常工作
- 在 Xamarin Studio 中
- 在 Visual Studio for Mac 中
- 通过 Mac 构建主机连接时
- 在终端上
经过一些研究,提到了following solutions:
- 允许访问钥匙串
- 撤销并创建新的证书/配置文件
我都尝试了,但我仍然收到错误消息。我的问题是,为什么 Jenkins 会与
launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
无法访问证书/配置文件。这是配置中Ant的调用
<target name="buildIpa" depends="init" if="isMac">
<exec dir="${basedir}" executable="${msibuild}" failonerror="true">
<arg line=""/p:Configuration=Release" /p:Platform="iPhone" /p:IpaPackageDir="./bin" /t:Build ${TopLevelProject}.sln "/>
</exec>
</target>
,其中msibuild 是/Libary/Frameworks/Mono.framework/Versions/Current/Commands/msbuild。
其他项目(Droid、UWP)也在构建中,我不知道如何只为 iOS 构建......
如何查看是否存在签名错误、Jenkins 安装错误或其他错误?
我目前的设置:
Mac OS X:10.12.6
Xcode:9.1
适用于 Mac 的 Visual Studio 社区 2017:7.2.2
单声道:5.4.1.6
Xamarin.iOS:11.3.0.47
Xamarin.Forms:2.3.4.267
Mac 上的 Xamarin Studio:6.3
詹金斯:2.73.3
【问题讨论】:
-
您是否已将证书和配置文件导入 Jenkins? Jenkins 是否拥有对签名文件的完全访问权限?
-
不,我只是直接在 Mac 上导入/创建了文件(位于钥匙串中)。这就是 Jenkins 是否拥有完全访问权限的问题。我确实允许所有应用程序访问证书,但这似乎还不够。
-
您是否在构建脚本中使用“security unlock-keychain -p keychainPassword pathToKeychain”解锁钥匙串?
-
@ChristopherStephan:不,目前没有。每次都要解锁吗?
pathToKeychain是什么? /Users/someUser/Library/Keychains/?还有其他选项不需要提供密码吗?通常,它应该问我是否允许,然后我点击始终允许,但 Jenkins 从来没有问过这个问题。 -
例如,如果配置文件存储在登录钥匙串中,
pathToKeychain可能是 /Users/someUser/Library/Keychains/login.keychain-db。目前我不知道隐藏密码的可能性。有一个 Jenkins 插件可以导入钥匙串,但它不再适用于 Mac OS Sierra (github.com/SICSoftwareGmbH/kpp-management-plugin/issues/5)。在构建 ipa 之前尝试解锁钥匙串。如果它不能解决问题,请在 Xcode 中创建一个演示应用程序,提供您用于该应用程序的包标识符,添加配置文件并查看构建是否成功。
标签: ios xamarin jenkins ant codesign