CloudKit 2015

Early last fall, I wrote a post about the strengths and weaknesses of CloudKit as a back end for iOS apps. In part, I was inspired by a post by Brent Simmons, and Greg Pierce chimed in about why he chose to build the sync service for Drafts on CloudKit. At the time, I had some reservations about CloudKit, but it was also too early to say much for certain. A lot has changed since then, and my views on CloudKit have shifted significantly in favor of using it.

One of my concerns last year was that CloudKit might not gain wide adoption, and then quickly be abandoned by Apple. I think it's now safe to say that won't happen. Apple has pretty much gone all in on CloudKit with their own apps, including cornerstone apps like Photos. That alone is enough to ensure CloudKit's longevity. Moreover, CloudKit seems to be reasonably popular among iOS developers for many of the reasons that Greg outlined in his post. Unlike some of it's predecessors, CloudKit should be with us for a while.

The other, bigger concern was that apps were pretty much the only interface to CloudKit. If I needed to migrate data away from CloudKit, I'd have to write an iOS or Mac app to do it. Moreover, there was no way to build a web interface to a CloudKit-based app. That all changed at WWDC 2015 when Apple introduced CloudKit JS and CloudKit Web Services These provide a lot more flexibility, and for me, piece of mind. Although I'll almost certainly start using CloudKit exclusively through apps, an having an HTTP interface means I can expand in the future if I feel the need. Even if I never end up doing anything with it, it's nice to know I have options.

I remember thinking last year that there were just a couple of smallish hurtles before I'd be totally comfortable adopting CloudKit. In 2015, Apple has cleared them with room to spare, and I'm confident in saying I'll use CloudKit next time I need to build a sync service for an app. (Hopefully before too long - but more on that later.)

Apple Watch First Thoughts

Now that I've had a couple of days to use my Apple Watch, I jotted down a few initial thoughts. Here they are, in no particular order.

Use Cases

I've found the Apple Watch particularly handy in situations where it might be inconvenient to dig my phone out of my pocket. For example, I was at a baseball game over the weekend, and was able to read texts and other notifications without having to go fishing for my phone. (A particular challenge since it was a chilly night and I was wearing gloves.) I did find myself going to the phone to reply, but at least I didn't have to fetch my phone as often.

I also really enjoy the quick access to weather info from the watch face. I have the current weather configured as a complication on my watch face, and tapping the weather launches the Weather app. (Bonus, it lets you bypass the app launcher. See below.)

Watch Faces

Playing with the watch faces is really fun, both choosing a face itself, and customizing them with complications. I've mostly been using the Utility face. (Activity in the upper left, moon phase or battery in the upper right, weather on the bottom.) I do wonder why some faces allow fewer complications. The Motion face is a good example – there seems to be amble room for a complication or two, but the face doesn't support them. Why not?

It would also be nice to have more faces, and I do think we'll get them sooner or later, either from Apple or third parties. Faces are the "iPhone case" of the Apple Watch – the ideal place to personalize your watch. (If Apple decides against third-party faces, maybe they'd allow third-party complications?)

The App Launcher

The one thing I really don't like about the Apple Watch is the app launcher screen. It's terrible. Sure, it looks cool, but it's really not very useful if you're trying to get at a particular app. The icons are too small, so they're really hard to tap on, and the blob-like arrangement of apps makes it hard to find an app quickly. It's also hard to get apps into the position you want using the iPhone's Apple Watch app. The blob doesn't always move in the way you expect when rearranging apps, so moving one can cause others to shift out of alignment.

I find myself yearning for a simple paged grid of icons, similar to the iPhone home screen. No, it's not sexy, but it would get the job done. A page-based layout would also make it easier to keep frequently-used or themed apps together, so you don't have to go hunting for them. A 3x4 grid seems about right for the Apple Watch screen size, and would probably even allow the touch targets to get a bit bigger. You could even use the digital crown to scroll through pages. My fingers are crossed the Apple will reevaluate this screen sooner rather than later.

Glances

Glances are a great way to get some quick information and launch an app for more depth. Since the app launcher is so unpleasant to use, I find myself launching apps using Glances whenever possible. For example, I'll open the MLB At Bat glance to check the Red Sox score, then tap it to launch the At Bat app for a more detailed look. (18-7 against the Orioles? Ouch.)

Right now, third party Glances are read-only, but a few of Apple's let you interact with them. The Now Playing Glance is a great example: You can play or pause, skip forward or back in the current song, or change the volume. Hopefully Apple will let developers make interactive Glances soon.

Third Party Apps

Based on some of the pre-launch reviews, I expected third-party apps to be pretty slow. Fortunately, I've been pleasantly surprised to find them fairly responsive. Overall, apps that load fewer graphic elements seem to be the fastest, which makes sense when you consider that many graphics are being copied from the iPhone over Bluetooth or WiFi.

As predicted, lots of apps don't seem quite right on the Apple Watch. They either try to do too much, don't do enough, or focus on the wrong things. There's also a clear difference between Apple's own apps and third party apps, simply because they can do more – animations, sounds, taps, sensors, more flexible layouts, etc. It offers a glimpse of what's possible on the watch, and a lot of third party apps will be vastly improved when they have access to all these tools.

Communication

One of the most unique features of the watch is the ability to send drawings, taps, and heartbeats to other Apple Watch users. Unfortunately, there aren't too many people who have them yet, so it's a little like only being able to text one or two people. This could be a lot of fun if the Apple Watch takes off.

The animated emoji are a fun idea, but a little strange or creepy at times. I think I'd prefer just bigger versions of regular emoji. (Apple Watch does let you send regular emoji, but only one at a time. Why not allow multiple emoji in one message?)

Battery

The battery seems great so far. In my first two full days of use, my battery has ended the day around 45-50%. It's been enough of a non-issue that I took the battery meter off my watch face.

Miscellaneous

The charging cable that comes with the Apple Watch is significantly longer than the iPhone's Lightning cable. It's really nice if, for example, you don't have an outlet right by your nightstand. Here's hoping this year's iPhones come with longer cables too.

I got the white sport band and have found it quite comfortable to wear, and relatively easy to put on and take off. I haven't had problems with sweatiness under the band, although in fairness, it hasn't been particularly hot out. Overall I find the Watch (Sport, 42mm) quite light and natural-feeling on my wrist.

Manifest for Apple Watch

When I first started developing Manifest, I realized it would likely be a great fit for the Apple Watch. Tracking time shouldn't, er, take up much of your time. Manifest is designed to let you quickly start or stop a timer and then get back to what you're doing. As luck would have it, that's also central to the design of the Apple Watch, and I'm happy to say that Manifest supports Apple Watch on day one.

Manifest on the Apple Watch has two parts: the app itself, and a Glance that you can access by swiping up from the clock face. The Glance shows you information about your currently-running timer, including the elapsed time, project, task,and notes. You can tap the glance to open the main app.

Manifest's watch gives you access to your full list of timers, one day at a time. You can tap a timer to see more information, or to start or stop it. Force tapping on the timer list will let you view a different day or add a new timer.

I'm really excited for people to try Manifest on their new watches, but I'm also apprehensive. The Apple Watch is a totally new device, and like most developers, I'm releasing this app without being able to try it on actual hardware. Greg Pierce summed up the feeling nicely in his open letter to Apple Watch early adopters:

We developers are excited about our new watches, too. We also may take weeks or even months to make sense of what we can, should and should not do with our apps on the watch.

...

Also, be aware that there are significant limitations to what we can do on the watch. We might like to make our watch app work without an iPhone nearby, make it play sounds, tap you, add a widget to the watch face, etc., but we do not (at least yet) have access to those features. Understand that if our apps are not as powerful and full featured as the ones Apple provides it may be because of these limitations.

I expect that the Manifest watch app will grow and evolve significantly as we all get a sense of what works and what doesn't on the Apple Watch. As Apple makes them available, I'll take advantage of new tools to make the app better and more refined.

If you're an Apple Watch owner, the most helpful thing you can do is try Manifest on your watch and [let me know][http://www.twitter.com/Manifest_iOS] what works and what doesn't. Feature requests, thoughts about what the app does, what you wish it did, and how it performs are all welcome and appreciated!

Manifest is available today on the App Store.

Developing Manifest 1.0

Now I've finally released Manifest to the world, it feels like a good time for a bit of a retrospective. In no particular order, here are a few thoughts I had during the development process:

Scope Creep

One of my goals for this project was to avoid getting bogged down and ship something on a reasonably quick schedule. I'd say I was only partially successful. Even though my plan was to keep the feature set limited at the outset, I also really wanted Manifest to feel like a complete product. I had to constantly tell myself that I should keep my focus narrow for 1.0 and then focus on adding all these interesting additional features in future updates. It's easier said than done. I do think I ultimately succeeded, and I have a great backlog of stuff to add in future versions, but I was surprised how difficult it was to keep the scope in check.

Swift

One of my goals for Manifest was to develop an app entirely in Swift, and I succeeded. (All the new code is Swift. I did use a few open-source libraries and small modules I've written in the past that remain Objective-C.) All in all, I really enjoyed working with Swift, and I do think it added to the stability of the code. When I go back to other projects in Objective-C, I find myself missing a number of Swift features, particularly Swift's robust enums, structs, and protocols.

There were definitely a few annoyances. CocoaPods support was shaky at first, but is now much improved with the release of CocoaPods 0.36. Xcode's SourceKit helper crashes constantly, which messes up all manner of things, and doesn't always restart quickly or cleanly. Error messages aren't always clear. At the same time, these things are clearly improving rapidly. Apple introduced a slew of helpful changes with Swift 1.2 and Xcode 6.3 beta, and it's clear the team is working hard to address problems both with the language and the tools. I suspect changes will start to settle down sooner than many people expect. I probably wouldn't recommend using Swift in a client project right now, but that day is fast approaching.

I also want to include a shout-out to the Swift team and Chris Lattner in particular for the forthright and comprehensive release notes that accompany changes in Swift. They take the time to give examples alongside syntax changes, as well as provide insight as to why changes were made. It's a level of transparency that we don't always see from Apple, and it makes me feel great about the future of the language and the platform.

Design

I like to think I have a decent eye for design, but I'm not an artist by any stretch. Icons are a particular challenge for me, and I'm sure I'm not alone in this regard. I found myself wishing for a service that could match developers with designers who are open to taking on small projects – a handful of icons, or maybe just an app icon. The big-budget design firms are beyond my means, and my project would probably be too small for them anyway. I'm willing to pay a fair price to a designer to help me out where my skills are weaker, but simple Google searches aren't likely to turn up the kind of freelance or small design shop I need. Is there a service that can help with this kind of thing? What resources to other developers use when looking for design help?

Analytics

I thought about using a number of different analytics packages in Manifest: Mixpanel, Google Analytics, Flurry, Heap, and others. Ultimately, I decided not to use any of them. First and foremost, a lot of these services struck me as a little creepy. They collect a lot more data than I want, and it's often difficult or impossible to opt out. They also add a dependency, and integrating them well takes time that I could otherwise use to work on new features. Finally, I'm not confident that the data they collect will really lead to a better product. I'd rather solicit feedback directly from users (seriously, I'd love to hear from you on Twitter!) than try to guess what people want based on analytics data. I'm not saying that I'll never add analytics of any kind, but for now, I just don't think they're worth it. I am using Crashlytics, because crash reports are important, but that's it. (An aside: What in the world happened with the iTunes Connect analytics that Apple announced last year?)

Manifest 1.0

I'm proud to announce that Manifest is now available on the App Store. It's free to download and try, so go grab a copy now! I'm proud of how the app turned out, and there's a lot more to come in future updates.

Here's an overview of a few of my favorite features:

Notification Center Widget

Tracking time is, almost by definition, something you do while in the midst of other tasks. To make that easy, Manifest has a widget that you can install in the Today view of iOS's Notification Center. (Tap the Edit button at the bottom of the Today view to add Manifest.) You'll see a list of today's timers, and you can start and stop them with a simple tap. There's also an Add Timer button that will launch Manifest so you can set up a new timer.

Quick Timers

I often use the same project and task combinations over and over again. For example, while working on Manifest, I had a project named "Manifest" and a task named "Design." Rather than create a new timer and manually picking the project and task each time, you can use the Quick Timer menu to re-create a past timer. (Look for the lightning bolt icon in the upper left.) It's a small thing, but I find it comes in quite handy.

Round Off Time

Like most people, I round my timers off to a nice whole number – in my case, the nearest 15 minutes. Manifest makes that easy. Just swipe from left to right on any timer to round off. You can also customize the interval that your timers round off to on the Settings screen.

There's also a single, one-time $4.99 in-app purchase to unlock pro features, which includes unlimited projects and tasks, as well as unlimited data import from a CSV file.

Have ideas for new features or improvements to existing ones? Hit up @Manifest_iOS on Twitter. I'd love to hear from you!