iOS9 Share Extension 无法在 Xcode 上调试

Posted

技术标签:

【中文标题】iOS9 Share Extension 无法在 Xcode 上调试【英文标题】:iOS9 Share Extension can not debug on Xcode 【发布时间】:2015-11-23 12:05:12 【问题描述】:

当我从 Xcode 为真实设备构建共享扩展时,Xcode 任意停止调试。但是当我启动模拟器时,问题不会发生。

环境 Xcode 7.1.1 ios 9.1

详情 当我构建共享扩展时,Xcode 显示“已完成在 iPhone 上运行 MobileSafari.app”,但 Safari 没有运行。并且,方形停止按钮是任意灰色的。因此,我自己启动 Safari 并选择我的扩展程序并发布。调试部分不显示任何内容。此外,Rails 服务器不会发送 URL 请求。

这是我为真实设备构建共享扩展时的图片。

我不知道为什么真机无法在 Xcode 上启动共享扩展。 如果有人知道这个问题的答案,请告诉我。

【问题讨论】:

【参考方案1】:

通常,您可以通过转到调试 -> 附加到进程或 PID 并输入您的共享扩展名来调试共享扩展。从那里您可以在您的设备或模拟器上打开共享扩展,Xcode 的调试器应该正确附加并命中断点。但是,我注意到在执行此操作时不会显示日志消息,也不会为调试器视图中的变量填充值。

这是我让调试正常工作的方法。运行共享扩展方案。当它询问您要运行什么应用程序时,选择“照片”(因为这是您的扩展程序将在其中运行的应用程序)。照片应用程序将在您的设备上启动,您可以继续使用您的扩展程序。 Xcode 中的调试器应该会按预期工作。

【讨论】:

我会尽快检查。 你答案的第二部分应该是正确的。用 Xcode 9.2 测试,调试完美。 哇,多么直观。为什么仅仅设置一个断点是不够的?这超出了我的理解【参考方案2】:

我也遇到了这个问题,虽然很遗憾我不知道确切的解决方案,也许我可以提供一些可能有用的信息。

我(和你一样,从你的截图来看)正在使用 Cocoapods,而 Cocoapods 在代码签名后将资源从 pod 复制到应用程序扩展的包中。如果有记忆,这会以某种方式干扰代码签名,从而阻止应用程序在调试器下运行。

我相信这种情况的症状之一是日志出现在 mac 的控制台(或设备的控制台,不记得是哪个)中,上面写着“使用旧的 skool[sic] 方法对设备进行爆破”。

您可以通过从项目中删除 Cocoapods 或任何需要在编译后复制资源的 pod 来确认是这种情况。我相信解决方案是在扩展项目中添加某种特殊的构建阶段来复制捆绑资源,并禁用默认情况下 Cocoapods 使用的任何内容。

作为一种临时解决方案,我认为从设备中删除您的应用程序应该允许您在首次安装应用程序的运行时附加调试器一次。您也可以尝试删除项目的派生数据。

【讨论】:

谢谢本。通过您的帖子,我注意到我尚未在设备上重新安装。 所以我试了一下,检查了App Extension是否正常。结果是 App Extension 在 iPhone 上运行,我可以看到调试器输出。我没有删除 Cocoapods Library,但我认为你的回答是合理的。所以我选择你的答案是最佳答案。 问题再次发生。所以,接下来我删除了 Cocoapods 表单项目,但问题没有解决。

以上是关于iOS9 Share Extension 无法在 Xcode 上调试的主要内容,如果未能解决你的问题,请参考以下文章

来自 Share Extension 的 Safari 截图

Could not create a sandbox extension for /

/usr/pgsql-9.3/share/extension 中不存在 Postgres plpythonu 扩展

在 Share Extension (Swift) 中处理 NSItemProvider 数据类型

App Extensions篇之Share Extension

iOS扩展开发攻略Share Extension