Weekly Indie Log #3

Weekly Indie Log #3

Dive into the third issue of my indie log as we celebrate milestones and tackle unexpected bugs in my habit tracking app.

We are already diving into the third issue of this weekly indie log! Time truly flies when you're trying to build an app business alongside your 9-5 job. I hope that I can keep this consistency, and I appreciate all of you for reading this and supporting me on my journey.

This Week's Win: I took a moment to step back and look at the bigger picture, and I was pleasantly surprised by a nice little statistic. Across all platforms, my apps have now accumulated over 1,000 ratings! Even more awesome is the average rating: a great 4.78 out of 5 stars. This is really huge for me, and it's moments like these that truly make the grind worth it. I'm incredibly grateful to every user who took a moment out of their day to leave a rating. Your feedback not only helps potential users make informed decisions but also provides me with invaluable feedback about my apps and the motivation to keep grinding.

HabitKit Restructuring

This week, I dove deeper into the restructuring of HabitKit. The big task: Migrating the database to Sqlite. The goal here is to give the users an offline-first experience, but still be able to sync everything up nicely with Supabase when you're back online.

Another thing I've been doing is testing the initial synchronization in my POC after a user (with a huge dataset) signed in for the first time. Given that it can handle thousands of entities (think a completion per day), it was crucial to stress-test this functionality. But, as usual, I stumbled upon a bug. Every time I logged into my Supabase account, some of my database entities would clone themselves but with the wrong data.

Shoutout to the PowerSync team! I dropped a message in their Discord community and got a super helpful response from one of the devs. Turns out, these were old entities from my initial PowerSync setup that decided to stick around on the PowerSync end. Still scratching my head on how that happened. But, the fix was straightforward: just had to tweak the sync rules in the PowerSync dashboard.

Another thing that I didn't see coming: after making the switch from Isar to Sqlite, every time I try to run the app on my actual iPhone, the phone just... restarts. It's like my app has some mysterious power over my iPhone. I get zero error messages or exceptions. And to add to the mystery, everything works fine when I run the app on a simulator or use TestFlight. If anyone's come across something like this before or has any insights, I'm all ears. In the meantime, I'll be here, trying to crack this puzzle.

Xcode 15 and iOS 17

On another note, I've been trying to get some performance profiling done on an actual device. It's been a while since I set that up, especially after getting my new MacBook Pro and updating my iPhone 13 to iOS 17. Downloaded the relevant files but got stuck on some weird issues.

Image

Check out this issue if you're a Flutter developer and get the same error.

Fixing small issues

Ran into a quirky thing with Sqlite watchers. They didn’t behave quite like I thought they would. Initially, I was leaning towards setting up a caching service for my SQL watch queries to prevent them from firing off too often. But then, I remembered the rxdart package and its super handy distinct() function. Problem solved.

Also, discovered an annoying bug on iOS where selecting text or using the magnifier in a TextField would just shut the keyboard down! I think I fixed it now. A mix of flutter_keyboard_visibility and the IgnoreKeyboardDismiss widget did the trick!

What's next

After writing this, I realized how much work is to be done for the next HabitKit update and how little time I have. The release will definitely be delayed to October. Makes me really sad to admit this, but that's how it goes when you're working a "real" job alongside your app business...

Did you find this article valuable?

Support Building A Profitable App Business by becoming a sponsor. Any amount is appreciated!