00:00:00 ◼ ► Welcome to Under the Radar, a show about independent iOS app development. I'm Marco Arment.
00:00:06 ◼ ► And I'm David Smith. Under the Radar is usually not longer than 30 minutes, so let's get started.
00:00:16 ◼ ► So these are the apps and services and things that we use to do our job of being indie app developers.
00:00:24 ◼ ► And it's a topic that came up just recently. I was just thinking about how I'm very set in my ways with a lot of these tools.
00:00:32 ◼ ► There are a lot of these things that I've been using for the entire 17 years that I've been an app developer.
00:00:38 ◼ ► There are some that are new and changing. And what's interesting about my list is probably, and I'm certainly yours too, Marco,
00:00:44 ◼ ► is it is so many of these tools, there's lots and lots of options. There's lots of things that you could do to accomplish that end.
00:00:52 ◼ ► Like, say you just want, you know, what is your coding plain text editor? There are a hundred of those probably in the world with various benefits, various changes.
00:01:01 ◼ ► And some of those, sometimes it's easy to switch because there's some new thing comes along, you see something that just works a lot better for you,
00:01:08 ◼ ► or replaces something that has fallen into disrepair, or those kinds of things. But often what I find is you just end up in these ruts,
00:01:15 ◼ ► where these are the tools that I use, and these are the tools I use in some ways because they were the first tool that really solved the problem.
00:01:21 ◼ ► And now I have muscle memory, now that I just know how things work, and the reason you stick with something can be really small and subtle.
00:01:27 ◼ ► And so I guess mostly that caveat is just to say I'm not necessarily saying that these are the best tools,
00:01:33 ◼ ► I'm just saying these are the tools that I use, and hopefully you can learn something from that because I find them to be very productive for me,
00:01:40 ◼ ► you know, based on my 17 years of being an iOS developer, but your mileage may vary, I suppose. That's the disclaimer I'm trying to make.
00:01:46 ◼ ► Yeah, and I'm really, honestly, looking at the list that you've made here, there are so many tools here that I have never even heard of,
00:01:54 ◼ ► let alone used myself, so I am going to be doing a lot of learning and note-taking and opening up a whole bunch of browser tabs today,
00:02:03 ◼ ► Yeah, so I think we will do our best to have some links to these things in the show notes, so don't feel like you need to pull over to write them down if you are following along at home.
00:02:12 ◼ ► So coding seems like obviously the first place to start, and obviously the main place that I do coding is in Xcode,
00:02:22 ◼ ► I think when I was first making this list, I thought, oh, well, that's like a given, not even worth discussing,
00:02:27 ◼ ► but from what I understand, there's a variety of other new source editors that some people use.
00:02:32 ◼ ► Some people use VS Code, there's a thing called Cursor, which is kind of more an AI tool for a lot of this stuff.
00:02:36 ◼ ► For me, Xcode is what it is. I use it, it's great, to the degree it is. Xcode previews are an indispensable part of my workflow now.
00:02:45 ◼ ► Even when I'm doing UI kit work, I'm always wrapping it up in the Swift UI view so that I can use Xcode previews.
00:02:59 ◼ ► but ultimately it's a tool that I know really well and is something that I find slowly gets better,
00:03:12 ◼ ► So you end up eventually, over time, moving forward, but it is certainly not without its problems as a result.
00:03:18 ◼ ► Yeah, it seems like every couple of years there's a new IDE or a new stack that you can use to make iOS apps instead of using Xcode.
00:03:32 ◼ ► I like using the first-party IDE with the first-party language and the first-party frameworks and all the first-party tools.
00:03:39 ◼ ► I like all the integrations. A lot of the stuff, you can use certain command-line tools and Xcode build and the command-line and stuff like that
00:03:59 ◼ ► My needs are not so advanced that I need anything that can't be done there, and so I do as much as possible in Xcode, with a few exceptions.
00:04:08 ◼ ► I do not use Xcode for source control. It does have built-in support for source control.
00:04:19 ◼ ► I don't use all of Xcode's features, but I do almost all of my actual programming in Xcode.
00:04:27 ◼ ► I think something that's really interesting about Xcode, I've noticed, and this mostly would come up at WWDC or situations like that
00:04:34 ◼ ► when you're with a bunch of other developers who are all working, have their code out or looking at code examples or things like that.
00:04:43 ◼ ► There are some areas, tabs, features, views even, of your code that I just never go into.
00:04:51 ◼ ► There's one that's... I don't even know what it's called, but there's a way you can view the code rather than by source file, but by entity type or by hierarchy.
00:04:59 ◼ ► There's things like this that I've never used. For me, my left panel is always just files on disk, and that's all I use there.
00:05:08 ◼ ► Some of the other companions and things and canvases, there's all these other features and things that you can get into. Never use it.
00:05:15 ◼ ► I find a version that works for me, and I've customized a bunch of keyboard shortcuts for things that work well for me.
00:05:23 ◼ ► Command-P in my Xcode doesn't print because I've never wanted once to print my source code.
00:05:29 ◼ ► Instead, it reloads the currently active preview, which is a thing that I do hundreds of times a day.
00:05:35 ◼ ► Things like that are just... I wouldn't be able to use someone else's Xcode nearly as productive as I am with my own.
00:05:42 ◼ ► Yeah, it's an incredibly deep app, and there's all these different panels and navigators and inspectors and different modes you can be in.
00:05:51 ◼ ► Not only do I not use most of those, I actually find a lot of the interface to get to those so confusing that I often need to do web searches to figure out,
00:06:07 ◼ ► There is so much functionality in Xcode that a lot of times the way you get to something is through some really obscure menu item,
00:06:17 ◼ ► or the way you close something or move something is some tiny little button somewhere in the interface that you would never have thought that's what that button did.
00:06:25 ◼ ► So, it's a very deep app, and I use probably 5% of it, but that still is all of my coding work.
00:06:33 ◼ ► And then for non-Apple platform coding, obviously I'm not going to be writing websites in Xcode.
00:06:46 ◼ ► So for all of my code writing for things like the PHP and Go backend code for my web servers, and pretty much any other code that is not writing stuff for Swift or Objective-C,
00:07:09 ◼ ► Yeah, it's a good app. There are all these new code editors now that have come out in the last, in the more recent 20 years.
00:07:19 ◼ ► Yeah, right. So there's all sorts of code editors now that everyone uses, and they all sound really good.
00:07:24 ◼ ► I've seen some of them here and there, and if TextMate finally stopped working, I would have no problem finding other good text editors out there.
00:07:34 ◼ ► A lot of people, I know people love VS code, people love, I mean, god, we miss the whole generation of all the JavaScript-based ones.
00:07:42 ◼ ► There's all the, obviously, BB Edit from back in the day is still going and is still being developed actively, and people love BB Edit as well.
00:07:56 ◼ ► So I feel like in the industry we have this embarrassment of riches of great programming text editors now.
00:08:07 ◼ ► Well, and I think with TextMate, the thing that it strikes me as, and it just is a reminder of the power of plain text, maybe.
00:08:13 ◼ ► Like, in a sense that, you know, there are some parts of what we do where plain text is the right answer.
00:08:20 ◼ ► You know, and like treating it like plain text, that I don't need, you know, sometimes you want an IDE.
00:08:25 ◼ ► Like Xcode is doing a lot of work to make Swift development and Swift UI development in particular very productive and straightforward.
00:08:32 ◼ ► But often what I want is just a plain text editor, and what I enjoy about TextMate, in addition to the tremendous amount of muscle memory and experience that I have with it,
00:08:45 ◼ ► It just, you know, I can take my thoughts and put them into the code as quickly as possible.
00:08:54 ◼ ► And you know, when I tend, every now and then I'll have the itch, I'll be like, "Oh, maybe I should try the new, whatever the new hotness plain text editor is."
00:09:01 ◼ ► And usually I bounce off because it's trying to do something that's clever, and trying to, you know, tie you into a different way of structuring your files.
00:09:09 ◼ ► Or a different, you know, there's some aspect of it that isn't just a boring old folder with some plain text in it that I'm editing.
00:09:15 ◼ ► And, you know, for that purpose, TextMate has been, you know, I've been using it for 20 years.
00:09:20 ◼ ► It is the app that I bought my first Mac to be able to use because I was a Ruby on Rails developer.
00:09:38 ◼ ► And inevitably I end up using it too, you know, not just for the actual coding part itself,
00:09:43 ◼ ► but the number of times in a day that you just, like, right now, the list I'm reading for this episode of, like, ideas of, you know, tools that I use,
00:10:13 ◼ ► I think one of the things I would miss the most about it, honestly, is I have had that purple flower icon in my Mac dock.
00:10:41 ◼ ► This is part of why I feel like coding is still so much better done on a Mac or Windows PC instead of, say, an iPad.
00:10:51 ◼ ► Because iPad, the iPad app model, you know, you have Swift Playgrounds on the iPad that is like an all-in-one IDE that can make apps.
00:11:01 ◼ ► But I feel like the practice of software development almost always involves integrating the work of a whole bunch of apps together.
00:11:25 ◼ ► And, like, these are all things that, like, the large app model of iPad computing really doesn't deal well with.
00:11:35 ◼ ► And so when you see, like, what somebody uses for software development overall, it's this huge sprawling galaxy of all these different tools.
00:11:57 ◼ ► Solver is, again, I've been using this for, I bought it from one of those old Mac Zot software sales a thousand years ago.
00:12:08 ◼ ► And whenever they have any kind of paid update, I buy it every time because this app is so good.
00:12:17 ◼ ► It is like a little text editor-like window, but every row that you type, on the right side there's a pane that gives you the mathematical answer to whatever you typed.
00:13:06 ◼ ► And what I like about the recent versions of Solver, it takes a data model similar to Apple Notes,
00:13:13 ◼ ► where instead of there being individual, like, dot Solver documents like there used to be in the olden days,
00:13:18 ◼ ► now it's like one of those shoebox apps where they just have, like, a sidebar that syncs optionally via iCloud
00:13:28 ◼ ► So you can have, like, these persistent documents that are just everywhere on all your devices,
00:13:36 ◼ ► So you can kind of have these, like, persistent calculations that you easily, repeatably use.
00:13:41 ◼ ► It's just an incredibly useful app. So I have, like, my Solver sidebar has, like, a hundred of these.
00:14:09 ◼ ► And I feel like Solver is a place that I hold on to. It's like a notebook that I hold on to.
00:14:12 ◼ ► And it gives you this sense of history to calculations and references that you can go back to.
00:14:20 ◼ ► But the challenging thing with a calculator is, you know, you don't see the steps you took to get to the final result at the end.
00:14:39 ◼ ► or if I want to try a different approach to something, I can just sort of, you know, copy paste into a new document and try again and change it and keep the old document there.
00:14:59 ◼ ► Like the number of times I'm just in there playing around with, you know, the magic numbers you end up inevitably using in a design or a layout or trying to work something out, you know, how much padding you should have and what formula you should use to calculate your padding.
00:15:20 ◼ ► You're trying to sense, get a sense of, well, you know, if this was my, you know, my trial rate and this was my trial conversion rate,
00:15:31 ◼ ► Like you can do a lot of those calculations in a very friendly way that has a lot of history.
00:15:38 ◼ ► And it's sort of like, there is like Solver, it's like the three things in the leftmost part of my doc.
00:15:46 ◼ ► And it's like when I come in in the morning, I'm just going to launch those three apps, essentially.
00:16:08 ◼ ► Network calls, battery life, connectivity, OS version, and maybe, you know, their attempt to open your app with 1% battery, spotty Wi-Fi, and six background apps running.
00:16:21 ◼ ► Session Replay gives you a visual play-by-play of your logs and breadcrumbs so you can see the issue as it happened with Sentry.
00:16:40 ◼ ► They're built-in controls, automatically redact sensitive data so you can focus on the bugs, not people's personal info that you don't want.
00:16:51 ◼ ► You just update the SDK, tweak a few settings, and voila, mobile replays start showing up in your issues stream.
00:17:19 ◼ ► So another coding tool that I find myself using very often, and this is coding in kind of a slightly tangential way,
00:17:25 ◼ ► but it's an app called Base, which is a SQLite Mac editor, client, viewer, I don't know what you call it.
00:17:36 ◼ ► Because increasingly in the way that I build my apps, I'm using a lot of SQLite as the backend.
00:17:43 ◼ ► I've moved in a lot of my apps to these kind of model where I even have multiple SQLite databases inside of the app
00:17:49 ◼ ► that are using, rather than having this big monolithic core data thing, which I used to do,
00:17:53 ◼ ► now I'm getting up in a place where I have these sort of individual isolated SQLite databases that lets me do a lot of things.
00:18:03 ◼ ► But one of the consequences of that kind of work is that you need a way to very easily open up and look at and inspect SQLite databases.
00:18:11 ◼ ► I've tried a bunch of tools. For me, Base is the one that works really well and kind of lets me just use,
00:18:18 ◼ ► I can use SQLite inside of my development workflow and be able to evaluate, make sure the right data is getting in,
00:18:25 ◼ ► look at the schema, making sure what the schema I'm creating in the app is the schema I expect to create,
00:18:29 ◼ ► all of those kinds of things. So for me, SQLite is now an essential part of my workflow
00:18:34 ◼ ► and Base is the best way that I've found to be able to interact with it during my coding sessions.
00:18:39 ◼ ► Hm, this is really, I'm looking at this now, I had not heard of this, but it looks really nice.
00:18:43 ◼ ► I've never used a database app, I've always just used the command line tools of that database,
00:19:07 ◼ ► Like you could get around this, you absolutely just open the database at the command line.
00:19:16 ◼ ► or you'll catch different problems if you see something displayed visually rather than in code,
00:19:20 ◼ ► which is, you know, if the context switching of that is sometimes a useful tool as well.
00:19:25 ◼ ► So how about our design work? And this is probably going to be the last category we have time for this episode,
00:19:32 ◼ ► because our podcast is not long. Design work, you know, I think it's interesting that you and I,
00:19:38 ◼ ► as we've discussed previously, are not designers really. We're certainly not graphic designers.
00:19:45 ◼ ► And so I think our design tools are going to be very different than what you typically might hear about
00:20:06 ◼ ► But also, you know, ever since I've been switching over to Swift UI, and I did my whole V-Wright in Swift UI,
00:20:17 ◼ ► You know, I used to, as previously discussed, use an app called Paint Code, which I still do use sometimes.
00:20:27 ◼ ► You can use something like Adobe Illustrator, or there's other vector graphics illustration tools,
00:20:32 ◼ ► but Paint Code is, its original gimmick was it would allow you to export whatever you drew as code.
00:20:44 ◼ ► And it has since grown well beyond that into lots of other features, and of course you can export like
00:20:56 ◼ ► I do, however, like Paint Code is my vector image editor of choice, because that's the one that I, you know,
00:21:07 ◼ ► And I just export it into, you know, SVGs or PDFs so I can import those into Xcode easily with vector scaling.
00:21:14 ◼ ► But, you know, so anytime I'm working like with app icons, in-app icons, the app icon itself,
00:21:39 ◼ ► I'm really only using it for like the app icon itself. And almost nothing in Overcast is actually being drawn by hand anymore.
00:21:48 ◼ ► Yeah, I think I'm in a very similar place. Like my design tool is essentially whatever the designer I'm working with is using.
00:21:58 ◼ ► Which there are two designers I work with, yeah, like there are two designers I work with right now and they both use Sketch.
00:22:02 ◼ ► So Sketch is my design tool. And by that I mean it's the thing that I open up when they send me something and then export graphics from.
00:22:08 ◼ ► I don't know how to do anything in there particularly, like sometimes other than, like I can, I mean I know Sketch enough to, when, you know, if a designer gives me something,
00:22:17 ◼ ► sometimes there's the edit that you want to go back and forth with them on and sometimes you're just like, huh, I wonder if I just tweak this color.
00:22:24 ◼ ► And so I know how to use Sketch enough to like play with the color sliders or shift things around slightly.
00:22:29 ◼ ► But it's not a design tool for me. And ultimately, like I used previously, my designers would use Photoshop.
00:22:35 ◼ ► And so I used Photoshop whenever they needed me something. Like I'm sure if at some point my designer was a Figma person, then I would become a Figma person or whatever the new thing is.
00:22:44 ◼ ► But for me so far, it's like right now it's Sketch is where I get things out and will export assets from.
00:22:50 ◼ ► But yes, I'm very much similar to you. Use SF Symbols for a lot of things that previously you would have to do in a custom designed scenario and that does a great job.
00:23:01 ◼ ► And related to that is probably worth mentioning, there's a tool, one of these very single purpose tools called Custom Symbols, which is a tool whose sole purpose in life is to take an SVG glyph and turn it into an SF Symbol format so that you can use a custom symbol inside your app.
00:23:20 ◼ ► It's indispensable this summer because the control center widgets can only work with SF Symbol based images. And so I use that all the time because there's a way to do it in Sketch or any of these other tools like to generate that file that you need to import into Xcode yourself.
00:23:39 ◼ ► All this tool does is take one thing, turn it into another, and you can adjust some of the metrics of it. And so that was one of those tools that I was struggling for a few days and trying to do it my own way, found the app, immediately bought it, and it has been paid for itself in terms of time savings time and time again.
00:23:56 ◼ ► SF Symbols are now the way that I do development. And as soon as you do any amount of dynamic type work or issues with other parts of the modern Swift UI, some sort of semantic UI things, you need to be symbol based.
00:24:12 ◼ ► And so having a tool to make your custom symbols or the Apple SF Symbols browser app are the two things that I find myself using time and time again for that purpose.
00:24:21 ◼ ► Oh, this is, yeah, so this is like, I gotta say, I knew that you could make custom symbols, but Apple's described process for doing it is pretty labor intensive and you have to have these special formats and these special files that you have to make with your professional image drawing app that I don't use.
00:24:40 ◼ ► And so I really admittedly have never done it because I just thought that just sounds like too much work and I'd rather just use what's there and figure it out. But this is, I will take a look at custom symbols too.
00:24:53 ◼ ► This is actually something that I'm like, oh, actually, this could make that process easy enough that I might actually do it, which is always a pretty important threshold.
00:25:03 ◼ ► Sure. And I think it's the kind of thing where I think what I, the reason I was excited when I ran into this tool was it is the kind of thing where I found with SF Symbols are so great, but there and there's whatever the like thousands of them, tens of thousands of them now.
00:25:17 ◼ ► But if there isn't a symbol for the exact thing that you're really needed for in the app, the awkward thing is that I find myself finding like, well, what if instead of it being, you know, the thing that it should be, I just use this thing that's kind of related to that.
00:25:31 ◼ ► And you end up with slightly more confusing interface than you would ideally have versus it just having the actual symbol of something that you really want as a result.
00:25:40 ◼ ► And so that was my, the kind of thing where I started off to just make do with whatever Apple has. Or sometimes I've also ran into similar things where Apple adds a new SF Symbol, which is great, but they don't backport it back to older versions.
00:25:52 ◼ ► And so I need to have my own custom symbol that is a similar thing to something that they may even provide otherwise. So it's a great tool for that.
00:25:59 ◼ ► With the whole rewrite I've been doing and working on since, I've leaned so heavily into SF Symbols. And I strongly recommend anyone out there, like do it.
00:26:08 ◼ ► Have, use the SF Symbol library for as much as you can, use the mechanisms that they offer as much as you can, even, apparently even when doing your own symbol, now you can do that with stuff like custom symbols.
00:26:20 ◼ ► Lean into it as much as you can. It is like, when you are kind of non-designer programmers like us, SF Symbols can make your app look amazing. We did a whole episode on it.
00:26:32 ◼ ► We strongly recommend use SF Symbols. But yeah, you're right, I have been very guilty myself of like, well they don't have the one I actually really need, but I'll just kind of wedge this other one in there that it is not ideal.
00:26:51 ◼ ► Yeah, I think the other tool that I use fairly regularly is an app called Pastel, which is made by the developer Steve Tronton Smith. And it is a tool for managing colors.
00:27:01 ◼ ► The thing that I use it most often for is just kind of, I'm coming up with, this is very often in Widgetsmith, I'm coming up with a color scheme. And it's a way of kind of collecting a palette of colors, and then it's got all the developer tools you need to export those as a Swift UI color, as a Swift UI color, as an Objective-C UI color, which is actually the thing that I used earlier this week, which I was a bit surprised that I needed still, but it's all in there.
00:27:27 ◼ ► And it's just a very useful tool for just managing colors and thinking about them. I find color selection to be something very daunting to me, something that's very challenging, but it's a tool to make that process a little bit less scary, that you can go in there and, if you have a dropper tool, so that if you see a color in some other place on a website somewhere that you're like, "Oh, I like that color," you can use the dropper tool, grab it, and then you add it to a collection that you can then later use.
00:27:55 ◼ ► And so it's just a very indispensable tool. Anything I do with color, it's usually going to go into pastel, and then once I've kind of settled down on exactly what the colors are, it'll then come out and actually go into code.
00:28:07 ◼ ► And so it allows me also to do things like, I can get the color as an RGB and then take it into hue, saturation, and brightness, and change the saturation of it without having to do the math or go to a website, which is inevitably what I was doing before, where I'm going to the weird...
00:28:21 ◼ ► You just search for RGB to HSL converter, and then you're just going to some random website and doing it. It's much better to just do it in a proper tool that's doing it in a dependable way, and I also love just supporting another indie developer as well.
00:28:37 ◼ ► I think that's it for this episode. We got through two categories, coding and design tools. So in future episodes, we'll go through many others that we have. And thank you. I love when you see how someone else works, you always pick up something you didn't know that can help you in your work.
00:29:00 ◼ ► Yeah, absolutely. I think that's why I thought it would be a good topic to share because I enjoy learning about tools because tools ultimately make us be slightly more productive. The reason we use these things is because they're able to allow us to better create the things we want to bake.