I wasn’t lucky enough to get a WWDC ticket this year, but I’m still in San Francisco so I can hang out with fellow iOS developers and attend AltConf.
I’ve been having a great time so far, following and discussing all the exciting news with everyone here!
Although I haven’t had time to go through all the docs and samples yet, I thought it might be useful to post some of my initial impressions of the goodies in store for us this year.
Feel free to post any of your own thoughts, or anything I may have missed!
Swift Updates
The most exciting change for me was something that affects all Swift developers – the release of Swift 2.0, and that Apple will be making Swift open source later this year!
Greg will be posting a detailed roundup of what’s new in Swift 2.0 in a few days, but here’s three changes that especially stood out for me:
1) Error Handling
There’s an entirely new way to handle methods that return errors. The days of NSError
are gone; there’s now a new system that looks somewhat similar to exception handling. One of the advantages of this system is that it makes it harder to accidentally ignore errors in your code.
Here’s a quick example that shows how this works:
let beers = 2 let sessions = 2 let hoursOfSleep = 4 enum WWDCAttendeeError: ErrorType { case TooExcited case TooTired case TooDrunk } func attendSession() throws { guard sessions < 3 else { throw WWDCAttendeeError.TooExcited } guard hoursOfSleep > 2 else { throw WWDCAttendeeError.TooTired } guard beers < 3 else { throw WWDCAttendeeError.TooDrunk } print("Great session!") } do { try attendSession() } catch WWDCAttendeeError.TooExcited { print("Too excited!") } catch WWDCAttendeeError.TooTired { print("Too tired!") } catch WWDCAttendeeError.TooDrunk { print("Too drunk!") } |
I consider myself as exhibiting all three of these errors right now ;]
We’ll go into more details about this in future articles, but I definitely consider this one of the biggest changes to Swift, and something we’ll all need to get used to.
2) Protocol Extensions
With protocol extensions, you can actually add new method and property implementations to any class that implements a protocol. For example, this would add a new method knockKnock()
to any class that implements Equatable
, such as Int
:
extension Equatable { func knockKnock() -> String { return "Who's there?" } } let a = 1 print(a.knockKnock()) |
With protocol extensions you can also add default implementations of methods to protocols too. I think this will turn out to be handy!
3) Labels
Just when you thought the days of GOTO
were gone… labels return! ;]
Labels provide a way for you to break execution of an inner loop out to a higher level condition or loop, for instance:
outer: for i in 1...10 { for j in 1...20 { print("\(i), \(j)") if j == 5 { break outer } } } |
This will only print out (1, 1) to (1, 5), and then terminate. There have been a few cases where I could see this making code a bit cleaner.
And More…
There are a bunch of other changes too – stay tuned for Greg’s article for more details!
WatchKit Updates
Apple Watch developers around the world rejoice – we can now write native apps for watchOS 2!
When I first heard this, I was worried that it would make everything we’ve learned with WatchKit obsolete. However, according to what I can tell from the watchOS 2 Transition Guide, this is actually not the case.
Instead, it seems like you still make WatchKit apps the same way – you still create WKInterfaceControllers
, you still use the same kind of controls and layout system – but now the code now runs on the watch, instead of on your phone.
This has a number of repercussions:
- Better performance: Since code is running natively on the watch your apps should perform better. I haven’t tested this yet though – if anyone has let me know your findings!
- More device access: You now have programmatic access to the digital crown, microphone on the device, health sensor data, accelerometer, and more – these will enable new kinds of apps.
- New connectivity: Now that your WatchKit app is running on the watch itself, you can no longer use shared container for files – if you want to share files, you either need to use the new Watch Connectivity framework, or re-architect your code to have both the iPhone app and watch pull data over the network from a shared server.
Mic Pringle will be writing an article with more details on these changes. And before anyone asks – yes, we are planning a second edition of WatchKit by Tutorials! :]
iOS 9 Updates
There were a number of important changes in iOS 9 this year – not as many as previous years, but still a bunch of things you’ll want to be aware of. Here are my top three:
1) Multitasking Enhancements on iPad
One of the first things Apple demonstrated in the Keynote was that you can now run two apps at once on iPad, side-by-side in a split view.
If your app is using Auto Layout and Adaptive Layout correctly, for the most part this should just work. It basically means that sometimes your view controllers may have compact width size class on iPad, such as when it’s displayed on the right hand side of the split view. Also, if the split view is extended to 50% then both sides are compact width.
There are a few edge cases to keep in mind though, covered in the Slide Over and Split View Quick Start guide.
2) Search APIs
Another pretty cool new feature is that you can now make activities and documents within your app searchable by Spotlight using some new APIs.
You can also make special links on your site that when tapped by a user (and they have your app installed) will launch your app at a specific view in your UI flow, similar to Facebook’s App Links.
I expect we’ll see a lot of developers wanting to take advantage of this.
3) Other Cool Changes
I ran a quick poll on Twitter to see what else folks were the most excited about, and here’s some of the top winners:
- Testing Improvements: Rather than write your UI testing in Javascript, Xcode now has a feature that allows you to record your interactions with your app and automatically generate the test code for you! It also has a nice code coverage feature that will highlight the parts of your code that are covered by unit tests.
- CloudKit JS Library: One common complaint about CloudKit was that if you used it, you couldn’t make a web app that accessed the same data. That is no longer the case with the new CloudKit JS library!
- App Thinning: Apps have become bloated over the years with @1x, @2x, and now even @3x images, multiple binaries, and so on. App Thinning makes it so only the files that are needed to run on the device are included – and most of this happens automatically. There is also a new system that allows you to store some of your apps resources on the App Store and download them on demand to further reduce binary size – see the On Demand Resources Guide.
- Contacts/ContactsUI: The ancient AddressBook API has finally been rewritten in an Object-Oriented fashion. Hip hip hooray!
iOS Games Changes
Surprisingly, one of the biggest sets of changes this year were related to iOS and OS X games!
The most exciting change for me was a brand new framework called GameplayKit. This contains a number of really cool and helpful things for game development:
- Entity/Component Support: The “easiest” thing to do when you get started with SpriteKit is to use inheritance for your game objects, but this can lead to problems as your game gets more complicated. It’s better to move to an entity/component system, but getting this working can be time consuming and tricky. With the new Entity/Component System support in GameplayKit, this will be much easier for developers to migrate to in the future.
- State Machines: Almost every game needs a state machine, and GameplayKit provides a robust implementation to build upon. I look forward to replacing my bare bones state machines with these!
- AI Support: GameplayKit also provides algorithms to more easily develop AI in your games, such as a Minmax algorithm, pathfinding, rule systems, and more. I can’t wait to dig into some of this stuff!
I never would have imagined we’d get a framework like this, and I think this puts a whole new level of games within the reach of the beginner game developer.
In addition to this, there also appears to be some nice improvements to the Sprite Kit editor that reminds me of Adobe Flash – I look forward to checking that out more!
Where To Go From Here?
That’s my 2c of the highlights of this year’s goodies as it relates to iOS and watchOS developers. We’ll be posting a bunch more articles, tutorials, books, and video tutorials about this in the coming weeks :]
I’m curious to hear what you thought about everything – what are you most excited about?
And please don’t say Apple Music! ;]
WWDC 2015 Initial Impressions is a post from: Ray Wenderlich
The post WWDC 2015 Initial Impressions appeared first on Ray Wenderlich.