Swiftpack.co -  SimonFairbairn/Stormcloud as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
SimonFairbairn/Stormcloud
An iCloud document manager with Core Data and JSON support, in Swift
.package(url: "https://github.com/SimonFairbairn/Stormcloud.git", from: "3.1.0")

Stormcloud is a way to convert and write JSON files and JPEG images to iCloud documents and back.

It also supports Core Data, converting a Core Data driven database to JSON and back—pass it an NSManagedObjectContext and it will read out all of the entities, attributes, and relationships, wrap them in a JSON document and upload that document to iCloud, where it can be restored on another device.

Usage

let stormcloud = Stormcloud()

Regular 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)")
    }
})

Image:


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)")
	}
}

Restoring

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

Managed Object Context:

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)")
    }

})

Restoring

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

Getting Items


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

Metadata

Stormcloud has its own metadata object that is used for both iCloud and local documents. If you're using iCloud, the metadata property iCloudMetadata will be set. The objects also have convenience properties detailing their current status (where they are (iCloud or local), whether they're uploading or downloading, etc).

Delegate

Stormcloud has a range of delegate methods.

// 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) {

}

Installation

Installing using CocaoPods

To begin using pods see: https://cocoapods.org. A minimal Podfile for Stormcloud could be:

target 'yourAppName'
use_frameworks!

pod 'Stormcloud'

Environment Variables

Stormcloud supports environment variables for extra debugging and logging.

Environment variables:

StormcloudDelayLocalFiles - When set, the Local Files document provider will delay its initial gathering of the files. Allows you to simulate how iCloud's metadata gathering works without enabling iCloud.

StormcloudVerboseLogging - Enables comprehensive logging for debugging.

GitHub

link
Stars: 14
Last commit: 2 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API