I was sceptical when I talked about Xcode Cloud last week, and a few people responded, saying that while it wasn’t perfect, my fears were somewhat unfounded.
I also mentioned that I recently received beta access, so I spent some time getting a project of mine set up in Xcode Cloud this week.
Before I say more, it’s important to note that Xcode Cloud is still in beta, and while I couldn’t find any mention of an NDA or any restrictions on talking about it, you should read everything I write here with that in mind.
My first impressions were great. Without a doubt, the easiest CI I’ve ever configured. I opened my project, connected GitHub, configured a couple of settings, and off it went! No code signing issues, no configuration files. So easy! Of course, my first build failed, but has anyone ever had the first build on a new CI platform pass the first time? 😱 That doesn’t happen.
I did find a couple of problems as I experimented. It consistently refused to launch a process to run my tests, and I also had a conflict with my automatic build numbering system. I didn’t manage to fix the issue with my tests, but the build numbering problem was easy to solve once I figured out what was happening. However, I bet this is a common problem, and some guidance through a better error message would have been lovely.
But my experience isn’t what I wanted to talk about today as I had no doubts that it would fit my needs. My project is small, written entirely in Swift using modern APIs, and uses the Swift Package Manager (and only has one dependency, too!). My scepticism of Xcode Cloud was not around projects like this.
So that’s why I was delighted to read this article from Julio Martínez Ballester this week. He talks about exactly the situation I was sceptical about, and the experience they had was good, or maybe even great! They have a ten-year-old large project with multiple dependency managers and needed numerous CI workflows to run. A complex task for sure and precisely the kind of situation that I thought would present a challenge. If you were sceptical, like I was, you should give it a read.
It also goes to show you shouldn’t listen to me! 😅
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.
A common complaint about the App Store model is that it fundamentally limits certain companies and apps from existing. What kind of apps? Jacob Eiting has a few examples here. It doesn’t move my position on the App Store as a net positive, but he’s right.
Before my experiments this week, everything I had read suggested that Xcode Cloud did not yet support CocoaPods. I’m not sure if that was just an early limitation, but as I experimented, I came across this documentation from Apple that confirms that it does! Worth a read.
Here’s something else I learned while setting up Xcode Cloud this week. David Brunow tipped me off to this incredible
Info.plist key that means I’ll never need to fill in that encryption exemption form ever again. 🎉
Chris Eidhof with an interesting post talking about implicit and explicit animations in SwiftUI and how to make them play nicely together.
Of course, the addition of async/await to Swift makes writing asynchronous code much easier, but it makes writing asynchronous tests easier, too! Gualtiero Frigerio explains.
Yes, you could use this thread from Jeff Verkoeyen to spot an app designed for cross-platform implementation. Or, you could use it as a checklist of small but important details to make sure you get right, no matter where the app you work on will run!
Business and Marketing
I think all I need to say here is that there is a section in this post from Ariel Michaeli titled “What You Need to Know”, and the entire content of the section is:
Duplication is bad. Duplication is bad. Duplication is bad. And in case you still aren’t sure. Duplication is bad.
I couldn’t agree with Filip Němeček more. Don’t provide a zipped press kit. Just make the information readily available from your web page.
iOS Engineer – Multiple Levels @ Turo – Help us build product features that delight guests who book vehicles on our platform & enable hosts with the tools they need to manage their fleet. We’re actively transitioning our codebase from Objective-C to Swift, and learning SwiftUI together as we migrate our internal, watchOS, and tvOS apps. – On-site (United States in CA)
Software Engineer @ Runway – We’re a team of former mobile engineers, now building a tool that makes mobile teams’ lives better. If you’re up for changing stacks to build the future of mobile tooling, working closely with awesome mobile teams across the industry in the process, you’ll fit right in! – Remote (within US or European timezones)
iOS Mobile Core Engineer @ FAIRTIQ – FAIRTIQ offers a great company culture, and you get the chance to work on the core product and have a real impact. Your co-workers are smart and fun too! And we offer flexible working hours and remote work in the countries where we are based. – Remote (within European timezones)
iOS Engineer @ sengaro GmbH – We offer an exciting position in the heart of the Alps (Innsbruck) with technical responsibility and conceptual refinements of our long-term products. They are used in the medical field by paramedics and doctors to help saving lives every day. Become part of it and support people in emergencies! – On-site (Austria) with some remote work (within European timezones)
iOS SDK Developer @ Stream – You will write and maintain our open-source SDKs that are used by hundreds of our customers and consumed by hundreds of millions of their users. – Remote (within US timezones)
iOS Developer @ Kiva Microfunds – Our organization combines the culture and technological passion of an internet start-up with the compassion and empathy of a non-profit to create impact and opportunity at a global scale. Our team is growing as we pursue exciting new opportunities to create a financially inclusive world. – On-site (United States) with some remote work (within US timezones)
Oh, and it’s open-source, too!