iOS 9.0

This article summarizes the key developer-related features introduced in iOS 9, which runs on currently shipping iOS devices. The article also lists the documents that describe new features in more detail.

For late-breaking news and information about known issues, see iOS 9 Release Notes. For the complete list of new APIs added in iOS 9, see iOS 9.0 API Diffs. For more information on new devices, see iOS Device Compatibility Reference.

Multitasking Enhancements for iPad iOS 9 enhances the user’s multitasking experience on iPad with Slide Over, Split View, and Picture in Picture. The Slide Over feature lets users pick a secondary app and quickly interact with it. The Split View feature gives users the ability to use two apps side by side on iPad Air 2. The Picture in Picture feature (also known as PiP) lets users watch video in a window that floats above other onscreen apps. Users decide when they want to view two apps on the screen at the same time; you have no control over when this happens. Even though Split View and Slide Over are user-controlled, there are a few things you need to do to ensure that users have a great multitasking experience. It’s crucial that your app use system resources efficiently so that it can run well when it shares the system with another running app. Under memory pressure, the system preemptively quits the app that’s consuming the most memory. For some guidance on creating energy efficient iOS apps that perform well, see Energy Efficiency Guide for iOS Apps.

If you haven’t already, be sure to adopt size classes so that your app looks good when the user decides to view it in a portion of the device screen. To learn more about preparing your app to respond well when users use Split View and Slide Over, see Adopting Multitasking Enhancements on iPad. As with Split View and Slide Over, users control whether they want to use PiP to view a video on top of another running app. If video playback is not your app's primary functionality, there’s nothing you need to do to support the PiP experience. To participate when users choose Picture in Picture, use AVKit or AV Foundation APIs. The video playback classes defined in the Media Player framework are deprecated in iOS 9 and do not support PiP. To learn how to prepare your video playback app for PiP, see Picture in Picture Quick Start.

3D Touch 3D Touch gives iOS 9 users an additional interaction dimension. On supported devices, people can quickly choose app-specific actions from the Home screen by pressing on the app icon. Within an app, people can use various pressures to get a preview of an item, open the item in a separate view, and access related actions. iOS 9 provides the following 3D Touch APIs: The Home screen quick action API is for adding shortcuts to your app icon that anticipate and accelerate a user’s interaction with your app (see the UIApplicationShortcut * APIs, such as UIApplicationShortcutItem .)

The UIKit peek and pop APIs let you provide easy access to additional content within your app, while maintaining the user’s context (see UIViewControllerPreviewing , UIViewControllerPreviewingDelegate , and new methods in UIViewController ). Use the peek quick actions API to provide a press-enabled replacement to your app’s touch-and-hold actions (see the UIPreview * APIs, such as UIPreviewAction and UIPreviewActionItem ).

The web view peek and pop API lets you enable previews of HTML link destinations (see WKWebView ).

The UITouch force properties let you add customized force-based user interaction to your app. No matter which of these APIs you adopt, your app must check the availability of 3D Touch at runtime. To learn more about supporting 3D Touch, see Adopting 3D Touch on iPhone. For some examples of using 3D Touch APIs in your app, see ApplicationShortcuts: Using UIApplicationShortcutItems and ViewControllerPreviews: Using the UIViewController previewing APIs.

Search Search in iOS 9 gives users great new ways to access information inside of your app, even when it isn’t installed. When you make your content searchable, users can access activities and content deep within your app through Spotlight and Safari search results, Handoff, and Siri suggestions. Using APIs related to search, you decide what content gets indexed, what information to show in search results, and where the user is redirected after tapping a result from your app or website. Integrating with search in iOS 9 is easy: You don’t need any prior experience with implementing search, and most developers find that it takes only a few hours to make their content universally searchable. To learn how to make your app and website content searchable, see App Search Programming Guide. Privacy is an essential feature of search in iOS 9. To give users the best search experience while protecting their private data, iOS 9 makes the following indexes available: A private on-device index. Each device contains a private index whose information is never shared with Apple or synced between devices. When you make an item available in a user’s on-device index, only that user can view the item in search results.

Apple’s server-side index. The server-side index stores only publicly available data that you’ve marked appropriately on your website. iOS 9 provides the following APIs to help you make your content searchable: The NSUserActivity class includes new methods and properties that help you index items as users perform activities in your app such as visiting a navigation point or creating and viewing content. Just about every app can take advantage of the NSUserActivity APIs to make useful content available to users.

The Core Spotlight framework ( CoreSpotlight.framework ) provides APIs that help you add app-specific content to the on-device index and enable deep links into your app. To learn more about Core Spotlight APIs, see Core Spotlight Framework Reference.

Web markup lets you make your related web content searchable and helps you enrich the user’s search experience. To learn how to mark up your website, see Mark Up Web Content. In addition, adding a Smart App Banner gives users an easy way to link directly to your app (to learn how to use a Smart App Banner, see Promoting Apps with Smart App Banners).

Universal links let you replace custom URL schemes with standard HTTP or HTTPS links. Universal links work for all users: If users have your app installed, the link takes them directly into your app; if they don’t have your app installed, the link opens your website in Safari. To learn more about universal links, see Support Universal Links.

App Thinning App thinning helps you develop apps for diverse platforms and deliver an optimized installation automatically. App thinning includes the following elements: Slicing. Artwork incorporated into the Asset Catalog and tagged for a platform allows the App Store to deliver only what is needed for installation.

On-Demand Resources. Host additional content for your app in the iTunes App Store repository, allowing it to fetch resources as needed using asynchronous download and installation. To learn more about this technology, see On-Demand Resources Guide.

Bitcode. Archive your app for submission to the App Store in an intermediate representation, which is compiled into 64- or 32-bit executables for the target devices when delivered. To learn more about app thinning, see App Thinning (iOS, watchOS).

Support for Right-to-Left Languages iOS 9 brings comprehensive support for right-to-left languages, which makes it easier for you to provide a flipped user interface. For example: Standard UIKit controls automatically flip in a right-to-left context.

UIView defines semantic content attributes that let you specify how particular views should appear in a right-to-left context.

UIImage adds the imageFlippedForRightToLeftLayoutDirection method, which makes it easy to flip an image programmatically when appropriate. To learn more about providing a flipped user interface, see Supporting Right-to-Left Languages.

App Transport Security App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one. If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app's Info.plist file.

Extension Points iOS 9 introduces several new extension points (an extension point defines usage policies and provides APIs to use when you create an app extension for that area). Specifically: Network extension points: Use the Packet Tunnel Provider extension point to implement the client side of a custom VPN tunneling protocol. Use the App Proxy Provider extension point to implement the client side of a custom transparent network proxy protocol. Use the Filter Data Provider and the Filter Control Provider extension points to implement dynamic, on-device network content filtering. Each of the network extension points requires special permission from Apple.

Safari extension points: Use the Shared Links extension point to enable users to see your content in Safari's Shared Links. Use the Content Blocking extension point to give Safari a block list describing the content that you want to block while your users are browsing the web.

The Index Maintenance extension point to support the reindexing of app data without launching the app.

The Audio Unit extension point allows your app to provide musical instruments, audio effects, sound generators, and more for use within apps like GarageBand, Logic, and other Audio Unit host apps. The extension point also brings a full audio plug-in model to iOS and lets you sell Audio Units on the App Store. To learn more about creating app extensions in general, see App Extension Programming Guide.

Contacts and Contacts UI iOS 9 introduces the Contacts and Contacts UI frameworks ( Contacts.framework and ContactsUI.framework ), which provide modern object-oriented replacements for the Address Book and Address Book UI frameworks. To learn more, see Contacts Framework Reference and ContactsUI Framework Reference.

Watch Connectivity The Watch Connectivity framework ( WatchConnectivity.framework ) provides two-way communication between an iPhone and a paired Apple Watch. Use this framework to coordinate activities between your iOS app and your corresponding Watch app. The framework supports immediate messaging between the apps when they are both running, and background messaging in other cases. To learn more, see Watch Connectivity Framework Reference.

Keychain The keychain provides more item protection options and a new type of encryption keys owned by the secure enclave. Specifically: New constraints for access control lists that allow creating constraints with Touch ID only or passcode only.

A new Touch ID constraint that invalidates keychain items when a fingerprint is added or removed.

Support for app-provided entropy for keychain item encryption using the Application Password option of the access control list.

Support for an authentication context that lets you invoke the authentication separately from SecItem calls.

Support for keys generated and used inside the secure enclave using the kSecAttrTokenIDSecureEnclave attribute. Note that access to these keys can be controlled by all constraints supported by access control lists.

Swift Enhancements To learn about what’s new in Swift, see Swift Language.

Deprecated APIs The following APIs are deprecated: The Address Book and Address Book UI frameworks. Use the Contacts and Contacts UI frameworks instead.

The NSURLConnection API in the Foundation framework. Use NSURLSession APIs instead. For a complete list of specific API deprecations, see iOS 9.0 API Diffs.