If an app uses this method and then attempts to connect, thinking it will get a connection over Wi-Fi, the app may inadvertently end up with a connection over the cellular network. The lack of thekSCNetworkReachabilityFlagsIsWWAN is not a guarantee that your connection will not go over cellular. If your code needs to enforce that a connection not go over cellular, it needs to specify that when making a networking request.
Instead, for CFNetwork code using CFSocketStream, CFHTTPStream, or similar APIs, set the kCFStreamPropertyNoCellular property to true on the CF object before connecting.
For NSURLRequests, call [request setAllowsCellularAccess: false].
In addition to making sure your code will never be connected over cellular because of cellular fallback, this call ensures that your code will never be connected over cellular because of the VPN or convoluted routing problems (connecting to IPv6 over cellular because only IPv4 is available over Wi-Fi, etc.).
To verify that your app is behaving properly, you should test against a broken Wi-Fi network. The easiest way to set up a broken Wi-Fi network is to set up an Apple AirPort Base Station or other Wi-Fi access point to hand out a DHCP address and leave the access point disconnected from the Internet. Another simple way of testing is to unplug the cable or DSL line from your cable or DLS modem.
Two low-level networking APIs that used to return a MAC address now return the fixed value 02:00:00:00:00:00. The APIs in question are sysctl (NET_RT_IFLIST) and ioctl (SIOCGIFCONF). Developers using the value of the MAC address should migrate to identifiers such as -[UIDevice identifierForVendor]. This change affects all apps running on iOS 7.
All NSURL session tasks now start suspended rather than running. This allows you to set up up their state before the task is started.
Fixed in Seed 3
Newsstand background downloads that use HTTP basic or digest authentication will prompt the user with authorization alerts (NSURLConnectionDelegate Protocol callbacks forconnectionShouldUseCredentialStorage and willSendRequestForAuthenticationChallenge are not called correctly).
Due to changes in how the isa field is implemented, *self may change during enumeration (for example, if the container is retained).
Workaround: When implementing countByEnumeratingWithState, do not set state->mutationsPtr = self.
In previous versions of the iOS SDK, Passbook did not validate the back fields on passes completely. This has been corrected, but it means that some passes added on iOS 6.0, 6.1, and iOS 7.0 Seed 1, will be invalid on iOS 7 Seed 2 and later. The validation rules have not changed, it was just a a bug in validation in previous implementations. If you have a pass that you were previously able to add to Passbook, but no longer can, watch the console log for more than one field that has the key NAME. Field keys need to be unique.
Sign up for CIO Asia eNewsletters.