iOS应用从Xamarin.Forms迁移Flutter更新时本地存储持久化咨询
关于Xamarin.Forms转Flutter iOS应用更新与数据保留的问题解答
问题1:App Store更新表现
- 只要Flutter版本的Bundle ID与原Xamarin.Forms版本完全一致,且版本号(
CFBundleVersion/CFBundleShortVersionString)高于原版本,同时使用相同的开发者签名证书打包,App Store会将其识别为常规应用更新。用户看到的就是普通的「更新」按钮,更新过程和常规版本迭代完全一致,不会感知到开发框架的变更。
问题2:本地数据保留情况
- 本地JSON文件:原版本存储在
/var/mobile/Containers/Data/Application/<UUID>/Library/MyApp/下的JSON文件会被完整保留。iOS应用更新时,系统不会清空应用沙盒内的Library、Documents等目录,这些数据会直接继承到更新后的Flutter版本中。你可以在Flutter中通过path_provider插件获取应用的Library目录路径,再定位到MyApp子文件夹读取原有文件。 - NSUserDefaults数据:
NSUserDefaults.StandardUserDefaults中存储的键值对也会被保留。Flutter的shared_preferences插件底层正是基于iOS的NSUserDefaults实现的,更新后使用该插件可以直接读取到原版本存储的键值数据。
官方文档参考要点
- Apple官方文档明确说明:应用更新时,沙盒目录(包括Library、Documents、tmp等)中的数据会被保留,仅当应用被删除重装时才会清空。
- Flutter官方文档中,
path_provider插件的说明提到其获取的目录对应iOS原生的沙盒目录,可用于访问原有应用存储的数据;shared_preferences插件的文档也指出其与iOS NSUserDefaults、Android SharedPreferences的兼容性。
内容的提问来源于stack exchange,提问作者Michal Lyga
相关产品推荐
相关产品推荐

