I even set a deadline for myself, but I’m not ready to share it with you yet. 😅 Either way, the long weekend in Poland we start today might give me a bit of a head start, or at least I hope so. 🤞
Posts by Aleksander Stojanowski
I plan to leave basically only the data model, as I want users to be able to upgrade to the new version seamlessly, but everything else I plan to get rid of and start from scratch.
I’ve learned so much during all this time, and the more I want to change, the more I see I have issues in the foundation of the app, so either way I need to change a lot even for some basic functionality. 🫤
However… Struggling with App Intents, I made a tough decision regarding Spark’s future. Instead of slowly progressing as I did over the last half a year or so, I’ll make a hard cutoff and start developing version 2.0. 😳
Much later than I wanted to, but a new version of Spark is available to download! 🥳 It’s also a much smaller update than I thought it’d be, but at least now Spark has a new #LiquidGlass icon. 🤩
#BuildInPublic #iOSDev #IndieDev #IndieHacker
That’s nice, but can we get contact photos on iPad back maybe? 🤔
It’s not much, but it’s honest work. 😊
#BuildInPublic #IndieHacker #iOSDev #IndieDev
As for the progress in general, I had yet another exhausting week and I haven’t made much progress. I even took a 2-day break from working on Spark completely! 😱 However, I managed to create intents to work with habit groups and extended entities, so I can use them with my view.
I avoided watching Apple’s materials on AppIntents for now and mostly read documentation and example projects, but maybe it’s high time to make use of them. 😁
Running them directly from code by instantiating them and calling perform makes them run in an environment where all their dependencies aren’t initialized. At least that’s what I understand from chatting with AI. However, I admit I haven’t double-checked yet. 😅
This time I asked AI what’s going on, and its explanation seems reasonable. In a nutshell, intents for their dependency injection to work properly need to be run in a proper environment. Be it via Button with intent as a param, or from the Shortcuts app.
So… I’ve just learned that most of my adoration for #AppIntents was premature. 😆 I discovered why they didn’t work from actionable notifications, by having the same issue when I tried to use them in .onMove. 😬
#BuildInPublic #IndieHacker #iOSDev #IndieDev
Well, this time I mostly changes the internals, user doesn’t see any changes, or rather shouldn’t. 😅 That’s what I want to test the most, that all my App Intents that now drive the app logic make it work as before.
As usual, if you’d like to help me with testing Spark, just DM me and I’ll send you an invite. 😊
#BuildInPublic #IndieHacker #iOSDev #IndieDev
During the week, I also attempted to change a bit some animations in the app, but I failed, so for now there is nothing new the user can actually see by using the app. At least I hope so, there won’t be a bunch of crashes from running intents. 😆
The only problem I have is using App Intent from an actionable notification. For some reason, dependency injection doesn’t work when the intent is performing in a delegate handler. I work around it for now, by passing them manually to the intent instance, but it feels wrong. 😑
It looks like two weeks in a row I’m coming back to you with an update. 😅 Again, #TestFlight one, but I’m now much closer to a full update! Today I finished introducing #AppIntents to @letspark.it They aren’t available from Shortcuts or Siri, but they helped me clean up code.
As usual, if you‘d like to help make @letspark.it better, or just use the best #HabitTracker there is (😝) for free, just send me a DM and I’ll send you an #TestFlight invite. 😉
As usual, if you‘d like to help make @letspark.it better, or just use the best #HabitTracker there is (😝) for free, just send me a DM and I’ll send you an #TestFlight invite. 😉
Frankly, the next few weeks are going to be even tougher for me, and I think most of that will need to wait until sometime in November. 😩 I’m just happy I found time and strength to work for just a bit today. 😊
Not only will they make the code much simpler, but they will enable me to share them via shortcuts and Siri with users easily in the future. 😉
However, before full migration, I plan to move all data operations to #AppIntents. I played with them for a while, and only now I see that I should have started with them from the beginning. 🙈
It’s strongly coupled with my data model, and it makes the changes in the data schema so hard for me. Luckily, I have an idea of how to separate these two matters, and it should remove the main blocker of migrating to a new schema! Hopefully. 🤞
Frankly, it’s quite a small update. I streamlined background tasks at last and created a simple solution for synchronous scheduling of background work, without strange workarounds as before. The next task I want to tackle is… Notification scheduler. 😫
I’m back! 🥳 I had some tough times, caught a cold… Generally not the best period. 😅 I’m still not 100% healthy and strong, but back nonetheless. I even brought the Spark update with me! 😱 New #TestFlight version, but the update is an update, it still counts! 😜
#BuildInPublic #iOSDev #IndieDev
I believe I must be missing something, but I just have too little experience with #SwiftConcurrency, I guess. 😔
#BuildInPublic #IndieHacker #iOSDev #IndieDev
Even the description sounds horrible. 😬 Moreover, I believe there are cases when something might go wrong, but I just haven’t encountered them yet. I thought the actors could save me here, but reentrancy means every await call makes my actor method calls interleave. 😩
That forced me to create yet another horrible solution when waiting for execution to finish means I close the async stream, wait for the background task to end, and recreate the stream with its background handler.
I created my handler in a way that enqueues the operations to an async stream and executes them on a background thread in the proper order, but it looks and feels like a very dirty workaround. Especially since I need to be sure that it finishes in a few places.
Don’t get me wrong, most of the APIs that are asynchronous are fine. The problem in my case is that I need to be able to call methods from different places and for them to be executed synchronously.