OSX可可坏指令崩溃

时间:2014-12-08 22:25:26

标签: objective-c macos cocoa sandbox xcode6.1

我正在开发一个应用程序(比如一年)并且在提交到App Store时工作正常 - >我的所有问题都开始了:

1)应用程序商店让我让我的应用程序在沙箱中运行(为什么Apple?为什么!?)。 花了2天的时间来理解为什么只是切换" ON"在能力上没有成功...... 等...最后我设法说服我的应用程序在沙盒中运行。

2)现在应用程序通过验证正常,可以提交到血腥的App Store 但是,当我在提交之前检查应用程序时,我发现它根本不想工作(从Xcode或产品运行)。

在涉及`applicationDidFinishLaunchingWithOptions"之前它只是崩溃了。 崩溃本身就更具史诗性了#34; thread1:EXC_BAD_INSTRUCTION(代码= EXC_i386_INVOP,subdued = 0x0)"

我看到很多装配线 - >从大会内部的评论中我了解到应用程序试图打开"打开"一个沙盒,但随后出现了错误的指示:( ud2

我看到的卡住了:

_libseinit_initialize_once
0 _libsecinit_setup_secinitd_client
1 _libsecinit_initialize_once
2 _dispatch_client_callout
3 dispatch_once_f
4 libSystem_initializer
5 ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) ()

我认为其余的都不相关,因为它们都是关于某些IMAGE加载器:/

最近我确保删除app sandbox密钥或将其设置为NO解决了我的问题,但如果我这样做,我会回到第1号发布

所以我有点卡住了鸡蛋和火鸡的问题:(

也许有些人知道任何有趣的解决方法或解决方案将血腥的应用程序提交给强大的应用程序商店?

2 个答案:

答案 0 :(得分:1)

听起来像Apple文档here

  

OS X的容器完整性实施会影响您的开发和使用   分配周期。这是因为,在创作过程中   分发应用程序时,应用程序是使用各种签名进行代码签名的。   以下是该过程的工作原理:

     

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

     

当Mac App Store分发您的应用时,它会以一个   Apple代码签名。对于测试和调试,您可能想要运行   您的应用的两个版本:您签署的版本和Apple版本   迹象。但OS X将Apple的签名版本视为您的应用程序   入侵者并且不允许它发射:它的代码签名没有   匹配应用程序现有容器所期望的那个。

     

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

     

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

答案 1 :(得分:1)

我也遇到了这个问题,尽管Droppy的回答是正确的,但它并不能真正解决问题(至少对我来说不是)。

经过一番弄乱后,我发现出现此问题的原因是,(尽管我在Xcode的项目编辑器的“功能”中禁用了钥匙串共享),我仍然添加了钥匙串值。删除此功能或完全禁用所有应用程序功能(是的,包括沙箱)都可以解决此问题。

希望这可以节省将来的时间。