Написание расширения для iOS 8 без раскадровки

Знает ли кто-нибудь хороший способ создать расширение для iOS 8 без MainInterface.storyboard, которое поставляется с шаблоном?

Когда я удаляю файл или удаляю NSExtensionMainStoryboard из Info.plist, расширение перестает работать (ничего не происходит, когда вы нажимаете кнопку в области общего доступа). Мы попытались заменить NSExtensionMainStoryboard на NSExtensionPrincipalClass, который также не работал.

Любые идеи?

Ответы

Ответ 1

Выяснилось!

Оказывается, в Swift происходит странное имя именования модулей, поэтому вы можете исправить его, добавив в класс имя @objc:

@objc(PrincipalClassName)

class PrincipalClassName: UIViewController {
...

а затем установите для клавиши NSExtensionPrincipalClass значение PrincipalClassName.

Ответ 2

Нашли ответы из этих ответов вместе взятых Ответ 1 и Ответ 2.

Для Objective-C вы должны поместить следующее в info.plist расширения приложения: NSExtensionPrincipalClass и убедитесь, что он находится под NSExtension Dict

Таким образом, полный ответ должен быть таким, в моем случае ActionViewController это расширение приложения viewController

enter image description here

Ответ 3

Невозможно добавить комментарий, но он больше не NSPrincipalClass, а NSExtensionPrincipalClass

Ответ 4

Вместо взлома @objc правильный способ сделать это в 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: ...)'

Будем надеяться, что это поможет тому, кто столкнется с этой ошибкой в будущем.)