Issue 652
15th March 2024
Written by Dave Verwer
Comment
I received two types of emails in response to last week’s introductory comment. The first type had phrases like “No warnings at all? Wow!” and “I’m surprised you didn’t get anything at all!” and the things said in the other type of email were much more along the lines of “You didn’t switch on the checks properly.” 🫣
Yes, it’s true. I made a huge mistake with last week’s intro, where I used enableUpcomingFeature
instead of enableExperimentalFeature
. It’s crystal clear in the documentation that the former is for Swift 6, and the latter is for Swift 5.9/5.10. I was running with Xcode 15.3, which includes Swift 5.10. 🫢
It’s much more straightforward if you’re switching it on for Xcode, but if you are testing this with a package, there’s a subtle difference between the two.
What tripped me up was when I tried inserting some code I copied from Matt Massicotte’s Concurrency Recipes repository to test that I had the checks enabled correctly. I knew the code would trigger a concurrency warning, and sure enough, a warning appeared as soon as I pasted it in! What I didn’t realise is that that warning would have appeared before I added the strict concurrency flag, too. 😬
I’ve been making lots of silly mistakes recently, and it’s frustrating. I used to have such an eye for detail, and in my mind, I like to think I still do. That said, errors like this are not uncommon for me these days. I don’t think I’m quite old enough yet for it to be age-related, so it’s more likely to be the constant context-switching that I put myself through. I often close a window to find a stack of windows with an embarrassingly high number of half-completed tasks. You’d think I would have got the hang of it by now. 😬
Anyway, the long and short of it is that we do not have zero strict concurrency warnings in the Swift Package Index. We have 526! There appear to be a few common root causes though, so I’m sure that number will come down quickly when we start fixing them. 🛠️
Sponsored Link
Add paywalls in one line of codeTake the pain out of configuring and testing your app’s paywalls. With RevenueCat Paywalls you can remotely configure and edit your entire paywall view without waiting on App Review. See how it works here.
News
Google’s Response to the Digital Markets ActI won’t try and make any comment on this other than to link to it, but this is an interesting round-up of what Google already had, and what’s changing over in Android-land around the DMA legislation. Just remember that everything you read here is obviously biased, being written by Google.
New App Store, iOS, and CloudKit data analytics now available
Fifty new reports in App Store analytics is nothing to sneeze at, and that’s what Apple has recently added to App Store Connect. It’s also great to see all this data available via the API. Apple seems completely committed to making that API a priority when they make changes. 👍
Code
Building Tiny Games in Swift for the PlaydateThe Playdate was an impossible-to-resist purchase for me. Panic software and Teenage Engineering hardware are a powerful combination, and the device is a delight. It has an SDK, too, but can you write software for it in Swift? Now you can!!! ❤️ Rauhul Varma has been working on making that happen, and here’s his write-up.
Swift Tooling on Windows
Arc for Windows entering beta is a clear indication that it’s possible to write Windows apps with Swift. Building a browser is no trivial task! Here’s Jeremy Day with a round-up of the state of tooling is for Swift on Windows, covering writing code, debugging, and even building for Windows arm64.
If you use UserDefaults in an app
Isn’t that … every app? If this applies to you then Craig Hockenberry has something you’ll want to read before you next upload a release to the App Store.
SwiftUI Tasks Blocking the MainActor
What a great reminder from Keith Harrison that compile time errors are not the only thing you can do wrong with concurrency! 😬
Videos
Hacking Disneyland’s App to fix a FreezeI really enjoyed Bryce Pauken’s latest video on fixing a bug in the Disney app. I’ve never seen a more straightforward demonstration of the techniques he uses here. 👍
Jobs
iOS Engineer @ trivago – trivago, a metasearch engine using real-time auction and petabytes of data, enables millions of travelers compare hotel prices from hundreds of booking sites. Based in Düsseldorf, we foster a culture of learning and innovation, embracing flexibility for our talents to shape the travel industry. – On-site (Germany) with some remote work (Anywhere)
Senior iOS/macOS Developer @ Paste – Joining Paste means crafting impactful, user-focused products alongside a team that values innovation, flexibility, and a culture of collaboration. Dive into projects that push the boundaries, enjoy freedom in how you work, and help shape the future of productivity tools. – Remote (within European timezones)
If you’d like to see your job featured in iOS Dev Weekly, post it on iOS Dev Jobs and select “Featured listing” as you check out, and it’ll be in next week’s newsletter. 🎉
And finally...
Swift puts Breakout on the Playdate. JavaScript puts it in Google Calendar! 😍