Sponsored Link
Tired of writing and maintaining build scripts?
Buddybuild is used by companies like Slack, Reddit, and thousands of others to reliably build, test, and deploy their iOS apps. It provides mobile development teams with a complete continuous integration, continuous deployment and user feedback system without the hassle of creating and managing scripts. Try buddybuild today and stop wasting time with build scripts.
News
Uber’s Secret Permissions to Copy Your Phone Screen
According to this report, there is a special entitlement on iOS that can give apps the ability to record a user's screen even when the app is not active – and Apple gave this entitlement to Uber so it could ship an app alongside the Apple Watch launch. System apps have always had abilities that were unavailable to third parties, but this is the first I've ever heard of a third party having special capabilities specifically given to them by Apple – so much for a level playing field for developers. 🙁
App Review and Device Requirement Discrepancies
Great reminder from Nick Heer that it is our responsibility as developers to ensure that we correctly apply the correct device restrictions to our apps so that we don't get people downloading our apps only to be disappointed when they don't work. I also agree that Apple should be checking for this as part of App Review!
Tools
Xcode 9.1 Improves Display of Fatal Errors
I'm always glad to hear about improvements in Xcode to Swift debugging. Many crashes that were once difficult to track down are now pointed out directly in the editor. Incremental updates like this are making Swift development in Xcode so much easier.
Code
Better NSUserDefaults with Swift
As we've discussed before, the lack of type-safety in NSUserDefaults
can make it cumbersome to use. We've already seen different approaches to it, but I think this solution by Jean-David Gadina takes the cake. 🎂 Using mirroring and key-value observing in Swift, he wraps up NSUserDefaults
in a strongly-typed Preferences class – and he wrote an Objective-C version as well!
Closures
If you ever find UIKit controls annoying to use thanks to their extensive uses of target-action or delegation, this is the framework for you. Vinnie Hesener makes it possible to use closures to deal with so many of these situations, including UIControl
state changes, adding gesture recognizers, customizing text field behavior, and populating collection views.
On Fixing that NSNull Crasher in Overcast
Debugging is a skill, and like most skills it can only be developed through experience and a bit of luck. Brent Simmons explains how he fixed an error that has plagued Overcast since it first launched by looking at the stack trace and his understanding of the iOS SDK. Adopting Brent's approach would be useful to any developer because not everyone can debug via Twitter. 😝
Design
Design Details: Drag and Drop
Adding drag and drop to an iOS 11 app is pretty straightforward, but developers still can (and should) customize the behavior of the feature to give it the right feel. Oisín Prendiville discusses the various ways the team behind Castro integrated drag and drop to make it work best for the app.
Using psychology to design your product
Products should be designed to appeal to their users – so the best way to design a product is to know how users think. Matthew Talebi discusses ways in which psychology can be used to improve the user experience of websites, but almost everything he discusses applies to app development as well.
Videos
But what *is* a Neural Network?
We keep mentioning neural networks and machine learning on iOS, but I never understood what was actually going on under the scenes. This video explains how neural networks work extremely well – if you have any interest in neural networks at all, I can't recommend this video highly enough.
Comment
This week Felix Krause made mainstream news with his article about how easily Apple ID credentials can be phished in native apps. Of course, this has been a problem for years but the longer it has gone on the more conditioned we all are just to enter our passwords whenever these popups show up.
Besides the obvious advice of "don't phish your users' passwords", 😂 it's worth learning a lesson from Apple here. Users should never get in the habit of instinctively clicking a button or filling in a form without thinking – this makes it so much easier for them to make mistakes. If it gets to the point that your user dismisses an alert without reading, think about how your app's workflow can be improved.
Evan Dekhayser