[Submitted as FB20978913]
When using .navigationTransition(.zoom) with a fullScreenCover, deleting the source item from the destination view causes a brief black flash during the dismiss animation. This is only visible in Light mode.
REPRO STEPS
Build and run the sample code below.
Set the device to Light mode.
Tap any row to open its detail view.
In the detail view, tap Delete.
Watch the dismiss animation as the list updates.
EXPECTED
The zoom transition should return smoothly to the list with no dark or black flash.
ACTUAL
A visible black flash appears over the deleted row during the collapse animation. It starts black, shortens, and fades out in sync with the row-collapse motion. The flash lasts about five frames and is consistently visible in Light mode.
NOTES
Occurs only when deleting from the presented detail view.
Does not occur when deleting directly from the list.
Does not occur or is not visible in Dark mode.
Reproducible on both simulator and device.
Removing .navigationTransition(.zoom) or using .sheet instead of .fullScreenCover avoids the issue.
SYSTEM INFO
Version 26.1 (17B55)
iOS 26.1
Devices: iPhone 17 Pro simulator, iPhone 13 Pro hardware
Appearance: Light
Reproducible 100% of the time
SAMPLE CODE
import SwiftUI
struct ContentView: View {
@State private var items = (0..<20).map { Item(id: $0, title: "Item \($0)") }
@State private var selectedItem: Item?
@Namespace private var ns
var body: some View {
NavigationStack {
List {
ForEach(items) { item in
Button {
selectedItem = item
} label: {
HStack {
Text(item.title)
Spacer()
}
.padding(.vertical, 8)
.contentShape(Rectangle())
}
.buttonStyle(.plain)
.matchedTransitionSource(id: item.id, in: ns)
.swipeActions {
Button(role: .destructive) {
delete(item)
} label: {
Label("Delete", systemImage: "trash")
}
}
}
}
.listStyle(.plain)
.navigationTitle("Row Delete Issue")
.navigationSubtitle("In Light mode, tap item then tap Delete to see black flash")
.fullScreenCover(item: $selectedItem) { item in
DetailView(item: item, ns: ns) {
delete(item)
selectedItem = nil
}
}
}
}
private func delete(_ item: Item) {
withAnimation {
items.removeAll { $0.id == item.id }
}
}
}
struct DetailView: View {
let item: Item
let ns: Namespace.ID
let onDelete: () -> Void
@Environment(\.dismiss) private var dismiss
var body: some View {
NavigationStack {
VStack(spacing: 30) {
Text(item.title)
Button("Delete", role: .destructive, action: onDelete)
}
.navigationTitle("Detail")
.toolbar {
Button("Close") { dismiss() }
}
}
.navigationTransition(.zoom(sourceID: item.id, in: ns))
}
}
struct Item: Identifiable, Hashable {
let id: Int
let title: String
}
SCREEN RECORDING
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
In App Store Connect, a Build Uploads section recently appeared above versions in the iOS Builds page in the TestFlight tab. It’s always expanded, which pushes the Version sections halfway down the page—those are the ones I actually need to manage my builds (compliance, testing groups, etc.).
Is there a way to either:
Hide the Build Uploads section entirely, or
Make it stay collapsed
Right now, collapsing it doesn’t stick—it re-expands every time the page reloads. It wouldn’t be so bad if the list weren’t so long, but even expired builds still display, so I can't even expire a bunch of builds to minimize it.
[Also submitted as FB20756013]
A popoverTip does not display for toolbar menu buttons in iOS 26.1 (23B5073a). The same code displays tips correctly in iOS 18.6. The issue occurs both in the simulator and on a physical device.
Repro Steps
Build and run the Sample Code below on iOS 26.1.
Observe that the popoverTip does not display.
Repeat on iOS 18.6 to confirm expected behavior.
Expected
popoverTips should appear when attached to a toolbar menu button, as they do in iOS 18.6.
Actual
No tip is displayed on iOS 26.1.
System Info
macOS 15.7.1 (24G231)
Xcode 26.1 beta 3 (17B5045g)
iOS 26.1 (23B5073a)
Screenshot
Screenshot showing two simulators side by side—iOS 18.6 on the left (tip displayed) and iOS 26.1 on the right (no tip displayed).
Sample code
import SwiftUI
import TipKit
struct PopoverTip: Tip {
var title: Text {
Text("Menu Tip")
}
var message: Text? {
Text("This tip displays on iOS 18.6, but NOT on iOS 26.1.")
}
}
struct ContentView: View {
var tip = PopoverTip()
var body: some View {
NavigationStack {
Text("`popoverTip` doesn't display on iOS 26.1 but does in iOS 18.6")
.padding()
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Menu {
Button("Dismiss", role: .cancel) { }
Button("Do Nothing") { }
} label: {
Label("More", systemImage: "ellipsis")
}
.popoverTip(tip)
}
}
.navigationTitle("Popover Tip Issue")
.navigationBarTitleDisplayMode(.inline)
}
}
}
[Submitted as FB21078443]
When using .matchedTransitionSource with .navigationTransition(.zoom), swiping back from the left edge to return from a detail view causes the source item to disappear once the transition finishes. It’s only a visual issue—the item is still there and can be tapped to open again.
This doesn’t happen when using the Back button; only the swipe-back gesture triggers it. Also, it only reproduces on a physical device, not in Simulator.
SYSTEM INFO
Xcode 26.1.1 (17B100)
macOS 26.1 (25B78)
iOS 26.1 (23B85)
iOS 26.2 (23C5044b)
REPRO STEPS
Run the code below on a physical device, tap an image, then swipe from the left edge to dismiss the detail view.
ACTUAL
The image zooms back to its origin, then disappears once the animation settles.
EXPECTED
The image card remains visible.
SCREENSHOTS
CODE
import SwiftUI
struct Item: Identifiable, Hashable {
let id = UUID()
let imageName: String
let title: String
}
struct ContentView: View {
@Namespace private var namespace
let items = [
Item(imageName: "SampleImage", title: "Sample Card 1"),
Item(imageName: "SampleImage2", title: "Sample Card 2")
]
var body: some View {
NavigationStack {
ScrollView {
VStack(spacing: 16) {
ForEach(items) { item in
NavigationLink(value: item) {
CardView(item: item)
.matchedTransitionSource(id: item.id, in: namespace)
}
.buttonStyle(.plain)
}
}
.padding()
}
.navigationTitle("Zoom Transition Issue")
.navigationSubtitle("Tap image, then swipe back from left edge")
.navigationDestination(for: Item.self) { item in
DetailView(item: item, namespace: namespace)
.navigationTransition(.zoom(sourceID: item.id, in: namespace))
}
}
}
}
struct CardView: View {
let item: Item
var body: some View {
GeometryReader { geometry in
ZStack(alignment: .bottom) {
Image(item.imageName)
.resizable()
.scaledToFill()
.frame(width: geometry.size.width, height: geometry.size.height)
.clipped()
}
}
.frame(height: 200)
.clipShape(RoundedRectangle(cornerRadius: 16))
}
}
struct DetailView: View {
let item: Item
let namespace: Namespace.ID
var body: some View {
Image(item.imageName)
.resizable()
.scaledToFill()
.clipped()
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
[Also submitted as FB20225387]
When using a custom SF Symbol that combines a base symbol with a badge, the symbol doesn’t stay vertically centered when displayed in code. The vertical alignment shifts based on the Y offset of the badge.
There are two problems with this:
The base element shouldn’t move vertically when a badge is added—the badge is meant to add to the symbol, not change its alignment.
The badge position should be consistent with system-provided badged symbols, where badges always appear in a predictable spot relative to the corner they're in (usually at X,Y offsets of 90% or 10%).
Neither of these behaviors match what’s expected, leading to inconsistent and misaligned symbols in the UI.
Screenshot of Problem
The ellipsis shifts vertically whenever the badge Y offset is set to anything other than 50%. Even at a 90/10 offset, it still doesn’t align with the badge position of the system "envelope.badge" symbol.
SF Symbols Export
This seem to be a SwiftUI issue since both the export from SF Symbols is correctly centered:
Xcode Assets Preview
And it's also correct in the Xcode Assets preview:
Steps to Repro
In SF Symbols, create a custom symbol of "ellipsis" (right-click and Duplicate as Custom Symbol)
Combine it with the "badge" component (select Custom Symbols, select the newly-created "custom.ellipsis", then right-click and Combine Symbol with Component…)
Change the badge's Y Offset to 10%.
Export the symbol and add it to your Xcode asset catalog.
In Xcode, display the symbol inside a Button using Image(“custom.ellipsis.badge”).
Add a couple more buttons separated by spacers, using system images of "ellipsis" and "app.badge".
Compare the "custom.ellipsis.badge" button to the two system symbol buttons.
Expected
The combined symbol remains vertically centered, matching the alignment shown in both the SF Symbols export window and the Xcode asset catalog thumbnails.
Actual
The base symbol (e.g., the ellipsis portion) shifts vertically based on the Y offset of the badge element. This causes visual misalignment when displayed in SwiftUI toolbars or other layouts. Also included the system “envelope.badge” icon to show where a 90%, 10% badge offset should be located.
System Info
SF Symbols Version 7.0 (114)
Xcode Version 26.0 (17A321)
macOS 15.6.1 (24G90)
iOS 26.0 (23A340)
[Also submitted as FB21536505]
When presenting a NavigationStack inside a .sheet, applying .tint(Color) does not affect the system back button on pushed destinations. The sheet’s close button adopts the tint, but the back chevron remains the default system color.
REPRO
Create a new iOS project and replace ContentView.swift with the code below.
—or—
Present a .sheet containing a NavigationStack.
Apply .tint(.red) to the NavigationStack or sheet content.
Push a destination using NavigationLink.
EXPECTED
The back button chevron adopts the provided tint color, consistent with other toolbar buttons and UIKit navigation behavior.
ACTUAL
The back button chevron remains the default system color.
NOTES
Reproduces consistently on:
iOS 26.2 (23C54)
iOS 26.3 (23D5089e)
SCREEN RECORDING
SAMPLE CODE
import SwiftUI
struct ContentView: View {
@State private var isSheetPresented = false
var body: some View {
Button("Open Settings Sheet") {
isSheetPresented = true
}
.sheet(isPresented: $isSheetPresented) {
NavigationStack {
List {
NavigationLink("Push Detail") {
DetailView()
}
}
.navigationTitle("Settings")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .automatic) {
Button("Close", systemImage: "xmark") {
isSheetPresented = false
}
}
}
}
.tint(.red)
}
}
}
private struct DetailView: View {
var body: some View {
List {
Text("Detail View")
}
.navigationTitle("Detail")
.navigationBarTitleDisplayMode(.inline)
}
}
I have a $4 USD, one-time-purchase app (Dash Calc) and sales have been rough. In a crowded category, an paid-upfront app feels like a tough sell without a way to try it first. I’d like to offer a simple 7-day free trial followed by a single lifetime purchase, but App Store Connect still doesn’t officially support trials for paid apps.
In Jan 2023, an App Store Commerce Engineer recommended the $0 non-consumable IAP + paid non-consumable IAP workaround:
https://developer.apple.com/forums/thread/722874
I haven’t implemented it yet, but the subsequent discussion suggests the approach is overly complex. Handling refunds, reinstalls, activation timing, and purchase history requires non-obvious logic, and some developers report customer confusion and drop-off when presented with a $0 trial IAP.
Has anything improved since 2023?
Any new StoreKit APIs or App Store Connect changes that make this simpler or less error-prone?
Is the $0 non-consumable IAP still the recommended approach in 2026?
Any updated guidance for time-limited access on one-time purchases?
I’m happy to use the workaround if it’s still the official path—I just want to confirm there isn’t a better option now.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
StoreKit
In-App Purchase
[Submitted as FB20950954]
Xcode Simulator causes crackling and distortion in audio playback across all apps (Apple Podcasts, Music, third-party).
REPRO STEPS
Open any audio app and start playback
Note the audio quality
Launch Xcode Simulator
After a few seconds, note audio quality again
Quit Xcode Simulator
Audio returns to normal
CURRENT
Audio has crackling and distortion while Simulator is running.
EXPECTED
Clean audio playback regardless of whether Simulator is running.
SYSTEM INFO
macOS 26.1 (25B78)
Xcode 26.1 (17B55)
Simulator 26.0 (1058)
[Also submitted as FB20636175]
In iOS 26.1 Seed 2 (23B5059e), ToolbarItem menus with .bottomBar placement cause the toolbar item to disappear and rebuild after the menu is dismissed, instead of smoothly morphing back. The bottom toolbar can take 1–2 seconds to reappear.
This also seems to coincide with this console error:
Adding 'UIKitToolbar' as a subview of UIHostingController.view is not supported and may result in a broken view hierarchy. Add your view above UIHostingController.view in a common superview or insert it into your SwiftUI content in a UIViewRepresentable instead.
This occurs both on device and in a simulator.
Sample Project
This sample ContentView includes two menu buttons—one in the bottom bar and one in the top bar. Dismissing the bottom bar menu causes a short delay before the button reappears, while the top bar menu behaves normally.
struct ContentView: View {
var body: some View {
NavigationStack {
Text("Tap and dismiss both menu buttons and note the difference.")
.navigationTitle("BottomBar Menu Issue")
.navigationSubtitle("Reproduces on iOS 26.1 Seed 2 (23B5059e)")
.toolbar {
// Control: top bar trailing menu animates back smoothly
ToolbarItem(placement: .topBarTrailing) {
Menu {
Button("Dismiss", role: .cancel) { }
Button("Do Nothing") { }
} label: {
Label("More", systemImage: "ellipsis.circle")
.font(.title3)
}
}
// Repro: delay before menu button reappears after menu dismissal
ToolbarItem(placement: .bottomBar) {
Menu {
Button("Dismiss", role: .cancel) { }
Button("Do Nothing") { }
} label: {
Label("Actions", systemImage: "ellipsis.circle")
.font(.title2)
}
}
}
}
}
}
Passwords App
This can also be seen in iOS 26.1 Seed 2 (23B5059e)'s Passwords app ("All" or "Passcodes" views):