Написание расширения для 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
Ответ 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: ...)'
Будем надеяться, что это поможет тому, кто столкнется с этой ошибкой в будущем.)