iOS is the operating system for iPhone.

Posts under iOS tag

200 Posts

Post

Replies

Boosts

Views

Activity

Third-party keyboards get an extra 17pt gap at the top after switching apps on iOS 27 beta.
Feedback submitted: FB24460699 The sample projects are attached to the feedback report. Environment:iOS27 Beta6; iPhone 17Pro Problem:I have encountered a consistently reproducible third-party custom keyboard layout issue in iOS 27.0 beta 1 through beta 6. The custom keyboard initially appears correctly. If I switch apps while the text input remains focused and the keyboard remains visible, and then return to the host app, the system adds a 17-point area above the custom keyboard extension. Steps to reproduce Install and enable a third-party custom keyboard. Switch to the sample custom keyboard and open the host app so that the text editor in the center receives focus. Do not dismiss the keyboard or remove focus from the editor. Return to the Home Screen or switch to another app. Return to the host app. A new blank area now appears above the custom keyboard content. I tested both a system-determined extension view height and an extension view explicitly constrained to 180 points. Both configurations produce exactly the same change. After the foreground transition, the following extension-side values remain unchanged: view.bounds inputView.bounds extension.window.bounds view.safeAreaInsets, which remains {0, 0, 0, 0} The requested 180-point extension height Only the system keyboard frame received by the host app increases by 17 points. I also drew a rounded pink boundary inside the transparent extension root view. When the issue occurs, the new area appears outside that boundary. I tested several third-party keyboards and reproduced the issue with all of them. This suggests that the behavior is caused by iOS rather than by my app. Questions On iOS 27, is it expected behavior for a custom keyboard to gain a 17pt top area after its host app returns from the background? If this is a system issue, is there any workaround that can be used until it is fixed?
4
5
972
3h
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
249
1d
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
190
1d
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?
0
0
134
2d
PDF Widget Annotations Disappear After Saving in PDFKit (including with Preview)
The Problem When a user toggles radio buttons or checkboxes in a PDF using Preview, the widgets disappear following subsequent interactions after the file is saved and reopened. This renders the form fields unusable. Steps to Reproduce the Problem Open a PDF with radio buttons or checkboxes in Preview. Toggle a radio button or checkbox. Save and close the file. Re-open the PDF in Preview. Toggle the same button again. The button (and any others with the same field name) will disappear. Expected Results Toggling a radio button or checkbox should update the field value without causing the button (or related buttons) to disappear. This behavior is consistent with previous versions of PDFKit. What is Happening In Preview, interacting with radio buttons and checkboxes correctly updates their appearance as expected. Saving the PDF, however, causes the appearance dictionary to reference a new N entry that is a single appearance stream unassociated with any state. The annotation's AS entry is not updated. The original N entry remains but is no longer referenced. Subsequent interactions fail to update the visual presentation because the appearance stream is missing. Impact on User Experience Radio buttons and checkboxes may disappear and become unusable when toggled. PDF documents become irreparably altered after a button is toggled and the file is saved. PDF file size significantly increases when the file is saved. Users may believe they have successfully completed a form, only for the data to become inaccessible or invisible to recipients. Forms may need to be completely restarted or recreated from scratch if the original becomes unusable. The corrupted PDF structure might cause the file to render incorrectly or crash in third-party PDF viewers. Affected Apps/OSs Tested with Preview 11.0 (1147), as well as other apps that use PDFKit, on macOS Golden Gate 27.0 (26A428). This problem also affects PDFKit on iOS 27.0 and iPadOS 27.0. Feedback/bug report: FB24866826 Related Sample Output Original PDF File Checkbox widget annotation (6 0 obj), its appearance dictionary (17 0 obj), and normal appearance dictionary (18 0 obj). Button is not checked. 6 0 obj << /Border [ 0 0 0 ] /Rect [ 90 390 110 410 ] /T (button1) /F 4 /Subtype /Widget /DA (/.AppleSystemUIFont 13 Tf 0 g) /MK 16 0 R /C [ 0 ] /AP 17 0 R /V /Off /M (D:20260919225320Z00'00') /AS /Off /FT /Btn /Type /Annot /Ff 0 >> endobj 17 0 obj << /N 18 0 R >> endobj 18 0 obj << /Yes 20 0 R /Off 22 0 R >> endobj PDF File after Save Checkbox widget annotation object (6 0 obj), its new appearance dictionary object (8 0 obj), a new normal appearance stream object (20 0 obj), and the original appearance stream dictionary (now 21 0 obj). File saved after user checked button. 6 0 obj << /Ff 0 /Type /Annot /AS /Off /AP 8 0 R /MK 9 0 R /C [ 0 ] /FT /Btn /M (D:20260919225320Z00'00') /DA (/.AppleSystemUIFont 13 Tf 0 g) /Subtype /Widget /F 4 /Border [ 0 0 0 ] /Rect [ 90 390 110 410 ] /T (button1) /V (Yes) >> endobj 8 0 obj << /N 20 0 R >> endobj 20 0 obj << /Filter /FlateDecode /Resources << /ColorSpace << /CS1 [ /ICCBased 29 0 R ] /CS2 [ /ICCBased 30 0 R ] >> >> /BBox [ 0 0 20 20 ] /Type /XObject /Subtype /Form /Length 123 >> stream x UéA ¬0 Ô}≈|†≈nà¢úÛÇ* —SA =}Ïr(»ñµ≤w◊€YËà’|ÙÎŒç'óRï∂#SäÏÌü∞¢S‰Ì§ôRÌX }–É•åY Éçˆ BŒ H " *â´8™ˆZø6z⁄ÿ ”ú6ɀ੠"∫t˘‹;'¬ endstream endobj 21 0 obj << /Off 22 0 R /Yes 23 0 R >> endobj Note: No object references 21 0 obj in the PDF.
3
0
369
2d
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
308
3d
PDF Widget Annotations appear Pixelated/Rasterized
The Problem On opening a PDF document in the Preview app, PDF widget annotations appear pixelated/rasterized. This problem exists with button, text, and choice widget subtypes. The pixelation becomes more apparent when zoomed in. Expected Results PDF widgets should appear sharp and smooth, without pixelation. In previous versions of the Preview app, widgets appear vector-based as expected. Impact on User Experience PDF widgets appear pixelated and inconsistent with text content in the same PDF document. Widgets do not look like elements of an interactive form but, instead, resemble low-quality embedded images. Affected Apps/OSs: Preview 11.0 (1147), as well as other apps that use PDFKit, on macOS Golden Gate 27.0 (26A428). A similar problem appears to affect PDFKit on iOS 27.0 and iPadOS 27.0 as well. Feedback/bug report: FB24843022
5
1
797
3d
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
1
55
3d
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
1
41
3d
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
78
3d
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
108
3d
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
1
83
4d
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
441
4d
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
330
4d
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
0
313
4d
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
134
5d
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
175
5d
Third-party keyboards get an extra 17pt gap at the top after switching apps on iOS 27 beta.
Feedback submitted: FB24460699 The sample projects are attached to the feedback report. Environment:iOS27 Beta6; iPhone 17Pro Problem:I have encountered a consistently reproducible third-party custom keyboard layout issue in iOS 27.0 beta 1 through beta 6. The custom keyboard initially appears correctly. If I switch apps while the text input remains focused and the keyboard remains visible, and then return to the host app, the system adds a 17-point area above the custom keyboard extension. Steps to reproduce Install and enable a third-party custom keyboard. Switch to the sample custom keyboard and open the host app so that the text editor in the center receives focus. Do not dismiss the keyboard or remove focus from the editor. Return to the Home Screen or switch to another app. Return to the host app. A new blank area now appears above the custom keyboard content. I tested both a system-determined extension view height and an extension view explicitly constrained to 180 points. Both configurations produce exactly the same change. After the foreground transition, the following extension-side values remain unchanged: view.bounds inputView.bounds extension.window.bounds view.safeAreaInsets, which remains {0, 0, 0, 0} The requested 180-point extension height Only the system keyboard frame received by the host app increases by 17 points. I also drew a rounded pink boundary inside the transparent extension root view. When the issue occurs, the new area appears outside that boundary. I tested several third-party keyboards and reproduced the issue with all of them. This suggests that the behavior is caused by iOS rather than by my app. Questions On iOS 27, is it expected behavior for a custom keyboard to gain a 17pt top area after its host app returns from the background? If this is a system issue, is there any workaround that can be used until it is fixed?
Replies
4
Boosts
5
Views
972
Activity
3h
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
249
Activity
1d
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
190
Activity
1d
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
0
Boosts
0
Views
134
Activity
2d
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
580
Activity
2d
PDF Widget Annotations Disappear After Saving in PDFKit (including with Preview)
The Problem When a user toggles radio buttons or checkboxes in a PDF using Preview, the widgets disappear following subsequent interactions after the file is saved and reopened. This renders the form fields unusable. Steps to Reproduce the Problem Open a PDF with radio buttons or checkboxes in Preview. Toggle a radio button or checkbox. Save and close the file. Re-open the PDF in Preview. Toggle the same button again. The button (and any others with the same field name) will disappear. Expected Results Toggling a radio button or checkbox should update the field value without causing the button (or related buttons) to disappear. This behavior is consistent with previous versions of PDFKit. What is Happening In Preview, interacting with radio buttons and checkboxes correctly updates their appearance as expected. Saving the PDF, however, causes the appearance dictionary to reference a new N entry that is a single appearance stream unassociated with any state. The annotation's AS entry is not updated. The original N entry remains but is no longer referenced. Subsequent interactions fail to update the visual presentation because the appearance stream is missing. Impact on User Experience Radio buttons and checkboxes may disappear and become unusable when toggled. PDF documents become irreparably altered after a button is toggled and the file is saved. PDF file size significantly increases when the file is saved. Users may believe they have successfully completed a form, only for the data to become inaccessible or invisible to recipients. Forms may need to be completely restarted or recreated from scratch if the original becomes unusable. The corrupted PDF structure might cause the file to render incorrectly or crash in third-party PDF viewers. Affected Apps/OSs Tested with Preview 11.0 (1147), as well as other apps that use PDFKit, on macOS Golden Gate 27.0 (26A428). This problem also affects PDFKit on iOS 27.0 and iPadOS 27.0. Feedback/bug report: FB24866826 Related Sample Output Original PDF File Checkbox widget annotation (6 0 obj), its appearance dictionary (17 0 obj), and normal appearance dictionary (18 0 obj). Button is not checked. 6 0 obj << /Border [ 0 0 0 ] /Rect [ 90 390 110 410 ] /T (button1) /F 4 /Subtype /Widget /DA (/.AppleSystemUIFont 13 Tf 0 g) /MK 16 0 R /C [ 0 ] /AP 17 0 R /V /Off /M (D:20260919225320Z00'00') /AS /Off /FT /Btn /Type /Annot /Ff 0 >> endobj 17 0 obj << /N 18 0 R >> endobj 18 0 obj << /Yes 20 0 R /Off 22 0 R >> endobj PDF File after Save Checkbox widget annotation object (6 0 obj), its new appearance dictionary object (8 0 obj), a new normal appearance stream object (20 0 obj), and the original appearance stream dictionary (now 21 0 obj). File saved after user checked button. 6 0 obj << /Ff 0 /Type /Annot /AS /Off /AP 8 0 R /MK 9 0 R /C [ 0 ] /FT /Btn /M (D:20260919225320Z00'00') /DA (/.AppleSystemUIFont 13 Tf 0 g) /Subtype /Widget /F 4 /Border [ 0 0 0 ] /Rect [ 90 390 110 410 ] /T (button1) /V (Yes) >> endobj 8 0 obj << /N 20 0 R >> endobj 20 0 obj << /Filter /FlateDecode /Resources << /ColorSpace << /CS1 [ /ICCBased 29 0 R ] /CS2 [ /ICCBased 30 0 R ] >> >> /BBox [ 0 0 20 20 ] /Type /XObject /Subtype /Form /Length 123 >> stream x UéA ¬0 Ô}≈|†≈nà¢úÛÇ* —SA =}Ïr(»ñµ≤w◊€YËà’|ÙÎŒç'óRï∂#SäÏÌü∞¢S‰Ì§ôRÌX }–É•åY Éçˆ BŒ H " *â´8™ˆZø6z⁄ÿ ”ú6ɀ੠"∫t˘‹;'¬ endstream endobj 21 0 obj << /Off 22 0 R /Yes 23 0 R >> endobj Note: No object references 21 0 obj in the PDF.
Replies
3
Boosts
0
Views
369
Activity
2d
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
308
Activity
3d
PDF Widget Annotations appear Pixelated/Rasterized
The Problem On opening a PDF document in the Preview app, PDF widget annotations appear pixelated/rasterized. This problem exists with button, text, and choice widget subtypes. The pixelation becomes more apparent when zoomed in. Expected Results PDF widgets should appear sharp and smooth, without pixelation. In previous versions of the Preview app, widgets appear vector-based as expected. Impact on User Experience PDF widgets appear pixelated and inconsistent with text content in the same PDF document. Widgets do not look like elements of an interactive form but, instead, resemble low-quality embedded images. Affected Apps/OSs: Preview 11.0 (1147), as well as other apps that use PDFKit, on macOS Golden Gate 27.0 (26A428). A similar problem appears to affect PDFKit on iOS 27.0 and iPadOS 27.0 as well. Feedback/bug report: FB24843022
Replies
5
Boosts
1
Views
797
Activity
3d
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
1
Views
55
Activity
3d
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
1
Views
41
Activity
3d
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
78
Activity
3d
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
108
Activity
3d
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
1
Views
83
Activity
4d
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
441
Activity
4d
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
330
Activity
4d
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
0
Views
313
Activity
4d
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
134
Activity
5d
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
175
Activity
5d