Extensibility ConfigurationsのJSONスキーマ
OutSystemsでは、モバイルアプリを設定・カスタマイズしたり、プラグインを使用したりすることができます。アプリケーションの動作を変更したり、デバイスのネイティブ機能の使用を可能にするプラグインをインストールしたりする際に利用するのが、JSON表記を使用した構成プロパティです。
この構成プロパティは、Service StudioにモジュールのExtensibility Configurationsプロパティとして用意されています。これに定められている一連の制約およびスキーマに従うことで、OutSystemsによるモバイルアプリのパッケージ作成が可能になり、アプリケーションの不安定な動作を避けることができます。
制約
- JSONスキーマおよびキーと値のペアは、この記事で説明されている公式の構造に従うこと。
- 第1レベルのキーと値のペアは必須ではなく、かつ順不同。
- 開発者は、各々の名称と値のペアを小文字で書くこと(JSONは大文字・小文字を区別する)。
- リソースキー1つをJSONのみで指定すること。アプリで使用するすべてのコンテンツ(アイコン、スプラッシュ画面およびプラグイン)をファイルに含めること。
- リソースファイルをアプリ用に指定する場合、リソース名を「.zip」で終わらせること。
- リソースファイル名は、開発者が提出したリソース名と同一であること。
- JSON内のアセット(アイコンやスプラッシュ画面など)への指定パスが、そのリソースZIPファイル内のパスと同じであること。
これらの制約を守らないと、OutSystemsがモバイルアプリのパッケージを生成できなくなったり、アプリケーションの動作が不安定になったりすることがあります。
プロパティスキーマ
{ "plugin": { // プラグインを参照するには、以下の方法のうちいずれか1つを使用 "url": "<プラグインを含むgitレポジトリへのURL>", // または "identifier": "<プラグインの識別子>", // または "resource": "<リソースファイルのZIPに含まれるプラグインフォルダへのパス>", // プラグインに追加設定が必要な場合 "variables": [ { "name": "<プラグイン変数のアトリビュート名>", "value": <プラグイン変数のアトリビュート値>" }, /* ...必要に応じて変数を追加...*/ ] }, "preferences": { // ステータスバーのカスタマイズ設定のような、iOS/Androidで共通の設定 "global": [ { "name": "<Android/iOSアプリケーション用の設定名>", "value": "<Android/iOSアプリケーション用の設定値>" }, /* ...詳細なグローバル設定...*/ ], // Android専用 "android": [ { "name": "<Androidアプリケーション用の設定名>", "value": "<Androidアプリケーション用の設定値>" }, /* ...詳細なAndroid設定...*/ ], // iOS専用 "ios": [ { "name": "<iOSアプリケーション用の設定名>", "value": "<iOSアプリケーション用の設定値>" }, /* ...詳細なiOS設定...*/ ] }, "icons": { // Android専用 "android": [ { "resource": <Androidアプリ用のアイコンファイルへのリソースパス>", "density": "<Androidアイコンの密度>" }, /* ...(必須)すべてのAndroidアイコンのエントリ...*/ ], // iOS専用 "ios": [ { "resource": "<iOSアプリ用のアイコンファイルへのリソースパス>", "width": "<iOSアプリのアイコン幅>", "height": "<iOSアプリのアイコン高さ>" }, /* ...(必須)すべてのiOSアイコンのエントリ...*/ ], }, "splashscreens": { // Android専用 "android": [ { "resource": "<Androidアプリ用スプラッシュ画面ファイルへのリソースパス>", "density": "<Androidスプラッシュ画面の密度>" }, /* ...(必須)すべてのAndroidスプラッシュ画面のエントリ...*/ ], // iOS専用 "ios": [ { "resource": "<iOSアプリ用スプラッシュ画面ファイルへのリソースパス>", "width": "<iOSアプリのスプラッシュ画面幅>", "height": "<iOSアプリのスプラッシュ画面高さ>" }, /* ...(必須)すべてのiOSスプラッシュ画面のエントリ...*/ ], }, "resource": "<使用しているすべてのリソースを含むZIPファイルの名称>", "clientRuntime": { // 未処理のエラー画面をカスタマイズするには、以下のエントリを使用 "errorPage": { "messages": { "defaultMessage": "<一般的なエラーが発生した場合にユーザーに示されるメッセージ>", "screenNotFound": "<ユーザーが存在しない画面に移動しようとした場合に表示されるメッセージ>", "noDefaultScreen": "<アプリケーション内でデフォルト画面が設定されていない場合に表示されるメッセージ>", "appOffline": "<サーバーがオフラインの場合に表示されるエラーメッセージ>", "incompatibleProducer": "<アプリケーションが、互換性のないプロデューサモジュールを使用している場合に表示されるメッセージ>" }, "extraMessage": "<上記いずれかのエラーが発生した場合に表示される追加メッセージ>", "reloadLabel": f"<アプリケーションのリロードに使用するボタンが表示するテキスト>", "css": "<エラーページに組み入れるCSS規則>" } }, "access": [ // 以下のエントリを使用して、モバイルアプリが接続できるドメインを定義 { "origin": "<アクセス可能なドメインのプロトコルとURL>", "minimum-tls-version": "<最低限必要なTLSバージョン>", "requires-forward-secrecy": "<このオリジンに前方秘匿性が必要な場合はtrue>", "requires-certificate-transparency": "<このオリジンに証明書の透明性が必要な場合はtrue>" }, // 以下のテンプレートを使用してこれら3つのiOS専用フィールドを設定 { "origin": "*", "allows-arbitrary-loads-for-media": "<true_or_false>", "allows-arbitrary-loads-in-web-content": "<true_or_false>", "allows-local-networking": "<true_or_false>" }, /* ...ホワイトリストにドメインエントリを追加...*/ ] }