How to share custom data between iPhone applications?

There are two different ways you might go about this.

1) The data you need to share is non-persistent. In other words you need to launch one application with a piece of data that it can do something with. In this case you would register a special URL scheme per application.

You can find out more information about URL schemes via Craig Hockenberry in his [redacted] blog post.

2) The data you need to share is persistent. In other words you need something like a data file that both applications can read and write too. As far as I know there isn't a safe way to do this other than storing your data on a remote server. If you need the data accessible without a data connection then you would need to figure out a way to sync data between the individual apps and the remote server.


In addition to what's already been mentioned, the iPhone documentation on code signing seems to imply that applications signed with the same identity can access the same Keychain items. If you need to store relatively small amounts of data (passwords, etc), this may be a useful technique.


Apps can share a container directory on iCloud.

From Apple's doc on configuring your iCloud entitlements:

The iCloud Containers field identifies the list of container directories that your app can access in the user’s iCloud storage. (This field corresponds to the com.apple.developer.ubiquity-container-identifiers entitlement.) The strings you add to this list must correspond to bundle identifiers for apps created by your team. Xcode uses the current app’s bundle identifier to specify the first string; you can change this to a different bundle identifier if you want multiple apps to share a main container directory. You can also add additional bundle identifiers for your team’s other apps.


Dan Grisby's most recent mobile orchard podcast hypothesizes that you might also use custom named clipboards to share information between apps. I realize this is an older post, but I thought I would point this out because it's high on google results. :)

(Documentation also suggests that NSUserDefaults might be useful here, but I've read elsewhere that that's actually not the case.)


A hack I can think of is writing to and reading from the Address Book, with the API, storing data in the available fields (+ NSData conversion for the user image perhaps). Edit: I've successfully implemented the NSData conversion and storing of objects inside a contact's display image, thus making them non-editable from the contacts application.