【问题标题】:Swift - 'sharedApplication is unavailable.' Use view controller based solutions where appropriate insteadSwift - 'sharedApplication 不可用。'在适当的地方使用基于视图控制器的解决方案
【发布时间】:2015-12-02 03:15:44
【问题描述】:

我正在使用以下行在我的 Swift 应用程序中打开一个外部 URL:

UIApplication.sharedApplication().openURL(url)

在我通过 CocoaPods 将 Realm 添加到我的项目之前,这一切正常。那时,它开始给我下面的两个编译错误:

'sharedApplication()' 不可用:使用基于视图控制器 适当的解决方案。

“openURL”不可用

这些错误表明 API 对 Application Extensions 不可用,但我的代码位于普通应用程序中,而不是扩展程序中。为什么添加 Realm 会导致编译器认为它在 App Extension 中?

【问题讨论】:

  • 您是否使用包管理器来安装像 pod 一样的领域?如果您卸载 Realm,您的项目也会编译吗?并且请指定您使用的 Xcode 版本
  • 我正在使用 Cocoapods 和 Xcode 7
  • UIApplication.sharedApplication() 和 Realm 没有关系,对吧?看来您正在使用扩展程序? [UIApplication sharedApplication] 不适用于扩展。
  • 您使用的是哪个版本的 CocoaPods?
  • 这不是 stackoverflow.com/questions/32609776/… 的副本。这里的问题是正在使用旧版本的 CocoaPods,a bug with it 导致来自 Realm 目标的设置应用于用户的应用程序目标。更新到 CocoaPods v0.39 或更新版本应该可以解决这个问题。

标签: ios swift swift2 realm


【解决方案1】:

您不能在应用扩展程序中使用sharedApplication

但请注意,苹果文档指出:

重要

Apple 允许任何 Today 小部件使用 openURL:completionHandler: 打开小部件自己包含的方法 应用程序。

ExtensionOverview.

【讨论】:

    【解决方案2】:

    将 Realm 添加到使用 CocoaPods v0.39 之前版本的项目时可能会出现此问题。要修复它,请使用以下命令更新到最新版本的 CocoaPods:

    sudo gem install cocoapods
    

    这个问题是由CocoaPods issue #3906 引起的,它会导致Realm 的部分配置设置被应用到应用程序的目标上。 Realm 启用的设置之一是“仅允许应用扩展 API”,这就是您最终会看到此特定错误的原因。

    【讨论】:

    • 这是一个 3.5 年前的 Realm / CocoaPods 版本的问题。您看到的任何问题都与此问题有关,这极不可能。我建议您提出一个新问题,并提供足够的详细信息供其他人帮助您。
    【解决方案3】:

    即使使用 CP v1.8.3,我仍然遇到同样的问题。

    快速解决方法是选择有问题的 pod > Build Settings > Require Only App-Extension-Safe API > Set to No.

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2019-11-12
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多