Я просмотрел массу сообщений SO, и это ИСПОЛЬЗОВалось для работы, но перестало работать. Не знаю, что случилось. Я разработал это приложение для iPhone + WatchKit с watchOS 1.0, и все работало нормально.
Я обновил свое приложение, проект и Apple Watch до watchOS 2.0, и теперь я не могу получать данные через NSUserDefaults, используя свою группу приложений.
Группы приложений включены в Xcode в главном приложении и в расширении WatchKit. Я даже пробовал включить его для приложения WatchKit.
Имя моей группы называется «group.com.mycompany.myapp» (с моим настоящим названием компании и названием приложения), и оно выбрано для всех целей.
Я подтвердил, что настройки сборки для моего хост-приложения и расширения WatchKit ссылаются на файлы прав, и я проверил, что эти файлы прав содержат параметр безопасности групп приложений для выбранной мной группы приложений.
Я убедился, что идентификаторы пакетов различны для хост-приложения, расширения watchkit и приложения watchkit. Я использую com.mycompany.myapp, com.mycompany.myapp.watchkitextension и com.mycompany.myapp.watchkitapp соответственно.
Вот несколько снимков экрана моей конфигурации Xcode для хост-приложения, расширения watchkit и приложения watchkit, на всякий случай:
Вот код в моем хост-приложении, который может правильно читать данные:
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:kAppGroupName];
NSLog(@"app defaults: %@", [defaults dictionaryRepresentation]);
Это производит это в моей консоли, где kKeyEmployeeId
и kKeyStoreNumber
- это данные, которые я пытаюсь передать между хостом и часами.
2015-12-13 13:51:35.618 MyApp[27516:16126253] app defaults: {
AppleLanguages = (
"en-US",
en
);
INNextHearbeatDate = "472211882.83309";
NSInterfaceStyle = macintosh;
NSLanguages = (
"en-US",
en
);
"com.apple.content-rating.AppRating" = 1000;
"com.apple.content-rating.ExplicitBooksAllowed" = 1;
"com.apple.content-rating.ExplicitMusicPodcastsAllowed" = 1;
"com.apple.content-rating.MovieRating" = 1000;
"com.apple.content-rating.TVShowRating" = 1000;
kKeyEmployeeId = Kenny;
kKeyStoreNumber = 001;
}
В моем расширении WatchKit у меня такой же код, но он не предоставляет мне две пары ключ: значение, которые мне нужны:
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:kAppGroupName];
NSLog(@"defaults: %@", [defaults dictionaryRepresentation]);
}
Он производит это, что очень похоже на приведенное выше, но без двух ключей, которые мне действительно нужны:
2015-12-13 13:28:29.840 MyApp WatchKit Extension[720:322804] defaults: {
AppleLanguages = (
en
);
INNextHearbeatDate = "472434306.599217";
NSInterfaceStyle = macintosh;
NSLanguages = (
en
);
"com.apple.content-rating.AppRating" = 1000;
"com.apple.content-rating.ExplicitBooksAllowed" = 1;
"com.apple.content-rating.ExplicitMusicPodcastsAllowed" = 1;
"com.apple.content-rating.MovieRating" = 1000;
"com.apple.content-rating.TVShowRating" = 1000;
}
kAppGroupName
и другие константы определены так:
NSString * const kAppGroupName = @"group.com.inadaydevelopment.MyApp";
NSString * const kKeyStoreNumber = @"kKeyStoreNumber";
NSString * const kKeyEmployeeId = @"kKeyEmployeeId";