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:
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
andNSUUID
attribute types- persistent history API (
NSPersistentHistoryTrackingKey
) for tracking changes made in other processes (e.g. in app extensions)
- better integration with Core Spotlight (
- Core Location:
CLGeocoder
: integration withCNPostalAddress
- precise indoor location will now be available at some malls and airports
- more accurate heading calculation
NSArchiver
andNSUnarchiver
(the ancient unkeyed variants) are deprecatedNSDistributedNotificationCenter
: you don’t need to unsubscribe observersNSError
: newNSLocalizedFailureErrorKey
info keyNSJSONSerialization
: can print keys alphabetically sorted in the JSON dump (NSJSONWritingSortedKeys
)NSLinguisticTagger
: improved API, can detect dominant languageNSURL
: 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 byUIProgressView
orNSProgressIndicator
- request size hints for improved scheduling:
countOfBytesClientExpectsToSend/Receive
- support for Brotli content encoding
- adaptable connectivity API (
NSXPCConnection
: support forNSProgress
- 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 globalprint()
, 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
orfirstResponder
that were previouslyassign
(unowned(unsafe)
in Swift) are nowweak
- some methods named
- 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 alertsNSGroupTouchBarItem
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
)
- accessing depth map of captured images (
- 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 inUITableView
- 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 linksNSApplication
:- new
application(_:open:)
callback for opening files and URLs (replaces oldNSAppleEventManager
based API)
- new
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
- a new set of system colors like
NSCollectionView
:- prefetching like on iOS
NSDocumentController
:- new “Share” submenu that you can show in the File menu (
allowsAutomaticShareMenu
,standardShareMenuItem
)
- new “Share” submenu that you can show in the File menu (
NSFontAssetRequest
for asynchonous downloading of missing system fontsNSLevelIndicator
:- new look, styles and configuration options, value can be animated
NSMenuItem
:allowsKeyEquivalentWhenHidden
NSResponder
:- encoding restorable state can be done asynchronously (
encodeRestorableState(with:backgroundQueue:)
)
- encoding restorable state can be done asynchronously (
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 headingssearchController
andhidesSearchBarWhenScrolling
to handle the search field
- layout system changes:
UIView
:- views now have “safe area insets” (
safeAreaInsets
,safeAreaLayoutGuide
,insetsLayoutMarginsFromSafeArea
) - added
directionalLayoutMargins
for RTL languages
- views now have “safe area insets” (
UIViewController
:- added
safeAreaLayoutGuide
andadditionalSafeAreaInsets
- added
systemMinimumLayoutMargins
andviewRespectsSystemMinimumLayoutMargins
preferredScreenEdgesDeferringSystemGestures
defines from which edges user can swipe in system panelstopLayoutGuide
,bottomLayoutGuide
andautomaticallyAdjustsScrollViewInsets
are deprecated
- added
UIScrollView
:- added
adjustedContentInset
andcontentInsetAdjustmentBehavior
- added
frameLayoutGuide
andcontentLayoutGuide
layout guides
- added
UITableView
:separatorInsetReference
(.fromCellEdges
or.fromAutomaticInsets
)
- Dynamic Type improvements:
UIFontMetrics
allows you to scale custom fonts and e.g. button sizes depending on Dynamic Type settingsconstraintEqualToSystemSpacing(below/after:)
for defining distance constraints that properly scalespacingBaselineToBaseline
option for visual format languagespacingUseSystem
forUIStackView
- 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
inCIImage
) 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
)
- new health data types like waist circumference or insulin levels (
- 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” shapeMKAnnotationView.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 inUITableView
- Metal 2:
- better performance, machine learning support, debugging & profiling tools, more unified API
- SafariServices:
SFAuthenticationSession
- a simplified browser made specifically for OAuth-style authenticationSFSafariViewController
:- 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 optionallyNSLocationAlwaysAndWhenInUseUsageDescription
- 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
- you can ask for write-only support to only save photos (
UIKit updates:
ProcessInfo.ThermalState
API from macOSUIBarButtonItem
: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 inUICollectionView
- configurable leading/trailing swipe actions (
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 macOSNSXPCConnection
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
)
- new health data types like waist circumference or insulin levels (
- 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 themselvesisFrontmostTimeoutExtended
- 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
)
- support for vertically scrolled pages (
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 macOSProcessInfo.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” shapeMKAnnotationView.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 inUITableView
- 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
hasunicodeScalars
- string slices now have a new type
Substring
(shares most functionality withString
viaStringProtocol
)
- easier to use (e.g. it’s a collection again - no need to call
Dictionary
andSet
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 pathsNSRange
to/fromSwift.Range
conversionobserve(keyPath) { observed, change in ... }
- block-based KVOprivate
properties/methods are accessible from extensions in the same filewhere
constraints forassociatedtype
@objc
now needs to be added explicitly in most casesMutableCollection.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
andunless-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
4 comments:
Ben Dodson
Fantastic resource! Only thing I think is missing is the ability to "scan" documents using the camera within Notes on iOS (which can then do OCR)
TaviRider
There's also some features from the device management talk: Tethered caching, a new way to enroll devices in DEP, and a major update to Apple School Manager.
Donald Pinckney
One other thing:
For macOS, High Sierra adds a “View -> show all tabs” menu item. This feature existed previously in Safari only, but now works for any app with window tabs, except for Finder.
Gary
"App Store & iTunes Connect >> application icon for App Store will now be distributed in the asset catalog in the binary" should probably also be mentioned as "Developer tools >> Xcode 9 >> asset catalogs >> an iOS Marketing 1024pt icon". (Thank you for an excellent compilation!)