您好我为我的AppGroup创建NSUserDefaults的子类,以便在IOS应用和watchOs扩展之间共享数据
我正在使用此
#define APP_GROUP_ID @"group.com.xxxx.xxx"
- (instancetype)init {
self = [super init];
if (self) {
self.userDefaults = [[NSUserDefaults alloc]initWithSuiteName:APP_GROUP_ID];
}
return self;
}
但是当我运行应用程序时,控制台中出现错误
[User Defaults] Failed to read values in CFPrefsPlistSource<0x1740f5600> (Domain: group.com.xxx.xxx, User: kCFPreferencesAnyUser, ByHost: Yes, Container: (null)): Using kCFPreferencesAnyUser with a container is only allowed for System Containers, detaching from cfprefsd
我已尝试搜索此错误,并找到一个将TeamID添加到App_ID定义。但似乎不是正确的。
任何人都有同样的问题吗?我们怎么能这样呢?帮助非常感谢。谢谢!
更新我的.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en_US</string>
<key>CFBundleDisplayName</key>
<string>SingPost</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.8.8</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1540614276180366</string>
</array>
<key>Item 0</key>
<string>fb1540614276180366</string>
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.8.8</string>
<key>FacebookAppID</key>
<string>1540614276180366</string>
<key>FacebookDisplayName</key>
<string>Singpost</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>akamaihd.net</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>facebook.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>mobile.singpost.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>mysam.sg</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>prdesb1.singpost.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera use</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>NSLocationUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) photo use</string>
<key>UIAppFonts</key>
<array>
<string>OpenSans-Regular.ttf</string>
<string>OpenSans-Bold.ttf</string>
<string>OpenSans-Semibold.ttf</string>
<string>OpenSans-Light.ttf</string>
<string>OpenSans-LightItalic.ttf</string>
</array>
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UIRequiresFullScreen</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-api20140430</string>
</array>
<key>Fabric</key>
<dict>
<key>APIKey</key>
<string>3208dc242f01e150e8ca060fbee0e5a8696532e7</string>
<key>Kits</key>
<array>
<dict>
<key>KitInfo</key>
<dict/>
<key>KitName</key>
<string>Crashlytics</string>
</dict>
</array>
</dict>
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
</dict>
</plist>
我的权利
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.SingPost.SingPostMobile</string>
</array>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)group.com.SingPost.SingPostMobile</string>
</array>
</dict>
</plist>
我更新了所有userdefault.h和.m
#import <Foundation/Foundation.h>
@interface UserDefaultsManager : NSUserDefaults
+ (instancetype)sharedInstance;
- (BOOL)setLastTrackingNumber:(NSString *)trackingNumber;
- (NSString *)getLastTrackingNumber;
- (BOOL)setNotificationStatus:(BOOL)status;
- (BOOL)getNotificationStatus;
@end
#import "UserDefaultsManager.h"
#define APP_GROUP_ID @"group.com.SingPost.SingPostMobile";
#define LAST_TRACKING_NUMBER_KEY @"LAST_TRACKING_NUMBER"
#define NOTIFICATION_STATUS_KEY @"NOTIFICATION_STATUS"
@interface UserDefaultsManager()
@property (strong, nonatomic) NSUserDefaults *userDefaults;
@end
@implementation UserDefaultsManager
+ (instancetype)sharedInstance {
static dispatch_once_t pred;
static id __singleton = nil;
dispatch_once(&pred, ^{ __singleton = [[self alloc] init]; });
return __singleton;
}
- (instancetype)init {
self = [super init];
if (self) {
self.userDefaults = [[NSUserDefaults alloc]initWithSuiteName:APP_GROUP_ID];
}
return self;
}
- (BOOL)setLastTrackingNumber:(NSString *)trackingNumber {
[self.userDefaults setObject:trackingNumber forKey:LAST_TRACKING_NUMBER_KEY];
return [self.userDefaults synchronize];
}
- (NSString *)getLastTrackingNumber {
return [self.userDefaults objectForKey:LAST_TRACKING_NUMBER_KEY];
}
- (BOOL)setNotificationStatus:(BOOL)status {
[self.userDefaults setBool:status forKey:NOTIFICATION_STATUS_KEY];
return [self synchronize];
}
- (BOOL)getNotificationStatus {
return [self.userDefaults boolForKey:NOTIFICATION_STATUS_KEY];
}
@end