我有一个支持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),最新更新仍然失败。这是环境:
什么 不 解决它:
xbuild
msbuild
尝试删除DerivedData应用程序中的派生数据文件夹。它看起来像YourAPP_ dasfdsfsdafdsasfdsaf,根据这个苹果开发者论坛。
DerivedData
YourAPP_ dasfdsfsdafdsasfdsaf
该DerivedData数据文件夹位于~/Library/Developer/Xcode/DerivedData/
~/Library/Developer/Xcode/DerivedData/
如果这不起作用,则所有症状均指向签名证书(也称为签名身份)问题。
从命令行编译时似乎/usr/bin/codesign无法访问签名身份81088F8E194139DC4C6CE640716944E41FB0709F。不幸的是,可能有许多不同的原因:
/usr/bin/codesign
81088F8E194139DC4C6CE640716944E41FB0709F
codesign
msbuild假设您的签名身份在钥匙串中,请尝试在运行之前添加以下代码段~/Library/Keychains/login.keychain:
~/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
在构建脚本中存储钥匙串密码不是一个好主意,您可以按照本指南隐藏它们。