Sponsored Link
Get M1 Mac minis in the Cloud with Scaleway
Get the best macOS Big Sur experience running on the lightning-fast Mac mini M1 for $0.12/hour. Perfect for tackling complex macOS or iOS continuous integration and delivery for distributed development teams. Available now at Scaleway, the cloud that makes sense, complete with integrated IaaS and PaaS offering. Get started in minutes!
News
Additional guidance available for App Store privacy labels
I wish this announcement included a little more detail on what has changed, but it's great to know that something changed. It certainly looks like there's an expanded "Additional guidance" section, but it's going to be safest just to reread the whole thing. 📚
Tools
Remember the Xcode counterpart editor?
This feature was everyone's best friend in the Objective-C days, and with a little hidden defaults
tweak, you can make them almost as essential in your Swift projects. What a great tip from Peter Friese!
Similar Detritus Not Allowed
I couldn't have predicted that macOS extended attributes would get a mention in this week's newsletter, but thanks to Daniel Jalkut, they do! If you ever receive a weird codesigning error after adding a new resource to your app, this may be the solution. 🚀
Code
Recreating Apple Photos with Compositional Layouts
I mentioned how Filip Němeček was writing plenty about compositional layouts a few weeks ago, but his posts have all been on the theoretical side so far. Theoretical posts are great, but I love when people explain how they put it into practice in a real-world situation, like recreating the Apple Photos UI. Check out the sample code too. 🚀
Hummingbird
Is this the second new server-side Swift framework that I've linked to in February? Yes, it is! This time, it's Adam Fowler's turn to dip a toe in the water and try to create a modular, lighter weight server-side Swift framework.
Testing for watchOS Apps
I had seen mention of watchOS testing support in Xcode 12.5 but didn't know the details until I read this post from Jason Zurita. If you read it too, you'll be just as up-to-speed as I am! 😂
AppKit is Done
I almost didn't link this because of the clickbait title, but this post from Alex Grebenyuk is worth reading despite it. I'm afraid I have to disagree with the premise that AppKit is done, but it's great to see what's possible with SwiftUI on the platform where it has felt least at home so far.
Distributing closed-source frameworks with SPM
What technical challenges will you face if you decide to create a commercial version of an open-source project and distribute it via the Swift Package Manager? Daniel Saidi details the issues he faced when making KeyboardKitPro, the closed-source, commercial version of KeyboardKit. It also makes a good to read if you're curious how he's approaching the business side of this decision.
Design
Gradient Generator
Why am I linking to a gradient generator that generates CSS gradients in an iOS development newsletter? It's not a mistake. These are special gradients! 🦄 Read Erik Kennedy's description below the generator to learn about dead zones and why the ones you make never look as good as those you see from other people.
Jobs
Senior iOS Engineer @ National Public Radio – This is a unique opportunity to join a dynamic team working to improve our iOS products. – Washington DC
Senior iOS Software Engineer @ TeamSnap – If you find sharing party parrot emojis in Slack amusing, TeamSnap is the place for you. We've been remote since before remote was cool. You'll work on a team with big ideas and tiny egos to develop a product that has been featured by Apple at WWDC (Worldwide Developer Conference) and has 23+ million users. – Remote within the US
Principal iOS Software Engineer @ Tripadvisor – Great opportunity to work with the latest Swift and Swift UI iOS development technology on MVVM architecture. Help drive key architectural discussions and designs leading from the front as a technical authority within the talented iOS team. – Boston MA
Mobile Full Stack Engineer @ Expensify – Join our passionate team of top-notch engineers to solve a real-world problem, and help people spend less time managing expenses and more time pursuing their real goals. As we revolutionize the way people manage their expenses, being part of the Expensify team means building the easiest, fastest, and most efficient platform to automate everything expense-related. – San Francisco, Portland, Michigan, New York, London, or Melbourne
Senior iOS Software Engineer @ Doximity – Doximity, the medical network used by over 70% of US clinicians, is hiring passionate Senior iOS engineers (remote-friendly!). You'll get to be part of an amazing product team and work on an app that is constantly evolving. Use your skills (Swift, MVVM, FRP) to be an integral part of our newly launched telemedicine feature. Apply today! – Remote within the US
Mobile Automation Build Engineer @ Doximity – Come work on a small team, inside a fast growing, largely remote company! In this role, you will maintain the mobile (iOS and Android) CI/CD pipelines, and ensure our app continues to make the lives of healthcare professionals better on a daily basis. – Remote within the US
iOS Engineer @ Turo – Help us build product features that delight guests who book vehicles on our platform and enable hosts with the tools they need to manage their fleet. The iOS team is actively transitioning our iOS codebase from Objective-C to Swift, and we’re learning SwiftUI together–in labs–as we migrate our internal, watchOS, and tvOS apps. It’s really an exciting time to be an Apple-centric engineer at Turo. – San Francisco CA
iOS Engineer @ WillowTree – As an iOS Software Engineer at WillowTree, you’ll influence project outcomes and collaborate with teammates to build amazing products people love. In response to the pandemic, our team members have the option to work remotely. Once it is safe to return, this role will be based in our Columbus, OH office. Non-local candidates are encouraged to apply as we provide relocation assistance. – Columbus OH
Senior iOS Engineer @ WillowTree – As a Senior iOS Engineer at WillowTree, you’ll have the opportunity to impact teammates throughout various stages of their careers. In response to the pandemic, our team members have the option to work remotely. Once it is safe to return, this role will be based in our Durham, NC office. Non-local candidates are encouraged to apply as we provide relocation assistance. – Durham NC
Are you hiring? Get your open iOS development positions listed right here by posting a Featured Listing over at iOS Dev Jobs.
Comment
Knowing what apps do with contact data after issuing a prompt like this, my default answer is no every time I see this prompt. There’s been plenty of criticism of apps that use these prompts over the last couple of weeks, mainly aimed at Clubhouse as they built their entire invitation system around needing databases full of contact data.
I wish Clubhouse (and other apps) didn’t do this, and I tapped no when it asked me. That said, the idea behind this type of feature isn’t a bad one. It’d be great if apps could automatically match me with people I care about or want to interact with. Unfortunately, picking which of the records in my contacts database fit that definition is tough, if not impossible, to automate.
I saw some suggestions that Apple should solve this with a Photos.app style “select which contacts can be accessed” permission, but is anyone going to go through their contacts manually, picking and choosing? I have just under a thousand records in mine from many years of personal+work life, and I bet that’s nothing compared to some people. It’s not practical. Maybe a solution would be to let the permission be on groups rather than individual contacts, but who’s contact database is that well organised? Mine isn’t.
The other popular theory on how to solve this is that Apple should provide an API to hash contact information, allowing apps to match people without getting access to personal information. That’s one of those ideas that feels better and solves one aspect of the problem, but bad situations are inevitable when you match a full contacts database.
I don’t see any solution to this problem that doesn’t need massive and fundamental change to identity and how we map social connections. Smart people have been thinking about this problem for a long time. I remember watching this talk at ETech 2006, more than 15 years ago. 👴 OpenID failed, open social graphs failed, and the walled gardens won, even if that garden is just your contacts database.
The best solution for right now? Don’t ask for contacts permission, don’t attempt to match people, and don’t try to discover connections. That creates a terrible user experience and will never drive that “hockey stick” growth. It’s the only solution that stops other people from uploading my contact information and prevents ugly situations like the one I linked to above. I wish there were a better solution because the problem is real, but I don’t think there is.
I hope you weren’t hoping for a magic bullet in the last sentence… 😬🤷♂️😂
Dave Verwer