Sponsored Link
Forget writing testing scripts, use Waldo.
Waldo is the first fully no-code mobile testing solution. Now, anyone on your team can create reliable automated tests and help you fix bugs before your users find them. Try Waldo now, for free.
News
New Apple Developer Forums features now available
Remember when we were all wondering how WWDC labs were going to work last year, and Apple surprised us the week before the conference with brand new developer forums?
It got plenty of criticism when it launched, but I urged everyone to give Apple plenty of slack (no pun intended!) while giving the new forum a chance. Well, here we are just one short year later 🙄 with updates. I agree with everything that Michael Tsai say about the RSS feeds, and while the updates are a step in the right direction, these forums aren't significantly different from what we had before, and what we had before wasn't great.
Tools
Unexpectedly
This new open-source app from Stéphane Sudre isn't related to iOS development, but I bet plenty of you will still appreciate it.
Code
What's new in Swift 5.5?
Unless Apple is planning something drastic, we're just over one week away from the next version of Swift being shipped in an Xcode beta! So here's Paul Hudson with his regular look at what's coming new.
Here is what SwiftData will be…
That's a bold title from Drew McCormack! A new "SwiftUI style" persistence framework is the most common prediction/wish for this year's conference that I see. I agree that it's not going to be, and shouldn't be, a completely new thing from the ground up. There's no need, and data persistence frameworks take years to mature. What will it be, though? Read on for Drew's take on it, including some interesting thoughts on data persistence and blockchain.
Note: That's the first mention of blockchain ever in this newsletter. I'm not sure how I feel about that. 😬
Adding a Gradient to Large Title Text in SwiftUI or UIKit
Here's Becky Hansmeyer with a great piece on creating beautiful gradient-masked navigation bar titles. The article is summed up perfectly by these sentences:
The good news is that SwiftUI makes it trivially easy to create gradients and mask them in a variety of ways. The bad news is that SwiftUI can’t do much of anything when it comes to customizing the navigation bar.
Large masked gradient titles might not be trivial in SwiftUI right now, but they are possible, and there's a playground attached to this post that proves it!
Core Data In Memory Store
You might be aware that Core Data supports in-memory data stores but wondered why you'd use them. If that sounds like you, Keith Harrison has just the post for you as he covers how to create them and two interesting use cases.
AASA File Identifiers
We recently struggled with AASA while trying to make the SPI Playgrounds app respond to URLs. Documentation is sparse and spread over multiple WWDC videos, and we eventually decided not to implement it. So, I read this story from Michael Amundsen with interest. I don't think the bug he ran across was the same problem we were having, but it might the same issue you face in the future!
Design
Should you use gamification techniques in your app?
Getting gamification right in apps can be tricky. Go too far, and people could feel manipulated, but get it right, and it can work wonders for engagement. I liked this article from Nick Babich, especially the section where he talks about "achievements", or more accurately showing meaningful progress inside your app. Just be cautious with it!
Videos
NSSpain 2020 - Remote Edition Videos
It's been a rough year for conferences, but that didn't stop NSSpain! As always, they've been kind enough to release the videos online. With almost 30 videos available, you're sure to find plenty to consume your weekend!
Jobs
Technical Director of Engineering @ Stream – Stream is hiring for a Technical Director of Engineering managing our SDK teams for iOS, Android, Flutter, React Native, and React. Our APIs for activity feeds and chats are used by over a billion end-users. We’re one of the fastest-growing startups in Europe, and recently announced our Series B of $38 mln. – Amsterdam or Remote
Senior Mobile Developer @ Six to Start – We make Zombies, Run!, the world's most popular smartphone fitness game with over 10 million downloads. Help us make exercising fun for everyone! – Remote
Swift Developer @ Toggl Track – Help us build and improve our Toggl Track app for iOS, iPadOS, watchOS and macOS. You will be part of a 5 people team dedicated to build the apps for Apple devices. Our code has been built from scratch in the last year, we just released the iOS app and we are starting work on our macOS app. We do 100% Swift with some small doses of SwiftUI. The salary for this position is €50,000 annually. – Remote
iOS Engineer @ Karbon – Join our dedicated, all-remote agency and help us build amazing iOS apps for amazing clients. We've spent the past 10 years helping companies ship apps to millions of users—join us as we focus on the next 10 years. – Remote within the US
iOS Software Engineer @ Slumber Group – Join the Slumber Group team and help us achieve our mission of "Improving the health of every single person worldwide through sleep". Our audio-focused sleep apps and podcasts help millions suffering from insomnia, tinnitus, anxiety, PTSD, bereavement, or colic. Our products have been featured by Apple, Google, The Washington Post, NYT, WSJ and more. – Remote
Senior iOS Developer @ Sunshine Health Studios Inc. – We make a direct impact on people's health for the better. Our product works long-term, and our large active community shows. Join us in a stable job, alongside Y Combinator founders and top-notch engineers. Paid holidays/vacation, benefits, stock options are available for all employees, even international employees. – Remote
Senior iOS Engineer @ ClassPass – Want to work on an app that helps people lead healthier, more fulfilling lives? Join the team at ClassPass, the world's leading fitness and wellness aggregator. You'll be defining our mobile strategy, collaborating with an incredible product team, and guiding us through a really exciting period of growth. – Missoula MT, Houston TX, or New York City NY
iOS Developer @ Marks & Spencer – We’re looking for enthusiastic, product-focused iOS developers to join our growing mobile engineering team at M&S and contribute to our App Store chart topping iOS application that’s used by millions of our loyal customers every month. Our app is a universal app, written completely in Swift, and we are always looking for ways to improve, enhance and extend its functionality. – London UK
Insiders
Thanks so much to this week’s iOS Dev Weekly Insiders! Ilter Cengiz, Paul Jackson, Shawn Marston, shengchalover, and Russ Shanahan. Thank you so much for your generosity. 😍
This issue’s insider call is on Monday, and we’ll be talking about complexity in software development, as well as covering some of the other links in this issue. Join us?
And finally...
A bug in a web app that only manifested on Windows PCs and started in 1977? That sounds like a story you should read, doesn't it. 🤯
Comment
I still (just about! 👴) remember the first time I came across asynchronous programming. I assumed, incorrectly, that when I called into the concurrent code, execution would continue in my calling function after it had completed. Of course, I was as wrong then as I often am now!
I feel like programming languages are finally catching up with my naive expectations as async/await syntax becomes more standard across a wide range of languages. The great news is, that group of languages will soon include Swift.
I started thinking about this topic after reading Alejandro Martinez’s post on Swift concurrency and watching the three videos that accompany it. He covers three distinct parts of the Swift concurrency story in detail, and I learned a lot from watching them. I’m sure you will too.
Over the years, I feel like I’ve seen programming languages fight a constant battle against complexity as the hardware, operating systems, and user expectations push languages and frameworks to evolve. As the battle progresses, complexity goes through advances and retreats and for every step forward that languages make, there’s complexity lying in wait trying to gain new footholds.
For example, manual memory management was a huge advance for the complexity army until the combined forces of reference counting, garbage collection, and eventually, automatic reference counting pushed it to retreat. It advanced again as asynchronous programming became something we all had to deal with until languages struck back with threads, queues, promises, and eventually async and await. There are more examples, of course, but those are two big ones. It happens over and over again.
I feel like complexity has been increasing quite consistently in Swift over the last few years, so I’m pleased to see the language make a decisive strike against it with some of the language changes carried by the Swift 5.5 cavalry! 🦄
Dave Verwer