Sponsored Link
Join a FREE iOS Architect Crash Course before it ends
If you're a mid/senior iOS developer looking to improve both your skills and salary level, join this free online crash course. It’s available only for a limited time, so get it now.
News
Unity Beta Program for visionOS
Here we go! Apple talked about building visionOS apps in Unity at WWDC, and we now have a way to sign up for the beta. It’s unclear how many people/companies will get access, but with the visionOS beta being open to anyone and this feeling like a massive opportunity for Unity, I’d expect them to be generous with access. Sign up here.
Tools
Developer Duck
If you feel left out from all the Copilot fun happening in tools like VS Code and the JetBrains IDEs, then Adam Wulf has just the thing for you. It’s an Xcode plugin providing GPT-powered completion, suggestions, and code analysis for your Swift projects.
It doesn’t change my concerns about GPL-licensed code generated by GPT, but that’s not the biggest problem with this app, and it’s not Adam’s fault. The behaviour of the Xcode extensions API makes this tool really hard to use, with vague error messages and a terrible UI for long-running tasks. However, if you find it too frustrating to use inside Xcode, there’s a separate app window where you can talk to the duck without Xcode! 🦆
Code
Checking in dependency sources from SwiftPM
Back in the CocoaPods days¹, I was a big fan of checking in all dependency source code alongside app code. As long as I didn’t use too many dependencies, size wasn’t a huge issue, and it was just a single commit every time I ran a pod update. Checking dependency source files in to your app’s repository became much more challenging to do with SwiftPM, but Geor Kasapidi has been looking into achieving the goal of gathering all necessary source files when using SwiftPM. I’m not sure I’d recommend this method for everyone, but I learned some things about SwiftPM while reading the article!
¹ Yes, I know “the CocoaPods days” are not over for many of you, but it’s been quite a while since I used it!
Flutter for SwiftUI developers
It’s always good to stay aware of what’s happening outside the UIKit, AppKit, and SwiftUI world. You’ll always get a different perspective and usually learn something new. I enjoyed reading about Natascha Fadeeva’s experience of looking at Dart and Flutter and comparing it to SwiftUI.
Swift Macro Toolkit
This new package is self-proclaimed as a work in progress, but still undoubtedly useful if you’re diving deeper into 5.9 macro development. 👍
And finally...
As someone who discovered both Ruby and Objective-C at about the same time, this spoke to me. ❤️
Comment
Note: This issue’s comment relates to app design, but the writing is less focused and more personal than I usually try to be in my comment. Feel free to skip it and go straight to the links if that doesn’t sound like it’s for you.
This article by Lukas Mathis on streaks and habit building¹ that I linked to a few weeks ago has stuck with me since I read it. He opens with:
They are for me, too, but I always hit a limit with daily streaks after a few years. I reached that limit this week with an app that Lukas talks about in the article and one that generally does a great job with its implementation. Duolingo.
I started learning Spanish using only Duolingo almost two years ago, and until a few weeks ago, my daily trip to see Duo and friends was something I looked forward to. I felt myself progressing from month to month, and while I am far from fluent, ¡puedo hablar un poco de español ahora!
Yesterday, I deliberately let my Duolingo streak lapse. It had stopped being something I looked forward to, and I had even begun to “cheat” by finding the quickest way to extend my streak. I could get it done in less than a minute, but I didn’t feel good when I used that. Worse, while a minute of Spanish every day is better than nothing, I knew I wasn’t learning anything new.
In Lukas’ article, he references Craig Grannell’s idea of offering “redemption” after your streak is lost. That’s a good idea, but it wouldn’t have worked here. I need a break from doing it every day.
The worst bit about losing a streak in an app you care about is that it’s a total loss. I’m now back on day one, and I know that tomorrow, Duo or Zari will attempt to push me to start a new streak, which I don’t want to do. I need something to keep a little pressure on me to continue learning, though.
The design of any habit-building feature like a streak counter is a delicate balance between being so forgiving that it loses its motivational benefit and the completely unforgiving stance that Apple Fitness takes, where a one-calorie slip-up can bring a years-long ring-closing streak to an end.
Of course, I have thoughts on how both of these apps could work on this issue, but this isn’t a feature request to Duolingo or the Apple Fitness team. I’m sure their internal conversations have covered this topic more times than I can imagine!
I have a couple of ideas that might go beyond the obvious, though. Rather than go into specifics, I’ll broadly outline them. The first is less valuable motivationally as there’s no urgency to it, but I’d love to see historical stats in areas I’m trying to build positive habits. How many days have I practised in the last year? Is that trending up or down? How many hours have I spent practising? How many new words did I learn this month? I’d like to see my overall progress, which brings its own kind of motivation. Apple Fitness already has already started implementing this kind of feature.
Then, I think quests and achievements² are interesting, especially for long-term goals rather than as a daily motivation. I’d love Duolingo to work with me to push me towards areas of Spanish in which I am weak or want to improve. Or, with Apple Fitness, rather than assigning me an auto-generated monthly quest, I’d love to feel part of the process by guiding it on what I’d like to achieve before setting my monthly goal. Would this work for everyone? Nope! Some people want something simple, and some want nothing at all. I’m sure a group of people who would benefit exists, though. I know I would.
For now, I’ll give HabitBoard and Streaks a go again, and I hope this perspective on the user side of these features was useful if you're designing something like this.
¹ You can ask difficult questions about the morality of habit-building techniques in apps, but when the habit is learning something or improving fitness, I don’t think that’s an issue, and that aspect of this kind of feature is not the subject of today’s comment.
² I know David Smith did some work with achievements in Pedometer++.
Dave Verwer