Hello,
I'm encountering an issue where my released app fails to launch only on iOS 17.4. The version of the app released through TestFlight works fine without any issues.
Specifically, when the app installed from the App Store is launched on iOS 17.4, it immediately crashes. However, I've noticed the following:
If I turn off the network connection, such as putting the device in Airplane Mode, the app launches successfully.
Once the app is launched, I can re-enable the network connection, and the app continues to run without crashing.
My app uses StoreKit2 for handling transactions and connections with the App Store. It initiates a connection to the App Store via StoreKit2 at launch. The primary difference between the TestFlight version and the production version is the App Store endpoint they connect to. This leads me to suspect that there might be an issue with the connection to the App Store.
(Another possibility is that the app communicates with Firebase or Google Admob, so there could be an issue with these SDKs as well.)
This issue only occurs in the production version, making it difficult to investigate. Are there any suggestions on what I can do to further diagnose this issue?
You can download my app from here:
https://apps.apple.com/us/app/repeatable-player-cut-loop/id616310281
I can provide the TestFlight URL if needed.
Any help or guidance would be greatly appreciated.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
This is a report of an issue that appears to be a regression regarding NavigationStack.
While investigating another issue [iOS18 beta2: NavigationStack, Views Being Popped Automatically] , I encountered this separate issue and wanted to share it.
In a NavigationStack with three levels: RootView - ContentView - SubView,
tapping the Back button from the SubView returned to the RootView instead of the ContentView.
This issue is similar to one that I previously posted regarding iOS16.0 beta.
https://developer.apple.com/forums/thread/715970
Additionally, there is no transition animation when moving from ContentView to SubView.
The reproduction code is as follows:
import SwiftUI
struct RootView2: View {
@State var kind: Kind = .a
@State var vals: [Selection] = {
return (1...5).map { Selection(num: $0) }
}()
@State var selection: Selection?
var body: some View {
if #available(iOS 16.0, *) {
NavigationStack {
NavigationLink {
ContentView2(vals: $vals, selection: $selection)
} label: {
Text("album")
}
.navigationDestination(isPresented: .init(get: {
return selection != nil
}, set: { newValue in
if !newValue {
selection = nil
}
}), destination: {
if let selection {
SubView2(kind: .a, selection: selection)
}
})
}
} else {
EmptyView()
}
}
}
struct ContentView2: View {
@Binding var vals: [Selection]
@Binding var selection: Selection?
@Environment(\.dismiss) private var dismiss
var body: some View {
list
.onChange(of: self.selection) { newValue in
print("changed: \(String(describing: newValue?.num))")
}
}
@ViewBuilder
private var list: some View {
if #available(iOS 16.0, *) {
List(selection: $selection) {
ForEach(self.vals) { val in
NavigationLink(value: val) {
Text("\(String(describing: val))")
}
}
}
}
}
}
//
struct SubView2: View {
let kind: Kind
let selection: Selection
var body: some View {
Text("Content. \(kind): \(selection)")
}
}
Summary
On iOS 26, the navigation bar unexpectedly switches to a Light appearance during/after a view transition while the device/app is in Dark Mode. This seems correlated with applying listStyle(.plain) to a List. Removing .plain prevents the issue, but my app’s layout requires it.
Sample code:
import SwiftUI
@main
struct iOS26NavigationTitleSampleApp: App {
var body: some Scene {
WindowGroup {
NavigationStack {
ContentView()
.navigationTitle("Root")
.navigationBarTitleDisplayMode(.inline)
}
}
}
}
struct ContentView: View {
var body: some View {
VStack {
NavigationLink {
ListView()
} label: {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
}
}
.padding()
.toolbar {
ToolbarItemGroup(placement: .navigation) {
Button("Test") {
}
Button("Test2") {
}
}
}
}
}
struct ListView: View {
var items: [Int] = Array(0..<100)
var body: some View {
List {
ForEach(items.indices, id: \.self) { idx in
cell(items[idx])
}
}
.listStyle(.plain)
.toolbar {
ToolbarItemGroup(placement: .navigation) {
Button("Test") {
}
Button("Test2") {
}
}
}
.navigationTitle("TTT")
}
private func cell(_ item: Int) -> some View {
Text("\(item)")
}
}
Steps to Reproduce:
Set the device to Dark Mode.
Launch the sample app. → The root view’s navigation bar is in Dark appearance (as expected).
Tap “Hello World” to navigate. → On the destination view, the navigation bar becomes Light.
Navigate back to the root view. → The root view’s navigation bar now also remains Light.
Expected Result
The navigation bar should consistently retain the Dark appearance throughout navigation.
Notes
Removing listStyle(.plain) stops the issue (navigation bar stays Dark).
Simulator: Could not reproduce on iOS Simulator.
Devices: Reproducible on physical device.
Environment
Device: iPhone 15 Plus
OS: iOS 26 (23A341)
Xcode: 26.0 (17A324)
I've been testing my app on iOS 17 Public Beta and noticed a bug where the FocusState always returns nil depending on the combination of Views.
This issue did not occur on iOS 16 and earlier.
Below is the code where FocusState does not work.
As far as I've checked, the issue only occurs in the case below. Does anyone have a workaround?
Test environment:
Xcode Version 15.0 (15A240d)
iOS 17.0(21A329) (iPhone)
@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
ContentView() ///<-- 1
}
}
}
struct ContentView: View {
@State var isShowingCover = false
var body: some View {
Button("Show") {
isShowingCover = true
}
.fullScreenCover(isPresented: $isShowingCover) {
NavigationStack { ///<-- 2
SheetView()
}
}
}
}
struct SheetView: View {
@State private var texts: [String] = [
"file",
"folder",
]
@FocusState var focusing: Int?
var body: some View {
VStack {
Text("focusing: \(String(describing: focusing))")
List { ///<-- 3
TextFields(texts: $texts, focusing: $focusing)
}
Button(">") {
// FocusState always becomes nil in iOS 17
if let focusing { self.focusing = (focusing + 1) % texts.count }
else { self.focusing = 0 }
}
}
}
}
public struct TextFields: View {
@Binding var texts: [String]
var focusing: FocusState<Int?>.Binding
public var body: some View {
HStack {
ForEach(texts.indices, id: \.self) { idx in
TextField("", text: $texts[idx])
.focused(focusing, equals: idx)
.underline(idx == focusing.wrappedValue)
}
}
}
}
Interestingly, removing the NavigationStack within fullScreenCover makes FocusState work as expected. (2)
Also, if the ContentView in WindowGroup is changed to NavigationStack { SheetView() } (1) or the List (3) is removed, FocusState still works as expected.
/// 1
@main
struct MultilineFieldSampleApp: App {
var body: some Scene {
WindowGroup {
// ContentView()
NavigationStack {
SheetView() // FocusState works.
}
}
}
}
///2
struct ContentView: View {
@State var isShowingCover = false
var body: some View {
Button("Show") {
isShowingCover = true
}
.fullScreenCover(isPresented: $isShowingCover) {
// NavigationStack {
SheetView() // Also, FocusState works.
// }
}
}
}
/// 3
struct SheetView: View {
// ...
var body: some View {
VStack {
Text("focusing: \(String(describing: focusing))")
// List {
TextFields(texts: $texts, focusing: $focusing) // FocusState works.
// }
Button(">") {
if let focusing { self.focusing = (focusing + 1) % texts.count }
else { self.focusing = 0 }
}
}
}
}
This is a report of an issue that appears to be a regression regarding NavigationStack.
I have been aware of an issue where views are being automatically popped within NavigationView / NavigationStack since iOS 15, and it seems to be reoccurring in iOS 18.0 beta2.
Below is the reproducible code. Additionally, in my environment, this problem does not occur iOS 18 simulator, but it does happen on an iPhone XS Max(real device) with iOS 18 beta 2.
Environment:
Xcode: Version 16.0 beta (16A5171c)
iOS: 18.0 (22A5297f)
iPhone: XS Max (real device)
import SwiftUI
@main
struct iOS16_4NavigationSample2App: App {
var body: some Scene {
WindowGroup {
NavigationStack {
NavigationLink {
ContentView()
} label: {
Text("Content")
}
}
}
}
}
enum Kind { case none, a, b, c }
struct Value: Hashable, Identifiable {
let id: UUID = UUID()
var num: Int
}
@MainActor
class ContentModel: ObservableObject {
@Published var kind: Kind = .a
@Published var vals: [Value] = {
return (1...5).map { Value(num: $0) }
}()
init() {}
}
struct ContentView: View {
@StateObject private var model = ContentModel()
@State private var selectedData: Value?
@State private var isShowingSubView = false
@Environment(\.dismiss) private var dismiss
init() {
}
var body: some View {
if #available(iOS 16.0, *) {
List(selection: $selectedData) {
ForEach(model.vals) { val in
NavigationLink(value: val) {
Text("\(val.num)")
}
}
}
.navigationDestination(isPresented: .init(get: {
selectedData != nil
}, set: { newValue in
if !newValue && selectedData != nil {
selectedData = nil
}
}), destination: {
SubView(kind: model.kind)
})
}
}
}
struct SubView: View {
init(kind: Kind) {
print("init(kind:)")
}
init() {
print("init")
}
var body: some View {
Text("Content")
}
}
This code was shared in a different issue [iOS 16.4 NavigationStack Behavior Unstable].