Ich möchte ein Skript schreiben, das Informationen wie Bundle Identifier oder vielleicht Versionsnummer aus der Info.plist der App lesen kann. Xcode scheint diese Informationen nicht in seinen Umgebungsvariablen anzugeben. Gibt es einen anderen Weg, sie in sh/bash zu bekommen?Wie man plistinformation (Bündel-ID) von einem Shell-Skript liest
Antwort
Der defaults
Befehl kann auf jede plist-Datei lesen/schreiben, es nur einen Weg geben, abzüglich die .plist
Erweiterung:
$ defaults read /Applications/Preview.app/Contents/Info CFBundleIdentifier
com.apple.Preview
Dies zieht den CFBundleIdentifier
Wert direkt aus der Info.plist
Datei der Anwendung zu bündeln.
Defaults funktioniert auch mit Binärplisten ohne zusätzliche Schritte.
Sie können die Datei direkt aus dem gebauten Produkt lesen. Wenn Sie jedoch die Datei info.plist selbst im Editor betrachten, sehen Sie die Shell-Variablen selbst. Z.B. die Bundle-ID hat die folgende Shell-Befehl:
com.yourcompany.${PRODUCT_NAME:rfc1034identifier}
Sie können ${PRODUCT_NAME:rfc1034identifier}
in jedem Shell-Skript aufrufen, die Xcode läuft und es sollte füllen.
Das klingt gut, obwohl ich es nicht getestet habe. Der Nachteil ist, dass du die Bundle-ID nicht zurückbekommst, sondern nur den letzten Teil, also musst du den "com.mycompanyname" -Teil irgendwo fest codieren ... – Dimitris
Auf dem Mac ist ein Befehlszeilenprogramm namens PlistBuddy installiert, das Werte in einem PLIST lesen/schreiben kann. Tippe 'man PlistBuddy' im Terminal, um weitere Informationen zu erhalten.
Ich habe PlistBuddy ausprobiert und viel damit gespielt. Das Problem ist, dass PlistBuddy die Bundle-ID drucken, aber nicht zurückgeben kann (es gibt nur 0 oder 1 zurück). Da ich ein Shell-Noob bin, hatte ich Schwierigkeiten, das einer Variablen zuzuordnen. Es war jedoch, wie ich es geschafft habe, es zum Laufen zu bringen. Ich werde jetzt meine Antwort posten. – Dimitris
Mit PlistBuddy, eine App von Apple ist es möglich, die Zeichenfolge zuweisen wie folgt var:
#!/bin/sh
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${BUILD_ROOT}/${INFOPLIST_PATH}")
Wo BUILD_ROOT und INFOPLIST_PATH sind Variablen, die von Xcode gesetzt, wenn Sie dieses Skript in einem "Run Script" laufen Bauphase.
PlistBuddy ist nicht immer im System vorhanden. Wenn Sie das Skript verteilen, können Sie die Verwendung von Standardwerten in Erwägung ziehen, wie die anderen Antworten darauf zeigen. –
- 1. Wie liest man von stdin?
- 2. Wie liest man Daten aus einem XML?
- 3. Wie liest man von einem os.pipe() ohne blockiert zu werden?
- 4. Wie liest man Frames von einem Core Dump (ohne GDB)?
- 5. Wie liest man eine Datei von einem URI mit StreamReader?
- 6. Wie man Daten von einem Objekt liest Javascript
- 7. Wie liest man die Werte von einem QTableWidget mit Python?
- 8. Asynchrone Shellskript in Cocoa-Applescript?
- 9. Wie liest man XMI?
- 10. Wie liest man CPAN Changelogs?
- 11. Wie liest man die Assemblyversion von assemblyInfo.cs?
- 12. Wie liest man mehrere Resultsets von SqlDataReader?
- 13. Wie liest man BLOB von Oracle DB?
- 14. Wie man Daten von NSDocumentDirectory liest
- 15. Wie liest man von USB ohne Treiber?
- 16. Wie liest man CSV von ARGF
- 17. Wie liest PipedInputStream von einem OutputStream?
- 18. Wie liest man Python-Bytecode?
- 19. Wie man Dropzone Dateien liest
- 20. Wie liest man einen Befehlszeilenparameter, der einem Deinstallationsprogramm gegeben wird?
- 21. C++ Boost ASIO: Wie man mit einem Timeout liest/schreibt?
- 22. Wie liest man die Bildschirmpixel?
- 23. Wie liest man die Beizdatei?
- 24. Gulp: Wie man Ordnername liest?
- 25. Wie liest man den Temperatur-/Feuchtigkeitssensor an einem Intel Edison?
- 26. Wie schreibt/liest man auf eine Smartcard?
- 27. Wie liest man nur das erste Kind?
- 28. In Ruby, Wie liest man UTF-8 aus einem Sockel?
- 29. Wie liest man Zeile für Zeile in einem HTML-Textbereich?
- 30. Wie liest man einen übergebenen Parameter in einem WPF UserControl?
Dies ist die bessere Antwort (besonders da PlistBuddy nicht mehr standardmäßig installiert ist); Sie sollten es auswählen. – Olie
Beachten Sie auch, dass standardmäßig ein vollständiger Pfad und kein relativer Pfad angezeigt werden soll, selbst wenn Sie sich gerade in dem Verzeichnis mit der PLIST-Datei befinden, die Sie lesen möchten. (Seltsam!) – Olie
Also, wenn Sie es innerhalb eines Verzeichnisses tun, können Sie verwenden: Standard schreiben $ PWD/SomeMyDirectory/Info.plist CFBundleIdentifier "com.apple.Preview" – iVader