Writing an iOS 8 share extension without a storyboard

前端 未结 4 1253
慢半拍i
慢半拍i 2020-12-25 12:36

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 fi

相关标签:
4条回答
  • 2020-12-25 13:08

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

    0 讨论(0)
  • 2020-12-25 13:16

    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.)

    0 讨论(0)
  • 2020-12-25 13:17

    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

    0 讨论(0)
  • 2020-12-25 13:18

    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.

    0 讨论(0)
提交回复
热议问题