iOS SDK Release Notes for iOS 10.0
Contents:
Introduction
iOS 10 SDK provides support for developing iOS apps. It’s packaged with a complete set of Xcode tools, compilers, and frameworks for creating apps for iOS and OS X. These tools include the Xcode IDE and the Instruments analysis tool, among many others.
With this software you can develop apps for iPhone, iPad, or iPod touch running iOS 10. You can also test your apps using the included Simulator, which supports iOS 10. iOS 10 SDK requires a Mac computer running OS X v10.10.3 (Yosemite) or later.
This version of iOS is intended for installation only on devices registered with the Apple Developer Program. Attempting to install this version of iOS in an unauthorized manner could put your device in an unusable state.
For more information and additional support resources, visit http://developer.apple.com/programs/ios/.
Bug Reporting
For issues not mentioned in Notes and Known Issues, please file bugs through the Apple Developer website https://developer.apple.com/bug-reporting/. Additionally, you may discuss these issues and iOS 10 SDK in the Apple Developer Forums: http://devforums.apple.com. To get more information about iCloud for Developers, go to http://developer.apple.com/icloud.
Notes and Known Issues
The following items relate to using iOS 10.0 SDK to develop code.
AVFoundation
Note
The names of the optional AVCapturePhotoCaptureDelegate
methods didFinishProcessingPhoto
and didFinishProcessingRawPhoto
were changed to captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error:
and captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error:
, respectively. Code that uses the previous names (such as the WWDC version of the AVCamManual sample project) will continue to compile, but the older delegate callbacks will not execute.
Binary Compatibility
Apple reserves two-letter prefixes for use in framework classes. When naming your own classes, please use a three-letter prefix. The guidelines can be reviewed at Conventions.
Failure to follow these guidelines could result in your app crashing during beta software releases.
Upon recompiling with iOS 10, calling
valueForKey:
with anil
key throws an exception. Previously, this led to undefined behavior; now, it causes your app to crash.Referencing a system font by name in a call to
fontWithName:size:
causes a crash. For more information, see https://developer.apple.com/videos/play/wwdc2015/804/.To improve customer privacy, HTTPS URLs,
NSURLSession
, andNSURLConnection
no longer support RC4 cipher suites during the TLS handshake. Affected apps and services should upgrade web servers to use more modern cipher suites.Apps may hang if they change a superview’s geometry in
viewWillLayoutSubviews
orlayoutSubviews
.NSURLConnection
disallows connections that use TLS protocol versions lower than the protocol version specified by an ATS policy via theNSExceptionMinimumTLSVersion
orNSThirdPartyExceptionMinimumTLSVersion
keys. Affected apps and services should upgrade web servers to use more modern TLS protocol versions. To learn more about ATS keys and values, see App Transport Security.
CFNetwork HTTP Protocol
The NSMutableURLRequest
class requires that the HTTPBodyStream
property be an unopened stream, and the NSURLConnection
and NSURLSession
classes now strictly enforce this unopened stream requirement. Affected apps should ensure that any NSInputStream
that is provided has not yet been opened.
CloudKit
When building and running from Xcode repeatedly, long-lived operations can fail with a "You don’t have permission to save the file” error because the container path is changing repeatedly.
HomeKit
Adding WAC HomeKit accessories might fail using the Home app if the network credentials are not first provided using the Settings > Wi-Fi > Set Up New Device option.
Workaround: If adding such a HomeKit accessory fails, provide the network credentials using Settings > Wi-Fi > Set Up New Device. After the accessory has joined the network, the accessory can be added using the Home app.
libdispatch
Libdispatch asserts if there is a hang detected due to a deadlock in dispatch_barrier_sync
.
Messages
When
UISearchController
andUITableViewController
are used in Messages extensions, their content can be hidden below the top bar.Workaround: Use insets of about 80 px on top and 40px on the bottom.
In Simulator only, when
localizedChangeDescription
in theinsertMessage:localizedChangeDescription:completionHandler:
method is set to$localParticipantIdentifier.UUIDString
, the$localParticipantIdentifier.UUIDString
is not replaced with the user’s Messages ID, and the UUIDString is printed as-is.When the Messages app in Simulator is force quit, message history is lost.
When a
UIAlertController
object is presented in a Messages extension, it is truncated by the bottom bar of the extension.If a sign-in dialog is displayed while performing an in-app purchase or attempting to buy content from the store, or the store or the extension will be dismissed.
The local participant UUID is the same for both conversation participants in the Simulator only.
Workaround: Use a device to test UUID comparisons.
Motion
Barometric pressure data from CMAltimeter
is not currently reported on iPad Air 2, iPad mini 4, and iPad Pro. The CMAltimeter
availability check (that is, isRelativeAltitudeAvailable
) returns NO
, and the update handlers startRelativeAltitudeUpdatesToQueue:withHandler:
and stopRelativeAltitudeUpdates
do not respond to changes in relative altitude.
Music
Recently Played in For You may not refresh instantly.
MPMediaPickerController
may not display as expected.Deleting Apple Music may prevent certain accessories from playing audiobooks, podcasts, and more. Download Apple Music from the App Store to restore playback.
Editing Up Next while connected to a car head-unit may unexpectedly disrupt playback.
While using CarPlay, View All Stations does not yet display all stations.
Notes
Notes may quit unexpectedly.
Workaround: Toggle Notes off, then on, in Settings > General > iCloud.
NSUserActivity
An NSUserActivity
object may not have any userInfo
content after handoff.
Workaround: Explicitly call becomeCurrent
on the activity object.
Photos
People syncing is not enabled via iCloud Photo Library in iOS 10.
Memories, Related, People, and Scene are not supported on 32-bit devices.
Safari
WebGeolocation now requires a secure (HTTPS) website to work on both iOS and macOS to prevent malicious use of location data.
WKWebView
now defaults to respectinguser-scalable = no
from a viewport. Clients ofWKWebView
can improve accessibility and allow users to pinch-to-zoom on all pages by setting theWKWebViewConfiguration
propertyignoresViewportScaleLimits
toYES
.The
SFSafariViewControllerConfiguration
andinitWithURL:configuration:
APIs have been removed, andinitWithURL:entersReaderIfAvailable:
is no longer marked as deprecated. ThepreferredBarTintColor
property has been moved toSFSafariViewController
, along with the newpreferredControlTintColor
property, which clients should use instead of settingtintColor
directly on the view. Apps linked on iOS 10 or later will no longer forward their view's tint color toSFSafariViewController
.
UIKit
Notes
Prior to iOS 10, it was possible to override
initWithArrangedSubviews:
, but this was intended as a convenience initializer and implemented as such. We have now enforced this in the headers. As a result, Swift clients can no longer override this method, because Swift initializer rules prevent the override of a convenience initializer.In iOS 10, UIKit has updated and unified background management for
UINavigationBar
,UITabBar
, andUIToolbar
. In particular, changes to background properties of these views (such as background or shadow images, or setting the bar style) may kick off a layout pass for the bar to resolve the new background appearance.In particular, this means that attempts to change the background appearance of these bars inside of
layoutSubviews
, -[UIView updateConstraints],viewWillLayoutSubviews
,viewDidLayoutSubviews
,updateViewConstraints
, or any other method that is called in response to layout may result in a layout loop.In some cases you can break these layout loops by ensuring that you always use the same object instance when objects (such as
UIImage
orUIColor
) are required. But in general you should avoid doing this.Because all appearance parameters are now resolved at one time, there may be some cases where your bar's appearance has changed. In general, best results are obtained by specifying as little as possible for customizing your bar. For example, if you are specifying a
barTintColor
value and specifying an emptyUIImage
object for thebackgroundImage
property (as is the case when you call[UIImage new]
, for example) then you should get better results by specifying only thebarTintColor
. Any changes you make to resolve these issues in iOS 10 should also work correctly in iOS 9—if this is not the case, please report bugs with a sample project and a screenshot indicating what the bars should look like.In iOS 10, there is a slight
UIGestureRecognizer
behavior change when removing a currently recognizing (that is, midflight) gesture recognizer from its view. Previously, removing the gesture recognizer midflight would not explicitly cancel the gesture recognizer, allowing you to re-add the gesture recognizer back to the same view or to a different view. In iOS 10, callingremoveGestureRecognizer:
on the view of a midflight gesture recognizer explicitly cancels the gesture recognizer. If a user desires to change the view of a midflight gesture recognizer, you can simply calladdGestureRecognizer:
on the view you wish to move the gesture recognizer to.Presented view controllers can now affect the status bar appearance even if they were presented from a view controller that did not affect the status bar (for example, a popover). By default, custom view controller presentations are assumed to not affect the status bar; use the
modalPresentationCapturesStatusBarAppearance
property to allow a presented view controller to participate in status bar appearance.It has always been a requirement that
UIViewController
subclasses call super’s implementation ofawakeFromNib
from their own overrides. Starting in iOS 10,awakeFromNib
is correctly annotated with theNS_REQUIRES_SUPER
attribute to detect implementations that fail to obey this requirement. To fix this warning, ensure that all code paths of your override callawakeFromNib
.When running on iPad, the background color set for a
UITableViewCell
in a Storyboard is now respected.Starting in iOS 10,
UITableViewHeaderFooterView
supportsNSCoding
so if a view with this class is in a XIB, it now decodes correctly. The consequence is that apps may exhibit some extra content for these views which did not appear before due to the bug that was fixed.For very wide table views where cell layout margins have been automatically increased to follow the readable width, separator insets are now interpreted relative to these left and right margins instead of from the edges of the table view.
The coalescing of
UITouch
delivery has been significantly improved, especially in cases where users would both touch the screen and use Apple Pencil at the same time on iPad Pro and the app wasn’t able to process them at the incoming rate. In certain scenarios, events still can come in at a higher rate than the display refreshes. This is expected, and your app should anticipate this and handle accordingly.In iOS 10, windows that are not full screen do not affect status bar appearance.
Sending
layoutIfNeeded
to a view is not expected to move the view, but in earlier releases, if the view hadtranslatesAutoresizingMaskIntoConstraints
set toNO
, and if it was being positioned by constraints,layoutIfNeeded
would move the view to match the layout engine before sending layout to the subtree.These changes correct this behavior, and the receiver’s position and usually its size won’t be affected by
layoutIfNeeded
.Some existing code may be relying on this incorrect behavior that is now corrected. There is no behavior change for binaries linked before iOS 10, but when building on iOS 10 you may need to correct some situations by sending -
layoutIfNeeded
to a superview of thetranslatesAutoresizingMaskIntoConstraints
view that was the previous receiver, or else positioning and sizing it before (or after, depending on your desired behavior)layoutIfNeeded
.Third party apps with custom
UIView
subclasses using Auto Layout that overridelayoutSubviews
and dirty layout onself
before calling super are at risk of triggering a layout feedback loop when they rebuild on iOS 10. When they are correctly sent subsequentlayoutSubviews
calls they must be sure to stop dirtying layout on self at some point (note that this call was skipped in release prior to iOS 10).Flippable images work by having two images in an asset, each with a different directionality trait. When you create a derived
UIImage
object using theimageWith…
methods, it is no longer associated with the image asset it came from. To create a flippable template image at runtime, useUIImageAsset
.The source of the
UIContentSizeCategoryDidChangeNotification
notification is nowUIScreen.main()
instead ofUIApplication.shared()
.
Known Issue
For UIImage
objects that are created from CIImage
objects, the drawing methods drawInRect:
and drawAtPoint:
always convert to the DeviceRGB
color space before drawing. This results in loss of extended color information when drawing into a wide-color graphics context.
Workaround: You can retrieve the underlying CIImage
via the CIImage
property and render it using a CIContext
created with the appropriate color space (Extended sRGB) and pixel format (full-float).
A UIImage
object that is created from CGImageRef
is not affected, and will draw correctly without loss of color information.
Widgets
The first time you debug a widget (that is, a Today app extension) on a device, it does not show as a possible extension.
Workaround: Debug again for the widget to show up.
Xcode
Occasionally, using Command-Shift-HH from the Home screen does not invoke the app switcher.
Workaround: Launch any app before using Command-Shift-HH.
Protocol methods in the Intents framework require
@objc
annotation to be properly bridged between Obj-C and Swift 2.3.
Copyright © 2018 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2016-09-13