iOS 从应用商店更新后添加新 NSUserDefaults 的扩展问题

iOS extension adding new NSUserDefaults issue after updating from app store

我的应用程序已获得授权。在 return 中,如果我登录,我会收到一个存储在 NSUserDefaults.

中的令牌

当前应用的工作原理: 当我按下登录按钮时,应用程序会发送用户名并登录到服务器,在 return 中,如果成功,应用程序会获得一个令牌。

我有一个使用令牌和其他接收到的信息方法保存用户,其中包含:

- (void)saveUserWithInfo...{

...

[[NSUserDefaults standardUserDefaults] setObject:token
                                          forKey:kUserToken];

在应用程序中使用令牌,在此阶段一切正常。

对于 iOS 扩展,我想使用此令牌来检查用户是否登录。我在上面的保存用户方法中添加了下一行:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mayapp"];

[sharedDefaults setObject:token
                   forKey:kUserToken];

如您所见,我还将令牌保存到 共享 用户默认值,我可以从这个新存储中简单地请求令牌。

问题:

当我第一次测试它时,它会在我上传到商店之前按需要工作。我在 App Store 上有一个版本不包含 iOS 扩展和新的共享存储 NSUserDefaults 应该包含令牌。

我更新版本并下载后,我打开了第一个扩展,但它显示错误,该用户尚未登录,这似乎是正确的,因为共享 NSUserDefaults 存储没有有令牌。在我当前的工作流程中,按下登录按钮后可以保存令牌。但是从没有扩展的版本更新到 App Store 有扩展的版本后,我的用户当然仍然登录该应用程序,因为原始 NSuserDefaults 包含令牌,但新共享 NSUserDefaults 仍然没有获得令牌因为我们需要注销然后登录才能正常工作。

我的问题是如何在不注销的情况下将令牌设置为新的 shared NSUserDefaults 然后重新登录。当然,当我登录时,它开始从更新中调用所有新行,并且有我为 iOS 扩展添加的新 shared NSUserDefaults。因此,在新登录后它将包含令牌,如果打开扩展它会工作,但首先在 App Store 更新版本后立即启动显示用户未登录的错误 - 这是正确的,因为新添加 sharedNSUserDeafults

你真的应该使用钥匙串。

无论如何,也就是说,您的应用程序委托中应该有一个 'upgrade' 逻辑片段(或从那里触发),它会在每次应用程序启动时运行并验证情况。在您当前的情况下,逻辑是检查登录密钥的共享默认值并检查密钥的非共享默认值。如果密钥存在于一个而另一个不存在,则复制并保存。