【问题标题】:OSX Cocoa Bad Instruction crashOSX Cocoa Bad Instruction 崩溃
【发布时间】:2014-12-08 22:25:26
【问题描述】:

我正在开发一个应用程序(大约一年)并且在提交到 App Store 时它运行良好 -> 我所有的问题都开始了:

1) 应用商店会让我让我的应用在沙箱中运行(为什么是 Apple?为什么!?)。 花了大约 2 天的时间才明白为什么仅仅在功能中切换“ON”并不能使它... 等等……最后我设法说服我的应用在沙箱中运行。

2) 现在应用通过验证很好,可以提交到该死的应用商店 但是,当我在提交之前检查应用程序时,我发现它根本不想工作(从 Xcode 或产品运行)。

它只是在涉及 `applicationDidFinishLaunchingWithOptions" 之前崩溃 崩溃本身更加史诗“thread1: EXC_BAD_INSTRUCTION (code=EXC_i386_INVOP, subdued = 0x0)”

我看到很多装配线 -> 从装配内的 cmets 我了解到该应用程序试图“打开”一个沙箱,但随后出现了错误的指令:(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

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

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

【问题讨论】:

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


    【解决方案1】:

    听起来像苹果文档here

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

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

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

    如果您尝试运行应用的 Apple 签名版本,您会得到一个 包含与此类似的语句的崩溃报告:

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

    【讨论】:

    • 你是对的!!但是我可以做所有这些(ACL)我dk我没有找到任何容器:(没关系,但我设法运行我的应用程序,让我们称之为解决方法,阅读我认为ACL问题只会发生的文档在本地机器上。(我想我是对的)所以我只是通过电子邮件将 .app 发送给我自己,这基本上是由 [*.app copy] 制作的,所以我有一个开箱即用的新 .app,哇,我不得不承认我很惊讶,它有效!!!!!!! 非常感谢你!!给我你的地址和啤酒;)
    • @user3351949 很高兴为您提供帮助:)
    【解决方案2】:

    我也遇到过这个问题,虽然 Droppy 的回答是正确的,但并没有真正解决问题(至少对我来说不是)。

    经过一番折腾,我发现我遇到这个问题的原因是,(虽然我在 Xcode 的项目编辑器的“功能”中禁用了钥匙串共享)我仍然有一个钥匙串增值。删除它或完全禁用所有应用功能(是的,包括沙盒)将解决此问题。

    希望这可以为将来节省一些时间。

    【讨论】:

      猜你喜欢
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多