Flutter:从 iCloud-Backup 中排除目录
Posted
技术标签:
【中文标题】Flutter:从 iCloud-Backup 中排除目录【英文标题】:Flutter: Exclude directory from iCloud-Backup 【发布时间】:2020-07-05 05:57:30 【问题描述】:我正在编写一个颤振应用程序。这个应用程序将包含图像、音频和视频文件。即使应用程序离线,这些文件也应该可用。这些文件可以从服务器下载,或通过 USB 连接手动放置在应用程序的文档目录 (ios) 或外部目录 (android) 中。此外,Json 文件将为应用程序提供有关如何处理这些媒体文件的信息。目录结构如下所示:
AppContent
-> info.json
-> Audio folder
->-> Files...
-> Video folder
->-> Files...
-> Pictures folder
->-> Files...
根据 apple.developers,此类文件不应由 icloud 备份。在此应用程序中也不需要这样做。 JSON 文件仅包含有关媒体文件的信息,不包含用户数据。 https://developer.apple.com/icloud/documentation/data-storage/index.html
本教程展示了如何从 iCloud 备份中排除文件夹:https://developer.apple.com/library/archive/qa/qa1719/_index.html
在 Flutter 中是否有一种简单的方法来实现这一点?还是必须调用原生的ios函数?
【问题讨论】:
您好!您是新来的,所以您可能不熟悉 Stack Overflow 的指南。这并不意味着您可以通过索取东西来索取完整代码。但是,一旦您在编写代码时遇到问题,请告诉我们,我们将很乐意提供帮助。有关如何提问的提示,请参阅 here 和 here。谢谢! 【参考方案1】:我通过这样做在我的应用的 Documents 文件夹中禁用了 iCloud Backup:
-
将以下函数添加到
ios/Runner/AppDelegate.swift
:
private func setExcludeFromiCloudBackup(isExcluded: Bool) throws
var fileOrDirectoryURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
var values = URLResourceValues()
values.isExcludedFromBackup = isExcluded
try fileOrDirectoryURL.setResourceValues(values)
-
在
application()
函数中调用它:
GeneratedPluginRegistrant.register(with: self)
// Exclude the documents folder from iCloud backup.
try! setExcludeFromiCloudBackup(isExcluded: true)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
您的AppDelegate.swift
应该如下所示:
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool
GeneratedPluginRegistrant.register(with: self)
// Exclude the documents folder from iCloud backup.
try! setExcludeFromiCloudBackup(isExcluded: true)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
private func setExcludeFromiCloudBackup(isExcluded: Bool) throws
var fileOrDirectoryURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
var values = URLResourceValues()
values.isExcludedFromBackup = isExcluded
try fileOrDirectoryURL.setResourceValues(values)
请注意,没有进行错误检查,但我想不出它会失败的任何原因。我没有注意到运行该函数会导致任何额外的启动时间,这是有道理的,因为它只是在目录上设置一个属性。
【讨论】:
以上是关于Flutter:从 iCloud-Backup 中排除目录的主要内容,如果未能解决你的问题,请参考以下文章
flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?