【问题标题】:UIApplication.sharedApplication() is unavailableUIApplication.sharedApplication() 不可用
【发布时间】:2015-12-13 02:37:45
【问题描述】:

我刚刚从 XCode 6.4 升级到 Xcode 7 GM 并开始更改代码以与 Swift 2 兼容。我无法遇到以下错误。

该项目是一个键盘扩展,并且 sn-p 来自包含的应用程序。

    let s = "https://itunes.apple.com/"
    UIApplication.sharedApplication().openURL(NSURL(string : s)!)

错误 1:“sharedApplication()”不可用:在适当的情况下使用基于视图控制器的解决方案。

错误 2:“openURL”不可用。

这可能与 Xcode 和 AppDelegate 有关,我可能搞砸了我的项目。

【问题讨论】:

标签: swift2 ios9 xcode7 openurl


【解决方案1】:

在我制作框架的时候。我遇到了这个问题。手动将其设置为 NO 解决了我的问题。

【讨论】:

  • 这个答案的问题是你告诉编译器它可以番茄使用很多从扩展中使用不安全的调用。一些可能有效,但通常从扩展中标记为不可用的调用将不起作用,因此仅禁用编译器错误对您没有帮助。你需要找到一种有效的方法来从扩展中做你想做的事情,而不是使用不安全的调用。
【解决方案2】:

您无法从扩展程序访问每个 API。来自 Apple 的扩展开发指南: 某些 API 不适用于应用扩展

由于其在系统中的主要作用,应用扩展没有资格参与某些活动。应用扩展不能:

访问一个 sharedApplication 对象,因此不能使用该对象的任何方法

等等等等

【讨论】:

  • 它是包含应用程序而不是扩展程序。我以前在 Xcode 6.4 中调用没有问题。
  • 您可能希望将此作为接受的答案。
【解决方案3】:

您的目标可能已选中“仅允许应用扩展 API”选项。

检查您的目标的常规设置,看看是否在部署信息 > 应用扩展中启用了该选项。

【讨论】:

  • 那是我的问题,这是有道理的。
  • 更改此设置是否会导致应用程序被应用商店接受时出现任何问题?
【解决方案4】:

斯威夫特 3.0

在我的例子中,我在一个小部件(这是一个扩展)中收到了这条消息,代码是从我的应用程序中复制/粘贴的。就像汤姆罗杰罗说我必须更换

UIApplication.shared.open(NSURL(string:"https://

self.extensionContext?.open(NSURL(string:"https://

【讨论】:

  • 我也在开发 iMessage 应用程序,但 self.extensionContext 正在返回 nil(在模拟器和设备上)。
  • @MathewS 我只是更改了我的帖子,因为我犯了一个错误。我设法让它在一个小部件中工作,而不是在 iMessage 中。 iMessage 应用程序非常有限,您应该能够调用指向您应用程序内部的 url。 stackoverflow.com/questions/39392420/send-url-with-imessage-app
  • 感谢您的跟进,很高兴我没有疯狂地试图让它工作:)
  • @MathewS 今晚我尝试在扩展模式下将 UIViewController 与 webView 一起使用,但失败了。视图中没有加载任何内容。注意:我是 Swift 和 iOS 开发的初学者,那么我可能会犯错误。如果你找到方法,请告诉我。
  • @tolbard 它不起作用我尝试使用此代码通过共享扩展打开我的应用程序
【解决方案5】:

包含应用程序中的类以某种方式进入了扩展构建阶段中的编译资源列表。我删了,现在好了。

我没有那样做。显然升级到 Xcode 7 GM 进程以某种方式做到了。

【讨论】:

  • 你试过self.extensionContext?.open(URL(string: "http://...")!)吗?
  • 是 Swift 2.3 还是更高版本?
  • 我尝试 self.extensionContext?.open(URL(string: "http://...")!) 但它也不适合我
【解决方案6】:

您好,我解决了这个问题。

将允许 API 扩展设置为否给提供此 e 的特定框架 IQKeyboardManager 之类的错误

假设您面临 IQKeyboardManager 的这个问题,并且您使用 Pod 安装了这个框架。然后你的项目点击 Pod -> 点击 IqkeyboardManager。

并将允许 API 扩展设置为否

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多