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

Exceptions thrown with NSTextView and spell checker
I use NSTextView in my app, and I am getting a LOT of crashes when I’m running the app with the debugger attached, and it all points to this spell checker in NSTextView. The crash happens as soon as the textview shows the ‘word completion’ option. If I turn off the “Continuous Spell Checking” option, it works fine, and it doesn’t crash. The exception reason given is: __NSCFString * "NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds" This is what the stack trace looks like in Xcode: Thread 1 Queue : com.apple.main-thread (serial) #0 0x000000018335eb38 in objc_exception_throw () #1 0x0000000184e01910 in -[NSRLEArray objectAtIndex:effectiveRange:] () #2 0x0000000184e519a8 in -[NSMutableAttributedString addAttribute:value:range:] () #3 0x000000018818086c in -[NSText(NSTextAccessibilityPrivate) accessibilityAXAttributedStringForCharacterRange:parent:] () #4 0x0000000187f576b0 in -[NSAccessibilityAttributeAccessorInfo getParameterizedAttributeValue:forObject:withParameter:] () #5 0x0000000187f591a8 in ___NSAccessibilityEntryPointValueForAttributeWithParameter_block_invoke.799 () #6 0x0000000187f5458c in NSAccessibilityPerformEntryPointObject () #7 0x0000000187f56190 in NSAccessibilityEntryPointValueForAttributeWithParameter () #8 0x0000000187cb6a3c in CopyParameterizedAttributeValue () #9 0x00000002327057ac in ___lldb_unnamed_symbol4511 () #10 0x0000000232705854 in ___lldb_unnamed_symbol4512 () #11 0x000000018a5b3670 in _AXXMIGCopyParameterizedAttributeValue () #12 0x000000018a5d4894 in _XCopyParameterizedAttributeValue () #13 0x000000018a592ff8 in mshMIGPerform () #14 0x000000018382a250 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ () #15 0x000000018382a178 in __CFRunLoopDoSource1 () #16 0x0000000183828b78 in __CFRunLoopRun () #17 0x0000000183827c58 in CFRunLoopRunSpecific () #18 0x000000018f2bc27c in RunCurrentEventLoopInMode () #19 0x000000018f2bf4e8 in ReceiveNextEventCommon () #20 0x000000018f44a484 in _BlockUntilNextEventMatchingListInModeWithFilter () #21 0x000000018774fab4 in _DPSNextEvent () #22 0x00000001880ee5b0 in -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] () #23 0x00000001884b836c in -[NSCorrectionPanel _interceptEvents] () #24 0x00000001884b8f30 in -[NSCorrectionPanel showPanelAtRect:inView:primaryString:alternativeStrings:forType:completionHandler:] () #25 0x00000001880c91ec in -[NSSpellChecker showCorrectionIndicatorOfType:range:primaryString:alternativeStrings:forStringInRect:view:completionHandler:] () #26 0x00000001880ca0c0 in -[NSSpellChecker _showInlinePredictionForReplacingRange:markedRange:string:withString:view:client:lastReplacementRange:completeWordIndexes:resultDictionary:completionHandler:] () #27 0x00000001880cb26c in -[NSSpellChecker showCompletionForCandidate:selectedRange:offset:inString:rect:view:client:completionHandler:] () #28 0x0000000188303a94 in -[NSTextCheckingController handleCompletionFromCandidates:forSelectedRange:offset:inAnnotatedString:rect:view:] () #29 0x00000001882f9054 in -[NSTextCheckingController viewForRange:completionHandler:] () #30 0x00000001883041c8 in __60-[NSTextCheckingController handleCandidates:sequenceNumber:]_block_invoke () #31 0x000000018789105c in -[NSTextCheckingController annotatedSubstringForProposedRange:wrap:completionHandler:failureHandler:] () #32 0x0000000187890da4 in -[NSTextCheckingController annotatedSubstringForProposedRange:completionHandler:] () #33 0x00000001878927d4 in -[NSTextCheckingController annotatedSubstringForSelectedRangeWithCompletionHandler:] () #34 0x0000000188304134 in -[NSTextCheckingController handleCandidates:sequenceNumber:] () #35 0x00000001883067e0 in ___NSRunLoopTimerCreateWithHandler_block_invoke () #36 0x0000000183842e14 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ () #37 0x0000000183842ad4 in __CFRunLoopDoTimer () #38 0x0000000183842610 in __CFRunLoopDoTimers () #39 0x0000000183828a18 in __CFRunLoopRun () #40 0x0000000183827c58 in CFRunLoopRunSpecific () #41 0x000000018f2bc27c in RunCurrentEventLoopInMode () #42 0x000000018f2bf4e8 in ReceiveNextEventCommon () #43 0x000000018f44a484 in _BlockUntilNextEventMatchingListInModeWithFilter () #44 0x000000018774fab4 in _DPSNextEvent () #45 0x00000001880ee5b0 in -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] () #46 0x0000000187742c64 in -[NSApplication run] () #47 0x000000018771935c in NSApplicationMain () If I run the debug version of the app without the debugger, it works fine as well. In fact, if I run the app without "All Objective-C Exceptions" breakpoint, it also works fine. So it seems like some framework issue, which is making it hard to run and test my app. What’s the reason for this, and is this an issue I should be worried about for when the app is available to my users?
Topic: UI Frameworks SubTopic: AppKit Tags:
3
0
123
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
130
Jun ’25
Best Way to Implement Collapsible Sections on watchOS 10+?
Hi all, I’m trying to implement a collapsible section in a List on watchOS (watchOS 10+). The goal is to have a disclosure chevron that toggles a section open/closed with animation, similar to DisclosureGroup on iOS. Unfortunately, DisclosureGroup is not available on watchOS. 😢 On iOS, this works as expected using this Section init: Section("My Header", isExpanded: $isExpanded) { // content } That gives me a tappable header with a disclosure indicator and the animation built in, as expected. But on watchOS, this same init displays the header, but it’s not tappable, and no disclosure triangle appears. I’ve found that to get it working on watchOS, I need to use the other initializer: Section(isExpanded: $isExpanded) { // content } header: { Button(action: { isExpanded.toggle() }) { HStack { Title("My Header") Spacer() Image(systemName: isExpanded ? "chevron.down" : "chevron.right") } } That works, but feels like a workaround. Is this the intended approach for watchOS, or am I missing a more native way to do this? Any best practices or alternative recommendations appreciated. Thanks!
2
0
121
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
226
Jun ’25
ARKit Camera Feed Zoom & Macro Support for Close-Range Objects
I am currently developing an AR experience using ARKit with SceneKit and am looking to implement functionality that enables: Zooming into the AR camera feed, ideally leveraging the ultra-wide or telephoto lenses available on supported devices. Macro-style focus capabilities, allowing users to view and interact with virtual content closely aligned with small or nearby real-world objects (within a few centimeters). My objective is to ensure that ARKit continues to render the scene accurately while enabling a zoomed-in view or macro-level focus for better detail visibility and alignment. Could you please advise on: Whether ARKit currently supports camera zoom or allows access to macro or ultra-wide cameras within an ARSession. Limitations or considerations when using multi-camera setups in conjunction with ARKit. Any guidance or references to documentation or sample code would be greatly appreciated.
0
0
238
May ’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
132
Jun ’25
How to read a value when tapping a point on a Chart3D
Hi. Chart3D seems to be perfect to visualize a chart on one of my apps. However I would need a way to read the point of a SurfacePlot of a Chart3D that was touched by the user? Something like a Chart .chartOverlay that has a ChartProxy that can convert screen coordinates of the chart in values, but in 3D (maybe using hit testing ). Thanks and best regards. João Colaço
2
0
146
Jun ’25
memory leak/increased memory by NSTextField setString
I just put the TextField on UI and call the NSTextField setString, but it is memory usage is increasing. StoryBoard Objective C put TextField and button to UI set TextField variable to "ABC" in ViewController.h @property (weak) IBOutlet NSTextView* ABC; on button event function //dispatch_sync(dispatch_get_main_queue(), ^{ [_ABC setString:str]; //}); How to block the memory usage increase? Also I was check on Instruments app, and there are many malloc 48bytes, its count is almost same with setString count. Thank you!
1
0
134
May ’25
Window number too large
I'm trying to get information about my status items window. I get the window number using this call: statusItem.button?.window?.windowNumber With that number I try to determine if it visible or not. On macOS 15, this works fine, however on macOS Tahoe the window number is bigger than UInt32 or its type alias CGWindowID, causing a crash of my app (when converting from Int to UInt32). Somehow the window numbers were always in the 32-bit space. I can only guess about the reasons for increase of the window number beyond the UInt32 bounds. I don't know how the windows are numbered, but something may not be going as expected here. Anyone knows if this may be due to running in a virtual machine?
Topic: UI Frameworks SubTopic: General Tags:
1
0
107
Jun ’25
Child Views and ViewThatFits
I'd like to support different template views within a ViewThatFits for items within a list, allowing the list to optimize its layout for different devices. Within the child views is a Text view that is bound to the name of an item. I'd rather the Text view simply truncate the text as necessary although it instead is influencing which view is chosen by ViewThatFits. I'd also rather not artificially set the maxWidth of the Text view as it artificially limits the width on devices where it's not necessary (e.g. iPad Pro vs. iPad mini or iPhone). Any guidance or suggestions on how this can be accomplished as it looks very odd for the layout of one row in the list to be quite different than the rest of the rows.
0
0
85
Jun ’25
Mac Catalyst SplitViewController, UITitlebar bugs?
Bringing my iPad app to Mac Catalyst as iPad idiom. Primary interface is a UISplitViewController. Two things I think are bugs unless someone replies with a fix. SplitViewController is setup in two column with left column as sidebar: split.setViewController(primary, for: .primary) split.setViewController(secondary, for: .secondary) split.preferredDisplayMode = .oneBesideSecondary split.preferredSplitBehavior = .tile split.presentsWithGesture = true #if targetEnvironment(macCatalyst) split.primaryBackgroundStyle = .sidebar split.displayModeButtonVisibility = .never #endif The displayMode button aligns vertically with the navigation bar and below the 3 window control buttons (close, minimize, full screen), whereas on other macOS apps using SplitViewController such as Apple Notes app, the displayMode button aligns vertically and just to the right of the the 3 window control buttons (close, minimize, full screen). I downloaded the Apple Example app called Menus that is supposed to be a prime example of a Mac Catalyst app, and I see author must have faced the same bug and instead created their own displayMode button and placed it on the UITitlebar's toolBar. In my secondary ViewController which is a subclass of a UITableViewController, tapping a row, calls show and in a SplitViewController, that pushes another detailVC onto the Nav stack as expected. The UIWindowScene's UITitlebar which appears over the top of the secondary VC looks correct. This detailVC is a subclass of a UITableViewController. Finally, tapping a row in the table of the detailVC calls show but this time, the ViewController is actually a UIHostingViewController wrapping a SwiftUI View. At this point the UIWindowScene's UITitlebar changes appearance and takes on the same lightened color similar to the sidebar (primary) appearance. With UITitlebarTitleVisibility set to hidden and if I set the titlebar.toolbar to nil, (which removes the UITitlebar, there is no appearance issue. Running on iPad, with no UITitlebar, there is no odd lightening experienced when the UIHostingController is shown. I think this has something to do with the UIHostingController within Mac Catalyst.
1
0
233
May ’25
Crash due to likely infinitely recursive call in SwiftUI `Color.Resolved.init`
So I'm dealing with a really obtuse crash that appears to be a stack overflow in an internal SwiftUI code path creating a Color.Resolved. I haven't found anyone one else with this issue online, and I cannot get it to reproduce on my own device. Interestingly enough, it is only happening on 1 device in the field (according to XCode crash logs). Here are some lines from the crashed thread. You can see that my code is never called, and it appears to be starting in some Array equality check checking the equality of colors (which I can't think of anywhere in my app I am doing anyway). You can see from this trace here that it appears to be a recursive call through Color.Resolved and NSColor.withColorAppearance. I don't have any idea how to solve this, but it keeps happening with at least one in-the-field device across multiple app updates. So my whole app is open source on github at https://github.com/msdrigg/roam, but I don't even use NSColor explicitly anywhere except for here which doesn't match the stack trace. I also tried changing the accent color of the app with defaults write com.msdrigg.roam AppleAccentColor -integer 1 to see if that somehow caused the crash, but my app opened up totally fine (and respected the change). Besides this, the only places I think I could be using dynamic colors is I when define an AccentColor and a WidgetBackground color for my app using xcassets, and then I use these colors from SwiftUI. In most of my app I stick to the system colors (Color.gray and such). Thread 0 Crashed: 0 libsystem_pthread.dylib 0x000000018601213c ___chkstk_darwin + 60 1 CoreFoundation 0x0000000186108434 -[NSArray isEqualToArray:] + 52 (NSArray.m:454) 2 AppKit 0x000000018a21fcd4 -[NSCoreUICatalogColor resolvedCUINamedColorForAppearance:] + 164 (NSColor.m:5057) 3 AppKit 0x0000000189c32cd4 -[NSCoreUICatalogColor resolvedColor] + 48 (NSColor.m:5148) 4 AppKit 0x0000000189c31e74 -[NSDynamicNamedColor colorUsingColorSpace:] + 32 (NSColor.m:4410) 5 SwiftUICore 0x0000000221ca9fd8 CoreColorPlatformColorGetComponents + 116 (CoreColorFunctions.m:149) 6 SwiftUICore 0x0000000221faaf28 specialized Color.Resolved.init(platformColor:) + 92 (CoreColor.swift:14) 7 SwiftUICore 0x0000000221faa5b0 Color.Resolved.init(platformColor:) + 16 (<compiler-generated>:0) 8 SwiftUI 0x00000001b53b1dc4 closure #1 in NSColor.resolve(in:) + 20 (AppKitColorConversions.swift:156) 9 SwiftUI 0x00000001b53b222c partial apply for closure #1 in static NSColor.withColorAppearance(in:_:) + 32 (<compiler-generated>:0) 10 SwiftUI 0x00000001b46b1e54 closure #1 in SubmitTriggerSource.dispatchUpdate(_:) + 28 (PlatformViewCoordinator.swift:12) 11 SwiftUI 0x00000001b5484488 thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0) 12 AppKit 0x0000000189c174a4 +[NSAppearance _performWithCurrentAppearance:usingBlock:] + 72 (NSAppearance.m:2408) 13 SwiftUI 0x00000001b53b2088 specialized static NSColor.withColorAppearance(in:_:) + 324 (AppKitColorConversions.swift:142) 14 SwiftUI 0x00000001b53b1e7c protocol witness for ColorProvider.resolve(in:) in conformance NSColor + 68 (<compiler-generated>:151) 15 SwiftUICore 0x0000000222436e6c ColorBox.resolve(in:) + 124 (Color.swift:288) 16 SwiftUICore 0x0000000222435e30 Color.resolve(in:) + 72 (Color.swift:87) 17 SwiftUI 0x00000001b53b1c88 closure #1 in NSColor.init(_:) + 196 (AppKitColorConversions.swift:124) 18 SwiftUI 0x00000001b4542714 thunk for @escaping @callee_guaranteed (@guaranteed NSAppearance) -> (@owned NSColor) + 56 (<compiler-generated>:0) 19 AppKit 0x0000000189c31e74 -[NSDynamicNamedColor colorUsingColorSpace:] + 32 (NSColor.m:4410) //// ... Repeating for 500 lines 500 SwiftUICore 0x0000000221ca9fd8 CoreColorPlatformColorGetComponents + 116 (CoreColorFunctions.m:149) 501 SwiftUICore 0x0000000221faaf28 specialized Color.Resolved.init(platformColor:) + 92 (CoreColor.swift:14) 502 SwiftUICore 0x0000000221faa5b0 Color.Resolved.init(platformColor:) + 16 (<compiler-generated>:0) 503 SwiftUI 0x00000001b53b1dc4 closure #1 in NSColor.resolve(in:) + 20 (AppKitColorConversions.swift:156) 504 SwiftUI 0x00000001b53b222c partial apply for closure #1 in static NSColor.withColorAppearance(in:_:) + 32 (<compiler-generated>:0) 505 SwiftUI 0x00000001b46b1e54 closure #1 in SubmitTriggerSource.dispatchUpdate(_:) + 28 (PlatformViewCoordinator.swift:12) 506 SwiftUI 0x00000001b5484488 thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0) 507 AppKit 0x0000000189c174a4 +[NSAppearance _performWithCurrentAppearance:usingBlock:] + 72 (NSAppearance.m:2408) 508 SwiftUI 0x00000001b53b2088 specialized static NSColor.withColorAppearance(in:_:) + 324 (AppKitColorConversions.swift:142) 509 SwiftUI 0x00000001b53b1e7c protocol witness for ColorProvider.resolve(in:) in conformance NSColor + 68 (<compiler-generated>:151) 510 SwiftUICore 0x0000000222436e6c ColorBox.resolve(in:) + 124 (Color.swift:288) full-log.crash
0
0
146
May ’25
SwiftUI Table performance issue
I found the Table with Toggle will have performance issue when the data is large. I can reproduce it in Apple demo: https://developer.apple.com/documentation/swiftui/building_a_great_mac_app_with_swiftui Replace with a large mock data, for example database.json Try to scroll the table, it's not smooth. I found if I delete the Toggle, the performance be good. TableColumn("Favorite", value: \.favorite, comparator: BoolComparator()) { plant in Toggle("Favorite", isOn: $garden[plant.id].favorite) .labelsHidden() } Is this bug in SwiftUI? Any workaround? My Mac is Intel, not sure it can repro on Apple Silicon
2
0
617
Jul ’25
Emulate AppKit NSPopUpButton in SwiftUI
How to make a control that looks and feels as close as possible to NSPopUpButton in SwiftUI, so a Mac user accepts the control as being native Mac UI? Items should have icon and text, I need separators between some items and certain items may be disabled at times, so they should not be selectable. Picker seems to lack some of those features (separators and disabled items), and Menu looks and behaves differently. Any guidance? For now I went with Menu, but find both the "chevron.down" icon at the trailing end as well as the positioning of the menu below the control weird.
Topic: UI Frameworks SubTopic: SwiftUI
2
0
96
Jun ’25
iOS 26 Beta – Unexpected Shadow/Glow Around Fullscreen Video Player in SwiftUI
Hello everyone, I'm developing a SwiftUI app that includes a fullscreen video player (AVPlayerViewController or AVPlayerLayer). I'm currently testing the app on an iPhone 16 Pro running iOS 26 Beta, as well as on the corresponding simulator. With iOS 26, during video playback, an unexpected black or white glow/halo appears around the video, depending on the system appearance (dark/light mode). However, this issue does not occur when testing on iOS 18 — neither on device nor simulator. Has anyone encountered this issue? Is there any known workaround or solution to remove this visual effect on iOS 26? I've attached screenshot below to illustrate the problem. Thank you in advance for your help!
2
0
207
Jun ’25
SwiftUI TextEditor in os26 supports attachment?
Glad to see that we have the capability to edit rich text in TextEditor with the latest os update, but I didn't get any clue to enable the attachment for this textEditor, either image/audio/video or other attachments. Any solution on this with TextEditor or I have to use the UIKit and AppKit alternatives?
Topic: UI Frameworks SubTopic: SwiftUI
1
0
126
Jun ’25
UIImagePickerController shows black screen for some users on iOS 18.4+ (iPhone 13/14)
We're facing a strange issue where UIImagePickerController opens with a black screen (no camera preview) for some users only. The camera permissions are granted, and the picker is presented without errors. This problem does not reproduce on all devices — it's been reported on: iPhone 14 – iOS 18.4 iPhone 13 – iOS 18.5 Other unknown devices (users didn’t share details) We are using UIImagePickerController to open the rear camera, and presenting it from appDelegate.window?.rootViewController. All required permissions are in place (NSCameraUsageDescription is added in Info.plist, runtime permissions checked and approved). Still, for a subset of users, the screen goes black when trying to capture a photo. We suspect either a system-level issue with iOS 18.4+, a session conflict, or an issue with how we present the picker. Looking for advice or known issues/workarounds. Would switching to AVCaptureSession help? What We’ve Verified: NSCameraUsageDescription is set in Info.plist Camera permission is requested and granted at runtime Users tried: Reinstalling the app Restarting the phone Switching between front/rear camera Still, the camera preview remains black No crash logs or exceptions Below is the Code Level Example:- let imagePicker = UIImagePickerController() let Capture = UIAlertAction(title: "TAKE_PHOTO".localized, style: .destructive) { _ in self.imagePicker.sourceType = .camera self.imagePicker.cameraDevice = .rear self.imagePicker.showsCameraControls = true self.imagePicker.allowsEditing = false appDelegate.window?.rootViewController?.present(self.imagePicker, animated: true, completion: nil) }
Topic: UI Frameworks SubTopic: UIKit Tags:
1
0
176
Jun ’25
@Observable with generic typed throw breaks SwiftCompile
@Observable seems not to work well with generic typed throw. The following code using @Observable with non-generic typed throw builds good: @Observable class ThrowsLoadingViewModel<R, E: Error> { private(set) var isLoading = true private(set) var error: E? = nil private(set) var data: R? = nil private var task: () throws(Error) -> R init(task: @escaping () throws(E) -> R) { self.task = task } func load() { do throws(Error) { self.data = try task() } catch { // self.error = error } self.isLoading = false } } But if I change Line 7 and 14 to generic, it'll breaks the build with a "Command SwiftCompile failed with a nonzero exit code" message : @Observable class ThrowsLoadingViewModel<R, E: Error> { private(set) var isLoading = true private(set) var error: E? = nil private(set) var data: R? = nil private var task: () throws(E) -> R init(task: @escaping () throws(E) -> R) { self.task = task } func load() { do throws(E) { self.data = try task() } catch { // self.error = error } self.isLoading = false } } A the same time, if I remove @Observable, the generic typed throw works again: class ThrowsLoadingViewModel<R, E: Error> { private(set) var isLoading = true private(set) var error: E? = nil private(set) var data: R? = nil private var task: () throws(E) -> R init(task: @escaping () throws(E) -> R) { self.task = task } func load() { do throws(E) { self.data = try task() } catch { // self.error = error } self.isLoading = false } } Currently the possible solution seems to fall back to use ObservableObject...
0
0
107
Jun ’25
iOS Battery Percentage Granularity Issue
When developing an iOS app that monitors or transmits the battery percentage (using UIDevice.current.batteryLevel), often expect to get updates for every 1% change in battery. However, on iOS, the batteryLevel property only updates in steps of approximately 5%. For example, the value jumps from 1.0 (100%) to 0.95 (95%), then to 0.90 (90%), and so on. It does not report intermediate values like 0.99, 0.98, etc.
3
0
314
Jun ’25
Exceptions thrown with NSTextView and spell checker
I use NSTextView in my app, and I am getting a LOT of crashes when I’m running the app with the debugger attached, and it all points to this spell checker in NSTextView. The crash happens as soon as the textview shows the ‘word completion’ option. If I turn off the “Continuous Spell Checking” option, it works fine, and it doesn’t crash. The exception reason given is: __NSCFString * "NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds" This is what the stack trace looks like in Xcode: Thread 1 Queue : com.apple.main-thread (serial) #0 0x000000018335eb38 in objc_exception_throw () #1 0x0000000184e01910 in -[NSRLEArray objectAtIndex:effectiveRange:] () #2 0x0000000184e519a8 in -[NSMutableAttributedString addAttribute:value:range:] () #3 0x000000018818086c in -[NSText(NSTextAccessibilityPrivate) accessibilityAXAttributedStringForCharacterRange:parent:] () #4 0x0000000187f576b0 in -[NSAccessibilityAttributeAccessorInfo getParameterizedAttributeValue:forObject:withParameter:] () #5 0x0000000187f591a8 in ___NSAccessibilityEntryPointValueForAttributeWithParameter_block_invoke.799 () #6 0x0000000187f5458c in NSAccessibilityPerformEntryPointObject () #7 0x0000000187f56190 in NSAccessibilityEntryPointValueForAttributeWithParameter () #8 0x0000000187cb6a3c in CopyParameterizedAttributeValue () #9 0x00000002327057ac in ___lldb_unnamed_symbol4511 () #10 0x0000000232705854 in ___lldb_unnamed_symbol4512 () #11 0x000000018a5b3670 in _AXXMIGCopyParameterizedAttributeValue () #12 0x000000018a5d4894 in _XCopyParameterizedAttributeValue () #13 0x000000018a592ff8 in mshMIGPerform () #14 0x000000018382a250 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ () #15 0x000000018382a178 in __CFRunLoopDoSource1 () #16 0x0000000183828b78 in __CFRunLoopRun () #17 0x0000000183827c58 in CFRunLoopRunSpecific () #18 0x000000018f2bc27c in RunCurrentEventLoopInMode () #19 0x000000018f2bf4e8 in ReceiveNextEventCommon () #20 0x000000018f44a484 in _BlockUntilNextEventMatchingListInModeWithFilter () #21 0x000000018774fab4 in _DPSNextEvent () #22 0x00000001880ee5b0 in -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] () #23 0x00000001884b836c in -[NSCorrectionPanel _interceptEvents] () #24 0x00000001884b8f30 in -[NSCorrectionPanel showPanelAtRect:inView:primaryString:alternativeStrings:forType:completionHandler:] () #25 0x00000001880c91ec in -[NSSpellChecker showCorrectionIndicatorOfType:range:primaryString:alternativeStrings:forStringInRect:view:completionHandler:] () #26 0x00000001880ca0c0 in -[NSSpellChecker _showInlinePredictionForReplacingRange:markedRange:string:withString:view:client:lastReplacementRange:completeWordIndexes:resultDictionary:completionHandler:] () #27 0x00000001880cb26c in -[NSSpellChecker showCompletionForCandidate:selectedRange:offset:inString:rect:view:client:completionHandler:] () #28 0x0000000188303a94 in -[NSTextCheckingController handleCompletionFromCandidates:forSelectedRange:offset:inAnnotatedString:rect:view:] () #29 0x00000001882f9054 in -[NSTextCheckingController viewForRange:completionHandler:] () #30 0x00000001883041c8 in __60-[NSTextCheckingController handleCandidates:sequenceNumber:]_block_invoke () #31 0x000000018789105c in -[NSTextCheckingController annotatedSubstringForProposedRange:wrap:completionHandler:failureHandler:] () #32 0x0000000187890da4 in -[NSTextCheckingController annotatedSubstringForProposedRange:completionHandler:] () #33 0x00000001878927d4 in -[NSTextCheckingController annotatedSubstringForSelectedRangeWithCompletionHandler:] () #34 0x0000000188304134 in -[NSTextCheckingController handleCandidates:sequenceNumber:] () #35 0x00000001883067e0 in ___NSRunLoopTimerCreateWithHandler_block_invoke () #36 0x0000000183842e14 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ () #37 0x0000000183842ad4 in __CFRunLoopDoTimer () #38 0x0000000183842610 in __CFRunLoopDoTimers () #39 0x0000000183828a18 in __CFRunLoopRun () #40 0x0000000183827c58 in CFRunLoopRunSpecific () #41 0x000000018f2bc27c in RunCurrentEventLoopInMode () #42 0x000000018f2bf4e8 in ReceiveNextEventCommon () #43 0x000000018f44a484 in _BlockUntilNextEventMatchingListInModeWithFilter () #44 0x000000018774fab4 in _DPSNextEvent () #45 0x00000001880ee5b0 in -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] () #46 0x0000000187742c64 in -[NSApplication run] () #47 0x000000018771935c in NSApplicationMain () If I run the debug version of the app without the debugger, it works fine as well. In fact, if I run the app without "All Objective-C Exceptions" breakpoint, it also works fine. So it seems like some framework issue, which is making it hard to run and test my app. What’s the reason for this, and is this an issue I should be worried about for when the app is available to my users?
Topic: UI Frameworks SubTopic: AppKit Tags:
Replies
3
Boosts
0
Views
123
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
130
Activity
Jun ’25
Best Way to Implement Collapsible Sections on watchOS 10+?
Hi all, I’m trying to implement a collapsible section in a List on watchOS (watchOS 10+). The goal is to have a disclosure chevron that toggles a section open/closed with animation, similar to DisclosureGroup on iOS. Unfortunately, DisclosureGroup is not available on watchOS. 😢 On iOS, this works as expected using this Section init: Section("My Header", isExpanded: $isExpanded) { // content } That gives me a tappable header with a disclosure indicator and the animation built in, as expected. But on watchOS, this same init displays the header, but it’s not tappable, and no disclosure triangle appears. I’ve found that to get it working on watchOS, I need to use the other initializer: Section(isExpanded: $isExpanded) { // content } header: { Button(action: { isExpanded.toggle() }) { HStack { Title("My Header") Spacer() Image(systemName: isExpanded ? "chevron.down" : "chevron.right") } } That works, but feels like a workaround. Is this the intended approach for watchOS, or am I missing a more native way to do this? Any best practices or alternative recommendations appreciated. Thanks!
Replies
2
Boosts
0
Views
121
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
226
Activity
Jun ’25
A document-based app with NavigationSplitView shows duplicate file navigation controls on iPad
A document-based app with NavigationSplitView shows duplicate file navigation controls on iPad. This can be easily replicated by creating a multiplatform app in Xcode. The template app shows this behaviour when running on iPad. This looks very much like a bug.
Replies
4
Boosts
0
Views
132
Activity
Jun ’25
ARKit Camera Feed Zoom & Macro Support for Close-Range Objects
I am currently developing an AR experience using ARKit with SceneKit and am looking to implement functionality that enables: Zooming into the AR camera feed, ideally leveraging the ultra-wide or telephoto lenses available on supported devices. Macro-style focus capabilities, allowing users to view and interact with virtual content closely aligned with small or nearby real-world objects (within a few centimeters). My objective is to ensure that ARKit continues to render the scene accurately while enabling a zoomed-in view or macro-level focus for better detail visibility and alignment. Could you please advise on: Whether ARKit currently supports camera zoom or allows access to macro or ultra-wide cameras within an ARSession. Limitations or considerations when using multi-camera setups in conjunction with ARKit. Any guidance or references to documentation or sample code would be greatly appreciated.
Replies
0
Boosts
0
Views
238
Activity
May ’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
132
Activity
Jun ’25
How to read a value when tapping a point on a Chart3D
Hi. Chart3D seems to be perfect to visualize a chart on one of my apps. However I would need a way to read the point of a SurfacePlot of a Chart3D that was touched by the user? Something like a Chart .chartOverlay that has a ChartProxy that can convert screen coordinates of the chart in values, but in 3D (maybe using hit testing ). Thanks and best regards. João Colaço
Replies
2
Boosts
0
Views
146
Activity
Jun ’25
memory leak/increased memory by NSTextField setString
I just put the TextField on UI and call the NSTextField setString, but it is memory usage is increasing. StoryBoard Objective C put TextField and button to UI set TextField variable to "ABC" in ViewController.h @property (weak) IBOutlet NSTextView* ABC; on button event function //dispatch_sync(dispatch_get_main_queue(), ^{ [_ABC setString:str]; //}); How to block the memory usage increase? Also I was check on Instruments app, and there are many malloc 48bytes, its count is almost same with setString count. Thank you!
Replies
1
Boosts
0
Views
134
Activity
May ’25
Window number too large
I'm trying to get information about my status items window. I get the window number using this call: statusItem.button?.window?.windowNumber With that number I try to determine if it visible or not. On macOS 15, this works fine, however on macOS Tahoe the window number is bigger than UInt32 or its type alias CGWindowID, causing a crash of my app (when converting from Int to UInt32). Somehow the window numbers were always in the 32-bit space. I can only guess about the reasons for increase of the window number beyond the UInt32 bounds. I don't know how the windows are numbered, but something may not be going as expected here. Anyone knows if this may be due to running in a virtual machine?
Topic: UI Frameworks SubTopic: General Tags:
Replies
1
Boosts
0
Views
107
Activity
Jun ’25
Child Views and ViewThatFits
I'd like to support different template views within a ViewThatFits for items within a list, allowing the list to optimize its layout for different devices. Within the child views is a Text view that is bound to the name of an item. I'd rather the Text view simply truncate the text as necessary although it instead is influencing which view is chosen by ViewThatFits. I'd also rather not artificially set the maxWidth of the Text view as it artificially limits the width on devices where it's not necessary (e.g. iPad Pro vs. iPad mini or iPhone). Any guidance or suggestions on how this can be accomplished as it looks very odd for the layout of one row in the list to be quite different than the rest of the rows.
Replies
0
Boosts
0
Views
85
Activity
Jun ’25
Mac Catalyst SplitViewController, UITitlebar bugs?
Bringing my iPad app to Mac Catalyst as iPad idiom. Primary interface is a UISplitViewController. Two things I think are bugs unless someone replies with a fix. SplitViewController is setup in two column with left column as sidebar: split.setViewController(primary, for: .primary) split.setViewController(secondary, for: .secondary) split.preferredDisplayMode = .oneBesideSecondary split.preferredSplitBehavior = .tile split.presentsWithGesture = true #if targetEnvironment(macCatalyst) split.primaryBackgroundStyle = .sidebar split.displayModeButtonVisibility = .never #endif The displayMode button aligns vertically with the navigation bar and below the 3 window control buttons (close, minimize, full screen), whereas on other macOS apps using SplitViewController such as Apple Notes app, the displayMode button aligns vertically and just to the right of the the 3 window control buttons (close, minimize, full screen). I downloaded the Apple Example app called Menus that is supposed to be a prime example of a Mac Catalyst app, and I see author must have faced the same bug and instead created their own displayMode button and placed it on the UITitlebar's toolBar. In my secondary ViewController which is a subclass of a UITableViewController, tapping a row, calls show and in a SplitViewController, that pushes another detailVC onto the Nav stack as expected. The UIWindowScene's UITitlebar which appears over the top of the secondary VC looks correct. This detailVC is a subclass of a UITableViewController. Finally, tapping a row in the table of the detailVC calls show but this time, the ViewController is actually a UIHostingViewController wrapping a SwiftUI View. At this point the UIWindowScene's UITitlebar changes appearance and takes on the same lightened color similar to the sidebar (primary) appearance. With UITitlebarTitleVisibility set to hidden and if I set the titlebar.toolbar to nil, (which removes the UITitlebar, there is no appearance issue. Running on iPad, with no UITitlebar, there is no odd lightening experienced when the UIHostingController is shown. I think this has something to do with the UIHostingController within Mac Catalyst.
Replies
1
Boosts
0
Views
233
Activity
May ’25
Crash due to likely infinitely recursive call in SwiftUI `Color.Resolved.init`
So I'm dealing with a really obtuse crash that appears to be a stack overflow in an internal SwiftUI code path creating a Color.Resolved. I haven't found anyone one else with this issue online, and I cannot get it to reproduce on my own device. Interestingly enough, it is only happening on 1 device in the field (according to XCode crash logs). Here are some lines from the crashed thread. You can see that my code is never called, and it appears to be starting in some Array equality check checking the equality of colors (which I can't think of anywhere in my app I am doing anyway). You can see from this trace here that it appears to be a recursive call through Color.Resolved and NSColor.withColorAppearance. I don't have any idea how to solve this, but it keeps happening with at least one in-the-field device across multiple app updates. So my whole app is open source on github at https://github.com/msdrigg/roam, but I don't even use NSColor explicitly anywhere except for here which doesn't match the stack trace. I also tried changing the accent color of the app with defaults write com.msdrigg.roam AppleAccentColor -integer 1 to see if that somehow caused the crash, but my app opened up totally fine (and respected the change). Besides this, the only places I think I could be using dynamic colors is I when define an AccentColor and a WidgetBackground color for my app using xcassets, and then I use these colors from SwiftUI. In most of my app I stick to the system colors (Color.gray and such). Thread 0 Crashed: 0 libsystem_pthread.dylib 0x000000018601213c ___chkstk_darwin + 60 1 CoreFoundation 0x0000000186108434 -[NSArray isEqualToArray:] + 52 (NSArray.m:454) 2 AppKit 0x000000018a21fcd4 -[NSCoreUICatalogColor resolvedCUINamedColorForAppearance:] + 164 (NSColor.m:5057) 3 AppKit 0x0000000189c32cd4 -[NSCoreUICatalogColor resolvedColor] + 48 (NSColor.m:5148) 4 AppKit 0x0000000189c31e74 -[NSDynamicNamedColor colorUsingColorSpace:] + 32 (NSColor.m:4410) 5 SwiftUICore 0x0000000221ca9fd8 CoreColorPlatformColorGetComponents + 116 (CoreColorFunctions.m:149) 6 SwiftUICore 0x0000000221faaf28 specialized Color.Resolved.init(platformColor:) + 92 (CoreColor.swift:14) 7 SwiftUICore 0x0000000221faa5b0 Color.Resolved.init(platformColor:) + 16 (<compiler-generated>:0) 8 SwiftUI 0x00000001b53b1dc4 closure #1 in NSColor.resolve(in:) + 20 (AppKitColorConversions.swift:156) 9 SwiftUI 0x00000001b53b222c partial apply for closure #1 in static NSColor.withColorAppearance(in:_:) + 32 (<compiler-generated>:0) 10 SwiftUI 0x00000001b46b1e54 closure #1 in SubmitTriggerSource.dispatchUpdate(_:) + 28 (PlatformViewCoordinator.swift:12) 11 SwiftUI 0x00000001b5484488 thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0) 12 AppKit 0x0000000189c174a4 +[NSAppearance _performWithCurrentAppearance:usingBlock:] + 72 (NSAppearance.m:2408) 13 SwiftUI 0x00000001b53b2088 specialized static NSColor.withColorAppearance(in:_:) + 324 (AppKitColorConversions.swift:142) 14 SwiftUI 0x00000001b53b1e7c protocol witness for ColorProvider.resolve(in:) in conformance NSColor + 68 (<compiler-generated>:151) 15 SwiftUICore 0x0000000222436e6c ColorBox.resolve(in:) + 124 (Color.swift:288) 16 SwiftUICore 0x0000000222435e30 Color.resolve(in:) + 72 (Color.swift:87) 17 SwiftUI 0x00000001b53b1c88 closure #1 in NSColor.init(_:) + 196 (AppKitColorConversions.swift:124) 18 SwiftUI 0x00000001b4542714 thunk for @escaping @callee_guaranteed (@guaranteed NSAppearance) -> (@owned NSColor) + 56 (<compiler-generated>:0) 19 AppKit 0x0000000189c31e74 -[NSDynamicNamedColor colorUsingColorSpace:] + 32 (NSColor.m:4410) //// ... Repeating for 500 lines 500 SwiftUICore 0x0000000221ca9fd8 CoreColorPlatformColorGetComponents + 116 (CoreColorFunctions.m:149) 501 SwiftUICore 0x0000000221faaf28 specialized Color.Resolved.init(platformColor:) + 92 (CoreColor.swift:14) 502 SwiftUICore 0x0000000221faa5b0 Color.Resolved.init(platformColor:) + 16 (<compiler-generated>:0) 503 SwiftUI 0x00000001b53b1dc4 closure #1 in NSColor.resolve(in:) + 20 (AppKitColorConversions.swift:156) 504 SwiftUI 0x00000001b53b222c partial apply for closure #1 in static NSColor.withColorAppearance(in:_:) + 32 (<compiler-generated>:0) 505 SwiftUI 0x00000001b46b1e54 closure #1 in SubmitTriggerSource.dispatchUpdate(_:) + 28 (PlatformViewCoordinator.swift:12) 506 SwiftUI 0x00000001b5484488 thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0) 507 AppKit 0x0000000189c174a4 +[NSAppearance _performWithCurrentAppearance:usingBlock:] + 72 (NSAppearance.m:2408) 508 SwiftUI 0x00000001b53b2088 specialized static NSColor.withColorAppearance(in:_:) + 324 (AppKitColorConversions.swift:142) 509 SwiftUI 0x00000001b53b1e7c protocol witness for ColorProvider.resolve(in:) in conformance NSColor + 68 (<compiler-generated>:151) 510 SwiftUICore 0x0000000222436e6c ColorBox.resolve(in:) + 124 (Color.swift:288) full-log.crash
Replies
0
Boosts
0
Views
146
Activity
May ’25
SwiftUI Table performance issue
I found the Table with Toggle will have performance issue when the data is large. I can reproduce it in Apple demo: https://developer.apple.com/documentation/swiftui/building_a_great_mac_app_with_swiftui Replace with a large mock data, for example database.json Try to scroll the table, it's not smooth. I found if I delete the Toggle, the performance be good. TableColumn("Favorite", value: \.favorite, comparator: BoolComparator()) { plant in Toggle("Favorite", isOn: $garden[plant.id].favorite) .labelsHidden() } Is this bug in SwiftUI? Any workaround? My Mac is Intel, not sure it can repro on Apple Silicon
Replies
2
Boosts
0
Views
617
Activity
Jul ’25
Emulate AppKit NSPopUpButton in SwiftUI
How to make a control that looks and feels as close as possible to NSPopUpButton in SwiftUI, so a Mac user accepts the control as being native Mac UI? Items should have icon and text, I need separators between some items and certain items may be disabled at times, so they should not be selectable. Picker seems to lack some of those features (separators and disabled items), and Menu looks and behaves differently. Any guidance? For now I went with Menu, but find both the "chevron.down" icon at the trailing end as well as the positioning of the menu below the control weird.
Topic: UI Frameworks SubTopic: SwiftUI
Replies
2
Boosts
0
Views
96
Activity
Jun ’25
iOS 26 Beta – Unexpected Shadow/Glow Around Fullscreen Video Player in SwiftUI
Hello everyone, I'm developing a SwiftUI app that includes a fullscreen video player (AVPlayerViewController or AVPlayerLayer). I'm currently testing the app on an iPhone 16 Pro running iOS 26 Beta, as well as on the corresponding simulator. With iOS 26, during video playback, an unexpected black or white glow/halo appears around the video, depending on the system appearance (dark/light mode). However, this issue does not occur when testing on iOS 18 — neither on device nor simulator. Has anyone encountered this issue? Is there any known workaround or solution to remove this visual effect on iOS 26? I've attached screenshot below to illustrate the problem. Thank you in advance for your help!
Replies
2
Boosts
0
Views
207
Activity
Jun ’25
SwiftUI TextEditor in os26 supports attachment?
Glad to see that we have the capability to edit rich text in TextEditor with the latest os update, but I didn't get any clue to enable the attachment for this textEditor, either image/audio/video or other attachments. Any solution on this with TextEditor or I have to use the UIKit and AppKit alternatives?
Topic: UI Frameworks SubTopic: SwiftUI
Replies
1
Boosts
0
Views
126
Activity
Jun ’25
UIImagePickerController shows black screen for some users on iOS 18.4+ (iPhone 13/14)
We're facing a strange issue where UIImagePickerController opens with a black screen (no camera preview) for some users only. The camera permissions are granted, and the picker is presented without errors. This problem does not reproduce on all devices — it's been reported on: iPhone 14 – iOS 18.4 iPhone 13 – iOS 18.5 Other unknown devices (users didn’t share details) We are using UIImagePickerController to open the rear camera, and presenting it from appDelegate.window?.rootViewController. All required permissions are in place (NSCameraUsageDescription is added in Info.plist, runtime permissions checked and approved). Still, for a subset of users, the screen goes black when trying to capture a photo. We suspect either a system-level issue with iOS 18.4+, a session conflict, or an issue with how we present the picker. Looking for advice or known issues/workarounds. Would switching to AVCaptureSession help? What We’ve Verified: NSCameraUsageDescription is set in Info.plist Camera permission is requested and granted at runtime Users tried: Reinstalling the app Restarting the phone Switching between front/rear camera Still, the camera preview remains black No crash logs or exceptions Below is the Code Level Example:- let imagePicker = UIImagePickerController() let Capture = UIAlertAction(title: "TAKE_PHOTO".localized, style: .destructive) { _ in self.imagePicker.sourceType = .camera self.imagePicker.cameraDevice = .rear self.imagePicker.showsCameraControls = true self.imagePicker.allowsEditing = false appDelegate.window?.rootViewController?.present(self.imagePicker, animated: true, completion: nil) }
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
1
Boosts
0
Views
176
Activity
Jun ’25
@Observable with generic typed throw breaks SwiftCompile
@Observable seems not to work well with generic typed throw. The following code using @Observable with non-generic typed throw builds good: @Observable class ThrowsLoadingViewModel<R, E: Error> { private(set) var isLoading = true private(set) var error: E? = nil private(set) var data: R? = nil private var task: () throws(Error) -> R init(task: @escaping () throws(E) -> R) { self.task = task } func load() { do throws(Error) { self.data = try task() } catch { // self.error = error } self.isLoading = false } } But if I change Line 7 and 14 to generic, it'll breaks the build with a "Command SwiftCompile failed with a nonzero exit code" message : @Observable class ThrowsLoadingViewModel<R, E: Error> { private(set) var isLoading = true private(set) var error: E? = nil private(set) var data: R? = nil private var task: () throws(E) -> R init(task: @escaping () throws(E) -> R) { self.task = task } func load() { do throws(E) { self.data = try task() } catch { // self.error = error } self.isLoading = false } } A the same time, if I remove @Observable, the generic typed throw works again: class ThrowsLoadingViewModel<R, E: Error> { private(set) var isLoading = true private(set) var error: E? = nil private(set) var data: R? = nil private var task: () throws(E) -> R init(task: @escaping () throws(E) -> R) { self.task = task } func load() { do throws(E) { self.data = try task() } catch { // self.error = error } self.isLoading = false } } Currently the possible solution seems to fall back to use ObservableObject...
Replies
0
Boosts
0
Views
107
Activity
Jun ’25
iOS Battery Percentage Granularity Issue
When developing an iOS app that monitors or transmits the battery percentage (using UIDevice.current.batteryLevel), often expect to get updates for every 1% change in battery. However, on iOS, the batteryLevel property only updates in steps of approximately 5%. For example, the value jumps from 1.0 (100%) to 0.95 (95%), then to 0.90 (90%), and so on. It does not report intermediate values like 0.99, 0.98, etc.
Replies
3
Boosts
0
Views
314
Activity
Jun ’25