我已经通过了大量的 SO 帖子,这曾经可以工作,但它停止了工作。我不确定发生了什么。我用 watchOS 1.0 开发了这个 iPhone+WatchKit 应用程序,一切正常。
我已将我的应用程序、项目和 Apple Watch 升级到 watchOS 2.0,现在我无法使用我的应用程序组通过 NSUserDefaults 获取任何数据。
App Groups 在 Xcode 上的宿主 App 和 WatchKit Extension 中启用。我什至还尝试为 WatchKit 应用程序打开它。
我的组名称为“group.com.mycompany.myapp”(带有我的真实公司名称和应用程序名称),并且在所有目标上都被选中。
我已经确认我的主机应用程序的构建设置和 WatchKit 扩展引用了权利文件,并且我已经检查了这些权利文件是否包含我选择的应用程序组的应用程序组安全选项。
我已确保主机应用程序、watchkit 扩展程序和 watchkit 应用程序的包标识符不同。我分别使用“com.mycompany.myapp”、“com.mycompany.myapp.watchkitextension”和“com.mycompany.myapp.watchkitapp”。
以下是我的主机应用程序、watchkit 扩展程序和 watchkit 应用程序的 Xcode 配置的一些屏幕截图,以防万一:
这是我的主机应用程序中能够正确读取数据的代码:
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";