What’s new
App Tracking Transparency: expanded prompt and yearly reprompting in the EU
iOS 27.2 adds a second, expanded version of the tracking permission prompt, plus reprompting once a year. For users in France, Germany, Italy, Poland and Romania the expanded prompt is the required variant.
Why it matters: if your app calls the tracking authorization request and you ship to those markets, the prompt users see is no longer only the standard one. Audit your copy and your pre-prompt screen so the extra explanation text lines up with what the system shows.
The method name for requesting the expanded interface moved twice inside this release cycle. It started as requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:), was renamed to requestTrackingAuthorization(preferExpandedInterface:...), and was then renamed again to requestTrackingAuthorization(preferringExpandedInterface:...). If you adopted either of the earlier spellings, expect a deprecation or rename fix-it from Xcode 27.2. Let code completion pick the final signature rather than pasting the name from an older blog post.
UIKit: default layout margins are now zero
On iOS 27.1 and later, a UIView‘s default layout margins are zero. The view controller still hands its own view a set of margins through systemMinimumLayoutMargins, and those vary with presentation context (full screen, sheet, split view).
Why it matters: any custom container view that used to rely on inherited non-zero margins will now lay its subviews flush against the edges. This is a silent visual regression, not a compile error, so it shows up as cramped content after the user updates.
The documented fix is to opt the subview into the superview’s margins:
import UIKit
final class CardView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
// Inherit the view controller's systemMinimumLayoutMargins
preservesSuperviewLayoutMargins = true
}
required init?(coder: NSCoder) {
super.init(coder: coder)
preservesSuperviewLayoutMargins = true
}
}
Check every view that draws its own content and is added directly to a view controller’s view: headers, empty-state views, and any custom container that previously assumed padding.
Framework support
The iOS & iPadOS 27.2 SDK ships with Xcode 27.2, and the release notes point to the Xcode 27.2 notes for compatibility requirements. If you build against the new SDK you get the margin behavior above by default on iOS 27.1 and later, even when the deployment target is lower.
Known issues and workarounds
Health Insights summaries may not generate
Personalized summaries might not appear in the Insights tab as expected. There is no workaround listed in the notes; treat this as a wait-for-a-fix item and avoid relying on Insights content when checking Health-related screenshots or App Review demos.
Redesigned Health app is not in this build
The release notes state the redesigned Health app is not included in this version and was available in a previous beta for testing only. Existing Health data from that beta stays on the device and remains viewable in Settings, and the redesign returns in a later iOS beta. If you were validating a Health integration against the redesigned UI, you cannot do that on 27.2 — test against the last beta that had it, or wait.
Nearby Interaction DL-TDoA sessions can be invalidated
An NISession running a DL-TDoA configuration in a foreground app might be invalidated with a resource usage timeout, surfaced as NIErrorCodeResourceUsageTimeout. The documented workaround is to start a fresh session with the same configuration:
import NearbyInteraction
func restart(configuration: NINearbyPeerConfiguration) {
let session = NISession()
session.delegate = self // your NISessionDelegate
session.run(configuration)
}
Handle the timeout in your delegate and recreate instead of trying to reuse the invalidated session. Users should see a brief reconnect rather than a dead ranging session.
Shortcuts: Describe a Shortcut fails
Describe a Shortcut can fail with Something went wrong. Try again later. The notes give no workaround. Retrying later is the only option; do not build automation that depends on the description being generated.
Simulator cloning can fail with a permission error
Cloning a simulator device that runs the 27.2 runtime might fail because of incorrect file permissions (FB24939277). The workaround from the notes deletes the simulator’s stale sandbox token files inside the source device’s data directory:
find ~/Library/Developer/CoreSimulator/Devices/<SOURCE_UDID>/data \
-name '*.sb-????????-??????' -delete
Replace <SOURCE_UDID> with the device you are cloning from, quit Simulator first, then retry the clone. The paths being removed are sandbox tokens, so the source device keeps working.
StoreKit testing: subscription bundles can be unbundled
When testing in-app purchase for a subscription that belongs to a subscription bundle, the test session incorrectly lets the user unbundle instead of throwing an error. The notes list no workaround, so do not sign off on bundle logic from a simulator run alone — verify upgrade, downgrade and unbundle paths against the sandbox or production configuration before shipping.
Resolved issues worth knowing
SKTestSession.clearTransactions()now resets intro offer eligibility immediately (FB24137836). Tests that check introductory offers can run back to back without recreating the session.- Changing storefront or locale through
SKTestSessionnow propagates throughStorefront.updates, so observers fire as they would in production. - Failed purchases in
SKTestSessionno longer show error dialogs whendialogsDisabledis set totrue. UI test runs stop stalling on a system alert. - The App Tracking Transparency request API naming was corrected twice; the final selector is the
preferringExpandedInterfacevariant.
Should you update?
Update now if you ship to France, Germany, Italy, Poland or Romania and need to see the expanded tracking prompt on device, or you maintain StoreKit tests that were flaky around intro offers, storefront changes and suppressed dialogs. Those three fixes alone shorten a test cycle.
Wait if you depend on the redesigned Health app, on Health Insights summaries, or on Describe a Shortcut in a demo. Also wait if your app does a lot of Nearby Interaction ranging and you cannot add a session-restart path in this cycle.
Before updating a test device, check these in your project:
- Search for any custom
UIViewsubclass added directly to a view controller’s view and confirm it setspreservesSuperviewLayoutMarginswhere padding used to come from inheritance. - Grep for
usingExpandedInterfaceandpreferExpandedInterfaceto find call sites that need the renamed ATT method. - Re-run your StoreKit test suite with
dialogsDisabled = trueand a bundle purchase case to see whether you hit the unbundling bug. - If you use simulator clones in CI, add the
find ... -deletecleanup step before cloning on the 27.2 runtime.
FAQ
Is the redesigned Health app in iOS 27.2?
No. The release notes say the redesign is not included in this version and was only available in a previous beta for testing. Health data from that beta stays on the device and can be viewed in Settings; the redesigned app returns in a later beta.
Why did my custom view lose its padding after updating to iOS 27.2?
Because the default layout margins for a UIView became zero on iOS 27.1 and later, while the view controller still supplies systemMinimumLayoutMargins to its own view. Set preservesSuperviewLayoutMargins = true on the subview so it inherits those margins again.
Do I have to show the expanded tracking prompt?
For users in France, Germany, Italy, Poland and Romania the notes describe the expanded prompt as required, with reprompting once a year. Everywhere else the standard flow still applies, so keep the code path for both and make the request through the current renamed API.
Can I test subscription bundles reliably in the Simulator on 27.2?
Not fully. Making an in-app purchase for a subscription inside a bundle incorrectly allows unbundling instead of returning an error. Keep bundle purchase checks for sandbox or production testing until the notes list this as resolved.
