On My First Software Release
I wrote some of this in a recent social media post, so if you follow me in lots of places, the first part may sound familiar.
The Good
Yesterday, I officially released my life counter app for Magic: the Gathering called One Is Not None. Within minutes of it going live, someone downloaded it and paid to upgrade to Premium. It's a surreal feeling; I am profoundly humbled that someone would be willing to pay for software that I wrote.
I've been a software developer professionally for some time, but this is different. I'm proud of what I build at my day job, but in the same way that a proofreader might be proud of the work they did on the eighth chapter of a book. It's cool to be part of it, but that's all it ever is.
With One Is Not None, I am the developer, the designer, the marketer, and the product manager (to list a few of the roles). From the bottom to the top, this app is me. It's my aesthetic. It's my features. It's my bugs. You can bet that I got a lot of help and support, but at the end of the day, the only person who really pushed this app across the finish line was me.
And then someone went and paid me for that work. Granted, after Apple and Uncle Sam take their cuts, I'm walking away with about two bucks per sale, but I am prouder to have earned these two bucks than any other sum I've ever earned. Someone decided that what I built was functional enough or beautiful enough or cool enough to warrant their hard-earned money, and I don't think it's possible for me to overstate how thankful I am for that.
To anyone who checks out the app, and even more so to anyone who purchases Premium, thank you. This is the first step in a long journey and you're all making it possible for me to continue moving forward.
The Bad
Alas, if that were the entire story of my first app release then things would be wonderful. However I faced some challenges on day one, some of my own making, some not. As soon as the app went live, I got a report that someone couldn't increment or decrement any life counter by single points. Tapping and holding worked, but not normal taps. I thought it might have been a fluke until I got my second report. I dug around and discovered that Apple changed how some gesture APIs worked in iOS 18.4 which fundamentally broke my app.
How did this happen? It turns out that the day I submitted One Is Not None to Apple was the same day iOS 18.4 was released. So when I tested everything before submitting the build, everything was working fine because I didn't have 18.4 on my device yet. However, realistically, this is my fault, because I've had access to the iOS 18.4 beta for a while and I could have been testing on that version. This is definitely a lesson I'll be carrying with me moving forward.
Regardless, a bad version of my app was out in the wild on day one, so I scrambled to come up with a fix. The fix was actually relatively easy to implement so I was ready to go. However…
The Ugly
… I was locked out of my Apple Developer Account and therefore could not access App Store Connect to submit my bug fix. Sometime in the previous week, I tried signing in to my account and the sign-in page told me to recheck my credentials. Given my credentials are (and have always been) in 1Password, I thought it unlikely that was the issue.
After some noodling around, I finally got an error saying that my account was locked, and that I could request for someone to review my account and unlock it.
"Great," I thought, "let's get this sorted. It must have been some kind of fluke because this is my first app on the App Store."
After about a day, Apple denied my request. Their reasoning? They didn't give one. Their timing? Right after Apple Developer Support was closed for the week, with my app launching first thing on Monday. I called consumer Apple Support immediately, and I also called Apple Developer Support first thing Monday morning, and both told me that they couldn't even see why my account had been locked.
Back to the Good
After chatting with Apple Developer Support, who escalated my case, and talking to a friend who has connections at Apple, some unnamed hero somewhere unlocked my account. I raced to push my bug fix and, as of this morning, that bug fix is live. I still haven't received any communication from Apple as to what happened, and I likely never will. But my fix is live for my customers and that's what matters.
Back to the Ugly
I have been hearing from the community that I'm not the only one to experience this. Recently, lots of people have been inexplicably locked out of their developer accounts. Apple doesn't ever seem to give a reason, and I'm not sure how many of these recent cases have had their accounts unlocked. However, it's a bit horrifying to know that access to my livelihood could be revoked so quickly and easily that it appears to be able to happen accidentally.
In this instance, I'm fortunate that all I have on the App Store is a dinky little app (which I'm super proud of, but nevertheless dinky in the grand scheme of things). I don't have the majority of my income coming from the App Store nor is my app responsible for life-or-death scenarios. Those people and those apps do exist, though, and the fact that we are insignificant enough to Apple that they can disrupt our businesses and our lives and not give us so much as a "my bad" should give us all pause.
Closing Thoughts
Despite these challenges, I'm not discouraged. The joy I've found from bringing something cool into the world and sharing it with others is unparalleled by any other work I've ever done. It far outweighs whatever uncertainties Apple introduced into the process.
That said, I think it would be wise for all of us to reconsider the relationship we have with Apple (if we haven't already). Long are the days where Apple views its relationship with third-party developers as symbiotic. We are but granted the privilege of building apps for their platform. That being the case, I'm going to continue building apps because it's what I enjoy doing, but I will always keep in mind my answer to the question:
"What will I do if all of this disappears tomorrow?"
One Is Not None Preorder Is Live!
The title says it all. After a six week beta period where over a thousand games of Magic: the Gathering have been played using One Is Not None, preorders for the official launch are live! The app will release Monday, April 7, 2025. The beta process saw way too many changes to list, but here are some notable improvements that were made thanks to all the amazing the feedback:
- Commander damage now syncs with life totals (can be disabled)
- Secondary counters like commander tax and poison appear on the main life counter screen so the information is visible at all times
- Players are automatically knocked out upon reaching 0 life, 10 poison, or 21 commander damage (can be disabled)
- New customization options around app behaviors like the speed of the random player chooser and the color of the center icon
- 20+ bugs identified and fixed
It's been an incredibly productive beta period, and while I'm nowhere near done with the app, I finally feel ready to share it with the world at large.
I would also like to take a moment to thank some folks. This is my very first independently developed app and I couldn't have done it without so much love and support from lots of folks. First and foremost is my wife. Without her support, guidance, and occasional bit project management, this app would never have seen the light of day. However, I never would have even started if I hadn't been inspired by my newborn son. Watching him learn and grow made me want to broaden my horizons which finally gave me the push I needed to build and release my own app.
That said, the process of building something from nothing has at times been challenging, so I wanted to give special thanks to folks who supported the app in various ways.
- Benji Debnam, who graciously donated time and design expertise to help me achieve the final polish of the app's initial version.
- Matthew Skiles who nailed the app icon's design on the very first try and went above and beyond to make it customizable.
- My buddy Chris, who doesn't build iOS apps or play Magic but was always there to listen to me talk.
- My friends Sean, Jim who test drove the app with me and gave me great feedback.
- All of my beta testers. It's because of you all that I've been able to make the app what it is, and I'll be continuing to rely on you as I add new features to the app.
To all of the folks listed here, and certainly some that I forgot, thank you. You've helped make one of my dreams come true.
One Is Not None: Beta Updates and Gratitude
After launching One Is Not None into a public beta, I've had hundreds of folks sign up to be beta testers. Many of you have already sent tons of feedback and I'm so ecstatic that there are people with an appetite for a new app on the scene. Thank you to everyone who has expressed interest and support, and thank you especially to my beta testers who are helping me make this app as good as it can be.
tl;dr: To everyone who’s tried out the app, and especially those who have submitted feedback, thank you! I’ve shipped some highly requested features like commander damage → life total syncing, and fixed a bunch of bugs. This release I had to make a fundamental change to the database so you might see a crash on launch, but this is a one-time thing. Delete and redownload the app and you’re good to go.
Thank You!
The response to my announcement last week has been incredible. After launching One Is Not None into a public beta, I've had hundreds of folks sign up to be beta testers. Many of you have already sent tons of feedback and I'm so ecstatic that there are people with an appetite for a new app on the scene. Thank you to everyone who has expressed interest and support, and thank you especially to my beta testers who are helping me make this app as good as it can be.
Also, if you wanted to follow along with news and developments, I’ll always be posting on this blog, but you can now also follow me on BlueSky @thehonkingsmith.com as well as on Mastodon @thehonkingsmith.
This past weekend, I released the first update to One Is Not None and there's a ton to check out if you’ve got the beta:
New Features
The new secondary counters shown on the main screen.
Commander damage now syncs with life totals (highly requested!) You can turn this off by tapping on the gear icon then Customize on the top left.
Secondary counters like commander tax, poison, and energy now appear on the main life counter views. Currently I'm using text labels for them but I'm looking into using icons for the labels instead to make it cleaner and more compact.
You can now reorder players by tapping on the "Change Order" button at the top of the player configuration section.
The first player chooser animation now has three different modes. "Speedy" is the new default and is, well, speedier than the animation before. For those that liked the suspense, the previous animation continues to exist as a "Suspenseful" option, while "None" is the option that eliminates the animation altogether. You can change this setting in the Customize menu.
There's a new option for the gear icon to be a neutral gray instead of color-matching the life counters. You can find this option in the Customize menu.
Bug Fixes
iPad users should now be able to use the "Reset Game" and "Clear All Settings" buttons. They previously didn't do anything.
Some users had difficulty consistently hitting the secondary counter button on the main view (the little black circle button with the sliders). I've increased the size of the tap target slightly to help with this issue, but let me know if it's still a pain point.
When using partner commanders, the app will now correctly show two separate commander tax trackers. Currently they're not differentiated in label or anything, but I'm thinking about how to improve that.
Heads Up
One thing I think is important to call out is because I messed up a bit early on in the development process, I had to fix something I was doing incorrectly with the database. This means that, this one time only, you might see a crash on startup, and your configuration options will not be preserved after installing this version. If I've done my job right, this shouldn't ever happen again. If you do see a crash, delete and redownload the app from TestFlight and everything should go back to normal.
Thank you again to everyone who has expressed interest in the app! I'm working hard so that the app will see a public release as soon as possible. As always, feel free to drop me any feedback you have at feedback@thehonkingsmith.com.
Announcing: One Is Not None
I'm really excited to announce the app I've been working on. It's called One Is Not None and it's a life counter for tabletop Magic: the Gathering games. One Is Not None aims to be the best app of it’s kind. Let me know what you think!
I'm really excited to announce the app I've been working on. It's called One Is Not None and it's a life counter for tabletop Magic: the Gathering games.
The standard four-player layout for a game of Commander.
Why a life counter app?
There are other apps like it out there, but for one reason or another, I've found them lacking. I set out to build an app fulfilling the following:
- Extremely reliable user experience, from user input to data persistence and everything in between.
- Beautiful and minimal aesthetics with animations that help build a mental model for how the app works.
- Comprehensive feature set to be able to track anything that might happen in a game of Magic: the Gathering.
I won't claim to have nailed every endeavor perfectly, but I am filling a void that I believe exists in the life counter app landscape.
What sets this app apart from others like it?
The Look
Some apps have a very rich feature set, but they are an eyesore on the table. When so many people love to bling out their decks and have beautiful playmats, these awkward looking apps ruin the vibe of the table. One Is Not None has a minimal aesthetic with beautiful animations that set it apart from the rest of the pack.
Additionally, the app ships with a gorgeous icon in a slew of customizable colors by the wonderful & talented Matthew Skiles. The icon fully supports iOS 18's tinted icon mode, so it'll match the color of your device if you have that setting enabled. Here's the default icon, as well as a small sample of the alternative colors you can choose!
Reliability
Other apps have a beautiful aesthetic but unreliable user interaction. They'll have swipe gestures and taps mapped to the same area of the screen, so unless you tap on the screen perfectly without moving your finger side-to-side at all, your tap will be rejected because the app will think it registered an unsuccessful swipe. These swipe gestures also make features undiscoverable making it hard for players using the app for the first time to grasp how it works. There are no hidden features in One Is Not None, and all user inputs are stable and reliable.
Feature Set
Finally you have the apps that have a decent aesthetic and reliable user interaction, but they're almost always missing features. Some of them can't track more than one "secondary" thing at a time, like poison or energy. Other times they have no concept of commander damage which, much to Ben Brode's dismay, is an important part of the game. While Magic players are no strangers to tracking ad hoc numbers with dice or pen & paper (even I do it sometimes), it can be helpful to have a tool on your table that has the built-in ability to track all these things. One Is Not None delivers the ability to track every aspect of Magic, from poison to partner commander damage to monarchy. Even the brand new speed mechanic from Aetherdrift is being added to the beta as this post is published.
Who is this app for?
Magic has many formats, and while One Is Not None can work well for any format, it's focused on providing the best experience for Commander players since that's the format I play most often.
Is it out yet?
The app is currently in beta testing! I've opened up 50 spots for the most eager of you to join and test it out. If there is enough interest, I may open more spots. If you've never beta tested an iOS app before, you'll be prompted to download Testflight which is the official beta distribution mechanism from Apple.
To join the beta, follow this link! https://testflight.apple.com/join/bRxMengR
Conclusion
I'm so stoked to finally be announcing this app. I've just recently become a dad and this is something I've been working on in my free time between parenting and working. At the risk of sounding cliché, it's a little bit of a dream come true to release my own app into the App Store. I hope you enjoy it as much as I do, and please let me know what you think! You can always leave me feedback by emailing feedback@thehonkingsmith.com.