iOS SDK 9.1 beta provides support for developing iOS apps. It is 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 9. You can also test your apps using the included Simulator, which supports iOS 9. iOS SDK 9.1 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.
By default, the iOS 9.1 beta automatically sends anonymous diagnostic and usage data back to Apple. This includes information about crashes, freezes, kernel panics, and information about how you use Apple and third-party software, hardware, and services. This information is used to help Apple improve the quality and performance of its products and services. You can stop autosubmission of diagnostics and usage data by going to Settings > Privacy > Diagnostics and Usage > Don’t Send.
During the iOS 9.1 Beta, iCloud Keychain for iCloud accounts with two-factor authentication enabled will use beta servers. If you do not want your iCloud Keychain data stored on beta servers, do not use the beta software.
Known Issues
Sometimes while setting up iCloud Keychain, you recieve a "Could Not Set Up iCloud Keychain" error.
Workaround: Reboot the device.
If you disable Two-Factor Authentication on your iCloud account, your iCloud Keychain may also get turned off.
Workaround: Confirm that your Keychain is still on in Settings after disabling Two-Factor Authentication.
When activating Keychain in Settings on iPad, you may be unable to complete the activation.
If you have an account with Two-Factor Authentication and set up iCloud Keychain, it may not succeed if you take a few minutes to get through Setup Assistant.
Workaround: Go back to the beginning of Setup Assistant and sign into iCloud again.
If you had been using a Random Security Code for your Keychain before upgrading to iOS 9.1 Beta, tapping “Back” when prompted to enter your security code in Setup Assistant may result in a sign-in failure.
Workaround: Go back to the beginning of Setup Assistant and sign into iCloud again.
If you change your device passcode while in Airplane Mode, you iCloud Keychain may cease to sync with other devices.
Keyboards
Known Issue
3rd party keyboards don’t appear in sharing sheets and action sheets.
Workaround: Use the Apple keyboard.
PhotoKit
Known Issue
If you add a PHLivePhotoView to an app UI in Interface Builder, it might end up as a regular UIView object at runtime.
Workaround: Declare a dummy PHLivePhotoView subclass in your code:
If you try to play the last item in a list, Podcasts may crash.
Restore
Known Issue
If you’ve set a region that doesn’t match your language, restores from iCloud Backup might not progress.
Workaround: During restore, change your region to match your language. You can change it back after the restore is over.
UIKit
Note
On 3D Touch capable devices, touch pressure changes cause touchesMoved: to be called. This is true for all apps running on iOS 9.0. When running iOS 9.1, it is true only for apps linked with the iOS 9.0 (or greater) SDK.
Apps should be prepared to receive touch move events with no change in the x/y coordinates.
watchOS SDK 2.0 beta 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.
Location Services, Diagnostics and Usage, and Contacts settings are shared between Apple Watch and iPhone. By default, the iOS 9 beta automatically sends anonymous diagnostic and usage data back to Apple. This includes information about crashes, freezes, kernel panics, and information about how you use Apple and third-party software, hardware, and services. This information is used to help Apple improve the quality and performance of its products and services. You can stop autosubmission of diagnostics and usage data by going to Settings > Privacy > Diagnostics and Usage > Don’t Send on your iOS 9 iPhone.
Notes and Known Issues
Activation Lock
Note
Activation Lock is enabled on your Apple Watch if you have Find My iPhone enabled on your iPhone.
If you disable the "Fitness Tracking" privacy setting on the companion device for your app, the app on the Watch side will still receive motion updates.
Siri
Known Issue
When invoking Siri by pressing the Digital Crown from the watch face, Home screen, or over an app, you may see words that you did not speak added to the Siri request.
Workarounds:
Use Hey Siri instead of the Digital Crown to trigger Siri.
Trigger Siri using the Digital Crown with Siri already in the foreground.
Watch App
Known Issues
Pairing iOS 9 beta 3 with watchOS 2 beta 1 or 2 requires you to sign out of your AppleID in Messages prior to pairing and to skip iCloud sign-in during pairing. Pairing with watchOS 2 beta 3 and WatchOS 1 is not impacted.
Tapping Cancel does not work in the iForgot work flows in Watch Setup Assistant.
WatchKit
Known Issue
Some apps that run in Simulator may fail to launch on device.
Note: If you see this, please file a Radar so that we can follow up to obtain logs.
iOS SDK 7.0 provides support for developing iOS apps, and it includes the 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 7. You can also test your apps using the included iOS Simulator, which supports iOS 7. iOS SDK 7.0 requires a Mac computer running OS X v10.8.3 (Mountain Lion) 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.
The following issues relate to using iOS SDK 7.0 to develop code.
AirDrop
Notes
“Contacts Only” support requires that:
You are logged into iCloud.
The sender and receiver have each other’s Apple ID email addresses in Contacts on their devices.
Known Issues
“Contact Only” currently requires that you have an active Internet connection.
Occasionally, AirDrop will exhibit unreliability in discovery and/or data transfer to peers over Wi-Fi.
The App Store should support the ability to find an app capable of opening a received document based on the document’s Uniform Type Identifier (UTI). Currently, just a blank screen is displayed.
Edits made to iCloud Calendar events off-device will not push to the device.
Workaround: Update the calendar manually or trigger a fetch by modifying an event on-device.
Car Display
Known Issues
Support for Car Display will be provided once compatible systems are available.
Core Animation
Notes
When the UIViewGroupOpacity key is not present, the default value is now YES. The default was previously NO.
This means that subviews of a transparent view will first be composited onto that transparent view, then the precomposited subtree will be drawn as a whole onto the background. A NO setting results in less expensive, but also less accurate, compositing: each view in the transparent subtree is composited onto what’s underneath it, according to the parent’s opacity, in the normal painter’s algorithm order.
Core Data
Known Issues
Moving data from a local sandbox to iCloud using migratePersistentStore causes a crash. Instead, manually migrate the data store by iterating over the objects in the local data store file.
Game Center
Known Issues
When adding new Apple IDs to Game Center, they must be added through the Game Center app and not Settings.
If you launch a Game Center app while not logged into Game Center, the Game Center login sheet may be unreadable.
Game Kit
Known Issues
The API for sending reminders is present but unimplemented in this seed.
The API for loading leaderboard sets might need to be called a second time for it to succeed.
iCloud
Notes
Activation Lock, a new feature of Find My iPhone, is turned on automatically when Find My iPhone is enabled on any device running iOS 7. Activation Lock requires users to enter their Apple ID and password to turn off Find My iPhone, sign out of iCloud, erase the device, or reactivate the device after an erase. It’s important to sign out of iCloud, or choose Settings > General > Erase All Content and Settings, before transferring a device to a new user to allow them to use the device.
Known Issues
Signing out of an iCloud account with Find My iPhone turned on requires you to enter your Apple ID password. However, in some cases, the keyboard does not appear.
Workaround: Double-tapping the home button will bring up the keyboard.
On rare occasions, users might experience difficulties setting up iCloud Keychain on some of their devices.
Workaround: A temporary Reset iCloud Keychain button is available in iCloud Settings > Account > Account Security.
After users change their iCloud Security Code to Simple or Complex, they will not be able to recover their keychain items from the secure backup.
Workaround: Change the country code field under Account Security so that the user can receive the SMS Verification Code to complete the recovery process.
Sometimes when creating a new Apple ID and choosing to use iCloud in Setup Assistant, iCloud will not be turned on.
Workround: Go to Settings/iCloud and sign in with your Apple ID.
iCloud Keychain users who set up an additional device will receive an approval request to the other devices with iCloud Keychain turned on. The approval request will not be displayed if their screens are off and the devices are idle.
Workaround: Wake up any peer device to accept the approval request.
Users signing out of iCloud by deleting their iCloud account, erasing all contents and settings, or erasing the device via Find My iPhone and signing back in will not be presented with the correct iCloud Keychain setup screens.
Workaround: Use the seed-only iCloud Keychain Reset button.
Users who have a single device with iCloud Keychain on will not be presented with the correct iCloud Keychain setup screens after restoring from a backup.
Workaround: Use the seed-only iCloud Keychain Reset button.
When setting up iCloud Keychain, many iCloud Security Code candidates will be rejected for being too weak.
Workaround: Choose a 4-digit iCloud Security Code that does not have an obvious pattern.
Restoring your device from the same device’s iCloud backup will lose all passwords for Wi-Fi, profiles, accounts, and apps.
When just Calendars or just Reminders is toggled off then back on again in iCloud settings, data may not resync to the device.
Workaround: Turn off both Calendars and Reminders, and then turn them both back on.
Nonpurchased ePubs and PDFs will not be restored when iCloud-restoring an iOS 7 device with a pre-iOS 7 backup. Purchased content will be restored without issue.
Workaround: Use iTunes sync.
In iOS 7, Find My iPhone and Bookmarks toggles are no longer supported on secondary iCloud accounts. When you update your device with either of these options enabled on a secondary iCloud account, they will be turned off with no user notification.
Workaround: Set up the primary iCloud account via Settings/iCloud and then enable Find My iPhone or Bookmarks.
Users cannot use Simple or Complex iCloud Security Codes to recover their keychain items from their secure backup on iPhone 4.
Workaround: Use Random iCloud Security Codes to backup keychain items.
Location Services
Known Issues
Location Services will be off by default after updating from prior releases. This prohibits Find My iPhone from working.
Workaround: Turn on Location Services in Settings > Privacy > Location Services.
In this seed, GPS-based location is nonfunctional on iPhone 4. This includes AGPS call flows used for 911 emergency services location requests. Wi-Fi and cellular-based location remain functional.
MapKit
Notes
If the calls to renderInContext on the layer backing an MKMapView are made off the main thread, they should be eliminated or moved to the main thread. Failure to do so can cause an app crash. Instead of using renderInContext, use the new MKMapSnapshotter APIs.
Known Issues
Using +[MKMapCamera cameraLookingAtCenterCoordinate:fromEyeCoordinate:eyeAltitude:] may result in the wrong map heading being chosen.
Using +[MKMapSnapshot pointForCoordinate:] returns the wrong result for nonsquare snapshots.
Multitasking
Known Issues
Silent pushes will always wake the device.
Currently, there is no API that lets you inspect the settings controlling your app’s background behavior.
Music Player
Known Issues
MPMediaPickerController has been disabled for this seed. It will immediately return as if the user canceled the selection.
Networking
Notes
Cellular fallback is a technology that will attempt to connect over the cellular interface when a connection over the Wi-Fi interface does not succeed. There are a number of cases where connection failures may occur over Wi-Fi, such as a cable modem in need of a reboot or a firewall that blocks access to certain resources.
If your app restricts network operations over the cellular network, verify that your code is using the proper API to implement that policy.
For example, if your app watches SCNetworkReachability for the kSCNetworkReachabilityFlagsIsWWAN to monitor when Wi-Fi is available, it may not behave correctly under cellular fallback.
If an app uses this method and then attempts to connect, thinking it will get a connection over Wi-Fi, the app may inadvertently end up with a connection over the cellular network. The lack of thekSCNetworkReachabilityFlagsIsWWAN is not a guarantee that your connection will not go over cellular. If your code needs to enforce that a connection not go over cellular, it needs to specify that when making a networking request.
Instead, for CFNetwork code using CFSocketStream, CFHTTPStream, or similar APIs, set the kCFStreamPropertyNoCellular property to true on the CF object before connecting.
For NSURLRequests, call [request setAllowsCellularAccess: false].
In addition to making sure your code will never be connected over cellular because of cellular fallback, this call ensures that your code will never be connected over cellular because of the VPN or convoluted routing problems (connecting to IPv6 over cellular because only IPv4 is available over Wi-Fi, etc.).
To verify that your app is behaving properly, you should test against a broken Wi-Fi network. The easiest way to set up a broken Wi-Fi network is to set up an Apple AirPort Base Station or other Wi-Fi access point to hand out a DHCP address and leave the access point disconnected from the Internet. Another simple way of testing is to unplug the cable or DSL line from your cable or DLS modem.
Two low-level networking APIs that used to return a MAC address now return the fixed value 02:00:00:00:00:00. The APIs in question are sysctl (NET_RT_IFLIST) and ioctl (SIOCGIFCONF). Developers using the value of the MAC address should migrate to identifiers such as -[UIDevice identifierForVendor]. This change affects all apps running on iOS 7.
Newsstand
Known Issues
Newsstand background downloads that use HTTP basic or digest authentication will prompt the user with authorization alerts (NSURLConnectionDelegate callbacks forconnectionShouldUseCredentialStorage and willSendRequestForAuthenticationChallenge are not called correctly).
Nike + iPod
Known Issues
The Nike + iPod app is not included in this seed.
Objective-C Runtime
Notes
Due to changes in how the isa field is implemented, *self may change during enumeration (for example, if the container is retained).
Workaround: When implementing countByEnumeratingWithState, do not set state->mutationsPtr = self.
Phone
Known Issues
If you select Voicemail and then another option, such as Contacts, and then return to Voicemail, the Phone app hangs. You will need to kill the Phone app and relaunch it.
Reminders
Known Issues
Reminders may become unusable after the user creates a new list.
Safari
Known Issues
Safari website credentials do not always autofill between mobile and desktop versions.
Workaround: Use the desktop version if the site offers it.
Users cannot delete their passwords via Safari Settings > Autofill.
The SafariServices addToReadingList API doesn't work on devices. However, it works fine on iOS Simulator.
If a user deletes a saved credit card number (from Autofill), it will still autofill.
Workaround: After deleting a credit card from Autofill, force-quit Safari or reboot the device.
Security
Notes
-[UIDevice uniqueIdentifier] is no longer accepted in submissions to the App Store. In iOS 7, apps that are already on the store or on users’ devices that call this removed API will no longer be returned the UDID. Instead, -[UIDevice uniqueIdentifier] will return a 40-character string starting with FFFFFFFF, followed by the hex value of -[UIDevice identifierForVendor]. It is important to consider how this will affect existing apps. Consider submitting updates that no longer access the UDID.
iOS now requests user consent for apps to use the microphone hardware on all iOS 6 devices. For devices sold in China, iOS will also request user consent for apps to use the camera hardware. The operating system will present the consent alert when you set the category of the instantiated AVAudioSesison. The AVAudioSessionCategories that will present the alert areAVAudioSessionCategoryRecord and AVAudioSessionCategoryPlayAndRecord.
If the user doesn’t allow access, the audio session data will be all zeros (silence). For devices where camera access is requested and denied by the user, the video capture session is a black screen.
The API gethostuuid() has been removed and will not be accepted for submission to the store regardless of the targeted OS. For existing apps running on iOS 7, the function will return a uuid_trepresentation of the vendor identifier (-[UIDevice identifierForVendor]).
Known Issues
Changing the Require Passcode time setting after a restore from backup will require a reboot for the change to take effect.
Settings
Known Issues
In General > Background App Refresh, the per-app settings are not honored.
In Notification Center, when selecting an alert style for an app, the examples for None, Banners, and Alerts are not displayed.
Siri
Known Issues
The new Siri voices are not in this seed.
Social
Notes
Up through iOS 6, when using TWTweetComposeViewController and SLComposeViewController (the latter only for Twitter and Weibo, but not Facebook), if the caller supplies a completionHandler, the supplied completionHandler is responsible for dismissing the view controller. As of iOS 7, if the app links against the iOS 7 SDK, the view controller will dismiss itself even if the caller supplies acompletionHandler. To avoid this, the caller’s completionHandler should not dismiss the view controller.
Known Issues
When using the iOS 6.1 SDK on OS X v10.8 Mountain Lion, if you use the iOS 5.0 or iOS 5.1 Legacy SDK in iOS Simulator, you will not be able to use Twitter features: attempting to sign in to Twitter via the Settings pane will fail, and Twitter.framework will not work correctly. If you need to test Twitter features, you will need to choose either an iOS 6.1 or iOS 6.0 Simulator run destination, or you can test with iOS 5.x on a device.
Springboard
Notes
Active touches are no longer canceled when the user takes a screenshot.
Dynamic wallpaper is not available on iPhone 4.
Known Issues
When restoring from an iCloud backup on a device with hundreds of apps, Springboard may crash repeatedly.
Sync
Known Issues
The Wi-Fi sync option in iTunes is checked, but Wi-Fi devices do not appear in iTunes.
Workaround: On OS X, install the iOS 7.0 SDK after installing iTunes. Wi-Fi sync is not supported on Windows.
UIKit
Notes
+[UIPasteboard pasteboardWithName:create:] and +[UIPasteboard pasteboardWithUniqueName] now unique the given name to allow only those apps in the same application group to access the pasteboard. If the developer attempts to create a pasteboard with a name that already exists and they are not part of the same app suite, they will get their own unique and private pasteboard. Note that this does not affect the system provided pasteboards, general, and find.
Blurred layers are not available on iPhone 4.
Parallax is not available on iPhone 4.
Letterpress text is not available on iPhone 4.
Known Issues
When a device without a passcode is connected to an untrusted computer, iTunes will tell the user to approve on the phone, yet the phone never asks the user to approve. The phone is trusted anyway, so there is no functional impact, but the UI is missing.
UIPickerView with custom views doesn't show the views in the selection indicator.
UIRefreshControl and the associated table view are hidden under the nav bar when setTranslucent: is NO.
Auto Layout constraints do not take bar height into account, which leads to issues during rotation or when the height of the status bar changes.
Print Center is not functional. Seeing print job progress, job name, or job preview icon is not available in this seed. To ensure that the job name is correct for print jobs, use the Printer Simulator app in Xcode and check the log.
When using Auto Layout to position a UIButton, if you set the content compression resistance or content hugging priority to minimum, the button will have ambiguous layout.
Workaround: Don’t use a content compression resistance or content hugging priority of less than 2 for UIButton.
UISwitchonTintColors is always green irrespective of what it’s set to.
The title of the UIRefreshControl appears below the navigation bar.
USB Tethering
Known Issues
Personal Hotspot (Internet Tethering) will not work if this seed of the iOS SDK 7.0 is installed.
Voice Memos
Known Issues
The VoiceMemos app is not available in this seed.
VoiceOver
Known Issues
Maps does not work with VoiceOver.
Siri and VoiceOver do not always work together properly.
Reminders does not work with VoiceOver.
Weather
Notes
Weather conditions are not animated on iPhone 4.
WebKit
Notes
Previously, when the viewport parameters were modified, the old parameters were never discarded. This caused the viewport parameters to be additive.
For example, if you started with width=device-width and then changed it to initial-scale=1.0, you ended up with a computed viewport of .
In iOS 7, this has been addressed. Now you end up with with a computed viewport of initial-scale=1.0.
Previously, when using <meta name="viewport" content="initial-scale=1.0, user-scalable=1">, the scale could be incorrect after rotation.
Now, if a user has not scaled the page explicitly, the page is restored to its initial scale. Also, the current scale is now correctly restricted within the min-scale, max-scale bounds.
Known Issues
Some images for Retina display devices appear at twice the size that they should instead of being scaled down 50%. This issue can also occur with any image to be scaled that is larger than its container and that uses either the background-size property or the -webkit-background-size property. This issue affects both native apps that display web content and web pages viewed in Safari for iPhone.
The background CSS shorthand property now resets the value of the background-size property to auto when background size is not specified. This new behavior is per the CSS spec, and the old behavior is available only for apps linked to an SDK prior to iOS 7.0 when running on iOS 7 or later.
Workaround: Specify the background-size property or the -webkit-background-size property after the background shorthand property in the CSS stylesheet for the web content being displayed.
When scrolling a page with animations, the animations stop and do not resume when the scrolling has stopped.
iOS SDK 6.0 provides support for developing iOS apps, and it includes the 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 6. You can also test your apps using the included iOS Simulator, which supports iOS 6. iOS SDK 6.0 requires a Mac computer running OS X 10.7.4 or higher (Lion).
This version of iOS is intended for installation only on devices registered with Apple’s Developer Program. Attempting to install this version of iOS in an unauthorized manner could put your device in an unusable state.
The following issues relate to using iOS SDK 6.0 to develop code.
Accounts Framework
When requesting access to Facebook accounts, the only key required in your options dictionary is ACFacebookAppIdKey. ACFacebookPermissionGroupKey and ACFacebookAppVersionKey are now obsolete.
If you request a write permission under ACFacebookPermissionsKey, such as publish_stream, you must provide a value for ACFacebookAudienceKey, which can be one of ACFacebookAudienceEveryone, ACFacebookAudienceFriends, or ACFacebookAudienceOnlyMe.
Address Book
FIXED: When an app is in a fresh privacy state and tries to present a ABNewPersonViewController, the user cannot dismiss that view controller properly, even if the user allows access to contacts. The user must force quit the app and relaunch.
Requesting access to contacts:
Users are able to grant or deny access to contact data on a per-app basis. To request access to contact data, call the ABAddressBookRequestAccessWithCompletion function after calling the ABAddressBookCreateWithOptions function. The ABAddressBookRequestAccessWithCompletion function does not block the app while the user is being asked to grant or deny access. Until access has been granted, the ABAddressBookRef object will not contain any contacts, and any attempt to modify contacts fails with a kABOperationNotPermittedByUserError error. The user is prompted only the first time access is requested; any subsequent calls to ABAddressBookCreateWithOptions will use the existing permissions. The completion handler is called on an arbitrary queue. If the ABAddressBookRef object is used throughout the app, then all usage must be dispatched to the same queue to use ABAddressBookRef in a thread-safe manner.
Checking access authorization status:
An app can use the authorization status API to check if it can access contacts, calendars, reminders, or the photo library. This API is independent from the request access API and will not prompt the user to grant or deny access. With this API an app can adjust the display of its UI elements that would access the data class. For example, if access to contacts is authorized or not determined, then a UI button to pick a contact can be displayed.
Authorization Status Not Determined—The user has not yet made a choice regarding whether this app can access the data class.
Authorization Status Restricted—This app is not authorized to access the data class. The user cannot change this app’s status, possibly due to active restrictions such as parental controls being in place.
Authorization Status Denied—The user explicitly denied access to the data class for this app.
Authorization Status Authorized—This app is authorized to access the data class.
Apple TV
FIXED: In some cases, the screen may show the wrong resolution. Restart your Apple TV to return it to the correct resolution.
FIXED: Apple TV may restart while using the Remote app.
FIXED: Apple TV may restart when changing the system language.
FIXED: Photo Stream does not load when logging in a second time. Restart Apple TV to resolve.
Music does not play during photo slideshows.
Screen saver may revert to using the default images after installing update.
Bonjour
The NSNetService class and CFNetService APIs do not include P2P interfaces by default. To browse, register, or resolve services over P2P interfaces, an app needs to use the Bonjour DNSService*() APIs noted below.
Setting the interfaceIndex parameter to kDNSServiceInterfaceIndexAny in the following APIs will not include P2P interfaces by default. To include P2P interfaces, you must now set the kDNSServiceFlagsIncludeP2P flag when using kDNSServiceInterfaceIndexAny or set the interfaceIndex to kDNSServiceInterfaceIndexP2P. The affected APIs are:
DNSServiceBrowse
DNSServiceRegister
DNSServiceResolve
DNSServiceRegisterRecord
DNSServiceQueryRecord
Dictionary
FIXED: There is a known issue with dictionaries when attempting to define a word in any language other than English or Japanese. When the reference library is presented, the user is given the option to download a dictionary—that download may not begin. The user can tap outside the popover on an iPad or tap the Done button on the iPhone or iPod touch to dismiss the download request.
Event Kit
Requesting access to calendars or reminders:
Users are able to grant or deny access to event and reminder data on a per-app basis. To request access to event and/or reminder data, call the requestAccessToEntityType:completion:: method of EKEventStore. This will not block the app while the user is being asked to grant or deny access. Until access has been granted for an entity type, the event store will not contain any calendars for that entity type and any attempt to save data will fail.
The user will be prompted only the first time access is requested; any subsequent instantiations of EKEventStore will use the existing permissions. The completion handler is called on an arbitrary queue.
Game Center
FIXED: When creating a new Game Center account in-app on the iPad, the popover for selecting the month of your date of birth shows up with no content to select.
The authenticate method of GKLocalPlayer has been removed. Authentication will commence automatically when the completion handler is set.
As of iOS 6 beta 4, GKGameCenterViewController singleton is no longer supported.
As of iOS 6 beta 4, GKScore+Sharing.h file and associate category are removed.
iCloud
When creating an iCloud account, you can use any email-based Apple ID or your existing iCloud account. If you had a MobileMe account that you did not move to iCloud, you can use that Apple ID to sign up for a new iCloud account (none of your previous MobileMe data will be present).
icloud.com email addresses are now available for iCloud mail users. Users signing up for new Apple IDs, or enabling Mail on their iCloud account for the first time, will automatically receive an @icloud.com email address instead of a me.com email address. iCloud users with @me.com addresses that have been used with iOS 6 beta 3 or later will receive an @icloud.com email address that matches their @me.com address.
icloud.com email cannot be sent from www.icloud.com. Users should use http://beta.icloud.com at this time if they wish to use a web browser to send email from their icloud.com address.
@icloud.com addresses will be added within two weeks of first using iOS 6.
Provisioning profiles must be enabled for iCloud in the iOS Provisioning Portal. To enable a provisioning profile for iCloud, navigate to the App ID section of the iOS Provisioning Portal and configure your App ID for iCloud. After enabling the App ID for iCloud, regenerate your provisioning profiles to enable them for iCloud.
The setSortDescriptors: method of NSMetadataQuery is not supported.
In iOS 6, files that are protected via Data Protection cannot be used with iCloud Storage APIs.
Filenames are case-insensitive in OS X but case-sensitive in iOS. This can lead to problems when using iCloud to share files between the two platforms. On iOS, you should take steps to avoid creating files with names that differ only by case.
The behavior of coordinated read operations on iCloud Documents has changed:
On previous iOS releases, when your app performed a coordinated read operation on a file or package and the iCloud daemon noticed that there was a newer version of the item available, the coordinated read operation blocked until the newer version of the item was downloaded and written to the disk.
As of iOS 6 beta 3, when you start a coordinated read operation on a file or package for which you already have a local version, the coordinated read will be granted as soon as possible, and the new version, if any, will download in the background. This call will block for downloading reasons only if you do not have any version of the file available locally.
Additionally, when the file is conflicted, the iCloud daemon will not wait until it has all the conflict losers of the file available to make the file available to your app. It will make the different versions of the conflicted file available as soon as it can. Your app can use the existing file coordination and the UIDocument callbacks to be notified when the conflict losers have been downloaded and are available.
iTunes
iTunes 10.6.3 is required for iOS SDK 6.0.
Previous public betas of iOS can no longer download iTunes Match songs.
Location
In iOS 6 beta 4, modifications were introduced to the new enum CLActivityType in Core Location:
In iOS 6 and later, Map Kit is built on a new infrastructure hosted by Apple. Earlier iOS releases will continue to use Google’s service.
API compatibility will be maintained (see known issues below).
Maps are now supported in Simulator.
Map data will continue to evolve—only a limited amount of high-resolution satellite imagery is currently available.
Routing apps that do not specify a coverage file during development will always be displayed in the Maps routing search results.
Testing and debugging of coverage files for routing apps is only supported during development through the Xcode Run workflow. (You can specify the coverage file for a given Run scheme using the Options pane of the Run section of the scheme editor.) Apps that are archived and distributed (outside of the App Store) onto devices will not have access to the app’s coverage files.
FIXED: Maps does not zoom into the current location when launched from a third-party app.
Newsstand
FIXED: Only simple HTTP downloads will work with Newsstand.
Passbook
The Description field is now a required field for a Pass. All passes created without it will fail to validate and will not ingest.
Passbook in Simulator no longer requires https/ssl when using a webServiceURL when ingesting a pass.
FIXED: Unable to show boarding passes on lock screen.
Passes will no longer fall back to background.png if strip.png is not included in your pass bundle.
The contents of the userInfo dictionary for PKPassLibraryDidChangeNotification have changed in the case of removed passes. Please consult the latest documentation for the new userInfo dictionary.
Security
In iOS 5, signing a certificate with an MD5 signature is not supported. Please ensure that certificates use signature algorithms based on SHA1 or SHA2.
In iOS 6, there are improved privacy controls for Calendar, Reminders, Contacts, and Photos.
Users will see access dialogs when an app tries to access any of those data types. The user can switch access on and off in Settings > Privacy.
Developers can set a “purpose” string for each class of isolated data. iOS displays this string to users to help them understand why their data is being requested. These strings can be added using Xcode’s Project editor, which is in the Info tab. The relevant key names begin with the string “Privacy -”.
There are changes to the Event Kit and Address Book frameworks to help developers with this feature.
Simulator
FIXED: The app delete confirmation alert panel takes a while to show up in iOS Simulator.
No privacy alerts are displayed in iOS Simulator for apps that access Photos, Contacts, Calendar, and Reminders.
Downloading In-App Purchase hosted content in iOS Simulator is not supported.
When attempting to play an MP3 sound in Simulator, you will hear a popping sound instead.
Shared Photo Stream
Users must go to Settings > iCloud to ensure that they receive Shared Photo Stream Notifications.
In order to share a Photo Stream with iOS 6 beta, you must invite someone using his iCloud email address; otherwise, he will not receive the invitation.
Upgrading from iOS 6 beta 1 to beta 2 will cause your device to redownload all of your Shared Photo Streams.
The Shared Photo Stream feature is set to OFF when updating from iOS 6 beta 1 to a later release. The default setting should be ON.
FIXED: Turning off Shared Photo Streams may leave Camera in an unresponsive state; force quitting the Camera app will resolve this issue.
Social
Weibo shows up in the Settings app only if a Chinese keyboard is enabled.
In the options parameter of this new method, pass nil to access Twitter and Weibo accounts. To access Facebook accounts, pass a dictionary with the following keys (which are documented in ACAccountStore.h):
You should no longer add this dictionary to your app’s Info.plist file, as was required in beta 1.
When requesting access to Facebook accounts, the only key required in your options dictionary is ACFacebookAppIdKey. ACFacebookPermissionGroupKey and ACFacebookAppVersionKey are now obsolete.
If you request a write permission under ACFacebookPermissionsKey—such as publish_stream—you must provide a value for ACFacebookAudienceKey, which can be one of ACFacebookAudienceEveryone, ACFacebookAudienceFriends, or ACFacebookAudienceOnlyMe.
Status Bar
It is now possible to set status bar tint parameters in your app’s Info.plist file. You might do this to ensure that the status bar color matches your app’s navigation bar color during startup. To set the status bar tint, add the UIStatusBarTintParameters key to your Info.plist file. The value of this key is a dictionary with the appropriate values describing the navigation bar your app has at startup. Inside the dictionary should be the UINavigationBar key, which has a value that is also a dictionary. That dictionary contains the initial navigation bar’s style (with the Style key) and whether it is translucent (with the Translucent key). If your navigation bar uses them, you can also specify its tint color (with the TintColor key) or the name of its custom background image (with the BackgroundImage key).
UIKit
In iOS 5.1, the UISplitViewController class adopts the sliding presentation style when presenting the left view (previously seen only in Mail). This style is used when presentation is initiated either by the existing bar button item provided by the delegate methods or by a swipe gesture within the right view. No additional API adoption is required to obtain this behavior, and all existing APIs—including that of the UIPopoverController instance provided by the delegate—will continue to work as before. If the gesture would be insupportable in your app, setting the presentsWithGesture property of your split view controller to NO disables the gesture. However, disabling the gesture is discouraged because its use preserves a consistent user experience across all apps.
FIXED: In iOS 6, changes have been introduced so that you no longer need to set a delegate and implement a method for Single-Finger and Single-Tap gesture recognizers. This makes them work well with the UIControl objects.
In iOS 6 and later, the UIWebView class paints its contents asynchronously.
Autorotation is changing in iOS 6. In iOS 6, the shouldAutorotateToInterfaceOrientation: method of UIViewController is deprecated. In its place, you should use the supportedInterfaceOrientationsForWindow: and shouldAutorotate methods.
More responsibility is moving to the app and the app delegate. Now, iOS containers (such as UINavigationController) do not consult their children to determine whether they should autorotate. By default, an app and a view controller’s supported interface orientations are set to UIInterfaceOrientationMaskAll for the iPad idiom and UIInterfaceOrientationMaskAllButUpsideDown for the iPhone idiom.
A view controller’s supported interface orientations can change over time—even an app’s supported interface orientations can change over time. The system asks the top-most full-screen view controller (typically the root view controller) for its supported interface orientations whenever the device rotates or whenever a view controller is presented with the full-screen modal presentation style. Moreover, the supported orientations are retrieved only if this view controller returns YES from its shouldAutorotate method. The system intersects the view controller’s supported orientations with the app’s supported orientations (as determined by the Info.plist file or the app delegate’s application:supportedInterfaceOrientationsForWindow: method) to determine whether to rotate.
The setStatusBarOrientation:animated: method is not deprecated outright. However, it now works only if the supportedInterfaceOrientations method of the top-most full-screen view controller returns 0. This puts the responsibility of ensuring that the status bar orientation is consistent into the hands of the caller.
For compatibility, view controllers that still implement the shouldAutorotateToInterfaceOrientation: method do not get the new autorotation behaviors. (In other words, they do not fall back to using the app, app delegate, or Info.plist file to determine the supported orientations.) Instead, the shouldAutorotateToInterfaceOrientation: method is used to synthesize the information that would be returned by the supportedInterfaceOrientations method.
You should make sure that your apps are not using these methods to manage the layout of any subviews. Instead, they should use the view controller’s viewWillLayoutSubviews method and adjust the layout using the view’s bounds rectangle.
In iOS 6, the viewWillUnload and viewDidUnload methods of UIViewController are now deprecated. If you were using these methods to release data, use the didReceiveMemoryWarning method instead. You can also use this method to release references to the view controller’s view if it is not being used. You would need to test that the view is not in a window before doing this.
It is unsupported to set values for the shadowOffset or shadowColor properties of a UILabel object if its attributedText property contains a valid attributed string. Instead, use the NSShadowAttributeName attribute of the attributed string to set the shadow.
Due to compatibility concerns, the NSBaselineOffsetAttributeName attribute is no longer supported in iOS 6.
The NSTextAlignmentNatural value is unsupported and will throw an exception when used with the textAlignment property of UILabel or supplied as the alignment parameter to the drawInRect:withFont:lineBreakMode:alignment: method of NSString.
The setContentStretch: method of UIView has been deprecated in this beta release. To achieve the same effect, use the resizableImageWithCapInsets: method of UIImage and display the image with a UIImageView.
The resizableImageWithCapInsets: method of UIImage effectively resizes images by tiling. As a performance optimization, it uses stretching rather than tiling when the user would not be able to tell the difference, such as when a single column or row is being stretched. But in certain circumstances, the user might want to actually stretch some region of an image. In iOS 6, the resizableImageWithCapInsets:resizingMode: method allows the caller to specify a tiling or stretching resizing mode.
The class now supports the customization of the animations created during rotation. The names of methods for customizing insert and delete animations have also changed, so the same hooks can be used for rotations as well as for insertions and deletions.
The class has changed some method names. Specifically, decoration views are no longer referred to by “reuse identifier” but rather by “element kind.” Apps that are using decoration views will need to modify their code and rebuild to accommodate this.
The bottom edge of a UILabel view is now different from its baseline.
Previously, auto layout was interpreting the bottom of a UILabel to be the same as its baseline. While convenient in many cases, it caused problems if you wanted to place the top edge of one label against the bottom edge of another. In such a scenario, the bottom label would overlap the top one, and descenders from the top label could crash into ascenders from the bottom label. Now, auto layout interprets UILayoutAttributeBottom as the bottom of the text box (presuming the label is not bigger than its intrinsic content size) and UILayoutAttributeBaseline as the baseline of the text. If you have already created code for laying out labels according to the bottom or center point, your text will move around a little and you will need to adjust your constraints.
Apps with table views in their nib or storyboard files, and that were built using previous versions of iOS 6 beta, will require a clean build with beta 3 and newer.
Here are some notes regarding auto layout support for UIScrollView:
In general, auto layout considers the top, left, bottom, and right edges of a view to be the visible edges. That is, if you pin a view to the left edge of its superview, you’re really pinning it to the minimum x-value of the superview’s bounds. Changing the bounds origin of the superview does not change the position of the view.
The UIScrollView class scrolls its content by changing the origin of its bounds. To make this work with auto layout, the meaning of the top, left, bottom, and right edges within a scroll view now mean the edges of its content view.
The constraints on the subviews of the scroll view must result in a size to fill, which is then interpreted as the content size of the scroll view. (This should not be confused with the intrinsicContentSize method used for auto layout.) To size the scroll view’s frame with auto layout, constraints must either be explicit regarding the width and height of the scroll view, or the edges of the scroll view must be tied to views outside of its subtree.
Note that you can make a subview of the scroll view appear to float (not scroll) over the other scrolling content by creating constraints between the view and a view outside the scroll view’s subtree, such as the scroll view’s superview.
Here are some examples of how to configure the scroll view:
Create a plain UIView content view for your scroll view that will be the size that you want your content to have. Make it a subview of the scroll view but let it continue to translate the autoresizing mask into constraints:
Create the views you want to put inside the content view and configure their constraints so as to position them within the content view.
Alternatively, you can create a view subtree to go in the scroll view, set up your constraints, and call the systemLayoutSizeFittingSize: method (with the UILayoutFittingCompressedSize option) to find the size you want to use for your content view and the contentSize property of the scroll view.
Position and size your scroll view with constraints external to the scroll view.
Use constraints to lay out the subviews within the scroll view, being sure that the constraints tie to all four edges of the scroll view and do not rely on the scroll view to get their size.
A simple example would be a large image view, which has an intrinsic content size derived from the size of the image. In the viewDidLoad method of your view controller, you would include code like the following:
This would give you a scroll view that resized as the view controller’s view resized (such as on device rotation), and the image view would be a scrolling subview. You don't have to set the content size of the scroll view.
in iOS 6 beta 4, on non-Retina display devices, the bottoms (or baselines) of the EvenHeightView and the OtherFixedHeightView were off by one pixel and the developer could do nothing about it. This issue is now fixed.
Before the changes, the layout engine did not integralize the position variables for the views, and these constraints were always satisfiable:
ContainerView
| OddWidthView
| EvenWidthView
OddWidthView.centerX == ContainerView.centerX
EvenWidthView.centerX == ContainerView.centerX
EvenWidthView.centerX == OddWidthView.centerX
Now, the layout engine is integralizing the position variables (x and y) as well as dimension variables (width and height). This means that it will try to satisfy the three constraints with an integer solution, which might not be possible, and thus will log that these constraints are unsatisfiable. In this case, and in all analogous cases, developers just need to remove the redundant constraint (or constraints). In the example above, removing any one of the three constraints will resolve the issue.
In iOS 6 beta 4, there is a known bug that when you have a constraint with one item that is a scroll view, the other item is a descendant of that scroll view, and you add the constraint to an ancestor of that scroll view, then the constraint might stop working properly. The workaround is to add such constraints only to the scroll view itself, not to any old ancestor.
Safari and WebKit
WebKit on iOS now supports the requestAnimationFrame and cancelAnimationFrame methods in JavaScript, as described here: http://www.w3.org/TR/animation-timing/.
Note that because the specification is still at the Working Draft state, these methods have the webkit prefix, so they are window.webkitRequestAnimationFrame and window.webkitCancelAnimationFrame.
The default app cache quota has increased from 5 MB to 25 MB.
The JPEG subsampling threshold has increased from 2 MP (megapixels) to 5 MP on all supported hardware except iPhone 3GS and iPod touch (4th generation).
Support has been added for <input type="file"> tags in web forms. Users can upload existing photos and videos from their photo library or take a picture or video using the camera. Previously, this form control was always disabled.
With Safari 6.0 on OS X, developers can now use the Web Inspector (web development tool) with attached iOS devices and iOS Simulator. Developers can use the Web Inspector to debug Safari and the UIWebView class in their own apps built and run from Xcode. This replaces the Debug Console banner in Safari.
In iOS 6 and later, web data (SQL Web Storage and LocalStorage) from a UIWebView object can be stored in a directory that will be backed up. To enable backing up this data, set the WebKitStoreWebDataForBackup key to YES in your app’s user defaults. This should be done only if your app relies on web content data that cannot be reloaded. If your UIWebView object opens links to arbitrary web content, this key should be set to NO. Toggling the value of this key will not preserve existing web view data.
In iOS 6 and later, Safari no longer registers for the common feed: RSS/ATOM scheme. Apps that can view those types of feeds are encouraged to register for that URL scheme.
WebKit no longer always creates hardware-accelerated layers for elements with the -webkit-transform: preserve-3d option. Authors should stop using this option as a way to get hardware acceleration.
Experimental CSS3 Flexbox support will be disabled. Please switch from using -webkit-flexbox and -webkit-inline-flexbox to -webkit-box and -webkit-inline-box.
As of iOS 6, embedded YouTube URLs in the form of http://www.youtube.com/watch?v=oHg5SJYRHA0 will no longer work. These URLs are for viewing the video on the YouTube site, not for embedding in web pages. Instead, the format that should be used is described here: https://developers.google.com/youtube/player_parameters.
In iOS 6, the keyboardDisplayRequiresUserAction property was added to the UIWebView class. The property defaults to YES, which means that calling focus() on a form element will not bring up the keyboard. By changing the property to NO, a JavaScript call to focus() on a form element will focus the element and bring up the keyboard automatically.
As of iOS 6, calling focus() on a form element in a web app will focus the element.
iOS SDK 6.0 provides support for developing iOS apps and includes the 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 that run on iPhone, iPad, or iPod touch running iOS 6. You can also test your apps using the included iOS Simulator, which supports iOS 6. iOS SDK 6.0 requires a Macintosh computer running OS X 10.7.4 or higher (Lion).
This version of iOS is intended only for installation on devices registered with Apple's 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:
The following issues relate to using iOS SDK 6.0 to develop code.
Address Book
When an app is in a fresh privacy state and tries to present a ABNewPersonViewController, the user cannot dismiss that view controller properly even if they allow access to contacts. The user must force quit the app and relaunch.
Requesting access to contacts:
Users are able to grant or deny access to contact data on a per-app basis. To request access to contact data, call the ABAddressBookRequestAccessWithCompletion function after calling the ABAddressBookCreateWithOptions function. The ABAddressBookRequestAccessWithCompletion function does not block the app while the user is being asked to grant or deny access. Until access has been granted, the ABAddressBookRef object will not contain any contacts and any attempt to modify contacts fails with a kABOperationNotPermittedByUserError error. The user is prompted only the first time access is requested; any subsequent calls to ABAddressBookCreateWithOptions will use the existing permissions. The completion handler is called on an arbitrary queue. If the ABAddressBookRef object is used throughout the app, then all usage must be dispatched to the same queue to use ABAddressBookRef in a thread-safe manner.
Checking access authorization status:
An app can use the authorization status API to check if it can access contacts, calendars, reminders or photo library. This API is independent from the the request access API and will not prompt the user to grant or deny access. With this API an app can adjust the display of its UI elements that would access the data class. For example, if access to contacts is authorized or not determined then a UI button to pick a contact can be displayed.
For Address Book, call the ABAddressBookGetAuthorizationStatus function. For Event Kit, call the authorizationStatusForEntityType: class method of EKEventStore. For Assets Library, call the authorizationStatus class method of ALAssetsLibrary. The meaning of the status values that are returned is as follows:
Authorization Status Not Determined - The user has not yet made a choice regarding whether this app can access the data class.
Authorization Status Restricted - This app is not authorized to access the data class. The user cannot change this app’s status, possibly due to active restrictions such as parental controls being in place.
Authorization Status Denied - The user explicitly denied access to the data class for this app.
Authorization Status Authorized - This app is authorized to access the data class.
Apple TV
In some cases, the screen may show the wrong resolution. Restart your Apple TV to return it to the correct resolution.
FIXED: Netflix videos may not resume where you left off.
FIXED: The History list in the YouTube app gets cleared when you exit and reenter the app.
Apple TV may be slow to respond while a download is in progress in the background.
Apple TV may restart while using the Remote app.
Apple TV may restart when changing the system language.
Photo Stream does not load when logging in a second time. Restart Apple TV to resolve.
Music does not play during photo slideshows.
New Behaviors:
Pick remote speakers in Settings > AirPlay.
Set an onscreen code for AirPlay in Settings > AirPlay.
Save multiple iTunes Store accounts in Settings > iTunes Store.
Press and hold the Select button to rearrange icons on the main menu.
Hide the main menu icons in Settings > General > Parental Controls.
Bonjour
The NSNetService class and CFNetService APIs do not include P2P interfaces by default. To browse, register, or resolve services over P2P interfaces, an app needs to use the Bonjour DNSService*() APIs noted below.
Setting the interfaceIndex parameter to kDNSServiceInterfaceIndexAny in the following API's will not include P2P interfaces by default. To include P2P interfaces, you must now set the kDNSServiceFlagsIncludeP2P flag when using kDNSServiceInterfaceIndexAny or set the interfaceIndex to kDNSServiceInterfaceIndexP2P. The affected APIs are:
DNSServiceBrowse
DNSServiceRegister
DNSServiceResolve
DNSServiceRegisterRecord
DNSServiceQueryRecord
Dictionary
There is a known issue with dictionaries when attempting to define a word in any language other than English or Japanese. When the reference library is presented, the user is presented with the option to download a dictionary - that download may not begin. The user can tap outside the popover on an iPad or tap the "Done" button on the iPhone or iPod touch in order to dismiss the download request.
Event Kit
Requesting access to calendars or reminders:
Users are able to grant or deny access to event and reminder data on a per-app basis. To request access to event and/or reminder data, call the requestAccessToEntityType:completion: method of EKEventStore. This will not block the app while the user is being asked to grant or deny access. Until access has been granted for an entity type, the event store will not contain any calendars for that entity type, and any attempt to save data will fail.
The user will only be prompted the first time access is requested; any subsequent instantiations of EKEventStore will use the existing permissions. The completion handler is called on an arbitrary queue.
Game Center
When creating a new Game Center account in-app on the iPad, the popover for selecting the month for your date of birth shows up with no content to select.
The authenticate method of GKLocalPlayer has been removed. Authentication will automatically commence when the completion handler is set.
iCloud
When creating an iCloud account, you can use any email based Apple ID, or you can use your existing iCloud account. If you had a MobileMe account that you have not yet moved to iCloud, you must move it first by visiting http://me.com. Moving to iCloud is only available for a limited time. Logging into a MobileMe account is not supported in iOS 6.
icloud.com email addresses are now available for iCloud mail users. Users signing up for new Apple IDs, or enabling Mail on their iCloud account for the first time, will automatically receive an @icloud.com email address instead of a me.com email address. iCloud users with @me.com addresses that have been used with iOS 6 beta 3 will receive an @icloud.com email address that matches their @me.com address.
icloud.com email cannot be sent from www.icloud.com. Users should use http://beta.icloud.com at this time if they wish to send email from their icloud.com address using a web browser.
Provisioning profiles must be enabled for iCloud in the iOS Provisioning Portal. To enable a provisioning profile for iCloud, navigate to the App ID section of the iOS Provisioning Portal and configure your App ID for iCloud. After enabling the App ID for iCloud, regenerate your provisioning profiles to enable them for iCloud.
In iOS 6, files that are protected via Data Protection cannot be used with iCloud Storage APIs.
File names are case-insensitive in OS X but case-sensitive in iOS. This can lead to problems when sharing files between the two platforms using iCloud. You should take steps on iOS to avoid creating files whose names differ only by case.
The behavior of coordinated read operations on iCloud Documents has changed.
On previous iOS releases, when your app performed a coordinated read operation on a file or package, and the iCloud daemon noticed that there was a newer version of the item available, the coordinated read operation blocked until the newer version of the item was downloaded and written to the disk.
Starting in iOS 6 beta 3, when you start a coordinated read operation on a file or package for which you already have a local version, the coordinated read will be granted as soon as possible, and the new version, if any, will download in the background. This call will block for downloading reasons only if you do not have any version of the file available locally.
Additionally, when the file is conflicted, the iCloud daemon will not wait until it has all the conflict losers of the file available to make the file available to your app. It will make the different versions of the conflicted file available as soon as it can. Your app can use the existing file coordination and the UIDocument callbacks to be notified when the conflict losers have been downloaded and are available.
iMessage & FaceTime
FIXED: The Answer and Decline buttons are missing when receiving calls in landscape orientations.
iTunes
iTunes 10.6.3 is required for iOS SDK 6.0.
FIXED: When restoring from an iTunes backup, the device intermittently shows up as a new device after rebooting. If that happens, set up the device as a “new device” when prompted to restore for the 2nd time. All data should have been restored correctly but sync settings including App arrangement in iTunes are lost.
Maps
In iOS 6 and later, Map Kit is built on a new infrastructure hosted by Apple. Earlier iOS releases will continue to use Google’s service.
API compatibility will be maintained (see known issues below).
Maps are now supported in the Simulator.
Map data will continue to evolve—only a limited amount of high resolution satellite imagery is currently available.
FIXED: If Maps is not running in the background, a "Maps cannot connect to the internet" error is displayed when it is launched from a 3rd party app.
FIXED: If Maps has not yet been launched, the current location does not show up when it is launched from a 3rd-party app.
Routing apps that do not specify a coverage file during development will always be displayed in the Maps routing search results.
Testing and debugging of coverage files for routing apps is only supported during development through the Xcode "Run" workflow. (You can specify the coverage file for a given Run scheme using the Options pane of the Run section of the scheme editor.) Apps that are archived and distributed (outside of the App Store) onto devices will not have access to the app's coverage files.
Maps does not zoom into the current location when launched from a 3rd party app.
Newsstand
Only simple http downloads will work with Newsstand.
Passbook
FIXED: An airplane icon appears between the origin and destination for all transit types.
The "Description" field is now a required field for a Pass. All passes created without it will fail to validate and will not ingest.
FIXED: The Passbook database has been reset. You’ll need to add your passes again.
Passbook in the simulator no longer requires https/ssl when using a webServiceURL when ingesting a pass.
Unable to show boarding passes on lock screen.
Reminders
FIXED: There are issues when adding and editing reminders in the Reminders app on iPhone devices:
The Done button is missing when adding a new reminder.
The app crashes when you tap the Edit button to edit a reminder.
Security
In iOS 5, signing a certificate with an MD5 signature is not supported. Please ensure that certificates use signature algorithms based on SHA1 or SHA2.
In iOS 6, there are improved privacy controls for Calendars, Reminders, Contacts, and Photos.
Users will see access dialogs when an app tries to access any of those data types. The user can switch access on and off in Settings > Privacy.
Developers can set a "purpose" string for each class of isolated data. iOS displays this string to users to help them understand why their data is being requested. These strings can be added using Xcode's Project editor, in the Info tab. The relevant key names begin with the string "Privacy -".
There are changes to the Event Kit and Address Book frameworks to help developers with this feature.
Simulator
The app delete confirmation alert panel takes a while to show up in iOS Simulator.
FIXED: Tapping the buy button in the view of an SKStoreProductViewController object in iOS Simulator causes the app to crash.
No privacy alerts are displayed in iOS Simulator for apps that access Photos, Contacts, Calendar and Reminders.
Downloading in-app purchase hosted content in iOS Simulator is not supported.
When attempting to play an MP3 sound in the Simulator, you will hear a popping sound instead.
FIXED: Using the iOS 5.1 SDK with the iPad (Retina) profile will result in a SpringBoard crash. The iOS 5.1 SDK works with all other profiles and the iPad (Retina) SDK works with the iOS 6.0 SDK.
FIXED: Ads of type ADAdTypeMediumRectangle do not appear in iPad Simulator.
Shared Photo Stream
User must go to Settings > iCloud to ensure that they receive Shared Photo Stream Notifications.
In order to share a Photo Stream with iOS 6 beta, you must invite someone using their iCloud email address or they will not receive the invitation.
Upgrading from iOS 6 beta 1 to beta 2 will cause your device to re-download all of your Shared Photo Streams.
The Shared Photo Stream feature is set to OFF when updating from iOS 6 beta 1 to a later release. The default setting should be ON.
Turning off Shared Photo Streams may leave camera in an unresponsive state, force quitting camera will resolve this issue.
Social
Weibo shows up in the Settings app only if a Chinese keyboard is enabled.
In the options parameter of this new method, pass nil to access Twitter and Weibo accounts. To access Facebook accounts, pass a dictionary with the following keys (which are documented in ACAccountStore.h):
ACFacebookAppIdKey
ACFacebookPermissionsKey
ACFacebookPermissionGroupKey
You should no longer add this dictionary to your app's Info.plist file, as was required in beta 1.
SpringBoard
FIXED: After restoring a device in iTunes or performing an "Erase All Contents and Settings", the current wallpaper may not appear until the device is rebooted once.
Status Bar
It is now possible to set status bar tint parameters in your app’s Info.plist file. You might do this to ensure that the status bar color matches the navigation bar color of your app during startup. To set the status bar tint, add the UIStatusBarTintParameters key to your Info.plist file. The value of this key is a dictionary with the appropriate values describing the navigation bar your app has at startup time. Inside the dictionary should be the UINavigationBar key, whose value is also a dictionary. That dictionary contains the initial navigation bar's style (with the Style key) and whether it's translucent (with the Translucent key). If your navigation bar uses them, you can also specify its tint color (with the TintColor key), or the name of its custom background image (with the BackgroundImage key).
UIKit
In iOS 5.1, the UISplitViewController class adopts the sliding presentation style when presenting the left view (previously only seen in Mail). This style is used when presentation is initiated either by the existing bar button item provided by the delegate methods or by a swipe gesture within the right view. No additional API adoption is required to obtain this behavior, and all existing API, including that of the UIPopoverController instance provided by the delegate, will continue to work as before. If the gesture would be insupportable in your app, setting the presentsWithGesture property of your split view controller to NO disables the gesture. However, disabling the gesture is discouraged because its use preserves a consistent user experience across all apps.
FIXED: In iOS 6, changes have been introduced so that you no longer need to set a delegate and implement a method for Single-Finger and Single-Tap gesture recognizers, in an effort to make them work well with the UIControl objects.
In iOS 6 and later, the UIWebView class paints its contents asynchronously.
FIXED: Developers trying out Auto Layout with UIScrollView objects might notice jitters in the scroll indicators on devices with Retina displays.
More responsibility is moving to the app and the app delegate. Now, iOS containers (such as UINavigationController) do not consult their children to determine whether they should autorotate. By default, an app and a view controller’s supported interface orientations are set to UIInterfaceOrientationMaskAll for the iPad idiom and UIInterfaceOrientationMaskAllButUpsideDown for the iPhone idiom.
A view controller’s supported interface orientations can change over time. Even an app’s supported interface orientations can change over time. The system asks both the topmost full screen view controller (typically the root view controller) for its supported interface orientations whenever the device rotates or whenever a view controller is presented with the full screen modal presentation style. Moreover the supported orientations are retrieved only if this view controller returns YES from its shouldAutorotate method. The system intersects the view controller’s supported orientations with the app's supported orientations (as determined by the Info.plist file or the app delegate's application:supportedInterfaceOrientationsForWindow: method) to determine whether to rotate.
The setStatusBarOrientation:animated: method is not deprecated outright. However it now works only if the supportedInterfaceOrientations method of the topmost full screen view controller returns 0. This puts the responsibility of ensuring that the status bar orientation is consistent into the hands of the caller.
For compatibility, view controllers that still implement the shouldAutorotateToInterfaceOrientation: method do not get the new autorotation behaviors. (In other words, they do not fall back to using the app, app delegate, or Info.plist file to determine the supported orientations.) Instead, the shouldAutorotateToInterfaceOrientation: method used to synthesize the information that would be returned by the supportedInterfaceOrientations method.
FIXED: In certain situations, the Auto Layout system might not engage automatically for a view. To workaround this problem, override the requiresConstraintBasedLayout class method in your view and return YES from your implementation.
You should make sure that your apps are not using these methods to manage the layout of any subviews. Instead, they should use the view controller’s viewWillLayoutSubviews method and adjust the layout using the view’s bounds rectangle.
In iOS 6, the viewWillUnload and viewDidUnload methods of UIViewController are now deprecated. If you were using these methods to release data, use the didReceiveMemoryWarning method instead. You can also use this method to release references to the view controller’s view if it is not being used. You would need to test that the view is not in a window before doing this.
FIXED: Calling any of the attributed string drawing methods without specifying a value for the NSFontAttributeName attribute is likely to throw an exception. The workaround is to set a value for the NSFontAttributeName key before drawing or sizing an NSAttributedString object.
Setting values for the shadowOffset or shadowColor properties of a UILabel object, whose attributedText property contains a valid attributed string, is unsupported. Use the NSShadowAttributeName attribute of the attributed string to set the shadow instead.
The setContentStretch: method of UIView has been deprecated in this beta release. To achieve the same effect, use the resizableImageWithCapInsets: method of UIImage and display the image with a UIImageView.
The resizableImageWithCapInsets: method of UIImage effectively resizes images by tiling. As a performance optimization, it uses stretching rather than tiling when the user would not be able to tell the difference, like when a single column or row is being stretched. But in certain circumstances, one might want to actually stretch some region of an image. In iOS 6, the resizableImageWithCapInsets:resizingMode: method allows the caller to specify a tiling or stretching resizing mode.
The class now supports the customization of the animations created during rotation. The names of methods for customizing insert and delete animations have also changed so that the same hooks can be used for rotations as well as for insertions and deletions.
The class has changed some method names. Specifically, decoration views are no longer referred to by "reuse identifier" but rather by "element kind." Apps that are using decoration views will need to modify their code and rebuild to accommodate this.
FIXED: In iOS 6, a bug was fixed where UIWebView.isLoading was set to NO before the main frame finished loading. Now, UIWebView.isLoading is set to NO when the main frame is done loading.
The bottom edge of a UILabel view is now different from its baseline.
Previously, auto layout was interpreting the bottom of a UILabel to be the same as its baseline. While convenient in many cases, it caused problems if you wanted to place the top edge of one label against the bottom edge of another. In such a scenario, the bottom label would overlap the top one, and descenders from the top label could crash into ascenders from the bottom label. Now, auto layout interprets UILayoutAttributeBottom as the bottom of the text box (presuming the label is not bigger than its intrinsic content size), and UILayoutAttributeBaseline as the baseline of the text. If you have already created code for laying out labels according to the bottom or center point, your text will move around a little and you will need to adjust your constraints.
Apps with table views in their nib or storyboard files, and that were built using previous versions of iOS 6 beta, will require a clean build with beta 3 and newer.
Here are some notes regarding auto layout support for UIScrollView:
In general, auto layout considers the top, left, bottom, and right edges of a view to be the visible edges. That is, if you pin a view to the left edge of its superview, you're really pinning it to the minimum x-value of the superview’s bounds. Changing the bounds origin of the superview does not change the position of the view.
The UIScrollView class scrolls its content by changing the origin of its bounds. To make this work with auto layout, the meaning of the top, left, bottom, and right edges within a scroll view now mean the edges of its content view.
The constraints on the subviews of the scroll view must result in a size to fill, which is then interpreted as the content size of the scroll view. (This should not be confused with the intrinsicContentSize method used for auto layout.) To size the scroll view's frame with auto layout, constraints must either be explicit regarding the width and height of the scroll view or the edges of the scroll view must be tied to views outside of its subtree.
Note that you can make a subview of the scroll view appear to float (not scroll) over the other scrolling content by creating constraints between the view and a view outside the scroll view's subtree, such as the scroll view's superview.
Here are some examples of how to configure the scroll view:
Create a plain UIView content view for your scroll view that will be the size that you want your content to have. Make it a subview of the scroll view but let it continue to translate the autoresizing mask into constraints:
Create the views you want to put inside the content view and configure their constraints so as to position them within the content view.
Alternatively, you can create a view subtree to go in the scroll view, set up your constraints, and call the systemLayoutSizeFittingSize: method (with the UILayoutFittingCompressedSize option) to find the size you want to use for your content view's size and the contentSize property of the scroll view.
Position and size your scroll view with constraints external to the scroll view.
Use constraints to lay out the subviews within the scroll view, being sure that the constraints tie to all four edges of the scroll view and do not rely on the scroll view to get their size.
A simple example would be a large image view, which has an intrinsic content size derived from the size of the image. In the viewDidLoad method of your view controller, you would include code like the following:
This would give you a scroll view that resized as the view controller's view resized (such as on device rotation), and the image view would be a scrolling subview. You don't have to set the content size of the scroll view.
Safari & WebKit
WebKit on iOS now supports the requestAnimationFrame and cancelAnimationFrame methods in JavaScript, as described here http://www.w3.org/TR/animation-timing/.
Note that because the specification is still at the Working Draft state, these methods have the webkit prefix, so they are window.webkitRequestAnimationFrame, window.webkitCancelAnimationFrame.
The default app cache quota has been increased from 5MB to 25MB.
The JPEG subsampling threshold was increased from 2 MP (megapixels) to 5 MP on all supported hardware except iPhone 3GS and iPod touch (4th gen).
Support has been added for <input type="file"> tags in web forms. Users can upload existing photos and videos from their photo library or take a picture or video using the camera. Previously this form control was always disabled.
With Safari 6.0 on OS X, developers can now use the Web Inspector (web development tool) with attached iOS devices and iOS Simulator. Developers can use the Web Inspector to debug Safari and the UIWebView class in their own apps built and run from Xcode. This replaces the Debug Console banner in Safari.
In iOS 6 and later, web data (SQL Web Storage and LocalStorage) from a UIWebView object can be stored in a directory that will be backed up. To enable backing up this data, set the WebKitStoreWebDataForBackup key to YES in your app’s user defaults. This should be done only if your app relies on web content data that cannot be reloaded. If your UIWebView object opens links to arbitrary web content, this key should be set to NO. Toggling the value of this key will not preserve existing web view data.
In iOS 6 and later, Safari no longer registers for the common feed: RSS/ATOM scheme. Apps that can view those types of feeds are encouraged to register for that URL scheme.
WebKit no longer always creates hardware-accelerated layers for elements with the -webkit-transform: preserve-3d option. Authors should stop using this option as a way to get hardware acceleration.
Experimental CSS3 Flexbox support will be disabled. Please switch from using -webkit-flexbox and -webkit-inline-flexbox to -webkit-box and -webkit-inline-box.
As of iOS 6, embedded YouTube URLs in the form of http://www.youtube.com/watch?v=oHg5SJYRHA0 will no longer work. These URLs are for viewing the video on the YouTube site, not for embedding in web pages. Instead, the format that should be used is described in https://developers.google.com/youtube/player_parameters.
In iOS 6, the keyboardDisplayRequiresUserAction property was added to the UIWebView class. The property defaults to YES, which means that calling focus() on a form element will not bring up the keyboard. By changing the property to NO, a JavaScript call to focus() on a form element will focus the element and automatically bring up the keyboard.
As of iOS 6, calling focus() on a form element in a web app will focus the element.