MacKuba

Kuba Suder's blog on iOS & Mac development

New stuff from WWDC 2017

Categories: Cocoa, Mac, iPhone 4 comments

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:


macOS 10.13 High Sierra

https://www.apple.com/macos/high-sierra-preview/

  • 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-preview/

  • 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 App Store, iTunes Store and Calculator icons
  • 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-preview/

  • 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 4

  • 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 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

  • 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
  • AirPlay 2 – multi-room audio support
  • Core ML framework – machine learning
  • Core Spotlight from iOS now available on the Mac
  • 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)
  • Photo Project extension (PHProjectExtensionController) – creating custom print projects or web galleries etc.
  • Vision framework – image analysis and recognition
  • 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
  • NSDrawer – deprecated :(
  • NSFontAssetRequest for asynchonous downloading of missing system fonts
  • NSLevelIndicator: new look, styles and configuration options, value can be animated
  • NSMenuItem: allowsKeyEquivalentWhenHidden
  • 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
  • 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
  • WKWebView: new APIs for custom URL schemes, cookie management, snapshots and content filtering
  • 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
  • new “Share” submenu that you can show in the File menu (NSDocumentController.allowsAutomaticShareMenu, standardShareMenuItem)
  • encoding restorable state can be done asynchronously (encodeRestorableState(with:backgroundQueue:))
  • 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
  • system-level social network logins (Twitter, Facebook etc. – Accounts framework) are deprecated

iOS 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/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS_11_0.html

  • 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
  • AirPlay 2 – multi-room audio support
  • 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
  • Metal 2 – better performance, machine learning support, debugging & profiling tools, more unified API
  • MusicKit – for accessing user’s Apple Music library
  • NSXPCConnection from macOS
  • PDFKit for displaying PDFs inside apps
  • ProcessInfo.ThermalState API from macOS
  • Quick Look Preview extension (QLPreviewingController)
  • Thumbnail extension (QLThumbnailProvider)
  • Vision framework – image analysis and recognition
  • 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 and UIBarButtonItem.customView can now determine their 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
  • 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
  • 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
  • WKWebView: new APIs for custom URL schemes, cookie management, snapshots and content filtering
  • iCloud Keychain password autofill for apps
  • iCloud document sharing
  • new NFC access permission (+ NFCReaderUsageDescription)
  • 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
  • support for HEVC and HEIF
  • accessing depth map of captured images (kCIImageAuxiliaryDepth in CIImage) and video (AVDepthData)
  • 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 SDK

https://developer.apple.com/watchos/
https://developer.apple.com/library/content/releasenotes/General/WhatsNewInwatchOS/Articles/watchOS_4_0.html

  • Core Bluetooth
  • Core ML framework – machine learning
  • ProcessInfo.ThermalState API from macOS
  • NSXPCConnection from macOS
  • 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
  • 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
  • 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)

tvOS SDK

https://developer.apple.com/tvos/
https://developer.apple.com/library/content/releasenotes/General/WhatsNewinTVOS/Articles/tvOS_11_0.html

  • AirPlay 2 – multi-room audio support
  • Core ML framework – machine learning
  • IOSurface – framebuffer framework from macOS
  • Metal 2 – better performance, machine learning support, debugging & profiling tools, more unified API
  • NSXPCConnection from macOS
  • ProcessInfo.ThermalState API from macOS
  • Vision framework – image analysis and recognition
  • 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
  • UIFontMetrics and autolayout additions for better font scaling (see iOS)
  • TVML templates
  • TVML support in Web Inspector
  • RTL language support
  • 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

Developer tools

Xcode 9

https://developer.apple.com/xcode/
https://developer.apple.com/library/content/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/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

https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Safari_11_0/Safari_11_0.html

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!)

Leave a comment

*

*
This will only be used to display your Gravatar image.

Are you a human? (yes/no) *