Sponsored Link
Automated testing built by engineers for engineers
Waldo is end-to-end mobile testing done right. Easily create and maintain reliable automated tests without the pains of scripting. Catch and fix bugs earlier in your development life cycle. Start free today!
News
Two years of Indie Dev Monday
The last time I linked to Indie Dev Monday, it had only been running for a few months, and now it’s celebrating a second birthday! Josh Holtz does a fantastic job of highlighting developers from around the community. I was even lucky enough to be a part of it a few weeks ago. The anniversary merchandise sale is also raising money for Girls Who Code. Do you need even more reasons to go and check it out? I don’t think so! 🚀
Apple Entrepreneur Camp applications open
I link to these camp announcements every time Apple publishes them, but it feels like something is always missing. I’d love to see a recap of the previous camps when they open enrolment for the next one. I appreciate that not all apps from completed camps will be launched when the next camp starts, but I’m sure there are still plenty of great founders, apps, and stories from the alums that Apple could highlight.
Tools
LLDB Print Object strongly captures an object, forever
Oleksii Nezhyborets has a valuable tip in this quick post about a bug in LLDB that needs no summary, as all the pertinent information is in the blog post’s title! If you’d like a version of po
that works around the LLDB bug, he also links to swift_po from Dave Lee.
I hope this saves you from a few conversations with phrases like “But how can it be captured there?!” 😂
Security Application Static Analysis applied to iOS and Gitlab CI
Do you do any automated security checking on your apps? In this article, Benoit Pasquier digs into adding mobsfscan from the MobSF Mobile Security Framework to his CI process.
We’re not working on anything yet, but this topic has been on our minds for the Package Index, too.
Code
How do 3D transforms of iOS views work under the hood?
I missed this two-part (1, 2) series on 3D transforms from Alex Lee when it was first published in March. He was kind enough to drop me a note about it this week, though, and it’s worth a read if you’ve ever wondered what an m₃₄ is.
Using UIPasteControl in a UIMenu in iOS 16
Will Bishop has been looking into the new privacy warnings in iOS 16 and has written a great post on working with them to ensure that your users never see a privacy warning when pasting into your app.
Experimenting with Live Activities
Ole Begemann has been experimenting with implementing Live Activities after Apple recently added the feature to the betas. If you were looking for some real-world experience with this API, here you go! The app he’s building looks very cool, too.
Shaders Explained - Gradients
Have you always wanted to understand Metal 🤘 a little better but have been put off by how much there is to learn if you’re not already familiar with low-level 3D development? How about implementing a gradient in a shader instead? That sounds much more manageable, doesn’t it? Luckily, that’s what Peter Tretyakov has put together in this article.
Design
How I used DALL·E to generate a logo
I won't go over my thoughts again, but no matter what I think, the results that Jacob Martin got from DALL-E to generate a logo for his OctoSQL project are remarkable, given how young the technology is.
Jobs
Senior iOS Engineer (Swift) @ GoodNotes – GoodNotes is a top-rated paid-for productivity app, available to use on iPad, iPhone and Mac devices with over 10m MAU. You will own your projects and work alongside a high-calibre cross-functional team to continue delivering a product our users love! – Remote (within European or Asia-Pacific timezones) or on-site (Hong Kong or United Kingdom)
Senior iOS Engineer @ Sendwave – We currently have a 4.6-star rating on Trustpilot — people put their faith in us to deliver their money quickly, securely, and affordably. And we’re pretty darn proud of that. – Remote (within US or European timezones)
MacOS/iOS Developer @ DeepL – DeepL is hiring! Want to join the team behind the internet's most powerful translation engine? We are seeking an experienced MacOS/iOs developer to join our Native Apps team, on a fully remote basis. – Remote (within European timezones)
You know what I'm going to write here by now, so I'll just leave you this link.
And finally...
When a thin blue outline just doesn't say focused enough. 😂
Comment
I don’t think I’ve ever written about it before, but I believe there is an analogy between software development and rock climbing. 🧗♂️
I first started thinking about this in terms of source control. You make progress towards implementing a feature, then commit. Make some more progress, and commit again. Then repeat that cycle until you complete your task. Every commit is a safety net, protecting you from going too far from your “last known good” state. It allows you to experiment knowing that you’re never further away from safety than typing
git reset --hard
.I’m no rock climber, but if Cliffhanger taught me anything, I know that climbing is a lot like using git! 😂 Every commit is a piton hammered into the rock face, and no matter how tricky your next move is, the rope attached to that last metal spike will catch you if you don’t make it. Eventually, you’ll reach the top of the pitch and look back at the rope looped through all your git history.
If we had thought to write every feature in the Swift Package Index from scratch today, it would have been too big a task to take on, but software releases also act like pitons. So like a rock climber, we put our first foot on the rock face with a system that gathered data from package manifests, then hammered some metal into the rock with a release before adding ingestion of metadata from GitHub. We then added piton after piton until we could create a build system for compatibility testing. Adding documentation generation to that build system wasn’t trivial, but it was possible because of all those previous releases.
There’s a reason I’m talking about this, of course. This week we hammered in our 500th piton and rolled out versioned documentation for the Swift community. There are full details in the launch blog post, but the cliff notes¹ are that if package authors opt in, we’ll permanently host DocC-generated documentation for every released package version.
It would not have been possible without the previous 499 releases.
¹ Yes, this pun is very much intended! 😂
Dave Verwer