打开App Sandbox崩溃的应用程序

时间:2017-01-11 14:03:12

标签: objective-c xcode macos

我得到了一个新的macbook pro 13“。我将所有文件都转移到了我的开发者资料中并将其读入Xcode。我认为一切都很好但我的所有应用程序都在_libsecinit_setup_secinitd_client中崩溃。经过一些检查后我意识到任何一个macos如果我打开App Sandbox,我创建的app会崩溃。以下是确切的步骤:

(1)在Xcode中创建新的Cocoa Application项目。构建并运行此工作。 (2)启用开发签名并选择我的开发者帐户。构建并运行此工作。 (3)转到功能并打开App Sandbox。构建并运行并崩溃 - 见下文

http://www.grandinetti.org/resources/appcrash.png

奇怪的是当我切换回我的2011 Mac Mini(运行相同的MacOS 10.12.2(16C67)和Xcode 8.2.1(8C1002)时,项目构建并运行App Sandbox打开。所以它似乎与我的MacBook Pro 13相关“但我似乎无法找到我做错的事。

有什么建议吗?

谢谢,

菲利普

P.S。我编码作为一种爱好,因为没有完全了解我本可以做的其他调查而道歉。

1 个答案:

答案 0 :(得分:1)

您应该阅读Apple document

  

现代Xcode可让您轻松为您的应用程序采用代码签名。您提供开发人员程序凭据,Xcode自动处理大部分其余部分。有关代码签名的更多信息,包括其工作原理和使用方式的说明,请阅读代码签名指南。

     

OS X强制应用程序容器与应用程序代码签名之间存在联系。这一重要的安全功能可确保其他沙盒应用无法访问您的容器。该机制的工作原理如下:

     

当系统为应用程序创建容器时,它会在该容器上设置访问控制列表(ACL)。该列表中的初始访问控制条目包含应用程序的指定要求(DR),该应用程序是应用程序签名的一部分,用于描述如何识别应用程序的未来版本。有关DR的说明,请参阅“代码签名指南”中的“代码要求”。   每次启动具有相同捆绑ID的应用程序时,系统都会检查应用程序的代码签名是否与容器ACL中某个条目中指定的指定要求相匹配。如果系统找不到匹配项,则会阻止应用程序启动。   OS X的容器完整性实施会影响您的开发和分发周期。这是因为,在创建和分发应用程序的过程中,应用程序是使用各种签名进行代码签名的。以下是该过程的工作原理:

     

在创建项目之前,您将从Apple获得三个代码签名证书:开发证书,分发证书和(可选)开发人员ID证书。 (要了解如何获取这些代码签名证书,请阅读“应用程序分发指南”。)   当与钥匙串中的相应私钥一起使用时,这些证书形成三个独立的数字身份。对于开发和测试,您可以使用开发标识对应用进行签名。当您向应用商店提交版本时,您将使用您的分发标识。如果您要在应用商店之外分发版本,则使用您的开发者ID身份。

     

当Mac App Store分发您的应用时,它会使用Apple代码签名进行签名。   对于测试和调试,您可能希望运行两个版本的应用程序:您签署的版本和Apple标志版本。但是OS X将您的应用程序的Apple签名版本视为入侵者,并且不允许它启动:其代码签名与您应用程序现有容器的预期不符。

     

如果您尝试运行Apple签名版本的应用,则会收到包含类似此声明的崩溃报告:

     

异常类型:EXC_BAD_INSTRUCTION(SIGILL)   解决方案是调整应用程序容器上的访问控制列表(ACL),以识别Apple签名的应用程序版本。具体而言,您将应用程序的Apple签名版本的指定代码要求添加到应用程序容器的ACL中。

此外,它与你的问题相同。 Here