【问题标题】:tvOS 13 top shelf - NSExtensionPrincipalClass `product_module_name.ContentProvider` must implement at least one public protocoltvOS 13 顶层 - NSExtensionPrincipalClass `product_module_name.ContentProvider` 必须实现至少一个公共协议
【发布时间】:2019-10-22 12:57:26
【问题描述】:

将 tvOS 分段式顶架从使用 TVTopShelfProvider(现已弃用)迁移到 TVTopShelfContentProvider 会导致在启动时出现 NSException

错误NSExtensionPrincipalClass product_module_name.ContentProvider must implement at least one public protocol 表明我的班级ContentProvider 必须使用协议。 TVTopShelfContentProvider 是一个类而不是一个协议。

查看 Apple 的 example project,您会发现它们也只是 TVTopShelfContentProvider 的子类。

小例子:

class ContentProvider: TVTopShelfContentProvider {

    override func loadTopShelfContent(completionHandler: @escaping (TVTopShelfContent?) -> Void) {
        requestMediaItemsIfNeeded {
            let itemCollection: TVTopShelfItemCollection = TVTopShelfItemCollection(items: self.items)
            itemCollection.title = "Collection Title"

            let sectionedContent: TVTopShelfSectionedContent = TVTopShelfSectionedContent(sections: [itemCollection])
            completionHandler(sectionedContent)
        }
    }

}

顶级货架相关的 Info.plist 值:

<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.tv-top-shelf</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).ContentProvider</string>
</dict>

我是否缺少需要添加/更新的项目配置值?创建了一个新的最小顶层扩展,这些看起来是唯一需要的更改。

【问题讨论】:

    标签: swift xcode tvos


    【解决方案1】:

    要迁移顶级图像实现以支持全屏资产,应更新两件事:

    1. 更新 Info.plist。注意更新NSExtensionPointIdentifier

    1. productType 更新为“com.apple.product-type.app-extension” 我在 Xcode 中找不到这个设置,所以我在文本编辑器中打开项目并搜索 productType

    【讨论】:

      【解决方案2】:

      我能够通过删除 Top Shelf 扩展目标、配置和构建方案来解决此问题。然后我重新创建了 Top Shelf 扩展目标。

      这显然是一个极端的解决方案。不幸的是,目前尚不清楚确切的问题是什么。我怀疑 Apple 在创建新的 Top Shelf 扩展并将其添加到父目标时在幕后做了一些“魔术”。查看差异不会暴露任何可能的问题。

      【讨论】:

      • 我可以通过将扩展类型从 tv-app-extension 更改为普通的 app-extension 来解决此问题
      • 删除目标对我来说也完全有效。
      猜你喜欢
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2015-08-10
      相关资源
      最近更新 更多