Swift tvOS 13 top shelf-NSExtensionPrincipalClass`product_module_name.ContentProvider`必须至少实现一个公共协议
将tvOS分段式顶部托架从使用现已弃用的Swift tvOS 13 top shelf-NSExtensionPrincipalClass`product_module_name.ContentProvider`必须至少实现一个公共协议,swift,xcode,tvos,Swift,Xcode,Tvos,将tvOS分段式顶部托架从使用现已弃用的TVTopShelfProvider迁移到TVTopShelfContentProvider会导致启动时出现NSException 错误“NSExtensionPrincipalClass product\u module\u name.ContentProvider必须至少实现一个公共协议”表明我的类“ContentProvider”必须使用协议。是一个类,而不是一个协议 看看苹果的,你可以看到它们也只是子类TVTopShelfContentProvid
TVTopShelfProvider
迁移到TVTopShelfContentProvider
会导致启动时出现NSException
错误“NSExtensionPrincipalClass product\u module\u name.ContentProvider必须至少实现一个公共协议”表明我的类“ContentProvider”必须使用协议。是一个类,而不是一个协议
看看苹果的,你可以看到它们也只是子类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)
}
}
}
顶架相关信息列表值:
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.tv-top-shelf</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).ContentProvider</string>
</dict>
NSExtension
NSExtensionPointIdentifier
com.apple.tv-top-shelf
NSExtensionPrincipalClass
$(产品\模块\名称)。ContentProvider
我是否缺少需要添加/更新的项目配置值?创建了一个新的最小顶部机架扩展,这些看起来是唯一需要的更改。我可以通过删除顶部机架扩展目标、配置和构建方案来解决这个问题。然后,我重新创建了顶部机架扩展目标
这显然是一个极端的解决方案。不幸的是,目前还不清楚确切的问题是什么。当一个新的顶层扩展被创建并添加到父目标时,我怀疑苹果在幕后做了一些“魔术”。查看差异不会暴露任何可能的问题。要迁移顶层机架映像实现以支持全屏资产,应更新两件事:
productType
更新为“com.apple.product type.app extension”
我在Xcode中找不到这个设置,所以我在文本编辑器中打开了这个项目,并搜索了productType
我可以通过将扩展类型从
tv-app-extension
更改为普通的app-extension
来解决这个问题。删除目标也完全适用于我。