Stormcloud 3.1.0

Stormcloud 3.1.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
Released最后发布2022 年 5 月
SPM支持 SPM

Simon Fairbairn 维护。



Stormcloud 是一种将 JSON 文件和 JPEG 图像转换为 iCloud 文档以及将它们转回去的方式。

它也支持 Core Data,将 Core Data 驱动的数据库转换为 JSON 格式并将其转回——传入一个 NSManagedObjectContext,它将读取所有实体、属性和关系,并将它们包裹在一个 JSON 文档中,然后将该文档上传到 iCloud,可以在其他设备上恢复。

使用

let stormcloud = Stormcloud()

普通 JSON

stormcloud.backupObjectsToJSON( objects : AnyObject, completion : (error : StormcloudError?, metadata : StormcloudMetadata?) -> () ) {

    if let hasError = error {
        // Handle error
    } 

    if let newMetadata = metadata {
        print("Successfully added new document with filename: \(metadata.filename)")
    }
})

图像

let image = UIImage(named: "YourImage")
stormcloud.addDocument( withData: image, for: .jpegImage ) { (error, stormcloudMetadata) in

	if let hasError = error {
		// Error creating document
	} else {
		print("Successfully added new document with filename: \(stormcloudMetadata!.filename)")
	}
}

恢复

stormcloud.restoreBackup(withMetadata: metadataItem ) { (error, restoredObjects ) in
    if let hasError = error {
        // Handle error
	} else if let isImage = restoredObjects as? UIImage {
		// Do something with the image
	} else if let isJSON = restoredObjects as? [String : Any] {
		// Do something with the JSON
	}
}

Core Data

管理对象上下文

stormcloud.backupCoreDataEntities(inContext: self.managedObjectContext, completion: { (error, metadata) -> () in

    if let hasError = error {
        // Handle error
    } 

    if let newMetadata = metadata {
        print("Successfully added new document with filename: \(metadata.filename)")
    }

})

恢复

stormcloud.restoreCoreDataBackup(with : stormCloudMetadata, to context : NSManagedObjectContext,  completion : (error : StormcloudError?) -> () ) {
    if let hasError = error {
        // Handle error here
    }
}

获取项目

let jsonItems = stormcloud.items(for: .json)		// Returns an array of metadata items
let images = stormcloud.items(for: .jpegImage) 	// Returns an array of metadata items

元数据

Stormcloud具有自己的元数据对象,该对象用于iCloud和本地文档。如果您使用iCloud,将设置元数据属性iCloudMetadata。这些对象还包含方便的属性,详细说明其当前状态(在iCloud还是本地),它们是否正在上传或下载等。

委托

Stormcloud有各种委托方法。

// Called when a metadata item is updated in any way. Useful for getting downloading/uploading progress of items.
func metadataDidUpdate(metadata : StormcloudMetadata,type : StormcloudDocumentType) {

}

// Called when the internal list changes
func metadataListDidChange(manager : Stormcloud) {

}

// Called when items are added or deleted from the interal list. Here's an example of how this can be used with a table view with appropriate animations:
func metadataListDidAddItemsAt( addedItems : IndexSet?, deletedItems: IndexSet?, type : StormcloudDocumentType) {
	self.tableView.beginUpdates()

	var section : Int
	switch type {
	case .jpegImage:
		section = 1
	default:
		section = 0
		}

	if let didAddItems = addedItems {
		var indexPaths : [IndexPath] = []
		for additionalItems in didAddItems {
			indexPaths.append(IndexPath(row: additionalItems, section: section))
		}
		self.tableView.insertRows(at: indexPaths as [IndexPath], with: .automatic)
	}

	if let didDeleteItems = deletedItems {
		var indexPaths : [IndexPath] = []
		for deletedItems in didDeleteItems {
			indexPaths.append(IndexPath(row: deletedItems, section: section))
		}
		self.tableView.deleteRows(at: indexPaths as [IndexPath], with: .automatic)
	}
	self.tableView.endUpdates()

}

// Called when the file list first finishes loading. If you're using iCloud, the list will not be ready until the first
// gathering of documents has completed. This method allows you to know when the list is ready to be used.
func stormcloudFileListDidLoad( stormcloud : Stormcloud) {

}

安装

使用CocoaPods安装

要开始使用pods,请参见:https://cocoapods.org.cn。Stormcloud的最小Podfile可能是以下内容:

target 'yourAppName'
use_frameworks!

pod 'Stormcloud'

环境变量

Stormcloud支持环境变量,以提供额外的调试和日志记录。

环境变量

StormcloudDelayLocalFiles - 当设置时,Local Files文档提供者将延迟其初始的文件收集。允许您在不启用iCloud的情况下模拟iCloud的元数据收集方式。

StormcloudVerboseLogging - 启用详细的日志记录,以供调试使用。