2015-10-14 30 views
6

Sto lavorando su un'app JavaScript avvolta in Cordova e realizzata con Phone Build. Stiamo includendo cordova-plugin-whitelist da npm nella nostra build e abbiamo aggiunto <access origin="*" /> al nostro file config.xml e a un CSP aperto (<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">) nel nostro index.html. L'app funziona perfettamente su Android e parla al nostro server senza problemi, ma su iOS tutte le richieste falliscono immediatamente come se il plugin della whitelist non consentisse il traffico.whitelist plug-in cordova che funziona su Android ma non su iOS (Phone Build Build)

Ho provato un certo numero di diverse configurazioni di generazione nel caso in cui qualcosa si sia rotto in una versione particolare di Cordova, ma non sono stato in grado di farlo funzionare affatto. Ho avuto un problema simile con altre app Phonegap/Cordova in passato, ma ero in grado di risolverlo con il plugin whitelist/CSP/regola di accesso.

Questo problema è stato anche difficile da eseguire il debug poiché gli Strumenti per sviluppatori di Safari non si collegano al dispositivo iOS e devo avvisare delle risposte che sto vedendo. Sembra che la risposta che ritorna abbia un codice di stato 0 e un corpo vuoto, che presumo significhi irraggiungibile.

risposta

4

Si può anche essere necessario impostare la connessione-src in Content-Security-politica, per esempio:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://YOUR_HOST"> 

Inoltre per Xcode 7/iOS 9 è necessario regolare le impostazioni di ATS per consentire le connessioni al backend non https se non si utilizza SSL:

Ecco un esempio di lavoro di modifica della tua app informazioni .plist:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

(Nota è anche possibile configurare questo per consentire selettivamente le connessioni non https).

Ed ecco uno script si può usare come un gancio di build pre per iOS per farlo automaticamente:

#!/bin/bash 
echo "Adjusting plist for App Transport Security exception." 
val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" platforms/ios/PROJECTNAME/PROJECTNAME-Info.plist 2>/dev/null) echo "Done" 

Basta scambiare fuori PROJECTNAME per il nome del progetto.

+1

Inoltre, sembra [questo codice] (https://github.com/apache/cordova-plugin-whitelist/blob/r1.1.0/src/ios/CDVNavigationWhitelistPlugin.m#L85-L88) (contrassegnato con versione 1.1.0) è stato recentemente rinominato/modificato in un [commit] (https://github.com/apache/cordova-plugin-whitelist/commit/9c2693b4ff6d98f859cbadddc9df683c508ae4a2#diff-58fc34aceb04ed0fc9c1c444fb50033fR102) 9 giorni fa. Forse prova la versione 1.1.0-dev'? – broinjc

+0

https://www.npmjs.com/package/cordova-plugin-whitelist l'ultima versione ha 6 mesi (v1.0.0) – broinjc

+0

lol - https://www.npmjs.com/package/cordova-plugin-whitelist- dev – broinjc