Explore the various UI frameworks available for building app interfaces. Discuss the use cases for different frameworks, share best practices, and get help with specific framework-related questions.

All subtopics
Posts under UI Frameworks topic

Post

Replies

Boosts

Views

Activity

NSDocument disregards save panel!
In a previous post entitled “Save fails after Save As” I described a strange problem involving the Save and Save As operations in a macOS app I wrote: see https://developer.apple.com/forums/thread/779755. Since that posting (unanswered up to now) I tried various modifications of my app, in order better to understand the problem. Now, at the time of that posting I was using a version of the app that attempted — clumsily and incompletely — to circumvent the problem. Since then I decided to eliminate from my app this unsuccessful workaround. My app is called Goperfekt (it’s in the App Store) and is meant for macOS 11 to 15. I recently created a “bare bones” version of the app: this bare-bones version is called Goperf and contains the bare minimum necessary to save and open files of the exact same two file types as in Goperfekt, namely gop (an exported type that conforms to public.data), sgf (an imported type that conforms to public.text). Goperf and Goperfekt both use dataAfType:error: as their writing method. (Yes, Objective-C… but I’ve been working on that app on and off for nearly twenty years and when Swift came out my Obj-C project was already too advanced…) The problem is the following. In Goperfekt under macOS 15 the Save and Save As operations do not work as they should (see description below). In Goperfekt under macOS 12 and 11 the Save and Save As operations work perfectly, just as they should. (Unfortunately I do not have machines running macOS 14 or 13 at the moment.) Goperf, the bare-bones version, on the other hand, works perfectly in all three versions of macOS that I have (11, 12, 15). Here is a description of the problem with Goperfekt under macOS 15. The precise app behavior described below presupposes that the user has activated the option System Settings/Desktop & Dock/Windows/Ask to keep changes when closing documents. If you deactivate this option, the app misbehaves similarly, though somewhat differently. First three important facts (Goperfekt and Goperf in macOS 11, 12, 15): I can open an already existing gop file, modify the document, and save it in that gop file, or save it as another gop file, without any problem. I can also open an already existing sgf file, modify the document, and save it in that sgf file, or save it as another sgf file, without any problem. I can also save a new document as a gop file. BUT in Goperfekt in macOS 15 it is possible neither to save a new document as an sgf file, nor to open a gop file and save it as an sgf file, IN CASES 1 AND 2 the parameter typeName received by dataOfType:error: is not “com.red-bean.sgf” (corresponding to the imported sgf extension) as it should, but “com.florrain.goperfekt-document” (corresponding to the exported gop extension). The result is a file with the sgf extension (such as “A.sgf”, as specified in the save panel), but this file is really a gop file with the wrong extension! You can see that by asking Goperfekt to open “A.sgf” (which will generate an alert), or by opening "A.sgf” in TextEdit. You can also add .gop to the name “A.sgf” and then ask Goperfekt to open “A.sgf.gop”, which it will do without a problem. Nor is it possible to open an sgf file and save it as a gop file. Here the parameter typeName received by dataOfType:error: is not “com.florrain.goperfekt-document” (the exported type) as it should, but “com.red-bean.sgf” (the imported type). The result is a file with the gop extension (such as “A.gop”, as specified in the save panel), but this file is really an sgf file with the wrong extension! You can see that by asking Goperfekt to open “A.gop” (which will generate an alert), or by opening "A.gop” in TextEdit. You can also add .sgf to the name “A.gop” and then ask Goperfekt to open “A.gop.sgf”, which it will do without a problem. Somewhere behind the scenes (only in Goperfekt on macOS 15) NSDocument disregards what was specified by the user in the save panel and sends to dataAfType:error: the wrong file type! Why on Earth? If, after having created a file “A.sgf” that is really a gop file, I change something in the document and try to save this change in “A.sgf”, the system displays a somewhat puzzling alert, and diagnostic messages appear in the Xcode console. According to the circumstances, these messages can contain such puzzling labels as NSFileSandboxingRequestRelatedItemExtension or NSFileCoordinator. Similarly for a file “A.gop” that is really an sgf file. Conclusion: search as I may, I could not find what makes Goperfekt misbehave in macOS 15 but not in macOS 11 or 12, while the bare-bones Goperf behaves perfectly in all three versions.
Topic: UI Frameworks SubTopic: AppKit Tags:
3
0
173
Jun ’25
iOS app bottom and top layout not working
Hello. I have a projet due in a few days and there is smth wrong with my code. It has some kind of "border" on top and on the bottom, and it really interferes with my app. At first thought it was a simulator problem so tried on a physical iphone (13pr) and the border was still there. Already tried to use .ignoreSafeArea but still doesnt work. So I came here. Please help me, thanks! Attached below is the screenshot of the "border" This is my code for Contentview ContentView.swift Please help asap, as the project is due i a few days. Thanks!
Topic: UI Frameworks SubTopic: SwiftUI
2
0
125
Jun ’25
Fatal error: Duplicate keys of type 'AnyHashable2' were found in a Dictionary.
I have encountered the following error and reduced my code to the minimum necessary to reliably reproduce this error. Fatal error: Duplicate keys of type 'AnyHashable2' were found in a >Dictionary. This usually means either that the type violates Hashable's >requirements, or that members of such a dictionary were mutated after insertion. It occurs when instances of a swiftdata model are inserted (the error occurs reliably when inserting five or more instances. Fewer insertions seems to make the error either more rare or go away entirely) and a Picker with .menu pickerStyle is present. Any of the following changes prevents the error from occuring: adding id = UUID() to the Item class removing .tag(item) in the picker content using any pickerStyle other than .menu using an observable class instead of a swiftdata class I would greatly appreciate if anyone knows what exactly is going on here. Tested using XCode Version 16.4 (16F6), iPhone 16 Pro iOS 18.5 Simulator and iPhone 15 Pro iOS 18.5 real device. import SwiftUI import SwiftData @Model class Item { var name: String init(name: String) { self.name = name } } struct DuplicateKeysErrorView: View { @Environment(\.modelContext) private var modelContext @Query(sort: \Item.name) private var items: [Item] @State var selection: Item? = nil var body: some View { List { Picker("Picker", selection: $selection) { Text("Nil").tag(nil as Item?) ForEach(items) { item in Text(item.name).tag(item) } } .pickerStyle(.menu) Button("Add 5 items") { modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) } } .onAppear { try! modelContext.delete(model: Item.self) } } } #Preview { DuplicateKeysErrorView() .modelContainer(for: Item.self) }
1
0
188
Jun ’25
Issue with Animations Blocking Taps in UIView Toasts (SwiftUI + Separate UIWindow)
Edit: Well this is embarassing. It looks like I didn't research this thoroughly enough, animations block UIVIew tap events. I found a solution by using DispatchQueue I ran into an unexpected issue when presenting a UIView-based toast inside a separate UIWindow in a SwiftUI app. Specifically, when animations are applied to the toast view (UIToastView), the tap gesture no longer works. To help identify the root cause, I created a minimal reproducible example (MRE) with under 500 lines of code, demonstrating the behavior: Demo GIF: Screen Recording Code Repo: ToastDemo What I Tried: Using a separate UIWindow to present the toast overlay. Adding a tap gesture directly to the UIView. Referencing related solutions: A Blog Post explaining UIWindow usage in SwiftUI - https://www.fivestars.blog/articles/swiftui-windows (Sorry, Apple Dev Forum will not allow a link to this) A Stack Overflow thread on handling touch events in multiple windows. Problem Summary: When animations are involved (fade in, slide up), taps on the toast are not recognized. Without animations, taps work as expected. UIWindow setup seems correct, so I’m wondering if animation effects are interfering with event propagation. I could potentially work around this by restructuring the touch handling, but I'd love insight from the community on why this happens, or if there’s a cleaner fix. Edit: Well this is embarassing. It looks like I didn't research this thoroughly enough, animations block UIVIew tap events. I found a solution by using DispatchQueue
2
0
132
Jun ’25
Can SwiftUI View Receive a Call When Window Will Close?
I have an NSStatusBar application. This is my first in SwiftUI. And I need to know when the window is closed so that I can disable some of menu commands. I can use NSWindowDelegate with AppDelegate as follows. import SwiftUI @main struct SomeApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @StateObject private var menuViewModel = MenuViewModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(menuViewModel) } } } class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { private var menuViewModel = MenuViewModel() func applicationDidFinishLaunching(_ notification: Notification) { if let window = NSApplication.shared.windows.first { window.setIsVisible(false) window.delegate = self } } func windowWillClose(_ notification: Notification) { menuViewModel.windowClosed = true } } When the window will close, MenuViewModel (ObservableObject) will receive a call, which I want my ContentView to receive. But, so far, it won't. import SwiftUI struct ContentView: View { var body: some View { ZStack { ... ... } .onReceive(statusBarViewModel.$windowClosed) { result in // never called... } } } Can a SwiftUI View receive a call somehow when its window closes? Muchos thankos.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
3
1
654
Jun ’25
iPadOS26: UITabBar doesn't switch selected state
With iPadOS26, if I create a UITabBar, and use that to switch between views, the selected state never updates. I created this simple UIViewController to demonstrate the issue: class SimpleTabBarController: UIViewController, UITabBarDelegate { let tabBar = UITabBar() let redItem = UITabBarItem(title: "Red", image: nil, tag: 0) let blueItem = UITabBarItem(title: "Blue", image: nil, tag: 1) override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white tabBar.items = [redItem, blueItem] tabBar.selectedItem = redItem tabBar.delegate = self tabBar.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tabBar) NSLayoutConstraint.activate([ tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor), tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor), tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) updateBackground(for: redItem) } func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { updateBackground(for: item) } private func updateBackground(for item: UITabBarItem) { switch item.tag { case 0: view.backgroundColor = .systemRed case 1: view.backgroundColor = .systemBlue default: view.backgroundColor = .white } } } The tabBar didSelect item method is called, and the background color gets updated as expected, but the selected state of the UITabBar stays the same. I files a feedback for a related issue: FB17841678
1
0
311
Jun ’25
How to achieve a pure backdrop blur effect without predefined tint color in SwiftUI / UIKit?
Hi everyone, I’m currently trying to create a pure backdrop blur effect in my iOS app (SwiftUI / UIKit), similar to the backdrop-filter: blur(20px) effect in CSS. My goal is simple: • Apply a Gaussian blur (radius ~20px) to the background content • Overlay a semi-transparent black layer (opacity 0.3) • Avoid any predefined color tint from UIBlurEffect or .ultraThinMaterial, etc. However, every method I’ve tried so far (e.g., .ultraThinMaterial, UIBlurEffect(style:)) always introduces a built-in tint, which makes the result look gray or washed out. Even when layering a black color with opacity 0.3 over .ultraThinMaterial, it doesn’t give the clean, transparent-black + blur look I want. What I’m looking for: • A clean 20px blur effect (like CIGaussianBlur) • No color shift/tint added by default • A layer of black at 30% opacity on top of the blur • Ideally works live (not a static snapshot blur) Has anyone achieved something like this in UIKit or SwiftUI? Would really appreciate any insights, workarounds, or libraries that can help. Thanks in advance! Ben
3
0
221
Jun ’25
Live Activity fails to start with "unsupportedTarget" error on iOS 18 beta
Hi all, I’m developing a timer app with Live Activity support. On iOS 18.5 (iPhone 14 Pro Max), I cannot get Live Activity to start. When I call Activity.request(...) in my main app, it throws an unsupportedTarget error, and nothing appears on the Lock Screen or Dynamic Island. What I’ve done: Widget Extension Info.plist: <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.widgetkit-extension</string> </dict> <key>NSSupportsLiveActivities</key> <true/> <key>NSSupportsLiveActivitiesFrequentUpdates</key> <true/> Live Activity UI: Implemented with ActivityConfiguration(for: xxx_Clock_liveactivitiesAttributes.self) and Dynamic Island support. App Group: Both main app and extension use the same App Group, and it’s enabled in Apple Developer Center and Xcode. Tested on: iPhone 14 Pro Max, iOS 18.5 (official release) Xcode [your version] (I have not tested on iOS 17.x, so I am not sure if this issue is specific to iOS 18.5.) What I’ve tried: Cleaned build folder, deleted Derived Data, uninstalled and reinstalled app. Rebooted device. Double-checked all Info.plist and entitlements settings. Tried creating a new Widget Extension from scratch. Problem: Activity.request always throws unsupportedTarget. No Live Activity appears on Lock Screen or Dynamic Island. No other errors or crashes. Questions: Has anyone encountered this issue on iOS 18.5? Are there any new requirements or changes for Live Activity in iOS 18.5? Any suggestions or workarounds to make Live Activity work? Any help or suggestions would be greatly appreciated!
2
0
245
Jun ’25
Shouldn't SwiftUI only re-renders if var is used on view?
Why is the SwiftUI re-render the UI event if the view does not use the counter like in the example bellow...shouldn't SwiftUI framework be smart enough to detect that?? import SwiftUI class ViewModel: ObservableObject { @Published var counter: Int = 0 // Not used in the view's body @Published var displayText: String = "Hello" // Used in the view's body } struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.displayText) // Depends on displayText } .onChange(of: viewModel.counter) { newValue in print("Counter changed to: \(newValue)") } } } Is there any solution more elegant without using Publishers??
2
0
204
Jun ’25
App Clip links encoded as a QR Code do not load when scanned on an iPhone camera
Using an App Clip link encoded into a QR Code shows an error when scanning the encoded QR Code on an iPhone or iPad. After being scanned, the App Clip's banner is visible, but a message says: "App Clip Unavailable". Accessing the same App Clip URL via Safari works as expected. I've filed a feedback with more details and screenshots of the issue here: FB17891015 Thanks!
2
4
286
Jun ’25
How does Appintent independently display icons
There are hundreds of functions in my project that require creating shortcuts, but AppShortcutsProvider only supports up to 10 AppShortcut declarations, so I used over 100 AppIntents for users to manually add shortcuts (I did not add them to AppShortcutsProvider); The problem now is that I hope all the AppIntents I declare have specific names and function icons. I have tried my best to configure AppIntents with the query document, but the default display in the shortcut app is the icon of this application instead of the function icon I set. My code is as follows: struct ResizeImageIntent: AppIntent { static var title: LocalizedStringResource = "修改图片尺寸" static var description: IntentDescription = IntentDescription("快速打开修改图片尺寸功能") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://resizeimage") { await UIApplication.shared.open(url) } return .result() } } The following is the code with icon configuration added: struct VideoParseIntent: AppIntent { static var title: LocalizedStringResource = "万能解析" static var description: IntentDescription = IntentDescription("快速打开万能解析功能") static var openAppWhenRun: Bool = true // 修正:返回AppShortcut数组 static var appShortcuts: [AppShortcut] { [ AppShortcut( intent: VideoParseIntent(), phrases: ["使用万能解析"], systemImageName: "play.rectangle.on.rectangle" // 系统内置图标 ) ] } func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://videoparse") { await UIApplication.shared.open(url) } return .result() } }
Topic: UI Frameworks SubTopic: SwiftUI
1
0
129
Jun ’25
Charts - Exclude dates on x-axis
Hi! I'm building an app that uses Swift Charts to visualize stock market data, and I'm encountering a couple of issues. The stock API I’m using provides data only for the trading days when the market is open. The problem is that I need to skip over the missing dates (non-trading days) in the chart, but still keep the x-axis formatted correctly (e.g., group ticks by month). If I convert the dates to String to handle missing data, I lose the correct x-axis formatting, and the date labels become inaccurate among with its data. Here’s som of the code I’m using for parsing the dates and structuring the data: struct StockDataPoint: Identifiable, Decodable { var id: String { datetime } let datetime: String let close: String var date: Date { datetime.toDate() ?? Date() } var closePrice: Double { Double(close) ?? 0.0 } } extension String { func toDate() -> Date? { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(abbreviation: "UTC") formatter.dateFormat = self.count == 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss" return formatter.date(from: self) } } And: LineMark( x: .value("Datum", point.date), y: .value("Pris", point.closePrice) ) .interpolationMethod(.cardinal) .lineStyle(StrokeStyle(lineWidth: 0.7)) .foregroundStyle(.linearGradient(colors: [.blue, .yellow, .orange], startPoint: .bottomTrailing, endPoint: .topLeading)) .frame(height: 300) .background(Color.black.opacity(0.6)) .chartYScale( domain: ( (stockAPI.stockData.map { $0.closePrice }.min() ?? 0) * 0.98 ... (stockAPI.stockData.map { $0.closePrice }.max() ?? 100) * 1.02 ) ) .chartXAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } .chartYAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } What I need help with: Skipping missing dates on the x-axis and show correct data for corresponding days. Keeping the x-axis well formatted (grouped by month, accurate labels). Thanks in advance for any suggestions!
2
0
178
Jun ’25
How to display numbers as grid marks along axes for plotting in Swift Charts?
If you try to add a graph for a function in Apple Notes you can see that numbers marking coordinates are positioned along the axes (see screenshot 1). But when I am making my own plot view with Swift Charts I don't see that option. Marks for X axis are positioned at the bottom, and marks for Y axis are positioned to the right. I don't see an API that can configure them to be shown along the axes. Is there something that I am missing? Or is Apple just using some private API for that? I could make a custom overlay to display these marks, but then I will have to adjust them while zooming myself, which can be problematic.
1
0
235
Jun ’25
NSDocument disregards save panel!
In a previous post entitled “Save fails after Save As” I described a strange problem involving the Save and Save As operations in a macOS app I wrote: see https://developer.apple.com/forums/thread/779755. Since that posting (unanswered up to now) I tried various modifications of my app, in order better to understand the problem. Now, at the time of that posting I was using a version of the app that attempted — clumsily and incompletely — to circumvent the problem. Since then I decided to eliminate from my app this unsuccessful workaround. My app is called Goperfekt (it’s in the App Store) and is meant for macOS 11 to 15. I recently created a “bare bones” version of the app: this bare-bones version is called Goperf and contains the bare minimum necessary to save and open files of the exact same two file types as in Goperfekt, namely gop (an exported type that conforms to public.data), sgf (an imported type that conforms to public.text). Goperf and Goperfekt both use dataAfType:error: as their writing method. (Yes, Objective-C… but I’ve been working on that app on and off for nearly twenty years and when Swift came out my Obj-C project was already too advanced…) The problem is the following. In Goperfekt under macOS 15 the Save and Save As operations do not work as they should (see description below). In Goperfekt under macOS 12 and 11 the Save and Save As operations work perfectly, just as they should. (Unfortunately I do not have machines running macOS 14 or 13 at the moment.) Goperf, the bare-bones version, on the other hand, works perfectly in all three versions of macOS that I have (11, 12, 15). Here is a description of the problem with Goperfekt under macOS 15. The precise app behavior described below presupposes that the user has activated the option System Settings/Desktop & Dock/Windows/Ask to keep changes when closing documents. If you deactivate this option, the app misbehaves similarly, though somewhat differently. First three important facts (Goperfekt and Goperf in macOS 11, 12, 15): I can open an already existing gop file, modify the document, and save it in that gop file, or save it as another gop file, without any problem. I can also open an already existing sgf file, modify the document, and save it in that sgf file, or save it as another sgf file, without any problem. I can also save a new document as a gop file. BUT in Goperfekt in macOS 15 it is possible neither to save a new document as an sgf file, nor to open a gop file and save it as an sgf file, IN CASES 1 AND 2 the parameter typeName received by dataOfType:error: is not “com.red-bean.sgf” (corresponding to the imported sgf extension) as it should, but “com.florrain.goperfekt-document” (corresponding to the exported gop extension). The result is a file with the sgf extension (such as “A.sgf”, as specified in the save panel), but this file is really a gop file with the wrong extension! You can see that by asking Goperfekt to open “A.sgf” (which will generate an alert), or by opening "A.sgf” in TextEdit. You can also add .gop to the name “A.sgf” and then ask Goperfekt to open “A.sgf.gop”, which it will do without a problem. Nor is it possible to open an sgf file and save it as a gop file. Here the parameter typeName received by dataOfType:error: is not “com.florrain.goperfekt-document” (the exported type) as it should, but “com.red-bean.sgf” (the imported type). The result is a file with the gop extension (such as “A.gop”, as specified in the save panel), but this file is really an sgf file with the wrong extension! You can see that by asking Goperfekt to open “A.gop” (which will generate an alert), or by opening "A.gop” in TextEdit. You can also add .sgf to the name “A.gop” and then ask Goperfekt to open “A.gop.sgf”, which it will do without a problem. Somewhere behind the scenes (only in Goperfekt on macOS 15) NSDocument disregards what was specified by the user in the save panel and sends to dataAfType:error: the wrong file type! Why on Earth? If, after having created a file “A.sgf” that is really a gop file, I change something in the document and try to save this change in “A.sgf”, the system displays a somewhat puzzling alert, and diagnostic messages appear in the Xcode console. According to the circumstances, these messages can contain such puzzling labels as NSFileSandboxingRequestRelatedItemExtension or NSFileCoordinator. Similarly for a file “A.gop” that is really an sgf file. Conclusion: search as I may, I could not find what makes Goperfekt misbehave in macOS 15 but not in macOS 11 or 12, while the bare-bones Goperf behaves perfectly in all three versions.
Topic: UI Frameworks SubTopic: AppKit Tags:
Replies
3
Boosts
0
Views
173
Activity
Jun ’25
iOS app bottom and top layout not working
Hello. I have a projet due in a few days and there is smth wrong with my code. It has some kind of "border" on top and on the bottom, and it really interferes with my app. At first thought it was a simulator problem so tried on a physical iphone (13pr) and the border was still there. Already tried to use .ignoreSafeArea but still doesnt work. So I came here. Please help me, thanks! Attached below is the screenshot of the "border" This is my code for Contentview ContentView.swift Please help asap, as the project is due i a few days. Thanks!
Topic: UI Frameworks SubTopic: SwiftUI
Replies
2
Boosts
0
Views
125
Activity
Jun ’25
Advanced App Clip experience URL Status
Hello Team, We have Advanced App Clip Experiences live but we have add App Clip experience URL since long ago but status remains as Received and never changed to Published, can you please help us to fix this issue. Please see attached. Thanks
Replies
6
Boosts
0
Views
1.6k
Activity
Jun ’25
How to use `.focusedSceneObject()` with @Observable?
According to docs, .focusedObject() usage should be moved to .focusedValue() when migrating to @Observable, but there is no .focusedSceneValue() overload that accepts Observable like with .focusedValue(). So how are we supposed migrate .focusedSceneObject() to @Observable?
Replies
2
Boosts
1
Views
917
Activity
Jun ’25
Fatal error: Duplicate keys of type 'AnyHashable2' were found in a Dictionary.
I have encountered the following error and reduced my code to the minimum necessary to reliably reproduce this error. Fatal error: Duplicate keys of type 'AnyHashable2' were found in a >Dictionary. This usually means either that the type violates Hashable's >requirements, or that members of such a dictionary were mutated after insertion. It occurs when instances of a swiftdata model are inserted (the error occurs reliably when inserting five or more instances. Fewer insertions seems to make the error either more rare or go away entirely) and a Picker with .menu pickerStyle is present. Any of the following changes prevents the error from occuring: adding id = UUID() to the Item class removing .tag(item) in the picker content using any pickerStyle other than .menu using an observable class instead of a swiftdata class I would greatly appreciate if anyone knows what exactly is going on here. Tested using XCode Version 16.4 (16F6), iPhone 16 Pro iOS 18.5 Simulator and iPhone 15 Pro iOS 18.5 real device. import SwiftUI import SwiftData @Model class Item { var name: String init(name: String) { self.name = name } } struct DuplicateKeysErrorView: View { @Environment(\.modelContext) private var modelContext @Query(sort: \Item.name) private var items: [Item] @State var selection: Item? = nil var body: some View { List { Picker("Picker", selection: $selection) { Text("Nil").tag(nil as Item?) ForEach(items) { item in Text(item.name).tag(item) } } .pickerStyle(.menu) Button("Add 5 items") { modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) modelContext.insert(Item(name: UUID().uuidString)) } } .onAppear { try! modelContext.delete(model: Item.self) } } } #Preview { DuplicateKeysErrorView() .modelContainer(for: Item.self) }
Replies
1
Boosts
0
Views
188
Activity
Jun ’25
Issue with Animations Blocking Taps in UIView Toasts (SwiftUI + Separate UIWindow)
Edit: Well this is embarassing. It looks like I didn't research this thoroughly enough, animations block UIVIew tap events. I found a solution by using DispatchQueue I ran into an unexpected issue when presenting a UIView-based toast inside a separate UIWindow in a SwiftUI app. Specifically, when animations are applied to the toast view (UIToastView), the tap gesture no longer works. To help identify the root cause, I created a minimal reproducible example (MRE) with under 500 lines of code, demonstrating the behavior: Demo GIF: Screen Recording Code Repo: ToastDemo What I Tried: Using a separate UIWindow to present the toast overlay. Adding a tap gesture directly to the UIView. Referencing related solutions: A Blog Post explaining UIWindow usage in SwiftUI - https://www.fivestars.blog/articles/swiftui-windows (Sorry, Apple Dev Forum will not allow a link to this) A Stack Overflow thread on handling touch events in multiple windows. Problem Summary: When animations are involved (fade in, slide up), taps on the toast are not recognized. Without animations, taps work as expected. UIWindow setup seems correct, so I’m wondering if animation effects are interfering with event propagation. I could potentially work around this by restructuring the touch handling, but I'd love insight from the community on why this happens, or if there’s a cleaner fix. Edit: Well this is embarassing. It looks like I didn't research this thoroughly enough, animations block UIVIew tap events. I found a solution by using DispatchQueue
Replies
2
Boosts
0
Views
132
Activity
Jun ’25
Grid right to left
Hi, I’d like to display items in a grid from right to left. Like the image: Is this possible with a grid? What would be the best approach in terms of performance?
Replies
1
Boosts
0
Views
100
Activity
Jun ’25
Can SwiftUI View Receive a Call When Window Will Close?
I have an NSStatusBar application. This is my first in SwiftUI. And I need to know when the window is closed so that I can disable some of menu commands. I can use NSWindowDelegate with AppDelegate as follows. import SwiftUI @main struct SomeApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @StateObject private var menuViewModel = MenuViewModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(menuViewModel) } } } class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { private var menuViewModel = MenuViewModel() func applicationDidFinishLaunching(_ notification: Notification) { if let window = NSApplication.shared.windows.first { window.setIsVisible(false) window.delegate = self } } func windowWillClose(_ notification: Notification) { menuViewModel.windowClosed = true } } When the window will close, MenuViewModel (ObservableObject) will receive a call, which I want my ContentView to receive. But, so far, it won't. import SwiftUI struct ContentView: View { var body: some View { ZStack { ... ... } .onReceive(statusBarViewModel.$windowClosed) { result in // never called... } } } Can a SwiftUI View receive a call somehow when its window closes? Muchos thankos.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
3
Boosts
1
Views
654
Activity
Jun ’25
iPadOS26: UITabBar doesn't switch selected state
With iPadOS26, if I create a UITabBar, and use that to switch between views, the selected state never updates. I created this simple UIViewController to demonstrate the issue: class SimpleTabBarController: UIViewController, UITabBarDelegate { let tabBar = UITabBar() let redItem = UITabBarItem(title: "Red", image: nil, tag: 0) let blueItem = UITabBarItem(title: "Blue", image: nil, tag: 1) override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white tabBar.items = [redItem, blueItem] tabBar.selectedItem = redItem tabBar.delegate = self tabBar.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tabBar) NSLayoutConstraint.activate([ tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor), tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor), tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) updateBackground(for: redItem) } func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { updateBackground(for: item) } private func updateBackground(for item: UITabBarItem) { switch item.tag { case 0: view.backgroundColor = .systemRed case 1: view.backgroundColor = .systemBlue default: view.backgroundColor = .white } } } The tabBar didSelect item method is called, and the background color gets updated as expected, but the selected state of the UITabBar stays the same. I files a feedback for a related issue: FB17841678
Replies
1
Boosts
0
Views
311
Activity
Jun ’25
How to achieve a pure backdrop blur effect without predefined tint color in SwiftUI / UIKit?
Hi everyone, I’m currently trying to create a pure backdrop blur effect in my iOS app (SwiftUI / UIKit), similar to the backdrop-filter: blur(20px) effect in CSS. My goal is simple: • Apply a Gaussian blur (radius ~20px) to the background content • Overlay a semi-transparent black layer (opacity 0.3) • Avoid any predefined color tint from UIBlurEffect or .ultraThinMaterial, etc. However, every method I’ve tried so far (e.g., .ultraThinMaterial, UIBlurEffect(style:)) always introduces a built-in tint, which makes the result look gray or washed out. Even when layering a black color with opacity 0.3 over .ultraThinMaterial, it doesn’t give the clean, transparent-black + blur look I want. What I’m looking for: • A clean 20px blur effect (like CIGaussianBlur) • No color shift/tint added by default • A layer of black at 30% opacity on top of the blur • Ideally works live (not a static snapshot blur) Has anyone achieved something like this in UIKit or SwiftUI? Would really appreciate any insights, workarounds, or libraries that can help. Thanks in advance! Ben
Replies
3
Boosts
0
Views
221
Activity
Jun ’25
How to display such a window in a mixed space
I saw this demo on the website. Do you have the address for the demo? If not, how is the following image content implemented? Can you tell me which style of WindowGroup is used to create this custom window, and the buttons to move and close the window are located at the bottom of the menu bar. Thank you, thank [you]
Replies
1
Boosts
0
Views
138
Activity
Jun ’25
Live Activity fails to start with "unsupportedTarget" error on iOS 18 beta
Hi all, I’m developing a timer app with Live Activity support. On iOS 18.5 (iPhone 14 Pro Max), I cannot get Live Activity to start. When I call Activity.request(...) in my main app, it throws an unsupportedTarget error, and nothing appears on the Lock Screen or Dynamic Island. What I’ve done: Widget Extension Info.plist: <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.widgetkit-extension</string> </dict> <key>NSSupportsLiveActivities</key> <true/> <key>NSSupportsLiveActivitiesFrequentUpdates</key> <true/> Live Activity UI: Implemented with ActivityConfiguration(for: xxx_Clock_liveactivitiesAttributes.self) and Dynamic Island support. App Group: Both main app and extension use the same App Group, and it’s enabled in Apple Developer Center and Xcode. Tested on: iPhone 14 Pro Max, iOS 18.5 (official release) Xcode [your version] (I have not tested on iOS 17.x, so I am not sure if this issue is specific to iOS 18.5.) What I’ve tried: Cleaned build folder, deleted Derived Data, uninstalled and reinstalled app. Rebooted device. Double-checked all Info.plist and entitlements settings. Tried creating a new Widget Extension from scratch. Problem: Activity.request always throws unsupportedTarget. No Live Activity appears on Lock Screen or Dynamic Island. No other errors or crashes. Questions: Has anyone encountered this issue on iOS 18.5? Are there any new requirements or changes for Live Activity in iOS 18.5? Any suggestions or workarounds to make Live Activity work? Any help or suggestions would be greatly appreciated!
Replies
2
Boosts
0
Views
245
Activity
Jun ’25
Shouldn't SwiftUI only re-renders if var is used on view?
Why is the SwiftUI re-render the UI event if the view does not use the counter like in the example bellow...shouldn't SwiftUI framework be smart enough to detect that?? import SwiftUI class ViewModel: ObservableObject { @Published var counter: Int = 0 // Not used in the view's body @Published var displayText: String = "Hello" // Used in the view's body } struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.displayText) // Depends on displayText } .onChange(of: viewModel.counter) { newValue in print("Counter changed to: \(newValue)") } } } Is there any solution more elegant without using Publishers??
Replies
2
Boosts
0
Views
204
Activity
Jun ’25
iOS 26: How to achieve TabView effect like in the Find My app.
I noticed on the Find My app in the new iOS 26 beta that the TabView and the sheet seem to be part of the same view. When you collapse the sheet, the TabView is still visible, and you can swipe up to view the sheet again. Is there a way to recreate this effect? Preferably in SwiftUI, but UIKit works too.
Replies
1
Boosts
1
Views
287
Activity
Jun ’25
Xcode26.0 beta has a compilation error
The swift syntax compilation reported an error. as follows How should I be compatible
Replies
2
Boosts
0
Views
130
Activity
Jun ’25
App Clip links encoded as a QR Code do not load when scanned on an iPhone camera
Using an App Clip link encoded into a QR Code shows an error when scanning the encoded QR Code on an iPhone or iPad. After being scanned, the App Clip's banner is visible, but a message says: "App Clip Unavailable". Accessing the same App Clip URL via Safari works as expected. I've filed a feedback with more details and screenshots of the issue here: FB17891015 Thanks!
Replies
2
Boosts
4
Views
286
Activity
Jun ’25
Found a bug in ios26 UI on iphone 12
In keyboard shortcuts this buttons at the bottom are overlappin. Any one else?
Topic: UI Frameworks SubTopic: General
Replies
0
Boosts
0
Views
85
Activity
Jun ’25
How does Appintent independently display icons
There are hundreds of functions in my project that require creating shortcuts, but AppShortcutsProvider only supports up to 10 AppShortcut declarations, so I used over 100 AppIntents for users to manually add shortcuts (I did not add them to AppShortcutsProvider); The problem now is that I hope all the AppIntents I declare have specific names and function icons. I have tried my best to configure AppIntents with the query document, but the default display in the shortcut app is the icon of this application instead of the function icon I set. My code is as follows: struct ResizeImageIntent: AppIntent { static var title: LocalizedStringResource = "修改图片尺寸" static var description: IntentDescription = IntentDescription("快速打开修改图片尺寸功能") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://resizeimage") { await UIApplication.shared.open(url) } return .result() } } The following is the code with icon configuration added: struct VideoParseIntent: AppIntent { static var title: LocalizedStringResource = "万能解析" static var description: IntentDescription = IntentDescription("快速打开万能解析功能") static var openAppWhenRun: Bool = true // 修正:返回AppShortcut数组 static var appShortcuts: [AppShortcut] { [ AppShortcut( intent: VideoParseIntent(), phrases: ["使用万能解析"], systemImageName: "play.rectangle.on.rectangle" // 系统内置图标 ) ] } func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://videoparse") { await UIApplication.shared.open(url) } return .result() } }
Topic: UI Frameworks SubTopic: SwiftUI
Replies
1
Boosts
0
Views
129
Activity
Jun ’25
Charts - Exclude dates on x-axis
Hi! I'm building an app that uses Swift Charts to visualize stock market data, and I'm encountering a couple of issues. The stock API I’m using provides data only for the trading days when the market is open. The problem is that I need to skip over the missing dates (non-trading days) in the chart, but still keep the x-axis formatted correctly (e.g., group ticks by month). If I convert the dates to String to handle missing data, I lose the correct x-axis formatting, and the date labels become inaccurate among with its data. Here’s som of the code I’m using for parsing the dates and structuring the data: struct StockDataPoint: Identifiable, Decodable { var id: String { datetime } let datetime: String let close: String var date: Date { datetime.toDate() ?? Date() } var closePrice: Double { Double(close) ?? 0.0 } } extension String { func toDate() -> Date? { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(abbreviation: "UTC") formatter.dateFormat = self.count == 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss" return formatter.date(from: self) } } And: LineMark( x: .value("Datum", point.date), y: .value("Pris", point.closePrice) ) .interpolationMethod(.cardinal) .lineStyle(StrokeStyle(lineWidth: 0.7)) .foregroundStyle(.linearGradient(colors: [.blue, .yellow, .orange], startPoint: .bottomTrailing, endPoint: .topLeading)) .frame(height: 300) .background(Color.black.opacity(0.6)) .chartYScale( domain: ( (stockAPI.stockData.map { $0.closePrice }.min() ?? 0) * 0.98 ... (stockAPI.stockData.map { $0.closePrice }.max() ?? 100) * 1.02 ) ) .chartXAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } .chartYAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } What I need help with: Skipping missing dates on the x-axis and show correct data for corresponding days. Keeping the x-axis well formatted (grouped by month, accurate labels). Thanks in advance for any suggestions!
Replies
2
Boosts
0
Views
178
Activity
Jun ’25
How to display numbers as grid marks along axes for plotting in Swift Charts?
If you try to add a graph for a function in Apple Notes you can see that numbers marking coordinates are positioned along the axes (see screenshot 1). But when I am making my own plot view with Swift Charts I don't see that option. Marks for X axis are positioned at the bottom, and marks for Y axis are positioned to the right. I don't see an API that can configure them to be shown along the axes. Is there something that I am missing? Or is Apple just using some private API for that? I could make a custom overlay to display these marks, but then I will have to adjust them while zooming myself, which can be problematic.
Replies
1
Boosts
0
Views
235
Activity
Jun ’25