今天扩展无法继承CoreMedia权限

时间:2014-09-29 01:44:58

标签: swift ios-app-extension ios8-today-widget

我正在尝试将Swift中的Today Extension添加到我的Objective-C应用程序中。我一直在调试器日志中收到此消息:Failed to inherit CoreMedia permissions from 3005: (null)。数字ex。 3005每次都不同。我正在从小部件中读取NSUserDefaults,但我正在应用程序本身阅读/写作。我的TodayViewController中唯一的代码如下:

override func viewDidLoad() {
    super.viewDidLoad()

    let formatter = NSNumberFormatter()
    formatter.numberStyle = .CurrencyStyle
    totalLabel.text = formatter.stringFromNumber(0)
    coinsLabel.text = formatter.stringFromNumber(0)

    formatter.maximumFractionDigits = 0
    billsLabel.text = formatter.stringFromNumber(0)

}

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
    return UIEdgeInsetsMake(8.0, 16.0, 8.0, 16.0)
}

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) {
    // Perform any setup necessary in order to update the view.

    // If an error is encountered, use NCUpdateResult.Failed
    // If there's no update required, use NCUpdateResult.NoData
    // If there's an update, use NCUpdateResult.NewData

    completionHandler(NCUpdateResult.NewData)
}

15 个答案:

答案 0 :(得分:48)

我相信在创建应用扩展时,“无法从NNNN继承CoreMedia权限”警告与App Groups相关。您的应用程序和应用程序扩展都需要打开应用程序组功能并使用相同的应用程序组容器ID(例如:group.com.yourdomain.yourappname)。应用程序组用于允许多个应用程序访问共享容器,并允许应用程序之间进行额外的进程间通信。

Capabilities should look like this

答案 1 :(得分:13)

我有相同的日志输出。清洁(Cmd + Shift + K)为我解决了这个问题。

答案 2 :(得分:13)

首先,点击Context

First, Click on Assetes.xcassets

其次,点击Target Membership,检查您的应用和小部件,以允许小部件访问您的资源。

Second, Click on Target Membership

之后,再次运行您的Widget,它现在应该可以正常工作。

答案 3 :(得分:8)

我也遇到了这个问题,我解决的唯一解决方案是在故事板上添加每个对象的垂直和水平约束。

答案 4 :(得分:6)

检查今天扩展程序的mainstoryboard,viewcontroller with"是否是初始视图控制器"选项已启用。

答案 5 :(得分:4)

非常误导性的错误。如上所述。选择视图控制器并添加缺少的约束或向自己添加约束以解决问题。

enter image description here

答案 6 :(得分:3)

在完成了这个问题的答案中提到的大部分内容并且仍然在今天的小部件中出现错误之后 - 我发现了一些对我有用的东西。

打开小部件目标 构建设置,然后搜索始终嵌入Swift标准库。选择是。

希望这对你有用,如果没有别的帮助

答案 7 :(得分:1)

这让我很吃惊,因为我在视图控制器中有一个自定义的合并init(nibName:bundle:coder:)方法,并且已经实现了initWithCoder这样才能满足Swift:

required init?(coder aDecoder: NSCoder) {
    self.init(nibName: nil, bundle: nil, coder: aDecoder)
}

我改用了该实现调用super.init(coder:)来解决此问题:

required init?(coder aDecoder: NSCoder) {
    // [...setting some variables...]
    super.init(coder: aDecoder)
}

答案 8 :(得分:0)

我通过以下方式解决了我的问题:为容器和扩展应用打开应用组。并将所有隐藏的UIKit控件删除为UILabel, UIView, ...

答案 9 :(得分:0)

我在运行扩展程序时遇到了同样的问题。就我而言,它是通过在真实设备中运行扩展来解决的。

答案 10 :(得分:0)

我发现如果您使用的是StoryBoard,则需要进入info.plist并删除属性NSExtensionPrincipalClass。之后,扩展开始加载就好了。

答案 11 :(得分:0)

我也遇到了这个问题。对我来说问题是我在模拟器上一次运行两个程序。在我停止其中一个之后,错误消息消失了。希望它有所帮助。

答案 12 :(得分:0)

以下是我对此错误消息的体验。我有一个带有4个ViewControllers的故事板。我对所有这些都进行了重构提取,所以现在我有5个故事板,其中4个有视图控制器,原始的“主要”,其中只有故事板参考。

嗯......那很糟糕。不要那样做。

当我将原始故事板保存在原始故事板文件中时,一切都有效,所以我没有重构其中一个。

答案 13 :(得分:-3)

确保[[NSUserDefaults alloc] initWithSuiteName:APP_GROUP]的参数与您定义的组名相匹配。

答案 14 :(得分:-7)

这是模拟器的问题,尝试一些真实的设备。