CloudKitGDPR 2.1.0

CloudKitGDPR 2.1.0

Artur Grigor 维护。



SPM compatible Carthage compatible Build Status CocoaPods Compatible Platform Twitter

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 项目中。

❗️请注意,从版本 1.2 开始,这是一个 静态框架,不需要在 carthage copy-frameworks 构建阶段中包含。有关更多信息,请参阅 Build static frameworks to speed up your app’s launch times 部分。

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.swiftdependencies 值一样简单。

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 键。

联系方式

如果您在使用或欣赏这款产品,请告诉我。