New stuff from WWDC 2017
It’s that time of the year again - if you’re like me, you’ve probably spent a lot of time in the last few weeks following everything that’s been announced at WWDC, digging into release notes, watching WWDC talks and playing with some cool new stuff. And as usually, the amount of new things to process is pretty overwhelming.
So like in the last two years, I’ve prepared a nicely organized list for you of all the things I could find from various sources: all the user-facing features in macOS/iOS/watchOS/tvOS, and all new frameworks, APIs and improvements in their respective SDKs and Apple’s developer tools.
To get more info about any specific thing, follow the links above the sections to Apple’s developer site and the “What’s New” documentation, download the release notes from developer.apple.com, and of course use the freshly redesigned unofficial WWDC Mac app to watch the talks that you’re interested in.
If you want to catch up on last year’s notes (e.g. to see what you can use if you drop iOS 9 support in your app), check out these posts:
WWDC 2016 WWDC 2015
Quick links:
macOS 10.13 • iOS 11 • watchOS 4 • tvOS 11
Foundation & Core Frameworks • macOS 10.13 SDK • iOS 11 SDK • watchOS 4 SDK • tvOS 11 SDK
Developer Tools • Safari 11 • Other
macOS 10.13 High Sierra
🗄️ https://www.apple.com/macos/high-sierra/
Mail:
smart highlight of important emails split view for compose window uses less disk space
Messages: syncs conversations through iCloud between iOS/macOS (end-to-end encrypted) Notes:
pinning notes support for tables
Photos:
persistent sidebar shows all imports chronologically improved face recognition synchronizes people across devices curves and selective color edit tools more partners for printing photos more available topics for memories photos can be edited in 3rd party apps and are saved back into Photos app playing animated GIFs live photo effects
Safari:
video autoplay blocking intelligent tracking prevention per-site settings (e.g. enabling autoplay or disabling content blockers on some sites) automatic reader mode
Spotlight can find more kinds of web results, e.g. flight info, and can return multiple results from Wikipedia smoother, more natural sounding Siri voice window server (Mission Control etc.) is built on top of Metal 2 APFS is the new default filesystem for new installations H.265 (HEVC) video support, with hardware acceleration in newest Macs accessibility:
new on-screen accessibility keyboard Type to Siri (disables voice interface) voiceover descriptions of images will now include automatic description of the image contents and any detected text
iOS 11
🗄️ https://www.apple.com/ios/ios-11/
redesigned control center
single page, animations more controls shown with 3D Touch some areas can be customized allows you to toggle e.g. cellular data, hotspot, AirDrop
new design for app switcher:
new animation no longer shows the home screen as the first app
older notifications accessible from the lock screen (top notifications panel is now the same as lock screen) apps in the dock on the home screen no longer show their names updated design of passcode screen, phone app number entry screen and numeric keyboard tab bars now use slightly bolder text and filled glyphs in landscape mode, tab bars are narrower and show labels on the right new header design in various apps with large bold headings (like Music app in iOS 10) drag & drop with multi-touch support
in-app on iPhone, on iPad also between apps
Files app - like Finder on iOS, with tags, favorites, nested folders, cloud storage etc. (replaces iCloud Drive app) Apple Music:
shared “up next” showing what friends are listening to configuring your profile and what should be shared with others
App Store: completely redesigned app Calculator: new design Camera: QR code support Home: support for speakers (multi-room audio - AirPlay 2), sprinklers and faucets, pairing using NFC & QR codes Maps:
floor plans for malls and airports showing speed limit lane guidance one-handed zoom (like in Google Maps - double-tap + drag up/down) pseudo-AR flyover mode (source)
Messages:
redesigned app drawer Digital Touch moved to the app drawer automatically syncing conversations between iOS/macOS (end-to-end encrypted) Apple Pay for person-to-person payments new “Echo” and “Spotlight” screen effects option to automatically delete old conversations
Notes:
pinning notes locking notes from the list screen (swipe action) support for tables selecting lines/grid style (source) inline drawings
Photos:
more available topics for memories memories can play in portrait mode playing animated GIFs trimming live photos selecting key frame for live photos live photo effects: loops, bouncing, mute, long exposure live photos with loop or bounce can be shared as GIFs option to easily create a watch face (photo or kaleidoscope) from any photo on iOS videos are saved in HEVC format (up to 2x compression), photos in HEIF format based on HEVC (same) “Edit” button moved back to the top-right like on iOS 9
Podcasts: new design Safari:
intelligent tracking prevention “Experimental Features” menu in settings that enables some unfinished new APIs option to disable tracking prevention and camera/microphone access
Settings:
Background App Refresh can be set to only work on WiFi connection new “Accounts and passwords” panel (extracted from “Mail” and “Safari”) redesigned “Storage and iCloud Usage” panel (as “iPhone Storage”) merged “General/Spotlight Search” into “Siri” panel reorganized “Notifications” section you can now always choose “While Using” location permission for any app “Shut Down” button in General menu removed system-level social network logins (Twitter, Facebook etc.)
Siri:
smoother, more natural sounding voice multiple results, follow-up questions translation (beta) - English to French, German, Italian, Spanish, Chinese
Siri Intelligence:
more kinds of suggestions in more places knowledge about you is synced across devices (end-to-end encrypted)
TV app: Amazon Prime will be added later this year accessibility:
“Smart Invert” mode “Type to Siri” option (disables the voice interface) option to automatically answer calls voiceover descriptions of images will now include automatic description of the image contents and any detected text in extra large text modes, long-pressing a tab in the tab bar shows a popup with enlarged tab image & label
Do Not Disturb while driving - automatically detects driving and turns off notifications Emergency SOS feature (press power button 5 times and slide a slider) automatic setup of new iPhones from an existing device configuring custom actions for AirPods requesting WiFi password from other devices nearby logging in to WiFi by scanning a QR code built-in document scanner screen recording (accessed from the control center) creating PDFs in apps that support printing markup (drawing) on PDFs, screenshots and scanned documents after taking a screenshot, a thumbnail appears in the corner and you can tap it to edit it, add markup and share it new video playback controls bars instead of dots for cell signal one-handed keyboard option (with more narrow keys, leaving some empty space on one side) option to automatically remove less used apps and restore when needed health data can be synced to iCloud FLAC audio support (?) new icons for App Store, iTunes Store, Calculator, Contacts, Reminders and Notes App Store shows info pages for iPad and Mac apps (might be a bug?) App Store shows an ApplePay-style sheet when buying paid apps different animation when launching an app from the home screen different animation when unlocking the device links highlighted in notification text? (source) easier opening of notifications on non-3D-Touch devices? (source) drops support for iPhone 5 & 5c and iPad 4 drops support for old 32-bit apps
iPad only
redesigned app dock
more Mac-like design you can slide it up while inside an app an app can be dragged from the dock to slide-over access to recently used files in an app shows handoff / suggested apps on the right (can be disabled)
new design for slide-over newer iPads can show 2 apps in split view and a third one in slide over (and fourth one in PiP?) PiP window is fluently scalable (source) new design for app switcher:
preserves split-view app pairings and looks kind of like Mission Control merged with the control center
swipe up on keys to access punctuation/digits taking screenshots with keyboard shortcuts (Cmd-Shift-3/Cmd-Shift-4) tapping the pencil on the screen opens Notes app with a new note, or a previously open note within some period of time handwriting recognition & indexing (not sure if iPad only?) flashlight in the control center (source)
watchOS 4
🗄️ https://www.apple.com/watchos/
Siri watch face Kaleidoscope watch face Toy Story watch faces News app dock improvements:
new vertical design you can choose between favorites mode (like before) or recents (like on iOS) automatically shows ‘Now Playing’ as the frontmost app when you play music on the iPhone
home screen can be displayed as an alphabetically sorted list of apps instead of the hex grid you can now scroll through configured watch faces using the crown while in edit mode flashlight / safety light in the control center new UI for pairing with the iPhone updated passcode screen (bolder digits, animation, clicks) enabling location services in Settings in some apps the screen will now autorotate upside down when you show the watch to someone else Activity: personalized notifications with challenges, goals, celebrations etc. Heartrate: history chart Mail: gestures (?) Maps: suggestions, recents Music:
redesigned UI automatically syncs music that you like shows the source of music (iPhone/watch) you can upload specific music to the watch
Phone: keypad for entering a number manually (also during the call) Timer: repeat button when a timer finishes Weather: air quality (?) Workouts:
new UI - simpler to start a workout each type of workout remembers the last goal settings easier to do multiple workouts in one session ability to control music from the app automatically turns on Do Not Disturb option to automatically start playing a playlist improved Pool Swim workout High Intensity Interval Training
integration with some gym equipment via NFC Core Bluetooth for communication with various sensors and sports devices, e.g. a glucose sensor Apple Pay for person-to-person payments more capable camera control (?)
tvOS 11
Home Screen Sync - synchronizes installed apps and home screen layout across multiple Apple TVs automatic dark mode - switches mode automatically based on time of day AirPlay 2 - multi-room audio support AirPods now automatically pair with your Apple TV TV app: Amazon Prime will be added later this year
Foundation & Core Frameworks
https://developer.apple.com/library/content/releasenotes/Foundation/RN-Foundation/index.html
Core Data:
better integration with Core Spotlight (NSCoreDataSpotlightDelegate) new indexing API (NSFetchIndexDescription, NSFetchIndexElementDescription, R-tree indexes) the com.apple.CoreData.SQLDebug environment variable enables SQL query plan debugging when set to 4 NSURL and NSUUID attribute types persistent history API (NSPersistentHistoryTrackingKey) for tracking changes made in other processes (e.g. in app extensions)
Core Location:
CLGeocoder: integration with CNPostalAddress precise indoor location will now be available at some malls and airports more accurate heading calculation
NSArchiver and NSUnarchiver (the ancient unkeyed variants) are deprecated NSDistributedNotificationCenter: you don’t need to unsubscribe observers NSError: new NSLocalizedFailureErrorKey info key NSJSONSerialization: can print keys alphabetically sorted in the JSON dump (NSJSONWritingSortedKeys) NSLinguisticTagger: improved API, can detect dominant language NSURL: checking how much free space could be made available (volumeAvailableCapacityForImportant/OpportunisticUsage) NSURLSession:
adaptable connectivity API (waitsForConnectivity) scheduling API (earliestBeginDate) progress tracking (ProgressReporting), can be used by UIProgressView or NSProgressIndicator request size hints for improved scheduling: countOfBytesClientExpectsToSend/Receive support for Brotli content encoding
NSXPCConnection: support for NSProgress some random existing APIs now have variants with error handling or that take URLs instead of strings
macOS 10.13 SDK
🗄️ https://developer.apple.com/macos/ 🗄️ https://developer.apple.com/metal/ 🗄️ https://developer.apple.com/machine-learning/ https://developer.apple.com/library/content/releasenotes/MacOSX/WhatsNewInOSX/Articles/macOS_10_13_0.html https://developer.apple.com/library/content/releasenotes/AppKit/RN-AppKit/index.html http://codeworkshop.net/objc-diff/sdkdiffs/macos/10.13/
General:
API refinements for Swift compatibility:
some methods named print renamed to avoid conflict with global print(), e.g. printView, printWindow some global constants moved to strongly-typed class properties, e.g. NSSharingService.composeEmail nullability fixes in some classes ObjC class properties like NSApplication.shared some properties like contentView or firstResponder that were previously assign (unowned(unsafe) in Swift) are now weak
iCloud document sharing
comes for free for NSDocument apps NSDocument.share, allowsDocumentSharing
Touch Bar API improvements:
new color picker controls NSGroupTouchBarItem option to use the same button style as system alerts NSGroupTouchBarItem option to set compression preference for when there isn’t enough space support for RTL languages Touch Bar renders inside playgrounds
support for HEVC and HEIF
New frameworks:
Core ML framework - machine learning Core Spotlight from iOS now available on the Mac Photo Project extension (PHProjectExtensionController) - creating custom print projects or web galleries etc. Vision framework - image analysis and recognition
Framework updates:
AirPlay 2:
multi-room audio support
Core Image:
accessing depth map of captured images (kCIImageAuxiliaryDepth)
MapKit:
new “muted” map type MKAnnotationView.displayPriority for specifying which map annotations are more important annotation clustering (MKAnnotationView.clusteringIdentifier, .collisionMode, MKClusterAnnotation) MKMapView.dequeueReusableAnnotationView(withIdentifier:for:) - a variant that always returns an annotation, like in UITableView
Metal 2:
better performance and new APIs debugging and profiling tools support for machine learning APIs for accessing external graphics cards VR support (Steam, Unity and Unreal VR SDKs coming to the Mac)
WebKit:
WKWebView: new APIs for custom URL schemes, cookie management, snapshots and content filtering
AppKit updates:
NSAccessibilityCustomRotor - provides a list of things to select for the user, e.g. sections or links NSApplication:
new application(_:open:) callback for opening files and URLs (replaces old NSAppleEventManager based API)
NSButton:
contents can be animated through the animator proxy
NSColor:
a new set of system colors like systemBlue standard colors like NSColor.red now use the sRGB profile NSColor(named: …) for loading colors from asset catalogs
NSCollectionView:
prefetching like on iOS
NSDocumentController:
new “Share” submenu that you can show in the File menu (allowsAutomaticShareMenu, standardShareMenuItem)
NSFontAssetRequest for asynchonous downloading of missing system fonts NSLevelIndicator:
new look, styles and configuration options, value can be animated
NSMenuItem:
allowsKeyEquivalentWhenHidden
NSResponder:
encoding restorable state can be done asynchronously (encodeRestorableState(with:backgroundQueue:))
NSSegmentedControl:
alignment and distribution properties
NSTableView:
uses self-sizing rows by default (using AutoLayout)
NSWindowTab:
more options for customizing tabs like title, tooltip or accessory view
Deprecations:
NSDrawer 😢 (screenshot for the youngsters) system-level social network logins (Twitter, Facebook etc. - Accounts framework) are deprecated High Sierra is the last release with full support for 32-bit apps
new apps submitted to MAS will require 64-bit support since January 2018 since June 2018 all apps (new & updates) will have to be 64-bit only
iOS 11 SDK
🗄️ https://developer.apple.com/ios/ 🗄️ https://developer.apple.com/ipad/ 🗄️ https://developer.apple.com/ios/drag-and-drop/ 🗄️ https://developer.apple.com/document-based-apps/ 🗄️ https://developer.apple.com/machine-learning/ 🗄️ https://developer.apple.com/arkit/ 🗄️ https://developer.apple.com/ios/human-interface-guidelines/overview/whats-new/ https://developer.apple.com/library/archive/releasenotes/General/WhatsNewIniOS/Articles/iOS_11_0.html http://codeworkshop.net/objc-diff/sdkdiffs/ios/11.0/
General:
view controllers can now display a standard large title heading at the top with an optional search field
prefersLargeTitles, largeTitleDisplayMode to handle the headings searchController and hidesSearchBarWhenScrolling to handle the search field
layout system changes:
UIView:
views now have “safe area insets” (safeAreaInsets, safeAreaLayoutGuide, insetsLayoutMarginsFromSafeArea) added directionalLayoutMargins for RTL languages
UIViewController:
added safeAreaLayoutGuide and additionalSafeAreaInsets added systemMinimumLayoutMargins and viewRespectsSystemMinimumLayoutMargins preferredScreenEdgesDeferringSystemGestures defines from which edges user can swipe in system panels topLayoutGuide, bottomLayoutGuide and automaticallyAdjustsScrollViewInsets are deprecated
UIScrollView:
added adjustedContentInset and contentInsetAdjustmentBehavior added frameLayoutGuide and contentLayoutGuide layout guides
UITableView:
separatorInsetReference (.fromCellEdges or .fromAutomaticInsets)
Dynamic Type improvements:
UIFontMetrics allows you to scale custom fonts and e.g. button sizes depending on Dynamic Type settings constraintEqualToSystemSpacing(below/after:) for defining distance constraints that properly scale spacingBaselineToBaseline option for visual format language spacingUseSystem for UIStackView
new APIs for drag & drop iCloud Keychain password autofill for apps iCloud document sharing new NFC access permission (+ NFCReaderUsageDescription) support for HEVC and HEIF accessing depth map of captured images (kCIImageAuxiliaryDepth in CIImage) and video (AVDepthData)
New frameworks:
ARKit for easy building of AR-enabled apps (iPhone 6s or newer / iPad Pro or newer) Core ML framework - machine learning Core NFC - for reading NFC tags DeviceCheck framework - setting flags for a device that persist after system reinstall FileProvider framework - new API for file provider extensions IdentityLookup - for building Message Filter extensions that filter incoming SMS from unknown senders IOSurface - framebuffer framework from macOS MusicKit - for accessing user’s Apple Music library NSXPCConnection from macOS PDFKit for displaying PDFs inside apps Quick Look Preview extension (QLPreviewingController) Thumbnail extension (QLThumbnailProvider) Vision framework - image analysis and recognition
Framework updates:
AirPlay 2:
multi-room audio support
HealthKit:
new health data types like waist circumference or insulin levels (HKQuantityTypeIdentifier) new workout types like tai chi or mixed cardio (HKWorkoutActivityType) workout apps can mark workout segments (HKWorkoutEventType.segment) workout apps can read and write user’s workout routes (HKWorkoutRoute)
MapKit:
new “muted” map type map controls can now be used separately from the map as normal views, and are RTL-aware MKMarkerAnnotationView: new default annotation view with a “marker” shape MKAnnotationView.displayPriority for specifying which map annotations are more important annotation clustering (MKAnnotationView.clusteringIdentifier, .collisionMode, MKClusterAnnotation) MKMapView.dequeueReusableAnnotationView(withIdentifier:for:) - a variant that always returns an annotation, like in UITableView
Metal 2:
better performance, machine learning support, debugging & profiling tools, more unified API
SafariServices:
SFAuthenticationSession - a simplified browser made specifically for OAuth-style authentication SFSafariViewController:
some additional configuration options Safari and other apps now get separate containers for cookies and website data clearing website data in Safari also clears it in apps
SiriKit:
new Lists and Notes domain (creating and managing todo lists, notes and reminders) new Visual Codes domain (displaying QR codes for payments or exchanging contact info) some additions to Ride Booking and Payments
WebKit:
WKWebView: new APIs for custom URL schemes, cookie management, snapshots and content filtering
location access:
some changes in how location access is displayed to the user (the arrow icon and the blue bar) users can now always choose “While Using”, you need to be able to handle that apps must include NSLocationWhenInUseUsageDescription and optionally NSLocationAlwaysAndWhenInUseUsageDescription
photo access:
you can ask for write-only support to only save photos (NSPhotoLibraryAddUsageDescription) you can use UIImagePickerController to ask the user to choose a single photo without getting access to the whole library
UIKit updates:
ProcessInfo.ThermalState API from macOS UIBarButtonItem:
customView can now determine its size using AutoLayout
UIBarItem:
largeContentSizeImage - image to be shown in an accessibility HUD when long-pressing a tab bar icon
UIDocumentBrowserViewController - a new UI for browsing app files (local and in the cloud) UINavigationItem:
titleView can now determine its size using AutoLayout
UIScreen:
maximumFramesPerSecond to support ProMotion on new iPads
UIStackView:
setCustomSpacing(after:)
UITabBar:
tab bars now use slightly bolder text and filled glyphs in landscape mode, tab bars are narrower and show labels on the right in extra large text modes, long-pressing a tab shows a popup with enlarged tab image & label (it’s recommended to provide a large version of the icon or a vector image)
UITableView:
configurable leading/trailing swipe actions (UISwipeActionsConfiguration, UIContextualAction) uses AutoLayout self-sizing for cells and header/footer views by default performBatchUpdates(_:completion:) like in UICollectionView
Deprecations:
system-level social network logins (Twitter, Facebook etc. - Accounts framework) are deprecated dropped support for 32-bit apps (apps with iOS 11 deployment target should be 64-bit only)
watchOS 4 SDK
🗄️ https://developer.apple.com/watchos/ https://developer.apple.com/library/archive/releasenotes/General/WhatsNewInwatchOS/Articles/watchOS_4_0.html http://codeworkshop.net/objc-diff/sdkdiffs/watchos/4.0/
General:
single-process runtime - the UI and the app code will now run in a single process, improving performance apps that use location can now ask for location access directly on the watch SpriteKit and SceneKit views can be shown in full screen mode (though the time will still be shown in the corner) inline audio recording - using your custom controls, not a system dialog background audio recording mode (shows a microphone indicator) background location tracking mode for non-workout apps (shows a location icon)
New frameworks:
Core Bluetooth Core ML framework - machine learning ProcessInfo.ThermalState API from macOS NSXPCConnection from macOS
Framework updates:
HealthKit:
new health data types like waist circumference or insulin levels (HKQuantityTypeIdentifier) new workout types like tai chi or mixed cardio (HKWorkoutActivityType) workout apps can mark workout segments (HKWorkoutEventType.segment) workout apps can read and write user’s workout routes (HKWorkoutRoute) workout apps can respond to a new “hardware pause” gesture triggered by pressing crown + side button together (HKWorkoutEventType.pauseOrResumeRequest)
SiriKit:
new Lists and Notes domain (creating and managing todo lists, notes and reminders) new Visual Codes domain (displaying QR codes for payments or exchanging contact info) some additions to Ride Booking and Payments
WatchKit updates:
WKExtension:
enableWaterLock - for implementing in-app water lock buttons (only workout apps and location tracking apps) isAutorotating - auto-rotate feature for when the user turns the wrist away from themselves isFrontmostTimeoutExtended - lets you ask the system to extend the time during which the app is kept on the screen to 8 minutes (in watchOS 3.2 the default timeout was changed to 2 minutes)
WKInterfaceController:
support for vertically scrolled pages (WKPageOrientation.vertical) starting a paged interface on a selected page (pageIndex parameter) scrolling the list to a specific position (scroll(to:at:animated:)) callbacks on scrolling events (interfaceOffsetDidScrollToTop/Bottom, interfaceDidScrollToTop)
WKInterfaceGroup:
groups can now have an ‘overlap’ layout
WKSnapshotRefreshBackgroundTask:
reasonForSnapshot - tells you why a snapshot was requested
tvOS 11 SDK
🗄️ https://developer.apple.com/tvos/ https://developer.apple.com/library/archive/releasenotes/General/WhatsNewinTVOS/Articles/tvOS_11_0.html
General:
apps can be woken up in the background using silent notifications on-demand resource bundle size limit increased to 4 GB support for HEVC and HEIF
New frameworks:
Core ML framework - machine learning IOSurface - framebuffer framework from macOS NSXPCConnection from macOS ProcessInfo.ThermalState API from macOS Vision framework - image analysis and recognition
Framework updates:
AirPlay 2 - multi-room audio support Core Image: accessing depth map of captured images (kCIImageAuxiliaryDepth) MapKit:
new “muted” map type map scale control can now be used separately from the map as a normal view MKMarkerAnnotationView: new default annotation view with a “marker” shape MKAnnotationView.displayPriority for specifying which map annotations are more important annotation clustering (MKAnnotationView.clusteringIdentifier, .collisionMode, MKClusterAnnotation) MKMapView.dequeueReusableAnnotationView(withIdentifier:for:) - a variant that always returns an annotation, like in UITableView
Metal 2 - better performance, machine learning support, debugging & profiling tools, more unified API
UI updates:
UIFontMetrics and autolayout additions for better font scaling (see iOS) TVML templates TVML support in Web Inspector RTL language support
Developer tools
Xcode 9
🗄️ https://developer.apple.com/xcode/ https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/WhatsNewXcode/xcode_9/xcode_9.html
completely rewritten source editor
written in Swift much faster more options for font configuration choose one of 3 cursors (vertical, horizontal and block) Cmd-+ enlarges text floating issue bubbles that don’t push down your code, can apply multiple fix-its with one click
brand new refactoring system:
supports C, ObjC, C++ and Swift hovering over code highlights a fragment, clicking lets you apply transformations/refactoring like various extractions mass rename in all files you can assign keyboard shortcuts engine will be open sourced, Xcode will automatically import transformations built by you
much faster indexer
“open quickly” up to 35x faster search up to 50x faster
a new build system (opt-in preview)
written in Swift up to 2.5x faster incremental builds faster building of mixed ObjC/Swift projects faster code coverage testing can keep indexing during a build
includes Swift 3.2 and 4.0
Swift version can be chosen per target, a single app can include modules built with both versions
integrated Markdown editor integration with GitHub:
repo search & cloning workflow pushing projects to create a new repo “open in Xcode” on the github.com new source control navigator
the Accounts panel in Preferences no longer shows a list of known git repositories simulator improvements:
multiple simulators can run in parallel simulator now has a device bezel again (removed in Xcode 6?) you can press hardware buttons like the power button support for edge swipes fluently rescalable (changes the scale, not the resolution) recording videos of simulators (?) system-wide share extension for sending things to the simulator (e.g. photos/videos, map locations, URLs, apps)
wireless debugging - running apps on devices remotely through WiFi or Ethernet
also supported in Quicktime, Safari Inspector, Console etc.
Xcode will now keep folder-group sync when moving files runtime sanitizers:
Main Thread Checker detects UI access from background threads Undefined Behavior Sanitizer detects undefined behavior bugs in C/ObjC improvements to Address and Thread Sanitizer
view debugger improvements:
shows view controllers as part of the hierarchy understands SceneKit and SpriteKit scenes
the Crashes Organizer will symbolicate unsymbolicated logs when selected using local .dSYMs indexed by Spotlight improved search in the documentation browser Xcode server (CI) is now built into Xcode multiple copies of Xcode can run in parallel (but only >= 9) test improvements:
UI tests can now branch into multiple apps 3-10x faster UI tests new UI testing APIs (e.g. XCUIScreen.screenshot()) test builds can run on multiple devices in parallel (using xcodebuild)
signing for distribution: automatic signing and more customizable manual signing asset catalogs:
colors can be added to asset catalogs app thinning for app icons asset catalogs can contain images in PDF format with a “preserve vector data” option which ships the vector form with the app, which can be used for scaling the icon to larger sizes in various contexts support for HEVC and HEIF assets
fix-it for Swift that adds all methods required by a protocol 300+ new diagnostics, analyzers and fixits new “Strip Swift Symbols” build setting that strips Swift symbols from the binary, reducing its size (enabled by default) when a constraint is selected in IB, you can change the elements it’s pointing to and the constant will be updated improved template macro system (?)
Swift 4
🗄️ https://developer.apple.com/swift/
reduced binary size better, more predictable performance needs some migration, but very little String improvements:
easier to use (e.g. it’s a collection again - no need to call .characters, simpler slicing) better performance more correct unicode support (e.g. handling emoji) multi-line string literals ("""...""") Character has unicodeScalars string slices now have a new type Substring (shares most functionality with String via StringProtocol)
Dictionary and Set improvements:
creating a dictionary from a sequence of key-value pairs filtering dictionaries and sets into a value of the same type mapping dictionary values into a new dictionary grouping sequences into a dictionary Dictionary subscript with a default value (that can be assigned through)
Codable - new API for encoding/decoding e.g. from JSON \Person.name - new strongly typed key paths NSRange to/from Swift.Range conversion observe(keyPath) { observed, change in ... } - block-based KVO private properties/methods are accessible from extensions in the same file where constraints for associatedtype @objc now needs to be added explicitly in most cases MutableCollection.swapAt(x, y) partial ranges (5..., ...5) generic subscripts (both parameters and return value can be generic) combining class and protocol requirements: var x: UIView & Animatable exclusive access to memory - compiler and runtime checks for incorrectly accessing a value that is being modified in another place various improvements to Swift Package Manager
ObjC
detecting usage of APIs newer than the deployment target like in Swift (@available)
App Store & iTunes Connect
🗄️ https://developer.apple.com/app-store/ 🗄️ https://developer.apple.com/app-store/whats-new/ 🗄️ https://developer.apple.com/app-store/product-page/
application icon for App Store will now be distributed in the asset catalog in the binary application name limited to 30 characters new subtitle field below the app name (also 30 chars) description will now be only be editable when submitting a new version new promotional text field (170 chars) - shown at the beginning of description, can be edited at any time up to 3 app preview videos, previews will autoplay (but without audio) phased releases - users with automatic downloads will get the app gradually over one week in-app purchases can be promoted on the App Store separately from the app ratings are no longer automatically reset after every update (though you can reset them manually) it’s strongly recommended (though not strictly required yet) to only use SKStoreReviewController to ask for reviews (1.1.7) programming IDEs that download executable code are now allowed on the App Store with some conditions (2.5.2) TestFlight external tester limit will be raised to 10K
Safari
Media Capture API (camera and microphone access) WebAssembly WebRTC support for CSS stroke support for variable fonts drag & drop events WebCrypto API updates if-top-url and unless-top-url rules in content blockers support for Brotli content encoding
Other
Swift Playgrounds 2.0:
hosted feeds of playground content with a subscription model supports Swift 4 and iOS 11 SDK, camera and AR APIs integrated documentation 8 new localizations
Business Chat (preview) - a service for companies to let your customers contact you via iMessage HomeKit protocol is now open to everyone for free (for non-commercial purposes) an iCloud storage plan can be shared with the whole family
Discussion in the ATmosphere