ios8 照片编辑扩展问题

Posted

技术标签:

【中文标题】ios8 照片编辑扩展问题【英文标题】:ios8 Photo Editing Extension problems 【发布时间】:2014-12-09 09:39:42 【问题描述】:

我一直在开发一个用于编辑照片的应用程序,我想为照片应用程序添加一个扩展程序。扩展在模拟器上完美运行,没有任何问题。

但是当我尝试在我的 iPhone 6 上运行它时,我遇到了 2 个问题:

    配置文件存在问题。我知道对于扩展,我需要一个新的 AppID(名为 app.myapp.com.extension,主 AppID 是 app.myapp.com)和新的配置文件。我使用新的 AppID 创建了 2 个新的配置项(一个用于开发,另一个用于分发),但是当我尝试在设备上运行它时出现此错误:

错误:嵌入式二进制文件未使用与 父应用。验证嵌入式二进制目标的代码签名设置 匹配父应用的。嵌入式二进制签名证书:-(Ad Hoc 代码签名)父应用程序签名证书:iPhone 开发人员:Mauro Vime (-----------------)

我重新生成了开发配置文件以检查它是用于开发而不是用于 Ad Hoc,但我仍然遇到同样的问题。

    所以我尝试从应用程序中导出 ipa 并运行它。该应用程序运行完美,但扩展程序只显示黑色视图,而不是包含照片的我的视图。然后我检查了手机的崩溃日志,看到了这个:

事件标识符:9E578D78-FAB7-419E-AB35-7BA7B0821AFA CrashReporter 密钥:ae6bdea47a4e64b09a8fb7fa8599b5e23ceb5311 硬件 型号:iPhone7,2 进程:扩展 [2598] 路径: /private/var/mobile/Containers/Bundle/Application/------------/------------/PlugIns/extension.appex/extension 标识符:app.myapp.com.extension 版本:1 (1.0) 代码类型:ARM-64 (Native) 父进程: launchd [1] 日期/时间:2014-10-14 01:29:21.482 +0200 发布 时间:2014-10-14 01:29:16.170 +0200 操作系统版本:ios 8.1 (12B407) 报告版本:105 异常类型:EXC_CRASH (SIGABRT) 异常子类型:LAUNCH_HANG 异常消息:The 扩展花费了太多时间来初始化突出显示的线程:0 Backtrace 不可用 Unknown thread crashed with ARM Thread State (64 位): x0:0x0000000000000000 x1:0x0000000000000000 x2:0x0000000000000000 x3:0x0000000000000000 x4:0x0000000000000000 x5:0x0000000000000000 x6:0x0000000000000000 x7:0x0000000000000000 x8: 0x0000000000000000 x9: 0x0000000000000000 x10: 0x0000000000000000 x11: 0x0000000000000000 x12: 0x0000000000000000 x13: 0x0000000000000000 x14: 0x0000000000000000 x15: 0x0000000000000000 x16: 0x0000000000000000 x17: 0x0000000000000000 x18: 0x00000000000000000 x19: 0x0000000000000000 x20: 0x0000000000000000 x21: 0x0000000000000000 x22: 0x0000000000000000 x23: 0x00000000000000000 x24: 0x0000000000000000 x25: 0x0000000000000000 x26: 0x0000000000000000 x27: 0x0000000000000000 x28: 0x0000000000000000 fp: 0x0000000000000000 lr: 0x0000000000000000 sp:0x000000016fdb3b68 pc:0x00000001200f9000 cpsr:0x00000000 二进制图像:0x1200f8000 - 0x12011ffff dyld arm64 /usr/lib/dyld

这里说该应用程序在 8.1 设备上运行,但我也在 8.0.2 iOS 中尝试过,并且出现了同样的问题。看到消息:“扩展程序初始化时间太长”后,我刚刚清除了 viewDidLoad 和 viewWillAppear 函数,因此它们不执行任何代码,但问题仍然存在。

有没有人遇到过这个问题并有解决方案?

【问题讨论】:

我在自定义键盘中也面临同样的问题 自定义键盘我也面临同样的问题。 "扩展花费了太多时间来初始化" 我也面临与 Today Widget 相同的问题。 “扩展花费了太多时间来初始化”。有人有解决办法吗? 【参考方案1】:

可能是您没有使用 64 位架构(扩展需要)?请参阅 Apple 的 App Extension Programming Guide 中的“关于 64 位架构的说明”。

【讨论】:

arm64 包含在构建设置中。根据上面的链接,“当您创建新的应用程序扩展目标时,Xcode 包含适当的 64 位架构及其“标准架构”设置。” 我在现有项目中添加了照片编辑扩展,因为该项目不支持 arm64,所以扩展也不支持。就我而言,我必须手动添加 arm64 才能让扩展程序在实际设备上运行。【参考方案2】:

确保 ArchitecturesValid Architectures 包含 arm64 并且 Build Active Architecture OnlyNo 用于使用的配置(调试/发布)。

我们将 Build Active Architecture Only 设置为 Yes,因此 Jenkins 只构建了 armv7 二进制文件(尽管 xcode 根据连接的设备构建了正确的二进制文件)。似乎 armv7 应用程序在 arm64 设备上运行良好,但 armv7 应用程序扩展无法加载并出现奇怪的错误“扩展程序初始化时间太长”。修复 Build Active Architecture Only 后,设置 fat binary 被构建(armv7+arm64)并且扩展工作正常。

【讨论】:

【参考方案3】:

这两个问题我都遇到过:

对于代码签名问题,我认为 Xcode 中存在与添加应用扩展目标相关的错误。这最初把我搞砸了,我最终得到了这个错误。 - 您需要在开发者中心删除并重新生成应用程序和应用程序扩展的配置文件。 - 如果您使用应用程序组来共享信息,请从功能和开发中心中删除,然后在功能部分重新启用。

对于 LAUNCH_HANG 问题,似乎有一个有限且小的(未记录的)窗口供扩展程序在 iOS 放弃之前完全加载。 - 查看链接到扩展程序的所有代码。不要包括任何你不是绝对需要的东西。

我的特殊问题是当我为我的扩展目标添加一个 podspec 时。我复制了我的主应用程序的目标,并没有意识到我在扩展中包含了 Flurry。 Flurry 没什么问题,但它是一个大型静态库,当宿主应用程序启动我的扩展时,它需要映射到内存中。删除它,错误就消失了。

【讨论】:

以上是关于ios8 照片编辑扩展问题的主要内容,如果未能解决你的问题,请参考以下文章

如何调用 iOS 照片编辑扩展?

无法为照片编辑扩展添加 TTF 字体

iOS8中怎样旋转和裁剪相片

这今天扩展(iOS8)可能吗?

如何使用 Photos API 在 iOS 8.0 中检索照片扩展名 (jpg/png)?

iOS 7 从相册中挑选照片,编辑照片,替换原始照片