Post

Replies

Boosts

Views

Activity

Reply to iOS 26 Network Framework AWDL not working
[quote='869237022, DTS Engineer, /thread/808917?answerId=869237022#869237022'] Admittedly, that was all prior to iOS 26, so it’s possible we broke something. I’m gonna try to reproduce this here in my office, but I won’t have time to do that until after the winter break. [/quote] Thank you for taking the time to investigate this. I look forward to hearing back about what you find. Would me checking in on Jan 5th be appropriate?
2d
Reply to iOS 26 Network Framework AWDL not working
[quote='869086022, DTS Engineer, /thread/808917?answerId=869086022#869086022'] Create a small test app [/quote] I created four branches on my app: ios18_network_api_tcp ios18_network_api_quic ios26_network_api_tcp ios26_network_api_quic I have three physical devices to test with: iPad (Device A - iOS 26 - no cellular) iPhone (Device B - iOS 26 - no cellular) iPhone (Device C - iOS 26 - yes cellular) For each branch listed above I tested two scenarios: home Wi-Fi network ON home Wi-Fi network OFF (I physically turned off the router) Note that on each device the Wi-Fi toggle is ON. Results from each branch for home Wi-Fi ON: Devices A, B and C can all discovery and connect to each other Results from each branch for home Wi-Fi OFF: Devices A and B can discovery and connect to each other Device C is not able to discovery or connect to the other devices
3d
Reply to iOS 26 Network Framework AWDL not working
I’m not sure why you think cellular is a factor here. It is not. Peer-to-peer Wi-Fi is independent of cellular. I think this because things work (ie multiple devices are able to discover and connect to each other when no wifi network is available) only for devices without cellular. If i load the exact same app onto devices with cellular and try the same thing they are not able to discovery and connect to each other.
3d
Reply to How to close / cancel a NetworkConnection
[quote='867322022, DTS Engineer, /thread/808198?answerId=867322022#867322022'] Can you share an example crash report? [/quote] my app was crashing because I was improperly saving the stream I would create like this try await connection.inboundStreams(prepending: { quicStream in TLV { quicStream } }) { stream in await self.receiveMessages(from: stream, connectionID: connectionID) } I learned via Cursor that those streams are one time use and do not need to be saved.
3d
Reply to iOS 26 Network Framework AWDL not working
Hi Quinn @DTS Engineer I am curious if my post is missing any information needed to troubleshoot my issue. I searched through the forums and online and haven't found my specific issue anywhere. The more I think about it I come to the following: true peer to peer with no wifi network works with iOS devices without cellular (so AWDL is used) once cellular is introduced there needs to be a wifi network because using AWDL is not an option Maybe some kind of option can be passed into the NetworkListener or when creating a NetworkConnection that would prompt apple's code to try to use AWDL if the peer to peer option is true? [quote='867952022, DTS Engineer, /thread/808917?answerId=867952022#867952022'] Share and Enjoy [/quote]
4d
Reply to iOS 26 Network Framework AWDL not working
@DTS Engineer - Here is how I build an outbound connection: private func handleOutboundConnection(to endpoint: NWEndpoint, deviceID: DeviceID) { do { guard let identity = Utils.importIdentityFromPKCS12() else { logger.error("[networkBrowser] could not import identity") return } guard let certificateData = Utils.getCertificateData(from: identity) else { logger.error("[networkBrowser] could not read certificate data") return } let builder = try makeQUICParametersBuilder(identity: identity, certificateData: certificateData) let connection = NetworkConnection(to: endpoint, using: builder) let connectionID = ConnectionID(connection) // connectionIDToConnection[connectionID] = connection // associateConnection(connectionID, with: deviceID) print("handleOutboundConnection: connection added") setupConnectionStateTask(for: connection, connectionID: connectionID, origin: .browser, deviceID: deviceID) setupConnectionReceiveTask(for: connection, connectionID: connectionID) } catch { print("could not create NetworkConnection: \(error)") } }
1w
Reply to iOS 26 Network Framework AWDL not working
To add more info to this I tried the following. I have this going in my app: let m = NWPathMonitor() m.pathUpdateHandler = { [weak self] path in print("pathUpdateHandler: \(path)") print("path.debugDescription: \(path.debugDescription)") print("path.unsatisfiedReason: \(path.unsatisfiedReason)") print("path.status: \(path.status)") print("path.isExpensive: \(path.isExpensive)") print("path.isConstrained: \(path.isConstrained)") print("path.isUltraConstrained: \(path.isUltraConstrained)") print("path.availableInterfaces: \(path.availableInterfaces)") print("path.availableInterfaces.count: \(path.availableInterfaces.count)") path.availableInterfaces.forEach { print("interface: \($0)") } Task { await self?.broadcast(path) } } On the iPhone with NO cellular (device A) - while on the wifi network - I see [en0, en0] for availableInterfaces On the iPhone with cellular (device B) - while on the wifi network - I see [en0, en0, pdp_ip0, pdp_ip0] for availableInterfaces When i cut off the wifi network device A shows [] for availableInterfaces When i cut off the wifi network device B shows [pdp_ip0, pdp_ip0] for availableInterfaces When i then toggle on airplane mode on device B but toggle on wifi I see [] for availableInterfaces So at this point device A and device B are showing the same availableInterfaces - but they still can't connect. They can discovery each other but the connection never makes it to the TLS stage. Below are my logs from having no wifi network, device A has its Device Discovery running (ie NetworkBrowser up and running and NetworkListener up and running) - device A has its wifi toggle on device B has its Device Discovery running (ie NetworkBrowser up and running and NetworkListener up and running) - device B has its wifi toggle on [MessageService] new subscriber added local network service -> browser state update handler: ready unsubscribe voice control commands here in on termination of voice control local network service -> browser state update handler: cancelled [startBrowser]: browser is ready [L1 ready, local endpoint: <NULL>, parameters: quic, local: ::.0, definite, attribution: developer, server, port: 61566, path satisfied (Path is satisfied), viable, interface: pdp_ip0[lte], ipv4, ipv6, dns, expensive, uses cell, LQM: good, service: 8FB0D9E1-303A-47E2-B15A-6826279577D7._captadoh._udp.<NULL> txtLength:0]: ready Listener ready onServiceRegistrationUpdate: added 8FB0D9E1-303A-47E2-B15A-6826279577D7._captadoh._udp.local. [NetworkingService] handleBrowserEndpoints skipping self endpoint: 8FB0D9E1-303A-47E2-B15A-6826279577D7 handleOutboundConnection: connection added here in setupConnectionReceiveTask nw_resolver_start_query_timer_block_invoke [C2.1.1] Query fired: did not receive all answers in time for b4f40bc0-c586-4946-a2f3-950fb21fddeb.local.:64458 [NetworkingService] handleBrowserEndpoints skipping self endpoint: 8FB0D9E1-303A-47E2-B15A-6826279577D7 [NetworkingService] handleEndpointRemoved removed endpoint for 354C4D39-2CA4-4A06-9F41-8A9B755C025B nw_connection_copy_protocol_metadata_internal_block_invoke [C3] Client called nw_connection_copy_protocol_metadata_internal on unconnected nw_connection nw_connection_copy_protocol_metadata_internal_block_invoke [C3] Client called nw_connection_copy_protocol_metadata_internal on unconnected nw_connection nw_connection_copy_connected_local_endpoint_block_invoke [C3] Client called nw_connection_copy_connected_local_endpoint on unconnected nw_connection nw_connection_copy_connected_remote_endpoint_block_invoke [C3] Client called nw_connection_copy_connected_remote_endpoint on unconnected nw_connection nw_endpoint_flow_failed_with_error [C2.1.1.1 fe80::7cc9:daff:fea6:9151%awdl0.64458 in_progress channel-flow (satisfied (Path is satisfied), viable, interface: awdl0[802.11], scoped, uses wifi, LQM: good)] already failing, returning [NetworkingService] handleBrowserEndpoints skipping self endpoint: 8FB0D9E1-303A-47E2-B15A-6826279577D7 handleOutboundConnection: connection added here in setupConnectionReceiveTask nw_resolver_start_query_timer_block_invoke [C4.1.1] Query fired: did not receive all answers in time for b4f40bc0-c586-4946-a2f3-950fb21fddeb.local.:64458 [NetworkingService] handleBrowserEndpoints skipping self endpoint: 8FB0D9E1-303A-47E2-B15A-6826279577D7 [NetworkingService] handleEndpointRemoved removed endpoint for 354C4D39-2CA4-4A06-9F41-8A9B755C025B nw_connection_copy_protocol_metadata_internal_block_invoke [C5] Client called nw_connection_copy_protocol_metadata_internal on unconnected nw_connection nw_connection_copy_protocol_metadata_internal_block_invoke [C5] Client called nw_connection_copy_protocol_metadata_internal on unconnected nw_connection nw_connection_copy_connected_local_endpoint_block_invoke [C5] Client called nw_connection_copy_connected_local_endpoint on unconnected nw_connection nw_connection_copy_connected_remote_endpoint_block_invoke [C5] Client called nw_connection_copy_connected_remote_endpoint on unconnected nw_connection nw_endpoint_flow_failed_with_error [C4.1.1.1 fe80::7cc9:daff:fea6:9151%awdl0.64458 in_progress channel-flow (satisfied (Path is satisfied), viable, interface: awdl0[802.11], scoped, uses wifi, LQM: good)] already failing, returning Note that device A has the device ID 354C4D39-2CA4-4A06-9F41-8A9B755C025B - device B has the device ID 8FB0D9E1-303A-47E2-B15A-6826279577D7
1w