Cordova CLIを初めて使用します。
Cordovaを介して次の手順をプログラムで実行する必要があります。
プロジェクトのルート(または「プラットフォーム」フォルダーにある)のconfig.xmlファイルでこれを行う必要があると思います。
上記のエントリがコンパイル時に追加されるように、config.xmlを介してエントリを追加する方法を誰かに説明できますか?
Cordova 3.3.1-0.42を使用しています(最新ではありません)。私はすでに自分のプロジェクトを作成しており、すべて問題ありません。このエントリをpListに追加するだけです。
config.xml
を直接修正することでこれを行えるとは思いません。少なくとも、ドキュメントにはこれに関する言及はありませんでした: http://cordova.Apache.org/docs/en/3.3.0/config_ref_index.md.html
プラグインはplistエントリを挿入できるため、プラグインを作成する必要があると思います: http://docs.phonegap.com/en/3.3.0/plugin_ref_spec.md.html#Plugin%20Specification
「config-file要素」セクションを参照してください。 plugin.xml
の関連セクションがどのようになるかについての推測は次のとおりです。
<platform name="ios">
<config-file target="*-Info.plist" parent="CFBundleURLTypes">
<array>
<dict>
<key>GDLibraryMode</key>
<string>GDEnterpriseSimulation</string>
</dict>
</array>
</config-file>
</platform>
次に、プラグインをインストールできます:cordova plugin add <your plugin name or file location>
@jamesの solution がCordovaフックを使用しているのが本当に好きです。ただし、2つの問題があります。 docs 状態:
/hooks
ディレクトリは、config.xml
のフック要素を支持して非推奨と見なされます。」plist NPMパッケージを使用したNode.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';
xml = plist.build(obj);
fs.writeFileSync(FILEPATH, xml, { encoding: 'utf8' });
};
Cordovaが提供するすべてのフックタイプのうち、状況に関連するものは次のとおりです。
after_prepare
before_compile
フックタイプを選択し、config.xml
ファイルにフックを追加します。
<platform name="ios">
<hook type="after_prepare" src="scripts/my-hook.js" />
</platform>
PlistBuddy ユーティリティを Cordovaフック スクリプト内で使用して、*-Info.plistファイルを変更できます。
たとえば、辞書プロパティを追加し、その辞書内にエントリを追加する<project-root>/hooks/after_prepare/010_modify_plist.sh
の下に次のスクリプトがあります。
#!/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
必ずスクリプトを実行可能にしてください(chmod +x
)。
スクリプトの最後にあるtrue
は、追加するキーが既に存在する場合、PlistBuddy
がエラー終了コードを返し、キーが既に存在するかどうかを検出する方法を提供しないためです。フックスクリプトがエラーステータスで終了した場合、Cordovaはビルドエラーを報告します。より良いエラー処理は可能ですが、実装するのは大変です。
これらは、アプリケーションがデバイス間でiTunesを介してファイルを共有できるようにするために行った手順です。
1.アプリケーションで、config.xmlに移動します。プラットフォームタグ<platform name="ios">
の下の構成にこの部分を入力します。
<config-file platform="ios" target="*-Info.plist" parent="UIFileSharingEnabled">
<true/>
</config-file>
2.次に、コマンドラインツールに移動して、次を入力します。cordova prepare
いくつかのこと、cordovaが最新であること、およびiOS用のプラットフォームを追加したことを確認してください。
npm install -g cordova
このコマンドはcordovaをインストールします。
cordova platform add ios
このコマンドは、iosのプラットフォームを追加します。
何が起こっているかは、platform/iosフォルダーに生成されたAppleのXcode SDKを使用しているcordova prepareコマンドを実行したときです。ここで、アプリケーション用に生成されたplistファイルを確認できます。このファイルには、「yourApp-info.plist」というラベルが付いています。 xmlレイアウトで生成された新しいキーと文字列が次のように表示されます。
<key>UIFileSharingEnabled</key>
<true/>
また、警告の言葉として、私の会社はこのionicフレームワークアプリケーションを数週間前に私のラップに落としました(本当に短い期限で)。私があなたに言っていることはすべて、数週間の学習に基づいています。したがって、これはベストプラクティスではないかもしれませんが、誰かの助けになることを願っています。
これは、config.xmlを使用することで可能になったようです。少なくとも一部のコアプラグイン作成者はそう言っています。たとえば、 Cordova Camera Plugin のドキュメントでは、plistで許可メッセージ文字列を提供するというiOS 10の新しい要件について説明しています。それを達成するために、彼らはプラグインを引数付きでaddコマンドを実行することを提案します。
cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="My App would like to access your camera, to take photos of your documents."
これにより、config_xmlに新しい<plugin>
が追加されるだけでなく、<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>
Info.plistの新しいキーと相関しているように見えますが、おそらく実行時に値を渡すのでしょうか?
<key>NSCameraUsageDescription</key>
<string/>
<key>NSPhotoLibraryUsageDescription</key>
<string/>
私はそれがどのように機能するかを正確に知っていると言ったら嘘をつきますが、それは道を指しているようです。
更新:10以上のiOSでカメラを使用したい場合。通常、プラグインで次のように設定できます。
<!-- 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>
しかし、今のところ、プラグインでNSCameraUsageDescription
とNSPhotoLibraryUsageDescription
を設定することはできません。プラットフォーム-> XcodeによるiOSプロジェクトまたは*-Info.plist
ファイルで設定する必要があります。
IOS 10以降、info.plistにNSCameraUsageDescriptionとNSPhotoLibraryUsageDescriptionを追加することが必須です。
私はionicで追加のプラグインやインポートなしで次を使用していますが、これは他の人に役立つと思います:
<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>
Pluginsディレクトリのios.jsonを直接編集することにより、アプリのplistに表示名を設定できます。
Ios.jsonファイルのconfig_munge.filesセクションに以下を追加すると、トリックが行われ、CLIを使用している場合でも維持されます。
"*-Info.plist": {
"parents": {
"CFBundleDisplayName": [
{
"xml": "<string>RevMob Ads Cordova Plugin Demo</string>",
"count": 1
}
]
}
}
@TachyonVortex solution は最良のオプションのようですが、私の場合はクラッシュしていました。この問題は、plist NPMパッケージによって正しく変換されない空のNSMainNibFileフィールドが原因で発生しました。 。plistファイル
<key>NSMainNibFile</key>
<string></string>
<key>NSMainNibFile~ipad</key>
<string></string>
に変換されます:
<key>NSMainNibFile</key>
<string>NSMainNibFile~ipad</string>
スクリプトに追加して修正しました:
obj.NSMainNibFile = '';
obj['NSMainNibFile~ipad'] = '';
スクリプトは最終的に次のようになります(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' });
};
およびconfig.xml:
<platform name="ios">
<hook type="before_build" src="scripts/my-hook.js" />
</platform>
このプラグインを使用して問題を解決しましたが、おそらくあなたを助けることができます:
https://www.npmjs.com/package/cordova-plugin-queries-schemes
私は、より大きなプロジェクトや、同じ許可を使用する複数のプラグインがある場合、after_prepareフックを好みます。しかし、あなたはいつでも簡単な方法で行くことができます:
単純に:-必要な許可を必要とするプラグインを削除します-再度保存しますそれらが設定されます。
.plist
に<config-file>
タグを付けて、ネイティブiOSプラグインのplugin.xml
を変更しようとしている場合、以下を行う必要があります。
.plist
がバイナリではなくxmlであることを確認してください!plutil
を使用してバイナリ.plist
をxmlに変換し、バージョン管理にコミットできます。
plutil -convert xml1 Info.plist
<config-file>
の指示は、target=
がplatforms/ios/<project>/
で生成されたxcodeプロジェクトに関連していることを示していますが、それを機能させるにはパスにワイルドカード文字を追加する必要があることがわかりました。
target="*/Resources/MyResources.bundle/Info.plist"
.plist
の最上位にキーを追加する場合は、親をキー名と同じに設定してから、値で<string>
タグをネストする必要があります。 <array>
または<dict>
を使用すると、これらのキーはネストされますnderparent
。
以下に、複数のトップレベルプロパティを追加するのに役立つ完全な例を示します。
<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>
はい、可能です!
Cordova 9.0.0([email protected])を使用しています。
たとえば、これはInfo.plistに新しい文字列値を挿入するために使用した構成ファイルです。
<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>
その後、ターミナルで次の2つのコマンドを実行してステージングファイルを再構築することを忘れないでください。
cordova platform rm ios
cordova platform add ios
変更を確認するには、xCodeで開いて、新しく生成された.plistファイルを確認できます。
-Info.plistファイルは次の場所にあります。
./platform/ios/[your app name]/[your app name]-Info.plist