2014-09-06 10 views
6

Ho un server Web, in esecuzione localmente, che serve i dati in formato JSON da un certo numero di endpoint. Attualmente includo i dati di ciascun endpoint in file .json separati, che aggiungo manualmente al pacchetto dell'app da utilizzare all'interno dell'app. È possibile automatizzare questo processo ogni volta che viene creato il progetto, magari usando uno script di build Xcode?È possibile utilizzare uno script di build Xcode per scaricare i file JSON nell'app bundle?

Di seguito è riportato un esempio di ciò che sto cercando di ottenere.

  1. Recupera i dati in formato JSON da localhost: 3000/esempio.
  2. Arrestarsi qui se non è possibile raggiungere l'endpoint.
  3. Salvare i dati in un file chiamato example.json.
  4. Aggiungi example.json al pacchetto dell'app da utilizzare all'interno dell'app.

Qualsiasi aiuto con questo sarebbe molto apprezzato.

Modifica

Ho recuperato i dati in formato JSON, ma ora sto cercando di vedere come questi dati possono essere copiati in bundle app.

curl -o example.json http://localhost:3000/example 
+0

Un post ben scritto, ma come è, la tua domanda è troppo ampia, e ci sono anche molte soluzioni possibili . Stack Overflow sta aiutando a risolvere il codice rotto. Farai del tuo meglio se puoi pubblicare alcuni dei tuoi codici bash che funzionano, quindi possiamo aiutarti a risolverli. E ...sì, questo certamente sembra fattibile per gli strumenti che hai taggato sulla domanda. Buona fortuna – shellter

+0

Non salvare alcun dato nel pacchetto di applicazioni, poiché all'avvio viene eseguito il checksum dell'app per i test di sistema. Salva nella cartella Documenti. – orkenstein

risposta

0

Non sono sicuro se sto ricevendo le vostre specifiche proprio qui, ma questo è quello che ho implementato così come qualche aiuto da questa soluzione: How can I save a JSON response to a file that would be accessible from within a local HTML file loaded inside UIWebWiew

(1) Qui è la funzione che catturerà il file json. Questa funzione assegna fondamentalmente all'URL che si sta puntando a una stringa. Quindi formattarlo in un NSURL. Questo è quindi formattato come NSData che acquisirà il contenuto dell'URL. I dati saranno serializzati e quindi pronti a indirizzare gli elementi appropriati.

- (void)fetchJson 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *urlString = @"localhost:3000/example"; 
     NSURL *url = [NSURL URLWithString:urlString]; 

     NSData *jsonData = [NSData dataWithContentsOfURL:url]; 
     NSError *error = nil; 


     if(jsonData != nil) 
     { 
      NSError *error = nil; 
      id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; 
      if (error == nil) 
       NSLog(@"%@", result); 

      // (2) This part is dependent on how your json data is arranged (Target the 
      // right elements). 
      _endpoint = [result objectForKey:@"endpoint"]; 
      if(_endpoint == null){ 
        NSLog(@"%@", result); 
      } 

      else{ 

      //(3) This will save your data into the specified file name under the application documents directory. 

      NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"example.json"]; 
      [result writeToFile:filePath atomically:YES]; 
      } 


     } 
     else { 

      NSLog(@"%@", error); 
     } 

    } 

(4) per fare riferimento al file nella directory documenti di candidatura

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSError *jsonError = nil; 

     NSString *jsonFilePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; 
     NSData *jsonData = [NSData dataWithContentsOfFile:jsonFilePath options:kNilOptions error:&jsonError ]; 
3

Ecco come ho fatto la stessa cosa nel mio progetto.

sono andato al mio obiettivo -> Crea Fasi -> + -> 'Fase Script Nuovo Run' e ha aggiunto il seguente script:

curl -o ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/your_file.json http://localhost:3000/your_file.json 
echo "Your file downloaded to ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/your_file.json" 

Attualmente sto lavorando per aggiungere un po 'di convalida per il processo, ma come punto di partenza questo sta funzionando per me.

Spero che questo aiuti!

UPDATE

Qui è lo stesso codice con qualche aggiunta di convalida JSON:

YOUR_DATA=$(curl -s "http://localhost:3000/your_file.json" | python -m json.tool); 

if [ -n "$YOUR_DATA" ]; 
then 
echo "$YOUR_DATA" > ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/your_file.json; 
fi 
Problemi correlati