iOS SDK Release Notes for iOS 6
Contents:
Introduction
iOS 6 SDK 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 6 SDK 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.
For more information and additional support resources, visit http://developer.apple.com/programs/ios/.
Bug Reporting
To report any bugs not mentioned in the Notes and Known Issues section, please use the Apple Bug Reporter on the Apple Developer website (http://developer.apple.com/bugreporter/). Additionally, you may discuss these issues and iOS 6 SDK in the Apple Developer Forums (http://devforums.apple.com). You can get more information about iCloud for Developers at http://developer.apple.com/icloud.
Notes and Known Issues
The following issues relate to using iOS 6 SDK to develop code.
Accounts Framework
When requesting access to Facebook accounts, the only key required in your options dictionary is
ACFacebookAppIdKey
.ACFacebookPermissionGroupKey
andACFacebookAppVersionKey
are now obsolete.If you request a write permission under
ACFacebookPermissionsKey
, such aspublish_stream
, you must provide a value forACFacebookAudienceKey
, which can be one ofACFacebookAudienceEveryone
,ACFacebookAudienceFriends
, orACFacebookAudienceOnlyMe
.
Address Book
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 theABAddressBookCreateWithOptions
function. TheABAddressBookRequestAccessWithCompletion
function does not block the app while the user is being asked to grant or deny access. Until access has been granted, theABAddressBookRef
object will not contain any contacts, and any attempt to modify contacts fails with akABOperationNotPermittedByUserError
error. The user is prompted only the first time access is requested; any subsequent calls toABAddressBookCreateWithOptions
will use the existing permissions. The completion handler is called on an arbitrary queue. If theABAddressBookRef
object is used throughout the app, then all usage must be dispatched to the same queue to useABAddressBookRef
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.
For Address Book, call the
ABAddressBookGetAuthorizationStatus
function. For Event Kit, call theauthorizationStatusForEntityType:
class method ofEKEventStore
. For Assets Library, call theauthorizationStatus
class method ofALAssetsLibrary
. 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.
Audio
Beginning in iOS 6, apps need to have the audio key in their
UIBackgroundModes
in order to use CoreMIDI’sMIDISourceCreate
andMIDIDestinationCreate
functions. Without the key set, these functions will returnkMIDINotPermitted
(-10844).
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 BonjourDNSService*()
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 thekDNSServiceFlagsIncludeP2P
flag when usingkDNSServiceInterfaceIndexAny
, or setinterfaceIndex
tokDNSServiceInterfaceIndexP2P
. The affected APIs are:
Core Image
In iOS 6, Core Image adds the following filters to the set provided in iOS 5:
CIAffineClamp
,CIAffineTile
,CIBarsSwipeTransition
,CIBlendWithMask
,CIBloom
,CIBumpDistortion
,CIBumpDistortionLinear
,CICircleSplashDistortion,CICircularScreen
,CIColorMap
,CIColorPosterize
,CICopyMachineTransition
,CIDisintegrateWithMaskTransition
,CIDissolveTransition
,CIDotScreen
,CIEightfoldReflectedTile
,CIFlashTransition
,CIFourfoldReflectedTile
,CIFourfoldRotatedTile
,CIFourfoldTranslatedTile
,CIGaussianBlur
,CIGlideReflectedTile
,CIGloom
,CIHatchedScreen
,CIHoleDistortion
,CILanczosScaleTransform
,CILineScreen
,CIMaskToAlpha
,CIMaximumComponent
,CIMinimumComponent
,CIModTransition
,CIPerspectiveTile
,CIPerspectiveTransform
,CIPinchDistortion
,CIPixellate
,CIRandomGenerator
,CISharpenLuminance
,CISixfoldReflectedTile
,CISixfoldRotatedTile
,CISmoothLinearGradient
,CIStarShineGenerator
,CISwipeTransition
,CITriangleKaleidoscope
,CITwelvefoldReflectedTile
,CIUnsharpMask
,CIVortexDistortion
Also in iOS 6, Core Image allows the creation of
CIImage
objects that reference Open GL texture objects via theimageWithTexture:size:flipped:colorSpace:
method of theCIImage
class.
Event Kit
When 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 ofEKEventStore
. 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
Landscape-only apps that invoke a portrait-only view controller (such as the Game Center login screen) will cause the app to crash.
Workaround:
Apps should provide the delegate method
application:supportedIntefaceOrientationsForWindow
and ensure that portrait is one of the returned mask values.When a
UIBNavigationController
is involved, subclass theUINavigationController
and overridingsupportedInterfaceOrientations
.
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 cannot be sent from www.icloud.com. At this time, users should go to http://beta.icloud.com if they wish to use a web browser to send email from theiricloud.com
address.
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 ofNSMetadataQuery
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 avoid creating files with names that differ only by case.
The behavior of coordinated read operations on iCloud Documents has changed:
In 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, 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 a 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 6 SDK.
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:Replace
CLActivityTypeVehicularNavigation
withCLActivityTypeAutomotiveNavigation
.Add
CLActivityTypeOtherNavigation
for other vehicular navigation—e.g., boats, trains, or planes.
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 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.
Developers should review their code for calls to
renderInContext
on the layer backing anMKMapView
; failure to do so can cause their apps to crash. If these calls are made off the main thread, they should be eliminated or moved to the main thread.
Media Player
As of iOS 6, if you play video or audio within a
UIWebView
, you must configure the audio session correctly so that the audio is not silenced by the ringer switch. This behavior matches video and audio when played using native classes.
Passbook
Passes will no longer fall back to
background.png
ifstrip.png
is not included in your pass bundle.The contents of the
userInfo
dictionary forPKPassLibraryDidChangeNotification
have changed in the case of removed passes. Please consult the latest documentation for the newuserInfo
dictionary.Passes must include the WWDR Intermediate Certificate in their signature. Passes that omit this certificate are invalid and cannot be added to Passbook. This restriction was not enforced in previous beta releases.
Images included in passes that use RGB need to include an alpha channel.
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.
Shared Photo Stream
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.
Simulator
No privacy alerts are displayed in iOS Simulator for apps that access Photos, Contacts, Calendar, and Reminders.
For this release, iOS Simulator does not support testing In-App Purchase. Please use a device to test your apps that use this feature.
When attempting to play an MP3 sound in Simulator, you will hear a popping sound instead.
Social
Weibo shows up in the Settings app only if a Chinese keyboard is enabled.
The
requestAccessToAccountsWithType:withCompletionHandler:
method ofACAccountStore
is now deprecated. To access user accounts, please use therequestAccessToAccountsWithType:options:completion:
method.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 inACAccountStore.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
andACFacebookAppVersionKey
are now obsolete.If you request a write permission under
ACFacebookPermissionsKey
—such aspublish_stream
—you must provide a value forACFacebookAudienceKey
, which can be one ofACFacebookAudienceEveryone
,ACFacebookAudienceFriends
, orACFacebookAudienceOnlyMe
.
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 theUIStatusBarTintParameters
key to yourInfo.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 theUINavigationBar
key, which has a value that is also a dictionary. That dictionary contains the initial navigation bar’s style (with theStyle
key) and indicates whether it is translucent (with theTranslucent
key). You can also specify your navigation bar’s tint color (with theTintColor
key) or the name of its custom background image (with theBackgroundImage
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 theUIPopoverController
instance provided by the delegate—will continue to work as before. If the gesture would be insupportable in your app, setting thepresentsWithGesture
property of your split view controller toNO
disables the gesture. However, disabling the gesture is discouraged because its use preserves a consistent user experience across all apps.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 ofUIViewController
is deprecated. In its place, you should use thesupportedInterfaceOrientationsForWindow:
andshouldAutorotate
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 toUIInterfaceOrientationMaskAll
for the iPad idiom andUIInterfaceOrientationMaskAllButUpsideDown
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 itsshouldAutorotate
method. The system intersects the view controller’s supported orientations with the app’s supported orientations (as determined by theInfo.plist
file or the app delegate’sapplication:supportedInterfaceOrientationsForWindow:
method) to determine whether to rotate.The system determines whether an orientation is supported by intersecting the value returned by the app’s
supportedInterfaceOrientationsForWindow:
method with the value returned by thesupportedInterfaceOrientations
method of the top-most full-screen controller.The
setStatusBarOrientation:animated:
method is not deprecated outright. It now works only if thesupportedInterfaceOrientations
method of the top-most full-screen view controller returns0
. This makes the caller responsible for ensuring that the status bar orientation is consistent.
The
willRotateToInterfaceOrientation:duration:
,willAnimateRotationToInterfaceOrientation:duration:
, anddidRotateFromInterfaceOrientation:
methods are no longer called on any view controller that makes a full-screen presentation over itself—for example,presentViewController:animated:completion:
.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
andviewDidUnload
methods ofUIViewController
are now deprecated. If you were using these methods to release data, use thedidReceiveMemoryWarning
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 not supported to set values for the
shadowOffset
orshadowColor
properties of aUILabel
object if itsattributedText
property contains a valid attributed string. Instead, use theNSShadowAttributeName
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 not supported. It will throw an exception when it is used with thetextAlignment
property ofUILabel
or is supplied as the alignment parameter to thedrawInRect:withFont:lineBreakMode:alignment:
method ofNSString
.The
setContentStretch:
method ofUIView
has been deprecated. To achieve the same effect, use theresizableImageWithCapInsets:
method ofUIImage
and display the image with aUIImageView
.The
resizableImageWithCapInsets:
method ofUIImage
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, theresizableImageWithCapInsets:resizingMode:
method allows the caller to specify a tiling or stretching resizing mode.The
UICollectionViewLayout
class has changed: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 be rebuilt 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 interpretsUILayoutAttributeBottom
as the bottom of the text box (presuming the label is not bigger than its intrinsic content size) andUILayoutAttributeBaseline
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 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’sframe
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:
Mixed approach:
Position and size your scroll view with constraints external to the scroll view—that is, the
translatesAutoresizingMaskIntoConstraints
property is set toNO
.Create a plain
UIView
content view for your scroll view that will be the size 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:UIView *contentView = [[UIView alloc]
initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
[scrollView addSubview:contentView];
// DON'T change contentView's translatesAutoresizingMaskIntoConstraints,
// which defaults to YES;
Set the content size of the scroll view to match the size of the content view:
[scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
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 theUILayoutFittingCompressedSize
option) to find the size you want to use for your content view and thecontentSize
property of the scroll view.
Pure Auto Layout approach:
Set
translatesAutoresizingMaskIntoConstraints
toNO
on all views involved.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:UIScrollView *scrollView = [[UIScrollView alloc] init];
UIImageView *imageView = [[UIImageView alloc] init];
[imageView setImage:[UIImage imageNamed:"MyReallyBigImage"]];
[self.view addSubview:scrollView];
[scrollView addSubview:imageView];
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
imageView.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
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.
Landscape-only apps that invoke a portrait-only view controller (such as the Game Center login screen) will cause the app to crash.
Workaround:
Apps should provide the delegate method
application:supportedIntefaceOrientationsForWindow
and ensure that portrait is one of the returned mask values.When a
UIBNavigationController
is involved, subclass theUINavigationController
and overridingsupportedInterfaceOrientations
.
WebKit and Safari
WebKit on iOS now supports the
requestAnimationFrame
andcancelAnimationFrame
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 arewindow.webkitRequestAnimationFrame
andwindow.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 theWebKitStoreWebDataForBackup
key toYES
in your app’s user defaults. This should be done only if your app relies on web content data that cannot be reloaded. If yourUIWebView
object opens links to arbitrary web content, this key should be set toNO
. 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.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 theUIWebView
class. The property defaults toYES
, which means that callingfocus()
on a form element will not bring up the keyboard. By changing the property toNO
, a JavaScript call tofocus()
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.
Copyright © 2018 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2013-01-15