问题
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