Sponsored Link
Add paywalls in one line of code
Take 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 Act
I 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 Playdate
The 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 Freeze
I 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! š
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 ofenableExperimentalFeature
. 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. š ļø
Dave Verwer