Breaking Code Signing via SSH

Ok, so the title is a bit misleading. Code signing wasn’t broken by SSH itself, it was the keychain interactions that occur when using SSH, but some context is needed. When you sign into the developer portal in Xcode, Xcode stores two items in the keychain that allows developer tools to access the developer portal on your behalf: Xcode-Token & Xcode-AlternateDSID. Prior to Xcode 9.3, these items were stored in the normal login keychain....

Designing a Better ASWebAuthenticationSession

As I have written before, the API provided by Apple to implement SSO via Safari leaves a lot to be desired. One of the main concerns is that starting a session automatically prompts for permission and if the user cancels, it can leave the user in a weird state. On top of that, the permission allowance is not remembered, so alert fatigue becomes real. Therefore, I decided to look at other Apple APIs to see how permission onboarding occurs to find better implementations....

ARM Based Macs

This week saw the announcement of a new MacBook Air, Mac Mini, and new iPad Pros. The Mac Mini was well overdue for an update (the update took 1475 days) and the MacBook Air update got rid of the last non-Retina Mac, but the star of the show was the new iPad Pro. The new iPad Pros contains an 8-core CPU and a 7-core GPU which allow them to do a lot of work quickly....

Missing Delegates

When embedding web content in iOS applications, it is necessary to become the delegate of the web view displaying the content so that you can handle errors during the loading process. Depending on the UI you have implemented around said web view(s), you might also have navigation controls as well as a cancel/reload button. For UIWebView, the webView:didFailLodWithError: method is used to tell the delegate that some error occurred during page load, whereas WKWebView uses both webView:didFailNavigation:withError & webView:didFailProvisionalNavigation:withError: to inform the delegate....

Architectures Galore

While some developers might be pining for the days when everything was written in assembly, I am not one of those people. CPU instruction sets are very complicated these days and there are a lot of revisions based on what chipset you might be running on, which is why compilers are awesome. If we take a look at what architectures the Apple platforms are using (and have supported), you can see why writing everything in assembly is folly:...