有没有好的方法可以在没有附带 MainInterface.storyboard
模板的情况下编写 iOS 8 共享扩展?
当我删除文件或从 Info.plist
中移除 NSExtensionMainStoryboard
时,扩展停止工作(在共享面板上点击按钮时不会发生任何事情)。我们尝试用 NSExtensionPrincipalClass
替换 NSExtensionMainStoryboard
,但也不起作用。
有什么想法吗?
有没有好的方法可以在没有附带 MainInterface.storyboard
模板的情况下编写 iOS 8 共享扩展?
当我删除文件或从 Info.plist
中移除 NSExtensionMainStoryboard
时,扩展停止工作(在共享面板上点击按钮时不会发生任何事情)。我们尝试用 NSExtensionPrincipalClass
替换 NSExtensionMainStoryboard
,但也不起作用。
有什么想法吗?
搞定了!
原来Swift中出现了奇怪的模块命名问题,你可以通过在类中添加@objc
名称来解决:
@objc(PrincipalClassName)
class PrincipalClassName: UIViewController {
...
然后将NSExtensionPrincipalClass
键设置为PrincipalClassName
。
@objc
的hack方法,在Swift中正确的做法是在NSExtensionPrincipalClass
中包含模块名称,即:<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).ActionViewController</string>
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: ...)'
__extensionPrincipalClass != nil - /Library/Caches/com.apple.xbs/Sources/ExtensionFoundation_Sim/ExtensionFoundation/Source/NSExtension/NSExtensionSupport/EXConcreteExtensionContextVendor.m:109:
Unable to find NSExtensionPrincipalClass (MessagesViewController) in
extension bundle! Please verify that the extension links the required
frameworks and that the value for NSExtensionPrincipalClass is
prefixed with '$(PRODUCT_MODULE_NAME).' if the class is implemented in
Swift. Type: Fault | Timestamp: 2023-09-19 18:05:10.722854-07:00 |
Library: ExtensionFoundation | Subsystem: com.apple.extensionkit |
Category: default | TID: 0x4f172
无法添加评论,但它不再是NSPrincipalClass,而是NSExtensionPrincipalClass