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. π€
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. π€
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.