<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mobile Developers &#124; Android Developers &#124; iPhone Developers &#124; PointAbout &#187; Mobile Application Developers | iPhone Developers | Android Developers</title>
	<atom:link href="http://www.pointabout.com/category/development-blog/updates-fixes/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pointabout.com</link>
	<description>Mobilizing Brands</description>
	<lastBuildDate>Wed, 25 Jan 2012 18:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>New Developer&#8217;s Resource Documents from Apple</title>
		<link>http://www.pointabout.com/2010/06/08/new-developers-resource-documents-from-apple/</link>
		<comments>http://www.pointabout.com/2010/06/08/new-developers-resource-documents-from-apple/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 20:19:48 +0000</pubDate>
		<dc:creator>admin_point</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Development Blog]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[Mobile Developer News]]></category>
		<category><![CDATA[Mobile Practices]]></category>
		<category><![CDATA[PointAbout Dev Help]]></category>
		<category><![CDATA[Updates & Fixes]]></category>
		<category><![CDATA[User Interface and Media Assets]]></category>

		<guid isPermaLink="false">http://www.pointaboutadmin.com/?p=3005</guid>
		<description><![CDATA[Apple Developer&#8217;s Resource &#8211; What&#8217;s New in iPhone OS .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. Apple Developer&#8217;s Resource &#8211; Over-the-Air Profile Delivery &#038; Configuration]]></description>
			<content:encoded><![CDATA[<p><a title="View Apple Developer's Resource - What's New in iPhone OS" href="http://www.scribd.com/doc/32728073/Apple-Developer-s-Resource-What-s-New-in-iPhone-OS" alt="What's New in iPhone OS General 2010-04-30</p>
<p>Page 3<br />
Contents Introduction 7 Organization of This Document 7Getting the iPhone SDK 7 iPhone OS 4.0 9 Multitasking 9Integration Technologies 10Local Notifications 10Event Kit 10Data Protection 10Core Telephony 11iAd 11Graphics and Multimedia 11Quick Look Framework 11AV Foundation 11Assets Library 12Image I/O 12Core Media 12Core Video 12Core Services 13Block Objects 13Grand Central Dispatch 13Accelerate Framework 13Xcode Tools 14Xcode Improvements 14UI Automation API 14Framework Enhancements 14UIKit Framework Enhancements 14Foundation Framework Enhancements 15OpenGL ES Enhancements 16Game Kit Enhancements 16Core Location Enhancements 17Map Kit Enhancements 17Message UI Enhancements 17Core Graphics Enhancements 17ICU Enhancements 18Inherited Improvements 18 3 2010-04-30 | © 2010 Apple Inc. All Rights Reserved.<br />
Page 4<br />
iPhone OS 3.2 19 User Interface Changes 19Popovers 19Split Views 19Custom Input Views 20External Display Support 20Gesture Recognizers 20Improved Text Support 21Core Text 21Text Input Support 21Custom Font Support 22ICU Regular-Expression Support 22File and Document Support 22File-Sharing Support 22Document Support 23PDF Generation 23Xcode Tools 23API Changes 24UIKit Framework Changes 24Media Player Framework Changes 25Core Animation Changes 25MapKit Framework Changes 25Foundation Framework Changes 25 iPhone OS 3.1 27 Video Editing Support 27Core Animation Enhancements 27Instruments 27 iPhone OS 3.0 29 Apple Push Notification Service 29Cut, Copy, and Paste 29Accessory Support 30In App Purchase Support 30Peer to Peer Support 30Maps API 31iPod Library Access 31Audio Recording and Management 31Core Data 32In App Email 32Streaming Video 32Safari Features 33Shared Keychain Items 33 4 2010-04-30 | © 2010 Apple Inc. All Rights Reserved.<br />
Page 5<br />
Accessibility Support 33Compass Support 34  OpenGL ES 2.0 3 Additional Enhancements 34 UIKit Framework Enhancements 34 Foundation Framework Enhancements 35 Core Audio Enhancements API<br />
“iPhone OS 4.0” (page 9) describes the new and updated features in iPhone OS 4.0. ■ “iPhone OS 3.2” (page 19) describes the new and updated features in iPhone OS 3.2. ■ “iPhone OS 3.1” (page 27) describes the new and updated features in iPhone OS 3.1. ■ “iPhone OS 3.0” (page 29) describes the new and updated features in iPhone OS 3.0. Getting the iPhone SDK Development of iPhone applications requires an Intel-based Macintosh computer running Mac OS X v10.5or later. You must also download and install the iPhone SDK. For information about how to get the iPhoneSDK, go to http://developer.apple.com/iphone/.Organization of This Document 7 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. Introduction<br />
Page 8<br />
8 Getting the iPhone SDK 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. Introduction<br />
Page 9<br />
This article summarizes the developer-related features introduced in iPhone OS 4.0. This version of theoperating system runs on iPhone and iPod touch only and does not run on iPad. In addition to describingthe new features, this article lists the documents that describe those features in more detail.Note: iPhone OS 4.0 does not support iPad. It runs only on iPhone and iPod touch devices.For the latest updates and information, you should also see iPhone OS 4.0 Release Notes. For the list of APIdifferences between the iPhone OS 4.0 and earlier versions of iPhone OS, see iPhone OS 4.0 API Diffs. Multitasking Applications built using iPhone SDK 4.0 or later (and running in iPhone OS 4.0 and later) are no longerterminated when the user presses the Home button; instead, they now shift to a background executioncontext. For many applications, this means that the application enters a suspended state of execution shortlyafter entering the background. Keeping the application in memory avoids the subsequent launch cycle andallows an application to simply reactivate itself, which improves the overall user experience. And suspendingthe application improves overall system performance by minimizing power usage and giving more executiontime to the foreground application.Although most applications are suspended shortly after moving to the background, applications that needto continue working in the background may do so using one of the following techniques: ■ An application can request a finite amount of time to complete some important task. ■ An application can declare itself as supporting specific services that require regular background executiontime. ■ An application can use local notifications to generate user alerts at designated times, whether or notthe application is running.Regardless of whether your application is suspended or continues running in the background, supportingmultitasking does require some additional work on your part. Background applications can still be terminatedunder certain conditions (such as during low-memory conditions), and so applications must be ready to exitat any time. This means that many of the tasks you used to perform at quit time must now be performedwhen your application moves to the background. This requires implementing some new methods in yourapplication delegate to respond to application state transitions.For more information on how to handle the new background state transitions, and for information on howto continue running in the background, see iPhone Application Programming Guide.Multitasking 9 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 10<br />
Integration Technologies The following sections describe the technologies you can use to enhance your application’s user experience. Local Notifications Localnotificationscomplementtheexistingpushnotificationsbygivingapplicationsanavenueforgeneratingthe notifications locally instead of relying on an external server. Background applications can use localnotifications as a way to get a user’s attention when important events happen. For example, a navigationapplication running in the background can use local notifications to alert the user when it is time to make aturn. Applications can also schedule the delivery of local notifications for a future date and time and havethose notifications delivered even if the application is not running.The advantage of local notifications is that they are independent of your application. Once a notification isscheduled, the system manages the delivery of it. Your application does not even have to be running whenthe notification is delivered.For more information about using local notifications, see Local and Push Notification Programming Guide. Event Kit The Event Kit framework ( EventKit.framework ) provides an interface for accessing calendar events on auser’s device. You can use this framework to get existing events and add new events to the user’s calendar.Calendar events can include alarms that you can configure with rules for when they should be delivered. Inaddition to using Event Kit for creating new events, you can use the view controllers of the Event Kit UIframework ( EventKitUI.framework ) to present standard system interfaces for viewing and editing events.For more information about the classes and methods of these frameworks, see EventKitFrameworkReferenceand Event Kit UI Framework Reference. Data Protection Applications that work with sensitive user data can now take advantage of the built-in encryption availableon some devices to protect that data. When your application designates a particular file as protected, thesystem stores that file on-disk in an encrypted format. While the device is locked, the contents of the file areinaccessible to both your application and to any potential intruders. However, when the device is unlockedby the user, a decryption key is created to allow your application to access the file.Implementing data protection requires you to be considerate in how you create and manage the data youwant to protect. Applications must themselves be designed to secure the data at creation time and to beprepared for changes in access to that data when the user locks and unlocks the device.For more information about how to add data protection to the files of your application, see “ImplementingStandard Application Behaviors” in iPhone Application Programming Guide. 10 Integration Technologies 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 11<br />
Core Telephony The Core Telephony framework ( CoreTelephony.framework ) provides interfaces for interacting withphone-based information on devices that have a cellular radio. Applications can use this framework to getinformation about a user’s cellular service provider. Applications interested in cellular call events can also benotified when those events occur.For more information about using the classes and methods of this framework, see CoreTelephonyFrameworkReference. iAd You can use iAd ( iAd.framework ) to deliver banner-based advertisements from your application.Advertisements are incorporated into standard views that you integrate into your user interface and presentwhen you want. The views themselves work with Apple’s ad service to automatically handle all the workassociated with loading and presenting the ad content and responding to taps in those ads.For more information about using iAd in your applications, see iAd Framework Reference. Graphics and Multimedia The following sections describe the new graphics and media-related technologies you can incorporate intoyour applications. Quick Look Framework The Quick Look framework ( QuickLook.framework ) provides a direct interface for previewing the contentsof files your application does not support directly. This framework is intended primarily for applications thatdownload files from the network or that otherwise work with files from unknown sources. After obtainingthe file, you use the view controller provided by this framework to display the contents of that file directlyin your user interface.For more information about the classes and methods of this framework, see QuickLookFrameworkReference. AV Foundation The AV Foundation framework ( AVFoundation.framework ) is for applications that need to go beyond themusic and movie playback features found in the Media Player framework. Originally introduced in iPhoneOS3.0,thisframeworkhasbeenexpandediniPhoneOS4.0toincludesignificantnewcapabilities,substantiallybroadening its usage beyond basic audio playback and recording capabilities. Specifically, this frameworknow includes support for the following features: ■ Media asset management ■ Media editing ■ Movie captureGraphics and Multimedia 11 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 12<br />
■ Movie playback ■ Track management ■ Metadata management for media items ■ Stereophonic panning ■ Precise synchronization between sounds ■ An Objective-C interface for determining details about sound files, such as the data format, sample rate,and number of channelsThe AV Foundation framework is a single source for recording and playing back audio and video in iPhoneOS. This framework also provides much more sophisticated support for handling and managing media items.For more information about the classes and methods of the AV Foundation framework, see AV FoundationFramework Reference. Assets Library The Assets Library framework ( AssetsLibrary.framework ) provides a query-based interface for retrievingauser’sphotosandvideos.Usingthisframework,youcanaccessthesameassetsthatarenominallymanagedby the Photos application, including items in the user’s saved photos album and any photos and videos thatwere imported onto the device. You can also save new photos and videos back to the user’s saved photosalbum.Formoreinformationabouttheclassesandmethodsofthisframework,seeAssetsLibraryFrameworkReference. Image I/O The Image I/O framework ( ImageIO.framework ) provides interfaces for importing and exporting imagedata and image metadata. This framework is built on top of the Core Graphics data types and functions andsupports all of the standard image types available in iPhone OS.For more information about the functions and data types of this framework, see ImageI/OReferenceCollection. Core Media The Core Media framework ( CoreMedia.framework ) provides the low-level media types used by AVFoundation. Most applications should never need to use this framework, but it is provided for those fewdevelopers who need more precise control over the creation and presentation of audio and video content.For more information about the functions and data types of this framework, see Core Media FrameworkReference. Core Video The Core Video framework ( CoreVideo.framework ) provides buffer and buffer pool support for Core Media.Most applications should never need to use this framework directly. 12 Graphics and Multimedia 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 13<br />
Core Services The following sections describe the new lower-level technologies and features you can incorporate into yourapplications. Block Objects Block objects are a C-level language construct that you can incorporate into your C, C++, and Objective-Ccode.Ablockobjectisamechanismforcreatinganadhocfunctionbody,somethingwhichinotherlanguagesis sometimes called a closure or lambda. You use block objects in places where you need to create a reusablesegment of code but where creating a function or method might be too heavyweight or inflexible.In iPhone OS, blocks are commonly used in the following scenarios: ■ As a replacement for delegates and delegate methods ■ As a replacement for callback functions ■ To implement completion handlers for one-time operations ■ To facilitate performing a task on all the items in a collection ■ Together with dispatch queues, to perform asynchronous tasksFor an introduction to block objects and how you use them, see A Short Practical Guide to Blocks. For moreinformation about blocks, see Blocks Programming Topics. Grand Central Dispatch Grand Central Dispatch (GCD) is a BSD-level technology that you use to manage the execution of tasks inyour application. GCD combines an asynchronous programming model with a highly optimized core toprovide a convenient (and more efficient) alternative to threading. GCD also provides convenient alternativesformanytypesoflow-leveltasks,suchasreadingandwritingfiledescriptors,implementingtimers,monitoringsignals and process events, and more.For more information about how to use GCD in your applications, see Concurrency Programming Guide. Forinformation about specific GCD functions, see Grand Central Dispatch (GCD) Reference. Accelerate Framework The Accelerate framework ( Accelerate.framework ) contains interfaces for performing math, big-number,and DSP calculations, among others. The advantage of using this framework over writing your own versionsof these libraries is that it is optimized for the different hardware configurations present in iPhone OS–baseddevices. Therefore, you can write your code once and be assured that it runs efficiently on all devices.For more information about the functions of the Accelerate framework, see Accelerate Framework Reference.Core Services 13 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 14<br />
Xcode Tools The following sections describe the improvements to the Xcode tools and the support for developing iPhoneOS applications. Xcode Improvements Xcode 3.2.3 introduces automatic device and provisioning-profile management in the Organizer window.With automatic device provisioning enabled, you can install applications on your device for debugging andtesting without having to log in to your team portal to register the device and download a provisioningprofileNote: You still need to log in to your team portal to create provisioning profiles with specific application IDsfor in-app purchase and push notifications. However, once created, those provisioning profiles will also bemanaged by Xcode if automatic device provisioning is enabled.For more information about using Xcode, see iPhone Development Guide. UI Automation API The Instruments application now provides support for automating the testing of your iPhone OS applications.The built-in Automation instrument works from scripts (written in JavaScript) that you provide to drive thesimulation of events in your application. These synthetic events are generated with the help of the accessibilityinterfaces built into iPhone OS and integrated into all existing UIKit views. You can use this instrument toimprove your testing process and deliver more robust applications.For information about how to use the Automation instrument, see Instruments User Guide. For informationabout the JavaScript objects and commands you use in your scripts, see UI Automation Reference Collection. Framework Enhancements The following existing frameworks and technologies include additional incremental changes. For a completelist of new interfaces, see iPhone OS 4.0 API Diffs. UIKit Framework Enhancements The UIKit framework includes the following enhancements: ■ The UIApplication classand UIApplicationDelegate protocolincludenewmethodsforschedulinglocal notifications and for supporting multitasking. ■ Drawing to a graphics context in UIKit is now thread-safe. Specifically: 14 Xcode Tools 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 15<br />
❏ The routines used to access and manipulate the graphics context can now correctly handle contextsresiding on different threads. ❏ String and image drawing is now thread-safe. ❏ Using color and font objects in multiple threads is now safe to do. ■ The UIImagePickerController class includes methods for programmatically starting and stoppingvideo capture. ■ The UILocalNotification class supports the configuration of local notifications; see “Local Notifications” (page 10). ■ The UIView class includes new block-based methods for implementing animations. ■ The UIWindow classhasanew rootViewController propertythatyoucanusetochangethecontentsof the window. ■ Media applications can now receive events related to the controls on an attached set of headphones.You can use these events to control the playback of media-related items. ■ Several new accessibility interfaces help you make some UI elements more accessible and allow you tocustomize your application experience specifically for VoiceOver users: ❏ The UIAccessibilityAction protocol makes it easy for VoiceOver users to adjust the value ofUI elements, such as pickers and sliders. ❏ UIPickerViewAccessibilityDelegate protocol enables access to the individual componentsof a picker. ❏ UIAccessibilityFocus protocol allows you to find out when VoiceOver is focused on an element,so you can help users avoid making unnecessary taps. ❏ The UIAccessibilityTraitStartsMediaSession trait allows you to prevent VoiceOver fromspeaking during a media session that should not be interrupted. ❏ New interfaces in UIAccessibility protocol allow you to specify the language in which labelsandhintsarespoken,andprovideannouncementsthatdescribeeventsthatdon'tupdateapplicationUI in way that would be perceptible to VoiceOver users. ■ The UINib class provides a way to instantiate multiple sets of objects efficiently from the same nib file.For information about the classes of the UIKit framework, see UIKit Framework Reference. Foundation Framework Enhancements The Foundation framework includes the following enhancements: ■ Most delegate methods are now declared in formal protocols instead of as categories on NSObject . ■ Block-based variants are now available for many types of operations. ■ There is new support for creating and formatting date information in NSDate and NSDateFormatter . ■ The NSDateComponents class added support for specifying time zone and quarter information. ■ There is support for regular-expression matching using the NSRegularExpression , NSDataDetector ,and NSTextCheckingResult classes.Framework Enhancements 15 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 16<br />
■ The NSBlockOperation class allows you to add blocks to operation queues. ■ You can use the NSFileManager class to mark files as protected; see “Data Protection” (page 10). ■ The NSFileWrapper class allows you to work with package-based document types. ■ The NSOrthography class describes the linguistic content of a piece of text. ■ The NSCache class provides support for storing and managing temporary data. ■ The URL-related classes have been updated so that you can now pipeline URL requests and set requestpriorities.For information about the classes of the Foundation framework, see Foundation Framework Reference. OpenGL ES Enhancements The OpenGL ES framework includes the following enhancements: ■ The APPLE_framebuffer_multisample extension enables full-scene anti-aliasing. ■ The EXT_framebuffer_discard extension can be used to improve the performance of applicationsthat use depth buffers or multisample framebuffers. ■ The APPLE_texture_max_level and EXT_shader_texture_lod extensions provide more controlover texture sampling. ■ The OES_vertex_array_object (http://www.khronos.org/registry/gles/extensions/OES/OES_vertex_ar- ray_object.txt) API allows caching of vertex array state, to decrease driver overhead. ■ The OES_depth_texture extension enables rendering real-time shadows using shadow maps. ■ The OES_texture_float (http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt)and OES_texture_half_float (http://www.khronos.org/registry/gles/extensions/OES/OES_tex- ture_float.txt) extensions adds texture formats with floating point components to enable High Dynamic Range rendering. ■ The APPLE_rgb_422 (http://www.opengl.org/registry/specs/APPLE/rgb_422.txt) extension enablestexturing from some common video formats. ■ Performance of texture creation and modification has been significantly improved. ■ Driver performance has been generally improved. Game Kit Enhancements The Game Kit framework includes a beta implementation of a centralized service called Game Center. Thisservice provides game developers with a standard way to implement the following features: ■ Aliases allow users to create their own online persona. Users log in to Game Center and interact withother players anonymously through their alias. Players can set status messages as well as mark specificpeople as their friends. ■ Leader boards allow your application to post scores to Game Center and retrieve them later. ■ Matchmaking allows players to connect with other players with Game Center accounts. 16 Framework Enhancements 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 17<br />
Important: GameCenter is available to developers only in iPhoneOS 4.0. It is introduced as a developer-onlyfeaturesothatyoucanprovidefeedbackasyouimplementandtestGameCenterfeaturesinyourapplications.However, Game Center is not a user feature in iPhone OS 4.0 and you should not deploy applications thatuse it to the App Store.For information about the classes of the Game Kit framework, see Game Kit Framework Reference. Core Location Enhancements The Core Location framework now includes a new location monitoring service that offers a lower-poweralternative for determining the user’s location.For information about the classes of the Core Location framework, see Core Location Framework Reference. Map Kit Enhancements The Map Kit framework includes the following enhancements: ■ Support for draggable map annotations ■ Support for map overlaysDraggable map annotations make it much easier to reposition those annotations after they have been addedto a map. The Map Kit framework handles most of the touch events associated with initiating, tracking, andending a drag operation. However, the annotation view must work in conjunction with the map view delegateto ensure that dragging of the annotation view is supported.Map overlays provide a way to create more complex types of annotations. Instead of being pinned to a singlepoint, an overlay can represent a path or shape that spans a wider region. You can use overlays to layerinformation such as bus routes, election maps, park boundaries, and weather maps on top of the map.For information about the functions and types of the Map Kit framework, see Map Kit Framework Reference. Message UI Enhancements The Message UI framework includes a new MFMessageComposeViewController class for composing SMSmessages. This class manages a standard system interface for composing and sending SMS messages. Incontrast with sending SMS messages using a specially formatted URL, this class allows you to create andsend the message entirely from within your application.For more information about the classes of the Message UI framework, see Message UI Framework Reference. Core Graphics Enhancements The Core Graphics framework includes the following enhancements: ■ The ability to embed metadata into PDF files using the CGPDFContextAddDocumentMetadata functionFramework Enhancements 17 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 18<br />
■ Support for creating color spaces using an ICC profile ■ Graphics context support for font smoothing and fine-grained pixel manipulationFor information about the functions and types of the Core Graphics framework, see CoreGraphicsFrameworkReference. ICU Enhancements The International Components for Unicode (ICU) libraries were updated to version 4.4. ICU is an open-sourceproject for Unicode support and software internationalization. The installed version of ICU includes only asubset of the header files that are part of the broader ICU library. Specifically, iPhone OS includes only theheaders used to support regular expressions.For more information about using the functions of the ICU 4.4 library, see the documentation at http://site.icu- project.org/. Inherited Improvements Although iPhone OS 3.2 does not run on iPhone and iPod touch devices, many of the features introduced inthat version of the operating system are also supported in iPhone OS 4.0. Specifically, iPhone OS 4.0 supports: ■ Custom input views ■ Connecting external displays ■ File-sharing support ■ Gesture recognizers ■ Core Text for text layout and rendering ■ Text input through integration with the keyboard ■ Custom fonts ■ ICU Regular Expressions ■ Document types ■ PDF generation ■ Xcode Tools changes ■ UIKit framework changes ■ Media Player framework changes ■ Core Animation changes ■ Foundation framework changesWhat is not supported are new controls and classes designed specifically for iPad. For more informationabout these features, see their descriptions in “iPhone OS 3.2” (page 19). 18 Inherited Improvements 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 4.0<br />
Page 19<br />
This article summarizes the developer-related features introduced in iPhone OS 3.2. This version of theoperating system runs on iPad only and many of the corresponding features were designed specifically forthat device. In addition to describing the features, this article lists the documents that describe those featuresin more detail.Note: iPhone OS 3.2 does not support iPhone and iPod touch devices. It runs only on iPad.For the latest updates and information, you should also see iPhone SDK Release Notes for iPhone OS 3.2. Forthe list of differences between iPhone OS 3.2 and earlier versions of iPhone OS, see iPhone OS 3.2 API Diffs. User Interface Changes Applications running on iPad have several new options for presenting content and receiving input from theuser. For information and guidelines about how to use these new features, be sure to consult iPad HumanInterface Guidelines. Popovers Popovers are floating views that reside above your application’s window and help you organize the contentsof your user interface. Popovers help to eliminate the clutter that might occur in applications that need todisplay important controls or information in an unobtrusive way that does not distract from the main content.The benefit of using a popover is that: ■ It appears only in response to specific user interactions and is dismissed automatically when the usertaps outside of its bounds. This behavior makes the popover less obtrusive to the user. ■ It typically covers only a small portion of the screen and so does not obscure as much of the underlyingcontent as a modal view might.For more information about using popovers in your application, see “Views and View Controllers” in iPadProgramming Guide. Split Views The UISplitViewController class is a new container view controller that you use to manage twoside-by-side content views. These content views are typically used to create a master-detail interface, wherebyselecting an item in one view causes the other view to display detailed information about the selection. Theviews themselves are managed by view controllers that you provide.User Interface Changes 19 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 20<br />
The split view controller coordinates any interactions between your view controllers and the system. Forexample, when the user rotates the device, the split view controller rotates both view controllers together,forwarding any needed notifications to both of them.For more information about split views, including how to use them in your applications, see “Views and ViewControllers” in iPad Programming Guide. Custom Input Views Instances of the UIResponder class now support the ability to display custom input and accessory viewswhen they become the first responder. Now, you can provide input views for any of your custom views andhave them presented automatically by the system. (Previously, the keyboard was the only supported inputview, and it was supported only by text view and text field objects.)In addition to input views, you can also provide a custom accessory view to display above the input view.Accessory views are commonly used to provide additional buttons and controls when the keyboard isdisplayed. The explicit support now provided by responder objects makes it easy to animate your accessoryviews into position.For more information about how to configure and use custom input and accessory views, see “Custom TextProcessing and Input” in iPad Programming Guide and the UIResponder Class Reference. External Display Support An iPad can be connected to an external display through a set of supported cables. When connected, theassociated screen can be used by the application to display content. Information about the screen, includingits supported resolutions, is accessible through the interfaces of the UIKit framework. You also use thatframework to associate your application’s windows with one screen or another. ■ The UIScreen class provides support for retrieving screen objects for all available screens (includingthe device’s main screen). Each screen object contains information about the properties of the screenitself, including the dimensions that correctly take into account the size and pixel aspect ratio of thescreen. ■ The UIScreenMode class provides information about one particular size and pixel aspect ratio settingof a screen. ■ Windows (represented by the UIWindow class) can now be assigned to a specific screen.For more information about the support offered by these classes, see the individual class descriptions in UIKitFramework Reference. Gesture Recognizers Gesture recognizers are objects that you attach to views and use to detect common types of gestures. Afterattaching it to your view, you tell it what action you want performed when the gesture occurs. The gesturerecognizer object then tracks the raw events and applies the system-defined heuristics for what the givengesture should be. Prior to gesture recognizers, the process for detecting a gesture involved tracking theraw stream of touch events coming to your view and applying potentially complicated heuristics to determinewhether the events represented the given gesture. 20 User Interface Changes 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 21<br />
UIKit now includes a UIGestureRecognizer class that defines the basic behavior for all gesture recognizers.You can define your own custom gesture recognizer subclasses or use one of the system-supplied subclassesto handle any of the following standard gestures: ■ Tapping (any number of taps) ■ Pinching in and out (for zooming) ■ Panning or dragging ■ Swiping (in any direction) ■ Rotating (fingers moving in opposite directions) ■ Long pressesFor more information about using gesture recognizers in your application, see “Gesture Recognizers” in iPadProgramming Guide. Improved Text Support In iPhone OS 3.2, there is significant new support for text input and rendering. This support is provided forapplications, such as word processors, that need more sophisticated text-handling capabilities. Core Text The Core Text framework ( CoreText.framework ) contains a set of simple, high-performance C-basedinterfaces for laying out text and handling fonts. The Core Text framework provides a complete text layoutengine that you can use to manage the placement of text on the screen. The text you manage can also bestyled with different fonts and rendering attributes.This framework is intended for use by applications that require sophisticated text handling capabilities, suchas word processing applications. If your application requires only simple text input and display, you shouldcontinue to use the existing classes of the UIKit framework.For more information about using the Core Text interfaces, see Core Text Programming Guide and Core TextReference Collection. Text Input Support The UIKit framework ( UIKit.framework ) includes new protocols that allow you to implement customtext-inputobjects.Ifyouareimplementinganapplicationthatrequiressophisticatedtext-handlingcapabilities,you can use these protocols to implement new views and controls for receiving incoming text. Dependingon your needs, there are different protocols for receiving text input. Which protocols you use will dependon the complexity of your user interface. ■ The UIKeyInput protocol lets you define simple objects (like text fields) that are capable ofcharacter-by-character input. ■ The UITextInput protocol lets you define complex text views that support multiple lines of text,selections, pasteboard operations, and more.Improved Text Support 21 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 22<br />
For more information about how to use the text input support to implement your own custom objects, see“Custom Text Processing and Input” in iPad Programming Guide. Custom Font Support Applications that want to use custom fonts can now include those fonts in their application bundle andregister those fonts with the system by including the UIAppFonts key in their Info.plist file. The valueof this key is an array of strings identifying the font files in the application’s bundle. When the system seesthe key, it loads the specified fonts and makes them available to the application.For more information about the keys you can include in your application’s Info.plist file, see InformationProperty List Key Reference. ICU Regular-Expression Support The BSD layer of iPhone OS now exposes a modified version of 4.2 of the International Components forUnicode (ICU) libraries. ICU is an open-source project for Unicode support and software internationalization.The installed version of ICU includes only those header files necessary to support regular expressions.For more information about using the functions of the ICU 4.2 library, see the documentation and user guideat http://icu-project.org/apiref/icu4c/index.html. File and Document Support In iPhone OS 3.2, there is new support for exchanging and opening files. This support makes it easier toimplement more document-centric applications, similar to what you might find on a desktop computer,while still maintaining a simplified interface for your users. File-Sharing Support Applications that want to make user data files accessible can do so using application file sharing. File sharingenables the application to expose the contents of its /Documents directory to the user through iTunes. Theuser can then move files back and forth between the iPad and a desktop computer. This feature does notallow your application to share files with other applications on the same device, though. To share data andfiles between applications, you must use the pasteboard or a document interaction controller object.To enable file sharing for your application, do the following:1. Add the UIFileSharingEnabled key to your application’s Info.plist file and set the value of thekey to YES .2. Put whatever files you want to share in your application’s Documents directory.3. When the device is plugged into the user’s computer, iTunes 9.1 displays a File Sharing section in theApps tab of the selected device.4. The user can add files to this directory or move files to the desktop. 22 File and Document Support 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 23<br />
Applications that support file sharing should be able to recognize when files have been added to the Documents directory and respond appropriately. For example, your application might make the contents ofany new files available from its interface. You should never present the user with the list of files in this directoryand ask them to decide what to do with those files.Foradditionalinformationaboutthe UIFileSharingEnabled key,seeInformationPropertyListKeyReference. Document Support An application can now register the file types it supports with the system and receive notifications when afile of the given type needs to be opened. It does this by including the CFBundleDocumentTypes key in itsInfo.plist file. An application that registers one or more file types may also be expected to open files of thosetypes at some point later. It does this by implementing the application:didFinishLaunchingWithOptions: method in its application delegate and look for a filein the UIApplicationLaunchOptionsURLKey key of the provided dictionary.Complementing the ability to open files of known types is the addition of the UIDocumentInteractionController class in the UIKit framework. This class provides a user-basedinteraction model for managing files that your application does not know how to open. The documentinteraction controller provides options for previewing the contents of a file in place or opening it in anotherapplication. Document interaction controllers are particularly useful for email applications or applicationsthat may download files from the network.For more information about supporting documents, see “The Core Application Design” in iPad ProgrammingGuide. PDF Generation The UIKit framework ( UIKit.framework ) includes new functions for generating PDF files and data objectsfrom your application’s custom content. You can use this support to generate PDF-based content for usewithin your application or for storing to the local disk. The UIKit functions manage the setup and paginationfor the PDF data. You provide the actual content using the same native platform graphics technologies (UIKit,Core Graphics, Core Text, and so on) already available for drawing to the screen. (You cannot draw to a PDFcontext directly using OpenGL commands. However, you can transfer the pixels of your rendered contentto a CGImageRef data type and draw that.)For more information about how to use the new UIKit functions to create PDF content, see “Graphics andDrawing” in iPad Programming Guide. Xcode Tools Xcode includes new features to make developing applications that run on iPad much simpler, including thefollowing:Xcode Tools 23 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 24<br />
■ Xcode simplifies the process of sharing code between your iPhone and iPad applications by helping youupdate your existing iPhone projects to include the necessary files to support iPad. The Transitioncommand (in the Project menu) creates a new target for the iPad and modifies a copy of your project’snib files to support the larger screen size. For more information on how to use this command, see iPadProgramming Guide. ■ Xcode simplifies the validation and submission process of your applications by allowing you to debugsigned applications. ■ You can now easily transfer your iPhone developer identity information to a new computer. The Organizerwindow includes an option to export your profile and certificate information. To begin developing ona new computer, all you have to do is import the resulting data file into Xcode on that computer. ■ Interface Builder supports the new view controllers and window sizes available for iPad. API Changes The following frameworks and technologies include additional incremental changes. UIKit Framework Changes The UIKit framework includes the following additions: ■ The UIBezierPath class is a new class that supports the creation of vector-based shapes. This classprovides an object-oriented wrapper around Core Graphics paths. ■ The UIScrollViewDelegate protocol includes additional methods for processing zoom-related eventsin a scroll view. ■ Modal view controllers can now be presented in a style other than full screen. The UIViewController class includes a modalPresentationStyle property that allows you to present modal view controllersusing one of several predefined styles. ■ The UIMenuController class now allows you to add custom menu items. You can use custom menuitems to augment the Cut, Copy, Paste, and Select behavior provided by the system. ■ The UITextChecker class supports spell-checking of strings and aids in word completion. ■ Support for popovers, described in “Popovers” (page 19). ■ The UISplitViewController class, described in “Split Views” (page 19). ■ Support for gesture recognizers, described in “Gesture Recognizers” (page 20). ■ Support for implementing custom input and accessory views, described in “Custom Input Views” (page20). ■ Support for getting information about externally connected displays, described in “External Display Support” (page 20). ■ Support for creating PDF files, described in “PDF Generation” (page 23). ■ Support for previewing and opening documents, described in “Document Support” (page 23).For more information about the classes of the UIKit framework, see UIKit Framework Reference. 24 API Changes 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 25<br />
Media Player Framework Changes The video classes in the Media Player framework ( MediaPlayer.framework ) have been redesigned to giveyou more control over the presentation of video content. Instead of simply playing a video full screen, the MPMoviePlayerController class now vends a view that you can incorporate into your interface howeveryou want. This class also includes more sophisticated support for managing and controlling the playback ofmovies.For situations where you want a simpler alternative to movie presentation, you can now use the MPMoviePlayerViewController class. This new class provides a view controller-based wrapper for a movieinterface and is for applications that want the same basic behavior offered by the older movie player controllerdesign.For information about the new classes available in this framework, see Media Player Framework Reference. Core Animation Changes The Core Animation technology (defined in QuartzCore.framework ) includes the following additionalfeatures: ■ The CATextLayer class is now available for incorporating text-based content into your layer hierarchies. ■ You can now apply shadow effects to a layer and customize the appearance of the shadow using the shadowOpacity , shadowRadius , shadowOffset , shadowColor , and shadowPath properties. ■ You can configure the rasterization behavior of the layer using the shouldRasterize and rasterizationScale properties.For more information about Core Animation classes, see Core Animation Reference Collection. MapKit Framework Changes The MKReverseGeocoder class now includes a placemark property for accessing the placemark that wascomputed by the reverse geocoding service. You can use this property to retrieve placemark informationafter the results are reported to the associated delegate object.For more information about the classes of the MapKit framework, see Map Kit Framework Reference. Foundation Framework Changes The NSString class now includes the ability to search the text of a string using regular expressions. The NSStringCompareOptions type includes a new flag called NSRegularExpressionSearch , which youcan use in conjunction with the following methods: ■ rangeOfString:options: ■ rangeOfString:options:range: ■ rangeOfString:options:range:locale: API Changes 25 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 26<br />
When you pass the NSRegularExpressionSearch as an option, the search string is interpreted as a regularexpression instead of a string literal. The regular expression syntax conforms to the syntax used by theInternational Components for Unicode (ICU) library. When performing regular expression searches, the onlyother options you can include in the mask parameter are the NSCaseInsensitiveSearch and the NSAnchoredSearch flags.Because some regular expressions can trigger a match but still return a zero-length range, you should checkboth the location and range length of the result. If a match was unsuccessful, the search methods alwaysreturn a range whose location is set to NSNotFound and whose length is 0 .For more information about the NSString class and its methods, see NSString Class Reference. For moreinformation about regular expressions in the ICU library, go to http://site.icu-project.org/. 26 API Changes 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.2<br />
Page 27<br />
This article summarizes the features that are available beginning with iPhone OS 3.1. For the latest updatesand information, you should also see iPhone SDK Release Notes for iPhone OS 3.1. Video Editing Support The UIKit framework now includes the UIVideoEditorController class, which provides a standard userinterface for editing video clips on supported devices. Core Animation Enhancements Introduced in iPhone OS 3.1, the CADisplayLink class is essentially a timer whose notifications aresynchronized with the screen refresh rate (or some partial interval thereof). Graphics-intensive applicationscan use these notifications as a signal to begin preparing the next frame of content.For more information about how to use this class, see CADisplayLink Class Reference. Instruments In iPhone OS 3.1 and later, the Instruments application includes support for gathering performance datawirelessly over Wi-Fi. This support allows you to gather performance metrics for applications that might needto use the 30-pin dock connector for other purposes. For example, you could use it to gather performancedata for an application that is communicating with an external accessory.For more information about how to use this feature, see Instruments User Guide.Video Editing Support 27 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.1<br />
Page 28<br />
28 Instruments 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.1<br />
Page 29<br />
This article summarizes the key features that are available beginning with iPhone OS 3.0. It also lists manyof the documents that were created or updated for the release. Apple Push Notification Service The Apple Push Notification Service provides a way to alert your users of new information, even when yourapplication is not actively running. Using this service, you can push text notifications, trigger audible alerts,or add a numbered badge to your application icon. These messages let users know that they should openyour application to receive the related information.From a design standpoint, there are two parts to making push notifications work for your iPhone applications.First, you need to request the delivery of notifications to your iPhone application and then you need toconfigure your application delegate to process them. The delegate works together with the shared UIApplication object to perform both of these tasks. Second, you need to provide a server-side processto generate the notifications in the first place. This process lives on your own local server and works withApple Push Notification Service to trigger the notifications.For more information about how to configure your application to use remote notifications, see Local andPush Notification Programming Guide. Cut, Copy, and Paste The UIKit framework provides new classes to support pasteboard operations and also incorporates selectionand pasteboard behaviors into some existing UIKit views. You can use the new classes to incorporate supportcut, copy, and paste behaviors into your application. One of the key new classes is the UIPasteboard class,which manages the content on the systemwide pasteboards. It is through this class that you can now storeselected content and transfer it within your application or to other applications.The UIPasteboard object provides built-in support for storing standard data types such as strings, images,colors, and URLs. These types represent some of the most common data types and make it easier to exchangecontent between applications. However, you can also exchange content in custom data formats supportedonly by your application or in more standardized interchange formats.Several existing UIKit views now provide automatic support for text selection and pasteboard operations. Inparticular, the UITextField , UITextView , and UIWebView classes automatically handle text selections andthe display of an editing menu with the appropriate Cut, Copy, Paste, Select, and Select all commands.For custom views, the UIKit framework also includes the UIMenuController class for managing the editingmenu. You use this class, together with your application’s own custom selection behavior, to allow the userto cut, copy, paste, and select custom content. The menu displays standard commands to cut or copy theselected content or to paste new content based on the operations currently supported by your view.Apple Push Notification Service 29 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 30<br />
For information about how to incorporate pasteboard support into your application, see “Document RevisionHistory” in iPhone Application Programming Guide. You should also consult “Handling Common Tasks” iniPhone Human Interface Guidelines for information about the interface guidelines associated with supportingcut, copy, and paste operations. Accessory Support The External Accessory framework ( ExternalAccessory.framework ) provides support for communicatingwith hardware accessories attached to an iPhone or iPod touch device. Accessories can be connected throughthe 30-pin dock connector of a device or wirelessly using Bluetooth. The External Accessory frameworkprovides a way for you to get information about each available accessory and to initiate communicationssessions. After that, you are free to manipulate the accessory directly using any commands it supports.For more information about how to use this framework, see “Device Support” in iPhone ApplicationProgramming Guide. For information about the classes of the External Accessory framework, see ExternalAccessory Framework Reference. For information about developing accessories for iPhone and iPod touchdevices, go to http://developer.apple.com. In App Purchase Support The Store Kit framework ( StoreKit.framework ) provides a means for you to make additional content andservices available from within your iPhone applications. For example, you could use this feature to allow theuser to unlock additional application features. Or if you are a game developer, you could use it to offeradditional game levels. In both cases, the Store Kit framework handles the financial aspects of the transaction,processing payment requests through the user’s iTunes Store account and providing your application withinformation about the purchase.The Store Kit focuses on the financial aspects of a transaction, ensuring that transactions occur securely andcorrectly. Your application handles the other aspects of the transaction, including the presentation of apurchasing interface and the downloading (or unlocking) of the appropriate content. This division of laborgives you control over the user experience for purchasing content. You decide what kind of purchasinginterface you want to present to the user and when to do so. You also decide on the delivery mechanismthat works best for your application.For information about how to use the Store Kit framework, see In App Purchase Programming Guide and StoreKit Framework Reference. Peer to Peer Support The Game Kit framework ( GameKit.framework ) lets you add peer-to-peer network capabilities to yourapplications. Specifically, this framework provides support for peer-to-peer connectivity and in-game voicefeatures.Althoughthesefeaturesaremostcommonlyfoundinmultiplayernetworkgames,youcanincorporatethem into non-game applications as well. The framework provides you with networking features through asimple (yet powerful) set of classes built on top of Bonjour. These classes abstract out many of the networkdetails, making it easy for developers who might be inexperienced with networking programming toincorporate networking features into their applications. 30 Accessory Support 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 31<br />
For more information about how to use the Game Kit framework, see GameKitProgrammingGuide and GameKit Framework Reference. Maps API The Map Kit framework ( MapKit.framework ) provides a map interface that you can embed into your ownapplication. Based on the behavior of this interface within the Maps application, this interface provides ascrollable map view that can be annotated with custom information. You can embed this view inside of yourown application views and programmatically set various attributes of the map, including the currentlydisplayed map region and the user’s location. You can also define custom annotations or use standardannotations (such as a pin marker) to highlight regions of the map and display additional information.For more information about the classes of the Map Kit framework, see Map Kit Framework Reference. iPod Library Access Several new classes and protocols have been added to the Media Player framework( MediaPlayer.framework ) to allow access to the user’s audio library. You can use these classes to performthe following tasks: ■ Play audio items from the user’s library. This support lets you play all audio types supported by the iPodapplication. ■ Construct queues of audio items to play back. ■ Perform searches of the user’s audio library. ■ Access the user’s playlists (including smart, on-the-go, and genius playlists).For more information about the classes of the Media Player framework, see MediaPlayerFrameworkReference. Audio Recording and Management TheAVFoundationframework( AVFoundation.framework )includesthefollowingnewclassesandprotocolsfor recording audio and managing audio sessions: ■ The AVAudioRecorder class provides audio recording capabilities. This class works together with anaudio delegate (conforming to the AVAudioRecorderDelegate protocol) to manage state changesduring recording. ■ The AVAudioSession class provides control over audio context including audio session category, samplerate, and I/O buffer duration. This class works with an audio session delegate (conforming to the AVAudioSessionDelegate protocol) to respond to audio hardware route changes and audiointerruptions. ■ New constants for configuring audio formats, audio encoding, and sample rate conversion for recording.Maps API 31 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 32<br />
For more information about the classes of the AV Foundation framework, see AV Foundation FrameworkReference. Core Data The Core Data framework ( CoreData.framework ) is a technology for managing the data model of aModel-View-Controller application. Core Data is intended for use in applications where the data model isalready highly structured. Instead of defining data structures programmatically, you use the graphical toolsin Xcode to build a schema representing your data model. At runtime, instances of your data-model entitiesare created, managed, and made available through the Core Data framework.By managing your application’s data model for you, Core Data significantly reduces the amount of code youhave to write for your application. Core Data also provides the following features: ■ Storage of object data in a SQLite database for optimal performance ■ A new NSFetchedResultsController class to manage results for table views ■ Management of undo/redo beyond basic text editing ■ Support for the validation of property values ■ Support for propagating changes and ensuring that the relationships between objects remain consistent ■ Support for grouping, filtering, and organizing data in memoryIf you are starting to develop a new application or are planning a significant update to an existing application,you should consider using Core Data. For an example of how to use Core Data in an iPhone application, seeCore Data Tutorial for iPhone OS. For more information about the classes of the Core Data framework, seeCore Data Framework Reference. In App Email TheMessageUIframework( MessageUI.framework )isanewframeworkthatprovidessupportforcomposingand queuing email messages in the user’s outbox. The composition support consists of a view controllerinterface that you can present in your application. You can populate the fields of this interface with thecontents of the message you want to send. You can set the recipients, subject, body content, and anyattachments you want to include with the message. The user then has the option of editing the messageprior to accepting it. Once accepted, the message is queued in the user’s outbox for delivery.For more information about the classes of the Message UI framework, see Message UI Framework Reference. Streaming Video There is now support for the playback of live video streamed over http . Streamed content can be playedback on an iPhone OS–based device using the MPMoviePlayerController class. The semantics of usingthis class have not changed. The main differences are in the preparation of the streamed content and howit is published on a web server. 32 Core Data 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 33<br />
For more information about how to prepare content for video streaming, see HTTP Live Streaming Overview. Safari Features Safari supports the audio and video HTML elements, which allow you to embed audio and video contentinto your web applications. Safari also supports the Geolocation JavaScript classes, which work with theonboard location services to retrieve the current location of the device.For more information about how to use these features in your web applications, see SafariWebContentGuide. Shared Keychain Items It is now possible for you to share Keychain items among multiple applications you create. Sharing itemsmakes it easier for applications in the same suite to interoperate more smoothly. For example, you could usethis feature to share user passwords or other elements that might otherwise require you to prompt the userfrom each application separately.Sharing Keychain items involves setting up the proper entitlements in your application binaries. Using Xcode,youmustcreateanEntitlementspropertylistfilethatincludesthesupportedentitlementsforyourapplication.The process for creating this file is described in iPhone Development Guide. For information about theentitlementsyoucanconfigure,seethedescriptionforthe SecItemAdd functioninKeychainServicesReference.Accessing shared items at runtime involves using the Keychain Services programming interface with theaccess groups you set up during development. For information about how to access the Keychain, seeKeychain Services Programming Guide. Accessibility Support Accessibility support makes it easier for people with visual, auditory, and physical disabilities to use iPhoneOS–based devices. In addition, users with the appropriate hardware can take advantage of the followingfeatures: ■ Zoom - magnifies the entire screen of the device. ■ White on Black - inverts the colors on the display. ■ Mono Audio - combines the left and right channels into a mono signal that is played in both audiochannels. ■ Speak auto-text - speaks the text that users type, along with any corrections or suggestions made bythe system. ■ Voice Control - allows users to make phone calls and control iPod playback using voice commands. ■ VoiceOver - provides an audible description of the elements touched and the actions taken by the user.Safari Features 33 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 34<br />
Developers can make their own applications accessible to VoiceOver users by taking advantage of the supportbuilt-in to the UIKit framework. All standard system views and controls now provide default descriptions foruse by VoiceOver. However, you can use the new accessibility interfaces in UIKit to improve on the defaultsupport and provide more accurate descriptions of your application’s views and controls. Providing morecontext-aware descriptions gives disabled users better access to your application’s content.For information about how to make your own applications accessible, see Accessibility Programming Guidefor iPhone OS. Compass Support The Core Location framework now includes support for obtaining heading information from iPhone OS–baseddevices with a built-in magnetometer. Heading information obtained from such devices can be used toimplement a real-time compass or other navigation-related programs.For more information about accessing compass information, see Core Location Framework Reference. OpenGL ES 2.0 Applications can now take advantage of the OpenGL ES 2.0 specification on iPhone OS–based devices withappropriate graphics hardware. OpenGL ES 2.0 is a new version of the OpenGL ES specification that offersfeatures not available in OpenGL ES 1.1. Specifically, the new version provides support for shaders, includingfragment and vertex shaders. The use of shaders now eliminates the need for many of the fixed functioninterfaces that were part of the OpenGL ES 1.1 specification.Note: OpenGL ES 1.1 is supported on all iPhone OS–based devices, whereas OpenGL ES 2.0 is supportedonly on newer hardware.For more information about OpenGL ES 2.0 in particular, and about OpenGL ES support in general, see OpenGLES Programming Guide for iPhone OS. Additional Enhancements In addition to the major new features in iPhone OS, several frameworks and technologies have receivedincremental updates to improve the development experience. UIKit Framework Enhancements The UIKit framework ( UIKit.framework ) has been enhanced to support major new features in iPhone OS3.0, such as cut, copy, and paste operations. In addition, this framework has some new classes and has minorimprovements to existing classes, including the following: 34 Compass Support 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 35<br />
■ Newclasses( UIPasteboard and UIMenuController )andgeneralimprovementstothe UITextField , UITextView , and UIWebView classes to support the selection of text and to support cut, copy, andpaste operations ■ Support for handling “motion” events, which currently consist of shake events. Typically, you use shakeevents to initiate undo operations but you may use them for other purposes as well; see “DocumentRevision History” in iPhone Application Programming Guide for more information. ■ Support in the UIDevice class for accessing the battery state and proximity sensor ■ Supportforcapturingvideo(onhardwarethatsupportsit)usingthe UIImagePickerController class ■ Enhancementstosearchbarcontrols,includingthenew UISearchDisplayController classtomanagesearch results ■ New support for one-step view rotations from a view controller; see UIViewController Class Reference ■ New modal transition styles, including support for flip and cross-fade transitions; see UIViewControllerClass Reference ■ Navigation controller support for a standard built-in toolbar whose contents can change to reflect thecurrently active view controller; see UINavigationController Class Reference ■ Improvements to table views, including support for new cell styles, more table reloading options, andsupport for customizing the title of delete confirmation buttons. There is also a new class( UILocalizedIndexedCollation ) to help with data sorting and organization for table view sections. ■ Support for content stretching in the UIView class, which allows the creation of 3- or 9-part stretchedimages without using a stretchable UIImage or multiple image views ■ Enhanced support for data detection in the UITextView and UIWebView classes. This support lets youconfigure what types of data (phone numbers, URLS, and addresses) should be automatically detectedin text and converted to clickable links. ■ Enhanced support in UIWebView for displaying previews of RTF, RTFD, PDF, iWork, and Office documentsFor more information about the classes of the UIKit framework, see UIKit Framework Reference. For guidanceon when to use the new features in your applications, see iPhone Human Interface Guidelines. Foundation Framework Enhancements The Foundation framework ( Foundation.framework ) has been updated to support the following featuresrelated to undo management and Core Data: ■ Inclusion of the NSUndoManager class to support Core Data and general undo operations ■ Inclusion of the NSExpression , NSPredicate , NSComparisonPredicate , NSCompoundPredicate ,and NSValueTransformer classes to support Core DataFor more information about the classes of the Foundation framework, see Foundation Framework Reference. Core Audio Enhancements Enhancements have been made to the Audio Toolbox, Audio Unit, and Core Audio frameworks, includingthe following additions:Additional Enhancements 35 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 36<br />
■ New support for decoding MP3 and AAC audio content in software. This support effectively allows youto play multiple compressed files simultaneously (one using the hardware decoder and one or moreusing the software decoder). ■ Enhanced support in the Audio Toolbox framework for determining if audio codecs are available insoftware, hardware, or both ■ Enhanced support in the Audio Unit framework for registering your audio units and connecting audiounit processing graphs in your iPhone application ■ Support for three new audio formats: ❏ DVI/Intel IMA ADPCM ❏ Microsoft GSM 6.10 ❏ AES3-2003For more information about the Core Audio interfaces, see Audio Toolbox Framework Reference, Audio UnitFramework Reference, and Core Audio Framework Reference. API Changes For information about the changes that occurred between iPhone OS 2.0 and iPhone OS 2.2, see iPhone 2.1API Diffs and iPhone 2.2 API Diffs. For information about the changes that occurred between iPhone OS 2.2and iPhone OS 3.0, see iPhone OS 3.0 API Diffs. 36 API Changes 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. iPhone OS 3.0<br />
Page 37<br />
This table describes the changes to What's New in iPhone OS.NotesDateAdded information about new features in iPhone OS 4.0.2010-04-30Moved the iPhone OS 3.1 information to its own article and added a new articlecovering features in iPhone OS 3.2.2010-03-24Updated the iPhone OS 3.0 article to reflect features introduced in all 3.x versionsof iPhone OS.2009-08-27Added new features related to the introduction of new iPhone hardware.2009-06-16 37 2010-04-30 | © 2010 Apple Inc. All Rights Reserved. Document Revision History<br />
Page 38" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;">Apple Developer&#8217;s Resource &#8211; What&#8217;s New in iPhone OS</a> <object id="doc_591140106425714" name="doc_591140106425714" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" ><param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"><param name="wmode" value="opaque"><param name="bgcolor" value="#ffffff"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><param name="FlashVars" value="document_id=32728073&#038;access_key=key-1alnzsybrr0flr354o5n&#038;page=1&#038;viewMode=list"><embed id="doc_591140106425714" name="doc_591140106425714" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=32728073&#038;access_key=key-1alnzsybrr0flr354o5n&#038;page=1&#038;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"></embed></object></p>
<p>.::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::. .::.</p>
<p><a title="View Apple Developer's Resource - Over-the-Air Profile Delivery &amp; Configuration" href="http://www.scribd.com/doc/32728077/Apple-Developer-s-Resource-Over-the-Air-Profile-Delivery-Configuration" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;">Apple Developer&#8217;s Resource &#8211; Over-the-Air Profile Delivery &#038; Configuration</a> <object id="doc_827608660226499" name="doc_827608660226499" alt="Over-the-Air Profile Delivery andConfiguration Networking &#038; Internet 2010-03-24</p>
<p>Over-the-Air Profile Delivery Concepts 11 Phase 1: Authentication Certificate Enrollment (X.509 Identities and SCEP)  Device Configuration and Encrypted Profiles  Chapter 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration 17 Configuring the Infrastructure 17 Directory Services 17  Certificate Services 17 Profile Services 18 Obtaining an SSL Certificate 18 Creating A Template Configuration Profile 18 Starting the Server 19 Profile Service Handlers 19 Phase 1: Authentication 19 Phase 2: Certificate Enrollment 23 Phase 3: Device Configuration 25 Configuration Profile Payload 26 Encryption Certificate Payload 26 SCEP Certificate Payload 27 Appendix A Configuration Profile Examples 29 Document Revision History 31 3 2010-03-24<br />
Figures and Listings Chapter 1 Over-the-Air Profile Delivery Concepts 11 Figure 1-1<br />
Page 7<br />
Important: This is a preliminary document for an API or technology in development. Although this documenthas been reviewed for technical accuracy, it is not final. Apple is supplying this information to help you planfor the adoption of the technologies and programming interfaces described herein. This information is subjectto change, and software implemented according to this document should be tested with final operatingsystem software and final documentation. Newer versions of this document may be provided with futureseeds of the API or technology.A configuration profile is an XML file that allows you to distribute configuration information to iPhoneOS–based devices. If you need to configure a large number of devices or to provide lots of custom emailsettings, network settings, or certificates to a large number of devices, configuration profiles are an easy wayto do it.An iPhone configuration profile contains a number of settings that you can specify, including:Passcode policiesRestrictions on device features (disabling the camera, for example)Wi-Fi settingsVPN settings Email server settingsExchange settingsLDAP directory service settingsCalDAV calendar service settingsWeb clipsCredentials and keysAdvanced cellular network settingsNote: Configuration profiles are in property list format, with data values stored in Base64 encoding. The .plist format can be read and written by any XML library.For more information about the contents of these profiles, read iPhone Device Configuration Overview or“Configuration Profile Format” in Enterprise Deployment Guide.There are four ways to deploy configuration profiles: ■ By physically connecting the device ■ In an email message ■ On a webpage ■ Using over-the air configuration as described in this document 7 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. INTRODUCTION Introduction<br />
Page 8<br />
If you don’t care about encrypted profiles or if it is practical for you to connect every phone used in yourdevelopment process to a single system administrator’s computer before deployment, you can use the iPhoneConfiguration Utility (iPCU) to create encrypted profiles for these devices and deliver updates via email or awebpage at a later time. If this manual enrollment meets your needs, you should read Enterprise DeploymentGuide instead.Although the other methods offer a simple way to configure devices for enterprise use, in large-scaledeployments, you'll want to automate the deployment process.iPhone over-the-air enrollment and configuration provides an automated way to configure devices securelywithin the enterprise. This process provides IT with assurance that only trusted users are accessing corporateservices and that their devices are properly configured to comply with established policies. Becauseconfiguration profiles can be both encrypted and locked, the settings cannot be removed, altered, or sharedwith others.More importantly, for geographically distributed enterprises, an over-the-air profile service allows you toenroll iPhone devices without physically connecting them to an iPhone Configuration Utility host.The profile service described in this document creates a configuration on the fly; the device then downloadsthat configuration. The device remembers the enrollment URL so that it can update its configuration fromthe server in the future if the configuration expires or a VPN connection failure occurs.This document describes the over-the-air enrollment process. With this process, administrators can instructusers to begin the process of enrollment by providing a URL via email or SMS notification. When users agreeto the profile installation, their devices are automatically enrolled and configured in a single session. Organization of This Document This document takes you through the process of setting up a server to deliver encrypted custom profiles toiPhone devices over the air. ■ “Over-the-Air Profile Delivery Concepts” (page 11) explains the terminology and basic security concepts involved in over-the-air enrollment and profile delivery. ■ “Creating a Profile Server for Over-The-Air Enrollment and Configuration” (page 17) describes the reference implementation of a profile server, piece by piece, in chronological order of execution, fromdevice authentication and enrollment to profile delivery. ■ “Configuration Profile Examples” (page 29) provides sample profiles and code to generate profiles. ThisdocumentassumesabasicknowledgeofRubyprogramming,XML,propertylists,theiPhoneConfigurationUtility, and OpenSSL. See Also For more information, see the following pages:Cisco: Digital Certificates PKI for IPSec VPNs (PDF)Wikipedia: Public key infrastructure 8 Organization of This Document 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. INTRODUCTION Introduction<br />
Page 9<br />
IETF SCEP protocol specification Additional information and resources for iPhone and iPod touch in the enterprise are available at http://www.apple.com/iphone/business/, including Appendix B of the Enterprise Deployment Guide. This appendix specifies the format of .mobileconfig files for developers who want to create their own tools.See Also 9 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. INTRODUCTION Introduction<br />
Page 10<br />
10 See Also 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. INTRODUCTION Introduction<br />
Page 11<br />
The process of over-the-air enrollment and configuration is divided into three phases: authentication,enrollment, and device configuration. These phases are described in the sections that follow.This process is illustrated in “Directory Services.” 11 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 1 Over-the-Air Profile Delivery Concepts<br />
Page 12<br />
Figure 1-1Device registration process iPhoneProfile ServiceDirectory ServiceCertificate Authority User enters the URL of the profile service in Safari on iPhone (or taps a URL sent via SMS). 1 Once the user is authenticated, a configuration profile is sent to the user. This configuration profile prompts the device for additional information.This configuration profile includes a challenge to track the user. 4 Phase 1 Authentication Phase 2 Certificate Enrollment The profile is installed automatically, no user intervention required.This profile contains instructions for the device to generate a keyand generate a certificate signing request (GetCACert) using the SCEP protocol. 2 The SCEP request can be routed through the profile service (optional)The user challenge response or subject can be verified against directory services Phase 3 Device Configuration The profile is receivedby the device and installedautomatically (no userintervention required) 3 The certificate issuing service (SCEP enabled) receives the CSRfrom the device.Once verified, the CA then responds with the certificate for the device. 3 The users is authenticated using either basic HTTP authentication or via existing directory services. 3 HTTP Get Once the device certificate is received, the device generates a response back to the profile service which is signed with the new certificate.A response is sent back tothe server using HTTP Post. 1 Once the profile servicereceives the deviceresponse, a secondconfiguration profile withthe SCEP payload isdelivered to the device 1 The profile service verifies the signature of the response(Apple-Issued cert)Optional:The profile service could verify the Challenge, device UDID or other device information against an approved set of criteria HTTP Get The user is presented a login webpage. The user enters their username and password to authenticate. 2 The user is prompted to install the profile. Once installed, this configurationprofile prompts the device to respond back to the server with specific device attributes. The device information response is sent back to the server using HTTP Post. 5 HTTP PostHTTP Post The profile service thenresponds with an encrypted .mobileconfigfile. This configurationprofile can contain policies,settings, credentials, oradditional SCEP requests. 2 The profile service verifies the signature of the response(Identity cert) 12 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 1 Over-the-Air Profile Delivery Concepts<br />
Page 13<br />
Phase 1: Authentication The authentication phase serves two purposes. First, it ensures that incoming enrollment requests are fromauthorized users. Second, it captures information about the user’s device for use in the certificate enrollmentprocess.When enrolling a device, the server can require authentication by the user, the device, or both.User authentication can be enforced at the time the user goes to the enroll URL. To authenticate the user,you can use any web authentication scheme, whether part of HTTP (for example, basic auth or NTML) or aseparate authentication scheme implemented by a CGI script. You can even use a hybrid scheme, such ascombining digest authentication with a CGI-managed list of authorized users.You can also check the device against a list of authorized devices if desired.The steps in the authentication phase are:1. The user visits the root URL ( / ) and gets a welcome message. This message is provided by the handlerdescribed in “Welcome Page (/) URL Handler” (page 19).2. The user visits the certificate authority URL ( /CA ) to get the root cert (if needed). On the server, this URLis handled by code described in “Root Certificate (/CA) URL Handler” (page 20).) This is only required forself-signed root CA certs.3. The user visits the enrollment URL ( /enroll ) to start the enrollment process. In this step, the user isprompted to authenticate himself or herself using HTTP basic auth (in this example) or using existingdirectory services.4. The server’s enrollment handler (described in “Enrollment (/enroll) URL Handler” (page 20)) determineswhether the user is allowed to enroll a device. If the device is allowed to enroll, the server sends it aprofile service payload (Listing 2-5 (page 21)).Thisprofileservicepayload( .mobileconfig )containsarequestforadditionaldevice-specificinformationthat the device must provide in the next step.The payload may, at your option, include a Challenge token so that the server can associate the requestwith the original user. This allows you to customize the configuration process for each user, if desired.This value should be something that can be verified, but is not easily guessable. For example, you couldstore a random value into a database and associate it with the user’s login credentials. The details of thisfunctionality are site specific.The device attributes that the service can request are the iPhone OS version, Wi-Fi device ID (MACAddress), product type (for example, iPhone 3GS returns iPhone2,1 ), phone equipment ID (IMEI), andSIM card identifier (ICCID).For a sample profile service payload, see “Sample Phase 1 Server Response” in Enterprise DeploymentGuide.Phase 1: Authentication 13 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 1 Over-the-Air Profile Delivery Concepts<br />
Page 14<br />
Phase 2: Certificate Enrollment (X.509 Identities and SCEP) In the second phase, enrollment, a device contacts the certificate authority and obtains a signed X.509 identitycertificate, which is then used for encryption.To acquire an identity, a device first generates an asymmetric key pair and stores it in its keychain. The secretsin this keychain can be read only by that specific device.The device then sends its public key to a certificate authority (CA), which sends back a signed X.509 certificate.This certificate, coupled with the private key on the device, form an identity.To make this exchange possible, iPhone OS supports the simple certificate enrollment protocol (SCEP). SCEPis a communication protocol that provides a networked front end to a private certificate authority. Supportfor SCEP is provided by a number of certificate authorities, and there are complete open-source softwareimplementations of certificate authorities with SCEP support.Thefrontendservicecanbesetuptogateaccessbymeansofachallenge,whichinpracticeisanauthorizationtoken (a one-time password, or a signed/encrypted blob containing user/device info) to allow automaticissuing of a certificate.The steps in the enrollment phase are:1. The user accepts the installation of the profile received in phase 1.2. Thedevicelooksuptherequestedattributes,addsthechallengeresponse(ifprovided),signstheresponseusing the device’s built-in identity (an Apple-issued certificate), and sends it back to the profile distributionservice using HTTP POST.Note: If the device has been registered previously and is merely requesting a new configuration, it signsthe request with the certificate previously provided by the CA in Phase 3.In the case of this example, the device sends this response to the /profile URL.For a sample profile from this phase, see “Sample Phase 2 Device Response” in Enterprise DeploymentGuide.3. The server’s profile request handler (described in “Profile Request (/profile) URL Handler” (page 23))sends back a configuration profile that instructs the device to enroll using SCEP as described in “Phase 2: Certificate Enrollment (X.509 Identities and SCEP)” (page 14). The server should sign this profile. For a sample configuration profile, see “Sample Phase 3 Server Response With SCEP Specifications” inEnterprise Deployment Guide.4. The device enrolls using SCEP, resulting in a valid identity certificate installed on the device. Phase 3: Device Configuration and Encrypted Profiles The third phase of over-the-air profile delivery and configuration is the actual profile delivery itself. In thisphase, the server sends a profile that has been customized for a particular device. 14 Phase 2: Certificate Enrollment (X.509 Identities and SCEP) 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 1 Over-the-Air Profile Delivery Concepts<br />
Page 15<br />
In some environments, it is important to make sure that corporate settings and policies are protected fromprying eyes. To provide this protection, iPhone OS allows you to encrypt profiles so that they can be readonly by a single device.An encrypted profile is just like a normal configuration profile except that the configuration profile payloadis encrypted with the public key associated with the device’s X.509 identity.To keep adversaries from modifying the content, the encrypted configuration profile is signed by the service.For encryption and signing, iPhone uses the Cryptographic Message Syntax (CMS), a standard that is alsoused in S/MIME. Payloads are encrypted using PKCS#7 enveloped data. Profiles are signed using PKCS#7signed data.The steps in the device configuration phase are:1. The device sends a signed request for the /profile handler again to request the final profile. (Therequest is signed with the identity certificate obtained in the previous step.)For a sample profile for this phase, see “Sample Phase 4 Device Response” in EnterpriseDeploymentGuide.2. The server’s profile request handler (described in “Profile Request (/profile) URL Handler” (page 23))sends the final encrypted profile to the device. After Enrollment Upon receiving the final encrypted profile, the device installs it. Reconfiguration occurs automatically if theprofile expires or if a VPN connection attempt fails.Settings enforced by a configuration profile cannot be changed on the device. To change these settings, youmust install an updated profile.Configuration profile updates are not pushed to users automatically. If you need to make other profile updateswithout waiting for the profiles to expire, you must distribute them manually or require users to re-enroll.(Devices also pull new profiles upon a VPN authentication failure.)You can distribute updated profiles to your users in an email attachment or a webpage. To update a profile,the following conditions must be met: ■ The profile identifier must match.For more information about the identifier, see “General Settings” in Enterprise Deployment Guide. ■ If the profile was signed, the replacement profile must also be signed by the same issuer.Depending on the General Settings payload you specified when creating the profile, it may be possible forthe user to remove the profiles. ■ If the profile requires a password for removal, the user is prompted for that password upon tappingRemove. ■ If the profile specifies that it cannot be removed by the user, the Remove button does not appear.After Enrollment 15 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 1 Over-the-Air Profile Delivery Concepts<br />
Page 16<br />
Important: Removing a configuration profile removes all information associated with the profile. This includespolicies, Exchange account data stored on the device, VPN settings, certificates, mail messages, and otherinformation.For more information about profile security settings, see “General Settings” in Enterprise Deployment Guide. 16 After Enrollment 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 1 Over-the-Air Profile Delivery Concepts<br />
Page 17<br />
When creating a profile server, you must perform several steps:1. Configure your infrastructure. This is described in “Configuring the Infrastructure” (page 17).2. Obtain an SSL Certificate for your server. This is described in “Obtaining an SSL Certificate” (page 18).3. Create a template configuration profile. This is described in “Creating A Template Configuration Profile” (page 18). 4. Create the server code. The pieces of a server are described in “Starting the Server” (page 19) and “Profile Service Handlers” (page 19). 5. Add appropriate authentication specific to your environment.6. Test the service.The sections that follow take you through the various parts of the profile delivery service source code. Configuring the Infrastructure Implementing over-the-air enrollment and configuration requires you to integrate authentication, directory,and certificate services. The process can be deployed using standard web services, but you must set upseveral key systems ahead of time. Directory Services For user authentication, you can use basic HTTP authentication or integrate authentication with your existingdirectory services. Regardless of the services used, you will need to provide a web-based authenticationmethod for your users to request enrollment. Certificate Services The process of enrollment requires deployment of standard x.509 identity certificates to iPhone users. To dothis, you will need a CA (certificate authority) to issue the device credentials using the Simple CertificateEnrollment Protocol (SCEP).Cisco IOS and Microsoft Server 2003 (with the add-on for certificate services) both support SCEP. There arealso a number of hosted PKI services that support SCEP, such as Verisign, Entrust, and RSA. For links to PKI,SCEP, and related topics read the “See Also” (page <img src='http://www.pointabout.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> section in “Introduction” (page 7).Configuring the Infrastructure 17 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-AirEnrollment and Configuration<br />
Page 18<br />
Profile Services To implement this process you will need to develop a profile service, which is an HTTP-based daemon thatmanages iPhone connections throughout the process, generates configuration profiles for the user, andverifies user credentials along the way.There are a few key functions that the profile service needs to provide: ■ Host a user-accessible website to support the HTTPS session ■ Authenticate incoming user requests using a web-based authentication method (basic, or integratedwith directory services) ■ Generate the necessary configuration profiles (XML format) depending on the phase of the process ■ Sign and encrypt configuration profiles using public key cryptography ■ Track the user through the steps in the process (via timestamp and logging methods) ■ Manage connections to the certificate authority or directory services Obtaining an SSL Certificate The first step in setting up a profile service is to obtain or generate an SSL certificate for the web server. Whenhosting a profile server, each iPhone must be able to make a secure connection to the server. The easiestway to do this is to get an SSL certificate from a public CA that is already trusted by iPhone. For a completelist, see iPhone OS 3.0: List of Available Trusted Root Certificates.Alternatively, you can generate your own root certificate and self-sign it, though if you do, the user will beasked whether they trust the certificate. Creating A Template Configuration Profile The profile service uses a template configuration profile as the starting point, then modifies the profile for aspecific device. You must create this template ahead of time and save it to a file on disk. The iPhoneConfiguration Utility provides an easy means of creating such a base profile.In addition to general settings, this configuration profile should also define enterprise policies that you wantto enforce. For company-owned equipment, it should be a locked profile to prevent the user from removingit from the device.For more information about these profiles, read iPhone Device Configuration Overview or “ConfigurationProfile Format” in Enterprise Deployment Guide. 18 Obtaining an SSL Certificate 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 19<br />
Starting the Server After you have an SSL certificate, you must configure a web server to host your profile service and anSCEP-aware certificate authority to issue certificates.The initialization function, init , loads the HTTP server’s certificate and private SSL key. These keys andcertificates are stored on disk for reuse together with the serial number of the last issued certificate. Thisfunction is shown in Listing 2-1.Listing 2-1Starting the web server world = WEBrick::HTTPServer.new(:Port => 8443,:DocumentRoot => Dir::pwd + &#8220;/htdocs&#8221;,:SSLEnable => true,:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,:SSLCertificate => @@ssl_cert,:SSLPrivateKey => @@ssl_key) This example starts the server on port 8443 so it does not have to run as root. The <img src='http://www.pointabout.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ocumentRoot valueshould contain the path of an empty directory inside the profile service directory.You should enable SSL and set the values of SSLCertificate and SSLPrivateKey to point to your actualSSL certificate and key that you obtained in “Obtaining an SSL Certificate” (page 18).You should also disable client certificate authentication because the client device does not have a verifiableidentity yet. Profile Service Handlers After you have a basic web server, you need to write handlers for several pages used in the enrollment anddelivery process. Phase 1: Authentication Welcome Page (/) URL Handler The welcome page is the first page new users see when they enter the site at the root level ( / ). A handlerfor this page is shown in Listing 2-2.Listing 2-2Handler for / URL world.mount_proc(&#8220;/&#8221;) { |req, res|res['Content-Type'] = &#8220;text/html&#8221;res.body = <<WELCOME_MESSAGE<br />
<style>body { margin:40px 40px;font-family:Helvetica;} Starting the Server 19 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration
Page 20
h1 { font-size:80px; }p { font-size:60px; }a { text-decoration:none; }</style>
<h1 >ACME Inc. Profile Service</h1>
<p>If you had to accept the certificate accessing this page, you shoulddownload the <a href="http://www.pointabout.com/CA">root certificate</a> and install it so it becomes trusted.
<p>We are using a self-signedcertificate here, for production it should be issued by a known CA.
<p>After that, go ahead and <a href="http://www.pointabout.com/enroll">enroll</a>WELCOME_MESSAGE} If you used a self-signed certificate above, when the user goes to this page, Safari asks whether you want totrust the server’s SSL certificate. Agreeing allows you to view the page. This is not sufficient for enrollment,however.Regardless of whether the site certificate is self-signed or not, the enrollment process with the SCEP servicealso requires the device to trust the custom certificate authority’s root certificate, which means adding theCA root certificate to the device’s trusted anchors list. To do this, you must create a URL handler that providesthe certificate with the correct MIME type. Root Certificate (/CA) URL Handler The link to /CA in the welcome page provides a means for the user to add the custom certificate authority’sroot certificate to the device’s trusted anchors list. This is required for the SCEP stage of the enrollmentprocess.After Safari on iPhone loads the root certificate from that URL, it asks the user for permission to add the newroot certificate to the device’s trusted anchors list. (You should access this page only over a secure connection.)The handler in Listing 2-3 sends the root certificate.Listing 2-3Handler for /CA URL world.mount_proc("/CA") { |req, res|res['Content-Type'] = "application/x-x509-ca-cert"res.body = @@root_cert.to_der} After the user has downloaded the root certificate from a trusted web server over HTTPS, the user can clickto continue the enrollment process. Enrollment (/enroll) URL Handler Listing 2-4 provides a handler for the /enroll link on the welcome page. 20 Profile Service Handlers 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 21<br />
Listing 2-4Handler for /enroll URL world.mount_proc("/enroll") { |req, res|HTTPAuth.basic_auth(req, res, "realm") {|user, password|user == 'apple' &#038;&#038; password == 'apple'}res['Content-Type'] = "application/x-apple-aspen-config"configuration = profile_service_payload(req, "signed-auth-token")signed_profile = OpenSSL::PKCS7.sign(@@ssl_cert, @@ssl_key, configuration, [], OpenSSL::PKCS7::BINARY)res.body = signed_profile.to_der} The handler above performs very limited authentication to identify the user. The user logs in by sending theword apple as the user name and password over a connection authenticated with HTTP basic authentication.In a production server environment, you should instead tie this code into a directory service or some otheraccount system. To learn more about tying a Ruby application into a directory service, read the article Using Open Directory from PHP and Ruby to Manage Mailing Lists for Leopard Server. This handler sets the MIME type of its response to application/x-apple-aspen-config , so Safari oniPhone treats the response as a configuration profile.The profile_service_payload function (“Profile Service Payload” (page 21)) produces a specialconfigurationthattellsthephonetoenrollitselfintheprofileservice.Theliteralstring "signed-auth-token" should be replaced with an authorization token from the authentication service that verified the user'scredentials.Finally, this function signs the profile by calling OpenSSL::PKCS7.sign and sends the signed profile to thedevice.Security Note: This exchange occurs through HTTPS to protect the user name, password, and signedauthorization token, so signing with the SSL certificate does not provide additional security. It does, however,make sense if the profile service uses a different SSL certificate and resides on a separate HTTPS server. Profile Service Payload The first payload sent to the device (after establishing that it is allowed to enroll) is the profile service payload.This payload is sent by a call to profile_service_payload(req, "signed-auth-token") from the /enroll handler (Listing 2-4).For a sample profile service payload, see “Sample Phase 1 Server Response” in Enterprise Deployment Guide.Listing 2-5 profile_service_payload function def profile_service_payload(request, challenge)payload = general_payload()payload['PayloadType'] = "Profile Service" # do not modifypayload['PayloadIdentifier'] = "com.acme.mobileconfig.profile-service"# strings that show up in UI, customisablepayload['PayloadDisplayName'] = "ACME Profile Service" Profile Service Handlers 21 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 22<br />
payload['PayloadDescription'] = "Install this profile to enroll for secureaccess to ACME Inc."payload_content = Hash.newpayload_content['URL'] = "https://" + service_address(request) + "/profile"payload_content['DeviceAttributes'] = ["UDID", "VERSION"=begin"PRODUCT", # ie. iPhone1,1 or iPod2,1"MAC_ADDRESS_EN0", # WiFi MAC address"DEVICE_NAME", # given device name "iPhone"# Items below are only available on iPhones"IMEI","ICCID"=end];if (challenge &#038;&#038; !challenge.empty?)payload_content['Challenge'] = challengeendpayload['PayloadContent'] = payload_contentPlist::Emit.dump(payload)end This function starts by calling general_payload , which sets the version and organization (these valuesdon’t change on a given server) and returns a template payload that provides a UUID for the profile.The payload content provides a URL where the device should send its identification (using HTTP POST), alongwith a list of attributes that the server expects the device to provide (software version, IMEI, and so on).If an authorization token (representing a user authentication) is passed in from the caller (shown in Listing 2-4 (page 21)), that token is added as the Challenge attribute.In response, the device sends back the list of requested attributes along with their values. If the server senta Challenge valueinitsrequest,thedevicealsoincludesthisvaluealongwiththerequesteddeviceattributes.Finally, to prove it is an iPhone, the device signs this identification with its device certificate. This responseis sent to the handler for the /profile URL. 22 Profile Service Handlers 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 23<br />
Values Note: The payload type must not be changed; the phone expects to see the literal string "ProfileService" .The identifier should be changed to an appropriate reverse-DNS-style identifier. The identifier should remainconstant for any given profile service.The display name and description values are presented in the user interface to explain to the user what isabout to happen. Phase 2: Certificate Enrollment Profile Request (/profile) URL Handler The handler for the /profile URL is called twice—once to send the device authentication request beforethe device is allowed to enroll using SCEP, then again after the SCEP step to deliver the final profile to thedevice.In this handler, the profile server receives a PKCS#7 signed data payload from the device, which it then unpackand verifies. For a sample of this profile, see “Sample Phase 2 Device Response” in Enterprise DeploymentGuide.To make it easier to follow, the /profile handler is divided into smaller pieces. The first piece of this handleris shown in Listing 2-6.Listing 2-6Handler for /profile URL, part 1 of 7 world.mount_proc("/profile") { |req, res|# verify CMS blob, but don't check signer certificatep7sign = OpenSSL::PKCS7::PKCS7.new(req.body)store = OpenSSL::X509::Store.newp7sign.verify(nil, store, nil, OpenSSL::PKCS7::NOVERIFY)signers = p7sign.signers Security Note: The reference implementation does not verify the signer here. You should verify it againsta trust store made up of intermediates from the device certificate authority up to the root CA and the hierarchyyou'll use to issue profile service identities.If the device signed the request with a certificate that belongs to the hierarchy that issues profile serviceidentities (that is, if this device has enrolled previously), execution follows the first path (shown in Listing2-7). This path either issues an updated encrypted configuration or, as implemented here, redirects the deviceto enroll again. For testing purposes, any device that has gotten a profile previously must reenroll.Listing 2-7Handler for /profile URL, part 2 of 7 # this should be checking whether the signer is a cert we issued# if (signers[0].issuer.to_s == @@root_cert.subject.to_s)print "Request from cert with serial #{signers[0].serial}"" seen previously: #{@@issued_first_profile.include?(signers[0].serial.to_s)}"" (profiles issued to #{@@issued_first_profile.to_a}) \n" Profile Service Handlers 23 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 24<br />
if (@@issued_first_profile.include?(signers[0].serial.to_s))res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, "/enroll")print res By this point, any previously fully enrolled clients have been redirected to the enrollment page to enrollagain.If the code gets past this step, it has received either a list of properties or a new request for a final profile.In Listing 2-8, the encrypted profile is generated. Because this is part of phase 3 (device configuration), it isincluded here without further comment, and is explained further in “The /profile Handler Revisited” (page25).Listing 2-8Handler for /profile URL, part 3 of 7 else@@issued_first_profile.add(signers[0].serial.to_s)payload = client_cert_configuration_payload(req)# vpn_configuration_payload(req)#File.open("payload", "w") { |f| f.write payload }encrypted_profile = OpenSSL::PKCS7.encrypt(p7sign.certificates,payload, OpenSSL::Cipher::Cipher::new("des-ede3-cbc"), OpenSSL::PKCS7::BINARY)configuration = configuration_payload(req, encrypted_profile.to_der)end The code in Listing 2-9 handles the case where the device sent its identification. This part should ideally verifythat the response was signed with a valid device certificate and should parse the attributes.Listing 2-9Handler for /profile URL, part 4 of 7 else#File.open("signeddata", "w") { |f| f.write p7sign.data }device_attributes = Plist::parse_xml(p7sign.data)#print device_attributes The next bit of code, Listing 2-10, is commented out with =begin and =end . It shows how you can restrictissuance of profiles to a single device (by its unique device ID, or UDID) and verify that the Challenge is thesame as the Challenge value issued previously.In a production environment, this is typically replaced by site-specific code that queries a directory serviceto validate the authorization token and queries a database of authorized UDID values for devices owned byyour organization.Listing 2-10Handler for /profile URL, part 5 of 7 =begin# Limit issuing of profiles to one device and validate challengeif device_attributes['UDID'] == "213cee5cd11778bee2cd1cea624bcc0ab813d235"&#038;&#038;device_attributes['CHALLENGE'] == "signed-auth-token"end=end 24 Profile Service Handlers 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 25<br />
Next, the snippet in Listing 2-11 obtains a payload to send to the device that will tell it how to complete theenrollment process. The details of this configuration are described in the discussion of encryption_cert_payload .Listing 2-11Handler for /profile URL, part 6 of 7 configuration = encryption_cert_payload(req, "")end Finally, if this function has nothing to send, it raises an exception that makes the http request fail. Otherwiseit signs the profile to be sent and returns it. These bits of code are shown in Listing 2-12 (page 25).Listing 2-12Handler for /profile URL, part 7 of 7 if !configuration || configuration.empty?raise "you lose"else# we're either sending a configuration to enroll the profile service cert# or a profile specifically for this deviceres['Content-Type'] = "application/x-apple-aspen-config"signed_profile = OpenSSL::PKCS7.sign(@@ssl_cert, @@ssl_key, configuration, [], OpenSSL::PKCS7::BINARY)res.body = signed_profile.to_derFile.open("profile.der", "w") { |f| f.write signed_profile.to_der }end} After this function sends the configuration to tell the device how to enroll, the device enrolls its identityusing SCEP. Then, it sends a request for the /profile URL associated with this handler a second time toobtain the final profile.The actual payload is described in “Configuration Profile Payload” (page 26) and “Encryption Certificate Payload” (page 26). For a sample configuration profile, see “Sample Phase 3 Server Response With SCEP Specifications” in Enterprise Deployment Guide. Phase 3: Device Configuration The /profile Handler Revisited Previously, Listing 2-8 (page 24) showed the encrypted profile generation process. The code in questiondoesn’t actually run until phase 3, however, so the details were deferred. This section revisits that section ofthe /profile handler and provides explanation.The encrypted profile is generated as follows: ■ A configuration is generated with a set of configuration payloads. (See “Configuration Profile Format”in Enterprise Deployment Guide to learn about the contents of these payloads in detail.)In this reference implementation, every device gets the same profile. If desired, however, the Challenge information can be used to identify the user requesting the profile, and the code can generate a profilespecific to that user.Profile Service Handlers 25 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 26<br />
Similarly, the device information provided can be used to generate a profile specific to a given deviceor a particular type of device (for example, providing a different profile for different models of iPhone). ■ The configuration is encrypted with the public key of the device that signed the original request. ■ The encrypted blob of data is wrapped in a configuration profile.The details of this encrypted blob are explained in the descriptions of client_cert_configuration_payload (Listing A-1 (page 29)) and configuration_payload (“Configuration Profile Payload” (page 26)).Listing 2-13Handler for /profile URL, part 3 of 7 (revisited) else@@issued_first_profile.add(signers[0].serial.to_s)payload = client_cert_configuration_payload(req)# vpn_configuration_payload(req)#File.open("payload", "w") { |f| f.write payload }encrypted_profile = OpenSSL::PKCS7.encrypt(p7sign.certificates,payload, OpenSSL::Cipher::Cipher::new("des-ede3-cbc"), OpenSSL::PKCS7::BINARY)configuration = configuration_payload(req, encrypted_profile.to_der)end Configuration Profile Payload The configuration profile payload (provided by configuration_payload ) resembles the profile servicepayload described in “Profile Service Payload” (page 21). The only difference is in the payload its carries.For a sample profile for this phase, see “Sample Phase 4 Device Response” in Enterprise Deployment Guide. Encryption Certificate Payload Listing 2-14 describes the encryption certificate payload. This payload tells the client how to complete theenrollment process.Listing 2-14 encryption_cert_payload function def encryption_cert_payload(request, challenge)payload = general_payload()payload['PayloadIdentifier'] = "com.acme.encrypted-profile-service"payload['PayloadType'] = "Configuration" # do not modify# strings that show up in UI, customisablepayload['PayloadDisplayName'] = "Profile Service Enroll"payload['PayloadDescription'] = "Enrolls identity for the encrypted profileservice"payload['PayloadContent'] = [scep_cert_payload(request, "Profile Service",challenge)];Plist::Emit.dump(payload) 26 Profile Service Handlers 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 27<br />
end The scep_cert_payload function is described in “SCEP Certificate Payload” (page 27). SCEP Certificate Payload As the name of the scep_cert_payload function suggests, the function shown in Listing 2-15 producesan SCEP payload that gives the device the information it needs to enroll a certificate.Listing 2-15 scep_cert_payload function def scep_cert_payload(request, purpose, challenge)payload = general_payload()payload['PayloadIdentifier'] = "com.acme.encryption-cert-request"payload['PayloadType'] = "com.apple.security.scep" # do not modify The payload type of com.apple.security.scep indicates an SCEP payload and the content specifies theparameters. # strings that show up in UI, customisablepayload['PayloadDisplayName'] = purposepayload['PayloadDescription'] = "Provides device encryption identity"payload_content = Hash.newpayload_content['URL'] = "https://" + service_address(request) + "/scep" First and foremost, there is the base URL for the SCEP service, which for convenience is handled by the sampleservice as well. It looks a little different for IOS ( http://scep-server/cgi-bin/pkiclient.exe ) andWindows SCEP servers ( http://scep-server/certsrv/mscep/mscep.dll ). =begin# scep instance NOTE: required for MS SCEP serverspayload_content['Name'] = "" =end The service can provide different certificate issuing services parameterized on the Name value that becomespart of the final URL. In the case of Windows, this value needs to be set, although any value will do. payload_content['Subject'] = [ [ [ "O", "ACME Inc." ] ], [ [ "CN", purpose + " (" + UUIDTools::UUID.random_create().to_s + ")" ] ] ];if (!challenge.empty?)payload_content['Challenge'] = challengeend The subject allows the client to specify the requested subject. In this case, it is populated by the profile service.Some services may not want to grant the client the ability to specify it, and may use the Challenge toencode the identity of the requester.X.509 subjects are elaborate structures and are mimicked here as an array of arrays, to fully specify it. Eachkey-value pair is specified as an array. The key is the first element and is a string with a value that is eitheran ID (for example, "0.9.2342.19200300.100.1.25" is DC) or one of the recognized abbreviations (CN, C, ST, L,O, OU). The example above represents a subject that will often be displayed as "/O=ACME Inc./CN={purpose}({random UUID})".Profile Service Handlers 27 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 28<br />
payload_content['Keysize'] = 1024 Next up are some, simple parameters, although they require some consideration. Key size requests the deviceto generate a keypair of a certain size. Only 1024-bit and 2048-bit key sizes should be used. Keys larger than2048 bits are not supported. In general, 1024-bit keys are recommended because of the overhead involvedin generating 2048-bit keys. payload_content['Key Type'] = "RSA" The key type should always be RSA because this reference implementation (and in practice, SCEP) onlysupport RSA keys. payload_content['Key Usage'] = 5 # digital signature (1) | key encipherment(4) Key usage specifies the purposes the key can be used for and is a bit mask. Bit 0 (value 1) specifies digitalsignature, and bit 2 specifies key encipherment. Note that the MS SCEP server will only issue signature orencryption, not both. =beginpayload_content['CAFingerprint'] = StringIO.new(OpenSSL::Digest::SHA1.new(@@root_cert.to_der).digest)=end SCEP can run over HTTP, as long as the CA cert is verified out of band. This functionality is currently disabled(as shown above) because iPhone does not currently support this. This function supports such operation byadding the fingerprint to the SCEP payload that the phone downloads over HTTPS during enrollment, asshown below: payload['PayloadContent'] = payload_content;payloadendpayload = client_cert_configuration_payload(req)# vpn_configuration_payload(req) 28 Profile Service Handlers 2010-03-24 | © 2010 Apple Inc. All Rights Reserved. CHAPTER 2 Creating a Profile Server for Over-The-Air Enrollment and Configuration<br />
Page 29<br />
This example of a configuration profile payload shown in Listing A-1 contains a webclip that points the userto an intranet site and provides a payload to allow the phone to enroll an SSL client authentication cert thatwill be required to access the protected assets.Listing A-1 client_cert_configuration_payload function def client_cert_configuration_payload(request)webclip_payload = general_payload()webclip_payload['PayloadIdentifier'] = "com.acme.webclip.intranet"webclip_payload['PayloadType'] = "com.apple.webClip.managed" # do not modify# strings that show up in UI, customisablewebclip_payload['PayloadDisplayName'] = "ACME Inc."webclip_payload['PayloadDescription'] = "Creates a link to the ACME intraneton the home screen"# allow user to remove webclipwebclip_payload['IsRemovable'] = true# the linkwebclip_payload['Label'] = "ACME Inc."webclip_payload['URL'] = "https://" + service_address(request).split(":")[0]# + ":4443/" The webclip creates an icon that will take the user to the URL mentioned. In this case we allow the user todelete the webclip. client_cert_payload = scep_cert_payload(request, "Client Authentication", "foo"); The client certificate is enrolled by creating an SCEP payload similar to the one used for decrypting anencrypted payload. In a real-world implementation, you typically add additional parameters to specify keyusage, policies, and subject alternative names to make it easier for the server to match the enrolled identitywith a particular user and that user’s capabilities. Plist::Emit.dump([webclip_payload, client_cert_payload])end This function ends by dumping the raw array of payloads. The caller wraps them in a configuration profileand signs them, as shown in Listing 2-8 (page 24).For more information about the types of payloads that are available, see the iPhoneOSEnterpriseDeploymentGuide at" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" ><param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"><param name="wmode" value="opaque"><param name="bgcolor" value="#ffffff"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><param name="FlashVars" value="document_id=32728077&#038;access_key=key-2jzprb8n1hjofsmq17j0&#038;page=1&#038;viewMode=list"><embed id="doc_827608660226499" name="doc_827608660226499" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=32728077&#038;access_key=key-2jzprb8n1hjofsmq17j0&#038;page=1&#038;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"></embed></object>	</p>
<div class=\"socialpress\"><a href="http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Fwww.pointabout.com%2Fcategory%2Fdevelopment-blog%2Fupdates-fixes%2Ffeed%2F&amp;amp;title=New+Developer%27s+Resource+Documents+from+Apple" title="digg" class="socialpress-button effect-fade" target="_blank" ><img src="http://www.pointabout.com/wp-content/plugins/socialpress/assets/icons/big//digg.png" alt="digg" style="margin: 0px 2px"/></a><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.pointabout.com%2Fcategory%2Fdevelopment-blog%2Fupdates-fixes%2Ffeed%2F" title="Facebook" class="socialpress-button effect-fade" target="_blank" ><img src="http://www.pointabout.com/wp-content/plugins/socialpress/assets/icons/big//facebook.png" alt="Facebook" style="margin: 0px 2px"/></a><a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.pointabout.com%2Fcategory%2Fdevelopment-blog%2Fupdates-fixes%2Ffeed%2F" title="Technorati" class="socialpress-button effect-fade" target="_blank" ><img src="http://www.pointabout.com/wp-content/plugins/socialpress/assets/icons/big//technorati.png" alt="Technorati" style="margin: 0px 2px"/></a><a href="http://twitter.com/home/?status=New+Developer%27s+Resource+Documents+from+Apple+@+http%3A%2F%2Fbit.ly%2Fe6nwTS" title="Twitter" class="socialpress-button effect-fade" target="_blank" ><img src="http://www.pointabout.com/wp-content/plugins/socialpress/assets/icons/big//twitter.png" alt="Twitter" style="margin: 0px 2px"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.pointabout.com/2010/06/08/new-developers-resource-documents-from-apple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

