iOS is the operating system for iPhone.

Posts under iOS tag

200 Posts

Post

Replies

Boosts

Views

Activity

Spatial Scene API for iOS Apps
As part of the WWDC25 Keynote, a technology was announced that can present 2D images as 3D spatial scenes. This announcement is supported by a Press Release. ...developers can use the Spatial Scene API to make their app experience even more immersive. Zillow is taking advantage of the API for their Zillow Immersive app, allowing users to see images of homes and apartments with the rich depth and dimension that spatial scenes offer. The feature also appears in the Photos App on iOS 26 Developer Beta 1. Tapping "Spatial Scene" on any photo opens a view of that photo with a parallax effect. I've searched the WWDC sessions and new documentation and have come up short. Reaching out here for help. Is there any documentation for Spatial Scene API? Or any guidance on how to implement the spatial scene in iOS?
2
2
882
3w
Core Data Transformable attribute with IN %@ predicate returns empty results when array contains more than 100 items on iOS 27
I’m seeing what appears to be a Core Data regression on iOS 27 when using an IN %@ predicate with a Transformable attribute containing String values. Before iOS 27, the following predicate worked correctly regardless of the number of values in the array: [NSPredicate predicateWithFormat:@"field IN %@", valuesArray] On iOS 27, I get different results depending on the number of items in valuesArray: valuesArray.count <= 100 → works correctly and returns the expected objects. valuesArray.count > 100 → returns an empty result, even though matching objects exist in the Core Data database. Reproduction Create a Core Data entity with a Transformable attribute containing String values. Store objects with values in this attribute. Create an array containing matching values. Execute a fetch using: [NSPredicate predicateWithFormat:@"field IN %@", valuesArray] Test with 100 values and then with more than 100 values. The issue is consistently reproducible on iOS 27. Interestingly, I also tested manually transforming the values in the array to the same representation used by the Transformable attribute. When doing this, the predicate works correctly even with more than 100 values. This makes me suspect that iOS 27/Core Data may not correctly transform the values supplied to the IN predicate when the array contains more than 100 items. Has anyone else observed this behavior on iOS 27? Is there a known limitation or change in Core Data predicate handling for Transformable attributes in iOS 27? The same Core Data model and predicate worked correctly on previous iOS versions.
0
0
151
3w
iPhone sync on MacOS Golden Gate 27.0.1 (26A434) caused data exposure out of sandbox
Hi guys, I connected iPhone using USB cable to Mac running Golden Gate 27.0.1 (26A434) and in Finder I selected iPhone to open sync page I was looking at Files tab and trying to get data from one of the apps. As I was doing that at certain point after disconnecting and connecting USB cable I wanted to avoid sync, so when dialog "Trust this computer" showed up on iPhone, I tapped "Cancel". Then when disconnecting cable and connecting again, it started sync and under Files under the app in treeview original data disappeared (a database file and 2 folders with images) and iTunes_Control and Recordings folders showed up instead. I copied these folders to my Mac and there were files containing data. It looks like instead of Documents folder belonging to the app the sync mapped completely different storage location, which should have been protected by sandbox (I'm assuming). I clicked "Eject" icon in Finder, disconnected cable, connected again and it started sync, but ultimately failed with an error that some file does not exist. That dialog presented title with a completely different name than is the name of my iPhone, it presented something like Robert's iPhone, which is a name usually chosen by default when setting up new iPhone. I tried sync 3 times, but nothing helped to fix the problem. Has anyone seen this issue? I completely shutdown iPhone and started again. Sync completed successfully and under that app its original data showed up again (database file and 2 folder with images), iTunes_Control and Recordings folders didn't show up. Is it possible that sync mounted wrong location and exposed data that should have been protected by sandbox and never exposed this way and under wrong app?
1
0
268
3w
TimelineView's custom schedule termination
Hello, How should I terminate my custom implementation of TimelineSchedule? Should I return nil or .distantFuture? Is there actual difference? Please find my sample implementation below: struct FixedNumberSchedule: TimelineSchedule { let count: Int func entries( from startDate: Date, mode: Mode ) -> Entries { Entries(startDate: startDate, count: count) } struct Entries: Sequence, IteratorProtocol { var currentDate: Date? let initialCount: Int var count: Int init(startDate: Date,count: Int) { self.currentDate = startDate self.initialCount = count self.count = count } mutating func next() -> Date? { defer { if count > 1 { currentDate?.addTimeInterval(1) count -= 1 } else { self.currentDate = nil } } print("Seq \(initialCount), \(currentDate, default: "none")") return currentDate } } } Here's the catch: For FixedNumberSchedule(count: 1) I get logs in console: Seq 1, 2026-10-03 10:04:33 +0000 Seq 1, none For FixedNumberSchedule(count: 2) I get infinite logs in console: Seq 2, 2026-10-03 10:04:33 +0000 Seq 2, 2026-10-03 10:04:34 +0000 Seq 2, none Seq 2, none ... Side note: the displayed result is the same for both sequences (the last valid element from second sequence is never displayed). So, If the sequence has more than a single entry to return, it actually never ends. Is this a bug? Of course, if the sequence has ended, I could keep the code as simple as possible. But the loop still troubles me, thus my initial question: Should I actually return nil or .distantFuture? BR, Krystian
0
0
376
4w
Xcode 27: CLLocationManager kCLErrorDomain Code=5
Dear Apple Developer Community, Our app monitors a user-defined region by using startMonitoring on an instance of CLLocationManager. While it works as intended on a real device, starting with Xcode 27, this method invocation always results in >locationManager ... monitoringDidFailFor< being called. The error code is always kCLErrorDomain Code=5 but this only occurs within iOS 27 simulators. It works perfectly in iOS 26 simulators. Additionally, CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) always returns false on these iOS 27 simulators. This issue blocks parts of our automated system tests. Is it a bug or on purpose? Thank you in advance.
1
1
498
4w
Apple Watch remote keyboard (iPhone): pasted text arrives empty on the watch, typed text works (watchOS 27.2)
When a text field on Apple Watch is filled through the iPhone's remote keyboard, text that I PASTE into the iPhone field is displayed correctly on the iPhone but arrives EMPTY on the watch. Typing the same text character by character works fine. This happens in both secure (password) fields and regular text fields, so it doesn't look like a password-field restriction. Steps to reproduce On the watch, open a text field (I tested a password field and a regular one). Open the keyboard on the iPhone when prompted. Copy a short test string (e.g. "test12345") from another app. Paste it into the iPhone field. The iPhone shows the text. Confirm on the watch. Expected: the watch receives the pasted text. Actual: the watch field receives empty input. What I tried Typing the string by hand: arrives correctly. Pasting in a secure field: arrives empty. Pasting in a regular field: arrives empty. Environment iPhone 15 Pro Max, iOS 27.0 [confirm current version] Apple Watch Ultra 2, watchOS 27.2 (24S5091f) MacBook Pro (M1), macOS 27.2 Has anyone else seen this? Any workaround other than typing the text manually would be appreciated.
0
0
479
4w
Tab bar item title doesn't reappear after rotation on iPhone Duo
On iPhone Duo, if a tab bar item's title is set to an empty string while the device is in landscape, setting a non-empty title again after rotating back to portrait doesn't display it. The title stays missing. Filled in FB25015689 Repro: import UIKit @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions ) -> UISceneConfiguration { let config = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role) config.delegateClass = SceneDelegate.self return config } } final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene( _ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions ) { guard let windowScene = scene as? UIWindowScene else { return } let tab = TitleViewController() tab.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 0) let tabBarController = UITabBarController() tabBarController.viewControllers = [tab] let window = UIWindow(windowScene: windowScene) window.rootViewController = tabBarController self.window = window window.makeKeyAndVisible() } } final class TitleViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .systemBackground let hide = UIButton(configuration: .bordered(), primaryAction: UIAction(title: "hidden") { [weak self] _ in self?.setTabTitle("") }) let show = UIButton(configuration: .bordered(), primaryAction: UIAction(title: "visible") { [weak self] _ in self?.setTabTitle("Favorites") }) let stack = UIStackView(arrangedSubviews: [hide, show]) stack.axis = .vertical stack.spacing = 16 stack.translatesAutoresizingMaskIntoConstraints = false view.addSubview(stack) NSLayoutConstraint.activate([ stack.centerXAnchor.constraint(equalTo: view.centerXAnchor), stack.centerYAnchor.constraint(equalTo: view.centerYAnchor), ]) } private func setTabTitle(_ newTitle: String) { title = newTitle tabBarItem.title = newTitle } }
0
2
240
Oct ’26
UITabBarItemStateAppearance selected badgeBackgroundColor is ignored on iOS 27
On iOS 27, selected.badgeBackgroundColor is ignored and the selected tab's badge uses the normal colour instead. This happens on both iPhone Duo (iOS 27.1) and iPhone 18 Pro (iOS 27.0), while iOS 26.2 and 18.6 work correctly. Filled as FB25014925 Repro: import UIKit @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions ) -> UISceneConfiguration { let config = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role) config.delegateClass = SceneDelegate.self return config } } final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene( _ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions ) { guard let windowScene = scene as? UIWindowScene else { return } let purple = UIColor(red: 0xb0 / 255.0, green: 0x7e / 255.0, blue: 0xff / 255.0, alpha: 1) let blue = UIColor(red: 0x00 / 255.0, green: 0xa9 / 255.0, blue: 0xf0 / 255.0, alpha: 1) // Tab1: badge "1", no appearance. let tab1 = makeTab(title: "Tab1", badge: "1", text: "Tab1\nNo appearance set") // Tab3: badge "NEW!", normal PURPLE, selected BLUE. let tab3 = makeTab( title: "Tab3", badge: "NEW!", text: "Tab3\nnormal badgeBackgroundColor: PURPLE\nselected badgeBackgroundColor: BLUE") let appearance = UITabBarAppearance() appearance.stackedLayoutAppearance.normal.badgeBackgroundColor = purple appearance.stackedLayoutAppearance.selected.badgeBackgroundColor = blue tab3.tabBarItem.standardAppearance = appearance let tabBarController = UITabBarController() tabBarController.viewControllers = [tab1, tab3] tabBarController.selectedIndex = ProcessInfo.processInfo.arguments.contains("-selectFirst") ? 0 : 1 let window = UIWindow(windowScene: windowScene) window.rootViewController = tabBarController self.window = window window.makeKeyAndVisible() } private func makeTab(title: String, badge: String, text: String) -> UIViewController { let vc = UIViewController() vc.view.backgroundColor = .systemBackground vc.tabBarItem = UITabBarItem(title: title, image: UIImage(systemName: "star"), selectedImage: nil) vc.tabBarItem.badgeValue = badge let label = UILabel() label.text = text label.numberOfLines = 0 label.textAlignment = .center label.translatesAutoresizingMaskIntoConstraints = false vc.view.addSubview(label) NSLayoutConstraint.activate([ label.centerXAnchor.constraint(equalTo: vc.view.centerXAnchor), label.centerYAnchor.constraint(equalTo: vc.view.centerYAnchor), label.widthAnchor.constraint(lessThanOrEqualTo: vc.view.widthAnchor, constant: -32), ]) return vc } }
0
2
180
Oct ’26
Universal Links: Source countries or IP ranges used to retrieve AASA file
I’m looking for clarification on how Apple retrieves the apple-app-site-association (AASA) file for Universal Links / Associated Domains. Assume a domain exposes the AASA file at: https://example.com/.well-known/apple-app-site-association The domain is protected by Geo-Blocking, where access from certain countries/regions is restricted. I would like to understand the expected network behavior for AASA retrieval: Can requests to retrieve the AASA file originate from Apple infrastructure in different countries or regions globally? Does Apple publish a list of source countries, IP addresses, IP ranges, or network ranges specifically used for AASA retrieval? Can the source country or IP address change over time due to Apple's infrastructure, CDN, or routing? Is there any supported way to force AASA retrieval through a particular region, such as the US? If certain countries are blocked, is there any way to determine whether Apple may use infrastructure from those countries for AASA retrieval? Is the recommended approach to allow the following endpoint to be publicly reachable regardless of source geography? The objective is to restrict access as much as possible while ensuring that Universal Links continue to work reliably. If there is any official Apple documentation covering the source network, IP ranges, geographic locations, or accessibility requirements for AASA retrieval, a reference would be greatly appreciated.
1
0
283
Oct ’26
Xcode is not supported by this device
Hi, When I run a build and select my iPhone, I get this error: "The capability “Fetch Extended Device Info” is not supported by this device." Although it works correctly when I run the build on the Simulator on my Mac. I recently updated my iPhone to iOS 27.2. Could this be the problem? Is there any way to fix it, or should I wait for an Xcode update? I tried running it in version Xcode 26.5 and 27Beta Thanks!
0
0
264
Sep ’26
iOS 27: UIBarButtonItem custom view is clipped to its Liquid Glass capsule only while pressed, not at rest (regression from iOS 26)
I have a UIBarButtonItem created with init(customView:). The custom view draws some content outside its own bounds (clipsToBounds = false). On iOS 26, that content is clipped to the item's Liquid Glass capsule all the time, both at rest and while the item is pressed. On iOS 27, the clipping is inconsistent. At rest, the content outside the custom view's bounds is fully visible. While I press the item, it gets clipped to the shape of the Liquid Glass bubble. When I let go, it's fully visible again. So the item's content changes shape during a touch. iOS 26.2, at rest: clipped to the capsule iOS 26.2, while pressed: clipped to the capsule iOS 27, at rest: not clipped, the overflowing content is visible iOS 27, while pressed: clipped to the bubble Reproduced on the iPhone Duo simulator (iOS 27.1) and an iPhone 18 Pro (iOS 27). On an iPhone 17 Pro simulator with iOS 26.2 the behavior is consistent. Filed as FB25001846. Steps: Put the view controller below in a UINavigationController and run it on iOS 27. Look at the right bar button item at rest: the yellow area is visible around the green button. Press and hold the button: the yellow area is clipped to the rounded bubble. Run the same code on iOS 26: the yellow area is never visible. final class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() title = "Clipping" view.backgroundColor = .systemBackground // A button used as the bar button item's custom view. let button = UIButton(type: .custom) button.backgroundColor = .systemGreen button.setTitle("Press me", for: .normal) button.setTitleColor(.white, for: .normal) button.addAction(UIAction { _ in print("Pressed") }, for: .touchUpInside) button.sizeToFit() let size = button.bounds.size // The custom view is exactly as big as the button, but draws a yellow background // that extends 12pt outside its bounds on every side. let customView = UIView() customView.clipsToBounds = false customView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ customView.widthAnchor.constraint(equalToConstant: size.width), customView.heightAnchor.constraint(equalToConstant: size.height), ]) let overflow = UIView(frame: CGRect(origin: .zero, size: size).insetBy(dx: -12, dy: -12)) overflow.backgroundColor = .systemYellow customView.addSubview(overflow) customView.addSubview(button) navigationItem.rightBarButtonItem = UIBarButtonItem(customView: customView) } }
0
2
259
Sep ’26
In iOS26, UITableview can't display cell,but cells can be selected!
We have received several cases that our app can not display uitableview cell in iOS26, but users said that they can select cells with single tab and the uitableview didselectcell delegate can response! I have reported a feedback but no response. Does anyone have the same bugs with me? You guys can see that the page is blank, I have a video a user sent to me can proved that he can select cell with gesture. We cannot reproduce the bug and don't konw how to fixed, we think this is the bug with iOS26, so here for some help. This bug block our distribution of new version(support iOS26) This is the feedback https://feedbackassistant.apple.com/feedback/20677046
2
0
597
Sep ’26
iOS leaves an accessory's no-internet Wi-Fi (NEHotspotConfiguration) for a saved network mid-session
We're building an iOS and Android app that transfers files to and from a device over a Wi-Fi network the device creates. That network has no internet access. The app gets the Wi-Fi credentials from the device (over Bluetooth, or from a QR code on its screen) and joins with NEHotspotConfiguration. Android works reliably. On iOS, partway through a session the phone leaves the device's network and joins a saved network that has internet, which breaks our connection to the device. Setup: iPhone 13 Pro, iOS 26.x NEHotspotConfiguration(ssid:passphrase:isWEP: false) with joinOnce = false. With joinOnce = true, iOS usually stays on the current internet Wi-Fi and never joins the device's network. WPA2. The device is at 192.168.4.1, and its DHCP server hands out the device as router and DNS. Device traffic: NWConnection (TCP) with prohibitedInterfaceTypes = [.cellular]. Server traffic: a separate NWConnection with requiredInterfaceType = .cellular. Wi-Fi Assist is off. Example: we read an 8 MB file from the device (30 s, no problem), then post it to our server over cellular (93 s). During the post, the device connection carries only a small message every ~15 s. 28 s into the post, NWPathMonitor shows Wi-Fi drop out for 3 s, and when it returns the phone is on the our primary network. Occasionally iOS shows a prompt asking whether to stay connected without internet, but usually it switches without asking. We haven't seen it switch during the file read, while the device connection is busy. Questions: Is there a supported way to keep iOS on a device's no-internet network for a whole session? Does traffic on the Wi-Fi interface (such as an active NWConnection) affect whether iOS switches away? Would a DHCP configuration without a router or DNS server change how iOS treats the network? Is joinOnce = false right for this, or can joinOnce = true join when the phone is already on an internet-capable Wi-Fi?
1
0
533
Sep ’26
navigationTransition in NavigationStack does not work in sheets in iOS 27
navigationTransition(_ style: some NavigationTransition) in NavigationStack does not work in sheets in iOS 27 and iPadOS 27. NavigationTransitions allow a smooth transition from one view to another. An app perfectly working on iOS/iPadOS 26.x does not work correctly on iOS/iPadOS 27.x We have made a simple sample project to show the issue. On 26 OSes there are smooth transitions, on 27.0 when a navigationTransition should occur after a push in the NavigationStack in a sheet, the sheet becomes invisible (the main screen reappears) and suddenly the new view appears without transition. Sample project in Feedback FB24996035 Sample line with the issue SecondPathView(namespace: namespace, path: $path) .navigationTransition(.zoom(sourceID: transitionFromFirstPathId, in: namespace))
0
1
489
Sep ’26
macOS CoreBluetooth peripheral: duplicate Device Information services and iOS gamepad recognition
I’m developing a macOS app that reads a wired controller and publishes a generic BLE HID gamepad for an iPhone. BLE communication works, but iOS does not expose the device through GameController. I’m looking for guidance on supported device-identity publication and controller-admission requirements. Environment Apple Silicon MacBookPro17,1: macOS 27.0, build 26A428 iPhone 15 Pro Max: iOS 27.0, build 24A437 Xcode 27 Peripheral implemented using CBPeripheralManager What works The iPhone can connect, perform dynamic characteristic reads, and read encryption-required characteristics using the retained pairing. It discovers the application’s HID service and reads its Report Map, HID Information, Report Reference, and Input Report. The descriptor in the iPhone’s system HID record matches the application’s remotely read report map byte-for-byte. The peripheral also receives an input subscription, although I cannot independently identify the subscribing consumer. What fails An independent GCController.controllers() observer remains empty. During the recorded HID initialization, the iPhone logs: Un-authenticated game controller device attached Start failed: 0xe00002bc IOHIDEventDriver start failed. For the same registry device, gamecontrollerd records: vendorID = 0 productID = 0 version = 0 manufacturer = 'Apple Inc.' product = '[Mac device name]' transport = 'BluetoothLowEnergy' I am not assuming that “Un-authenticated” identifies a specific authentication requirement. I would like to understand which supported admission requirement is unmet. Device Information observations The iPhone’s CoreBluetooth discovery exposes two distinct Device Information service instances: System service Observed UUID: 180A Manufacturer: Apple Inc. Model: MacBookPro17,1 No PnP characteristic exposed by successful all-characteristic discovery Application service Observed UUID: 0000180A-0000-1000-8000-00805F9B34FB Manufacturer: PS3 Bridge Model: BLE Gamepad Prototype PnP bytes: 02 00 00 01 00 00 01 The application publishes expanded Bluetooth-base UUIDs. I understand these represent the same assigned UUIDs; I am preserving the observed representations because I have not established whether every host component handles them identically. The application PnP value represents vendor-ID source 2, vendor 0, product 1, and version 0x0100. The system HID record therefore does not simply reflect that value unchanged. The duplicate-DIS layout also appears inconsistent with the unique primary DIS expected by HOGP. I have not established that this causes the driver rejection. Questions Is there a supported macOS API or architecture for publishing a coherent BLE HID device identity when macOS already exposes its own Device Information service? How does iOS select DIS/PnP information when constructing a system HID device in this arrangement? Is a generic BLE HID gamepad published through macOS CoreBluetooth a supported path to iOS GameController recognition? If so, what additional profile, identity, or authentication requirements apply? What supported diagnostics would distinguish an identity-selection problem from a separate controller-admission requirement? Available evidence I have diagnostic source, corrected per-service-instance inventories, and redacted phone logs available. I also have a small standalone CoreBluetooth publication reproducer. It is reduced and has not been validated as independently reproducing the full bridge’s controller rejection. A later connection-only observation reused an existing shared Bluetooth link and still showed zero controllers. I am not treating that as a fresh HID initialization or admission attempt. I’m seeking a supported implementation path without private APIs, Bluetooth daemon modifications, or changes to system security.
1
0
439
Sep ’26
Live Caller ID Lookup: 1-second blocking timeout is often exceeded on real-world networks
We ship a Live Caller ID Lookup extension (PIR-based) for spam call blocking. It works, and our PIR server is fast. But in practice, whether a call gets blocked depends on the quality of the user's internet connection at the moment the call arrives. The system waits only about 1 second for the blocking response. On a fast, stable connection it arrives in time. On an average or unstable connection it often doesn't, and the spam call rings through. So under the current platform limits we cannot guarantee blocking for every call. How we measured For each call we read the device syslog (CommCenter, CallDirectory, ciphermld, callservicesd) and our server logs. The extension cache was reset before each call, so every call triggered a real network lookup. All times are in ms and measured from addNewIncomingCall. Server-side processing of the PIR query was consistently 51–61 ms. The variance is almost entirely network transfer between the device and the server (or relay): In call D, HTTP/2 metrics show the ~28 KB request was handed to the network stack immediately (outbound_duration_ms=0), but response headers arrived only after 2216 ms. In call E, the device waited ~660 ms between finishing the upload to the relay and receiving the first byte of the response. Connection setup on a new connection cost 176–271 ms (DNS + TCP + TLS, or a QUIC handshake to the relay). Before the first byte was sent, the system spent another 54–225 ms after the call arrived. In the failing cases the syslog shows: CallDirectory: not all blocking fetches returned within 1 second(s) callservicesd: shouldBlock: NO shouldSilence NO The block response (shouldBlock=1) then arrives 100–1500 ms too late, and the call keeps ringing. What works: repeat calls After the first lookup the result is cached on the device. A repeat call from the same number is silenced without contacting the server, whatever the connection speed. In our logs, follow-up calls from the same number were silenced within ~65 ms of addNewIncomingCall, with no network request. So a user may get the first spam call from a number but not the next ones. The first call, though, is exactly the one users complain about. The problem with the 1-second budget Each blocking lookup has to: Send a PIR query Receive a response of ~22–25 KB. Often open a new TLS/QUIC connection through the OHTTP relay. All of this has to fit into about 1 second, together with the system's own overhead before the request is sent. On a good connection that takes about 250–650 ms. On an average mobile or congested Wi-Fi connection it easily goes past 1 second, and nothing the developer can optimize on the server helps. Our server already responds in about 50 ms.
1
1
515
Sep ’26
URLSession fails with -1009 on physical iPhone 16 Pro Max running iOS 27 beta, works in Simulator
I’m building a SwiftUI app that fetches public JSON data using URLSession.shared. The request works correctly in the iPhone 17 Pro Max Simulator, but fails on my physical iPhone 16 Pro Max running iOS 27 beta. Endpoint: https://api.jolpi.ca/ergast/f1/2026/driverstandings.json?limit=100 Error: NSURLErrorDomain Code=-1009 “The Internet connection appears to be offline.” NWPath: unsatisfied (Denied over Wi-Fi interface) Resolved 0 endpoints in 1ms The device can access the endpoint through Safari, and the same request works in Simulator. VPN, cellular permissions, Wi-Fi changes, and ATS settings have been checked. Could this be an iOS 27 beta networking regression affecting URLSession on physical devices? Are there recommended workarounds or diagnostics?
1
0
955
Sep ’26
Spatial Scene API for iOS Apps
As part of the WWDC25 Keynote, a technology was announced that can present 2D images as 3D spatial scenes. This announcement is supported by a Press Release. ...developers can use the Spatial Scene API to make their app experience even more immersive. Zillow is taking advantage of the API for their Zillow Immersive app, allowing users to see images of homes and apartments with the rich depth and dimension that spatial scenes offer. The feature also appears in the Photos App on iOS 26 Developer Beta 1. Tapping "Spatial Scene" on any photo opens a view of that photo with a parallax effect. I've searched the WWDC sessions and new documentation and have come up short. Reaching out here for help. Is there any documentation for Spatial Scene API? Or any guidance on how to implement the spatial scene in iOS?
Replies
2
Boosts
2
Views
882
Activity
3w
Core Data Transformable attribute with IN %@ predicate returns empty results when array contains more than 100 items on iOS 27
I’m seeing what appears to be a Core Data regression on iOS 27 when using an IN %@ predicate with a Transformable attribute containing String values. Before iOS 27, the following predicate worked correctly regardless of the number of values in the array: [NSPredicate predicateWithFormat:@"field IN %@", valuesArray] On iOS 27, I get different results depending on the number of items in valuesArray: valuesArray.count <= 100 → works correctly and returns the expected objects. valuesArray.count > 100 → returns an empty result, even though matching objects exist in the Core Data database. Reproduction Create a Core Data entity with a Transformable attribute containing String values. Store objects with values in this attribute. Create an array containing matching values. Execute a fetch using: [NSPredicate predicateWithFormat:@"field IN %@", valuesArray] Test with 100 values and then with more than 100 values. The issue is consistently reproducible on iOS 27. Interestingly, I also tested manually transforming the values in the array to the same representation used by the Transformable attribute. When doing this, the predicate works correctly even with more than 100 values. This makes me suspect that iOS 27/Core Data may not correctly transform the values supplied to the IN predicate when the array contains more than 100 items. Has anyone else observed this behavior on iOS 27? Is there a known limitation or change in Core Data predicate handling for Transformable attributes in iOS 27? The same Core Data model and predicate worked correctly on previous iOS versions.
Replies
0
Boosts
0
Views
151
Activity
3w
iPhone sync on MacOS Golden Gate 27.0.1 (26A434) caused data exposure out of sandbox
Hi guys, I connected iPhone using USB cable to Mac running Golden Gate 27.0.1 (26A434) and in Finder I selected iPhone to open sync page I was looking at Files tab and trying to get data from one of the apps. As I was doing that at certain point after disconnecting and connecting USB cable I wanted to avoid sync, so when dialog "Trust this computer" showed up on iPhone, I tapped "Cancel". Then when disconnecting cable and connecting again, it started sync and under Files under the app in treeview original data disappeared (a database file and 2 folders with images) and iTunes_Control and Recordings folders showed up instead. I copied these folders to my Mac and there were files containing data. It looks like instead of Documents folder belonging to the app the sync mapped completely different storage location, which should have been protected by sandbox (I'm assuming). I clicked "Eject" icon in Finder, disconnected cable, connected again and it started sync, but ultimately failed with an error that some file does not exist. That dialog presented title with a completely different name than is the name of my iPhone, it presented something like Robert's iPhone, which is a name usually chosen by default when setting up new iPhone. I tried sync 3 times, but nothing helped to fix the problem. Has anyone seen this issue? I completely shutdown iPhone and started again. Sync completed successfully and under that app its original data showed up again (database file and 2 folder with images), iTunes_Control and Recordings folders didn't show up. Is it possible that sync mounted wrong location and exposed data that should have been protected by sandbox and never exposed this way and under wrong app?
Replies
1
Boosts
0
Views
268
Activity
3w
TimelineView's custom schedule termination
Hello, How should I terminate my custom implementation of TimelineSchedule? Should I return nil or .distantFuture? Is there actual difference? Please find my sample implementation below: struct FixedNumberSchedule: TimelineSchedule { let count: Int func entries( from startDate: Date, mode: Mode ) -> Entries { Entries(startDate: startDate, count: count) } struct Entries: Sequence, IteratorProtocol { var currentDate: Date? let initialCount: Int var count: Int init(startDate: Date,count: Int) { self.currentDate = startDate self.initialCount = count self.count = count } mutating func next() -> Date? { defer { if count > 1 { currentDate?.addTimeInterval(1) count -= 1 } else { self.currentDate = nil } } print("Seq \(initialCount), \(currentDate, default: "none")") return currentDate } } } Here's the catch: For FixedNumberSchedule(count: 1) I get logs in console: Seq 1, 2026-10-03 10:04:33 +0000 Seq 1, none For FixedNumberSchedule(count: 2) I get infinite logs in console: Seq 2, 2026-10-03 10:04:33 +0000 Seq 2, 2026-10-03 10:04:34 +0000 Seq 2, none Seq 2, none ... Side note: the displayed result is the same for both sequences (the last valid element from second sequence is never displayed). So, If the sequence has more than a single entry to return, it actually never ends. Is this a bug? Of course, if the sequence has ended, I could keep the code as simple as possible. But the loop still troubles me, thus my initial question: Should I actually return nil or .distantFuture? BR, Krystian
Replies
0
Boosts
0
Views
376
Activity
4w
Xcode 27: CLLocationManager kCLErrorDomain Code=5
Dear Apple Developer Community, Our app monitors a user-defined region by using startMonitoring on an instance of CLLocationManager. While it works as intended on a real device, starting with Xcode 27, this method invocation always results in >locationManager ... monitoringDidFailFor< being called. The error code is always kCLErrorDomain Code=5 but this only occurs within iOS 27 simulators. It works perfectly in iOS 26 simulators. Additionally, CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) always returns false on these iOS 27 simulators. This issue blocks parts of our automated system tests. Is it a bug or on purpose? Thank you in advance.
Replies
1
Boosts
1
Views
498
Activity
4w
Migrate app from personal account to business account
I want to release an app under my company's name. From what I understand you need a DUNS number to verify your business. Because that takes about 30 days to be granted, I was thinking of releasing the app under my personal name and then moving it to the business account. Is that something I could do? Thanks
Replies
3
Boosts
0
Views
883
Activity
4w
Apple Watch remote keyboard (iPhone): pasted text arrives empty on the watch, typed text works (watchOS 27.2)
When a text field on Apple Watch is filled through the iPhone's remote keyboard, text that I PASTE into the iPhone field is displayed correctly on the iPhone but arrives EMPTY on the watch. Typing the same text character by character works fine. This happens in both secure (password) fields and regular text fields, so it doesn't look like a password-field restriction. Steps to reproduce On the watch, open a text field (I tested a password field and a regular one). Open the keyboard on the iPhone when prompted. Copy a short test string (e.g. "test12345") from another app. Paste it into the iPhone field. The iPhone shows the text. Confirm on the watch. Expected: the watch receives the pasted text. Actual: the watch field receives empty input. What I tried Typing the string by hand: arrives correctly. Pasting in a secure field: arrives empty. Pasting in a regular field: arrives empty. Environment iPhone 15 Pro Max, iOS 27.0 [confirm current version] Apple Watch Ultra 2, watchOS 27.2 (24S5091f) MacBook Pro (M1), macOS 27.2 Has anyone else seen this? Any workaround other than typing the text manually would be appreciated.
Replies
0
Boosts
0
Views
479
Activity
4w
Tab bar item title doesn't reappear after rotation on iPhone Duo
On iPhone Duo, if a tab bar item's title is set to an empty string while the device is in landscape, setting a non-empty title again after rotating back to portrait doesn't display it. The title stays missing. Filled in FB25015689 Repro: import UIKit @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions ) -> UISceneConfiguration { let config = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role) config.delegateClass = SceneDelegate.self return config } } final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene( _ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions ) { guard let windowScene = scene as? UIWindowScene else { return } let tab = TitleViewController() tab.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 0) let tabBarController = UITabBarController() tabBarController.viewControllers = [tab] let window = UIWindow(windowScene: windowScene) window.rootViewController = tabBarController self.window = window window.makeKeyAndVisible() } } final class TitleViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .systemBackground let hide = UIButton(configuration: .bordered(), primaryAction: UIAction(title: "hidden") { [weak self] _ in self?.setTabTitle("") }) let show = UIButton(configuration: .bordered(), primaryAction: UIAction(title: "visible") { [weak self] _ in self?.setTabTitle("Favorites") }) let stack = UIStackView(arrangedSubviews: [hide, show]) stack.axis = .vertical stack.spacing = 16 stack.translatesAutoresizingMaskIntoConstraints = false view.addSubview(stack) NSLayoutConstraint.activate([ stack.centerXAnchor.constraint(equalTo: view.centerXAnchor), stack.centerYAnchor.constraint(equalTo: view.centerYAnchor), ]) } private func setTabTitle(_ newTitle: String) { title = newTitle tabBarItem.title = newTitle } }
Replies
0
Boosts
2
Views
240
Activity
Oct ’26
UITabBarItemStateAppearance selected badgeBackgroundColor is ignored on iOS 27
On iOS 27, selected.badgeBackgroundColor is ignored and the selected tab's badge uses the normal colour instead. This happens on both iPhone Duo (iOS 27.1) and iPhone 18 Pro (iOS 27.0), while iOS 26.2 and 18.6 work correctly. Filled as FB25014925 Repro: import UIKit @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions ) -> UISceneConfiguration { let config = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role) config.delegateClass = SceneDelegate.self return config } } final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene( _ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions ) { guard let windowScene = scene as? UIWindowScene else { return } let purple = UIColor(red: 0xb0 / 255.0, green: 0x7e / 255.0, blue: 0xff / 255.0, alpha: 1) let blue = UIColor(red: 0x00 / 255.0, green: 0xa9 / 255.0, blue: 0xf0 / 255.0, alpha: 1) // Tab1: badge "1", no appearance. let tab1 = makeTab(title: "Tab1", badge: "1", text: "Tab1\nNo appearance set") // Tab3: badge "NEW!", normal PURPLE, selected BLUE. let tab3 = makeTab( title: "Tab3", badge: "NEW!", text: "Tab3\nnormal badgeBackgroundColor: PURPLE\nselected badgeBackgroundColor: BLUE") let appearance = UITabBarAppearance() appearance.stackedLayoutAppearance.normal.badgeBackgroundColor = purple appearance.stackedLayoutAppearance.selected.badgeBackgroundColor = blue tab3.tabBarItem.standardAppearance = appearance let tabBarController = UITabBarController() tabBarController.viewControllers = [tab1, tab3] tabBarController.selectedIndex = ProcessInfo.processInfo.arguments.contains("-selectFirst") ? 0 : 1 let window = UIWindow(windowScene: windowScene) window.rootViewController = tabBarController self.window = window window.makeKeyAndVisible() } private func makeTab(title: String, badge: String, text: String) -> UIViewController { let vc = UIViewController() vc.view.backgroundColor = .systemBackground vc.tabBarItem = UITabBarItem(title: title, image: UIImage(systemName: "star"), selectedImage: nil) vc.tabBarItem.badgeValue = badge let label = UILabel() label.text = text label.numberOfLines = 0 label.textAlignment = .center label.translatesAutoresizingMaskIntoConstraints = false vc.view.addSubview(label) NSLayoutConstraint.activate([ label.centerXAnchor.constraint(equalTo: vc.view.centerXAnchor), label.centerYAnchor.constraint(equalTo: vc.view.centerYAnchor), label.widthAnchor.constraint(lessThanOrEqualTo: vc.view.widthAnchor, constant: -32), ]) return vc } }
Replies
0
Boosts
2
Views
180
Activity
Oct ’26
Universal Links: Source countries or IP ranges used to retrieve AASA file
I’m looking for clarification on how Apple retrieves the apple-app-site-association (AASA) file for Universal Links / Associated Domains. Assume a domain exposes the AASA file at: https://example.com/.well-known/apple-app-site-association The domain is protected by Geo-Blocking, where access from certain countries/regions is restricted. I would like to understand the expected network behavior for AASA retrieval: Can requests to retrieve the AASA file originate from Apple infrastructure in different countries or regions globally? Does Apple publish a list of source countries, IP addresses, IP ranges, or network ranges specifically used for AASA retrieval? Can the source country or IP address change over time due to Apple's infrastructure, CDN, or routing? Is there any supported way to force AASA retrieval through a particular region, such as the US? If certain countries are blocked, is there any way to determine whether Apple may use infrastructure from those countries for AASA retrieval? Is the recommended approach to allow the following endpoint to be publicly reachable regardless of source geography? The objective is to restrict access as much as possible while ensuring that Universal Links continue to work reliably. If there is any official Apple documentation covering the source network, IP ranges, geographic locations, or accessibility requirements for AASA retrieval, a reference would be greatly appreciated.
Replies
1
Boosts
0
Views
283
Activity
Oct ’26
Xcode is not supported by this device
Hi, When I run a build and select my iPhone, I get this error: "The capability “Fetch Extended Device Info” is not supported by this device." Although it works correctly when I run the build on the Simulator on my Mac. I recently updated my iPhone to iOS 27.2. Could this be the problem? Is there any way to fix it, or should I wait for an Xcode update? I tried running it in version Xcode 26.5 and 27Beta Thanks!
Replies
0
Boosts
0
Views
264
Activity
Sep ’26
iOS 27: UIBarButtonItem custom view is clipped to its Liquid Glass capsule only while pressed, not at rest (regression from iOS 26)
I have a UIBarButtonItem created with init(customView:). The custom view draws some content outside its own bounds (clipsToBounds = false). On iOS 26, that content is clipped to the item's Liquid Glass capsule all the time, both at rest and while the item is pressed. On iOS 27, the clipping is inconsistent. At rest, the content outside the custom view's bounds is fully visible. While I press the item, it gets clipped to the shape of the Liquid Glass bubble. When I let go, it's fully visible again. So the item's content changes shape during a touch. iOS 26.2, at rest: clipped to the capsule iOS 26.2, while pressed: clipped to the capsule iOS 27, at rest: not clipped, the overflowing content is visible iOS 27, while pressed: clipped to the bubble Reproduced on the iPhone Duo simulator (iOS 27.1) and an iPhone 18 Pro (iOS 27). On an iPhone 17 Pro simulator with iOS 26.2 the behavior is consistent. Filed as FB25001846. Steps: Put the view controller below in a UINavigationController and run it on iOS 27. Look at the right bar button item at rest: the yellow area is visible around the green button. Press and hold the button: the yellow area is clipped to the rounded bubble. Run the same code on iOS 26: the yellow area is never visible. final class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() title = "Clipping" view.backgroundColor = .systemBackground // A button used as the bar button item's custom view. let button = UIButton(type: .custom) button.backgroundColor = .systemGreen button.setTitle("Press me", for: .normal) button.setTitleColor(.white, for: .normal) button.addAction(UIAction { _ in print("Pressed") }, for: .touchUpInside) button.sizeToFit() let size = button.bounds.size // The custom view is exactly as big as the button, but draws a yellow background // that extends 12pt outside its bounds on every side. let customView = UIView() customView.clipsToBounds = false customView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ customView.widthAnchor.constraint(equalToConstant: size.width), customView.heightAnchor.constraint(equalToConstant: size.height), ]) let overflow = UIView(frame: CGRect(origin: .zero, size: size).insetBy(dx: -12, dy: -12)) overflow.backgroundColor = .systemYellow customView.addSubview(overflow) customView.addSubview(button) navigationItem.rightBarButtonItem = UIBarButtonItem(customView: customView) } }
Replies
0
Boosts
2
Views
259
Activity
Sep ’26
In iOS26, UITableview can't display cell,but cells can be selected!
We have received several cases that our app can not display uitableview cell in iOS26, but users said that they can select cells with single tab and the uitableview didselectcell delegate can response! I have reported a feedback but no response. Does anyone have the same bugs with me? You guys can see that the page is blank, I have a video a user sent to me can proved that he can select cell with gesture. We cannot reproduce the bug and don't konw how to fixed, we think this is the bug with iOS26, so here for some help. This bug block our distribution of new version(support iOS26) This is the feedback https://feedbackassistant.apple.com/feedback/20677046
Replies
2
Boosts
0
Views
597
Activity
Sep ’26
iOS leaves an accessory's no-internet Wi-Fi (NEHotspotConfiguration) for a saved network mid-session
We're building an iOS and Android app that transfers files to and from a device over a Wi-Fi network the device creates. That network has no internet access. The app gets the Wi-Fi credentials from the device (over Bluetooth, or from a QR code on its screen) and joins with NEHotspotConfiguration. Android works reliably. On iOS, partway through a session the phone leaves the device's network and joins a saved network that has internet, which breaks our connection to the device. Setup: iPhone 13 Pro, iOS 26.x NEHotspotConfiguration(ssid:passphrase:isWEP: false) with joinOnce = false. With joinOnce = true, iOS usually stays on the current internet Wi-Fi and never joins the device's network. WPA2. The device is at 192.168.4.1, and its DHCP server hands out the device as router and DNS. Device traffic: NWConnection (TCP) with prohibitedInterfaceTypes = [.cellular]. Server traffic: a separate NWConnection with requiredInterfaceType = .cellular. Wi-Fi Assist is off. Example: we read an 8 MB file from the device (30 s, no problem), then post it to our server over cellular (93 s). During the post, the device connection carries only a small message every ~15 s. 28 s into the post, NWPathMonitor shows Wi-Fi drop out for 3 s, and when it returns the phone is on the our primary network. Occasionally iOS shows a prompt asking whether to stay connected without internet, but usually it switches without asking. We haven't seen it switch during the file read, while the device connection is busy. Questions: Is there a supported way to keep iOS on a device's no-internet network for a whole session? Does traffic on the Wi-Fi interface (such as an active NWConnection) affect whether iOS switches away? Would a DHCP configuration without a router or DNS server change how iOS treats the network? Is joinOnce = false right for this, or can joinOnce = true join when the phone is already on an internet-capable Wi-Fi?
Replies
1
Boosts
0
Views
533
Activity
Sep ’26
navigationTransition in NavigationStack does not work in sheets in iOS 27
navigationTransition(_ style: some NavigationTransition) in NavigationStack does not work in sheets in iOS 27 and iPadOS 27. NavigationTransitions allow a smooth transition from one view to another. An app perfectly working on iOS/iPadOS 26.x does not work correctly on iOS/iPadOS 27.x We have made a simple sample project to show the issue. On 26 OSes there are smooth transitions, on 27.0 when a navigationTransition should occur after a push in the NavigationStack in a sheet, the sheet becomes invisible (the main screen reappears) and suddenly the new view appears without transition. Sample project in Feedback FB24996035 Sample line with the issue SecondPathView(namespace: namespace, path: $path) .navigationTransition(.zoom(sourceID: transitionFromFirstPathId, in: namespace))
Replies
0
Boosts
1
Views
489
Activity
Sep ’26
macOS CoreBluetooth peripheral: duplicate Device Information services and iOS gamepad recognition
I’m developing a macOS app that reads a wired controller and publishes a generic BLE HID gamepad for an iPhone. BLE communication works, but iOS does not expose the device through GameController. I’m looking for guidance on supported device-identity publication and controller-admission requirements. Environment Apple Silicon MacBookPro17,1: macOS 27.0, build 26A428 iPhone 15 Pro Max: iOS 27.0, build 24A437 Xcode 27 Peripheral implemented using CBPeripheralManager What works The iPhone can connect, perform dynamic characteristic reads, and read encryption-required characteristics using the retained pairing. It discovers the application’s HID service and reads its Report Map, HID Information, Report Reference, and Input Report. The descriptor in the iPhone’s system HID record matches the application’s remotely read report map byte-for-byte. The peripheral also receives an input subscription, although I cannot independently identify the subscribing consumer. What fails An independent GCController.controllers() observer remains empty. During the recorded HID initialization, the iPhone logs: Un-authenticated game controller device attached Start failed: 0xe00002bc IOHIDEventDriver start failed. For the same registry device, gamecontrollerd records: vendorID = 0 productID = 0 version = 0 manufacturer = 'Apple Inc.' product = '[Mac device name]' transport = 'BluetoothLowEnergy' I am not assuming that “Un-authenticated” identifies a specific authentication requirement. I would like to understand which supported admission requirement is unmet. Device Information observations The iPhone’s CoreBluetooth discovery exposes two distinct Device Information service instances: System service Observed UUID: 180A Manufacturer: Apple Inc. Model: MacBookPro17,1 No PnP characteristic exposed by successful all-characteristic discovery Application service Observed UUID: 0000180A-0000-1000-8000-00805F9B34FB Manufacturer: PS3 Bridge Model: BLE Gamepad Prototype PnP bytes: 02 00 00 01 00 00 01 The application publishes expanded Bluetooth-base UUIDs. I understand these represent the same assigned UUIDs; I am preserving the observed representations because I have not established whether every host component handles them identically. The application PnP value represents vendor-ID source 2, vendor 0, product 1, and version 0x0100. The system HID record therefore does not simply reflect that value unchanged. The duplicate-DIS layout also appears inconsistent with the unique primary DIS expected by HOGP. I have not established that this causes the driver rejection. Questions Is there a supported macOS API or architecture for publishing a coherent BLE HID device identity when macOS already exposes its own Device Information service? How does iOS select DIS/PnP information when constructing a system HID device in this arrangement? Is a generic BLE HID gamepad published through macOS CoreBluetooth a supported path to iOS GameController recognition? If so, what additional profile, identity, or authentication requirements apply? What supported diagnostics would distinguish an identity-selection problem from a separate controller-admission requirement? Available evidence I have diagnostic source, corrected per-service-instance inventories, and redacted phone logs available. I also have a small standalone CoreBluetooth publication reproducer. It is reduced and has not been validated as independently reproducing the full bridge’s controller rejection. A later connection-only observation reused an existing shared Bluetooth link and still showed zero controllers. I am not treating that as a fresh HID initialization or admission attempt. I’m seeking a supported implementation path without private APIs, Bluetooth daemon modifications, or changes to system security.
Replies
1
Boosts
0
Views
439
Activity
Sep ’26
Live Caller ID Lookup: 1-second blocking timeout is often exceeded on real-world networks
We ship a Live Caller ID Lookup extension (PIR-based) for spam call blocking. It works, and our PIR server is fast. But in practice, whether a call gets blocked depends on the quality of the user's internet connection at the moment the call arrives. The system waits only about 1 second for the blocking response. On a fast, stable connection it arrives in time. On an average or unstable connection it often doesn't, and the spam call rings through. So under the current platform limits we cannot guarantee blocking for every call. How we measured For each call we read the device syslog (CommCenter, CallDirectory, ciphermld, callservicesd) and our server logs. The extension cache was reset before each call, so every call triggered a real network lookup. All times are in ms and measured from addNewIncomingCall. Server-side processing of the PIR query was consistently 51–61 ms. The variance is almost entirely network transfer between the device and the server (or relay): In call D, HTTP/2 metrics show the ~28 KB request was handed to the network stack immediately (outbound_duration_ms=0), but response headers arrived only after 2216 ms. In call E, the device waited ~660 ms between finishing the upload to the relay and receiving the first byte of the response. Connection setup on a new connection cost 176–271 ms (DNS + TCP + TLS, or a QUIC handshake to the relay). Before the first byte was sent, the system spent another 54–225 ms after the call arrived. In the failing cases the syslog shows: CallDirectory: not all blocking fetches returned within 1 second(s) callservicesd: shouldBlock: NO shouldSilence NO The block response (shouldBlock=1) then arrives 100–1500 ms too late, and the call keeps ringing. What works: repeat calls After the first lookup the result is cached on the device. A repeat call from the same number is silenced without contacting the server, whatever the connection speed. In our logs, follow-up calls from the same number were silenced within ~65 ms of addNewIncomingCall, with no network request. So a user may get the first spam call from a number but not the next ones. The first call, though, is exactly the one users complain about. The problem with the 1-second budget Each blocking lookup has to: Send a PIR query Receive a response of ~22–25 KB. Often open a new TLS/QUIC connection through the OHTTP relay. All of this has to fit into about 1 second, together with the system's own overhead before the request is sent. On a good connection that takes about 250–650 ms. On an average mobile or congested Wi-Fi connection it easily goes past 1 second, and nothing the developer can optimize on the server helps. Our server already responds in about 50 ms.
Replies
1
Boosts
1
Views
515
Activity
Sep ’26
URLSession fails with -1009 on physical iPhone 16 Pro Max running iOS 27 beta, works in Simulator
I’m building a SwiftUI app that fetches public JSON data using URLSession.shared. The request works correctly in the iPhone 17 Pro Max Simulator, but fails on my physical iPhone 16 Pro Max running iOS 27 beta. Endpoint: https://api.jolpi.ca/ergast/f1/2026/driverstandings.json?limit=100 Error: NSURLErrorDomain Code=-1009 “The Internet connection appears to be offline.” NWPath: unsatisfied (Denied over Wi-Fi interface) Resolved 0 endpoints in 1ms The device can access the endpoint through Safari, and the same request works in Simulator. VPN, cellular permissions, Wi-Fi changes, and ATS settings have been checked. Could this be an iOS 27 beta networking regression affecting URLSession on physical devices? Are there recommended workarounds or diagnostics?
Replies
1
Boosts
0
Views
955
Activity
Sep ’26