-->

OSX可可坏指令坠毁(OSX Cocoa Bad Instruction crash)

2019-10-21 09:13发布

我正在开发一个应用程序(像一年),它工作正常,当涉及到提交到App Store的 - >我所有的问题开始:

1)应用程序商店将我,使我的应用程序在沙箱中运行(为什么苹果?为什么!?)。 花如2天明白,为什么只需切换“ON”的能力并不能使它......等等......最后我总算说服我的应用程序在沙箱中运行。

2)现在的应用程序经过验证的罚款,当我检查我发现它根本就不想上班(在Xcode或产品上运行)在提交前的应用程序可以但是提交到血腥的应用程序商店。

它只是崩溃谈到`applicationDidFinishLaunchingWithOptions”崩溃本身更是史诗‘线程1之前:EXC_BAD_INSTRUCTION(代码= EXC_i386_INVOP,制服=为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&) ()

我认为剩下的都是不相关的,因为它们都是关于一些图像加载器:/

最近我保证移除app sandbox钥匙或将其设置为NO解析我的问题,但如果我这样做,我又回到了发行数量1

所以我有点坚持一个鸡蛋和火鸡的问题:(

也许有些1知道什么有趣的办法或解决方案,以血腥的应用程序提交给强大的应用程序商店?

Answer 1:

听起来像苹果的文档在这里 :

集装箱完整性影响OS X的执法开发和销售周期。 这是因为,在创建和分发应用程序的过程中,应用程序是使用各种签名的代码签名。 具体的过程是如何工作的:

您创建一个项目之前,您将获得来自苹果的三个代码签名证书:开发证书,分发证书和(可选)开发者ID证书。 (要了解如何获得这些代码签名证书,阅读应用发布指南。)当与您的钥匙串对应的私钥一起使用,这些证书形成三个独立的数字身份。 对于开发和测试,那么您是与您的开发身份您的应用程序。 当你提交一个版本的应用程序商店,你用你的身份分配。 如果您正在分发应用商店之外的版本,您可以使用您的开发者ID身份。

当在Mac App Store分发您的应用程序,它与苹果的代码签名。 对于测试和调试,您可能需要运行你的应用程序的两个版本:您注册的版本和版苹果标志。 但OS X看到你的应用程序作为一个入侵者的苹果签署的版本,将不允许其推出:它的代码签名不匹配一个由你的应用程序的现有容器的预期。

如果您尝试运行你的应用程序的苹果签署的版本,你会得到包含一个类似的说法崩溃报告:

异常类型:EXC_BAD_INSTRUCTION(SIGILL)的解决方法是调整你的应用程序的容器识别您的应用程序的苹果签名版上的访问控制列表(ACL)。 具体而言,您添加您的应用程序的苹果签名版本的应用程序容器的ACL中指定的规范要求。



Answer 2:

我也有这个问题,虽然Droppy的答案是正确的,它并没有真正解决问题(至少不是我)。

周围有点搞乱后,我发现我有这个问题的原因是,(虽然我在Xcode的项目编辑在“能力”残疾人共享钥匙串),我仍然有添加了一个钥匙链价值。 删除此,或完全禁用所有应用功能(是的,包括沙盒)会解决这个问题。

我们希望,这样可以节省有人在未来的一段时间。



文章来源: OSX Cocoa Bad Instruction crash