I’ve been having a lot of fun with Workflow since its release last week. If you haven’t heard of it, think Automator for iOS. It packages a lot of built-in functions from iOS into blocks that can be chained together to perform tasks. Your workflows can be run from the app, saved to the homescreen, or run from Workflow’s action extension. I thought I’d share a couple that I’ve built so far.
Save & Share GIF
I sometimes find images1 that I want to save and possibly link to. To facilitate this, I have two Dropbox accounts. My main account, and a secondary account that I set up on my web server. The two accounts share a folder. When I save an image to the folder from my main account, it gets shared with my secondary account and pushed to a folder on my web server. A process on the server notices when there’s a new file in the folder and copies it to another folder on the server that’s publically accessible.2
This workflow takes an image (or a link to an image), prompts you for a file name, then saves the file to Dropbox. Then it creates a URL based on a template and saves it to the clipboard. You can download it here.
Now, you might be reading that and thinking to yourself, “Huh, an app that uploads an image and returns a URL sounds awfully familiar.” If so, I’m flattered you know my work. So yes, one of the first things I did was make a very basic version of Shoots & Leaves. It’s really cool in a kinda depressing sort of way. But hey, if that does what you need, great! If not, you know where to find me.
My wife handles the bill-paying in our house and tracks expenses. Whenever I buy something I give her the receipt. If you’ve ever paid for gas at the pump, you know your odds of getting a receipt are around 50%. When I don’t get a receipt, I text my wife the information she needs.
I thought this one was pretty clever. This workflow uses my location and looks up gas stations near me. Then it prompts me for the amount, and presents a menu so I can select which card I used. Then it puts all that information in a text message. You can download it here.
So far, it works pretty well. There’s always the possibility that the location search will find the wrong gas station, or fail completely. But I can deal with that the rare times it happens.
Whenever people talk about adapting Foundation to the big (or small) screen, the popular opinion has been that it’s unfilmable. The book (the whole original trilogy, really) is, for the most part, people sitting around and talking.
But with the popularity of Game of Thrones, and the trend that has started of book series being turned into television series, I started thinking about how Foundation might could be adapted. I think you could do it, if you treat the books as an outline. Lots of interesting things happen “off screen”–tell those stories in a way that serves the larger themes that are in the books.
I received my iPhone 6 (64GB, Space Gray) last Friday, and wanted to write up some thoughts about it.
It’s the right size (for me). The iPhone 6 looks significantly bigger, but it doesn’t feel that much bigger in my hand. I had a chance to play with the iPhone 6 Plus while waiting at the Apple Store. It’s a lovely device, but to me it feels too big to be something I carry constantly.
And I think it’s going to be more comfortable to hold than the iPhone 5. The 5 was small enough that my brain thought I could hold it the same way I held the iPhone 4. But it was big enough to make that uncomfortable. The 6 I definitely can’t hold that way, so I’m gripping it in a way that’s less tiring.
I use the Reachability feature occasionally and it works fine. It’s just hard to remember to use it. I wish it somehow worked with Notification Center. I’m using Notification Center more now that it has widgets, and the only way to get to it is to reach to the top of the phone.
I’m finally getting used to the new position of the off button. I think I would have liked it better just a little higher, though. Where it is now I tend to squeeze the whole phone, and I end up pushing the up volume button at the same time.
A few hours after I got it I thought, “Wait, isn’t the camera lens supposed to stick out?” I had been playing with it that whole time and hadn’t noticed it. I don’t think it’s a problem. Most people will use a case. It feels like it’s designed so that it would be difficult to catch it on something.
Speaking of which, the camera is fantastic. With the iPhone 5, I would have to take four or five photos to get one that wasn’t blurry. I haven’t taken a blurry photo yet with the 6. For somebody with two kids, that’s huge.
On Sunday my iPhone rebooted while I was listening to a podcast. When it finished I unlocked it, the screen flashed red, and it rebooted again. It did this several times Sunday night and Monday morning. I took it to the Apple Store and they swapped it for another one. So far, I haven’t had any problems with the replacement.
I didn’t get an iPhone 5s, so this is my first experience with Touch ID and a motion coprocessor. Both work great. I’m still trying out step tracking apps to find one I really like.
I’ve started noticing NFC terminals everywhere. I can’t wait till October.
Overall, I’m happy with it. I’m one of those people that didn’t really want a bigger phone, but I think Apple hit the sweet spot with the iPhone 6: A larger screen that’s small and light enough to carry all day.
I’m seeing lots of developers dealing with extension issues as they get ready for tomorrow’s iOS 8 launch. I’m still working on an extension for Shoots & Leaves, but I have already dealt with one of the problems mentioned by Tumblr’s Bryan Irace:
For existing apps, the problem is simple; the data already exists somewhere outside of the shared container, and only the container app can migrate it over. Thus, if the user installs an update that adds an extension, and tries to use the extension before launching the application and giving it a chance to perform the migration, they’re going to have a bad time.
There’s no great option here. If the user opens our extension first, we just throw up a dialog telling them that they need to launch the application first. Inelegant but necessary.
That’s a pretty bad workaround. I look at is as no different from when a user opens your app the first time: You need to give them some way to do what they want to do.
I don’t know how the Tumblr app is structured, so I won’t try to offer a different solution. But I will describe what I did.
In the Shoots & Leaves extension, if you open it before you launch the app you’ll be able to upload via Imgur (which doesn’t require a login) and send the link to
Safari or1 the clipboard. At the bottom of the view is a message:
“Full access to all your configured hosts and actions will be available after the next time you launch Shoots & Leaves”
Or something like that.
And that message is a link you can tap on to launch the app.1 Once you open the app all your personal hosts and actions1 will be in the extension, and those defaults will be replaced.
It would be nice if the extension could launch the app in the background, and that’s something I could see Apple doing at some point. As we iOS devs say a lot: Maybe next year.
I’ve since learned these things aren’t possible in share or action extensions at this time. I think the larger point stands. ↩
Loved this post by Gus Mueller:
However much time I’ve been doing this for, and no matter how much practice I put into it, there’s one thing that always sneaks up and pulls the rug right from under me. It’s usually between major releases, but not always. It’s a period of time where I’m pretty lost, and I don’t know what to do. I have feature lists, I have open bugs to fix, and I have an outline of where the app is going. But I feel mentally incapacitated, like I’m getting nothing done.
We’ve all been there, but it’s nice to see it explained so well.
Great post by Maciej Ceglowski on the fifth anniversary of Pinboard. I particularly liked this part:
I find that the longer I run the site, the more resistant I become to the idea of ever giving it up, even if I need to take the occasional break. It is pleasant to work on something that people draw benefit from. It is especially pleasant to work on something lasting.
I feel the same way about Shoots & Leaves. The feedback I get telling me how people use it is a huge motivator.
I wasn’t expecting much this year.
It had become sort of a tradition: The handful of things that were always on everybody’s WWDC wishlist that never arrived. The disappointment was not so much in not getting those things, but in knowing it would be a full year before you even got another chance.
This year, we got what we asked for. Not everything, certainly. I still don’t have a pony. But Apple announced many of the things we’ve been wanting for years. And not because they “finally caved”, but because those things were finally ready.
So here, in more or less the order they showed up in the Keynote, are the things I’m most excited about:
An OS X release named after a Warner Bros. character! How could I not be excited about that?
The design looks nice. I’m not sure about the transparency, because you never know if something like that will be done well, but we’ll see. I’m glad they went with an evolution of the current design, rather than a complete rework. And I’m excited to try the dark theme.
iCloud Drive is unlikely to replace Dropbox for most people, but it will be great to have that kind of access to our iCloud files.
They had an impressive demo for Continuity, but that’s one of those features that has to work near flawlessly for people to use it. If it only works sometimes, or it’s slow, people will go back to their old habits of sending stuff back and forth manually.
Interactive notifications is a great feature. I hope a lot of apps adopt it quickly (looking at you, Due).
Just the week before, I had been thinking about what we were going to do in a few years when our kids are old enough to have their own iOS devices. Family Sharing is a welcome solution. Only thing I haven’t heard yet is whether iTunes Match will be included.
I love that all my photos can be in iCloud, and the new iCloud price tiers. The $0.99 tier is a no brainer, and I wouldn’t hesitate to jump to the next level if I need the space.
I’ve heard some people suggest that app bundles will cause the price of apps to drop even lower. I see it being very useful in a variety of situations. If you can bundle iPhone and iPad apps together then it would be a better solution than universal apps. You would be able to sell, say, the iPhone version for $1.99, the iPad version for $2.99, and the bundle for $3.99. Users will get smaller app downloads and not have to pay extra for platforms they don’t own.
I have mixed feelings about TestFlight. Beta testing based on Apple IDs rather than devices, and distribution through the App Store is fantastic. But having to go through a beta app review could be a deal-breaker. We’ll see.
I’m probably most excited about extensions. There are a lot of ways I could use this with Shoots & Leaves. So many, in fact, I’m not sure where to begin. And I can’t wait to see how some of my favorite apps use it.
Similarly, the new camera APIs and PhotoKit should be useful for me as well. CloudKit too, though I haven’t dug in enough to see if I can use it the way I want.
I’m seeing a lot of people playing with Swift already, and it looks like a great new language. It’ll take some getting used to, but the new tools they introduced with it should make it easy to learn.
I don’t think it was mentioned in the keynote, but that fact that embedded webviews will now be as fast as Safari is a significant change. This will affect my day job quite a bit.
And probably the most important change, is the one that makes it possible for us to discuss all the others: the changes to the NDA. It’s exciting to see people publicly discussing all the new stuff. I think this will have a huge affect on adoption of all the new APIs.
This is going to be a busy summer and an exciting year for all iOS and Mac developers. I can’t wait to see what we do.
The Onion, of course:
According to Richman, it was just now hitting him how many hours of his life he’s pissed away listening intently to nonsense about celebrity couples, how good or bad certain pens are, and why a particular sports team might have a chance this year. The husband and father of two said that every time he’s felt at all put out or bored by a bullshit conversation—especially a speculative one about how bad allergy season was going to be—he should have just turned around, walked away, and gone rafting or rappelling or done any of the millions of other things he’s always wanted to do but never thought he had time for.
At various points throughout the day, Richman could be heard muttering to himself that he couldn’t believe he was almost 40 years old.
A little over a year ago, I was working on our pool when I realized I needed a part for the pump. I pulled out my phone and took a picture of it so I’d have the model number. As I looked at the photo in my camera roll it occurred to me that I didn’t need it there. I needed it in Omnifocus. Better still, I needed a way to turn a photo into text, so that it would be as portable as plain text is.
A huge thank you to my wife. She gave me the time I needed to get this done, and she’s my #1 beta tester.
Also, big thanks to Derek Giromini for his wonderful work on the icon.
I have absolutely no idea how this thing is going to do. I’d love for it to find an audience that uses it regularly. But I consider it a success that the damn thing exists at all. I made a thing that’s mine, which was the real goal all along.
Anyway, releasing apps is fun. Let’s do it again soon.
I realized at the beginning of this year that it had been a very long time since I’d read a book. I read constantly, but almost all of it is articles on the web. I hadn’t read a grown-up fiction book in ages. So I decided to change that. I ended up reading a lot this past year, and I wanted to mention some of my favorites. They are listed here in the order I read them.
- The Road by Cormac McCarthy – I don’t think any book has ever affected me the way this one did. It was easy to imagine me and my son as The Man and The Boy, which made me anxious the entire time I was reading it. That feeling pushed me to read it as fast as I could. It’s a wonderful book, and I don’t think I could bring myself to ever read it again.
- The Ocean at the End of the Lane by Neil Gaiman – This book does a great job of showing the world from the perspective of a young child. As with The Road, the scenes between the father and son felt like a gut punch.
- Leviathan Wakes by James S.A. Corey – I thoroughly enjoyed this book. It just pushed all the right buttons for me. After reading it, I immediately read both sequels. They were both very good, though not quite as good as the first. I’m eagerly awaiting the next book in the series, as well as the possible TV show.
- The Rook by Daniel O’Malley – Another fun one, with possibly the best first chapter ever. Lots of great characters, too. And the main character’s letters to herself are a great device for introducing the reader to the world.
- The Lies of Locke Lamora by Scott Lynch – I hesitated to read this one, since I don’t tend to like fantasy settings. But I’d heard so many good things that I gave it a try, and I’m glad I did. It’s a fascinating world, and I’m looking forward to reading the sequels.
- The Night Circus by Erin Morgenstern – The best word I can think to describe this is “lovely”. Such a beautiful story, with so many dream-like elements. I find myself thinking about it quite a bit. This is one I could see re-reading regularly.
- Ancillary Justice by Ann Leckie – If you follow sci-fi news you’ve probably seen quite a bit of praise for this book. It’s well deserved. It can get confusing in places, but not in a frustrating way. More of a, “Oh, I should have paid more attention to that part. But since I didn’t, now I get to go back and read it again. Yay!” way.