Give your simulator superpowers

RocketSim: An Essential Developer Tool
as recommended by Apple

Exclusive Pre-Launch Offer: Get 20% Off atgoing-indie.com

Issue 204
Jan 30, 2024

Visiting a new office called "De haven".

My buddies Hidde & Jordi started working from a new office in Amsterdam which they call "De Haven", translated from Dutch to "The Harbor"

"The Harbor: A place where we ship new releases."

It's a mindset we like to use, and we aim as a group to ship at least one update per day (must admit: we don't always succeed). "A ship is leaving!" is what we would post in our iMessage group.

Niels and I decided to give them a proper gift, quoting another value: "Remmen is Angst', translating to:

“Ship fast; pushing the break equals fear.”

Also known as:

"Learn by shipping"

The point I want to send across is two things:
- These values bring motivation. Speaking for myself, I'm actually learning by shipping and aiming to get that ship out of the harbor to learn fast.
- Having a group of like-minded developers around you boosts your energy. We only worked from "De Haven" for two hours, but it gave me much energy for my weekly SwiftLee day.

Enjoy this week's SwiftLee Weekly!

THIS WEEK'S BLOG POST

It's been a broken feature for years, and I'm so happy it finally got fixed! Status bar overrides have been on my wishlist for RocketSim for a while, and since the latest Xcode beta, I've been able to make it work. Do you know why all of Apple's device screenshots are set to 09:41? You'll learn in this week's article.

SPONSORED

No more swamping users with pop-ups and banners. ContextSDK ensures apps adapt conversion prompts intelligently, depending on whether the user is commuting, in a bar, or winding down for the night. Try out ContextSDK.

MONTHLY GIVEAWAY

This month’s giveaway allowed you to win a ticket for the AppDevCon conference in Amsterdam! I'm happy to announce Armand as this month's giveaway winner. We'll get in touch separately.

For all others: next month a new giveaway!

PODCAST INTERVIEW

I’ve joined Semaphore on their Uncut Podcast’s 100th episode. Besides discussing my role as a Staff Engineer at WeTransfer, we also cover CI workflows and my side projects.

CURATED FROM THE COMMUNITY

We’re getting closer to the Apple Vision Pro release date, making it even more exciting to start with visionOS development. For those unexperienced, Majid Jabrayilov shares a great introduction to SwiftUI on visionOS.

If you’re working on a visionOS app, you’ll enjoy this article by Giovanni Monaco showing several available debugging options.

With high-end devices like today, you almost forget the importance of loading large images on a background thread. Vincent Pradeilles shares a great technique using a UIImage method.

Pricing is hard! But it can be easier. Your first price might be a guess, but I strongly believe in price testing using A/B tests. Every product has its price based on quality, but you’ll only find out which price works best by evaluating results. Jordan Morgan shares how he looks at prices, subscriptions & quality.

Last November I’ve had the honor to speak at BA: Swiftable in Buenos Aires. They’ve released all recordings including my talk on Actors.

FEATURED SWIFTLEE JOBS

Join the SwiftLee Talent Collective if you're hiring mobile engineers or are open to exciting opportunities.

QUESTION OF THE WEEK

This week's question comes from Eli Gregory:

“How do you handle race conditions in complex user interfaces?”

Data races are a complex topic, and solutions are (luckily) improving. The goal of Swift 6 is to eliminate data races completely, and last Xcode’s beta release notes confirmed this:

“Fixed: Swift 5.10 closes all known holes in the static data-race safety model under complete concurrency checking. When writing code with -strict-concurrency=complete, all potential for data races will be diagnosed at compile time unless an explicit unsafe opt out, such as nonisolated(unsafe) or @unchecked Sendable, has been applied. (120816587)”

For me, it comes down to getting my projects on strict concurrency as soon as possible. I’m actively working on this at WeTransfer as we speak. Leveraging Xcode’s concurrency checking to prevent data races saved time and likely eliminated crashes I didn’t even know existed.

At a minimum, I’d recommend reading how the Thread Sanitizer works as well as Race condition vs. Data Race: the differences explained. Even though data races will be eliminated with Swift’s concurrency checking, you’ll still have to account for potential race conditions.

Want to have your question answered next week? Ask your question on LinkedIn or Twitter.