In the Meet AsyncSequence talk, there's a very cool use case that's shown in one of the slides - the new notifications property on NotificationCenter is an async sequence and the code sample does something like:
let notification = await center.notifications(named: ....).first { ... }
This seems really intriguing and useful to me but I had a few questions about the details of how this works:
What is the type of notification in this snippet? A Task? Where would I store this value?
What context should this be invoked in, especially if I want to have a long-running notification filter running that will remain active for the lifetime of the app?
Basically, I'm curious to see an example of the code surrounding this snippet.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I have a few view controllers in a large UIKit application that previously started showing content right below the bottom of the top navigation toolbar.
When testing the same code on iOS 26, these same views have their content extend under the navigation bar and toolbar. I was able to fix it with:
if #available(iOS 26, *, *) {
self.edgesForExtendedLayout = [.bottom]
}
when running on iOS 26. I also fixed one or two places where the main view was anchored to self.view.topAnchor instead of self.view.safeAreaLayoutGuide.topAnchor.
Although this seems to work, I wonder if this was an intended change in iOS 26 or just a temporary bug in the beta that will be resolved.
Were changes made to the safe area and edgesForExtendedLayout logic in iOS 26? If so, is there a place I can see what the specific changes were, so I know my code is handling it properly?
Thanks!
Topic:
UI Frameworks
SubTopic:
UIKit
Are the new digital lounges one-on-one, or is it more like a group chat with many WWDC attendees and Apple engineers in the same room?
I occasionally get this error in Xcode’s console:
Potential Structural Swift Concurrency Issue: unsafeForcedSync called from Swift Concurrent context.
What does this mean, and how can I resolve it? Googling it doesn’t turn up any results.
This doesn't crash the app - it’s just an error diagnostic that I see in the Xcode console. The app keeps running before and after the issue.
Is there a way I can set a breakpoint to catch this where it happens?
In the video ”Create Icons with Icon Composer”, the presenter mentions that Apple has created a layer-to-SVG script for Illustrator that‘s available for download:
Once the artwork is in a good place, next we want to export the layers as SVGs. For every tool, this can look a bit different. For those using Illustrator, we've created a layer to SVG script that will automate this for you, which you can download. Exporting out the canvas size ensures everything drops right into position in Icon Composer.
Here‘s the link to the mention:
https://developer.apple.com/videos/play/wwdc2025/361/?time=377
I can’t find any place to get this script, and my designer is very interested in using it to import our Illustrator icon into Icon Composer.
Can someone point me to it?
I want to use Foundation Models in a project, but I know my users will want to avoid environmentally intensive AI work in data centers.
Does Foundation Models ever use Private Compute Cloud or any other kind of cloud-based AI system?
I'd like to be able to assure my users that the LLM usage is relatively environmentally friendly. It would be great to be able to cite a specific Apple page explaining that Foundation Models work is always done locally.
If there's any chance that work can be done in the cloud, is there a way to opt out of that?
Topic:
Machine Learning & AI
SubTopic:
Foundation Models
Xcode Previews are a great new feature, and I've been adding #Preview blocks to some of my more complex UIKit files so I can tweak their UI without running the app. It's been a blast so far.
The only problem is that I apparently have to set my project deployment target to iOS 17.0 to use them at all. If I set it to iOS 16.0, I get these errors:
'Preview' is only available in iOS 17.0 or newer
'init (_:traits:body:' is only available in iOS 17.0 or newer
'UVPreviewRegistry' is only available in iOS 17.0 or newer
'Preview' is only available in iOS 17.0 or newer
'init (_:traits:body:' is only available in iOS 17.0 or newer
I tried surrounding #Preview with an @availability block for iOS 17, but got the same errors.
My goal is to be able to leave useful #Preview blocks in my source code, but still set my deployment target to iOS 16.
Is this possible?
The new test report, with the automatic video recording and scrubber, is great. I'm setting up different configurations for different languages to improve localization testing, but I was wondering if it was possible to make the simulator device type part of the configuration.
For example, I'd like to have a single test plan with an "iPhone 14" test plan, an "iPad Air" test plan, etc. Then I would just press Cmd-U, and Xcode would run through each device in sequence, leaving me with videos of each test run that I could review in the test report.
Is that possible?
SwiftData includes support for CloudKit sync. However, I don't see any way to add conflict resolution behavior. For example, if different devices set different values for a field, or if a relationship is orphaned because of a deletion on another device, the application has to handle this somehow.
In Core Data (which SwiftData wraps), you can handle this with the conflict resolution system (docs) and classes like NSMergePolicy.
Is any of this accessible in SwiftData? If not, how do you deal with conflicts when syncing a SwiftData model with the cloud?
I'm not comfortable yet installing the iOS beta on my iPhone 15 - is it possible to play with Apple Intelligence in the simulator, or is it on-device only?
Topic:
Machine Learning & AI
SubTopic:
Apple Intelligence
Tags:
iOS
Beta
Simulator
Apple Intelligence
iOS 18.2 includes a new feature called Visual Intelligence. If I hold down the Camera Control on my iPhone, I can take a photo of an object and use Google to look up items similar to what I've photographed.
Is there a way to programmatically open this interface within my app? If so, can I see which result the user selects?
In my app, I have a tab bar controller whose first tab is a navigation controller. Taking a certain action in that controller will push a new controller onto the navigation stack. The new controller has hidesBottomBarWhenPushed set to true, which hides the tab bar and shows the new controller's toolbar.
It's worked like this for years. But in the iOS 26 simulator (I don't have the beta installed on any physical iPhones yet), when I tried this behavior in my app, I instead saw:
the tab bar remained exactly where it was when I pushed the new controller
the toolbar never appeared at all and all of its buttons were inaccessible
If you set the deployment target to iOS 18 and run the code in an iOS 18 simulator:
when you tap "Tap Me", the new controller is pushed onto the screen
simultaneously, the tab bar hides and the second controller's toolbar appears.
If you set the deployment target to iOS 26 and run the code in an iOS 26 simulator:
when you tap "Tap Me", the new controller is pushed onto the screen
the toolbar never appears and the tab bar remains unchanged after the push animation completes
Is this a bug in the iOS 26 beta, or is it an intentional behavior change in how hidesBottomBarWhenPushed works in these cases?
Below is sample code that reproduces the problem:
class TabController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .roundedRect, primaryAction: UIAction(title: "Test Action") { action in
let newController = SecondaryController()
self.navigationController!.pushViewController(newController, animated: true)
})
button.setTitle("Tap Me", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(button)
NSLayoutConstraint.activate([
self.view.centerXAnchor.constraint(equalTo: button.centerXAnchor),
self.view.centerYAnchor.constraint(equalTo: button.centerYAnchor),
])
}
}
class SecondaryController: UIViewController {
override func loadView() {
super.loadView()
self.toolbarItems = [
UIBarButtonItem(image: UIImage(systemName: "plus"), style: .plain, target: nil, action: nil)
]
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isToolbarHidden = false
}
}
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var tabController: UITabBarController?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let tab1 = UITab(title: "Test 1", image: UIImage(systemName: "globe"), identifier: "test1") { _ in
UINavigationController(rootViewController: TabController())
}
let tab2 = UITab(title: "Test 2", image: UIImage(systemName: "globe"), identifier: "test2") { _ in
UINavigationController(rootViewController: TabController())
}
window = UIWindow(windowScene: windowScene)
self.tabController = UITabBarController(tabs: [tab1, tab2])
self.window!.rootViewController = self.tabController
self.window!.makeKeyAndVisible()
}
}
I can see that iOS beta 2 was released yesterday. I'm not running the beta yet on my actual iPhone, but I wanted to see if an issue I reported in beta 1 was fixed.
Is there a way to update my iOS 26 simulator for beta 2? Usually, there's a new Xcode download that includes the new simulator, but it looks like the most recent Xcode beta release was June 9.
Is there a way to programmatically show a UIMenu on iOS on a double-tap event?
I have an app that's been around for over a decade, so there are some UX patterns that I'm reluctant to mess around with.
There is a view in my app with the following properties:
Tapping the view once focuses it and brings it to the front
Double-tapping it shows a view controller as a sheet, with several operations you can perform on that object
Instead of the sheet, I'd like to move to context menus - they look better, and they're more familiar for users. Obviously, adding a context menu for long-press is straightforward (just use UIContextMenuInteraction). But there does not seem to be a way to show the context menu on double-tap.
I've discovered that you can use UIButton with showsMenuAsPrimaryAction to show the menu on single-tap, but that doesn't quite work for me. My users expect a single tap to do something else (focus the view) and will be annoyed if single taps start showing menus instead.
So, is there a way to show a context menu on double tap in iOS?
In Core Data, you can use a pinned query generation to make sure that your app is working from a consistent view of the data store. If you have CloudKit sync turned on, and new changes come in that invalidate relationships, your app won't see them right away as long as it's looking at a pinned query generation.
Since Swift Data doesn't yet support query generations, how do I deal with this issue in Swift Data apps?
For example, let's say I have an address book app. I open a particular contact, and then tap a control on the screen that opens a list of images for that contact. While looking at the images, CloudKit sync retrieves changes made by other devices, which have completely removed the parent contact.
How does my app know this has happened? Suppose the image browser screen needs to refer to the parent contact, or make changes to it, but the contact is no longer there because a background sync removed it.