【问题标题】:iOS 8 action extension icon is blank on device (works in simulator)iOS 8 操作扩展图标在设备上为空白(在模拟器中工作)
【发布时间】:2014-11-02 05:51:01
【问题描述】:

编辑2:

我已将问题提炼为最简单的项目。这是设置。

我创建了一个新的单视图应用程序并立即添加了一个新的操作扩展目标。我在 .xcassets 文件中创建了一个新的图标集,并添加了一个 iPad 视网膜大小的图标(我尝试填充所有图标,结果都是一样的)。

我确保将 Images.xcassets 包含在 Copy Bundle Resources 构建阶段:

然后在模拟器中运行应用程序时一切正常!

编译到设备但是会导致空白图标:

我认为这可能意味着我正在使用的 PNG 文件有问题,但这里的一切看起来也正常:

有人遇到过类似的吗?

我已经访问过诸如 this 之类的问题以寻找答案,我认为我做的一切都是正确的,但我仍然没有在操作表中看到图标。

这是我所做的:

  1. 创建了一个工作容器应用程序,该应用程序的工作应用程序图标存储在 Images.xcassets 中。然后我创建了一个动作扩展目标作为同一个项目的成员。

  2. 将 Images.xcassets 从我的包含应用程序添加到我的扩展程序的“复制捆绑资源”构建阶段。我知道这很有效,因为我可以在扩展程序中使用 UIImage.imageNamed(...) 从 .xcassets 文件中加载图像。

  3. 在我的扩展程序设置的常规选项卡中,我将“应用程序图标和启动图像”下的“应用程序图标源”指向 Images.xcassets 的名为“AppIcon”的资源,同样用于我的包含应用程序。

  4. 当这不起作用时,我做了一些进一步的阅读,发现动作扩展需要“alpha 蒙版”样式的图像。我在我的 .xcassets 文件中创建了另一个名为“AppIcon-2”的项目,并用所有大小的应用程序图标填充它,除了 1 色 + 透明度 PNG。我将我的扩展程序的“应用程序图标和启动图像”指向了这个新的“AppIcon-2”

我的操作扩展程序的图标仍然是一个空白的白色方块。有没有我遗漏的步骤? alpha 掩码必须采用一些非常特定的格式吗? (我只是在 Photoshop 中保存为 .png)。资源必须在 .xcassets 中有一些非常具体的名称吗?

我也对一些答案(如上面链接的答案)感到困惑,这似乎暗示问题已通过将 .xcassets 添加到构建阶段来解决。大多数应用程序图标不是完全不透明的吗? iOS 如何从完全不透明的应用图标生成 alpha 蒙版?

编辑:我不完全确定是什么改变造成了不同(我会尝试推断它并更新这篇文章,如果我弄明白了)但我现在看到一个基于“的 alpha 掩码的工作图标” AppIcon-2" 在模拟器上。我什至没有想过要检查模拟器,但它确实证明图标是从正确的位置拉出来的。设备对图像的处理方式有所不同。

【问题讨论】:

  • 我发现的另一件事是:在使用iPad Retina (8.0) 的模拟器上,该图标没有出现,但在其他模拟器上却出现了!这感觉就像 XCode 上的一个错误......
  • 确保在每次测试后执行 XCode: Project > Clean 和 iOS Simulator: Reset Content and Settings...。有时似乎图标更改被缓存...
  • 我想出了一些办法:在全局日志控制台中(iPhone 通过 USB 连接),这在启动操作扩展时显示:Sep 25 16:22:14 ASDF-iPhone MobileSlideShow[2643] <Warning>: Cannot access extension bundle. Sep 25 16:22:14 ASDF-iPhone kernel[0] <Notice>: Sandbox: MobileSlideShow(2643) deny file-read-data /private/var/mobile/Containers/Bundle/Application/ASDFF5A9-4BCD-4B60-B82B-8DC3CC98184A/Test Icon.app/PlugIns/ex.appex“测试图标”是我的主要应用程序和“前" 我的扩展应用程序。
  • 不错的发现。仍然不确定如何解决它。
  • 这不是问题的直接答案,而是关于“iOS 8 共享扩展问题的集合,以及雷达链接、示例项目和解决方法”主题的非常有用的解决方法列表" github.com/tumblr/ios-extension-issues

标签: ios iphone ios8 ios-app-extension


【解决方案1】:

您没有提到扩展程序的 Info.plist 设置,所以我假设您没有包含图标文件的条目。您需要在 NSExtensionAttributes 字典中添加一个名为 NSExtensionServiceToolbarIconFile 的键。该值为图标文件的名称。

至少它应该是这样工作的。在实践中,您当前似乎需要一个带有图标名称的顶级 CFBundleIconFile 键。据说这仅在NSExtensionServiceToolbarIconFile 不存在时使用,但至少目前是必要的。我两者都有,这可能不是必需的,但我更愿意将记录为正确的密钥留在原处,以防它在某个时候开始工作。

【讨论】:

  • 还是不行,假设我做得对。我将值设置为“AppIcon”(也尝试了“AppIcon-2”、“Images.xcassets”和“Images”)。我将它放在 NSExtensionAttributes 字典中,但也尝试将它作为 NSExtension 的直接子代。 developer.apple.com/library/prerelease/mac/documentation/… 将密钥描述为仅 OS X(但我了解文档并不总是完美无缺)。这对你有用吗?
  • 否,已更新答案。我现在正在这样做,我意识到我在上面遗漏了一个我在不同扩展程序上使用过的细节。
  • 感谢您的帮助,但这似乎对我不起作用。您为 CFBundleIconFile 键设置了什么值? “应用程序图标”?你的应用程序图标是什么样的?它是完全不透明的还是有透明度的?你的主应用使用的是同一个吗?
  • 我也有同样的问题。试过上面的步骤还是不行。奇怪的是,它只影响我在 Photos.app 中的动作扩展。不影响其他应用中的相同操作扩展。
  • NSExtensionServiceToolbarIconFile 仅适用于 OS X(不是 iOS!)根据文档:developer.apple.com/library/prerelease/mac/documentation/…
【解决方案2】:

我遇到了同样的问题。对我有用的是遵循汤姆哈灵顿的回答,但还要确保扩展图标的“目标成员”(右侧窗格)包括扩展目标和应用程序目标。 (在构建阶段下,它也应该列在两个目标的复制捆绑资源下。)

另外,请注意,您的扩展程序图标必须具有完全透明的背景,而不是纯白色。任何白色或透明以外的任何颜色都将呈现为纯深灰色。

希望这会有所帮助。抱歉,我想将此作为评论添加到 Tom 的回答中,但由于我的声誉,Stack Overflow 不允许我这样做。

【讨论】:

  • 谢谢,这里没有魔法。只是为了尽可能地复制你正在做的事情——你是使用 .xcassets 还是只是添加到项目中的文件? (我都试过了,但也许我可以限制我的搜索)。你是如何创建你的 PNG 的?只是 Photoshop “另存为...”?
  • 嗨大卫,你确定它在 Photos.app 中工作吗?该图标应该毫无问题地显示在其他应用程序中。这只是 Photos.app
  • @honcheng,将其发布为答案,我会接受。它适用于其他应用程序,它在设备上的 Photos.app 不起作用。我不敢相信我花了多长时间解决这个问题。
  • @austin 不,我没有解决方案。我也有同样的问题。只是不确定此处发布的两种解决方案是否只是专门指其他应用程序或 Photos.app。认为这一定是一个错误,因为相同的扩展在 Safari 中有效,但在照片中无效
  • 嗨,对不起,我错过了关于它特定于 Photos.app 的部分。我在 Safari 中尝试过,它可以工作。我的扩展程序不处理图像。
【解决方案3】:

我们的Yarnee App 也有同样的问题。但我发现除了相机胶卷之外,这些图标还可以在其他应用程序上使用,例如 Dropbox,请看这个截图:

感觉有点像bug……

【讨论】:

  • 这也是我最终意识到的。我刚刚向应用商店提交了一个无法使用的 photos.app 图标。
  • @AustinFitzpatrick 我们也提交了没有工作图标的文件,我们获得了批准。顺便提一句。 Wunderlist 应用程序有一个正常工作的图标...
  • 我收到了有关此问题的支持电子邮件。当然希望我可以从 Photos.app 中显示动作扩展图标!它在消息等中看起来很棒:(
【解决方案4】:

要让它与我现有的资产目录一起使用,我必须将以下内容添加到扩展程序的构建设置中:

我的资产目录中的集合名称是“ExtIcon”。我曾尝试在扩展的 info.plist 中设置 CFBundleIcon 和 NSExtensionServiceToolbarIconFile 键,但没有运气。这实际上似乎是有道理的,因为它与图标集链接到容器应用程序的方式相同,不是通过 info.plist,而是通过 Build Settings。

【讨论】:

  • 此设置已设置,但对我仍然不起作用。虽然看起来你的图标是全彩色的。仅以黑白方式开采。但是父应用的图标是全彩色的...
  • 那是一个测试图标。它显示为一个黑色的圆形正方形。现在我用蒙版黑白图像替换了它。
  • 为我工作。谢谢!!真的尝试了其他所有方法。
【解决方案5】:

编辑:Apple 在 iOS8.1 中修复了这个问题!

------------ 旧 ----------

我认为在这一点上,答案是向 Apple 提交错误报告

https://feedbackassistant.apple.com/

如果您可以提交您的准系统示例项目,那将有助于我们的事业!

这是我提交的:

总结:操作扩展图标在消息中显示良好,并且 UIActivityViewController,但是当它从照片应用程序中出现时, 图标为空白。

我认为这是 Apple Photos 应用程序的一个错误

复制步骤:按照这些说明,但从照片应用程序

http://www.photoinvestigator.co/blog/how-to-use-ios8-action-extensions/

预期结果:预期会出现元数据扩展的图标 正确地如 http://www.photoinvestigator.co/blog/how-to-use-ios8-action-extensions/

实际结果:图标为纯白色

版本:iOS 8.0.2、iOS 8.0.0

注意事项: iOS 8 action extension icon is blank on device (works in simulator)

这是使用我的 Messages App 扩展程序的示例,其中 图标正确显示: http://www.photoinvestigator.co/blog/how-to-use-ios8-action-extensions/ 但是从 Apple 的照片应用程序执行这些步骤,导致图标不 正确显示。

配置:任何运行 iOS8 的 iOS 设备。第三代 iPad、iPhone 5、 iPhone 5c、iPhone 6 Plus

附件:

编辑: 他们将其作为 ID 的副本关闭:Ticket ID: 17208813 进步!

【讨论】:

  • 我将把它标记为解决方案,因为它似乎是我前进的唯一途径。今晚我会提交我的错误报告。
  • 你有那个票证吗?
  • 他们将其作为 ID 的副本关闭:17208813 仍处于打开状态。至少他们注意到了这个问题!
  • 这个答案有一些死链接,请修复它
【解决方案6】:

问题似乎已解决on iOS 8.1。

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多