一尘不染

设备的即席代码签名在Studio中成功,在Jenkins中失败

jenkins

我有一个支持Android和iOS的Xamarin
Forms应用程序。我已经生成了Jenkins构建来编译它们。所有的Android版本均可正常工作。iOS调试版本编译良好。但是,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”-较深的“ /Users/Shared/Jenkins/.jenkins/workspace/
{项目路径} /bin/iPhone/Ad-Hoc/AppName.app” bin / iPhone / Ad-Hoc /
AppName.app:错误:/Users/Shared/Jenkins/.jenkins/workspace/ {项目路径}
/bin/iPhone/Ad-Hoc/AppName.app:未知错误-1 = ffffffffffffffffff
[/Users/Shared/Jenkins/.jenkins/workspace/ {项目路径} /iDriverMobile.iOS.csproj]

如果我在Jenkins工作区文件夹中的Visual Studio中打开解决方案,以便它使用完全相同的文件,则编译工作正常,这确实令人沮丧。

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

Mono Ahead of Time编译器-编译程序集/Users/Shared/Jenkins/.jenkins/workspace/ {项目路径}
/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的命令行调用之间的区别。它们都指向相同的二进制文件。

其他信息 直到今天(5/24/17),最新更新仍然失败。这是环境:

  • 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(内部版本24)
  • 单声道5.0.1.1

什么 解决它:

  • 创建一个新的Jenkins版本
  • 更改Jenkins工作空间路径
  • 打开整个Jenkins文件夹的权限(777)
  • 启用LLVM
  • 禁用所有链接
  • 完全卸载并重新安装Jenkins
  • 使用xbuild代替msbuild
  • 发誓很多
  • 我的中指

阅读 219

收藏
2020-07-25

共1个答案

一尘不染

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

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

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

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

  • 钥匙扣被锁定
  • codesign 不允许访问签名身份。
  • 钥匙串中存在多个身份,并且选择了错误的签名身份
  • 错误的供应配置文件与临时构建匹配。

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

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

2020-07-25