虽然有很多关于如何从共享扩展中打开包含/父应用程序的问题,但实际上没有人详细讨论提议的解决方案/黑客是否会得到苹果的批准。
一个这样的例子是
Share Extension to open containing app
建议共享扩展不应该打开容器应用程序。
在一段时间前浏览时,我发现一个非常有趣的线程在这里讨论了相同的主题
https://forums.developer.apple.com/thread/27295
线程问题,Apple是否允许使用openURL遍历UIResponder链打开父应用程序的hack? (与您发布的链接中显示的想法完全相同)。
虽然该线程再次没有提供明确的答案,但它是否会被苹果批准但指出了一个非常有效的关注和警告
+[UIApplication sharedApplication] 以及 -openURL: 对扩展不可用的事实在这里应该是一个重要提示。忽略该限制并通过 Objective-C 运行时查找符号不是一个好主意。
显然,线程暗示(隐含地,通过没有明确说明苹果将拒绝使用此类黑客攻击的应用程序的事实)虽然苹果现在会批准该应用程序,但这只是一个临时解决方案。
现在终于有了答案:
答案:
在最近@Bangalore 举行的一次苹果活动中,我有机会见到了@apple 扩展团队的开发人员。我告诉他们,我一直在使用上述黑客从共享扩展程序中打开应用程序,苹果是否允许这样做?
他的回答:
`UIResponder`
不是私有实体,因此使用 UIResponder 不会违反私有 API 使用条件,因此使用上述黑客的应用程序仍会得到苹果的批准。但事实上,您的代码通过 UIResponder 链解析以触发 openURL 的成本非常高,因此不建议/首选。由于 Apple 似乎意识到开发人员正在使用它,他们可能开始拒绝未来的应用程序。 (必须说,他不确定最后一点,苹果将来拒绝应用程序因此突出了可能)
他还碰巧提到了使用WebView 打开开发人员在很久以前使用过的应用程序。哪个不再起作用了。
结论:
是的,您可以使用上述技巧提交从扩展程序打开父应用程序的应用程序,但要完全意识到这只是一个临时解决方案,苹果希望您编写完全独立的共享扩展程序
已回答当前 iOS 版本 iOS11 的问题。答案可能会随着 iOS 的未来版本失效