watchOS SDK Release Notes for watchOS 3.1

Contents:

Introduction

watchOS SDK 3.1 provides support for developing watchOS apps. It is packaged with a complete set of Xcode tools, compilers, and frameworks for creating apps for watchOS. These tools include the Xcode IDE and the Instruments analysis tool, among many others.

This version of watchOS is intended for installation only on devices registered with the Apple Developer Program. Attempting to install this version of watchOS 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/.

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 watchOS SDK 3.1 in the Apple Developer Forums at http://devforums.apple.com.

Notes and Known Issues

The following items relate to using watchOS 3.1 SDK to develop code.

Apple Pay

A payment card may show as unavailable when attempting to use Apple Pay after restarting Apple Watch.

Workaround: Dismiss and double-tap the side button again to make the payment.

Background Refresh

Violations of system resources will result in a crash report for your application. The exception code provides context about the nature of the violation:

0xc51bad01

The app used too much CPU time.

0xc51bad02

The app took too much wall time.

0xc51bad03

The app may not have had sufficient runtime to complete the task.

Watch Connectivity

  • Apple Watch may get into a state that fails to receive watch connectivity transmission.

    Workaround: Reboot Apple Watch.

  • In some first deploy scenarios, isComplicationEnabled == NO for watch connectivity after a complication is configured on the clock face.

    Workaround: Reboot iPhone.

  • A file received by watch connectivity might have an additional suffix after the filename.

HomeKit

Using enableNotification:completionHandler: on Apple Watch causes homed to hang.

Workaround: Use enableNotification:completionHandler: on the iOS device instead.

Networking

To improve customer privacy, HTTPS URLs, NSURLSession, and NSURLConnection no longer support RC4 cipher suites during the TLS handshake. Affected apps and services should upgrade web servers to use more modern cipher suites.

In Console, your app will show -1200 and -98xx errors that did not appear in the previous release (that is, NSURLError secureConnectionFailed and SecureTransport errors, respectively).

  • (CFNetwork) HTTP load failed (error code: –1200 [3:-9824])

  • (CFNetwork) NSURLConnection finished with error code –1200

To determine if a particular URL is affected by this change, on macOS use nscurl <url>. If the load fails, and nscurl --enable-rc4 <url> succeeds, then the web server supports only RC4 cipher suites and needs to be upgraded.

Note that another reason you may see identical errors is because of a change where App Transport Security NSExceptionMinimumTLSVersion or NSThirdPartyExceptionMinimumTLSVersion is now being respected for NSURLConnection. To learn more about ATS keys, see NSAppTransportSecurity.

NSURLConnection

NSURLConnection disallows connections that use TLS protocol versions lower than the protocol version specified by an ATS policy via the NSExceptionMinimumTLSVersion or NSThirdPartyExceptionMinimumTLSVersion keys. To learn more about ATS keys, see NSAppTransportSecurity.

Workaround: This is now being enforced as of the WWDC 2016 seed. Affected apps and services should upgrade web servers to use more modern TLS protocol versions.

NSURLSession

The NSMutableURLRequest class requires that the HTTPBodyStream property be an unopened stream. 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.

Snapshot

Periodic updates have been disabled for WatchKit apps that have not adopted the new handleBackgroundTasks: API available in watchOS 3. Adopt this new method to ensure that your app is given periodic updates.

WatchKit

Notes

Known Issues

  • The determination of whether a WatchKit app implements handleBackgroundTasks: in its WKExtensionDelegate is made at launch time and never updated. If your WatchKit app sets [WKExtension sharedExtension].delegate after being launched, it will not properly be checked.

    Workaround: Use the WKExtensionDelegate that is designated in your Info.plist file.

  • If a SceneKit scene is backgrounded for over a minute, the scene is paused instead of automatically resumed when it comes back to the foreground.

    Workaround: Resume the SCNScene object in your interface controller’s willActivate call.

  • Some third-party apps that use an iMessage app extension may not launch on Apple Watch.

    Workaround: Uninstall and reinstall the app from the Apple Watch app on your iPhone.

Xcode

Known Issues

  • CloudKit usage is blocked in watchOS Simulator. Running any test will throw a “Not Authenticated” error even though you are signed in via the paired iOS Simulator.

    Workaround: Use CloudKit on paired devices with watchOS 3 and iOS 10.

  • watchOS Simulator can enter a state in which updating app context and transferring user info and files to iOS Simulator fails. Sending message and message data also takes longer than expected.

  • SecAccessControlCreateWithFlags does not work in watchOS 3.

  • watchOS apps that link against AVFoundation.framework will not build for the simulator.

  • At simulator first launch, watch connectivity communication could be clogged or slowed down for several minutes.

    Workaround: Wait for all watch-to-phone communications to come through.

  • NSLog() messages are not printed in Xcode’s debug console when running on Apple Watch.

    Workaround: Install the sysdiagnose logging profile on Apple Watch to reinstate logging. To learn more, see sysdiagnose on the Profiles and Logs webpage.