我有一个适用于iOS 8的Swift应用程序,它有一个应用程序组件,一个扩展组件,以及一个包含大量共享资源的框架 - 共享视图控制器,共享资源等。在框架中的某一点,我想要致电
UIApplication.sharedApplication().openURL(someURL)
但如果我在选中“仅允许应用扩展API”时这样做,则会出错,因为UIApplication.sharedApplication()在扩展中不可用。如果我取消选中该框,我会收到一个警告,即在扩展中包含框架可能不安全,而且我担心在提交时可能会导致拒绝。
如果此代码仅用于扩展,我会使用类似:
extensionContext.openURL(someURL, completionHandler: nil)
...但这不适用于独立应用,仅适用于扩展程序。
修改我的代码以确保扩展永远不会调用UIApplication.sharedApplication()。openURL()行,并且应用程序永远不会调用extensionContext.openURL()行,这是微不足道的。清除错误 - 只是扩展API框架中存在UIApplication.sharedApplication()会导致错误。
所以,在我开始研究hacks之前,是否有一个干净的解决方案让我调用openURL并采取正确的操作,而不会导致编译错误?
提前致谢!
答案 0 :(得分:2)
声明一个全局的Optional
闭包变量来打开共享框架中的URL。
public openURL: (NSURL->())? = nil
然后将其设置在您的应用代理application:didFinishLaunching:...
中,如下所示:
openURL = { UIApplication.sharedApplication().openURL($0) }
然后您可以从以下任何地方拨打openURL
:
openURL?(NSURL(string: "http://stackoverflow.com/")!)
此声明对您的扩展程序无效,因为您不会在应用扩展程序流程中设置openURL
。