如果我从共享扩展中打开包含应用程序,Apple 会拒绝吗?

Will Apple Reject If I open containing app from share extension?

我正在使用 here 提供的解决方案从共享扩展中打开我的包含。它似乎没有使用任何私有 API 方式来做到这一点,尽管它很脆弱。

如果我使用了我的App,苹果会拒绝吗?任何人都有一个批准的应用程序打开包含来自共享扩展的应用程序?如果是这样,正确的做法是什么?

感谢任何指点。

虽然关于如何从共享扩展中打开containing/parent应用程序有很多问题,但none实际上详细讨论了建议的solution/hack是否会被苹果批准。

一个这样的例子是

Share Extension to open containing app

建议共享扩展不应打开容器应用程序。

前段时间浏览时,我在这里发现了一个非常有趣的讨论同一主题的帖子

https://forums.developer.apple.com/thread/27295

线程问题,苹果是否允许使用 openURL 遍历 UIResponder 链打开父应用程序的 hack? (与您发布的 link 中显示的想法完全相同)。

虽然线程再次没有提供明确的答案,是否会被苹果批准,但指出了一个非常有效的关注和警告

The fact that +[UIApplication sharedApplication], and hence -openURL:, is not available to extensions should be an important hint here.Ignoring that restriction and looking up the symbols via the Objective-C runtime is not a good idea.

很明显,线程暗示(暗示,通过没有明确说明苹果将拒绝具有此类黑客的应用程序的事实)虽然苹果现在会批准该应用程序,但这只是一个临时解决方案。

现在终于找到答案了:

答案:

在最近@Bangalore 举行的苹果活动中,我有机会见到了扩展团队@apple 的开发人员。我告诉他们我一直在使用上面提到的 hack 从共享扩展打开应用程序苹果会允许吗?

他的回答:

`UIResponder`

不是私人实体,因此 UIResponder 的使用不会违反私人 API 使用条件,因此使用上述 hack 的应用程序仍被 apple 批准。但事实是,您的代码通过 UIResponder 链解析以触发 openURL 是非常昂贵的,而不是 suggested/preferred。Apple 似乎意识到开发人员在使用它,他们 可能 以后开始拒绝该应用程序。 (必须说,他不确定最后一点,苹果未来拒绝应用程序因此突出可能)

他还碰巧提到了使用 WebView 来打开开发人员很久以前也使用过的应用程序。哪个不再有效。

结论:

是的,你可以使用上面的 hack 提交打开父应用程序的应用程序,但要完全意识到这只是一个临时解决方案,苹果希望你编写完全独立的共享扩展程序

iOS11 的当前 iOS 版本已回答问题。在 iOS

的未来版本中,答案可能会失效