Writing an iOS 8 share extension without a storyboard

岁酱吖の 提交于 2019-11-29 00:58:25

问题


Does anyone know of a good way to write an iOS 8 share extension without the MainInterface.storyboard that comes with the template?

When I delete the file or remove the NSExtensionMainStoryboard from Info.plist, the extension stops working (nothing happens when you tap on the button in the share pane). We tried replacing NSExtensionMainStoryboard with NSExtensionPrincipalClass which also didn't work.

Any ideas?


回答1:


Figured it out!

Turns out there's a weird module naming thing going on in Swift, so you can fix it by adding an @objc name to the class:

@objc(PrincipalClassName)

class PrincipalClassName: UIViewController {
...

and then set the NSExtensionPrincipalClass key to PrincipalClassName.




回答2:


Found the answers from these answers combined Answer 1 and Answer 2.

For Objective-C you will have to put the following in the info.plist of the App extension: NSExtensionPrincipalClass and make sure that it is under NSExtension Dict

So full answer should be like this , in my case ActionViewController is the App extension viewController




回答3:


Can't add a comment but it is no longer NSPrincipalClass rather it is NSExtensionPrincipalClass




回答4:


Instead of the @objc hack, the proper way to do it in Swift is to include the module name in NSExtensionPrincipalClass, i.e.,

<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).ActionViewController</string>

(Documenting the error otherwise:

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

Hopefully will help someone who run into this error in the future.)



来源:https://stackoverflow.com/questions/24416003/writing-an-ios-8-share-extension-without-a-storyboard

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!