For over five years, this persistent issue has affected all platforms, and despite submitting numerous feedback reports, my concerns have remained unaddressed.
When utilizing a UIHostingController within a UINavigationController, the toolbar items and title defined in the SwiftUI view manifest with a substantial delay. This delay is particularly noticeable with the introduction of Liquid Glass, resulting in a jarring transition. Although I had nearly lost hope, the issue was resolved in iOS 26 beta 3 when the push occurs from within a UISplitViewController. However, the problem persists outside of this context.
Ultimately, this issue hinders my ability to develop high-quality applications and restricts my use of SwiftUI within my UIKit project for similar purposes. I sincerely hope that this issue can be resolved, enabling me to fully rely on SwiftUI in my project. Please prioritize this matter and make the necessary changes that were already made in UISplitViewController.
This feedback has all the details and a sample project.
FB14000542
Before the push:
During the push:
A second after the push finishes:
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
So many issues with the new sheet design, I don't think I can ship these. And it's both in UIKit and SwiftUI. Honestly these net sheets seem like a failure from start to finish and I don't believe it will get better for the initial release.
Toolbar buttons in medium detent size have very low contrast and look bad with their opaque appearance
During the transition from medium to large detent the whole sheet flickers and turns transparent for a split moment, creating a very jarring transition (video here: https://mastodon.social/@nicoreese/114938826906689965).
In the large detent the background is always white in light mode making the cells bleed into the background making them indistinguishable from it. I should be able to set a background color for the large detent which smoothly transitions to it. Like: glass in medium and system grouped background in large.
Any interaction with the medium detent sheet makes it scale up. Why? It's okay for single interactions but not for when the user taps something in it rapidly. There needs to be a way to disable this behavior.
In the medium detent List/UICollectionView rows are white in light mode or gray in dark mode. Especially in dark mode it looks very bad against the glass background. Those rows should probably be translucent to better fit the glass.
This needs serious fixing and fast.
FB18919680
FB18919657
FB18919600
FB18919549
FB18919496
FB18919630
For some controls it is desirable to not use the morphing transition when presenting a Menu. Instead, you might want to have the old behavior, where the menu is presented above or below the initiating view. This can be the case for any other control than toolbar items, but especially for bigger content cards, that should trigger a menu upon tapping it once. In those cases it looks weird and does not really help to keep context of what the action is doing.
Is there some way to do this right now?
In case it's not, I also filed a feedback.
FB18413055
When using UISearchController, scope buttons never appear. On iPadOS 18 this works fine. This is a showstopper bug for me and my app. Is there anything I can do about it?
Sample project is attached to feedback FB19587622.
It appears from my testing that the following is true:
If you close all windows of an app, the app terminates entirely. Minimizing the last window sends it into multitasking. This is different from previous behavior and might have implications on your app's logic.
If you close the last window and quickly tap the app icon again, that same window will come back. Waiting a second before tapping the app icon will bring up the main window (likely because by that point the app was terminated and relaunched).
Is this expected behavior? I did not see any announcement of this.
I find this a bit counterintuitive and would presume that closing the last window would just send the app to multitasking, just like previously. Quitting the app should be reserved by swiping up on it in the multitasking UI or with a new context menu command.
As of right now Icon Composer does not support creating app icons for visionOS and tvOS. It appears that only system apps can provide glass icons for those platforms. How should developers handle this? In extreme cases, the flat icon on those platforms will look wildly different from their glass counterparts.
From what I have seen visionOS and tvOS also do not apply any automatic treatment like on iOS where legacy icons get a glass effect.
So, third party app icons are just going to look out of place for (hopefully just) a year on those platforms? What is the recommended approach here? You could obviously fake the effect, but I feel like that would be worse.
This app icon features multiple layers with the blend mode set to Screen. iOS fails to render these despite looking perfectly fine in Icon Composer.
This is unacceptable. How can a designer build an icon if they can't rely on it being displayed like the preview on a device?
Filed as FB20052048 with the .icon file attached.
Call Screening has serious issues right now leading to missing calls from genuine callers because the system does not acknowledge them with missed call notifications or badges in a lot of cases. I'm posting this in the hope of catching an engineer who can bring this to the attention of the teams working on this.
Filed as FB20678829
—
I ran the following tests with iOS 26.1 beta 3, but the issues have been occurring on iOS 26.0 as well.
I used an iPhone, Apple Watch, iPad, and Mac for this.
The iPhone has Call Screening enabled with the option „Ask Reason for Calling“
The iPhone has call forwarding enabled to all devices.
Test 1: Active Focus
Turn on a focus like Do not Disturb on all devices.
Lock all devices.
Make a phone call to the iPhone with an unknown number.
Behavior:
iPhone: displays Call Screening UI on the Lock Screen, but it will not light up the screen. You don’t know Call Screening is happening unless you activate the display just in that moment on devices without Always On Display.
Watch: does nothing.
Mac: does nothing.
iPad: displays Call Screening UI on the Lock Screen, but it will not light up the screen. You don’t know Call Screening is happening unless you activate the display just in that moment.
In this test the caller does not answer any of the Call Screening questions and just hangs up. The result is that only the Mac displays a missed call notification. iPhone, iPad, and Watch do not acknowledge the missed call (no phone app icon badge, no notification, no badge inside the Phone app itself), you can only see the call inside the Calls list when manually looking for it.
Test 2: No Focus
Turn off any focus like Do not Disturb on all devices.
Lock all devices.
Make a phone call to the iPhone with an unknown number.
Behavior:
iPhone: displays Call Screening UI on the Lock Screen, but it will not light up the screen. You don’t know Call Screening is happening unless you activate the display just in that moment on devices without Always On Display.
Watch: does nothing.
Mac: displays Call Screening UI when unlocked.
iPad: displays Call Screening UI on the Lock Screen, but it will not light up the screen. You don’t know Call Screening is happening unless you activate the display just in that moment.
In this test the caller does not answer any of the Call Screening questions and just hangs up. The result is that only the Mac displays a missed call notification. iPhone, iPad, and Watch do not acknowledge the missed call (no phone app icon badge, no notification, no badge inside the Phone app itself), you can only see the call inside the Calls list when manually looking for it. The only improvement here is that the Mac now shows the Call Screening UI.
Test 3: Caller answers Call Screening questions
An active focus does not matter.
Lock all devices.
Make a phone call to the iPhone with an unknown number.
Once the caller answered the Call Screening questions, the following happens:
All devices ring like expected
When the caller hangs up or I don’t answer:
Mac: Shows Missed Call notification without details
iPhone: Shows Missed Call notification with transcript of Call Screening (also badges phone app icon)
iPad: does nothing.
Watch: Shows the mirrored iPhone notification.
Things to note:
When turning off call forwarding on iPhone to other Apple devices like iPad and Mac, the phone app icon is always badged for missed calls when Call Screening was active, but no notification is displayed regardless.
When creating a new project in Xcode 26, the default for defaultIsolation is MainActor.
Core Data creates classes for each entity using code gen, but now those classes are also internally marked as MainActor, which causes issues when accessing managed object from a background thread like this.
Is there a way to fix this warning or should Xcode actually mark these auto generated classes as nonisolated to make this better? Filed as FB13840800.
nonisolated
struct BackgroundDataHandler {
@concurrent
func saveItem() async throws {
let context = await PersistenceController.shared.container.newBackgroundContext()
try await context.perform {
let newGame = Item(context: context)
newGame.timestamp = Date.now // Main actor-isolated property 'timestamp' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
try context.save()
}
}
}
Turning code gen off inside the model and creating it manually, with the nonisolated keyword, gets rid of the warning and still works fine. So I guess the auto generated class could adopt this as well?
public import Foundation
public import CoreData
public typealias ItemCoreDataClassSet = NSSet
@objc(Item)
nonisolated
public class Item: NSManagedObject {
}
I have this very simple PersistenceController setup. It's used in both the main app and widget target.
struct PersistenceController {
static let shared = PersistenceController()
@MainActor
static let preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
return result
}()
let container: NSPersistentContainer
/// The main context.
var context: NSManagedObjectContext {
return container.viewContext
}
init(inMemory: Bool = false) {
container = NSPersistentContainer(name: "Gamery")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
} else {
do {
let storeURL = try URL.storeURL(forAppGroup: "XXXXXXXXXX", databaseName: "Gamery")
let storeDescription = NSPersistentStoreDescription(url: storeURL)
/// Enable history tracking for cloud syncing purposes.
storeDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
print("### Persistent container location: \(storeURL)")
container.persistentStoreDescriptions = [storeDescription]
} catch {
print("Failed to retrieve store URL for app group: \(error)")
}
}
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
Crashlytics.crashlytics().record(error: error)
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
#if !WIDGET
if !inMemory {
do {
try container.viewContext.setQueryGenerationFrom(.current)
} catch {
fatalError("###\(#function): Failed to pin viewContext to the current generation: \(error)")
}
}
PersistentHistoryToken.loadToken()
#endif
}
}
I regularly receive crash logs from the widget. I never experienced crashes myself and the widgets work fine.
GameryWidgetExtension/PersistenceController.swift:35:
Fatal error: Unresolved error Error Domain=NSCocoaErrorDomain Code=256 "The file “Gamery.sqlite” couldn’t be opened."
UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/B6A63FE1-ADDC-4A4C-A065-163507E991C6/Gamery.sqlite, NSSQLiteErrorDomain=23},
["NSSQLiteErrorDomain": 23, "NSFilePath": /private/var/mobile/Containers/Shared/AppGroup/B6A63FE1-ADDC-4A4C-A065-163507E991C6/Gamery.sqlite]
I have absolutely no idea what's going on here. Anyone who can help with this?
In a UIKit-based project, I am attempting to integrate SwiftUI components. However, I encounter a persistent issue that hinders this integration.
This problem arises when pushing a SwiftUI view using UIHostingController and subsequently attempting to push a UIKit view controller using UIViewControllerRepresentable. Not only are the navigation items and title from the view controller disregarded, but more concerningly, my tab bar item title is set to nil. This renders it impossible for me to utilize SwiftUI within my application when I wish to present older UIKit view controllers from there.
This feedback has all the details and a sample project.
FB18956999
When a UISearchController is placed inside a search tab, the scope buttons disappear when dismissing the search bar once. They never return. When using in any regular view controller container, like even another default tab, everything works fine. Is there something I can do to prevent this?
Video: https://mastodon.social/@nicoreese/115017696077771370
FB19587916
let homeTab = UITab(
title: "Home",
image: UIImage(systemName: "house"),
identifier: "Home"
) { _ in
UINavigationController(rootViewController: ViewController())
}
let searchTab = UISearchTab { _ in
UINavigationController(rootViewController: SearchViewController())
}
let tabBarController = UITabBarController(tabs: [
homeTab, searchTab
])
tabBarController.mode = .tabSidebar
class SearchViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .systemBackground
self.title = "Home"
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.scopeButtonTitles = [
"Scope 1", "Scope 2"
]
searchController.searchBar.showsScopeBar = true
self.navigationItem.searchController = searchController
}
}
I want to display a grid of items in my widget similar to the systemLarge Shortcuts app widget. I use clipShape(.containerRelative) to get the widget corner radius, but items that do not touch a corner in any way do not get this treatment. This is even worse with the extra large widget. How can I apply the corner radius of the widget minus the padding across all items? It does not seem like the radius is exposed outside of that special shape.
I'm using multiple scenes in my iPad app.
When I open a new scene from my main window, that new window is always the same size as the previous window.
When I make the main window very small and then create a new scene, that new window is also tiny. When I make the main window very big, you guessed it.
UIWindowScene.sizeRestrictions does not seem to help here. How can I give new windows a default size (it's okay if they're resizable after presenting)? This is such a weird behavior.
Video of the problem in action: https://mastodon.social/@nicoreese/115033539035249909
What's the recommended way to add a search bar in Mac Catalyst? The new NSSearchToolbarItem that was introduced in macOS 11 is not available in Catalyst. What's the alternative?
FB7828248