Dropbox is awesome! It improved our lives by 1000%. But Dropbox is for files, and files are sooo 2012. The modern hipster of today doesn't have files, but keys and values. Look at all modern database-systems like MongoDB or CouchDB: They are "document-oriented" – in other words, they use keys and values. So what we need is a Dropbox for keys and values. iCloud is kinda like this, but it sucks. It sucks at using it outside from apps and it sucks at sharing.
So let me outline the idea of a Dropbox-like key-value-store from a developers perspective, because this is where every software starts: You as developer want to use this fancy new service in your app. So you create a developer account at our service and get an API-key. In the backend of the service you can create attributes used by your application. These attributes consist of keys and corresponding values for each user of your app are stored and synced by the service. All keys need to be globally unique. So if, say Facebook, uses the service to store their data (which of course seems highly unlikely) their company identifier is com.facebook under which they can create a number of keys. Each key, created by a company, is identified by the company's identifier and a name. So for example the key for Facebook's profile picture is named com.facebook.profilepicture. A when a user, using the Facebook app or website, changes his profile picture, this key is updated for the user on the server and the new photo is available on all other devices. Nothing really new so far…
But attributes of a user's application are accessible by other application of the user. If the user's newly created Twitter account needs a profile picture it can check if a Facebook photo is already uploaded and use this one (a bit like gravatar). Access to attributes needs to be controlled. Different approaches are possible: For example all keys of a user are readable to all other application. For getting write-access to a key, the user is prompted "Would you like Twitter to change your Facebook picture?". For all the data-protectors among you, an approach where even cross-application reads must be granted by the user is possible, too.
Accordingly to Dropbox shared folders, the collaborative use of keys is implemented. A user can share a key with other users and grant them read- or read-write-access.
For a developers point of view an attribute consists of an key-identifier (com.facebook.profilepicture), a description ("Facebook profile picture"), a format definition for the value (see below), a visibility to other applications, an owner (Facebook, Inc.) and a value for each user. Every developer can see the global list of defined attributes and their owners. Attributes not owned by a company, but the user are possible, too. These can be used for general data like a mail-address, or name.
The value can either be binary data, a string, a JSON-array or a JSON-object. Which type the value needs to have is defined in the format definition.
For endusers the service is free of charge. Developers pay per registered attribute, traffic and/or number of users. This could work out fine, because developers benefit by this service, as they don't need to maintain a backend-service, think about synching and sharing. Developers can pass the costs to their users by selling their applications or selling subscriptions for their service.
An SDK is provided for developers which does all the storing and syncing. A Objective-C implementation could simply look like the following:
[[DBAttributes sharedInstance] setValue: img forKey:@"com.facebook.photo"];
img = [[DBAttributes sharedInstance] objectForKey:@"com.facebook.photo"];
Each application using an attribute is informed about changes on this attribute. Therefore the developer can specify a way of information, like a web-hook, etc.
Such a service doesn't need to beg for users, because it's not the users how want to use this in the first place, it's the developers. Users don't even have to know that they are using this service. But they will profit by applications offering fancy sharing features and offline support.
As an iOS-developer I would love to use such a service. So steal this idea or pay me a shitload of money to do it myself!