Happy Monday, everyone!
We made it to Issue #66! Thank you to everyone who read last week’s issue ❤️
Today’s Spotlighted Indie Devs
📆 Today I’m featuring Geoff Hackworth.
I’m going to admit I copied 👆 from Geoff’s website. I wouldn’t have done Adaptivity justice explain it myself 😅 But I can say that Adaptivity is an absolutely amazing tool that is a must have for iOS and macOS developers. The Apple docs do a great job of explaining how sizing, margins, and everything behave across device but its so much easier to see it in action with Adaptivity. Adaptivity is full of lines, arrows, and labels showing the sizes of all the different areas of a screen. These are shown for standard view controllers, tab view controllers, table view controllers, and so much more. Geoff has though of almost everything including release multiple apps to the App Store so you can see all the measurements of split screened apps and slide over apps 🤯 Go download Adapativty today! You’ll for sure be amazed, like I am, of all the amazing work Geoff has put into understanding everything there is to sizing and views.
👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.
1) What is your name? Where do you live?
I’m Geoff Hackworth and I work from home in Nottingham, UK.
2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?
I now focus on iOS development but I’ve been developing software since before I was a teenager. I grew up in the golden age of home computing: VIC-20, Commodore 64/128 and Amiga (so far ahead of its time!) The day my father came home with a VIC-20 all those years ago planted the seed that would come to dominate my life. Fortunately, he was just as enthusiastic about it as I was and would buy lots of books and software. They were happy, care-free, pre-internet times!
I have what many would consider a traditional developer’s education: I did well at maths/science at school and studied Computer Science at Manchester University in 1989-91. The learning never stops; the more you know, the more you realise there is to know. I’ve had a few traditional but varied development jobs since graduating, ranging from low-level support software for a company which made Digital Signal Processor hardware to C++ application development for financial trading software.
Outside of development, I like to go to the gym, listen to a lot of podcasts (although a lot of them are development related to be fair!), and watch far too much TV.
3) Have you ever considered yourself an indie developer?
I like to think I am now, yes. It can be isolating and I really miss having interesting technical conversations with colleagues at the office, but it’s so liberating to be able to work on pretty much whatever I want, whenever I want. I sometimes do freelance work but recently I’ve been trying to support myself through my own apps. I just need to make it financially sustainable!
4) What got you started/interested in creating your own applications outside of your “normal” job?
I became a bit jaded with working for a big company as my career progressed. I seemed to spend more time in meetings than developing software. After we moved buildings, I also found it very difficult to concentrate in the open-plan office. I felt I was stuck in a rut, that my skills were declining from working on the same code base year after year, and I needed to make a change. In 2011, my good friend and colleague Simon introduced me to iOS development. It was just what I needed to revitalise my spirits. It reminded me of my teenage years, tinkering with my own ideas and getting so much enjoyment out of learning new things. I would spend evenings and weekends improving my iOS skills and made a few simple apps. I lasted another four years before taking the advantage of a generous voluntary redundancy package in 2015 and made the jump to focus on iOS development.
5) How do you balance your time between friends/family, work, hobbies, and indie dev?
I’m too old to be working in front of a computer all hours of the day; I find it counterproductive. My physical and mental health are very important to me and after experiencing a bit of burn out a few years ago and suffering occasional wrist pain, I now try and limit myself to about 4 hours a day. I’m at the gym five times a week and I try to get a 5km walk in every day at a nearby nature reserve to get some fresh air, see some wildlife and absorb some vitamin D from the daylight. I often solve development problems or have new ideas whilst on those walks.
6) Adaptivity - Adaptivity is such an essential app in my development toolbox. Visualizing sizes, margins, readable content, and safe areas is so important. So first of all… thank you for making Adaptivity 🙌 What is the history behind Adaptivity? Where did the idea come from and what were your initial goals?
Thank you, that’s great to hear. The first version was released in November 2015 with the core features: visualising the sizes of view controllers, margins and size classes. iOS devices had been coming in more varied sizes and iOS 9 introduced the readable content guide and iPad multitasking. Some metrics vary with Dynamic Type size and I wanted a way to really “see” the different layouts and behaviour on different devices, rather than just read numbers in a spec sheet or the Human Interface Guidelines.
7) Adaptivity - This app is just filled to the max with (what seems like) every possible type of window, view controller, and every customization that is possible 🤯 Like the table view controller show sizes when editing and with different accessories and different styles and insets. And that’s just the table view controller! How do you decide what views and what customization should be included? It seems like it could be easy to go overboard 🤷♂️
The features have grown over time and, honestly, some are more useful than others! I tried to avoid too much scope creep and focused on the basic “size of things” premise for a long time. iOS 13’s System Colors, System Images (SF Symbols) and System Materials felt like a natural progression. Multi-window support was a big challenge as that violates so many prior assumptions around the app lifecycle and access to shared data structures and settings. The Mac Catalyst version is deliberately customised as little as possible in order to show default behaviour. But even so, it was a lot more work than just ticking the box in Xcode!
8) Adaptivity - Your website shows amazing testimonials from Sean Allen, Gui Rambo, John Sundell, Paul Hudson, and Federico Viticci 🙌 I get goosebumps reading these reviews. What does it feel like when you get reviews this powerful? 😇 Even though you get outstanding reviews, do you still get pretty good feedback on what needs to be added or changed?
I’m always thrilled to see the app mentioned or a screenshot appear somewhere. Federico’s not a developer, obviously, but I love that the app helps him explore changes in iOS/iPadOS and he can include screenshots in his very comprehensive yearly reviews. John launched Indie Support Weeks during the COVID-19 pandemic to help indie developers get some exposure. Adaptivity was lucky enough to get mentions by Sean, Gui and Paul. That led to a nice bump in sales and was very much appreciated. Sean has mentioned the app, or one of my articles showing screenshots, in a few of his videos. That always brings a big smile to my face and a few more downloads. The app doesn’t get many reviews or ratings unfortunately, but has a 4.97 average, which is wonderful. However, every refund I see in App Store Connect hurts just a little!
9) Adaptivity - How to handle making things work across all devices and OS versions? Do you have physical devices for everything or use the simulators? Is maintaining and debugging a nightmare? I’m getting stressed thinking about this 😛 What has been the hardest device or OS to adapt Adaptivity to?
I’ve accumulated a range of test devices over the years but not as many as I would like (I’ve never had a plus size iPhone, for example). I tend to buy one new device each year and rotate between iPhone, iPad, Watch and sometimes, a new Mac. A 2019 Mac mini is my main development machine and most app development is done in the simulators. Using standard components and trying to follow Apple’s recommendations (auto layout etc.) helps keep things working over multiple iOS versions. There are no hard-coded measurements in the app - I measure view frames or read margin insets in viewDidLayoutSubviews to determine how big the various margins are and report what I find in the size labels. Similarly, the RGB values for System Colors are determined programmatically at run time so that the app shows how they appear in different configurations (light/dark appearance, increased contrast or at elevated interface levels like non-full-screen modal presentations or iPad multitasking).
The iPhone X and the introduction of the Safe Area was a bit tricky and led to a custom Safe Area view to easily visualise it. To this day, the label showing the height of the navigation bar can be obscured by the notch on some devices (just take a screenshot or use the share button to reveal it). Each iOS version seems to bring some appearance change that I have to deal with. This year it was transparent bars when content is not scrolled underneath them. Adaptivity needs to show where bars start and end, so I force an opaque appearance where I need to, and do likewise everywhere else for consistency. It’s not showing standard behaviour in that regard, but I think it’s the right choice for the app.
10) Adaptivity - I can’t imagine all of the weird situations that you’ve run into when experimenting with all the view types on all the devices. Have you come across any memorable bugs? Are there any fun things you learned along the way that you didn’t expect?
Layout margins have behaved a little strange over the years. The old style Today widget would report mismatched leading/trailing margins on some iOS versions. There’s more than a few dispatch_async() calls to delay measuring things to ensure layout has completed and layoutMarginsGuide reports correct values. I rarely touch the core measuring and layout code in case I break something, but I had to make some changes to handle the reduced height of the new iOS 15 sheet presentation with a medium detent. The layout of the primary view controller in iPadOS 14’s double and triple column style split view controller was a surprise, but makes total sense once you understand why. Pro tip: always layout using the layout margins, not fixed constants from the view’s edges!
There’s currently a pretty nasty visual glitch on iPhones with a Home Indicator when slowly expanding or contracting the new sheet presentation between medium and large detents. The toolbar seems to alternate in height between two sizes as you drag. The appearance is made worse by the fact that I use the toolbar height to decide the horizontal position some of the vertical arrows (to try and visually “balance” things). It’s hard to explain in words, but basically stuff jiggles around as you scroll and it looks awful! It works fine on iPhones without a notch, when the presented view is not full width, and when expanding/contracting non-interactively. I don’t think I’m doing anything wrong in my code. Using container view controllers might complicate things, but I blame iOS for this one 😂
11) Adaptivity - I was totally confused the first time I searched Adaptivity in the App Store and saw the A, B, and C versions 🤦♂️ But after I read the descriptions I was blown away. I think its so cool you made these separate versions to view what an iPhone app looks like on an iPad and to look at how split view and slide over view. This is not a question but instead is an appreciation for all you’ve done. Please take this 🏆 for thinking of everything!
You’re absolutely right, having three versions is confusing. Four, if you count the Mac Catalyst version (but that’s a universal purchase with Adaptivity A). At least you read the descriptions; I’m sure many people don’t! When first released, having two versions (A and B) was the only way to show the app in both sides of iPad multitasking simultaneously (or in Slide Over). The B version is free and doesn’t support some views or other app targets: widgets, Watch app, Notification Content Extension, iMessage extension and Siri intent. I was also hoping it might also be a way for developers to try the app for free before upgrading to the full version. Please Apple, let us do free trials. Support for multiple windows since iPadOS 13 technically makes the B version unnecessary, but I’m kind of stuck with my naming convention now! The C version is basically the same as B but, as you say, only supports iPhone so you can see how iPhone only apps behave on iPad (which has changed over different iOS versions).
12) Adaptivity - What’s next for Adaptivity?! Do you have any future plans that you can share with us?
I’m still improving Adaptivity. To some extent, it serves as a playground for me to explore new iOS features. The System Images (SF Symbols) browser has grown to be the largest and most complex part of the app - it could easily exist as a separate app (and maybe should have been). It takes so much time to keep track of all the different symbols, categories, renames, supported render modes and localisations across iOS versions. Adaptivity is unique among browser apps in that it lets you switch between the four different SF Symbol data sets (as long as you’re running on an iOS version that supports them, of course). It will show older symbol names when viewing data sets where symbols have since been renamed. There’s a lot of manually-curated data behind the scenes driving this functionality. I recently added support for showing language and right-to-left localised variants too. It even has a data set to view the free social media SF Symbols that Icons8 recently released.
There’s already a Favorites collection to which you can add symbols (which, again, will only show symbols that exist in the data set you are viewing, and with the names that are appropriate for that iOS version). I’m currently working on arbitrary user-defined collections. Keeping them consistent across multiple windows is challenging enough, I daren’t even try to implement sync across devices (sorry!)
I’m somewhat ashamed to say I’ve done no testing on macOS 12, so I’m going to have to really hustle to update my Mac once it’s released, so that I can finally test and release the Mac Catalyst version of Adaptivity with all the iOS 15 features.
13) What’s been the hardest part of being an indie dev? What’s the most fun part of being an indie dev?
Honestly, the hardest part is the money, both in terms of quantity and variability. I walked away from a well-paying corporate tech job to focus on my passion for app development. Trading financial stability for freedom and autonomy was risky. I’ve not got the balance right yet, but I’m working on it. I really don’t want to go back to an office job. Please buy my apps!
14) Is there anything else you’d like to tell the indie dev community about you?
In the indie dev community, as much as people know who I am at all, it’s for Adaptivity. But I have quite a few apps. Other than Adaptivity, the only two that could be considered even remotely successful are my Pomodoro timer Pommie and an app for keeping your Medical ID Record. Another developer tool I find very useful is my Mac menu bar app XcLauncher, which provides bookmarks for quick access to your Xcode projects. I have written a bunch of articles on Medium and twitter threads over the years, highlighting changes in behaviour/appearance of various iOS versions and devices, or how new device sizes sometimes scale or letterbox apps that have not been built with the latest Xcode version. Adaptivity is invaluable for investigating those sorts of things.
15) Do you have any other indie devs that readers should follow / lookout for?
I follow a lot of other developers and try to keep up with tweets, blog posts and videos. It’s such a wonderful community. Rather than list some well-known usual suspects, I want to mention a few names that are perhaps lesser-known. Filip Němeček has some interesting articles on his blog and he has recently introduced the wonderful Indie Apps Catalog, highlighting apps by indies. Karin Prater has videos covering a wide range of topics. I enjoy Stewart Lynch’s YouTube videos (and he’s older than me, which is nicely reassuring that my career is not over yet!) Adam (not sure of his surname) does some amazing things with SwiftUI on his CodeSlicing channel and has a package of Swift UI extensions to make it easier to work with. His video on Xcode’s Multiple Cursors is fantastic.
Newly Released and Updated Indie Apps
Here are some newly released and newly updated apps from this past week! If you would like to possibly see your app in this list, please submit your app to the look at me form 👀
Thank you to everybody who made it to this footer! You either spent the time to read or took the effort to scroll 😊
Make sure to visit https://indiedevmonday.com/subscribe to get an email of future issues!
And go to Twitter and give @IndieDevMonday a follow… or multiple follows if you manage more than one Twitter account 😜