设备的 Ad-Hoc 代码设计在 Studio 中成功,在 Jenkins 中失败
问题:设备的 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
在构建脚本中存储钥匙串密码不是一个好主意,您可以按照本指南隐藏它们。
更多推荐
所有评论(0)