Swift2 UIApplication.sharedApplication()不可用

Swift2 UIApplication.sharedApplication()不可用,swift2,ios9,xcode7,openurl,Swift2,Ios9,Xcode7,Openurl,我刚刚从XCode 6.4升级到XCode 7 GM,并开始更改代码以符合Swift 2。我无法克服以下错误 该项目是一个键盘扩展,代码段来自包含该项目的应用程序 let s = "https://itunes.apple.com/" UIApplication.sharedApplication().openURL(NSURL(string : s)!) 错误1:“sharedApplication()”不可用:请在适当的情况下使用基于视图控制器的解决方案 错误2:“open

我刚刚从XCode 6.4升级到XCode 7 GM,并开始更改代码以符合Swift 2。我无法克服以下错误

该项目是一个键盘扩展,代码段来自包含该项目的应用程序

    let s = "https://itunes.apple.com/"
    UIApplication.sharedApplication().openURL(NSURL(string : s)!)
错误1:“sharedApplication()”不可用:请在适当的情况下使用基于视图控制器的解决方案

错误2:“openURL”不可用


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

您不能从扩展访问每个API。来自Apple的扩展开发指南: 某些API对应用程序扩展不可用

由于其在系统中的重点角色,应用程序扩展没有资格参与某些活动。应用程序扩展无法:

访问sharedApplication对象,因此无法在该对象上使用任何方法


等等。

包含应用程序中的类在扩展构建阶段不知何故进入了编译资源列表。我删除了,现在可以了

我没有那样做。很明显,升级到Xcode 7 GM进程不知何故做到了这一点。

您的目标可能选中了“仅允许应用程序扩展API”选项

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

Swift 3.0

在我的例子中,我将此消息放在一个小部件(这是一个扩展)中,代码是从我的应用程序复制/粘贴的。就像Tom Roggero说的我必须替换

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


当我在做一个框架的时候。我面临这个问题。手动设置为“否”解决了我的问题


你好,我解决了这个问题

设置为允许将API扩展到No,以允许提供此e的特定框架 像键盘管理器一样的错误

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

并将Allow API Extension设置为No


这是您正在编写的普通应用程序吗?它是键盘扩展。Bu发送的代码来自扩展的包含应用程序。我有包含应用程序的键盘设置屏幕。这是工作,它是包含的应用程序,而不是扩展。我以前在Xcode 6.4中调用时没有问题。您可能希望将此作为可接受的答案。这是我的问题,也是有意义的。更改此选项会导致应用程序被接受到应用商店时出现任何问题吗?您是否尝试过
self.extensionContext?.open(URL(字符串):http://...")!)
?是Swift 2.3还是更高版本?我尝试self.extensionContext?.open(URL(字符串):http://...)但它也不适用于meI。我也在使用iMessage应用程序,但
self.extensionContext
返回
nil
(在模拟器和设备上)。@MathewS我只是因为犯了一个错误而更改了我的帖子。我设法让它在小部件中工作,而不是在iMessage中。iMessage应用程序非常有限,您应该能够调用应用程序内部的url指向。感谢您的后续行动,很高兴我没有发疯试图让它工作:)@MathewS今晚我尝试在扩展模式下使用带有webView的UIViewController,但失败了。视图中没有任何负载。注意:我是Swift和iOS开发的初学者,可能会犯错误。如果你有办法,请告诉我。@tolbard它不起作用,我试图用这个代码通过共享扩展打开我的应用程序。这个答案的问题是,你告诉编译器可以使用很多不安全的扩展调用。一些可能会起作用,但通常从扩展名标记为不可用的调用将不起作用,因此仅禁用编译器错误对您没有帮助。您需要找到一种有效的方法在扩展中执行您想要的操作,而不是使用不安全的调用。
self.extensionContext?.open(NSURL(string:"https://