CloudKitGDPR
Swift 框架,允许用户管理在 iCloud 中存储的数据。本项目基于苹果提供的 示例代码。
要求
- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 3.0+
- Xcode 10.2+
- Swift 5.0+
安装
Carthage
Carthage 是一个去中心化的依赖管理器,构建你的依赖并提供二进制框架。
您可以使用以下命令通过 Homebrew 安装 Carthage
$ brew update
$ brew install carthage
将 CloudKitGDPR 指定在您的 Cartfile
中,以便将 CloudKitGDPR 集成到您的 Xcode 项目中
github "arturgrigor/CloudKitGDPR" ~> 2.1
运行 carthage update
build 框架并将构建的 CloudKitGDPR.framework
拖到您的 Xcode 项目中。
CocoaPods
CocoaPods 是用于 Cocoa 项目的依赖管理器。您可以使用以下命令安装它:
$ gem install cocoapods
需要 CocoaPods 1.1.0+。
要使用 CocoaPods 将 CloudKitGDPR 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'CloudKitGDPR', '~> 2.1'
end
然后,运行以下命令:
$ pod install
Swift Package Manager
Swift Package Manager 是一个用于自动化 Swift 代码分发的工具,并与 swift
编译器集成。它处于早期开发阶段,但 CloudKitGDPR 支持在支持的平台中使用它。
一旦您设置了 Swift 包,将 CloudKitGDPR 添加为依赖项就像将其添加到您的 Package.swift
的 dependencies
值一样简单。
dependencies: [
.Package(url: "https://github.com/arturgrigor/CloudKitGDPR.git", majorVersion: 2)
]
使用方法
创建实例
import CloudKitGDPR
let defaultContainer = CKContainer.default()
let documents = CKContainer(identifier: "iCloud.com.example.myexampleapp.documents")
let settings = CKContainer(identifier: "iCloud.com.example.myexampleapp.settings")
let metadata: GDPR.RecordTypesByContainer = [
defaultContainer: ["log", "verboseLog"],
documents: ["textDocument", "spreadsheet"],
settings: ["preference", "profile"]
]
let maping: GDPR.ContainerNameMapping = [
defaultContainer: "default",
documents: "docs",
settings: "settings"
]
let gdpr = GDPR(metadata: metadata, containerNameMapping: maping)
导出数据
将所有用户的私有数据作为 JSON 文件导出。
gdpr.exportData(usingTransformer: JSONDataTransformer.default) { result in
switch result {
case .failure(let error):
print("GDPR export data error: \(error)")
case .success(let value):
print("User's private data: \(value)")
}
}
支持的转换器
ZeroDataTransformer
:这将直接给您 CloudKit 记录而没有任何其他转换。CSVDataTransformer
:这将给您一个 CSV 文件的列表。JSONDataTransformer
:这将给您一个 JSON 文件的列表。
删除所有数据
gdpr.deleteData { result in
switch result {
case .failure(let error):
print("GDPR delete data error: \(error)")
case .success(_):
// TODO: Maybe cleanup the local data too
print("All user's private data deleted.")
}
}
高级用法
iOS
使用 ZIPFoundation 框架将数据导出为 ZIP 压缩存档的 JSON 文件。
import CloudKitGDPR
import ZIPFoundation
lazy var applicationCachesDirectory: URL = {
let urls = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
return urls[urls.count-1]
}()
gdpr.exportData(usingTransformer: JSONDataTransformer.default) { result in
switch result {
case .failure(let error):
print("GDPR export data error: \(error)")
case .success(let value):
DispatchQueue.global(qos: .background).async {
let url = self.applicationCachesDirectory.appendingPathComponent("data.zip")
let archive = Archive(url: url, accessMode: .create)
for (fileName, csvContents) in value {
let data = Data(bytes: Array(csvContents.utf8))
try? archive?.addEntry(with: fileName, type: .file, uncompressedSize: UInt32(data.count), provider: { data[$0..<$0+$1] })
}
DispatchQueue.main.async {
let viewController = UIActivityViewController(activityItems: [url], applicationActivities: [])
viewController.popoverPresentationController?.sourceView = self.exportDataCell
viewController.completionWithItemsHandler = { _, _, _, _ in
try? FileManager.default.removeItem(at: url)
}
self.present(viewController, animated: true, completion: nil)
}
}
}
}
备注
iOS 示例必备条件
- 将 `
GDPR+App.swift
` 文件中 `defaultContainer
` 的标识符更改为可访问的标识符。 - 在同一文件中将记录类型 `
"SomeRecordType"
` 替换为在该容器中实际使用的记录类型。 - 在 `
Demo.entitlements
` 文件中使用相同的容器标识符设置 `com.apple.developer.icloud-container-identifiers
键。
联系方式
如果您在使用或欣赏这款产品,请告诉我。