升级到Xcode 8后,由于以下错误,我无法在设备上进行调试:
App installation failed. No code signature found.
Run Code Online (Sandbox Code Playgroud)
我的设置,观察以及到目前为止我尝试过的内容:
我没有看到为什么这条消息应该出现在日志末尾的原因:
/Users/Val/Library/Developer/Xcode/DerivedData/Mathematics-dzakmzlewrmgvibasvuixiwmkwwp/Build/Products/Debug-iphoneos/Mathematics.app: object file format unrecognized, invalid, or unsuitable
Command /usr/bin/codesign failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
我绝望,我的所有证书和个人资料都是有效的,应用程序本身没有任何错误.
我需要确切知道我的代码身份是什么.我在哪里可以找到它?代码签名身份的通常格式是什么?谢谢!
我刚刚更新到最新版本的Xcode,并在运行我们的自动构建脚本时遇到错误(他们使用xcodebuild和xcrun命令).
在### Codesigning '/Users/...日志语句之后立即发生错误,如下所示:
Program /usr/bin/codesign returned 1 : [/var/folders/__/63j90nkn2lg18ct1nq791_nc0000gn/T/g5hbigh1tM/Payload/CurrentTarget.app: replacing existing signature
/var/folders/__/63j90nkn2lg18ct1nq791_nc0000gn/T/g5hbigh1tM/Payload/CurrentTarget.app: cannot find code object on disk
Run Code Online (Sandbox Code Playgroud)
我在这里找到了文档,列出并简要描述了错误,但没有具体说明如何解决它.
因为我花了很长时间寻找解决方案(没有任何关于SO)我将在下面发布答案以防其他人遇到同样的问题.
我想自动化一些ClickOnce部署工件的代码签名 - 应用程序exe和清单.我正在使用signtool来实现这一目标.为了使私钥可用于签名并保护包含私钥(.pfx文件)的证书文件,我的计划是使用不可导出的密钥将证书安装到本地计算机证书存储中.(我知道有一些方法可以导出密钥,即使它被标记为不可导出.)该机器是一个持续集成服务器,只有少数人可以访问.我希望以这样一种方式进行设置,即只要需要使用私钥,就需要输入私钥密码.然后我会设置一个自动作业(使用Jenkins),这需要一个可以收集私钥密码的构建参数.该面具密码插件将被用来掩盖同时进入,并在控制台输出的密码.
但是,我遇到了几个障碍.首先,即使存在"启用强私钥保护.如果启用此选项,每次应用程序使用私钥时都会提示您." 导入证书时,它似乎仅在将其导入当前用户存储而不是本地计算机存储时可用.其次,即使此选项可用,在使用商店中的证书进行签名时,signtool工具也不提供设置密码的选项.密码参数'/ p'仅在使用pfx文件作为私钥源('/ f'选项)时适用.鉴于此,这似乎不是一个可行的选择.注意:即使"启用强私钥保护".可用于机器商店中的证书,我的测试表明,尝试使用带有此选项的证书只会弹出一个对话框,要求获得使用它的权限,这显然不适用于自动化作业.我原本以为"提示"意味着它会要求输入密码.
我考虑过的另一个选择是创建ACL以保护证书存储中的私钥.这可以通过右键单击证书并选择All Tasks ... |来完成 管理私钥...对话框.这会将私钥使用限制为仅限授权.(注意:当没有私钥权限的用户尝试使用它进行签名时,他们会收到消息"SignTool错误:找不到符合所有给定条件的证书.")但是,我不想提供访问权限到Jenkins构建服务使用的凭据,因为任何构建作业都可以签署代码.我可以创建一个作业来执行脚本以作为特定用户运行签名命令.这需要将域用户名和密码作为构建参数.我可以使用Jenkins Mask Passwords插件来做到这一点.但是,我并不喜欢这样,因为我不满意掩码密码足以防止暴露域凭证,如果受到破坏,它将提供比私钥更多的访问权限.
如果我放弃了将证书存储在计算机存储中的原始想法,可以选择将证书pfx文件放在构建计算机上的ACL安全文件夹中,只有构建过程和签名用户具有权限.这样做可以让我创建一个构建作业来使用包含的私钥,同时不将文件暴露给有权访问该机器的其他人.要使用私钥,构建参数需要收集私钥密码.
最后,可以选择使用智能卡存储证书,但我们已经决定反对.
所以,我的问题是,有没有其他方法可以做到这一点1)保护私钥不被复制,2)防止私钥被未授权用户用于签署代码和3),给定私钥密码是由授权用户提供,使用构建服务进行签名的私钥?
好吧,这让我发疯了,如果有人可以帮我调试,我真的很感激:
常规选项卡

构建设置

运行应用程序时

救命!这是怎么回事?
PS由于某些原因,在选择"Mac App Store"并设置我的签名身份后,"常规"选项卡中的"签名"将自动回退到"无".如果我将其恢复为"Mac App Store","Debug"和"Release"切换到某些通用的"Mac Developer".
更新(这是日志显示的)
EXC_CRASH (Code Signature Invalid)
Run Code Online (Sandbox Code Playgroud) 我遇到以下问题中描述的错误问题:
发布的Android apk给出错误"包文件未正确
签名"从Google Play下载我的应用程序时,有些(但不是全部)用户收到"包文件未正确签名"
具体来说,当某些用户尝试下载我的Google Play应用时,他们会收到错误,而有些用户却没有.
我的问题是:如何在提交之前检测问题是否会发生?
当我跑步的时候,这是值得的
jarsigner -verify -verbose -certs myapk.apk
Run Code Online (Sandbox Code Playgroud)
我看到如下内容:
86226 Sun Nov 09 10:34:54 EET 2014 META-INF/MANIFEST.MF X.509,// [遗漏个人资料] [证书有效期为2014年8月20日上午8:04至1/5/42 7 :04 AM] [CertPath未经过验证:Path不与任何信任锚链接] //如上所述的几百个条目,然后:jar验证.
警告:此jar包含未验证证书链的条目.此jar包含不包含时间戳的签名.如果没有时间戳,用户可能无法在签名者证书的到期日期(2042-01-05)之后或任何未来的撤销日期之后验证此jar.
我们刚刚从SHA-1切换到SHA-2代码签名证书.(作为背景信息,我们使用COMODO代码签名证书在Windows上使用signtool.exe签署.exe和.xap文件.)我们使用经过认证的时间戳来执行此操作,以确保Windows在代码签名证书后始终信任代码签名到期.
现在我注意到使用http://timestamp.comodoca.com/authenticode时,时间戳证书仍然是SHA-1证书.(详细信息:df946a5 ...主题'CN = COMODO时间戳签名者,O = COMODO CA Limited,L = Salford,S =大曼彻斯特,C = GB'.)
(在Windows上,可以通过签名.exe查看该证书,然后在其Explorer Properties对话框中转到Digital Signatures选项卡,选择签名并单击Details,然后在Digital Signature Details对话框中单击counter签名并单击Details,然后在第二个"数字签名详细信息"对话框中单击"查看证书".如果"签名哈希算法"为"sha1",则证书为SHA-1证书.)
这会是一个问题吗? 换句话说,在我们当前的代码签名证书过期之后,并且在Microsoft Windows将SHA-1视为破坏的算法(最迟在2020年)之后,我们当前的签名是否仍然可信?或者Windows会说,"时间戳在代码签名证书的有效范围内,但时间戳是用SHA-1证书签名的,所以我不相信时间戳,因此我不相信这个签名"?
我们可以/应该使用其他服务吗?(不是Verisign的http://timestamp.verisign.com/scripts/timstamp.dll,因为他们还使用SHA-1时间戳证书,即6543992 ...)
我知道如何查看.ipa文件的配置文件的到期日期(通过将ipa重命名为zip,然后解压缩并查看embedded.mobileprovisioning文件中的ExpirationDate键).
但是,如何查看用于签署ipa的证书本身的到期日期?
我发现你可以使用codesign实用程序来"提取"证书:
codesign --display --extract-certificates /Applications/Example.app
Run Code Online (Sandbox Code Playgroud)
这会产生三个文件:codesign0,codesign1,codesign2.不知道如何继续.
我正在使用数字证书签署我的安装程序.使用Inno Script Studio时,我已正确定义了我的签名工具,其中包含MS签名工具,证书密码等的路径.我只是简单地引用它
SignTool=signtool
Run Code Online (Sandbox Code Playgroud)
这很好用.
但是当我尝试通过命令行编译我的脚本时使用:
C:\Program Files (x86)\Inno Setup 5>iscc "C:\Users\username\Documents\MyInstaller.iss"
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
[Setup]部分指令"SignTool"的值无效.
当我阅读文档时,它指出:
将自动指定使用IDE配置的任何Sign Tools
所以我的理解是我不应该使用/S参数?从命令行构建时签署设置文件的正确方法是什么?
code-signing ×10
ios ×6
xcode ×4
certificate ×2
iphone ×2
android ×1
apk ×1
app-store ×1
codesign ×1
inno-setup ×1
ipa ×1
jenkins ×1
macos ×1
objective-c ×1
provisioning ×1
security ×1
sha1 ×1
sha2 ×1
signtool ×1
timestamping ×1
xcode8 ×1
xcodebuild ×1