问题:设备的 Ad-Hoc 代码设计在 Studio 中成功,在 Jenkins 中失败

我有一个支持 Android 和 iOS 的 Xamarin Forms 应用程序。我已经生成了 Jenkins 构建来编译它们。所有的 Android 版本都可以工作。 iOS Debug 构建编译良好。但是,Ad-Hoc 构建无法完全针对 iPhone 目标构建。它似乎在代码设计过程中失败了。如果我以 iPhoneSimulator 为目标,它可以工作,但如果我以 iPhone 设备为目标,它会失败。

工具 /usr/bin/codesign 执行以参数开始: -v --force --sign 81088F8E194139DC4C6CE640716944E41FB0709F --entitlements "/Users/Shared/Jenkins/.jenkins/workspace/{project path}/obj/iPhone/Ad-Hoc /Entitlements.xcent" --deep "/Users/Shared/Jenkins/.jenkins/workspace/{project path}/bin/iPhone/Ad-Hoc/AppName.app" bin/iPhone/Ad-Hoc/AppName.app :错误:/Users/Shared/Jenkins/.jenkins/workspace/{project path}/bin/iPhone/Ad-Hoc/AppName.app: 未知错误 -1u003dffffffffffffffff [/Users/Shared/Jenkins/.jenkins/workspace /{项目路径}/iDriverMobile.iOS.csproj]

如果我在 Visual Studio 中打开解决方案,就在 Jenkins 工作区文件夹中,因此它使用完全相同的文件,那么编译工作正常,这真的很令人沮丧。

查看两个输出之间的差异,似乎工作构建(来自 Studio)具有所有程序集的 AOT 输出,如下所示:

Mono Ahead of Time 编译器 - 编译程序集 /Users/Shared/Jenkins/.jenkins/workspace/{project path}/obj/iPhone/Ad-Hoc/mtouch-cache/32/Build/OpenNETCF.Google.Analytics.dll

失败的构建没有这些。相反,它有几行如下所示:

MTOUCH:警告 MT0095:Aot 文件无法复制到目标目录 /Users/Shared/Jenkins/.jenkins/workspace/{project path}/obj/iPhone/Ad-Hoc/mtouch-cache/64/Build/Msym /Msym/tmp: 无法启动进程。 [/Users/Shared/Jenkins/.jenkins/workspace/{项目路径}/AppName.csproj]

所有这一切中最糟糕的部分是这些构建确实有效,但后来我重新启动了 Jenkins 正在运行的 Mac Mini,事情就走下坡路了。我无法弄清楚 Studio 正在做什么和对 msbuild 的命令行调用之间有什么区别。它们都指向相同的二进制文件。

附加信息 截至今天(2017 年 5 月 24 日)的最新更新仍然失败。这是环境:

  • Mac OS X 10.12.5

  • 列表项

  • XCode 8.3.2

  • Xamarin.iOS 10.10.0.36

  • Visual Studio 2017 Community for Mac 7.0.1 (build 24)

zoz100009 单声道 5.0.1.1

什么不能解决它:

  • 创建一个新的 Jenkins 构建

  • 更改 Jenkins 工作空间路径

  • 打开整个 Jenkins 文件夹的权限(777)

  • 开启 LLVM

  • 禁用所有链接

  • 彻底卸载重新安装Jenkins

  • 使用xbuild代替msbuild

  • 骂人很多

  • 我的中指

解答

尝试删除应用程序DerivedData中的派生数据文件夹。它看起来像YourAPP_ dasfdsfsdafdsasfdsaf,根据苹果开发者论坛的这个。

DerivedData数据文件夹位于~/Library/Developer/Xcode/DerivedData/

如果这不起作用,则所有症状都指向签名证书(也称为签名身份)问题。

好像从命令行编译时,/usr/bin/codesign无法访问签名身份81088F8E194139DC4C6CE640716944E41FB0709F。不幸的是,这可能有很多不同的原因:

  • 钥匙链被锁定

  • codesign不允许访问签名身份。

  • 钥匙串中存在多个身份,选择了错误的签名身份

  • 为 Ad Hoc 构建匹配了错误的配置文件。

在运行msbuild之前尝试添加以下代码片段,假设您的签名身份在钥匙串~/Library/Keychains/login.keychain中:

security unlock-keychain -p <password> ~/Library/Keychains/login.keychain
security set-keychain-settings -l -u -t 3600 ~/Library/Keychains/login.keychain
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k -p <password> ~/Library/Keychains/login.keychain

在构建脚本中存储钥匙串密码不是一个好主意,您可以按照本指南隐藏它们。

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐