Since the main focus of this site will be Apple platform development, it seemed appropriate the first post should be about what I am expecting (and hoping) to see at this year’s WWDC. Plenty of other places have talked about what they want to or expect to see from a consumer standpoint, so instead I will try focus on looking at things from a developer’s perspective.
Xcode 8 and Swift 3
Since Swift is now open source, anyone can find out what is going to be included in Swift 3 just by looking at the activity on Swift Evolution. What we don’t know are how what (if any?) new frameworks will be announced and what new features we can expect form Xcode.
So here is what I am hoping we see.
- Swift web framework: There are third party open source Swift web frameworks available now, but I think that this is an area that is too important for the future of the language for Apple to let this become fragmented by having too many competing standards. I think this framework is the primary reason that the first version of open source Swift included runtime support for Linux. Bonus points if they let you run host and run it in iCloud.
- Xcode support for Swift Package Manager: CocoaPods is a great tool that has helped create the iOS open source community, but having a dependency manager build directly into Xcode is the best path forward. It is ironic that the beginning of the end of CocoaPods comes right after they made it to Version 1.0.
- Swift refactoring: The
Edit in Scope feature does a good job of changing a variable name within a single file, but being able to do it across an entire project like in Objective-C would be great.
- Faster Swift compiling: Title pretty much says it.
- Better Swift debugging: It is not uncommon for my variables to simply not show up when stopped at a breakpoint in Swift. Things improved quite a bit in Xcode 7.3, but we still have a ways to go. We need Twitter accounts like @jakesxcode to no longer be necessary or relevant.
Xcode for iOS
The main development related feature that I want is big enough to merit its own section. It is time for Apple to release a version of Xcode that runs on iOS.
Every time this topic makes it rounds, naysayers compare the iPad’s relatively tiny screen to that of an 27″ iMac display. They claim that they could never get real work done working from a 12.9″ display. People who use this argument are missing the point.
Xcode existing for the younger Apple OS will not make the Mac version go away. Even with an iPad Pro, I imagine I will still do 90-95% of my developing on the Mac. For me, the purpose of Xcode for iOS is to completely eliminate my need for a laptop.
When I travel to WWDC next week, I am going to have to take my iPhone, iPad, and a MacBook Pro. When I go to a coffee shop to get some programming done, I do the same thing. When I go on a trip and there is a slight chance that I may have to edit some code, I have to take my MacBook Pro.
I all of these scenarios, the only use of the MacBook Pro is for programming. My iPad is better for every other task that I used to use my laptop for (reading, writing, social media, web browsing, ect). A device who’s only purpose is using Xcode while I am away from my desktop is not a device that is worth keeping around.
Xcode for iOS does not need to be better than Xcode for Mac, it just has to be a viable alternative.
iOS has become a robust OS in the last couple of releases, so there is not much low hanging fruit in terms of obvious features that I want to be added. With that being said, here is what I got.
- iCloud-powered reminders app: I want the Reminders app to get the same treatment this year that Notes got last year.
- System wide dark mode: A rumor that this is coming had been floating around for a while. I use dark mode in every app that supports it and most of the apps that I write are dark themed, so I would probably use this setting most of the time.
- Inter-app notification API: This one is a little out of left field. I would like for apps to be able to register that they send certain types of notifications. Other apps (including apps from other developers) would be able to get a list of available notification types and register for them and execute a background task when that notifications fires.
An example of this would be Day One posting a notification when I finish a journal entry and Streaks seeing that notification and automatically marking my daily journal goal as completed. Things like this can already be done using the HealthKit APIs, but it would be nice to see them expanded to work across third party apps as well.
It would be even better if the notifications were posted across devices using iCloud so I could write my journal entry on my iPad and have an app on my iPhone respond to it.
This would allow all kinds of “if this then that” actions and automations.
- Instant apps: This is basically the same feature that Google announced for Android at IO a few weeks ago. From a technical standpoint, it would be a combination of three iOS technologies that already exist: deep links, app thinning, and app extensions.
- Embedded app extensions: App extensions inside third party apps are currently only only available through the action sheet. This leads to awkward interactions with things like 1Password where you have to present a share sheet with only 1Password visible. It would be much better for the app to be able to query for a particular app extension and launch it directly.
- Better phone call UI: Phone calls should have an option to have the same notification UI as a normal push notification. Taking over the entire screen while I am using my device (especially on my iPad) is obnoxious.
- Support for animated
MKOverlays on top of
MKMapViews: Having animated content (like moving radar) on top of Apple Maps is a hack job right now. I would like an official way to make it work. More on this in a future post.
iPad Specific Changes
While I feel like things are going well for iOS on the phone side of things, I feel like the iPad needs some bigger changes.
- Improved support for multiple apps: Split screen multitasking was the best feature in iOS 9, but it left some room for improvement. The app picker for the secondary app is, to put it simply, not very good. The team over at MacStories did a concept video a few months ago that included a great take how to make this better.
Other ways to improve multitasking would be to allow groups of apps to be saved together similar to full screen mode on the Mac instead of the app on the right being permanently pinned there.
To take things even further, it seem inevitable that iOS apps (at least on the iPad) will eventually be able to run in a full windowed mode. Maybe 2016 will be the year.
Better external keyboard support: Like multitasking, this is an area that received some attention in iOS 9. I think that Apple should make it as easy to control an entire app with a keyboard as it is to add accessibility support to an app. I think they way they do it is to use
UIFocusEngine, which currently powers the interaction model of tvOS.
Also, there should be a better way to bring the software keyboard up while a Bluetooth keyboard is still connected (other than toggling the Bluetooth switch in Control Center). This would be useful for pulling up alternate keyboards for GIFs or emoji or for when you grab your iPad to sit on the couch but it is still connected to the keyboard back in the kitchen.
Better notification UI: This is a small thing, push notifications on the iPad should not span the entire top of the screen. They should display in the top right corner similarly to how they display on the Mac.
The biggest mystery here is what they are going to call it. Not change anything and go with OS X 10.12? MacOS? macOS? Will it finally go to 11?
My favorite of the group is macOS 11, but my bet is MacOS 11. We will see.
On to the real stuff.
- Siri: I don’t care about using Siri on the Mac at all. As said I before, the primary place I use a Mac is at my desk at work where using Siri would be rude to my coworkers. I want this because it shows a dedication to improving Siri as a service. More on that in a bit.
- UIKit: This is probably my biggest wish for WWDC this year. This would lower the barrier for creating a good Mac app quite a bit. More importantly, it would cut down on the number of apps that are just ported to the Mac as a wrapper around a web view. Ben Sandofsky had a post on how this could be achieved technically.
- iTunes: Burn it down and start over.
There a lots of things that I would like in watchOS, but most of them would require new hardware. I will try to focus on things that could be achieved with the current version of Apple Watch.
- Better graphics support: I would like to have access to
Metal APIs from a watch app.
- Better Digital Crown support: We currently have indirect access to Digital Crown, but having a
Float value of how much it changed would be more useful. This plus the graphics API access mentioned about would allow for some big improvements to the RadarScope watchOS app.
- Less reliance in the phone: Most of these changes would have to come in hardware, but there are some API behavior changes that could be improved.
If the watch app needs something from the internet, the documentation tells us to use
WCSession to open the app on the phone and then transfer the data to the watch.
The watch app has the ability to use
NSURLSession directly, but it is really slow for even simple network request. In my testing, it is faster to open the app through
WCSession, make the request, and pass all the received data back to the watch than it is to simply make the request directly on the watch.
NSURLSession on the watch should be made to work as fast as round-tripping to the phone through
WCSession. This would let the watchOS and iOS app use the same API to make network calls and leave the implementation of who is actually performing the network request to the OS.
It would also allow the watch to use the same code path regardless if it were connected to the phone or not.
- Access to iCloud APIs: This is exactly the same as before, but insert “iCloud” everywhere you see
- Content aware Complications: Complications should have an API to determine if they have something interesting to show and allow other complications to take their place if they don’t. For example, my Things complication can go away and be replaced with Streaks once I finish all of my todos for the day. An ESPN complication can be set to only display if one of my favorite teams is playing.
- Third party watch faces: Because why not?
- Reminders app: I’m not sure how they shipped without this one.
Since this one just launched, I don’t have too much I want to ask for here. Most of my requests are more consumer based than developer based.
- API for HDCP: This is needed for third party apps to show copy protected videos on tvOS. I want it so the excellent Channels app would work with all my Cox channels, which would allow me to completely drop my cable box. More info can be found here.
- Picture in Picture: This one seems obvious. Only a matter of time before it happens.
- Push Notifications: Severe weather, sports, and breaking news notifications seem right at home on the TV.
- Handoff > AirPlay: When wanting to play something from my phone on my AppleTV, I should be able to use Handoff instead of AirPlay to send it. AirPlay keeps it coupled to the phone too much.
- Games that require a controller: This was originally announced, but Apple changed their mind before shipping. This would go a long way toward more complex games coming to tvOS.
Siri was looking pretty inadequate in comparison to what Google announced at IO this year and to what Amazon is doing with Alexa and Echo. Fortunately, a well-timed leak to The Information gave the Apple faithful a little bit of hope for WWDC. So here is what we can expect.
For either once of those bullet points to have any real effect on Siri, the service simply has to get faster and more reliable. It has improved quite a bit since launch, so I have at least a little hope that it can continue to get better.
One More Thing
I thought that a fun way to end would be to leave with a semi bold prediction for what we will see next week. So here goes.
I expect Apple to announce their Siri Speaker with some type of Beats co-branding. The main version will include a Time Capsule, camera and cable modem. The camera will be used in part for identifying who is speaking to it. A smaller satellite device similar to the Amazon dot will include a speaker and wifi extender. It will be available late summer, but every WWDC attendee will get a free one at the conference.
I don’t really see all of that happening, but I did say at the top this was a Wish/Guess list. File that squarely in the Wish category.
If you made it down this far, thanks for reading. I will be back early next week with some high level thoughts on the Keynote and State of the Union. Throughout the summer, I will dive deeper into some of the new things that get announced throughout the week.
If anyone reading is going to WWDC next week wants to say hi, ping me on Twitter at @rosskimes.