2015-09-14 12 views
7

Per la mia applicazione, ho bisogno di aggiungere alcune impostazioni al file Info.plist per iOS. Ho pensato che il modo migliore per farlo sarebbe quello di aggiungere queste impostazioni al mio file config.xml (sto usando PhoneGap). Quando ho aggiungere il seguente al file config.xml ed eseguirePhoneGap: modifica config.xml per aggiungere proprietà a Info.plist ion iOS

cordova build ios 

o

cordova update platform ios 

Nulla viene aggiunto al mio file Info.plist, e io assolutamente non hanno idea perché. Il build mostra "successo", quindi non penso ci sia un errore di sintassi.

ho provato:

<platform name="ios"> 
    <allow-intent href="itms:*" /> 
    <allow-intent href="itms-apps:*" /> 
    <config-file target="*-Info.plist" parent="NSAppTransportSecurity"> 
     <array> 
      <dict> 
       <key>NSExceptionDomains</key> 
       <array> 
        <dict> 
         <key>s3.amazonaws.com</key> 
         <array> 
          <dict> 
           <!--Include to allow subdomains--> 
           <key>NSIncludesSubdomains</key> 
           <true/> 
           <!--Include to allow insecure HTTP requests--> 

<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
           <true/> 
           <!--Include to specify minimum TLS version--> 
           <key>NSTemporaryExceptionMinimumTLSVersion</key> 
           <string>TLSv1.1</string> 
          </dict> 
         </array> 
        </dict> 
       </array> 
      </dict> 
     </array> 
    </config-file> 
</platform> 

E

<platform name="ios"> 
    <allow-intent href="itms:*" /> 
    <allow-intent href="itms-apps:*" /> 
    <config-file target="*-Info.plist" parent="NSAppTransportSecurity"> 
     <dict> 
      <key>NSExceptionDomains</key> 
       <dict> 
       <key>s3.amazonaws.com</key> 
       <dict> 
        <!--Include to allow subdomains--> 
        <key>NSIncludesSubdomains</key> 
        <true/> 
        <!--Include to allow insecure HTTP requests--> 
        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
        <true/> 
        <!--Include to specify minimum TLS version--> 
        <key>NSTemporaryExceptionMinimumTLSVersion</key> 
        <string>TLSv1.1</string> 
       </dict> 
      </dict> 
     </dict> 
    </config-file> 
</platform> 

E

<gap:config-file platform="ios" parent="NSAppTransportSecurity"> 
    <dict> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>s3.amazonaws.com</key> 
      <dict> 
       <!--Include to allow subdomains--> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <!--Include to allow insecure HTTP requests--> 
       <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
       <!--Include to specify minimum TLS version--> 
       <key>NSTemporaryExceptionMinimumTLSVersion</key> 
       <string>TLSv1.1</string> 
      </dict> 
     </dict> 
    </dict> 
</gap:config-file> 

E

<gap:config-file platform="ios" parent="NSAppTransportSecurity"> 
    <array> 
     <dict> 
      <key>NSExceptionDomains</key> 
      <array> 
       <dict> 
        <key>s3.amazonaws.com</key> 
        <array> 
         <dict> 
          <!--Include to allow subdomains--> 
          <key>NSIncludesSubdomains</key> 
          <true/> 
          <!--Include to allow insecure HTTP requests--> 

          <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
          <true/> 
          <!--Include to specify minimum TLS version--> 
          <key>NSTemporaryExceptionMinimumTLSVersion</key> 
          <string>TLSv1.1</string> 
         </dict> 
        </array> 
       </dict> 
      </array> 
     </dict> 
    </array> 
</gap:config-file> 

Ma nulla è stato aggiunto al file Info.plist. Cosa sto facendo di sbagliato qui?

+0

possibile duplicato di [Aggiungi voce al file .plist di iOS tramite Cordova config.xml] (http://stackoverflow.com/questions/22769111/add-entry-to-ios-plist-file-via-cordova-config -xml) – lifeisfoo

risposta

5

Realizzo questo utilizzando un gancio di build per iOS. Così, in config.xml avevo messo qualcosa di simile:

<hook type="before_build" src="../scripts/ios_before_build.sh" /> 

All'interno:

<platform name="ios"> 

elemento in config.xml

Poi mi piacerebbe creare un file chiamato ../ scripts/ios_before_build.sh, assicurati che abbia permessi di esecuzione (chmod 755 ../scripts/ios_before_build.sh) quindi imposta lo script per usare PlistBuddy per apportare le modifiche necessarie al file .plist.

Per esempio qui sto spegnendo iOS 9 requisito per SSL URL protetta di backend come le API per l'applicazione stavo sviluppando non usa https:

val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" platforms/ios/AppName/AppName-Info.plist 2>/dev/null) 

sto sopprimendo il codice di ritorno di PlistBuddy dato che fallirà se l'articolo esiste già. Qui sto aggiungendo un dict e impostando un valore booleano ma puoi fare una varietà di altre cose come da PlistBuddy documentation.

Poi, quando si fa:

cordova build ios 

verrà eseguito lo script, modificare il vostro plist poi la compilazione cordova continuerà.

Trovo questo pulitore come non mi piace avere la piattaforma o la cartella dei plug-in controllati in controllo di versione sui miei progetti Cordova.

+0

Grazie. Questo ha funzionato come un fascino. –

+1

probabilmente ios_before_build.sh avrà bisogno che la prima riga sia "#!/ usr/bin/env bash "altrimenti dirà" comando non trovato "quando viene eseguito il hook –

+0

@Simon Prickett HI, puoi spiegare come creare il file .sh? Sono su Windows. Sto usando il build di phonegap per compila la mia app. L'ho caricata con Application Loader e ho ricevuto un errore che diceva "Chiave Info.plist mancante ... L'app Info.plist deve contenere una chiave NSPhotoLibraryUsageDescription ..." Non ho idea di come lavorare con il plist in modo che il tuo – Sarah