Рассмотрите возможность использования NSUSerdefaults в своем приложении и на клавиатуре. Чтобы расширение и приложение могли использовать одни и те же NSUserdefaults, вы можете просто включить группы приложений. Выберите основное целевое приложение в своем проекте в навигаторе проектов, перейдите к возможностям и включите группы приложений, включив его, добавив свой профиль разработчика и устранив возможные проблемы.
Теперь создайте новый контейнер. Согласно справке, он должен начинаться с «group», поэтому дайте ему имя, например «group.com.mycompany.myapp». Выберите цель расширения «Сегодня» и повторите этот процесс включения групп приложений. Не создавайте новую, а выберите эту вновь созданную группу, чтобы обозначить, что расширение «Сегодня» является частью группы.
Теперь это позволит вам использовать те же NSUserdefaults, что и ваше приложение-контейнер. Все, что вам нужно сделать сейчас, это использовать предоставленный вами код и добавить метод сохранения в NSUserdefaults следующим образом:
func isOpenAccessGranted() -> Bool {
let defaults = NSUserDefaults.standardUserDefaults()
let fm = NSFileManager.defaultManager()
let containerPath = fm.containerURLForSecurityApplicationGroupIdentifier(
"group.com.example")?.path
var error: NSError?
fm.contentsOfDirectoryAtPath(containerPath!, error: &error)
if (error != nil) {
NSLog("Full Access: Off")
defaults.setBool(false, forKey: "hasFullAccess")
return false
}
NSLog("Full Access: On");
defaults.setBool(true, forKey: "hasFullAccess")
return true
}
Сделайте это в своем расширении клавиатуры. А затем в своем родительском приложении просто извлеките их и действуйте в соответствии с их значением.
let hasFullAccess : Bool = NSUserDefaults.standardUserDefaults().boolForKey("hasFullAccess")
if hasFullAccess{
//User granted full access
}
else{
//User didn't grant full access
}
Если пользователь не предоставил полный доступ, покажите предупреждение, иначе код прочь!
РЕДАКТИРОВАТЬ: После обращения в службу технической поддержки разработчиков Apple они сказали мне, что на данный момент это невозможно сделать каким-либо поддерживаемым способом. Их ответ ниже:
Наши инженеры рассмотрели ваш запрос и пришли к выводу, что не существует поддерживаемого способа достижения желаемой функциональности с учетом поставляемых в настоящее время конфигураций системы.
Если вы хотите, чтобы Apple рассмотрела возможность добавления поддержки таких функций в будущем, отправьте запрос на улучшение с помощью инструмента Bug Reporter по адресу https://developer.apple.com/bug-reporting/.
Надеюсь, это поможет, Джулиан
person
Julian E.
schedule
19.12.2015