Fixed a bug that would sometimes result in a crash or freeze when dragging an item to the last position in a page or group
Fixed compatibility with Launchpad on OS X 10.8 Mountain Lion
Added compatibility with Gatekeeper
Update note: Some people have had issues with the ‘check for updates’ menu item (Sparkle) in the past. It seems to be working now, but if you don’t see the update, you may need to download the new version manually.
Developer note: The source code for this version is not yet public, because the 10.8 GM is still NDA’d. When 10.8 is released to the public, I will upload the source code to GitHub.
The gated road to the future
Let’s talk about that last change.
Developer ID is Apple’s new program that allows Mac developers to sign apps for Gatekeeper without going through the Mac App Store. As we know, 10.8’s Gatekeeper feature will, by default, only allow users to install apps that are either (1) from the App Store, or (2) signed with Developer ID. This has been widely hailed as a developer-friendly move, allowing us to continue to create apps (such as this one) which are not possible in the App Store and do not go through Apple’s review process. (Much more in-depth explanation here from Steven Frank.) Up to this point, I have felt that it is a good solution.
But for some reason, I was under the impression that Developer ID was available to anyone with a free Apple Developer account1. In making my app ready for Gatekeeper, I discovered that this is not the case; it requires a $99 annual Mac Developer Program membership, which is the same program that allows you to publish to the Mac App Store. I have not seen it reported anywhere, but it seems significant that Apple has quietly started requiring $99 from all Mac developers who publish free apps, including those outside of the App Store.
This presented a quandary for me: I was not already a member of the Mac Developer Program, only the iOS Developer Program, which is a separate $99; I have no plans to put anything in the Mac App Store; and I obviously don’t make any money from Launchpad Editor. Is it worth it to me to pay $99 to have my silly hobby app keep working for a year? This is a question I imagine many other developers are asking themselves right about now.
I could do nothing, and allow my users to see scary blocking errors when they try to download my app; this will surely be the case for many existing free apps that are floating around out there and will never see another update. I could even give specific instructions on how to override the errors and install it over the operating system’s protestations—I am sure some developers will try this technique, too, and test their users’ trust in Apple versus their desire for free stuff. Or I could just leave to the user to figure out on their own—considering Launchpad Editor’s primary audience (technical users), this probably isn’t a giant leap. But either way, I would consider the result to be an unacceptably bad user experience. I decided I would rather remove the app entirely than allow this to happen.
So it was kind of a toss-up, but in the end I decided that $99 isn’t a terrible expense for a hobby2…for now.
Curiously, the Developer ID certificate I was issued lists an expiration date five years from now—this is in contrast to the App Store certificates (for both Mac and iOS), which expire after one year. My Mac Developer Program membership, however, expires in one year. So I’m not entirely sure what will happen if I let the program membership expire and then try to use the certificate again. In theory, it should still work, but I have not been able to find any documentation about this.
So, honestly, I don’t know what will happen a year from now. I joined the program mainly to avoid feeling like I was losing the work I have already put into it, but at some point, it’s not going to be worth it any more.
Finally, as a registered Apple developer, I can’t yet talk about what I may or may not have seen in Mountain Lion, since that’s still under NDA. But I will say, based on what Apple has publicly revealed about Launchpad in 10.8, I’m disappointed to see very little apparent progress—only one change is listed on that web page, and it’s only a search feature, which is redundant to Spotlight. The whole reason I use Launchpad is because I don’t want to type! I was hopeful last year when I first created Launchpad Editor that the need for my app was temporary, and it would soon be made unnecessary. Sadly, that does not seem to be happening. It’s hard to imagine that Apple can’t think of any way that Launchpad could be improved, so I guess the other explanation is that they just don’t care very much about the feature.
This is one of those maddening times where I’m sure I read this somewhere, maybe even just on Twitter from someone whom I considered a reliable source of information—but I can’t find any trace of it any more. (Of course, Twitter’s horrible search combined with their lack of anything resembling an archive doesn’t help.) If anyone can find a citation for this, it would make me feel less crazy. ↩
I’ve been looking for an application launcher for a long time. When you have a lot of apps, like I do, the Dock just doesn’t cut it. Not that I didn’t try: I made various attempts to have a categorised, hierarchical list of applications in the Dock, which tended to get broken or more annoying in different ways with each major release of Mac OS X.
I’ve tried various third-party utilities, but they were all too complicated and customisable. Or, they expected me to type the name to launch it! There’s a reason I use a Mac instead of a UNIX terminal2.
What I was really looking for was something like the Classic Mac OS Launcher:
Simple. To the point.
So when I first heard about Launchpad, to come as part of Lion, it seemed to be just what I was looking for.
And indeed, it was—after I took the time to actually organise my apps. Which took a really long time. Click, drag, wait…wait….wait…drop. Repeat. Sigh.
But it was worth it. All my apps, easily accessible and meticulously organised. Yes, I tend to be a little more obsessive about this than most people, but it made me happy.
And then, one day, Launchpad randomly corrupted its database, resetting all of my apps into alphabetical order and losing all of my folder groups.3 I would have had to do it all over again—and maybe not for the last time, if Launchpad didn’t have its bugs worked out yet.
I was looking for an excuse to make a Mac app anyway.
I’ve always wanted to make native apps. Even having grown up in the ‘boom’, and being a self-taught web developer myself, I would tell people that what I really wanted to do was make ‘real’ software someday. And they would laugh. ‘Web apps are the future, silly kid!’ But while making web apps has been fun and useful, even the best web UIs have always felt to me like they lack the stability and consistency of a native app. So I’m glad to see the tide turn somewhat back towards native apps in recent years, which affords me an excuse to pursue making them. Anyway.
Once I found out that the Launchpad data is just a simple SQLite3 database, I decided to give a try at making a simple app to manipulate it, such that I could get the job done faster, and with less annoyance, than using Launchpad itself. All it would really need to be is a list view that synchronises to a database, so I thought it would be educational but not too daunting.
Reading the database was simple: I just used Gus Mueller’s excellent FMDB. I had to figure out the database schema, since it’s not documented anywhere (with a little help - thanks, Andreas!), but it was surprisingly straightfoward. Curiously, it doesn’t look like a database that was generated using Core Data (which was why I didn’t attempt to use Core Data for this either), which makes me wonder Apple is using: straight SQLite C calls? Shudder.
The main challenge was in learning how to do things in AppKit, after I had only just recently learned to use UIKit for making an iPhone app. But they both use similar patterns, the major example being the data source/delegate pattern, so I was pleased to find that I could use many of the concepts I already knew. And when I was having trouble finding documentation on certain subjects, the people in #macdev on Freenode were very helpful, for which I’m very grateful.
One thing I didn’t have to worry about (much) was… memory management! After having to learn retain/release the hard way for my last project, automatic reference counting was a breath of fresh air. It would be hard to overstate how pleased this made me: it allowed me to focus on my application logic, rather than getting constantly distracted by what seems like bookkeeping.
And now it’s done!4 Did I mention you can get it here? Since I couldn’t put it in the App Store (for obvious reasons), I made it open-source on GitHub.
I expect that Apple will improve Launchpad in the future, hopefully by 10.8, making my app unnecessary. It’s typical of Apple to release a minimal-but-polished first version, then add more features later.
Or not. Maybe Launchpad is only for ‘halo effect’ former Windows users brought over to the Mac via their iPhones, who aren’t going to have many apps anyway, and thus maybe Apple doesn’t think anything needs to change. In that case, perhaps I’ll eventually attempt to reinvent the original Launcher myself. (Unless someone else does it first.)
In the meantime, I’m looking forward to making more apps.
That reminds me: I never wrote a blog post about my first iPhone app. Perhaps I’ll come back to it. ↩
Not that there’s anything wrong with that. I know a bunch of smart people who use Terminal as much as possible. It’s just a different way of thinking. ↩
I think this happened on or around the time of the 10.7.2 update. ↩
Well, shipped. Software is never really done, only acceptable enough to release. I still have more ideas than time, so if anyone wants to chip in, here are some places to start… ↩