如何在 Info.plist 中将目标内容标识符附加到快捷方式项目?

4

如果您的应用程序支持场景,那么当用户在Springboard长按您的应用程序图标并点击其中一个快捷菜单项时,该方法将在您的场景委托中调用:

  • windowScene(_:performActionFor:completionHandler:)

但是,如果您的应用程序还支持多窗口,则运行时需要一种方法来知道要调用哪个窗口场景的委托。

为了回答这个问题,您的UIScene的activationConditions需要已设置为一个UISceneActivationConditions对象,其canActivateForTargetContentIdentifierPredicateprefersToActivateForTargetContentIdentifierPredicate适当地指定谓词。 相关 要查询的targetContentIdentifier是UIApplicationShortcutItem的一个属性;它只是一个字符串,例如"myShortcutIdentifier"

谓词的self传入的targetContentIdentifier字符串,因此谓词将如下所示:

let pred = NSPredicate(format: "self == 'myShortcutIdentifier'")

就像在https://developer.apple.com/videos/play/wwdc2019/259/中所解释的那样,目前为止还不错。但是如何将目标内容标识符附加到在Info.plist中定义的静态UIApplicationShortcutItem?


你最终弄清楚这个是怎么工作的了吗? - jbehrens94
1
@jbehrens94 我没有。我已经向苹果提交了一个错误报告,但迄今为止还没有得到回应。在我看来,就像iOS 13的许多方面一样,他们只是匆忙通过了这个版本,而没有考虑后果。 - matt
我可以帮忙推动这个错误报告吗?我想尽可能了解关于iOS 13场景的更改,但目前看来我们只能使用动态快速操作。 - jbehrens94
没错,只需提交自己的错误报告即可。苹果公司表示他们会根据数量来回应,所以越多越好。您不需要引用我的报告编号,但它是FB7353757。 - matt
完成。希望他们能给我们启发。 - jbehrens94
1个回答

3
你可以根据源代码在Info.plist中设置UIApplicationShortcutItemTargetContentIdentifier。然后,你可以在UISceneActivationConditions上设置can或prefers条件。这将触发UIWindowSceneDelegate上的windowScene:performActionForShortcutItem:completionHandler:方法。

啊哈,很酷。苹果有文档记录这个吗?也许自从我写问题并提交错误报告以来他们已经添加了这个功能。 - matt
它没有文档记录,我正在尝试让它工作,但我开始怀疑这个键是否有效。我确实收到了正确的windowScene回调,但没有targetContentIdentifier。也许需要使用多个窗口,但整个系统的模糊性仍然让我困扰。 - jbehrens94
也许那个人只是编造了这件事。 - matt
或许自去年12月以来,苹果已经对此进行了更改? - jbehrens94
1
这完全涉及到多窗口;这就是目标内容标识符和我的原始问题的全部目的。如果苹果没有记录 UIApplicationShortcutItemTargetContentIdentifier 键的存在,而我们又无法让它起作用,我不相信这个键实际上存在(我的意思是,你可以将其放入 Info.plist 中,但如果运行时忽略它,那就毫无意义)。因此,到目前为止,我不能接受这个答案是正确的。 - matt
在网上关于这个的信息很少,所以我想提一下,我刚刚在我的应用程序中实现了UIApplicationShortcutItemTargetContentIdentifier并且它有效。在我的Info.plist中,我为每个快捷方式都分配了一个以“shortcut/”开头的UIApplicationShortcutItemTargetContentIdentifier,例如“shortcut/settings”。对于不应处理快捷方式的场景委托,我使用谓词“NOT self BEGINSWITH 'shortcut/'”作为canActivateForTargetContentIdentifierPredicate - Ziconic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接