【问题标题】:Today Extension Failed to inherit CoreMedia permissions fromToday Extension 无法继承 CoreMedia 权限
【发布时间】:2014-11-23 08:21:09
【问题描述】:

我正在尝试将 Swift 中的 Today Extension 添加到我的 Objective-C 应用程序中。我在调试器日志中不断收到此消息:Failed to inherit CoreMedia permissions from 3005: (null)。号码前。 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)
}

【问题讨论】:

  • 我遇到了同样的问题。我还注意到,在那之后,我的小部件消耗的内存几乎达到了 1gb,这真的很奇怪,因为我只做了一个简单的网络请求,甚至没有执行。
  • 我也是。但我根本没有使用 Swift,对我来说,它出现在访问我的 NSManagedObject 子类之一的方法时(实际上似乎被解释为 NSManagedObject,这本身就很奇怪)。
  • 我检查了 Xcode 6.1 Beta 并且消息仍然存在。我的扩展没有看到任何运行时问题,调试器也没有明确表示这是一个警告。希望我提交审核时Apple不会拒绝该应用程序。
  • 我遇到了类似的问题。如果您删除“widgetMarginInsetsForProposedMarginInsets”,该错误可能会消失。 (使用“preferredContentSize”时我遇到了同样的错误)。仍然没有想出如何真正解决这个问题。
  • 我正在开发自定义键盘,但我不时会收到此消息。我发现,如果我将包含应用程序目标和扩展程序目标的目标设置的“常规”选项卡中的“团队”设置为“无”(并在此更改后清除),则不会出现此日志消息。我相信这是 iOS 中的错误。

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


【解决方案1】:

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

【讨论】:

  • 我已经这样做了。应用和扩展目标的应用组都处于启用状态,并且它们使用相同的组。
  • 那么不确定。创建模板应用程序扩展后,我收到了警告。我没有添加任何自定义代码。打开应用程序组为我解决了这个问题。从 NSUserDefaults 读取时是否指定了套件名称?例如。 var userDefaults = NSUserDefaults(suiteName: "group.com.yourdomain.yourappname")
  • 是的,乔恩,我是。我有另一个示例应用程序 (raywenderlich.com/83809/ios-8-today-extension-tutorial),它全是 Swift(包含应用程序和扩展程序),所以我排除它是由于 Obj-C 和 Swift 的混合。我提到的示例应用程序使用自定义框架而不是应用程序组,它还在日志中获取该消息。希望这只是一个 Xcode 错误。顺便说一句,我使用的是 6.0.1 版。
  • 还有一件事我要提一下:我创建了一个应用组,但命名不正确。我对两个目标都未选中未使用的组,但我找不到删除它的方法。
  • 同样的问题,但这只发生在我的模拟器中,在真实设备上工作正常
【解决方案2】:

首先,点击Assets.xcassets

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

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

【讨论】:

  • 山这似乎是正确的答案,让我们把它放到页面顶部。
  • 对我来说,问题是我正在将应用程序中的一个类的信息共享到我的扩展程序。当我为该文件选择两个目标时,问题就解决了。最好的问候
【解决方案3】:

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

【讨论】:

  • 我是在添加应用组后完成的,所以我不知道这对这一步有帮助。但是感谢您的解决方案;)
  • 是的,有时候很奇怪!
  • 不幸的是,有时问题会再次出现
  • Info.plist 中有一个类似于 bundle display name 的条目
【解决方案4】:

我也遇到了这个问题,我解决的唯一解决方案是为情节提要上的每个对象添加垂直和水平约束。

【讨论】:

  • 奇怪的是,他是对的。我遇到了同样的错误并在这里尝试了所有方法,但没有任何效果。我看到了这一点,然后简单地选择了 Today 视图并选择“Add Missing Constraints”。然后错误消失了,Today 扩展现在运行。
  • 跟进,我刚刚清除了约束,现在我再次收到CoreMedia权限错误......所以这个错误肯定与约束有关。还确认上面的 AppGroup 步骤是必要的,当我关闭它时,我再次收到错误。
  • 我添加了所有可能的约束...仍然看到这个错误
  • 对我来说也与约束相关。我知道我不应该仅仅说“我也是”而发表评论,但由于这个答案很奇怪而且显然没有意义,所以我忽略了它,尽管这是唯一对我有用的答案!
  • 可以确认——具体来说,错误只发生在模拟器中。在设备上它运行良好。向所有对象添加约束使其也可以在模拟器中工作。我不必添加或启用应用组。
【解决方案5】:

检查今天扩展的主故事板,启用了“是初始视图控制器”选项的视图控制器。

【讨论】:

    【解决方案6】:

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

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

    如果没有其他帮助,希望这对你有用

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

        • 我在尝试激活键盘扩展时遇到了这个问题,这个解决方案解决了我的问题。非常感谢,点赞
        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

          这让我很受打击,因为我在视图控制器中有一个自定义的合并 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)
          }
          

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

                这是我对此错误消息的体验。我有一个故事板,里面有 4 个 ViewController。我对所有这些都进行了重构提取,所以现在我有 5 个故事板,其中 4 个有视图控制器,而原来的“主”一个只有故事板引用。

                嗯……这很糟糕。不要那样做。

                当我将初始故事板保存在原始故事板文件中时,一切正常,因此我没有只重构其中一个。

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

                    是模拟器的问题,试试真机吧。

                    【讨论】:

                    • 尽量给出更多的描述和完整的答案,如果可能的话,用例子和代码。
                    • 对我来说,这个错误只出现在模拟器中,而不是在我侧载设备时出现。
                    • 奇怪的是,人们大量赞成“只是干净构建它”之类的解决方案,而反对这个解决方案。
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-09-23
                    • 1970-01-01
                    • 2010-12-04
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多