将 tvOS 分段式顶部架子从使用TVTopShelfProvider(现已弃用)迁移到启动时会TVTopShelfContentProvider导致NSException启动。
该错误NSExtensionPrincipalClass product_module_name.ContentProvider must implement at least one public protocol表明我的类ContentProvider必须使用协议。TVTopShelfContentProvider是一个类,而不是一个协议。
查看 Apple 的示例项目,您可以看到它们也仅子类化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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
顶部货架相关的 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>
Run Code Online (Sandbox Code Playgroud)
我是否缺少需要添加/更新的项目配置值?创建了一个新的最小顶架扩展,这些看起来是唯一需要的更改。
要迁移顶级图像实现以支持全屏资产,应更新两件事:
productType为“com.apple.product-type.app-extension”我在 Xcode 中找不到此设置,因此我在文本编辑器中打开该项目并搜索productType我可以通过删除 Top Shelf 扩展目标、配置和构建方案来解决此问题。然后我重新创建了 Top Shelf 扩展目标。
这显然是一个极端的解决方案。不幸的是,目前还不清楚确切的问题是什么。我怀疑当创建新的 Top Shelf 扩展并将其添加到父目标时,Apple 在幕后做了一些“魔术”。查看差异并不会暴露任何可能的问题。
| 归档时间: |
|
| 查看次数: |
1323 次 |
| 最近记录: |