2014-09-06 8 views
6

Ich habe einen lokal ausgeführten Webserver, der JSON-formatierte Daten von einer Anzahl von Endpunkten aus bedient. Momentan schließe ich die Daten von jedem Endpunkt in separate .json-Dateien ein, die ich manuell dem App-Paket zur Verwendung in der App hinzufüge. Ist es möglich, diesen Prozess zu automatisieren, wenn das Projekt erstellt wird, vielleicht mithilfe eines Xcode-Build-Skripts?Ist es möglich, ein Xcode-Build-Skript zum Herunterladen von JSON-Dateien in das App-Paket zu verwenden?

Unten ist ein Beispiel für das, was ich erreichen möchte.

  1. Holen Sie die JSON-formatierten Daten von localhost: 3000/Beispiel.
  2. Stoppen Sie hier, wenn der Endpunkt nicht erreicht werden kann.
  3. Speichern Sie die Daten in einer Datei namens beispiel.json.
  4. Fügen Sie example.json dem App-Paket für die Verwendung in der App hinzu.

Jede Hilfe mit diesem würde sehr geschätzt werden.

bearbeiten

ich die JSON-formatierte Daten geholt haben, aber ich bin auf der Suche jetzt zu sehen, wie diese Daten können in die App-Bundle kopiert werden.

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

Eine gut geschriebene Post, aber wie es ist, ist Ihre Frage zu breit, und es gibt zu viele mögliche Lösungen . Stack Overflow hilft dabei, kaputten Code zu reparieren. Sie tun am besten, wenn Sie etwas von Ihrem eigenen Bash-Code diese Art von Arbeiten veröffentlichen können, dann können wir Ihnen helfen, es zu beheben. Und ...Ja, das scheint für die Tools, die Sie in der Frage markiert haben, durchaus machbar. Viel Glück – shellter

+0

Speichern Sie keine Daten im Anwendungspaket, da System beim Start eine App-Prüfsumme prüft. In den Ordner Dokumente speichern. – orkenstein

Antwort

0

nicht sicher, ob ich hier Ihre Daten bekommen, aber das ist, was ich auch etwas Hilfe von dieser Lösung implementiert: How can I save a JSON response to a file that would be accessible from within a local HTML file loaded inside UIWebWiew

(1) Hier ist die Funktion, die greifen wird JSON-Datei. Diese Funktion weist grundsätzlich die URL zu, die Sie auf eine Zeichenfolge ausrichten. Dann formatieren Sie es zu einem NSURL. Dies ist dann formatiert als NSData, die den Inhalt der URL greifen wird. Die Daten werden serialisiert und dann bereit, um die entsprechenden Elemente anzusprechen.

- (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) Um in den Bewerbungsunterlagen Verzeichnis auf die Datei zu verweisen

 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

Hier ist, wie ich die gleiche Sache in meinem Projekt tat.

Ich ging zu meinem Ziel -> Phasen beim Aufbau -> + -> 'New Run Script Phase' und hinzugefügt, um das folgende Skript:

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" 

ich zur Zeit auf das Hinzufügen einiger Validierung an den Prozess arbeite, aber als Ausgangspunkt funktioniert das für mich.

Hoffe, dass hilft!

UPDATE

Hier ist der gleiche Code mit einigen JSON hinzugefügt Validierung:

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 
Verwandte Themen