【问题标题】:Unified openURL for framework + app + extension框架+应用+扩展统一openURL
【发布时间】:2014-08-27 11:57:04
【问题描述】:

我有一个适用于 iOS 8 的 Swift 应用程序,它有一个应用程序组件、一个扩展组件和一个包含大量共享资源的框架 - 共享视图控制器、共享资产等。在框架中的某个位置,我想要打电话

UIApplication.sharedApplication().openURL(someURL)

但是,如果我在选中“仅允许应用扩展 API”时这样做,则会出错,因为 UIApplication.sharedApplication() 在扩展中不可用。如果我取消选中该框,我会收到一条警告,指出在扩展中包含框架可能不安全,我担心在提交时间方面可能会导致拒绝。

如果此代码仅用于扩展,我会使用类似的代码:

extensionContext.openURL(someURL, completionHandler: nil)

…但这不适用于独立应用程序,只能在扩展程序中使用。

修改我的代码以确保扩展程序永远不会调用 UIApplication.sharedApplication().openURL() 行,并且应用程序永远不会调用 extensionContext.openURL() 行,但这并不重要清除错误 - 只是扩展 API 框架中存在 UIApplication.sharedApplication() 会导致错误。

那么,在我开始研究 hack 之前,是否有一个干净的解决方案可以让我调用 openURL 并采取正确的操作,而不会导致编译错误?

提前致谢!

【问题讨论】:

    标签: swift ios8


    【解决方案1】:

    声明一个全局 ?Optional 闭包变量以在您的共享框架中打开 URL。

    public openURL: (NSURL->())? = nil
    

    然后在您的应用代理的application:didFinishLaunching:... 中设置它,如下所示:

    openURL = { UIApplication.sharedApplication().openURL($0) }
    

    然后你可以像这样从任何地方拨打openURL

    openURL?(NSURL(string: "http://stackoverflow.com/")!)
    

    此声明不会对您的扩展程序产生影响,因为您不会在应用程序扩展程序过程中设置openURL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2020-05-02
      • 2014-08-09
      • 2014-10-22
      相关资源
      最近更新 更多