Ich bin neu in der Cordova CLI.
Ich muss die folgenden Schritte programmgesteuert über Cordova ausführen.
- Fügen Sie in der Projektliste eine neue Zeile hinzu
- Geben Sie die folgenden Werte in die neue Zeile ein:
- Schlüssel : GDLibraryMode Typ : String (Standard) Wert : GDEnterpriseSimulation
Ich denke, ich muss dies in der Datei config.xml im Stammverzeichnis meines Projekts tun (oder vielleicht in der Datei im Ordner "Plattformen").
Kann mir jemand erklären, wie man den Eintrag über die Datei config.xml hinzufügt, damit der obige Eintrag zur Kompilierungszeit hinzugefügt wird?
Ich verwende Cordova 3.3.1-0.42 (ich weiß, dass es nicht das neueste ist). Ich habe mein Projekt bereits erstellt und alles ist in Ordnung. Ich muss nur diesen Eintrag zur pList hinzufügen.
Antworten:
Ich glaube nicht, dass Sie dies durch direkte
config.xml
Modifikation tun können . Zumindest habe ich dies in den Dokumenten nicht erwähnt: http://cordova.apache.org/docs/en/3.3.0/config_ref_index.md.htmlIch denke, Sie müssen ein Plugin erstellen, da sie Plist-Einträge einfügen können: http://docs.phonegap.com/de/3.3.0/plugin_ref_spec.md.html#Plugin%20Specification
Siehe den Abschnitt 'Konfigurationsdateielement'. Hier ist eine Vermutung, wie der relevante Abschnitt des
plugin.xml
aussehen wird:<platform name="ios"> <config-file target="*-Info.plist" parent="CFBundleURLTypes"> <array> <dict> <key>GDLibraryMode</key> <string>GDEnterpriseSimulation</string> </dict> </array> </config-file> </platform>
Dann können Sie das Plugin installieren:
cordova plugin add <your plugin name or file location>
quelle
parent
, während der Wertteil das innere XML sein sollte. In diesem speziellen Fall sollte es wie folgt aussehen: <config-file target = "* - Info.plist" parent = "GDLibraryMode"> <string> GDEnterpriseSimulation </ string> </ config-file>config.xml
über das<config-file>
Element erfolgen. Weitere Informationen hierzu finden Sie in den anderen Antworten.Ich mag die Lösung von @ james mit einem Cordova-Haken sehr. Es gibt jedoch zwei Probleme. In den Dokumenten heißt es :
/hooks
Verzeichnis gilt als veraltet zugunsten der Hook-Elemente inconfig.xml
"Hier ist eine Node.js-Implementierung mit dem plist NPM-Paket:
var fs = require('fs'); // nodejs.org/api/fs.html var plist = require('plist'); // www.npmjs.com/package/plist var FILEPATH = 'platforms/ios/.../...-Info.plist'; module.exports = function (context) { var xml = fs.readFileSync(FILEPATH, 'utf8'); var obj = plist.parse(xml); obj.GDLibraryMode = 'GDEnterpriseSimulation'; xml = plist.build(obj); fs.writeFileSync(FILEPATH, xml, { encoding: 'utf8' }); };
Von allen von Cordova angebotenen Hakentypen sind die für Ihre Situation relevanten:
after_prepare
before_compile
Wählen Sie einen Hook-Typ und fügen Sie den Hook Ihrer
config.xml
Datei hinzu:<platform name="ios"> <hook type="after_prepare" src="scripts/my-hook.js" /> </platform>
quelle
plist
hatte einige Probleme beim Parsen meiner plist-Datei, daher konnte ich diese Lösung nicht verwenden und entschied mich für James ', der die ausführbare PListBuddy-Datei verwendet, die auf Macs enthalten ist. Dies war eine gute Lösung, wenn nur dieplist
Bibliothek zuverlässiger wäre. Ich habe mein Skript aus derconfig.xml
Datei referenziert, wie Sie es empfohlen haben.Sie können das PlistBuddy- Dienstprogramm in einem Cordova-Hook- Skript verwenden, um die Datei * -Info.plist zu ändern.
Zum Beispiel habe ich das folgende Skript, unter
<project-root>/hooks/after_prepare/010_modify_plist.sh
dem eine Wörterbuch-Eigenschaft und ein Eintrag in diesem Wörterbuch hinzugefügt werden:#!/bin/bash PLIST=platforms/ios/*/*-Info.plist cat << EOF | Add :NSAppTransportSecurity dict Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool YES EOF while read line do /usr/libexec/PlistBuddy -c "$line" $PLIST done true
Stellen Sie sicher, dass das Skript ausführbar ist (
chmod +x
).Das
true
am Ende des Skripts ist, weilPlistBuddy
mit einem Fehler-Exit-Code zurückgegeben wird, wenn der hinzugefügte Schlüssel bereits vorhanden ist, und keine Möglichkeit bietet, zu erkennen, ob der Schlüssel bereits vorhanden ist. Cordova meldet einen Build-Fehler, wenn das Hook-Skript mit einem Fehlerstatus beendet wird. Eine bessere Fehlerbehandlung ist möglich, aber schwierig umzusetzen.quelle
config.xml
TachyonVortex empfohlen.Remove : NSAppTransportSecurity
kurz vor der add-Anweisung hinzu, und die NSAppTransportSecurity wird zuerst gelöscht und dann hinzugefügt. Dies sollte nichts zum Absturz bringen.Dies sind die Schritte, die ich letztendlich ausgeführt habe, damit meine Anwendung Dateien über iTunes zwischen Geräten freigeben kann.
1. Navigieren Sie in Ihrer Anwendung zu Ihrer config.xml. Geben Sie dieses Teil in Ihre Konfiguration unter dem Plattform-Tag ein
<platform name="ios">
.<config-file platform="ios" target="*-Info.plist" parent="UIFileSharingEnabled"> <true/> </config-file>
2. Gehen Sie dann zu Ihrem Befehlszeilenprogramm und geben Sie Folgendes ein: cordova prepare
Stellen Sie sicher, dass Cordova auf dem neuesten Stand ist und dass Sie die Plattform für ios hinzugefügt haben.
npm install -g cordova
Dieser Befehl installiert Cordova.
cordova platform add ios
Dieser Befehl fügt die Plattform für ios hinzu.
Wenn Sie den Befehl cordova prepare ausführen, verwenden Sie das Xcode SDK von Apple, das im Ordner platform / ios generiert wird. Dort sehen Sie die für Ihre Anwendung generierte plist-Datei, die als "yourApp-info.plist" gekennzeichnet ist. Dort sehen Sie den neuen Schlüssel und die neue Zeichenfolge, die im XML-Layout erstellt wurden und folgendermaßen aussehen:
<key>UIFileSharingEnabled</key> <true/>
Als Warnung warnte mein Unternehmen vor ein paar Wochen (mit einer wirklich kurzen Frist) diese Anwendung für ionische Gerüste auf meinem Schoß. Alles, was ich Ihnen erzähle, basiert auf ein paar Wochen Lernen. Das ist vielleicht nicht die beste Vorgehensweise, aber ich hoffe, es hilft jemandem.
Bearbeiten
Link zu den Dokumenten
quelle
<config-file>
Element wurde in Cordova CLI Version 7 hinzugefügt. Mit einer neueren Version der Cordova CLI funktioniert dies ( ein reproduzierbarer Beweis des Autors von cordova-custom-config finden Sie in dieser Github-Ausgabe ).Dies scheint jetzt mit der Datei config.xml möglich zu sein: Zumindest einige Autoren von Kern-Plugins sagen dies. In den Dokumenten für das Cordova Camera Plugin wird beispielsweise die neue Anforderung in iOS 10 erläutert , dass Sie eine Berechtigungsnachrichtenzeichenfolge in der Liste angeben. Um dies zu erreichen, schlagen sie vor, den Plugin-Befehl add mit Argumenten auszuführen, also:
cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="My App would like to access your camera, to take photos of your documents."
Dies hat zur Folge, dass Sie nicht nur eine neue
<plugin>
Datei zu config.xml hinzugefügt bekommen, sondern auch ein untergeordnetes Element<variable>
:<plugin name="cordova-plugin-camera" spec="~2.3.0"> <variable name="CAMERA_USAGE_DESCRIPTION" value="My App would like to access your camera, to take photos of your documents." /> </plugin>
Was scheint dann mit den neuen Schlüsseln in meiner info.plist zu korrelieren, vielleicht die Werte zur Laufzeit irgendwie zu übergeben?
<key>NSCameraUsageDescription</key> <string/> <key>NSPhotoLibraryUsageDescription</key> <string/>
Ich würde lügen, wenn ich sagen würde, dass ich genau weiß, wie es funktioniert, aber es scheint den Weg zu weisen.
quelle
<variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="whatever" />
<string>Random camera usage text</string>
unter dem Schlüssel ein hinzufügen,<key>NSCameraUsageDescription</key>
damit mein Build akzeptiert wurde. Die Konfiguration fügt den Text nicht hinzuUPDATE: für Benutzer, die eine Kamera mit iOS> = 10 verwenden möchten. Dies bedeutet, dass Sie das Plugin normalerweise wie folgt konfigurieren können:
<!-- ios --> <platform name="ios"> <config-file target="*-Info.plist" parent="NSLocationWhenInUseUsageDescription"> <string></string> </config-file> <config-file target="*-Info.plist" parent="NSCameraUsageDescription"> <string></string> </config-file> <config-file target="*-Info.plist" parent="NSPhotoLibraryUsageDescription"> <string></string> </config-file> </platform>
Aber im Moment können Sie nicht konfigurieren
NSCameraUsageDescription
undNSPhotoLibraryUsageDescription
Plugin. Sie müssen sie in Plattform -> iOS-Projekt per Xcode oder in*-Info.plist
Datei konfigurieren .Weitere Informationen: https://www.npmjs.com/package/cordova-plugin-camera
quelle
Ich benutze das Folgende in der ionischen 3 ohne zusätzliches Plugin oder Importe und denke, dass dies für andere hilfreich sein könnte:
<platform name="ios"> <edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription"> <string>Location is required so we can show you your nearby projects to support.</string> </edit-config> <edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription"> <string>Camera accesss required in order to let you select profile picture from camera.</string> </edit-config> <edit-config file="*-Info.plist" mode="merge" target="NSPhotoLibraryUsageDescription"> <string>Photo library accesss required in order to let you select profile picture from gallery / library.</string> </edit-config> </platform>
quelle
Sie können den Anzeigenamen in der App-Liste festlegen, indem Sie die Datei ios.json direkt im Plugins-Verzeichnis bearbeiten.
Das Hinzufügen des Folgenden zum Abschnitt config_munge.files der Datei ios.json reicht aus und wird auch bei Verwendung der CLI beibehalten.
"*-Info.plist": { "parents": { "CFBundleDisplayName": [ { "xml": "<string>RevMob Ads Cordova Plugin Demo</string>", "count": 1 } ] } }
Hier ist ein vollständiges Beispiel
quelle
/plugins/ios.json
beim Ausführen verloren,cordova platform remove ios
gefolgt voncordova platform add ios
. Zweitens bat @ Red2678 um eine Lösung, um "die Bearbeitung programmgesteuert über Cordova durchzuführen ... damit der neue Eintrag zur Kompilierungszeit hinzugefügt wird".Die @ TachyonVortex- Lösung scheint die beste Option zu sein, stürzte jedoch in meinem Fall ab. Das Problem wurde durch ein leeres NSMainNibFile-Feld verursacht, das vom plist NPM-Paket nicht richtig konvertiert wurde. In der .plist- Datei
<key>NSMainNibFile</key> <string></string> <key>NSMainNibFile~ipad</key> <string></string>
wird konvertiert zu:
<key>NSMainNibFile</key> <string>NSMainNibFile~ipad</string>
Ich habe es behoben, indem ich dem Skript hinzugefügt habe:
obj.NSMainNibFile = ''; obj['NSMainNibFile~ipad'] = '';
Das Skript sieht schließlich so aus (scripts / my-hook.js):
var fs = require('fs'); // nodejs.org/api/fs.html var plist = require('plist'); // www.npmjs.com/package/plist var FILEPATH = 'platforms/ios/***/***-Info.plist'; module.exports = function (context) { var xml = fs.readFileSync(FILEPATH, 'utf8'); var obj = plist.parse(xml); obj.GDLibraryMode = 'GDEnterpriseSimulation'; obj.NSMainNibFile = ''; obj['NSMainNibFile~ipad'] = ''; xml = plist.build(obj); fs.writeFileSync(FILEPATH, xml, { encoding: 'utf8' }); };
und config.xml:
<platform name="ios"> <hook type="before_build" src="scripts/my-hook.js" /> </platform>
quelle
patch_plist.js
in dashooks/after_platform_add
Verzeichnis mit diesem Code geschrieben. Aber ich komme immer noch<key>NSMainNibFile</key><string>NSMainNibFile~ipad</string>
in meine Plist-Datei. Haben Sie eine Idee, wie ich dieses Problem lösen könnte?Ich habe dieses Plugin verwendet, um das Problem zu lösen. Vielleicht kann es Ihnen helfen:
https://www.npmjs.com/package/cordova-plugin-queries-schemes
quelle
Ja, es ist möglich!
Ich verwende Cordova 9.0.0 ([email protected]).
Zum Beispiel ist dies die Konfigurationsdatei, mit der ich einen neuen Zeichenfolgenwert in Info.plist eingefügt habe:
<platform name="ios"> <edit-config file="*-Info.plist" mode="merge" target="NSMicrophoneUsageDescription"> <string>My awesome app wish to hear your awesome voice through Microphone. Not for fancy stuff, just want to hear you.</string> </edit-config> <edit-config file="*-Info.plist" mode="merge" target="---Key configuration---"> <string>---string value---</string> </edit-config> </platform>
Vergessen Sie danach nicht, Ihre Staging-Datei neu zu erstellen, indem Sie diese beiden Befehle in Ihrem Terminal ausführen:
cordova platform rm ios cordova platform add ios
Um die Änderung zu bestätigen, können Sie die neu generierte .plist-Datei überprüfen, indem Sie sie mit xCode öffnen.
-Info.plist Datei befindet sich unter:
./platform/ios/[your app name]/[your app name]-Info.plist
quelle
edit-config
setzt voraus, dass das Ziel bereits in Ihrer Liste vorhanden ist. Um ganz klar zu sein, wenn Sie ein neues Schlüssel / String-Paar hinzufügen möchten, sollten Sieconfig-file
stattdessen verwenden, das dem XML-Baum neue Kinder hinzufügtWenn Sie versuchen, ein
.plist
in einem nativen iOS-Plugin mit einem<config-file>
Tag in Ihrem zu ändernplugin.xml
, müssen Sie Folgendes tun:Stellen Sie sicher, dass Sie
.plist
XML ist, nicht binär! Sie könnenplutil
eine Binärdatei.plist
in XML konvertieren und sie der Versionskontrolle übergeben.plutil -convert xml1 Info.plist
Die Anweisungen für
<config-file>
geben an, dass diestarget=
relativ zum generierten xcode-Projekt bei istplatforms/ios/<project>/
, aber ich stellte fest, dass ich meinem Pfad ein Platzhalterzeichen voranstellen musste, damit es funktioniert:target="*/Resources/MyResources.bundle/Info.plist"
Wenn Sie einen Schlüssel auf der obersten Ebene von hinzufügen möchten
.plist
, müssen Sie das übergeordnete Element gleich dem Schlüsselnamen setzen und dann ein<string>
Tag mit dem Wert verschachteln . Mit Hilfe eines<array>
oder<dict>
als beliebige Beispiele dieser Schlüssel verursachen Beobachtungen zeigen ineinander verschachtelte sein unterparent
.Hier ist ein vollständiges Beispiel, das für mich zum Hinzufügen mehrerer Eigenschaften der obersten Ebene funktioniert:
<platform name="ios"> <config-file target="*/Resources/MyResources.bundle/Info.plist" parent="MyDistribution"> <string>Cordova</string> </config-file> <config-file target="*/Resources/MyResources.bundle/Info.plist" parent="MyVersion"> <string>3.2.0</string> </config-file> </platform>
quelle
Ich bevorzuge den after_prepare-Hook für größere Projekte oder wenn Sie mehrere Plugins mit denselben Berechtigungen haben. Aber Sie können immer den einfachen Weg gehen:
Einfach: - Entfernen Sie das Plugin, für das die gewünschte Berechtigung erforderlich ist. - Fügen Sie es erneut mit --save - in config.xml hinzu. Das Plugin verfügt nun über eine neue Variable mit einer leeren Beschreibung, die Sie ausfüllen können. Erstellen Sie jetzt ios mit - release und sie werden gesetzt.
quelle
Ich hatte einige Tage zuvor das gleiche Problem mit meinem IONIC 4-Projekt. Als ich meine IPA hochgeladen habe, habe ich diese Warnungen von App Store Connect erhalten.
Ich habe versucht, dieses Problem in der Datei "Config.xml" zu beheben. aber ich habe keine richtige Lösung dafür gefunden.
Ich habe das anders behoben. Ich habe den Wert in "XCODE" gesetzt. Der folgende Link wurde bereits beantwortet: Der NSPhotoLibraryUsageDescription-Schlüssel muss in der Info.plist vorhanden sein, um die Kamerarolle verwenden zu können
Vielen Dank.
quelle
Sie müssen nur die folgenden Schritte 1 ausführen.
quelle