WWDC 2017 State of the Union TL;DR

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

  • 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

  • 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) vs try 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

  • Open quickly x35 faster
  • Larget Proejct Search is x50 faster
  • Indexing will occur simultaneously while building

Build System — New Build System

  • Opt-in via Workspace Settings
  • Will be the default build system soon

Source Control

  • 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

  • Runtime Sanitizers — Undefined Behaviour & Main Thread Sanitizer
  • Enabled from Diagnostics Panel in Run/Test panels (Scheme Editor)

Testing & Continuous Integration

  • 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

  • Works with Xcode, Accessibillity Inspector, Instruments and much more

General APIs

Drag & Drop

  • 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

  • Automatic Cell Sizing for Dynamic Type size

Files

  • 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

iMessage

  • Apps inline with transcript

SiriKit

  • New Simulator Support for iOS & watchOS

MusicKit

Photo and Imaging APIs

  • 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

  • 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

  • Graph optimizations increase performance along other optimizations

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

  • 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

iOS Tech Lead @ Gett 🚕 RxSwift & RxSwiftCommunity core contributor. International speaker and worldwide hackathon winner. Fiddling with tech for a living. 🤓