Last fall, after I had finished the model controller layers of Unread, I felt a pit in my stomach. The next big task in front of me was sharing. I knew I wanted Unread to have lots of sharing options, but I dreaded writing them. I had already written tons of them in the course of making Riposte for App.net. Great sharing features are non-trivial to write. It’s even harder to make them reusable (Riposte’s were not). There are many concerns to think about:
- Interface – What will the share sheets look like? Should I use native view controllers, or roll my own? If I make my own, how will they work?
- Devices – Will the same designs work on both iPhone and iPad? If not, how will they differ?
- Accounts – For services not handled natively by iOS, how will accounts and credentials persist? Which sharing features won’t need accounts, and how do I distinguish them in code?
- Features – Third-party services like Pinboard have lots of extra options. Where do I draw the line between what is and isn’t out-of-scope for an RSS reader?
- Reusability – How do I write all this code so that it’s reusable across future projects?
- Extensibility – How do I architect all this sharing code so that it can be extended with more sharing options and alternate interfaces?
There was no way to tackle all of these issues within the limitations of
UIActivityViewController on iOS 7, which is why I decided to make OvershareKit. You can read the reasons in detail on OvershareKit’s Github page, but here are the highlights:
- It would be difficult to mix native and non-native sharing services.
- The user interface is not configurable, e.g. presenting a share sheet while in dark mode would result in a glaring white activity sheet.
- There’s no way to customize email and SMS sharing content without providing alternate UIActivity subclasses to replace the built-in classes.
Those are just a few of the reasons why I decided to build something like OvershareKit for Unread. Justin Williams was in a similar position with his projects around the same time, so we decided to integrate his code for managing system accounts into the broader framework that I had conceived.
Bear in mind that at the time OvershareKit was being developed, it was still unclear whether Apple would ever provide better inter-app communication and sharing APIs. After seven OS’s, it was easy to believe that Apple frankly didn’t care. I was frustrated by their lack of concern, and dissatisfied by the lack of an open-source framework to bridge the gap. It was my hope that OvershareKit would become more than just a pet project between me and Justin.
But now that the iOS 8 developer preview is here, with its powerful Extensions APIs, what should be done about OvershareKit? Extensions are Apple’s answer to the problem that OvershareKit was created to solve. It seems to me that it’s better for all involved – both developers and users – for any app that’s using OvershareKit to migrate to Extensions and the UIActivity frameworks.
OvershareKit is now an unnecessary middleman between users and services like Pinboard and Instapaper. Almost any service that users want to access via OvershareKit already has great first- or third-party apps on the App Store. The burden of responsibility should belong to them to provide great sharing features via iOS 8 extensions.
I think this should apply to all future OvershareKit development, too. For example, many of Unread’s customers ask for Evernote support. Evernote has a rich and complicated API. It doesn’t make sense for outside developers like me to spend limited resources building support for Evernote. I want Unread to have Evernote, but the costs outweigh the benefits. It’s a sacrifice I was willing to make back when Apple provided no alternative. But now that Extensions are coming, the math has changed.
I don’t plan on adding any new features to OvershareKit. I will make sure that all of its existing features continue to operate bug free on iOS 7 and iOS 8. It may take several months (or longer) for extensions to be developed for all the services that OvershareKit currently supports. In the interim, I want to be sure that apps like Unread can continue to rely on OvershareKit.
If you have an app or service you can’t live without, I urge you to write to its developers and ask them to consider adding support for UIActivity extensions in iOS 8.