Post

Replies

Boosts

Views

Activity

Reply to Urgent fix needed: XCode 27.2 update does not allow distribution to app store (Unsupported SDK or Xcode version)
@Etresoft Yeah, I realize comments here are basically only seen by the person being "commented" to. Wish Apple would fix that, or just get rid of comments. Regarding your question, the reason is to get past the bugs in the prior release (for me, Device Hub was constantly crashing or misbehaving). I intentionally skip Xcode betas and RCs to avoid headaches like this. I didn’t realize there was a delay between a public Xcode release and when its builds are accepted in the App Store. It’s clearly not obvious, given the “me too” posts piling up on at least one Twitter thread I found. Having to watch yet another page when you’re desperate for bug fixes pushes the onus onto thousands of app devs. A simple "App Store Connect" status on the Download page would fix that, possilby like this:
2d
Reply to Confirmation dialog anchor for a ToolbarOverflowMenu item
I ran into the same issue and tried the UIKit route mentioned. A small UIViewControllerRepresentable bridge finds the hosting navigation item’s overflowPresentationSource and assigns it to the action sheet’s popoverPresentationController.sourceItem. That appears to give me the native morph out of—and back into—the overflow button on iOS 27. On iOS 26, where my implementation has no system overflow anchor, I fall back to a centered, arrowless confirmation with a small grow-and-fade animation. It’s working in my testing, but a direct SwiftUI equivalent would make this much simpler.
Topic: SwiftUI SubTopic:
iPhone Duo SwiftUI Q&A
1w
Reply to It says: "There are still screenshot uploads in progress." when submit a new build
If you have access to Helm, it’ll show the ID of the stuck screenshot. With help from an LLM, I traced that ID back to the specific screenshot, replaced it, and got past the error. A simpler workaround would be to just delete and re-upload all screenshots. Replacement worked for me, but YMMV. Given how many reports are in this thread, there may be more than one cause.
3w
Reply to Xcode 27.1 Device Hub crashes immediately when launched, even with no project open
Found a workaround! 🙌 Reinstalling Xcode didn't help, but clearing Device Hub's own app data did. Its bundle ID is com.apple.dt.Devices, so none of Xcode's prefs are touched. With Device Hub quit, run these in Terminal: mv ~/Library/Containers/com.apple.dt.Devices ~/Downloads/com.apple.dt.Devices-backup mv ~/Library/Preferences/com.apple.dt.Devices.plist ~/Downloads/ && killall cfprefsd Device Hub launches normally after that. Moving instead of deleting keeps a backup in Downloads in case you want to restore it. The crash is a layout loop in the split view, so my guess is that restored window state (window size or sidebar width) was the trigger. I had a Studio Display connected, which may be related.
Sep ’26
Reply to How can I get details on moderation removals?
Hello @DTS Engineer, thanks for confirming. 🙏 I did create this thread soon after it happened, so I guess it just got missed. At the time, my only theory was that the thread was removed because I linked to it from a related thread: https://developer.apple.com/forums/thread/722874 The reply and/or comment containing that link, was also removed, which is why I think the April cross-post was the cause. But from your helpful Quinn’s Top Ten DevForums Tips, it seems cross-posting is actually encouraged in that situation: If you find a bunch of old threads that might be related to your issue, don’t post full replies to all of them. Pick a lead thread and post your full reply there, then reply on the other threads with a link to the lead thread. Other than the cross-post, I’m at a loss for what might have caused the removal. I'd just like to understand what could trigger a moderation so I can avoid it in the future. Is there a published list of things that can result in moderation?
Sep ’26
Reply to iOS 26: Enabling "Reduce Transparency" causes a persistent white bar where the tab bar was hidden, blocking user interaction
I just ran into this issue in one of my apps. With Reduce Transparency enabled on iOS 26, hiding a SwiftUI tab bar could leave its opaque background and safe-area reservation behind. The good news is that it appears to be fixed in iOS 27 (24A5390f). But while iOS 27 is just around the corner, many people typically take a while to upgrade, so I wanted a workaround. I mainly work in SwiftUI, so got help from an LLM to build this UIKit bridge. It solves the issue in my app for both zoom and push/pop transitions (parent view has both grid and list layouts). WORKAROUND The app still uses SwiftUI as the source of truth for tab bar visibility. In simplified form: NavigationStack(path: $path) { // Root content and navigation destinations } .toolbarVisibility( path.count == 0 ? .automatic : .hidden, for: .tabBar ) I then apply the workaround to the destination where the tab bar should remain hidden: DetailView() .applyIOS26TabBarVisibilityWorkaround() The helper only reasserts the hidden state through UIKit. It intentionally does not show the tab bar during teardown, because that can conflict with another destination or an unchanged SwiftUI visibility preference. The parent-owned .toolbarVisibility modifier remains responsible for restoring the bar. import SwiftUI import UIKit extension View { /// Works around the iOS 26 tab-bar safe-area bug when Reduce Transparency is enabled. func applyIOS26TabBarVisibilityWorkaround() -> some View { background(IOS26TabBarVisibilityWorkaround()) } } /// Uses UIKit because SwiftUI can leave the iOS 26 tab-bar safe area behind after hiding the bar. private struct IOS26TabBarVisibilityWorkaround: UIViewControllerRepresentable { func makeUIViewController(context: Context) -> Controller { Controller() } func updateUIViewController(_ uiViewController: Controller, context: Context) { uiViewController.hideTabBar() } static func dismantleUIViewController( _ uiViewController: Controller, coordinator: () ) { uiViewController.stopApplyingWorkaround() } final class Controller: UIViewController { private weak var trackedTabBarController: UITabBarController? private var shouldApplyWorkaround = false override func loadView() { let view = UIView() view.backgroundColor = .clear view.isUserInteractionEnabled = false self.view = view } func hideTabBar() { shouldApplyWorkaround = true applyHiddenTabBarVisibility() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) applyHiddenTabBarVisibility() } override func didMove(toParent parent: UIViewController?) { super.didMove(toParent: parent) guard parent != nil else { return } applyHiddenTabBarVisibility() } func stopApplyingWorkaround() { shouldApplyWorkaround = false trackedTabBarController = nil } private func applyHiddenTabBarVisibility() { guard shouldApplyWorkaround, parent != nil else { return } guard #available(iOS 26.0, *) else { return } if #available(iOS 27.0, *) { return } guard let tabBarController = resolveTabBarController() else { return } trackedTabBarController = tabBarController // Deliberately call this even if isTabBarHidden is already true. // Reasserting the state is what corrects the stale iOS 26 layout. tabBarController.setTabBarHidden(true, animated: false) } private func resolveTabBarController() -> UITabBarController? { if let tabBarController { return tabBarController } if let tabBarController = parent?.tabBarController { return tabBarController } var ancestor = parent while let current = ancestor { if let tabBarController = current as? UITabBarController { return tabBarController } ancestor = current.parent } var responder: UIResponder? = viewIfLoaded while let current = responder { if let tabBarController = current as? UITabBarController { return tabBarController } responder = current.next } return trackedTabBarController } } } I can’t say this is the cleanest solution, but it fixes the issue for me while leaving the normal SwiftUI navigation transitions intact. SCREENSHOTS And here's the resulting detail view before and after the workaround on iOS 26:
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Aug ’26
Reply to SwiftUI Button with Image view label has smaller hit target
This is still an issue in iOS 27 (24A5390f). In my demo video, I used 1.square.fill, 2.square.fill, etc., but those are fairly large, square SF Symbols, so they don’t really show how small the hit target can be. This is much more problematic with “thin” icons like ellipsis. Declaring the button with Label avoids the small hit-target issue, but then it runs into the TipKit bug where tips won’t display for a Menu declared that way: https://developer.apple.com/forums/thread/804587 So it’s a catch-22: use Image and get a tiny hit target, or use Label and lose the tip.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Jul ’26
Reply to Tab bar animates from first tab to restored selection at launch with .tabBarMinimizeBehavior(.onScrollDown)
A native-only workaround is to start the TabView with minimization off, then switch to .onScrollDown after its initial presentation. In my testing, this lets the restored selection settle before minimization is applied, preventing the animation from the first tab to the restored tab. The tab bar then minimizes normally after the one-second delay. The tradeoff is that scroll-driven minimization is unavailable during that first second. Many of Apple’s first-party iPhone apps restore the previously selected tab at launch while also supporting tab bar minimization, so this shouldn’t require an app-level workaround. Workaround struct ContentView: View { @AppStorage("selectedGenericTab") private var selectedTab: AppTab = .three @State private var minimizeBehavior: TabBarMinimizeBehavior = .never var body: some View { TabView(selection: $selectedTab) { // Tabs… } .tabBarMinimizeBehavior(minimizeBehavior) .task { guard minimizeBehavior == .never else { return } do { try await Task.sleep(for: .seconds(1)) } catch { return } minimizeBehavior = .onScrollDown } } }
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Jul ’26
Reply to "Unsupported SDK or Xcode version" upload error with Xcode 27.2 (27B52) release
It was finally accepted! 🙌 And this page doesn't seem to have changed: https://developer.apple.com/help/app-store-connect/release-notes/ @**DTS Engineer** If this delay is typical, it’d be great not to have to watch two pages to know when it’s safe to update. Could the App Store Connect status be added to the Xcode download entry, like this?
Replies
Boosts
Views
Activity
2d
Reply to Urgent fix needed: XCode 27.2 update does not allow distribution to app store (Unsupported SDK or Xcode version)
@Etresoft Yeah, I realize comments here are basically only seen by the person being "commented" to. Wish Apple would fix that, or just get rid of comments. Regarding your question, the reason is to get past the bugs in the prior release (for me, Device Hub was constantly crashing or misbehaving). I intentionally skip Xcode betas and RCs to avoid headaches like this. I didn’t realize there was a delay between a public Xcode release and when its builds are accepted in the App Store. It’s clearly not obvious, given the “me too” posts piling up on at least one Twitter thread I found. Having to watch yet another page when you’re desperate for bug fixes pushes the onus onto thousands of app devs. A simple "App Store Connect" status on the Download page would fix that, possilby like this:
Replies
Boosts
Views
Activity
2d
Reply to Confirmation dialog anchor for a ToolbarOverflowMenu item
I ran into the same issue and tried the UIKit route mentioned. A small UIViewControllerRepresentable bridge finds the hosting navigation item’s overflowPresentationSource and assigns it to the action sheet’s popoverPresentationController.sourceItem. That appears to give me the native morph out of—and back into—the overflow button on iOS 27. On iOS 26, where my implementation has no system overflow anchor, I fall back to a centered, arrowless confirmation with a small grow-and-fade animation. It’s working in my testing, but a direct SwiftUI equivalent would make this much simpler.
Topic: SwiftUI SubTopic:
iPhone Duo SwiftUI Q&A
Replies
Boosts
Views
Activity
1w
Reply to It says: "There are still screenshot uploads in progress." when submit a new build
If you have access to Helm, it’ll show the ID of the stuck screenshot. With help from an LLM, I traced that ID back to the specific screenshot, replaced it, and got past the error. A simpler workaround would be to just delete and re-upload all screenshots. Replacement worked for me, but YMMV. Given how many reports are in this thread, there may be more than one cause.
Replies
Boosts
Views
Activity
3w
Reply to Xcode 27.1 Device Hub crashes immediately when launched, even with no project open
Found a workaround! 🙌 Reinstalling Xcode didn't help, but clearing Device Hub's own app data did. Its bundle ID is com.apple.dt.Devices, so none of Xcode's prefs are touched. With Device Hub quit, run these in Terminal: mv ~/Library/Containers/com.apple.dt.Devices ~/Downloads/com.apple.dt.Devices-backup mv ~/Library/Preferences/com.apple.dt.Devices.plist ~/Downloads/ && killall cfprefsd Device Hub launches normally after that. Moving instead of deleting keeps a backup in Downloads in case you want to restore it. The crash is a layout loop in the split view, so my guess is that restored window state (window size or sidebar width) was the trigger. I had a Studio Display connected, which may be related.
Replies
Boosts
Views
Activity
Sep ’26
Reply to How can I get details on moderation removals?
Hello @DTS Engineer, thanks for confirming. 🙏 I did create this thread soon after it happened, so I guess it just got missed. At the time, my only theory was that the thread was removed because I linked to it from a related thread: https://developer.apple.com/forums/thread/722874 The reply and/or comment containing that link, was also removed, which is why I think the April cross-post was the cause. But from your helpful Quinn’s Top Ten DevForums Tips, it seems cross-posting is actually encouraged in that situation: If you find a bunch of old threads that might be related to your issue, don’t post full replies to all of them. Pick a lead thread and post your full reply there, then reply on the other threads with a link to the lead thread. Other than the cross-post, I’m at a loss for what might have caused the removal. I'd just like to understand what could trigger a moderation so I can avoid it in the future. Is there a published list of things that can result in moderation?
Replies
Boosts
Views
Activity
Sep ’26
Reply to iOS 26: Enabling "Reduce Transparency" causes a persistent white bar where the tab bar was hidden, blocking user interaction
I just ran into this issue in one of my apps. With Reduce Transparency enabled on iOS 26, hiding a SwiftUI tab bar could leave its opaque background and safe-area reservation behind. The good news is that it appears to be fixed in iOS 27 (24A5390f). But while iOS 27 is just around the corner, many people typically take a while to upgrade, so I wanted a workaround. I mainly work in SwiftUI, so got help from an LLM to build this UIKit bridge. It solves the issue in my app for both zoom and push/pop transitions (parent view has both grid and list layouts). WORKAROUND The app still uses SwiftUI as the source of truth for tab bar visibility. In simplified form: NavigationStack(path: $path) { // Root content and navigation destinations } .toolbarVisibility( path.count == 0 ? .automatic : .hidden, for: .tabBar ) I then apply the workaround to the destination where the tab bar should remain hidden: DetailView() .applyIOS26TabBarVisibilityWorkaround() The helper only reasserts the hidden state through UIKit. It intentionally does not show the tab bar during teardown, because that can conflict with another destination or an unchanged SwiftUI visibility preference. The parent-owned .toolbarVisibility modifier remains responsible for restoring the bar. import SwiftUI import UIKit extension View { /// Works around the iOS 26 tab-bar safe-area bug when Reduce Transparency is enabled. func applyIOS26TabBarVisibilityWorkaround() -> some View { background(IOS26TabBarVisibilityWorkaround()) } } /// Uses UIKit because SwiftUI can leave the iOS 26 tab-bar safe area behind after hiding the bar. private struct IOS26TabBarVisibilityWorkaround: UIViewControllerRepresentable { func makeUIViewController(context: Context) -> Controller { Controller() } func updateUIViewController(_ uiViewController: Controller, context: Context) { uiViewController.hideTabBar() } static func dismantleUIViewController( _ uiViewController: Controller, coordinator: () ) { uiViewController.stopApplyingWorkaround() } final class Controller: UIViewController { private weak var trackedTabBarController: UITabBarController? private var shouldApplyWorkaround = false override func loadView() { let view = UIView() view.backgroundColor = .clear view.isUserInteractionEnabled = false self.view = view } func hideTabBar() { shouldApplyWorkaround = true applyHiddenTabBarVisibility() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) applyHiddenTabBarVisibility() } override func didMove(toParent parent: UIViewController?) { super.didMove(toParent: parent) guard parent != nil else { return } applyHiddenTabBarVisibility() } func stopApplyingWorkaround() { shouldApplyWorkaround = false trackedTabBarController = nil } private func applyHiddenTabBarVisibility() { guard shouldApplyWorkaround, parent != nil else { return } guard #available(iOS 26.0, *) else { return } if #available(iOS 27.0, *) { return } guard let tabBarController = resolveTabBarController() else { return } trackedTabBarController = tabBarController // Deliberately call this even if isTabBarHidden is already true. // Reasserting the state is what corrects the stale iOS 26 layout. tabBarController.setTabBarHidden(true, animated: false) } private func resolveTabBarController() -> UITabBarController? { if let tabBarController { return tabBarController } if let tabBarController = parent?.tabBarController { return tabBarController } var ancestor = parent while let current = ancestor { if let tabBarController = current as? UITabBarController { return tabBarController } ancestor = current.parent } var responder: UIResponder? = viewIfLoaded while let current = responder { if let tabBarController = current as? UITabBarController { return tabBarController } responder = current.next } return trackedTabBarController } } } I can’t say this is the cleanest solution, but it fixes the issue for me while leaving the normal SwiftUI navigation transitions intact. SCREENSHOTS And here's the resulting detail view before and after the workaround on iOS 26:
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Aug ’26
Reply to SwiftUI Button with Image view label has smaller hit target
This is still an issue in iOS 27 (24A5390f). In my demo video, I used 1.square.fill, 2.square.fill, etc., but those are fairly large, square SF Symbols, so they don’t really show how small the hit target can be. This is much more problematic with “thin” icons like ellipsis. Declaring the button with Label avoids the small hit-target issue, but then it runs into the TipKit bug where tips won’t display for a Menu declared that way: https://developer.apple.com/forums/thread/804587 So it’s a catch-22: use Image and get a tiny hit target, or use Label and lose the tip.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Jul ’26
Reply to Tab bar animates from first tab to restored selection at launch with .tabBarMinimizeBehavior(.onScrollDown)
A native-only workaround is to start the TabView with minimization off, then switch to .onScrollDown after its initial presentation. In my testing, this lets the restored selection settle before minimization is applied, preventing the animation from the first tab to the restored tab. The tab bar then minimizes normally after the one-second delay. The tradeoff is that scroll-driven minimization is unavailable during that first second. Many of Apple’s first-party iPhone apps restore the previously selected tab at launch while also supporting tab bar minimization, so this shouldn’t require an app-level workaround. Workaround struct ContentView: View { @AppStorage("selectedGenericTab") private var selectedTab: AppTab = .three @State private var minimizeBehavior: TabBarMinimizeBehavior = .never var body: some View { TabView(selection: $selectedTab) { // Tabs… } .tabBarMinimizeBehavior(minimizeBehavior) .task { guard minimizeBehavior == .never else { return } do { try await Task.sleep(for: .seconds(1)) } catch { return } minimizeBehavior = .onScrollDown } } }
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Jul ’26