Hello,
I am currently investigating if we can disable usage of QUIC on application level.
I know we can set enable_quic from /Library/Preferences/com.apple.networkd.plist to false but it will have a global impact since this is a system file, all the applications on machine will stop using QUIC. I don't want that. What i am looking for is to disable QUIC only for my application.
Is there any way i can modify URLSession object in my application and disable QUIC? or modify URLSessionConfiguration so system will not use QUIC?
Networking
RSS for tagExplore the networking protocols and technologies used by the device to connect to Wi-Fi networks, Bluetooth devices, and cellular data services.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello,
We're exploring the new URL Filter capability and we managed change the SimpleURLFilter so that it could work on macOS.
However, on macOS it won't work as even when signed for debugging it tries to use Apple's OHTTP Relay.
Failed to fetch Token Issuer Directory. <NSHTTPURLResponse: 0xca10ca580> { URL: https://gateway.icloud.com/pat-issuer-directory?issuer=localhost } { Status Code: 503
So I have two questions:
Will it be possible to debug URL Filter locally on macOS?
Even more important: how can I send a capability request so that our OHTTP Gateway could be used? I checked everywhere, but it seems there's simply no way to request this capability at this moment.
I filed FB19631435 about this just now. Basically: starting with 15.6, we've had reports (internally and outternally) that after some period of time, networking fails so badly that it can't even acquire a DHCP lease, and the system needs to be rebooted to fix this. The systems in question all have at least 2 VPN applications installed; ours is a transparent proxy provider, and the affected system also had Crowdstrike's Falcon installed. A customer system reported seemingly identical failures on their systems; they don't have Crowdstrike, but they do have Cyberhaven's.
Has anyone else seen somethng like this? Since it seems to involve three different networking extensions, I'm assuming it's due to an interaction between them, not a bug in any individual one. But what do I know? 😄
Hello there, I am trying to add Nearby Interaction into my project, but it is not appear into +capabilities.
I have already go to my account into developer account platform to try to add it from Identifiers:
Then I search into my project to activated, but Nearby Interaction was not show:
So, there is anything else that i have miss?
please help :c
Hi everyone,
I’m currently developing a macOS app that is distributed via a DMG file on our website. The app includes an App Extension (appex) for Network Extension functionality.
I’m wondering if distributing via DMG on the web requires the app extension to be implemented as a System Extension instead of an App Extension. Is it necessary to migrate to System Extension for web-based DMG distribution, or can I continue using App Extension as is?
Any insights or recommendations would be greatly appreciated.
Thank you!
I'm trying to distribute a sandboxed macOS app with a PacketTunnelProvider (system extension) via direct distribution (outside of AppStore).
The app and the extension both use the same app group, using the new group.com.XXXX.YYYY format detailed here for 10.15+
https://developer.apple.com/forums/thread/721701
I've also followed the instructions below to get around the quirk of not being able to directly process it via XCode:
https://developer.apple.com/forums/thread/737894
I've re-signed with Developer ID certificate, all that is smooth and successfully notarized.
However upon running the app I get:
"My.app" would like to access data from other apps.
Checking
~/Library/Containers
~/Library/Group Containers
I see the correct files folders have been created before I select Don't Allow and Allow.
My app does not access any files or folders outside of the sandboxed directories.
How can I prevent this from happening?
In order to diagnose further, how to diagnose exactly which files/folder the app is trying to access that is causing this problem?
Topic:
App & System Services
SubTopic:
Networking
Tags:
Network Extension
System Extensions
App Sandbox
Developer ID
I have a custom VPN app that uses NETunnelProviderManager to install a VPN Profile if one is not already installed. On previous iOS versions this would open the VPN Settings and ask for either the PIN, FaceID or TouchID and install the profile. With iOS 26 beta5 it opens the VPN Settings and stops.
Is this a bug in iOS 26? Have there been changes to NETunnelProviderManager for iOS 26 that I'm not aware of?
FYI we do the samething on macOS 26 beta5 and that works as expected.
I am seeking assistance with how to properly handle / save / reuse NWConnections when it comes to the NWBrowser vs NWListener.
Let me give some context surrounding why I am trying to do what I am.
I am building an iOS app that has peer to peer functionality. The design is for a user (for our example the user is Bob) to have N number of devices that have my app installed on it. All these devices are near each other or on the same wifi network. As such I want all the devices to be able to discover each other and automatically connect to each other. For example if Bob had three devices (A, B, C) then A discovers B and C and has a connection to each, B discovers B and C and has a connection to each and finally C discovers A and B and has a connection to each.
In the app there is a concept of a leader and a follower. A leader device issues commands to the follower devices. A follower device just waits for commands. For our example device A is the leader and devices B and C are followers. Any follower device can opt to become a leader. So if Bob taps the “become leader” button on device B - device B sends out a message to all the devices it’s connected to telling them it is becoming the new leader. Device B doesn’t need to do anything but device A needs to set itself as a follower. This detail is to show my need to have everyone connected to everyone.
Please note that I am using .includePeerToPeer = true in my NWParameters. I am using http/3 and QUIC. I am using P12 identity for TLS1.3. I am successfully able to verify certs in sec_protocal_options_set_verify_block. I am able to establish connections - both from the NWBrowser and from NWListener. My issue is that it’s flaky. I found that I have to put a 3 second delay prior to establishing a connection to a peer found by the NWBrowser. I also opted to not save the incoming connection from NWListener. I only save the connection I created from the peer I found in NWBrowser. For this example there is Device X and Device Y. Device X discovers device Y and connects to it and saves the connection. Device Y discovers device X and connects to it and saves the connection. When things work they work great - I am able to send messages back and forth. Device X uses the saved connection to send a message to device Y and device Y uses the saved connection to send a message to device X.
Now here come the questions.
Do I save the connection I create from the peer I discovered from the NWBrowser?
Do I save the connection I get from my NWListener via newConnectionHandler?
And when I save a connection (be it from NWBrowser or NWListener) am I able to reuse it to send data over (ie “i am the new leader command”)?
When my NWBrowser discovers a peer, should I be able to build a connection and connect to it immediately?
I know if I save the connection I create from the peer I discover I am able to send messages with it. I know if I save the connection from NWListener - I am NOT able to send messages with it — but should I be able to?
I have a deterministic algorithm for who makes a connection to who. Each device has an ID - it is a UUID I generate when the app loads - I store it in UserDefaults and the next time I try and fetch it so I’m not generating new UUIDs all the time. I set this deviceID as the name of the NWListener.Service I create. As a result the peer a NWBrowser discovers has the deviceID set as its name. Due to this the NWBrowser is able to determine if it should try and connect to the peer or if it should not because the discovered peer is going to try and connect to it.
So the algorithm above would be great if I could save and use the connection from NWListener to send messages over.
On iOS 26 beta 5, it is impossible to add a VPN configuration when a passcode is set on the device. Every time, all it does is redirect to the Settings app with no prompt for passcode.
The only way around this is to disable passcode on the device so adding a VPN configuration doesn’t have to open the Settings app.
This issue happened intermittently in the past with previous iOS 26 betas and even on iOS 18, but the problem has worsened on iOS 26 beta 5 to the point where you have to turn off passcode to add a VPN.
Feedback ID: FB17974765
I'm writing an application that implements a Bonjour service and browser for the purpose of connecting to Logic Pro and interacting with a MIDI Device Script. Because it's connecting to Logic Pro running on the same system as the application, the service and browser do not need to access anything else on the local network.
I'm creating the service and browser with calls like this:
err = DNSServiceRegister(
&serviceRef, 0,
kDNSServiceInterfaceIndexLocalOnly,
"MyService",
"_osc._udp",
"local",
nullptr,
52854,
txtLen,
txtRecord,
static_cast<DNSServiceRegisterReply>(myCallback), context
);
err = DNSServiceBrowse(
&browserRef, 0,
kDNSServiceInterfaceIndexLocalOnly,
"_osc._udp",
nullptr,
static_cast<DNSServiceBrowseReply>(browserCallback),
context
);
Despite the fact that I'm passing in kDNSServiceInterfaceIndexLocalOnly for the network interface, it still triggers an "Allow 'Application' to find devices on local networks?" permissions prompt.
How can I avoid that prompt?
It is both a significant failure point (in case users don't notice it or click 'Don't Allow' by mistake) but it may also scare them away, since it strongly implies my application is scanning devices on the local network, even though it's doing no such thing!
Im working on ios application that works with BLE device. The device uses BLE indications to provide data to the app. The goal is to achieve 100% data retrieval.
According to the hardware team device behaves like this:
CCCD Persistence: Device maintains Client Characteristic Configuration Descriptor (CCCD) with indication-enabled state across reconnections
Resume Point: Device resends indications starting from the last unacknowledged indication before disconnection
No Custom Logic: Follows standard BLE specification for indication reliability
So it is expected that the device restores the indication streams from the last acknowledged one.
My connection routine is:
Discover services
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
connectedPeripherals[peripheral.identifier] = peripheral
peripheral.delegate = self
updatePeripheralState(peripheral.identifier, to: .connected)
print("Starting service discovery...")
peripheral.discoverServices(nil)
}
Discover characteristics:
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
if let error = error {
print("Characteristic discovery failed for service \(service.uuid): \(error.localizedDescription)")
return
}
guard let characteristics = service.characteristics else {
return
}
for characteristic in characteristics {
if service.uuid == targetServiceUUID && characteristic.uuid == targetCharacteristicUUID {
print("Found target characteristic! Enabling indications...")
peripheral.setNotifyValue(true, for: characteristic)
print(characteristic.properties.description)
}
}
}
Then the data retrieval:
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let error = error {
print("Error reading characteristic value: \(error.localizedDescription)")
return
}
if characteristic.service?.uuid == targetServiceUUID && characteristic.uuid == targetCharacteristicUUID {
if let data = characteristic.value {
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .none
// data filtering since device is sending some other events sometims
if data.count >= 15 {
let event = decodeBytes(bytes: data)
let now = Date()
let timestamp = timestampFormatter.string(from: now)
print("[\(timestamp)] Auto Increment: \(event.autoIncrement) Type: \(event.type)")
}
} else {
print("Received indication with no data")
}
}
}
Using PacketLogger from xcode toolbox i have confirmed that:
The device starts sending indications right after didConnect finishes
The phone is sending ACKS for those indications
Indications are not reaching didUpdateValueFor until peripheral.setNotifyValue(true, for: characteristic) properly executes
This mekes me drop some data data on each reconnect.
I already know I can do better in terms of service and characteristics discovery: I should discover only that one which is giving me the indications.
But my intuition is: discover only the service and characteristic i care about will minimize the impact, but not guarantee 100% data retrieval
Is this expected and confirmed CoreBluetooth behavior?
Is Apple's Wi-Fi Aware certified by the Wi-Fi Alliance?
Is there any non-compliance of Apple's Wi-Fi Aware with the Wi-Fi Alliance standards?
Does Apple have a roadmap to switch AWDL to Wi-Fi Aware?
Does Apple have plans to adopt Wi-Fi Aware in Mac computers?
Hello all,
WWDC 2025 introduced Wi‑Fi Aware (NAN) support on iOS 26 for peer-to-peer discovery and direct connections, but I noticed macOS Tahoe doesn’t include it. I couldn’t find any references to Wi‑Fi Aware APIs or framework support in the macOS SDK.
Is Apple planning to bring Wi‑Fi Aware to macOS?
If so, will this come in a future update to macOS 26 (e.g., 26.x), or is it deferred to macOS 27 or beyond?
Thanks for any insights!
Topic:
App & System Services
SubTopic:
Networking
Samsung's Quick Share uses Wi-Fi Aware to achieve one-to-many concurrent sharing.
Can Apple's Wi-Fi Aware achieve one-to-many concurrent sharing?
Apple's AirDrop does support one-to-many concurrent sharing.
I was excited to find out about Wi-Fi Aware in i[Pad]OS 26 and was eager to experiment with it. But after wiping and updating two devices (an iPhone 11 Pro and a 2018 11" iPad Pro) to Beta 1 I found out that neither of them support Wi-Fi Aware 🙁.
What current and past iPhone and iPad models support Wi-Fi Aware?
And is there a new UIRequiredDeviceCapabilities key for it, to indicate that an app requires a Wi-Fi Aware capable device?
Hello everyone,
I'm encountering a MultipeerConnectivity connection issue while developing a visionOS app and would like to ask if other developers have experienced similar problems.
Problem Description
In visionOS 26.0 Beta 3 and Beta 4, when a visionOS device attempts to connect to an iPad via MultipeerConnectivity, the iPad side completely fails to receive connection requests, resulting in connection establishment failure.
Specific Symptoms
After executing serviceBrowser?.invitePeer(peerID, to: mcSession, withContext: nil, timeout: 10.0) on the visionOS side
The iPad side shows no response and receives no connection invitation
Connection request times out after 10 seconds and is automatically rejected
No error logs or exception information are generated
Environment Information
visionOS version: 26.0 Beta 3 and Beta 4
Development environment: macOS Tahoe 26.0 Beta (25A5306g)
Target device: iPad (iOS 17.x)
Network environment: Same WiFi network
Comparative Test Results
visionOS 2.6 (22O785): Functionality completely normal
visionOS 26.0 Beta 1/2: Functionality normal
visionOS 26.0 Beta 3/4: Exhibits the above problems
Attempted Solutions
Checked network configuration and firewall settings
Adjusted MultipeerConnectivity parameters
Reinitialized MCSession and MCNearbyServiceBrowser
Cleared app cache and reinstalled
Reset network settings
Temporary Workaround
Currently, the only solution is to downgrade the visionOS device to version 2.6.
Impact of the Problem
This issue severely affects the development of cross-device collaboration features in visionOS apps, particularly scenarios requiring peer-to-peer communication with iOS/iPadOS devices.
Questions for Help
Have other developers encountered similar issues?
Are there any known solutions or workarounds?
Is this a known issue with visionOS 26.0 Beta?
Are there other known issues related to MultipeerConnectivity?
Relevant Code Snippet
// Connection invitation code
private var serviceBrowser: MCNearbyServiceBrowser?
let mcSession: MCSession
// Execute connection invitation
serviceBrowser?.invitePeer(peerID, to: mcSession, withContext: nil, timeout: 10.0)
Thank you for your help and suggestions!
Development Environment: Xcode 15.x
Target Platform: visionOS
Topic:
App & System Services
SubTopic:
Networking
Tags:
Beta
Multipeer Connectivity
Debugging
visionOS
Hi everyone,
I'm trying to establish a connection to a server that requires mutual TLS (mTLS) using NSURLSession in an iOS app. The server is configured with a self-signed root CA (in the project, we are using ca.cer) and requires clients to present a valid certificate during the TLS handshake.
What I’ve done so far:
Server trust is working:
I manually trust the custom root CA using SecTrustSetAnchorCertificates and SecTrustEvaluateWithError.
I also configured the necessary NSAppTransportSecurity exception in Info.plist to allow the server certificate to pass ATS.
This is confirmed by logs showing: Server trust succeeded
The .p12 identity is correctly created: Contains the client certificate and private key.
Loaded using SecPKCS12Import with the correct password.
I implemented the delegate method:
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
// Server trust override code (working)
...
}
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate {
print("🔐 Client cert challenge triggered")
if let identity = loadIdentity() {
let credential = URLCredential(identity: identity, certificates: nil, persistence: .forSession)
completionHandler(.useCredential, credential)
} else {
completionHandler(.cancelAuthenticationChallenge, nil)
}
return
}
completionHandler(.performDefaultHandling, nil)
}
The session is correctly created using my custom delegate:
let delegate = MTLSDelegate(identity: identity, certificates: certs)
let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil)
Despite everything above, the client certificate is never sent, and the request fails with:
Error Domain=NSURLErrorDomain Code=-1206
"The server requires a client certificate."
From logs, it's clear the delegate is being hit for NSURLAuthenticationMethodServerTrust, but not for NSURLAuthenticationMethodClientCertificate.
I'm working on a project that says it's to be based on the QNE2TransparentProxyMac sample code but don't have the original sample code. Can I get a pointer to the sample code and documentation please?
Google search didn't find it for some reason.
Thanks!
Peter
Issue summary:
Iphone 16 is not connecting to WiFi7 AP with MLO Suiteb encryption. Furuno AP(EW750) is sending EAPOL M1 message, but Iphone16 is not responding with EAPOL M2 message, Hence Iphone16 is unable to connect to Qualcomm based AP with MLO suiteb encryption.
Issue impact:
All the Iphone16 users cannot connect to WiFi7 AP with MLO suiteb encryption globally. Predominantly, Iphone users tend to connect to more secured wifi networks using WPA3 suiteb encryption, hence many of the iphone users will experience the connectivity issue significantly.
Topology:
AP Hardware: Furuno WiFi7 AP(EW770)
The Furuno WiFi7 AP uses Miami IPQ5332 with waikiki radio QCN9274
AP software: SPF12.2 CSU3
IPhone16 software: (18.3.1 or 18.5 )
Iphone16 wifi capabilities: 802.11 b/a/g/n/ac/ax/be
Radius server details:
Radius server: Laptop running with Ubuntu
Radius package: 3.0.26dfsggit20220223.1.00ed0241fa-0ubuntu3.4
Version: 3.0.26
Steps:
Power on the Wi-Fi 7 Access Point with the Miami chipset, and flash it with the SPF 12.2 CSU3 image.
Enable both 5 GHz and 6 GHz radios on the AP.
Enable MLO (Multi-Link Operation) in 6Ghz & 5Ghz, set MLD address different from radio address and configure Suite-B (192-bit) encryption
On the Linux laptop, set up the RADIUS server with EAP-TLS authentication method.
Once the above steps are completed, take the iPhone 16 and follow the steps below to install the RADIUS client certificates on the device.
On the sniffer laptop, switch the Wi-Fi adapter to monitor mode, configure the required channel, and begin packet capture.
Check SSID is broadcasting, then connect the iPhone 16 to .
Verify if the client (iPhone 16) connects to the SSID using WPA3-Enterprise, MLO, and Suite-B encryption by checking the wireless capture on both the AP and iPhone sides.
Support needed from Apple team:
We would request Apple team to analyse and enable the IPhone16 users to connect to advanced security WPA3 Suiteb by resolving the issue.
Below is our analysis and observation for your reference.
As per IEEE, MLD mac address can be set to the same or different from radio address, Iphone16 is not accepting EAPOL M1 message if source address(MLD) is different from radio address.
IPhone16 is accepting EAPOL M1 if the source address(MLD) is set to the same as the radio address and responds with M2 message
IPhone16 is not accepting EAPOL M1 if source address(MLD) set to different from radio address and fails to respond with M2 message
Hello,
I am working to integrate the new com.apple.developer.networking.carrier-constrained.app-optimized entitlement in my iOS 26 app so that my app can use a carrier-provided satellite network, and want to confirm my understanding of how to detect and optimize for satellite network conditions.
(Ref: https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.networking.carrier-constrained.app-optimized )
My current approach:
I plan to set the entitlement to true once my app is optimized for satellite networks.
To detect if the device is connected to a satellite network, I intend to use the Network framework’s NWPath properties:
isUltraConstrained — I understand this should be set to true when the device is connected to a satellite network.
(Ref: https://developer.apple.com/documentation/network/nwpath/isultraconstrained )
linkQuality == .minimal — I believe this will also be set in satellite scenarios, though it may not be exclusive to satellite connections.
(Ref:
https://developer.apple.com/documentation/network/nwpath/linkquality-swift.enum/minimal )
Questions:
Is it correct that isUltraConstrained will reliably indicate a satellite connection?
Should I also check for linkQuality == .minimal, or is isUltraConstrained sufficient?
Are there any additional APIs or best practices for detecting and optimizing for satellite connectivity that I should be aware of?
Thank you for confirming whether my understanding and approach are correct, and for any additional guidance.