编写没有故事板的iOS 8共享扩展

Ste*_*uso 18 iphone ios swift ios8 ios-app-extension

有没有人知道编写iOS 8共享扩展的好方法而没有MainInterface.storyboard模板附带的扩展?

当我删除文件或删除NSExtensionMainStoryboardInfo.plist,扩展停止工作(没有当你在共享窗格中的按钮,点击会发生).我们试图取代NSExtensionMainStoryboardNSExtensionPrincipalClass这也没有工作.

有任何想法吗?

Ste*_*uso 49

弄清楚了!

事实证明,在Swift中有一个奇怪的模块命名事件,所以你可以通过@objc在类中添加一个名称来修复它:

@objc(PrincipalClassName)

class PrincipalClassName: UIViewController {
...
Run Code Online (Sandbox Code Playgroud)

然后将NSExtensionPrincipalClass密钥设置为PrincipalClassName.


4ae*_*1e1 20

而不是@objchack,在 Swift 中正确的方法是在 中包含模块名称NSExtensionPrincipalClass,即,

<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).ActionViewController</string>
Run Code Online (Sandbox Code Playgroud)

(否则记录错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: ...)'
Run Code Online (Sandbox Code Playgroud)

希望能帮助将来遇到此错误的人。)


Moh*_*leh 12

从这些答案中找到答案,并结合答案1答案2.

对于Objective-C,您必须将以下内容放在info.plistApp扩展中: NSExtensionPrincipalClass并确保它在NSExtensionDict下

所以完整答案应该是这样的,在我的例子中ActionViewController是App扩展视图控制器

在此输入图像描述


Tos*_*abi 5

无法添加注释,但它不再是NSPrincipalClass而是NSExtensionPrincipalClass