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: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: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
◼
►
- 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: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: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: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: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.