Общий NSUserDefault между изолированным приложением OSX и расширением
Фон
Я разрабатываю приложение OSX со связанным расширением Today Widget. Мне бы хотелось, чтобы основное приложение и расширение использовали общие пользовательские настройки, как описано в разделе "Совместное использование данных с вашим приложением от Apple". В моем случае основное приложение записывает настройки, а расширение - их.
- OSX 10.11.6
- Xcode 7.3.1
- Swift 2.2
И приложение, и расширение находятся в песочнице. Они также являются членами одной группы приложений. Соответствующие права, подтвержденные с помощью codesign -d --entitlements
, как в приложении, так и в расширении:
com.apple.security.app-sandbox: true
com.apple.security.application-groups:
- com.example.Common
Код
Приложение и расширения используют один и тот же код для инициализации и доступа NSUserDefaults
,
NSUserDefaults.init(suiteName: "com.example.Common")
проблема
Основное приложение создает настройки в:
~/Library/Containers/com.example/Data/Library/Preferences/com.example.Common.plist
Когда расширение открывается, его NSUserDefault
Экземпляр пуст.
Если я переместить список, созданный приложением, в:
~/Library/Group Containers/com.example.Common/Library/Preferences/com.example.Common.plist
Расширение NSUserDefault
Экземпляр заполняется ожидаемыми значениями.
Примечание: следующее не происходит при сборке и запуске приложения из XCode, только при выборе Product -> Archive, затем Export -> Export as Mac Application. При сборке / запуске из Xcode основное приложение создает файл plist, где расширение ожидает его, как описано выше.
0 ответов
Я делаю то же самое прямо сейчас - приложение-песочница + расширение общего доступа + NSUserDefault + группы приложений, и все работает нормально. Может быть, Apple исправила за это время несколько ошибок?