PodSearch

Under the Radar

26: Wading Slowly Into AppKit

 

00:00:00 ◼   ► Welcome to Under the Radar, a show about independent iOS app development.

00:00:04 ◼   ► I'm Marco Arment. And I'm David Smith. Under the Radar is never longer than

00:00:08 ◼   ► 30 minutes, so let's get started. You almost said 15, didn't you? I did.

00:00:12 ◼   ► We're going to keep doing that forever. Long habit. Very long habit.

00:00:16 ◼   ► So today, we're going to, in some ways, we're celebrating something.

00:00:20 ◼   ► So one of us did something that perhaps isn't all that unusual.

00:00:24 ◼   ► We spent a couple of weeks putting together an application and then released it.

00:00:28 ◼   ► What is perhaps very surprising is that that person was you and not me.

00:00:33 ◼   ► Yes, I mean for you that's like every month you do something like that.

00:00:36 ◼   ► That's Tuesday for me, but for you this is quite something.

00:00:39 ◼   ► So the app we're referring to is Quitter, which is a Mac app for making you waste less

00:00:46 ◼   ► time I guess you could say.

00:00:48 ◼   ► Is that a good characterization of it?

00:00:50 ◼   ► Yeah, I mean basically the very short version of the story is I was using Twitter and Slack

00:00:56 ◼   ► and RSS readers too much on my Mac.

00:00:59 ◼   ► And I'm using an app called Rescue Time for years

00:01:02 ◼   ► that kind of tracks what apps you're using

00:01:04 ◼   ► and how much time you spend on them.

00:01:05 ◼   ► And it was just showing me like I was spending

00:01:07 ◼   ► way too much time in mostly Twitter

00:01:10 ◼   ► and then some slack towards more recent months.

00:01:13 ◼   ► And so I made an app that would automatically quit

00:01:17 ◼   ► those apps, any targeted apps,

00:01:19 ◼   ► it would automatically quit them

00:01:20 ◼   ► after a user-defined period of inactivity.

00:01:24 ◼   ► So if I didn't click on the Twitter app window

00:01:27 ◼   ► for up to, say, 10 minutes,

00:01:29 ◼   ► it would just automatically quit the app.

00:01:31 ◼   ► So it's out of sight, out of mind,

00:01:32 ◼   ► and it makes it easier for me to focus on my work

00:01:35 ◼   ► rather than having this window that's kinda constantly

00:01:37 ◼   ► always in the corner of my screen and bringing in new stuff

00:01:40 ◼   ► and tempting me with its distraction.

00:01:42 ◼   ► And yes, self-control would be a better way to solve this,

00:01:45 ◼   ► but I lack that in this regard, so here we are using tools.

00:01:48 ◼   ► So I made this Mac app called Quitter

00:01:50 ◼   ► that does a very, very simple thing,

00:01:52 ◼   ► and just sits in the menu bar and I released it.

00:01:56 ◼   ► And because it can't be sandboxed,

00:01:58 ◼   ► which we'll get to shortly,

00:01:59 ◼   ► but because it can't be sandboxed,

00:02:01 ◼   ► I had to release it directly

00:02:03 ◼   ► because it won't be allowed in the Mac App Store

00:02:05 ◼   ► 'cause it can't be sandboxed

00:02:06 ◼   ► because you can't quit other apps from the sandbox.

00:02:10 ◼   ► As a brief aside, I tried making it sandboxable

00:02:13 ◼   ► 'cause I honestly just wanted to put it in the App Store

00:02:17 ◼   ► because I just didn't wanna have to deal with

00:02:19 ◼   ► direct distribution.

00:02:20 ◼   ► and all the not trivial but not massively complicated

00:02:25 ◼   ► things that come along with that.

00:02:26 ◼   ► Things like you have to build in a version updater,

00:02:28 ◼   ► like build in Sparkle and have it automatically

00:02:30 ◼   ► manage version, you have to deal with installation,

00:02:32 ◼   ► the installation process somehow and things like that.

00:02:35 ◼   ► And there's all sorts of, not to mention,

00:02:37 ◼   ► if I ever wanna charge money for something.

00:02:39 ◼   ► So I put this up there for free.

00:02:41 ◼   ► But the reason, I wanted to be in the App Store

00:02:44 ◼   ► because I thought wouldn't it be great

00:02:47 ◼   ► if I could maybe charge a dollar for this

00:02:48 ◼   ► or charge $5 for this or whatever I would charge,

00:02:50 ◼   ► you know, some reasonable price probably.

00:02:52 ◼   ► But it's like, I tried so hard to make it sandboxable.

00:02:57 ◼   ► I tried so many different approaches

00:03:00 ◼   ► to doing what it's doing, which is watching,

00:03:03 ◼   ► getting the current app, being notified

00:03:05 ◼   ► when the currently focused app changes,

00:03:07 ◼   ► all those things are sandboxable and totally fine.

00:03:11 ◼   ► But you can't quit other apps from a sandbox.

00:03:14 ◼   ► And there are like six different ways

00:03:17 ◼   ► that you could maybe try to do it.

00:03:18 ◼   ► I tried all six of them.

00:03:20 ◼   ► All sorts of different high level, low level ways

00:03:23 ◼   ► to do this, having like a separate process that you,

00:03:26 ◼   ► like a utility thing that you bundle with your app

00:03:28 ◼   ► that's not sandboxed and have that, quit things,

00:03:31 ◼   ► and there was no combination of ways I could do this

00:03:34 ◼   ► in which I could have a sandboxed app

00:03:36 ◼   ► that was able to quit arbitrary other apps.

00:03:39 ◼   ► It just was not possible.

00:03:41 ◼   ► - Which is probably a good thing.

00:03:42 ◼   ► - Yeah, I mean, if you think about how the sandbox

00:03:44 ◼   ► is supposed to work, that makes sense.

00:03:46 ◼   ► But I do kind of feel burned by the idea of sandboxing

00:03:51 ◼   ► because I wasted so much time trying to get it to work

00:03:55 ◼   ► just to get myself permitted in the Mac App Store.

00:03:59 ◼   ► And I am kind of negative feeling on the App Store

00:04:01 ◼   ► as a result of that because if I just started out

00:04:04 ◼   ► not even trying to be compatible with the App Store,

00:04:07 ◼   ► I would have had this out in half the time.

00:04:09 ◼   ► - Sure.

00:04:10 ◼   ► - But that's a little frustrating.

00:04:11 ◼   ► But otherwise, so once I resigned myself to,

00:04:14 ◼   ► well I guess this can't be in the App Store.

00:04:17 ◼   ► Then I had to do some minor setup to do things

00:04:18 ◼   ► like get Sparkle bundled in and have some kind of

00:04:21 ◼   ► build process where I could semi automate a release

00:04:24 ◼   ► if I, you know, rather than having to like

00:04:25 ◼   ► generate the XML file manually and stuff like that

00:04:28 ◼   ► for Sparkle.

00:04:29 ◼   ► But yeah, for the most part, you know,

00:04:30 ◼   ► after a couple of weeks I had this thing all set up

00:04:33 ◼   ► and it, obviously an experienced Mac developer

00:04:37 ◼   ► could have done it in way less time,

00:04:38 ◼   ► but I'm not an experienced Mac developer.

00:04:40 ◼   ► This was, you know, I've made a handful of Mac apps

00:04:44 ◼   ► over the years of attempted Mac apps,

00:04:48 ◼   ► but none of them have ever actually gotten

00:04:49 ◼   ► to like releasable quality until now.

00:04:53 ◼   ► And I might argue it's not actually releasable quality yet,

00:04:56 ◼   ► but it's at least a lot closer.

00:04:59 ◼   ► So I released it anyway.

00:05:00 ◼   ► And it's a kind of a remarkable difference

00:05:04 ◼   ► between having something in an app store run by Apple,

00:05:07 ◼   ► whether it's iOS or Mac, having something in an app store

00:05:10 ◼   ► and having something that you're directly distributing

00:05:12 ◼   ► in so many ways in which, like ways it works better,

00:05:15 ◼   ► ways it's simpler, ways where you're not getting something

00:05:18 ◼   ► that the App Store gave you kind of for free,

00:05:20 ◼   ► or well, for 30%.

00:05:22 ◼   ► You know, so it's interesting kind of to see

00:05:25 ◼   ► the other side of the world here

00:05:27 ◼   ► and to see what it's like distributing software directly

00:05:30 ◼   ► in so many levels, and this is just the beginning.

00:05:33 ◼   ► I mean, this is still day three of an app

00:05:38 ◼   ► that I released for free that, you know,

00:05:40 ◼   ► so there's still a lot of missing here.

00:05:42 ◼   ► But I did issue one quick update to it. Then I released it and that was just amazing to

00:05:48 ◼   ► just build the release and run a shell command that uploaded it and updated the sparkle file.

00:05:56 ◼   ► And then it was just out. There was no app review. There was no delay. There was no processing

00:06:01 ◼   ► the build for hours. It was just done and out and customers could get it. And that's

00:06:06 ◼   ► a little bit scary in some ways. I'm a little afraid like, "Well, I better be really

00:06:11 ◼   ► careful like it'd be really easy to accidentally just release a bug that I

00:06:14 ◼   ► didn't test it for long enough but also it was very freeing in a number of ways

00:06:19 ◼   ► to be like if I do release a bug I don't have to wait a week to fix it so you

00:06:27 ◼   ► know it's this is the beginning of what's probably going to be a big

00:06:31 ◼   ► learning experience for me as I very slowly wade into other ideas for Mac

00:06:37 ◼   ► apps that I have which honestly probably won't include overcast but we'll see so

00:06:41 ◼   ► So coming to the Mac, what are the things that you found? I've toyed with making Mac

00:06:47 ◼   ► apps and I've done a few little things. Almost always I'd end up making essentially iOS

00:06:54 ◼   ► apps in the menu bar. Somehow that seems like a much more natural thing for me, like the

00:07:00 ◼   ► concept of not having a big window that you can resize and all these things that, coming

00:07:05 ◼   ► from iOS, we're just more complicated, but having something about the size of an iOS

00:07:12 ◼   ► app that pops up when you hit a menu bar, that sort of is terrible in some ways, but

00:07:17 ◼   ► that works for me.

00:07:18 ◼   ► Well, that's honestly roughly what Quitter is. That's basically what I made. What I

00:07:23 ◼   ► made is not that much. It's slightly more advanced than that in that it has a separate

00:07:27 ◼   ► window and a menu, but the window is only resizable in one dimension, and it's a table

00:07:32 ◼   ► view with a few rows in it. So I basically made an iOS-style app for the Mac.

00:07:38 ◼   ► Did you find that the things that you, the skills you have from iOS helped in terms of

00:07:46 ◼   ► was it a big learning process? Because admittedly I don't have much experience with AppKit.

00:07:51 ◼   ► I always hear of all the things that AppKit's so crazy and it's kind of wild and iOS is

00:07:58 ◼   ► AppKit with all the problems solved or whatever, and these things are very unsubstantiated,

00:08:02 ◼   ► but I was curious what you found. Was it nice? Was it familiar? Was it totally foreign?

00:08:10 ◼   ► So learning curve and familiarity-wise, I'll get to it in a second. First, my opinion of

00:08:16 ◼   ► the quality of AppKit, whether UIKit is AppKit with all the problems solved. I think UIKit

00:08:22 ◼   ► is very clearly done in part as a response to AppKit

00:08:27 ◼   ► from people who would use AppKit forever.

00:08:30 ◼   ► And this was kind of like their attempt

00:08:31 ◼   ► to solve all the problems of AppKit.

00:08:34 ◼   ► And I think UIKit did solve many obvious shortcomings

00:08:38 ◼   ► and it got rid of a lot of legacy stuff.

00:08:40 ◼   ► 'Cause the thing is AppKit is really old.

00:08:42 ◼   ► And so you feel that in a lot of the things about it,

00:08:46 ◼   ► there's a lot of things in there that just feel like

00:08:49 ◼   ► dealing with a lot of legacy stuff

00:08:51 ◼   ► that you shouldn't have to deal with.

00:08:53 ◼   ► And so there is a lot of truth to the idea

00:08:56 ◼   ► that UIKit is like the better AppKit,

00:08:59 ◼   ► but also AppKit solves a bunch of problems

00:09:01 ◼   ► that UIKit doesn't have to solve

00:09:03 ◼   ► because the environments are so different.

00:09:05 ◼   ► So AppKit is, in many ways,

00:09:08 ◼   ► it is as complicated as it is for good reason.

00:09:11 ◼   ► But obviously in some ways, you can just feel the legacy

00:09:16 ◼   ► and you can see, and they do keep it moving, slowly,

00:09:20 ◼   ► but they do keep it moving like, you know,

00:09:22 ◼   ► like table views moved a few years ago

00:09:24 ◼   ► from being cell-based and cells are like,

00:09:28 ◼   ► they weren't quite views, it was kind of like a view,

00:09:31 ◼   ► but you couldn't do as much as you could

00:09:32 ◼   ► with like a proper NS or UI view.

00:09:34 ◼   ► And then in recent years, you can now do tables

00:09:37 ◼   ► with NS views as the rows and so stuff like that,

00:09:40 ◼   ► like they've updated it slowly over time,

00:09:43 ◼   ► but you know, you still do feel a lot of that legacy stuff.

00:09:45 ◼   ► But I think ultimately, what I've found so far with it,

00:09:48 ◼   ► And granted, I'm still in my very, very early days

00:09:52 ◼   ► of using AppKit, so huge warning there.

00:09:54 ◼   ► But what I found so far is it is not as scary

00:09:59 ◼   ► as I thought it was for the first few days of using it.

00:10:02 ◼   ► Like after the few days of like,

00:10:03 ◼   ► oh, everything's different and weird, I don't like this.

00:10:05 ◼   ► Once I got a little bit more comfortable with some of it,

00:10:09 ◼   ► I started to seeing, oh, I see why they do it that way.

00:10:12 ◼   ► Or that's actually really smart.

00:10:14 ◼   ► Or you know, I'm really getting a lot of functionality here

00:10:17 ◼   ► for free that I didn't need to code manually.

00:10:21 ◼   ► And simple things like responding to the system

00:10:23 ◼   ► standard keyboard commands and stuff like that.

00:10:26 ◼   ► You get a lot of that basically for free

00:10:28 ◼   ► if you do things in the templated expected way.

00:10:32 ◼   ► So there's all sorts of things that you have to consider

00:10:37 ◼   ► and be compatible with on the Mac

00:10:39 ◼   ► that you don't have to consider on iOS.

00:10:40 ◼   ► And the opposite is true also.

00:10:42 ◼   ► iOS has a whole bunch of stuff you have to think about

00:10:43 ◼   ► there too, but I think AppKit does so far from the,

00:10:48 ◼   ► admittedly, very little I've seen of it so far,

00:10:51 ◼   ► I think I can say that it's done the way it's done

00:10:54 ◼   ► for good reason.

00:10:55 ◼   ► And there might be better ways to do it if we rewrote it

00:10:58 ◼   ► from scratch today, but, well, they haven't,

00:11:00 ◼   ► so here we are.

00:11:02 ◼   ► - Yeah, and I think that's fair.

00:11:04 ◼   ► And it's interesting 'cause there is certainly,

00:11:06 ◼   ► as the business of making iOS apps becomes ever more

00:11:12 ◼   ► complicated. I'll, you know, inevitably what happens is I'll go to a conference and I'll

00:11:17 ◼   ► run into some of the people who have been making Mac apps for years and I'll talk to

00:11:21 ◼   ► them about their experiences there. And there is definitely a grass is greener problem in

00:11:25 ◼   ► terms of, but there's definitely a sense that there is a certain amount for certain types

00:11:29 ◼   ► of apps of a very different market for selling software on the Mac where most Mac apps seem

00:11:38 ◼   ► like their base price is maybe $9 or somewhere in that ballpark rather than 99 cents or free

00:11:46 ◼   ► in a purchase isn't the thing that tends to drive Mac apps. So there's certainly these things that

00:11:50 ◼   ► I keep in the back of my mind that like, huh, like maybe one day I should go and dive into that more

00:11:56 ◼   ► fully. But I keep, there's definitely a part of me that keeps waiting for the like this much sort

00:12:02 ◼   ► of like mythical, at some point iOS and Mac will merge and there will be like an easier

00:12:10 ◼   ► way for someone like myself, who is very comfortable on iOS, to make things on the Mac. And I have

00:12:16 ◼   ► no idea if that will ever actually happen, but it is very interesting in so far as having

00:12:21 ◼   ► like, it's like learning a new platform that isn't that new. You know, it's like I could

00:12:25 ◼   ► make Android apps, and I have tried that. But it's much more difficult for me to wrap

00:12:30 ◼   ► wrap my head around because it's a totally new paradigm

00:12:34 ◼   ► and a totally new language,

00:12:35 ◼   ► rather than starting with something that at least,

00:12:38 ◼   ► like the code is still Objective-C,

00:12:40 ◼   ► - Or Swift. - And foundation

00:12:41 ◼   ► is still foundation, or Swift, well.

00:12:43 ◼   ► - Not for us, but yeah.

00:12:44 ◼   ► - Did you write Quitter and Swift?

00:12:46 ◼   ► - I have a surprise for you, David.

00:12:48 ◼   ► No, of course not. - No, no, of course not.

00:12:50 ◼   ► - No, I wanted to get it done very quickly.

00:12:52 ◼   ► (laughing)

00:12:53 ◼   ► 'Cause this is the kind of thing,

00:12:54 ◼   ► like whenever I mention the idea of this app

00:12:56 ◼   ► to other people, everyone hated it.

00:12:59 ◼   ► everyone's like, why would I want my Twitter app

00:13:02 ◼   ► to just disappear while I'm using it?

00:13:05 ◼   ► Nobody liked the idea of this app.

00:13:06 ◼   ► I got the impression from talking to people beforehand

00:13:09 ◼   ► that I would probably be the only person ever to use it.

00:13:12 ◼   ► So spending any effort on it,

00:13:14 ◼   ► especially, and because I released it for free,

00:13:17 ◼   ► spending any effort on it does not seem like

00:13:19 ◼   ► a very good use of my time.

00:13:22 ◼   ► So I basically wanted to spend the minimum amount of effort

00:13:24 ◼   ► to just get this app to a workable, presentable state,

00:13:29 ◼   ► And there's so many possible features

00:13:31 ◼   ► that I could add to it that I'm just like,

00:13:33 ◼   ► nope, nope, nope, like I'll,

00:13:34 ◼   ► if there turns out to be tons of demand, maybe version two.

00:13:36 ◼   ► But version one has to be really basic

00:13:38 ◼   ► because I have to get back to everything else

00:13:40 ◼   ► I have to work on.

00:13:42 ◼   ► So I didn't want to do it in Swift

00:13:45 ◼   ► purely because I knew that would make it take a lot longer

00:13:48 ◼   ► and it just wasn't, it didn't seem worth it.

00:13:51 ◼   ► Plus, I was already learning AppKit

00:13:54 ◼   ► and it's like, let me learn one massive shift at a time,

00:13:57 ◼   ► Maybe, so like, let me figure out AppKit a little bit

00:14:00 ◼   ► in the language I'm already familiar with.

00:14:02 ◼   ► And then, you know, my first Swift experiments

00:14:05 ◼   ► will probably be iOS apps, because I'm way more familiar

00:14:08 ◼   ► with the frameworks there, so I can focus more

00:14:09 ◼   ► on learning the language.

00:14:11 ◼   ► So I don't know if that makes sense or not,

00:14:12 ◼   ► but that's just how I usually tend to do things.

00:14:14 ◼   ► - I think it makes sense.

00:14:15 ◼   ► I mean, as someone who has made a lot of little apps,

00:14:19 ◼   ► - Yeah.

00:14:19 ◼   ► - That makes perfect sense to me.

00:14:21 ◼   ► That is exactly, in many ways, why I continue to make,

00:14:25 ◼   ► Like, in some ways you could say it's a bit foolish that, so, since Swift was introduced,

00:14:31 ◼   ► like Swift 1 was introduced, I've launched at least three new apps.

00:14:39 ◼   ► Like whole cloth, like, go into Xcode, file new project, like, apps.

00:14:44 ◼   ► And in some ways you could say it's a bit foolish that none of those have been written

00:14:47 ◼   ► in Swift because it's probably easier to in some ways start from scratch with something

00:14:53 ◼   ► rather than like having, inserting Swift

00:14:55 ◼   ► into an existing project.

00:14:57 ◼   ► - Sure.

00:14:58 ◼   ► - And, but it's always, there's this big hump

00:15:01 ◼   ► that I have to overcome of, I can do this,

00:15:03 ◼   ► like at some point I'm gonna have to bite the bullet,

00:15:05 ◼   ► and who knows, maybe this summer will, you know,

00:15:06 ◼   ► like my, some of the app, inevitably I'm gonna make an app

00:15:09 ◼   ► this summer with something new in iOS 10.

00:15:11 ◼   ► - Breaking news.

00:15:12 ◼   ► - Breaking news, yeah.

00:15:14 ◼   ► Inevitably it's gonna happen,

00:15:15 ◼   ► and maybe this will be the year that I do that,

00:15:17 ◼   ► but where I just like, okay, I need to bite the bullet,

00:15:20 ◼   ► I just need to get over this hump and learn Swift, and the best way to do that is to actually

00:15:25 ◼   ► build something with it. But it's always so hard when you're looking at these kind of

00:15:29 ◼   ► side project things, and it's like, or I could just bang this out in a predictable, reliable

00:15:35 ◼   ► amount of time. I can, you know, and honestly, in some ways, that's the biggest thing that

00:15:40 ◼   ► I worry about when I think of something like Swift, is I can't estimate how long it'll

00:15:44 ◼   ► take to build, whereas with an iOS app, I know how long it takes for me to do something,

00:15:49 ◼   ► So when I'm trying to decide, is it worth my time,

00:15:52 ◼   ► is it worthwhile, I can say, yeah, I know,

00:15:55 ◼   ► there'll be a week or two, there'll be three weeks,

00:15:57 ◼   ► there'll be about a month, because I've done it

00:15:59 ◼   ► so many times, but who knows?

00:16:02 ◼   ► - I mean, eventually we will have to bite the bullet,

00:16:03 ◼   ► and I think for me that time will probably be this summer,

00:16:06 ◼   ► where I finally have to start using Zwift,

00:16:09 ◼   ► because the longer we wait, it really is a form

00:16:12 ◼   ► of technical debt, that we are kind of intentionally

00:16:16 ◼   ► not using this language that is obviously the future

00:16:19 ◼   ► of a platform we work on, and the present, honestly,

00:16:22 ◼   ► of the platform we work on,

00:16:24 ◼   ► we really should be migrating to Swift now,

00:16:27 ◼   ► and the longer we wait to do that,

00:16:30 ◼   ► to migrate both our skills and our ongoing code bases,

00:16:33 ◼   ► the more pain we're gonna have down the road

00:16:35 ◼   ► when there's some stronger motivating reason

00:16:38 ◼   ► why we have to do that.

00:16:39 ◼   ► So this is obviously something that we should do soon.

00:16:43 ◼   ► - Hey, maybe that's what we'll do this summer.

00:16:46 ◼   ► via an interesting and terrifying experience

00:16:50 ◼   ► for us both, I'm sure.

00:16:51 ◼   ► - Exactly.

00:16:52 ◼   ► This episode of Under the Radar

00:16:53 ◼   ► is brought to you by Hover.

00:16:55 ◼   ► Quite simply, Hover is the best way

00:16:57 ◼   ► to buy and manage domain names.

00:16:58 ◼   ► When you have an idea for a project,

00:17:00 ◼   ► naming it can be difficult.

00:17:01 ◼   ► Now with Hover, you can search,

00:17:03 ◼   ► you can get lots of keywords,

00:17:04 ◼   ► you can figure out what domains are available

00:17:06 ◼   ► through all the different domain extensions.

00:17:08 ◼   ► Once you finally get that name,

00:17:09 ◼   ► you'll be able to quickly and easily

00:17:11 ◼   ► buy the domains that you need.

00:17:13 ◼   ► They have a simple, fast, and hassle-free method

00:17:15 ◼   ► buying domain names at Hover. You don't want to be faced with like a thousand screens,

00:17:19 ◼   ► a thousand add-ons, confusing add-ons with high prices, like do I need that or not? Or

00:17:24 ◼   ► things that seem really obvious like, do I want privacy? Well, yes, of course I want

00:17:28 ◼   ► privacy. Hover give you that stuff for free. They're really user friendly, very well designed,

00:17:34 ◼   ► it's really, really easy to use and they don't believe in heavy handed up selling or cross

00:17:37 ◼   ► selling or confusing packages that are just, you know, really overpriced to make you buy

00:17:41 ◼   ► things that you didn't really need, just kind of fool you into it. They don't believe in

00:17:44 ◼   ► and all that stuff.

00:17:45 ◼   ► Hover has great prices.

00:17:47 ◼   ► Now they have over 400 domain name extensions out there.

00:17:51 ◼   ► They also have fantastic customer support

00:17:53 ◼   ► if you ever need any help.

00:17:54 ◼   ► They have core, you can, you know,

00:17:55 ◼   ► of course you can email them and everything,

00:17:57 ◼   ► but they also have phone support.

00:17:59 ◼   ► And if you call them up, they have a policy of no hold,

00:18:02 ◼   ► no wait, and no transfer, which means you call them

00:18:05 ◼   ► and a human being picks up the phone immediately,

00:18:08 ◼   ► no menus, nothing, and they don't have to transfer you

00:18:10 ◼   ► to five different departments to help you.

00:18:11 ◼   ► The person who picks up, they can help you.

00:18:14 ◼   ► It's really quite amazing.

00:18:15 ◼   ► And of course, you know, email if you want it

00:18:17 ◼   ► and everything else.

00:18:17 ◼   ► They have so much more great stuff.

00:18:18 ◼   ► They have volume discounts, they have custom email addresses,

00:18:21 ◼   ► storage and forwarding, so much more.

00:18:24 ◼   ► They even have a new feature called Hover Connect,

00:18:26 ◼   ► which makes it easy to get your new domain name connected

00:18:28 ◼   ► with popular hosting services and other things

00:18:30 ◼   ► you might need if you're buying a domain name.

00:18:32 ◼   ► Things like Squarespace, Tumblr, Shopify, many more.

00:18:34 ◼   ► They have automatic configuration for all these things.

00:18:37 ◼   ► And of course, if you need any help, use that support.

00:18:39 ◼   ► It's amazing.

00:18:39 ◼   ► So go right now to hover.com and try them out.

00:18:41 ◼   ► Use coupon code this week.

00:18:43 ◼   ► WWDC at checkout to get 10% off your first purchase at hover.com and show your support

00:18:49 ◼   ► for Under the Radar and all of Relay FM. Thank you to Hover for sponsoring the show and all

00:18:53 ◼   ► of Relay FM.

00:18:54 ◼   ► So what I thought might be an interesting thing to dive into for the second half of

00:18:59 ◼   ► this episode is your experience building a Mac app reminded me of something that is a

00:19:05 ◼   ► pattern that I found that keeps cropping up in being an indie where being open to doing

00:19:13 ◼   ► doing little side projects and gradually extending out my skill set has come back to reinforce

00:19:22 ◼   ► itself and pay for itself so often that now it is something that when I see an opportunity

00:19:27 ◼   ► to do something new and interesting, more often than not I will say yes to it and justify

00:19:33 ◼   ► the time for it because it just sort of keeps happening that by being an independent, by

00:19:38 ◼   ► by definition in some ways,

00:19:40 ◼   ► we have to be a Jack or Jill of all trades.

00:19:42 ◼   ► We have to be able to do so many things

00:19:46 ◼   ► because we're just one person or two people,

00:19:49 ◼   ► and so we have to be able to do all these things

00:19:51 ◼   ► that a lot of, if you work in a bigger company,

00:19:53 ◼   ► that other people would be able to do for you,

00:19:54 ◼   ► or you'd be able to outsource or contract for,

00:19:57 ◼   ► and being independent, you tend to do these things yourself.

00:20:01 ◼   ► And so I think about things like,

00:20:02 ◼   ► probably about a year ago,

00:20:05 ◼   ► I did a series of YouTube videos

00:20:08 ◼   ► about how, at the time it was learning WatchKit,

00:20:12 ◼   ► and I did like a few YouTube videos.

00:20:13 ◼   ► It never really went anywhere,

00:20:14 ◼   ► like they didn't get too much traction or interest,

00:20:16 ◼   ► but I went through the process

00:20:18 ◼   ► of learning how to make a video.

00:20:21 ◼   ► And that turned out, then Apple introduced app previews,

00:20:26 ◼   ► and I was like, oh, great,

00:20:29 ◼   ► I actually know how to use Final Cut Pro.

00:20:31 ◼   ► I'd learned it from this project that never went anywhere,

00:20:34 ◼   ► but now I found this thing that was more core to my business

00:20:36 ◼   ► that I needed to know how to do,

00:20:38 ◼   ► and I could now edit video at least well enough

00:20:40 ◼   ► to make an app preview.

00:20:41 ◼   ► Or I started a podcast.

00:20:43 ◼   ► Back in the day it was developing perspective,

00:20:45 ◼   ► and for years and years it never really went anywhere,

00:20:48 ◼   ► but I developed this discipline and this habit

00:20:51 ◼   ► of thinking through my ideas,

00:20:53 ◼   ► which helped me have better ideas,

00:20:55 ◼   ► and then also introduced me to a lot of new people.

00:20:58 ◼   ► And it's helped give me an audience to do things with.

00:21:01 ◼   ► And it's something that I just wanted to explore

00:21:05 ◼   ► a little bit, because I feel like in many ways

00:21:07 ◼   ► an important thing for being, if you want to be an independent businessman, that you

00:21:11 ◼   ► have to be multidimensional. Like, you have to keep adding these little skills to your

00:21:16 ◼   ► skill set. And one of the best ways to do that, in my experience, is these little side

00:21:19 ◼   ► projects. And so, like, now, you know how to make, or at least you've gone through

00:21:23 ◼   ► the process of actually releasing a Mac app. And so if you ever want to release another

00:21:27 ◼   ► Mac app, you have that skill. Or even more importantly, if you consider making a Mac

00:21:33 ◼   ► for say, for Overcast, like your main product.

00:21:35 ◼   ► You can look at it and say,

00:21:37 ◼   ► I actually kind of have a sense of what that would be like,

00:21:39 ◼   ► and whether that would be a good idea,

00:21:41 ◼   ► and you're not just guessing.

00:21:43 ◼   ► - That's the big thing is like,

00:21:44 ◼   ► you know, like as you mentioned,

00:21:45 ◼   ► like you were hesitant about Swift

00:21:46 ◼   ► 'cause you don't know how to estimate it.

00:21:48 ◼   ► Now I know to some degree, not a huge degree,

00:21:51 ◼   ► 'cause you know, like porting Overcast would be

00:21:54 ◼   ► very little low-end work,

00:21:56 ◼   ► and a whole bunch of interface work.

00:21:58 ◼   ► You know, and that's,

00:21:59 ◼   ► and dealing with UI kits, various interface,

00:22:03 ◼   ► I mean dealing with AppKits, various interface complexity

00:22:06 ◼   ► is the area in which I have the least experience on AppKit

00:22:09 ◼   ► because Quitter is one screen

00:22:10 ◼   ► and it's a really simple screen.

00:22:12 ◼   ► So dealing with things like complex table view layouts

00:22:16 ◼   ► and resizing and all this stuff,

00:22:18 ◼   ► there's a lot that I haven't tackled yet

00:22:20 ◼   ► that I'm not familiar with yet.

00:22:21 ◼   ► So it would still be tricky for me to figure out

00:22:24 ◼   ► how to do that and also just a podcast app is a lot of UI.

00:22:28 ◼   ► It's a lot of screens.

00:22:30 ◼   ► It's a lot of widgets and buttons and gestures

00:22:33 ◼   ► and there's a lot there.

00:22:35 ◼   ► So the scope of that problem would be very large.

00:22:38 ◼   ► And I think one of the main reasons why I'm not rushing

00:22:42 ◼   ► to make overcast for the Mac is, you know, you mentioned,

00:22:47 ◼   ► before the break, you mentioned how you've been tempted

00:22:50 ◼   ► to try the Mac for things like the different business models

00:22:53 ◼   ► that are possible or the different customer pricing

00:22:55 ◼   ► expectations that are there.

00:22:56 ◼   ► And those are very valid, but I think the best justification

00:22:59 ◼   ► to whether you should make a Mac app

00:23:02 ◼   ► or whether you shouldn't make a Mac app for something,

00:23:04 ◼   ► is where are the customers for that app?

00:23:07 ◼   ► And for Overcast, I have Overcast on the web,

00:23:11 ◼   ► I have Overcast on the iPhone,

00:23:13 ◼   ► and I have Overcast on the iPad.

00:23:15 ◼   ► The iPad version was mostly a waste of time,

00:23:19 ◼   ► and all the work that I put into it was mostly a waste,

00:23:23 ◼   ► because among my active users,

00:23:25 ◼   ► I'm running something like 96% iPhone and 2% iPod Touch,

00:23:31 ◼   ► So it's like two or three percent iPad use

00:23:34 ◼   ► among active users.

00:23:36 ◼   ► And the app had to take on a lot of complexity

00:23:39 ◼   ► with things like the adaptive split view

00:23:40 ◼   ► for adaptive layout, and now the new iPad resizing

00:23:43 ◼   ► with multitasking, which kind of uses that.

00:23:45 ◼   ► And there's so many weird little hacks in the app

00:23:48 ◼   ► and complexity in the UI structure

00:23:51 ◼   ► in order to enable iPad universal support.

00:23:53 ◼   ► And I did all that for three percent of users.

00:23:58 ◼   ► And that 3% might have been okay

00:24:01 ◼   ► if it was just a blown up iPhone app

00:24:02 ◼   ► on the few times I had to use it on the iPad.

00:24:04 ◼   ► I don't know.

00:24:05 ◼   ► I guess I have no way of knowing that.

00:24:07 ◼   ► But all the effort I put into the iPad port

00:24:11 ◼   ► probably was not worth it in the grand scheme of things.

00:24:14 ◼   ► And I'm not gonna take it out now

00:24:15 ◼   ► 'cause it's there now,

00:24:17 ◼   ► but if I could go back and spend that time

00:24:20 ◼   ► on features that would benefit all the iPhone users,

00:24:23 ◼   ► also I think that would be time better spent.

00:24:26 ◼   ► With the Mac app, I'm not rushing to make a Mac app

00:24:29 ◼   ► for Overcast primarily because I don't think

00:24:31 ◼   ► it would do much better than the iPad app.

00:24:33 ◼   ► I think there are some people asking for it, no question.

00:24:35 ◼   ► Some people want a Mac app.

00:24:37 ◼   ► First and foremost though, I don't.

00:24:39 ◼   ► I would never use it because I don't listen to podcasts

00:24:41 ◼   ► while I'm working and that's the thing like,

00:24:43 ◼   ► people would say either you do or you don't

00:24:44 ◼   ► and I'm not one of those people so I don't even know

00:24:46 ◼   ► what a Mac app would really be like to be good

00:24:49 ◼   ► and I wouldn't be motivated to make it for myself

00:24:52 ◼   ► so that's gonna hurt the chance of it being made.

00:24:53 ◼   ► But also, I just think that there aren't that many people

00:24:56 ◼   ► looking for a podcast app on the Mac.

00:24:59 ◼   ► It's a way smaller market than the iPhone,

00:25:02 ◼   ► and so for the amount of effort it would take,

00:25:04 ◼   ► which is a non-trivial, like a large amount of effort

00:25:08 ◼   ► to build enough UI to make it useful,

00:25:10 ◼   ► I don't think that's, it's unlikely, I think,

00:25:13 ◼   ► to be worthwhile in the long run.

00:25:15 ◼   ► Whereas like, Quitter solves a problem.

00:25:18 ◼   ► It took very little effort,

00:25:19 ◼   ► and it solves a big problem that I was having,

00:25:21 ◼   ► and it's already paid for itself in efficiency gains for me,

00:25:25 ◼   ► So that makes sense.

00:25:27 ◼   ► Something else I was thinking about doing

00:25:29 ◼   ► is utilities for podcast production,

00:25:31 ◼   ► which I have tons of shell scripts

00:25:33 ◼   ► and little hacky apps that I use to help me produce podcasts,

00:25:37 ◼   ► help me edit and publish them,

00:25:38 ◼   ► and the obvious next step is to make those for the Mac.

00:25:42 ◼   ► And I've also had this lofty goal in my head,

00:25:45 ◼   ► maybe someday it would be cool to make a podcast editor

00:25:48 ◼   ► to replace Logic, and I thought for a while,

00:25:51 ◼   ► maybe I should do that on the iPad,

00:25:52 ◼   ► because it would be a great use of the iPad Pro.

00:25:54 ◼   ► You have this nice big screen,

00:25:55 ◼   ► You have the pencil for precision editing and everything.

00:25:57 ◼   ► It sounds like a great use for the iPad Pro,

00:25:59 ◼   ► but where are people actually editing podcasts?

00:26:01 ◼   ► And my entire workflow is in the Mac,

00:26:05 ◼   ► and if I made this tool for the iPad,

00:26:07 ◼   ► it would be great, I could do it really quickly

00:26:09 ◼   ► 'cause I'm more familiar with UIKit,

00:26:11 ◼   ► but it would also be the entire ecosystem

00:26:15 ◼   ► around the editing of the podcast.

00:26:16 ◼   ► Everything else I use and that everyone else I know uses

00:26:20 ◼   ► to edit podcasts, it's all these Mac utilities

00:26:23 ◼   ► and Mac needs, you know?

00:26:25 ◼   ► So like, it seemed like that would be a waste

00:26:27 ◼   ► to make that for iPad when most of the action

00:26:31 ◼   ► in that space really happens on the Mac.

00:26:33 ◼   ► So it's kinda like, you have to like kinda go

00:26:34 ◼   ► to where the people are for that thing, for the most part.

00:26:37 ◼   ► And there's, you know, consideration for things

00:26:39 ◼   ► like level of competition and everything

00:26:41 ◼   ► that might sway you one direction or the other,

00:26:42 ◼   ► but like, it should be clear from the kind of app

00:26:45 ◼   ► you're making which platform is the more likely platform

00:26:49 ◼   ► for success.

00:26:50 ◼   ► And I think things like podcast production utilities,

00:26:54 ◼   ► that's the Mac.

00:26:55 ◼   ► Things like consumption of media, that's iOS for sure.

00:27:00 ◼   ► And that's not to say that nobody works on iOS

00:27:03 ◼   ► or nobody consumes media on the Mac,

00:27:04 ◼   ► but it's a matter of what's way more popular

00:27:07 ◼   ► or easier to do on these platforms.

00:27:09 ◼   ► And so I think that is the more responsible way

00:27:12 ◼   ► to choose which platform you use.

00:27:13 ◼   ► It's just like, where's the audience for this really?

00:27:16 ◼   ► - Sure.

00:27:17 ◼   ► And I think it's also worth a sort of understanding too

00:27:21 ◼   ► that the thing that's also so difficult

00:27:23 ◼   ► about something like doing Quitter,

00:27:25 ◼   ► doing a side project on the Mac versus doing Overcast

00:27:30 ◼   ► is what's great, what works out to be a wonderful thing

00:27:34 ◼   ► is if your side projects are kind of low risk,

00:27:37 ◼   ► low commitment, that you can partition them off

00:27:40 ◼   ► from your main work because the difficulty

00:27:43 ◼   ► with something like Overcast, I imagine, in some ways

00:27:45 ◼   ► that the stakes are so high and people's expectations are so high versus a random app that if they've

00:27:52 ◼   ► quittered, no one had downloaded it. It's like that doesn't really impact you in a way

00:27:56 ◼   ► that if you launch on day one and you have, you know, like if your entire user base downloads

00:28:02 ◼   ► the Mac app and starts using it, that's a non-trivial number of people. And so it's

00:28:07 ◼   ► a dangerous thing for like an exploratory or side project or something you're new at

00:28:13 ◼   ► to just sort of take on versus something where, yeah,

00:28:17 ◼   ► like a podcast utility rather than a full-blown podcast editor,

00:28:21 ◼   ► it's like, sure, it's low commitment, low risk.

00:28:23 ◼   ► If it doesn't work out, it's not that big of a deal,

00:28:27 ◼   ► and you can hopefully just have learned from it.

00:28:28 ◼   ► And eventually, over time, building up the skills

00:28:32 ◼   ► from smaller things that are low risk, low commitment,

00:28:35 ◼   ► maybe something bigger makes sense.

00:28:38 ◼   ► But that is certainly something that I

00:28:40 ◼   ► know I've had to learn for myself,

00:28:41 ◼   ► of being able to think through the level of commitment

00:28:44 ◼   ► something is going to require beforehand,

00:28:48 ◼   ► rather than discovering at the end,

00:28:50 ◼   ► you look back and you're like, huh,

00:28:52 ◼   ► this is actually a lot more work

00:28:53 ◼   ► than I thought it was gonna be,

00:28:54 ◼   ► or requires a lot more maintenance or attention

00:28:57 ◼   ► than I thought it would be, and that's very problematic,

00:29:00 ◼   ► and sort of becomes not a helpful side project.

00:29:03 ◼   ► - Exactly.

00:29:04 ◼   ► All right, well, we're out of time this week.

00:29:06 ◼   ► I think there's lots of things here

00:29:07 ◼   ► we can talk about more, though,

00:29:08 ◼   ► so we probably will in future episodes.

00:29:10 ◼   ► So we're out of time this week.

00:29:11 ◼   ► you everybody for listening. Thanks to our sponsor Hover and we will see you

00:29:14 ◼   ► guys next week. Bye.