Cosa fa scattare la notifica di autorizzazione "Vorrei trovare e connettersi ai dispositivi sulla rete locale" su iOS 14?
Quali chiamate di metodo effettive, escluso Bonjour, attivano la notifica di autorizzazione "Vorrei trovare e connettersi ai dispositivi sulla rete locale" su iOS 14?
Questa è la schermata della sessione WWDC su questa nuova autorizzazione. Che è solo in qualche modo utile come panoramica. Sono più interessato a capire cosa attivano tutte le chiamate ai metodi.

Risposte
In poche parole, Bonjour. Il suo utilizzo non è più "trasparente". Vederehttps://developer.apple.com/videos/play/wwdc2020/10110/ per maggiori informazioni:
Se la tua app interagisce con i dispositivi che utilizzano Bonjour o altri protocolli di rete locali, devi aggiungere il supporto per le autorizzazioni per la privacy della rete locale in iOS 14.
Anche un'app esistente è soggetta a questa regola; il primo tentativo di utilizzare Bonjour attiva l'avviso di autorizzazione.
Una delle mie app ha attivato questo messaggio in modo imprevisto nella nostra modalità multiplayer Internet. Usiamo RakNet per la nostra rete (che è un ++ lib C che le prese usi BSD per inviare / ricevere UDP) e sono stato in grado di monitorare il problema alla RNS2_Berkley::BindShared
funzione di qui .
Dopo aver creato un socket UDP, RakNet verifica l'integrità / validità del socket facendolo inviare un piccolo pacchetto di prova a se stesso. iOS 14 contrassegnava questo comportamento di invio a sé come comunicazione sulla rete locale. Non sono sicuro che questo comportamento di invio a sé sia un modello comune nella programmazione dei socket o una particolare stranezza di RakNet. In modo frustrante, il prompt del sistema operativo non è apparso fino a quando il socket è stato utilizzato per davvero, il che ha reso il problema molto difficile da tracciare.
Penso che questo sia un falso positivo dal sistema operativo e l'ho sollevato con Apple (FB8802121). Non starò trattenendo il respiro, quindi ho appena disabilitato il comportamento di RakNet per iOS e spero che non fosse troppo importante.
Modifica: per rispondere più direttamente alla domanda originale: sendto
è una chiamata al metodo che può attivare questo prompt.
Apple (Eskimo on the Dev Forums) ha rilasciato una FAQ che fornisce maggiori dettagli su questo avviso: https://developer.apple.com/forums/thread/663858
In particolare, fornire maggiori informazioni su ciò che attiva questo avviso è la FAQ-2: https://developer.apple.com/forums/thread/663874
Per quanto riguarda iOS 14: richiesta di autorizzazione: vorrei trovare e connettermi ai dispositivi sulla rete locale e dopo numerose distribuzioni sul mio dispositivo fisico, ho capito cosa causa questo nel mio caso.
Ho un'app Xamarin.Forms che
- chiama localhost: xxxx per fare un po 'di registrazione locale mentre sviluppo
- Uso un prodotto chiamato LiveSharp che esegue il ricaricamento a caldo locale per le modifiche al codice XAML E C #.
Quindi Livesharp comunica effettivamente anche con un server sul mio localhost. Dopo aver disabilitato entrambi questi e una nuova installazione pulita sul mio dispositivo fisico, la richiesta di autorizzazione è ANDATA .. Yay
Nota: ho dovuto rimuovere completamente i pacchetti nuget di LiveSharp dal mio progetto. Inoltre ho provato a riattivare la mia registrazione localhost, e per qualche motivo la richiesta di autorizzazione non viene visualizzata ..: headcratch
Quindi: rimuovi qualsiasi comunicazione localhost che si verifica nella tua app. O almeno inserisci un'istruzione if attorno ad esso che lo consenta se impostato su true in appsettings