I’m sure you’ve already heard Apple’s big announcements from the annual Worldwide Developer Conference this week. I was lucky enough to snag a ticket in Apple’s lottery and got to check it all out in person. There were lots of great sessions, with tons of content. Here are the highlights as I saw them from a mobile developer’s perspective – *not* from the general consumer point of view. For the most part, I think this year’s announcements highlighted the evolution and maturity of existing products and projects – no new amazing breakthoughs, but definitely steps in the right direction.
If you haven’t seen them already, the Keynote and the Platforms State of the Union videos cover most of the announcements, but not in complete detail. Just be warned, the Keynote is loaded with product marketing fluff, not just developer topics. Once you get to “we’ve got one more thing…” you can turn off the Keynote – the Apple Music announcement has pretty much zero significance for developers.
So let’s get started…
There was a tremendous emphasis on the Swift language at this year’s WWDC event. There was the announcement that Swift is going to be open sourced, plus many language enhancements, and nearly every piece of sample code that was shown was written in Swift. It is very clear that Swift is Apple’s direction moving forward.
The Swift language itself has also evolved quite significantly. Better error handling, protocol extensions, and improved performance are a great start. Heck, if I understood one of the speakers correctly, it’s now even faster than Objective C at runtime in some cases.
Want to learn more about Swift? Check out these session videos from WWDC (requires Safari):
- What’s new in Swift
- Protocol Oriented Programming in Swift
- Optimizing Swift Performance
- Swift in Practice
- Improve Your Existing Apps with Swift
- Swift and Objective-C Interoperability
New versions of both OS X and iOS were announced and released to developers… OS X El Capitan and iOS 9 respectively. Both seem to be incremental updates of the previous OSes. New apps, new features, etc… for the end users. Not necessarily significant changes for developers. If you’re a graphics programmer, Metal will be a big deal for you (low level graphics/gpu API), but if you’re not a graphics guru, you probably won’t even know its there.
The new iOS 9 multitasking/side-by-side mode for iPad is going to be a great addition which brings the iPad even closer to being a full laptop replacement. Having the ability to have multiple apps open next to each other will improve the iPad’s “get $h1t done” ability. You’ll have to ensure that you’ve authored your apps to leverage adaptive layouts, but that’s pretty much all that you need to do to take advantage of iPad Multitasking.
These videos will get you going in the right direction for iOS multitasking and adaptive layouts:
- Getting Started with Multitasking on iPad in iOS 9
- Multitasking Essentials for Media-Based Apps on iPad in iOS 9
- Mysteries of Auto Layout, Part 1
- Mysteries of Auto Layout, Part 2
The new “App Thinning” features in Xcode 7/iOS 9 are also a great addition. Currently if you build an iOS app it gets bundled with lots of resources that may never be used depending on the type of device. App thinning introduces three concepts that help minimize the footprint and increase the quality of your installed apps: App Slicing, On Demand Resources, and Bitcode. According to the presenters, these can decrease the download/installed size of your apps quite significantly.
If you haven’t seen the App Thinning in Xcode session, you should definitely check it out.
App Slicing is a new feature that creates variants of your app executable depending on the device that you are downloading the app to. So, if your app doesn’t use @3x graphics, or doesn’t use the arm7s architecture on a particular device, then they won’t be downloaded. Likewise, if your device does leverage those assets, then the other smaller scale assets and non-used binaries won’t be downloaded.
On Demand Resources give you the ability to download specific sets of resources from the app store as they are needed. They are still hosted by the app store, but not part of the initial download. Let’s say you are building a platform game. Initially the shell/navigation assets will be downloaded. While the app is running you’ll be able to download assets for level 1, level 2, level 3, etc… incrementally as they are needed. The system can also clean up ODR resources to conserve space using a least-recently-used cleanup routine.
Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.
Bitcode enables the app store to re-compile your code to take advantage of new LLVM optimizations without you even having to recompile and upload a new application binary.
The new UI testing features in Xcode 7 look pretty awesome as far as automated UI testing goes. It enables you to record/playback steps and generated UI unit tests all from within Xcode. What’s even better, it enables you to set breakpoints within your tests, so you can debug why your tests might be failing, or you can set breakpoints inside of your app, and the automated testing stops at the breakpoints and allows you to step through code while inside the automated unit test. Definitely do not miss the session on UI Testing in Xcode 7 if you have any (even remote) interest in automated UI testing, it looks pretty darn useful.
Improved Search and Deep Linking
Improved search functionality was also announced for both iOS and OS X. This improves the search functionality, and also enables your apps to index their content, so using the device search enables you to search for information hosted *inside* of the app. To complement the enhanced search, there are also features that better facilitate deep linking into your app. This enables apps to be launched directly into the appropriate content/context with greater ease. I need to look into this more, but it sounded interesting…
Check out these resources for additional detail:
Last, but by certainly no means least, the announcement of watchOS 2 looks like a massive leap forward for developing for the Apple Watch.
WatchOS 2 brings us the ability to execute code natively on the Apple Watch, not just in the WatchKit extension running on your iPhone, brings us the ability to implement custom watch complications, access to network connectivity if your phone is not connected, support for multimedia, and direct access to hardware sensors. If you’re wondering what “watch complications” are, they are the widgets on the watch face that enable you to display customized information.
You should definitely check out the videos on developing for the Apple Watch if you have any interest in watchOS:
- Building Watch Apps
- Introducing WatchKit for watchOS 2
- Layout & Animation Techniques for WatchKit
- WatchKit in-Depth, Part 1
- WatchKit in-Depth, Part 2
- Introducing Watch Connectivity
- Designing for AppleWatch
There are also new APIs, enhanced features in CloudKit, MapKit, HomeKit, Core Motion, Core Location, updates to Apple Pay, security updates, networking updates, and lots more. Be sure to check out the complete list of WWDC videos for more.
There was so much to absorb, I’m sure I missed something, so feel free to point anything out that I’ve overlooked!