DevBits header

AgileBits Presents: AgileCloudSDK

Today we’re pleased to announce that AgileCloudSDK is officially open source and available on GitHub. AgileCloudSDK is a framework that we’ve built for the purpose of bringing iCloud sync to the AgileBits Store version of 1Password. AgileCloudSDK allows us to take our existing iCloud sync solution and make it work outside the Mac App Store.

Get the Code

Enough with the pleasantries, let’s get to it! All of the code is up on GitHub. The repository includes the framework, two sample apps (one using CloudKit, the other using AgileCloudSDK), and instructions on how to get set up.


Using both CloudKit JS and CloudKit REST Services, AgileCloudSDK is a drop-in replacement for the official CloudKit framework. Its core functionality is compatible enough that for our sync code, the only difference between it and CloudKit is which framework header we import. The gap is a little wider for sync setup, because OS X and iOS handle all the authentication automatically when using CloudKit.

When using CloudKit JS or the REST Services, authentication is not handled automatically. In this case, AgileCloudSDK brings the user to the CloudKit authentication page in their browser. After a successful login, an authentication token is returned to the app.

AgileCloudSDK auth

The differences in authentication required us to modify how sync is configured in 1Password, but thankfully the changes we had to make were fairly minimal.

One of the many benefits of using AgileCloudSDK is that developers can target either the development or production CloudKit container, which is invaluable for debugging issues in a production environment.

Getting Here

The first stage of AgileCloudSDK development was to simply build this thing for our own purposes. It was important to us that we explain to our users how we managed to get iCloud sync outside the Mac App Store; announcing the framework a few months ago was our way of doing that.

The next phase was to get more real-world experience with the framework and to fix issues as they came up. We’ve been refining AgileCloudSDK and we’re really happy with how it’s working out so far, and we think it’s ready for others to use it.

Going Forward

We’re now entering the third phase of AgileCloudSDK development. This is where we would love all you app developers to get involved. AgileCloudSDK contains implementations of every CloudKit class that 1Password uses, which is the majority of them. See our GitHub project page for a list of classes that are not implemented. We’d love for AgileCloudSDK to implement 100% of the CloudKit API.

We used both CloudKit JS and CloudKit REST Services to implement AgileCloudSDK. CloudKit JS is almost always the quickest way to get something built, but the REST services allow more flexibility. We’d love to see more code converted to using only the REST services, with the goal of one day breaking the dependence on any main-thread processing.


For general feedback, leave a comment below or e-mail us at If you have questions or comments on implementation, or if you find a bug, please file an issue in the repo.

11 replies
  1. jashiner
    jashiner says:

    I want to thank my team for all their hard work in getting AgileCloudSDK to this point. I am very excited to finally have this as an open source framework, and I am even more excited to hear how other teams use it!

    • Rick Fillion
      Rick Fillion says:

      Hi Max,

      That’s a great question. CloudKit JS and CloudKit REST Services’ existence would make it technically possible for developers to add CloudKit sync to their Windows apps, ourselves included. That being said, we are not currently in the process of adding iCloud sync to our Windows app. It’s not something we’ve written off as never-happening though. Part of the equation for us is to understand how many users would want such a thing. I assume from your question that you’d fall into that camp, so that’s great to hear.

      Thanks for letting us know that you’d be interested in that.


    • Rick Fillion
      Rick Fillion says:

      The Windows app has seen fewer big updates than the Mac and iOS apps, but it still sees much love. There’s actually a bunch of things that it does better than the Mac app, and we need to catch up there. (sshhh… don’t tell the windows developers I said that.)

      I’m really excited about the stuff that’s coming up with the Windows app. Hopefully the stuff I’ve got in mind when I say that statement starts shipping in beta soon so that you can see for yourself.


  2. Schneppi
    Schneppi says:

    Support iCloud sync for Windows would be awesome. I think not few of us use iCloud on iPhone, iPad and Mac but need to work on Windows machines at the office.

    • Rick Fillion
      Rick Fillion says:

      Hi Schneppi,

      It would be awesome. It would also be all sorts of fun to build. Our OS X app and our Windows app work a little differently, which is part of the challenge (in both the positive and negative sense).

      It’d be cool if one day all of our apps supported iCloud sync. For the time being we’re not committing to that, even though we’d all like to see it happen. As I’m sure you can imagine, adding a sync type to any app is a lot of work, so we’re defaulting to “no” until we’re firmly convinced it’s a great idea. It can be difficult saying no to something we really want, but saying yes to that would mean having to say no to a whole slew of other things. We can only take on so much at a time.


    • Rick Fillion
      Rick Fillion says:

      Hi Ryan,

      We can’t speak about future developments like sync via iCloud on Windows. We do make sure to keep track of potential user interest in such things. Building AgileCloudSDK gave us a good way to learn how to use CloudKit JS and CloudKit REST Services, which would reduce the amount of work we’d need to do in order to bring this sync on other platforms… but it would still be a massive undertaking. Who knows what the future holds though. :)


Leave a Reply

Want to join the discussion?
Feel free to contribute!

What's on your mind?