NSUserDefaults 可以跨不同的代码库工作吗?

Can NSUserDefaults work across different code bases?

提问人:redrock68 提问时间:11/6/2023 最后编辑:redrock68 更新时间:11/9/2023 访问量:75

问:

我正在尝试使用应用程序组在目标 c iOS 应用程序和 c# xamarin forms 应用程序之间共享数据。

我正在 objective c 项目中设置初始数据,并使用可用于应用程序组的共享数据“剪贴板”传递数据。

这是我的目标 c 代码,用于初始化和发布字符串。

NSString *appGroupId = @"group.sample";
NSUserDefaults *groupUserDefaults = [[NSUserDefaults alloc] initWithSuiteName:appGroupId];
[groupUserDefaults setValue:offlineMsg forKey:@"RunwayRequest"];
[groupUserDefaults synchronize];

这是我在 Xamarin.Forms 应用程序中的 c# 代码。

string groupName = "group.sample";
NSUserDefaults shared = new    NSUserDefaults();
shared.AddSuite(groupName);

var test = 共享。ValueForKey((NSString)“RunwayRequest”);

它总是返回一个空值,但我认为我正在将字符串添加到共享文件夹,但我无法检索其他项目中的数据。

我已将应用组标识符添加到两个配置文件中。我认为我不必向 plist 文件添加任何内容,但我并不肯定。

C# Objective-C Xamarin.Forms nsuserdefaults

评论

0赞 son 11/6/2023
您无需对 plist 文件执行任何操作,AppGroup ID 已经是唯一的。使用 suiteName(非标准)定义 UserDefault,并正常获取/设置。
0赞 redrock68 11/6/2023
我为两者定义了使用套件名称,您看到代码有任何问题吗?
0赞 Liqun Shen-MSFT 11/14/2023
虽然不需要向 info.plist 添加任何内容,但您应该将密钥添加到 Entitlements.plist 中。

答:

0赞 Liqun Shen-MSFT 11/9/2023 #1

是的,您不必在 info.plist 中添加任何内容。但也有一些细节。

首先,应在 Apple 开发人员门户上为这两个 iOS 应用启用应用组功能

综上所述,

  1. 创建一个 App Group,假设 Identifier 为 group.sample

  2. 为每个应用单独创建一个 App ID,开启 App Group 功能,并在 App Group 中添加每个 App ID。

  3. 为每个应用单独生成预配配置文件。不要忘记在配置文件中包含要部署的正确证书和物理设备。

其次,为每个应用添加 Entitlements.plist 的键值。有关详细信息,可以参考应用组

完成上述步骤后,您可以在 iOS 设备上部署每个应用程序,并立即与应用程序组共享数据。

希望对您有所帮助!