Как определить, что расширение приложения включено в приложении на iOS 8?

Я разрабатываю пользовательскую клавиатуру для бета-версии iOS 8 и хочу сообщить пользователю, как включить ее в содержащем приложении, если моя пользовательская клавиатура не включена, есть ли способ определить, что расширение приложения включено?


person moligaloo    schedule 25.06.2014    source источник
comment
Аналогичный (более свежий) вопрос: 25714326" title="как определить, активирована ли пользовательская клавиатура из контейнера клавиатур"> stackoverflow.com/questions/25675628/   -  person dandoen    schedule 09.09.2014


Ответы (1)


  1. прежде всего давайте установим некоторые константы, чтобы было легко понять друг друга:

    • containing app = the app that installs the extension and holds the extension binary and target
    • хост-приложение = приложение, внутри которого работает расширение (другая сторона)
    • extension = любой из новых компонентов/модулей iOS8, которые мы теперь можем встроить в общесистемное использование: настраиваемые клавиатуры, виджеты Today, эффекты редактирования фотографий и многое другое.
  2. Apple также выпустила более тихий API под названием App Groups API. Этот API позволяет разработчику группировать n расширений под 1 идентификатором пакета и создает канал связи между приложением и содержащимися в нем расширениями.

  3. вы можете обмениваться данными между расширениями и содержащим приложением, используя NUserDefaults, но с помощью этого нового метода:

    [[NSUserDefaults alloc] initWithSuiteName:@"<app group identifier>"];
    

    чтение/запись... и синхронизация:

    [myDefaultsObj synchronize];
    
  4. а теперь к сути:

    используйте схемы URL-адресов группы приложений, чтобы проверить, что вы хотите:

    https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSExtensionContext_Class/#//apple_ref/occ/instm/NSExtensionContext/openURL:completionHandler:

    - (void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler
    
    • URL - The URL to open.
    • completeHandler — блок, который вызывается при открытии URL-адреса.
    • этот параметр - success - является логическим значением, указывающим, было ли открытие успешным.

Удачи!!!

person nurnachman    schedule 29.06.2014
comment
Метод (void)openURL:(NSURL *)URL completeHandler:(void (^)(BOOL Success))completionHandler доступен только в расширении приложения, я хочу определить, включено РАСШИРЕНИЕ ПРИЛОЖЕНИЯ или нет в СОДЕРЖАЩЕМ ПРИЛОЖЕНИИ. - person moligaloo; 03.07.2014
comment
[NSExtensionContext openURL:completionHandler:] всегда будет давать сбой для расширений, отличных от расширений «Сегодня». - person user102008; 30.08.2014