Η
Apple χθες, Δευτέρα 29 Ιουλίου, το απόγευμα κυκλοφόρησε την
νέα δοκιμαστική έκδοση του
iOS 7 για όσους έχουν λογαριασμό σαν προγραμματιστές. Η beta 4 φέρνει πολλές βελτιώσεις και διορθώσεις διαφόρων bugs μιας και πλησιάζει στην τελική έκδοση. Μέσα στο κώδικα υπάρχει επίσης μία έκπληξη που επαληθεύει τη φήμη ότι το
iPhone 5S θα έχει αναγνώριση δαχτυλικού
αποτυπώματος. Όλες οι αλλαγές που έχουν γίνει στην
νέα έκδοση παρατίθενται παρακάτω για όποιον ενδιαφέρεται. Όποιος είναι developer στην
Apple μπορεί να πάει στις ρυθμίσεις του κινητού ή του
tablet και να κάνει την ενημέρωση
OTA.
Notes and Known IssuesThe following issues relate to using
iOS SDK 7.0 to develop code.Address
Book NotesPrivacy
support for the AddressBookUI framework is reenabled for apps linked against the
iOS 7
SDK. Apps linked against older SDKs are not changed. If your app uses any of the Address
Book view controllers, you should verify that it still behaves as expected.AirDropNotesAirDrop in
iOS 7
Seed 2 or later is not compatible with AirDrop in
iOS 7
Seed 1. Contacts Only
support requires that:You are logged in to
iCloud.The sender and receiver have each other’s
Apple ID
email addresses in Contacts on their devices.Known IssuesContact Only currently requires that you have an active Internet connection.The
App Store should
support the ability to
find an app capable of
opening a received document based on the document’s Uniform Type Identifier (UTI). Currently, just a blank
screen is displayed.AV Foundation NotesAVCaptureSession now uses your app’s AVAudioSession by
default.CalendarFixed in
Seed 4iCloud
calendar events may not
sync through fetch,
push, or
manual refresh as expected.
iCloud calendars or reminders may be duplicated after adding new events.
Car DisplayKnown IssuesSupport for
Car Display will be provided once compatible
systems are available.ContactsFixed in
Seed 4Some high-resolution
photos will not
sync (via
iCloud and other services) when
set as a Contact’s Caller ID
photo.Core
Animation NotesWhen the UIViewGroupOpacity
key is not present, the
default value is now YES. The
default was previously NO.This means that subviews of a transparent
view will first be composited onto that transparent
view, then the precomposited subtree will be drawn as a whole onto the
background. A NO setting results in less expensive, but also less accurate, compositing: each
view in the transparent subtree is composited onto what’s underneath it, according to the parent’s opacity, in the normal painter’s algorithm
order.ExchangeNotesThe
Exchange DeviceIdentifier has been changed back to the behavior of
iOS 6 where it uses the
serial number.FontsNotesFont line heights have changed from previous seeds. If you had previously manually aligned your font, it may move slightly up vertically with this
seed.Foundation NotesAn NSMetadataQuery with ubiquitous scope can now use kMDItemContentTypeTree in predicates. For example:NSPredicate *p = [NSComparisonPredicatepredicateWithLeftExpression:[NSExpressionexpressionForKeyPath:@"kMDItemContentTypeTree"]rightExpression:[NSExpressionexpressionForConstantValue:@"public.rtf"]modifier: NSAnyPredicateModifiertype:NSLikePredicateOperatorTypeoptions:0];When called on results returned by queries with ubiquitous scopes, -[NSMetadataItem valueForAttribute:NSMetadataItemDisplayNameKey] now produces the same value as -[NSURL getResourceValue: forKey: NSURLLocalizedNameKey], matching nonubiquitous queries.
iCloud NotesIf you use
iCloud Keychain with recovery, you may see a dialog indicating recovery has been disabled
due to a
server change. This is intentional. To reenable functionality, follow the instructions in the notification. If you see multiple alerts or observe issues with reenabling recovery, please file a
bug report.
iCloud Keychain in
iOS 7
Seed 3 or later is not backward compatible with
iOS 7
Seed 2 or OS X
Mavericks Seed 2.If you had
iCloud Keychain and/or Keychain Restore enabled from
iOS 7
Seed 2, both
features are disabled upon updating to
iOS 7
Seed 3 or later.After updating to
iOS 7
Seed 3 or later, go to Settings >
iCloud > Keychain and reenable
iCloud Keychain on your devices.See OS X v10.9 Release
Notes for more details.Activation Lock, a new feature of
Find My
iPhone, is turned on automatically when
Find My
iPhone is enabled on any device
running iOS 7. Activation Lock requires users to enter their
Apple ID and password to turn off
Find My
iPhone,
sign out of
iCloud, erase the device, or reactivate the device after an erase. It’s important to do one of the following before transferring a device to a new
user:Sign out of
iCloud.Turn off Activation Lock in Settings >
iCloud >
Find My
iPhone.Fixed in
Seed 4Users who have a
single device with
iCloud Keychain on will not be presented with the correct
iCloud Keychain setup screens after restoring from a backup.Users signing out of
iCloud by deleting their
iCloud account, erasing all contents and settings, or erasing the device via
Find My
iPhone and signing back in will not be presented with the correct
iCloud Keychain setup screens.Credit cards deleted in
Safari Settings > AutoFill are removed from the device, but not from other devices.Sometimes when you disable
iCloud Keychain you may not be able to reenable it.Keychains are not synced among devices when they are on a
wireless network with WEP
security.When setting up
iCloud Keychain in Setup Assistant on
iPhone 4 and
iPhone 4s, the
keyboard covers the
iCloud Security Code entry field and the Advanced Options link.Nonpurchased ePubs and PDFs will not be restored when
iCloud-restoring an
iOS 7 device with a pre-
iOS 7 backup. Purchased content will be restored without
issue.Known IssuesVoice Memos are not restored from
iCloud Backups.Workaround: Make sure to
sync Voice Memos off of your device before restoring from
iCloud.Users in
Switzerland,
France,
Spain,
Germany, Poland, Finland, and possibly some other countries, will be unable to restore their keychains using
phone number validation.Workaround: Use
Random Security Code.MapKit NotesIf the calls to renderInContext on the layer backing an MKMapView are made off the main thread, they should be eliminated or moved to the main thread. Failure to do so can cause an app
crash. Instead of using renderInContext, use the new MKMapSnapshotter APIs.MediaNotesiOS now remembers the last used
media app across
reboot and app crashes.
Media apps that can receive remote control events should be prepared to be launched in the
background and potentially receive a remote control event to
begin playback. Additionally, it’s important that
media apps monitor and handle the
media server reset event, since the
media app may receive a remote
request to resume playback after a reset. Notifications to monitor these
media server events are available in AVAudioSession and proper handling is described in General recommendations for handling kAudioSessionProperty_ServerDied.Multipeer Connectivity NotesMany updates to the MCSession APIs are included in this
seed. The APIs now function as they were presented at
WWDC.
Major changes and enhancements include:The following new method on MCSession has been implemented:This delegate method has been implemented:The following new method on MCSession has been implemented:- (NSOutputStream *)startStreamWithName:(NSString *)streamName toPeer:(MCPeerID*)peerID error:(NSError **)error- (void)session:(MCSession *)session didReceiveStream:(NSInputStream *)streamwithName:(NSString *)streamName fromPeer:(MCPeerID *)peerID- (NSProgress *)sendResourceAtURL:(NSURL *)resourceURL withName:(NSString*)resourceName toPeer:(MCPeerID *)peerID withCompletionHandler:(void(^)(NSError*error))completionHandlerThe delegate method to start receiving a resource from remote
peer has been implemented as:- (void)session:(MCSession *)session didStartReceivingResourceWithName:(NSStringThe delegate method to finish receiving a resource from remote
peer and save the content in a temporary location is implemented as:MCAdvertiserAssistant is a convenience
class for implementing an Advertiser, which handles invitations and connections to an MCSession.MCSession has a new initWithPeer: method.sendResource has added “with” to the completionHandler.The timeout has been removed from connectPeer:withNearbyConnectionData.For more information on these APIs,
watch the
video for
WWDC 2013
Session 708, “Nearby Networking with Multipeer Connectivity.”MultitaskingNotesThe policy for the task completion
API has changed back to match the
iOS 6 behavior, but the
time limit for task completion has decreased from 10 minutes in
iOS 6.Networking Fixed in
Seed 4All NSURL
session tasks now start suspended rather than
running. This allows you to
set up their state before the task is started.NotesCellular fallback is a technology that will attempt to connect over the cellular interface when a connection over the Wi-Fi interface does not succeed. There are a number of cases where connection failures may occur over Wi-Fi, such as a cable modem in need of a
reboot or a firewall that blocks
access to certain resources.If your app restricts
network operations over the cellular
network, verify that your code is using the proper
API to implement that policy.For example, if your app watches SCNetworkReachability for the kSCNetworkReachabilityFlagsIsWWAN to monitor when Wi-Fi is available, it may not behave correctly under cellular fallback.If an app uses this method and then attempts to connect, thinking it will get a connection over Wi-- (void)session:(MCSession *)session didFinishReceivingResourceWithName:(NSString*)resourceName fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)errorNote: The app is responsible for moving the file to a permanent location within its sandbox.*)resourceName fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progressFi, the app may inadvertently
end up with a connection over the cellular
network. The lack of the kSCNetworkReachabilityFlagsIsWWAN is not a guarantee that your connection will not go over cellular. If your code needs to enforce that a connection not go over cellular, it needs to specify that when making a networking
request.Instead, for CFNetwork code using CFSocketStream, CFHTTPStream, or similar APIs,
set the kCFStreamPropertyNoCellular
property to true on the CF object before connecting.For NSURLRequests, call [request setAllowsCellularAccess: false].In addition to making sure that your code will never be connected over cellular because of cellular fallback, this call ensures that your code will never be connected over cellular because of the
VPN or convoluted routing problems (connecting to
IPv6 over cellular because only
IPv4 is available over Wi-Fi, etc.).To verify that your app is behaving properly, you should
test against a broken Wi-Fi
network. The easiest way to
set up a broken Wi-Fi
network is to
set up an
Apple AirPort Base Station or other Wi- Fi
access point to
hand out a DHCP address and leave the
access point disconnected from the Internet. Another simple way of testing is to unplug the cable or
DSL line from your cable or DLS modem.Two low-level networking APIs that used to return a
MAC address now return the fixed value 02:00:00:00:00:00. The APIs in question are sysctl (NET_RT_IFLIST) and ioctl (SIOCGIFCONF). Developers using the value of the
MAC address should migrate to identifiers such as -[UIDevice identifierForVendor]. This change affects all apps
running on
iOS 7.Objective-C Runtime NotesDue to changes in how the isa field is implemented, *self may change during enumeration (for example, if the container is retained).Workaround: When implementing countByEnumeratingWithState, do not
set state- >mutationsPtr = self.PassbookNotesAs of
iOS 7
Seed 4, Passbook has added
support for the
major and minor fields to better match the rest of the iBeacon ecosystem. The new
major and minor
keys are independently variable optional alongside proximityUUID (required) in each
dictionary in the beacons array.In previous versions of the
iOS SDK, Passbook did not validate the back fields on passes completely. The validation
rules have not changed, but validation is now including back fields. Please check the console log for additional logs.As of
iOS 7
Seed 3, PKPassLibraryDidCancelAddPasses is a new
status code in the PKPassLibraryAddPassesStatus enum. It signifies that the
user tapped Cancel in an
add-passes alert.SafariFixed in
Seed 4Safari website credentials do not always autofill between
mobile and desktop versions. Workaround: Use the desktop version if the
site offers it.Upgrading to
iOS may reset Safari’s settings to their
default values.
Security Notes-[UIDevice uniqueIdentifier] is no longer accepted in submissions to the
App Store. In
iOS 7, apps that are already on the
store or on users’ devices that call this removed
API will no longer be returned the UDID. Instead, -[UIDevice uniqueIdentifier] will return a 40-character
string starting with FFFFFFFF, followed by the hex value of -[UIDevice identifierForVendor]. It is important to consider how this will affect existing apps. Consider submitting updates that no longer
access the UDID.
iOS now requests
user consent for apps to use audio input on all
iOS 7 devices. For devices sold in
China,
iOS will also
request user consent for apps to use the
camera hardware. The operating
system will present the consent alert when you
set the category of the instantiated AVAudioSession. The AVAudioSession categories that will present the alert are AVAudioSessionCategoryRecord and AVAudioSessionCategoryPlayAndRecord.If the
user doesn’t allow
access, the audio
session data will be all zeros (silence). For devices where
camera access is requested and denied by the
user, the
video capture
session is a
black screen.The
API gethostuuid() has been removed and will not be accepted for submission to the
store, regardless of the targeted OS. For existing apps
running on
iOS 7, the function will return a uuid_t representation of the vendor identifier (-[UIDevice identifierForVendor]).SetupKnown IssueThe setup assistant may
crash when setting up a new device with an existing
email address.Workaround: Continue through the setup assistant. Then go to Settings >
iCloud and manually enable the services that are off.SiriNotesThis
seed includes development versions of new male and female Siri voices for U.S.
English and French, and a male
voice for German.Social NotesThrough
iOS 6, when using TWTweetComposeViewController and SLComposeViewController (the latter only for
Twitter and Weibo, but not Facebook), if the caller supplies a completionHandler, the supplied completionHandler is responsible for dismissing the
view controller. As of
iOS 7, if the app links against the
iOS 7
SDK, the
view controller will dismiss itself even if the caller supplies a completionHandler. To avoid this, the caller’s completionHandler should not dismiss the
view controller.Known IssueWhen using the
iOS 6.1
SDK on OS X v10.8 Mountain
Lion, if you use the
iOS 5.0 or
iOS 5.1 Legacy
SDK in
iOS Simulator, you will not be able to use
Twitter features: attempting to
sign in to
Twitter via the Settings pane will
fail, and
Twitter.framework will not work correctly. If you need to
test Twitter features, you will need to choose either an
iOS 6.1 or
iOS 6.0 Simulator
run destination, or you can
test with
iOS 5.x on a device.SpringboardNotesActive touches are no longer canceled when the
user takes a screenshot.
Dynamic wallpaper is not available on
iPhone 4.Fixed in
Seed 4Springboard crashes when accessing some
web clips in the App Switcher.When restoring from an iCloud backup on a device with hundreds of apps, Springboard may
crash repeatedly.Passwords with diacritical marks are not supported in this
seed. If you have diacritical marks in your password, change it before upgrading to
Seed 3 as you will be unable to
unlock your device.Sprite Kit Known Issue+[AVPlayer playerWithPlayerItem:] returns an AVPlayer object, but the current item will return nil if the
player was created on another thread.StoresKnown IssueSome
iPhone 4 devices are unable to
download content from the
App Store and the
iTunes Store.SyncFixed in
Seed 4The Wi-Fi
sync option in
iTunes is checked, but Wi-Fi devices do not appear in
iTunes.UIKitNotesIn previous seeds, the snapshot
API (snapshotView and resizableSnapshotViewFromRect:withCapInsets:) would defer taking the snapshot if the
view had never been committed or had been added to the
view hierarchy in the current transaction. This behavior has changed.Snapshots now always represent the current, committed state of the
view. Attempting to snapshot a
view that has never been committed logs a message and now returns nil.Snapshotting methods have been updated and now take an argument: afterUpdates. When
set to YES, this instructs the snapshot to
wait until all pending changes to the hierarchy have been committed. To maintain the pre-
Seed 4 behavior, pass NO and the snapshot will capture what is currently on
screen. See UIView.h for more details.When there isn’t enough
room in the
navigation bar
layout for the
full text of the back
button title, the
navigation bar will substitute a generic short back title (in
English, “Back”). If even that
string is too
long, the bar will show the back indicator chevron with no title.+[UIPasteboard pasteboardWithName:create:] and +[UIPasteboard pasteboardWithUniqueName] now unique the given name to allow only those apps in the same application
group to
access the pasteboard. If the developer attempts to create a pasteboard with a name that already exists and they are not part of the same app suite, they will get their own unique and private pasteboard.
Note that this does not affect the
system provided pasteboards, general, and
find.Starting with
Seed 2, apps
default to using the new
view controller-based
status bar management
system. To opt out of this, add a value of NO for the UIViewControllerBasedStatusBarAppearance
key to your
Info.plist.When using
Auto Layout to position a UIButton, if you
set the content compression resistance or content hugging priority to minimum, the
button will have ambiguous
layout.Workaround: Don’t use a content compression resistance or content hugging priority of less than 2 for UIButton.UIScreenEdgePanGestureRecognizer allows you to perform actions in response to swipes over the
edge of the
screen using the same heuristics that the
system uses for its own gestures. Use this if you have a
navigation semantic of your own that doesn’t use UINavigationController but should include this gesture (e.g., Safari).This gesture recognizer has a
property that describes the edges on which it’s active. UIRectEdge is a new enum type that this
property and -[UIViewController edgesForExtendedLayout] can share. UIRectEdge replaces UIExtendedEdge, which will be removed. The members of both have the same values. Use Xcode to replace all instances of “UIExtendedEdge” in your
project with “UIRectEdge”.UIButtonTypeInfoLight, UIButtonTypeInfoDark, and UIButtonTypeDetailDisclosure buttons all look the same.Blurred layers are not available on
iPhone 4. Parallax is not available on
iPhone 4. Letterpress
text is not available on
iPhone 4.Fixed in Seed 4The UIImagePickerController does not show a
live preview when using
custom overlays. UIPickerView with
custom views doesn’t show the
views in the selection indicator.UIRefreshControl and the associated table
view are hidden under the
navigation bar when setTranslucent: is NO.IB
support for -topLayoutGuide and -bottomLayoutGuide is not functional in this
seed. The title of the UIRefreshControl appears below the
navigation bar.Known IssueYour app’s UI may move slightly after using a
media player in landscape mode.WeatherNotesWeather conditions are not animated on
iPhone 4.WebKitNotesPreviously, when the viewport parameters were modified, the old parameters were never discarded. This caused the viewport parameters to be additive.For example, if you started with width=device-width and then changed it to initial-scale=1.0, you ended up with a computed viewport of width=device-width, initial-scale=1.0.In
iOS 7, this has been addressed. Now you
end up with with a computed viewport of initial- scale=1.0.Previously, when using , the
scale could be incorrect after rotation.Now, if a
user has not scaled the page explicitly, the page is restored to its initial
scale. Also, the current
scale is now correctly restricted within the min-scale, max-scale bounds.Some
images for Retina display devices appear at twice the
size that they should instead of being scaled down 50%. This
issue can also occur with any
image to be scaled that is larger than its container and that uses either the
background-
size property or the -webkit-
background-size
property. This
issue affects both native apps that display
web content and
web pages viewed in
Safari for
iPhone.The
background CSS shorthand
property now resets the value of the background-size
property to
auto when background size is not specified. This new behavior is per the
CSS spec, and the old behavior is available only for apps linked to an
SDK prior to
iOS 7.0 when
running on
iOS 7 or later.Workaround: Specify the background-size
property or the -webkit-background-size
property after the background shorthand
property in the
CSS stylesheet for the
web content being displayed.Known IssueWeb apps and
web clips created in previous seeds will not stay in folders across
reboot.Workaround:
Delete the old
web app or
web clip and recreate it in this
seed by loading the content in
Safari, tapping the Action
button, and then “Add to
Home Screen.”Wi-FiNotesThis
seed introduces changes to AWDL so that technologies that use it—such as AirDrop and the MultiPeerConnectivity APIs—will not work properly with older seeds.