Daily coverage of Apple’s WWDC 2019 conference, by John Sundell.

A Swift by Sundell spin-off.

Developer interview: Gui Rambo on iOS dark mode, Marzipan, and beyond

Welcome to the first WWDC by Sundell developer interview — a mini-podcast and article series, in which we’ll hear from some of my friends from around the Apple developer community — about their thoughts, hopes and dreams for WWDC.

Starting with one of my really good friends — he’s an iOS developer, a reverse engineer, he writes for 9to5Mac, and he’s my co-host on the Stacktrace podcast — Mr. Gui Rambo.

Listen to the interview

You can also listen in your favorite podcast app, by adding the following RSS:


Read the interview

John: So my first question is a question that I know that you get very often around this time of the year, and that is that given that you know a lot about WWDC beforehand — you’ve been spelunking, you have insider information, etc. — are you still excited for the conference, or does it kind of feel like you already know everything?

Rambo: It’s funny — because most people seem to be into the surprise aspect of Apple’s keynotes, and as you may have been able to tell, I’m not into surprises that much. So I’m mostly excited to finally get my hands on stuff, and to see the reaction of the general public for the stuff that we’ve been talking about — when talking about rumors and stuff like that — for quite a while.

So what interests me in an Apple keynote is not “Oh, what’s the surprise going to be?”, it’s what the story is going to be — what story are they going to tell, what spin are they going to put on things? I mean, we know a lot about what’s happening, but what I’m always interested in is the why — and that’s what we get from Apple’s keynote, and that’s what excites me.

John: Yeah, that makes a lot of sense. We usually know a lot of the different, separate parts, but we might not know the over-arching story, right?

Rambo: Exactly, we have these tidbits of information, and we have some screenshots here and there, and then some leaked icons, and some information from the inside — but we don’t have the big picture, and we don’t have the “marketing talk”, that they are surprisingly good at, usually.

John: Right, they put on a really good show!

Rambo: Definitely. So I’m in it for the show, and I want to actually see what the show is going to be like — what demos are going to be given, what “impact phrase” is going to be born in this keynote — there’s always the “courage”, and “can’t innovate anymore” kind of phrases. So that’s what excites me about the keynote, and WWDC is always my favorite keynote of the year — because it’s the one that impacts me the most, given that I’m an iOS developer, and an Apple developer in general.

John: Awesome, I feel very much the same way. So, one thing that you’ve been talking about for a while now is dark mode coming to iOS with iOS 13, and it seems like you have more or less confirmed that now with your latest story on 9to5Mac. Do you think that there’s anything in particular that we as third party developers can do in order to get ready for supporting dark mode?

Rambo: You should look at how it works on other Apple platforms. I mean we’ve had dark mode on tvOS for quite a while, and also CarPlay, and the Mac since last year. So you can expect dark mode on iOS to work similarly to dark mode in Apple’s other OSs.

More practically, one thing that you could do if you have hard-coded color values in your app is move those to an asset catalog. Because, when you create an asset catalog — and you create images and color assets in an asset catalog — you can specify that this particular named color will be this effective color in light mode, and this other effective color in dark mode. So you can have a color in your asset catalog that’s called “background color”, and you have two slots — one for light mode, and one for dark mode — and then you set it to white in light mode, and black in dark mode, and everything else happens as if it was magic.

If you already have your own dark mode implementation, I think you’re going to be fine, there’s probably going to be a way — like there is on the Mac — for you to query the current system appearance, so you’ll just basically switch to your own dark mode when running on iOS 13 with dark mode enabled system-wide, so that’s something you can do as well. So if you already have your own dark mode, don’t worry, you’ll probably be able to adapt your dark mode to iOS 13 easily. If you don’t, if you have hard-coded colors, I’d say using an asset catalog for your colors is a good bet.

John: I think that’s really good advice. Like always, it’s good to have a single source of truth, where you have all your colors collected in one place. And like I mentioned also in my article that I published today about how to get a code base ready for WWDC, one of the points that I brought up there was to use the most modern practices when it comes to integrating with the system — and Apple have definitely been talking a lot about asset catalogs and these kind of things these past years, so it makes a lot of sense to add support for that, and to use that in order to support dark mode in an easy way.

Rambo: Absolutely.

John: So speaking of dark mode coming to iOS, and being “normalized” with the Mac in that regard, Apple seems to be taking app development for their various platforms in a direction where one single app will eventually be able to run on every platform. So this year it looks like we’ll be getting the production release of what’s called “Marzipan”, which is to be able to run iOS apps on the Mac — how do you think this strategy will affect us as third party developers, and is there anything we can do to prepare for it?

Rambo: We should think about what APIs we’re using, and if they make sense on another platform. So if you have a very camera-heavy app on iOS, you should think about whether that makes sense on the Mac. Think about that, think about whether your app actually fits on the other platform, because many apps won’t. But also, many apps will, so think about the types of things you’ll have to change in your app to make it a better Mac platform citizen. So adding new features, maybe that work better with a mouse and keyboard, that only appear in the Mac version of your app — I’m pretty sure that’s going to be quite easy to do with conditional compilation and things like that.

Also, make sure you’re using as few dependencies as possible, I stress this aspect a lot with every new WWDC. The more dependencies you have in your app, the longer it’s going to take for you to be able to adopt new OS versions and new APIs. That’s why I went super-strictly no dependencies for my app Chibi Studio with the 2.0 version — because I want to be able on day one to just open the new version of Xcode, fix whatever compilation errors I get, and just build and run. And that’s usually not as simple to do when you have dependencies, because those can take quite a while to actually be updated to the latest Xcode — and sometimes they’re not updated. So that’s why you should think about the dependencies you have before you use them.

John: Right, more dependencies more problems.

Rambo: Exactly, so I think this move will be a big change for developers, because nowadays if you want to make an iOS app, you have to think about iPhone and iPad — that’s usually the platforms and the devices people think about. You can of course think about Apple Watch and the TV, but most apps are either on iPhone, iPad, or both of them. And now there’s a new platform to this decision — which is the Mac. So you’ll have to decide if your app is going to be on iPhone and iPad, just iPhone, just iPad, or on the three of them.

There’s another aspect of this which is kind of interesting — you’ll also be able to make an app that’s just for the Mac with Marzipan. So, maybe you have an idea for a Mac app and you’re a long-time iOS developer, but you don’t want to learn AppKit for whatever reason — I think you should, it’s not that hard — but, if you really want to build a Mac app and you only know UIKit stuff, feel free. Just make a new iOS app, check that “Mac” checkbox and uncheck “iPhone” and “iPad”, and go ahead.

John: Nice, that’s a really good point. It will probably enable more people to build their own little utilities and things like that, which both of us have been doing for years using AppKit, command line tools, and things like that — just because they already know UIKit, so they’ll be able to build those apps much faster.

Rambo: Yeah, definitely. And, I’m still curious to see how limited these apps are going to be — will we be able to ship them outside of the Mac App Store, I don’t think so, but maybe? And also, will we be able to do some “hacky things” with them, when running locally? Of course, when you ship to the App Store there are lots of regulations you have to follow, but if you’re just making a tool for yourself — maybe you’ll be able to write a UIKit app that spawns other processes — like a front-end to some command line tool, and stuff like that. So there are possibilities there that’s going to change dynamic of how developers work for both iOS and the Mac.

John: Yeah, it’s really really exciting!

Thanks a lot to Gui Rambo for his answers and insights. You can find his fine writing at 9to5Mac.com, and follow him on Twitter @_inside.

I hope you enjoyed this very first WWDC by Sundell developer interview. Feel free to tweet me @johnsundell with any feedback you might have, and a new interview will be coming your way no later than tomorrow.

Thanks for reading/listening! 🚀