当前位置: 首页 > 面试题库 >

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

严俊彦
2023-03-14
问题内容

我有一个支持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
  • 发誓很多
  • 我的中指

问题答案:

尝试删除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

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



 类似资料:
  • 问题内容: [不重复类似的问题,如下面进一步解释的那样] 从Jenkins内部运行XCodeBuild时,出现代码签名错误,但可以从命令行或Xcode内部生成。 过去有几个人遇到过这个问题,他们的共同主题是Jenkins在启动时以守护程序用户身份运行,因此尝试访问系统钥匙串。人们应用的解决方案是将凭据复制到系统钥匙串,或者运行命令来设置要使用的钥匙串。 但是,就我而言,如果我查看活动管理器中的启动

  • 我已经用iText 7创建了代码,它能够用使用ECDSA密钥对的X509证书对给定的PDF进行数字签名。当我在Acrobat Reader DC中打开这个签名的PDF时,它正确地读取它,并验证它是有效的(meaing doc在签名后没有修改,等等)。 但是,当我尝试用iText 7验证同一文档时,完整性和真实性检查返回false。 下面是示例代码: 和从签名中提取的示例输出: 至于互操作性,我不确

  • 最近我需要在Java中使用RSA对一个字符串进行签名,并在C++中验证签名。 在Java,现在我认为一切都是好的,我创建了public.keystore和private.keysore,可以成功地对数据进行签名和veify。但是当我试图用C++验证它时,它显示签名失败。 这是我的Java代码,在Java,我将数据签名到base64String,并将其保存在我的本地文件中,保存为“sig.dat”,

  • 当前配置: 我目前的项目在依赖项中使用了很多库。但是如果库很少的项目不会被标记这样的错误。 Android Studio 1.5 RC1 compileSdkVersion'Google Inc.:Google API:23 buildToolsVersion'23.0.2' 类路径'com.android.tools.build: gradle: 1.3.1' 我已经做了但没有解决问题的活动:

  • 我运行的是Android Studio版本 Android Studio大黄蜂2021.1.1金丝雀11和Android Studio北极狐2020.3.1补丁2 在我的Mac M1上。在这两个版本中,当我试图在设备上调试时, 我试过了 无效并重新启动 重新启动了我的计算机, 重新启动设备 重新启动ADB服务器。 但仍然有同样的问题。 你知道这里发生了什么吗?

  • 我在Android Studio中生成签名的APK有一个问题。几天前它还很好,我不知道哪里出了问题。我在尝试fgenerate签名APK的任何项目中都得到了这个错误: