WWDC 2017 State of the Union TL;DR
4 min readJun 5, 2017
Here is a quick recap of everything we’ve learrned from Apple during the “State of the Union” talk in WWDC 2017. Have fun!
Source Editor
- Rewritten in Swift from scratch
- Built-in markdown editor
- Better fix-its (inline and don’t break formatting)
- 300+ new diagnostics, analyzers and fix-its
- 3x quicker file opening, 60 fps scrolling, 50x line jump
- Tokenizing in code editor from Playgrounds (Hold Cmd while hovering)
- Contextual menu for actions (Tap while tokenizing structure)
- Brand new refactoring system
- Cmd +/- to resize code text
- SDK version availability Fix-it
- Protocol implementation stub fix-its
- “Extract” moves implementation to its own method/let
- Rename/edit in scope
- Global rename/refactor across source code — live update across all slices
- Open Source transformations / actions — new stuff will probably come in from devs
Swift 4
- Strings Are now a Character Collection, act like arrays
- Multi-line string literals with
"""
- One-side ranges and string slicing using subscripting
- Unicode 9 Grapheme Breaking — Unicode support is better (and actually correct as opposed to older versions)
- Codable protocol: Super-super simple way to encode/decode JSON/plist:
try JSONEncoder().encode(Codable)
vstry JSONDecoder.decode(Type.self, from: payload)
- Xcode 9 Swift language Version (3.2 / 4.0) — allows to gradually upgrade to Swift 4
- Build times:Mix and match Swift/Objective-C should be 40% faster
- Whole-Module Optimization should have bettter build time (about 2x) (in theory since Xcode 8.3.2)
Core Technologies
Indexer
- Completely Rearchitectured
- Open quickly x35 faster
- Larget Proejct Search is x50 faster
- Indexing will occur simultaneously while building
Build System — New Build System
- Build operations are x2.5 faster so should be even better with incremental builds
- Opt-in via Workspace Settings
- Will be the default build system soon
Source Control
- Tight integration between GitHub/Github Enterprise with Xcode
- You can see branches/tags/push PRs stragithf rom Xcode to GitHub
- Commit history built in to Xcode
- New “Source Control” tab (second from left after project structure)
- Moving files between groups ACTUALLY FREAKING MOVES THEM
- Create new Remote / New GitHub repo directly from Xcode
- New “Open in Xcode” straight from GitHub.com
Debugging and Analysis
- View Debugger improved for ViewControllers, SpriteKit, SceneKit
- Runtime Sanitizers — Undefined Behaviour & Main Thread Sanitizer
- Enabled from Diagnostics Panel in Run/Test panels (Scheme Editor)
Testing & Continuous Integration
- No need to install Xcode Server, It’s built in to Xcode itself
- UI Testing x3 times faster (or up to x10 faster with new First Match API)
- xcodebuild now runs test on multiple destinations simultaneously
- Simulator supports multiple booted devices
- Redesigned Simulator to look like physical device — so you can actually interact with the physical controls (switches / volume controls)
- Fully resizable Simulator
Wireless Development
- iOS & tvOS devices
- Works with Xcode, Accessibillity Inspector, Instruments and much more
General APIs
Drag & Drop
- Automatic for Text and Web
- Standard API for implementing non-standard drag & drop behaviours
- Generate custom preview for dragged content
- Custom badge for dragged content
- Can work with any type of Data
- In-app Multi Touch (you can perform more actions while dragging / collect more items)
- Completely rewritten app-reordering on Home Screen using the Drag & Drop API
- Collection View and Table View come with built in support using UICollectionViewDragDelegate/UICollectionViewDropDelegate etc
UI Changes
- Large navigation bar with integrated Search Bar (
UINavigationBar.prefersLargeTitles
,UINavigationBar.searchController
) - Automatic Cell Sizing for Dynamic Type size
Files
- Access from new Files App
- New Document Browser can be presented from within your own app with custom actions, type filtering, creating new documents. Also possible to customize appearance of the Document Browser.
- In-app document sharing
Multi-tasking
- Size classes, Auto layout & Default storyboards — If you have those, you are probably already set for the new Multi-tasking APIs
iMessage
- App strip
- Apps inline with transcript
SiriKit
- New domains: Payment accounts, lists, notes, qr codes
- New Simulator Support for iOS & watchOS
MusicKit
- Users can play audio from Apple Music from within your app
Photo and Imaging APIs
- Photos Project Extensions: External provider support built in to Photos.app — Print/Web/etc
- Camera detects QR codes by default — Link ito apps via Universal Links
- HEVC — 2x Compression, hardware accelerated, supports images & videos
- HEIF — Asset container supporting Compound Assets, rich meta data, an ISO standard
- Standard API supports both new formats: ImageIO, Core Image, AVFoundation, PhotoKit
- new
AVAsset.isPlayable
to determine specific device can playback asset - Access to Depth APIs so you can get access to different depth layers and create various layers etc
- Streaming Depth API is similar to the regualr Depth API for a live camera stream
Vision APIs
- Face and Landmark Detection
- Rectangle Detection
- Text detection
- Barcode detection
- Live Object tracking
- Integration between Vision and CoreML allows bringing in your own Machine Learning Models/Classifiers
- Powered by Accelerate and Metal shaders
Core ML
- Converter tool takes model and converst to a MLModel, then can be dropped into Xcode
- Graph optimizations increase performance along other optimizations
Metal
- Many system frameworks are built on top of Metal
- Almost 2 million apps are using Metal through the System Frameworks
- Over 900 million apple products supporting metal
- Metal 2 — Next generation
- GPU Driven Rendering — Reduce load from CPU and handover to GPU for rendering frames
- Platform Feature Alignment — Unified API across macOS, iOS and tvOS that maintains compatibility where possible
- Much much more :)
VR
- With Metal 2 and macOS High Sierra
- Low latency support for Head mounted displays
- SteamVR runtime and SDK for macOS (HTC Vive headset and control supported)
- Unreal Engine & Unity will add macOS VR Support (Early access in September via GitHub for Unreal)
- VR renders at 90 fps, about 10ms per frame available time (need to target 100 FPS)
- Metal 2 will also be supported with an External GPU on MacBook Pro
- Advanced Optimization Tools