appinfo の編集

appinfo.json 構成ファイルは、キー値のペアとして格納された、アプリの動作を定義する情報を含んでいます。 このファイルで定義されたプロパティの多くは AppStudio[設定] で構成されますが、アイテムをこのファイルに手動で追加することが必要になる場合があります。

以下にリストするいくつかのカテゴリは、デフォルトでは appinfo.json 構成ファイルに存在しません。 その他のカテゴリは構成ファイルにすでに存在し、そのプロパティは [設定] で管理されています。 このトピックでリストされたプロパティは、[設定] で構成されるプロパティに追加されます。

appinfo.json ファイルはアプリのメイン フォルダーにあります。 これにアクセスするには、ArcGIS AppStudio でアプリの [ファイル] ボタンをクリックします。

機能

ケーパビリティ カテゴリは appinfo.json 構成ファイルにすでに存在し、[設定] ツールの [ケーパビリティ] セクションで選択されているオプションを使用して設定されます。 また、次のいずれかのプロパティを手動で追加できます。

  • backup - false に設定すると、アプリケーションのバックアップや復元は Android で実行されず、アプリがシステムの完全バックアップから除外されます。 指定されなかった場合のデフォルト値は false です。
  • ios.appTransportSecurity.allowArbitraryLoads - false に設定すると、ネットワーク接続に対してトランスポート セキュリティの制限が適用されます。 指定されなかった場合のデフォルト値は false です。
  • interAppFileSharing - true に設定すると、アプリのファイルに iOS 上の「ファイル」アプリを使用してアクセスできるようになります。 指定されなかった場合のデフォルト値は false です。
  • mediaLocation - true に設定すると、アプリは写真から編集されていない Exif メタデータを取得できるようになります。 指定されなかった場合のデフォルト値は false です。
  • indoorLocation - true に設定すると、屋内測位に必要なすべての Bluetooth 機能が有効になります。 指定されなかった場合のデフォルト値は false です。

次の例では、トランスポート セキュリティの制限は適用されません。

"capabilities": {
    "ios": {
        "appTransportSecurity": {
             "allowArbitraryLoads": true
    }
},

配置

配置カテゴリは appinfo.json 構成ファイルにすでに存在し、[設定] ツールの [プラットフォーム] および [詳細設定] セクションで選択されているオプションを使用して設定されます。 また、次のいずれかのプロパティを手動で追加できます。

  • android.trustUserCertificates - このプロパティを true に設定すると、アプリはすべての認証機関を受け入れるようになります。 デフォルトでは、これは false で、AppStudio アプリは、Android でのセキュリティ保護された接続用にユーザーが追加した認証機関を信頼しません。
  • android.minimumSdkVersion - アプリを実行するのに必要な API の最小レベルを定義します。 指定されなかった場合の AppStudio アプリのデフォルト値は 23 です。
  • android.targetSdkVersion - アプリの API の対象レベルを定義します。 また、ユーザーがアプリの権限を付与する方法にも影響します。 デバイスが Android 6.0 以降を実行していてアプリの対象 SDK が 23 以上である場合、ユーザーはアプリの実行中に必要な各権限を要求する必要があります。 指定されなかった場合の AppStudio アプリのデフォルト値は、ローカル Make で 31、クラウド Make で 34 です。 詳細については、「Google Play Console ヘルプ」をご参照ください。
    注意:

    ローカル Make ユーザーは、https://developer.android.com/google/play/requirements/target-sdk にリストされている要件を満たすために、アプリの appinfo.json ファイルで deployment.android.targetSdkVersion を 34 に設定する必要があります。

  • android.enableGooglePlayServicesSecurityProvider - 既知の脆弱性攻撃から保護するために、アプリが Google Play のセキュリティ プロバイダーを呼び出して、アプリが最新の更新を適用したデバイス上で動作していることを確認するかどうかを制御します。 指定されなかった場合の AppStudio アプリのデフォルト値は false です。
  • ios.minimumVersion - ソフトウェアを実行できるオペレーティング システムの最下位バージョンを定義します。 指定されなかった場合の AppStudio アプリのデフォルト値は 13.0 です。
  • desktop.allowOverwrite - true に設定すると、アプリの前のバージョンをアンインストールせずにアプリを Windows にインストールできます。指定されなかった場合のデフォルト値は false です。

次の例では、Android ですべての証明機関が受け入れられ、アプリをインストールできるオペレーティング システムの最下位バージョンは、Android が 6.0、iOS が 13.0 です。

"deployment": {
    "android": {
        "trustUserCertificates": true,
        "minimumSdkVersion": 23,
        "targetSdkVersion": 31
    },
    "ios": {
        "minimumVersion": "13.0"
    }
},

表示

表示カテゴリは appinfo.json 構成ファイルにすでに存在し、[設定] ツールの [表示] セクションで選択されているオプションを使用して設定されます。 また、次のいずれかのプロパティを手動で追加できます。

  • enableHighDpi - 高 DPI モードをサポートしているデバイスで、アプリを高 DPI モードで開くかどうかを決定します。 指定されなかった場合のデフォルト値は false です。
  • statusBar - 任意の iOS および Android デバイスでアプリを使用するときにステータス バーが表示されるかどうかを定義します。 これを、アプリの [設定] > [デバイス] タブにある [ステータス バー] オプションで設定される usesStatusBar プロパティと混同しないようにしてください。このプロパティはスマートフォンまたはタブレットでステータス バーを表示するかどうかを制御します。 指定されなかった場合のデフォルト値は false です。
  • ios.windowMode - アプリと iPad のマルチタスク機能との対話形式を定義し、同じ画面でこのアプリを他のアプリと並べて使用することができます。 デフォルトでは、アプリの [設定] > [デバイス] タブにあるタブレット オプションで縦モードまたは横モードのいずれかが無効になっている場合、このプロパティは有効になっています。ios.windowMode を無効にして、アプリが iPad の全画面でのみ実行されるようにするには、fullscreen に設定します。

次の例では、高 DPI が有効、ステータス バーがすべての iOS デバイスで有効で、アプリは iPad 上の全画面でのみ実行されます。

"display": {
    "enableHighDpi": true,
    "statusBar": true,
    "ios": {
       "windowMode": "fullscreen"
    }
},

作成

作成カテゴリは appinfo.json 構成ファイルにまだ存在しません。 次のいずれかのプロパティを手動で追加できます。

  • ignore - アプリを構築する場合にそのリソースから除外されるファイル名のパターンのリストを定義します。 これによって、アプリの開発中およびテスト中には役立つが、構築時には不要なファイルを、アプリ アイテム内に維持することができます。
  • ios.enableBitcode - アプリが Bitcode をサポートするかどうかを指定します。 Apple は、更新や再送信を必要とせずに、特定のデバイス用にアプリのバイナリを最適化します。 Bitcode は iOS アプリでのみ利用でき、Apple App Store のビルドに対してデフォルトで有効になっています。

管理

管理カテゴリは appinfo.json 構成ファイルにまだ存在しません。 次のいずれかのプロパティを手動で追加できます。

  • configurationSchema - エンタープライズ モバイル管理 (EMM) ソフトウェアによってアプリを配置するときに使用されるアプリ構成のデフォルト値を含む .xml ファイルのファイル名またはパスを指定できます。 この .xml ファイルを書式設定する方法については、Android の開発者向けリファレンスの「Set up managed configurations」をご参照ください。
  • android.restrictionFile - Android デバイスを制限するために使用される .xml ファイルのファイル名またはパスを指定できます。 これは、EMM ソフトウェアでアプリを配置するときにアプリ構成を使用する場合、必須です。 この .xml ファイルを書式設定する方法については、Android の開発者向けリファレンスの「RestrictionsManager」をご参照ください。
  • windows.applicationName - アプリにエンタープライズ構成が必要とされる場合、アプリ構成プロパティが必要なアプリケーションの名前を示します。
  • windows.keyRoot - これらのアプリ構成プロパティを検索するために指定されるレジストリ キー ルートです。 指定しない場合、このプロパティはデフォルトで HKEY_CURRENT_USER に設定されます。
  • windows.vendorName - アプリケーションへの責任を負うソフトウェア ベンダー名です。 Esri アプリの場合、この値は ESRI になります。

次の例では、EMM ソフトウェアでアプリを配置するときに使用される構成ファイルとパラメーターをリストしています。

"management": {
     "android": {
         "restrictionFile": "AppConfig_Android.xml"
     },
     "configurationSchema": "AppConfig.xml",
     "windows": {
         "applicationName": "MyApp",
         "keyRoot": "HKEY_CURRENT_USER",
         "vendorName": "MyName"
     }
},

リソース

配置カテゴリは appinfo.json 構成ファイルにすでに存在し、[設定] ツールの [リソース] セクションで選択されているオプションを使用して設定されます。 また、次のいずれかのプロパティを手動で追加できます。

  • appIconBackgroundColor - 16 進数の色の値を受け取り、特定のアイコン形状を強制するプラットフォームの背景の塗りつぶし色を定義します。 たとえば、iOS のアプリ アイコンは強制的に角が丸い四角形になり、透明の領域を黒で自動的に塗りつぶします。 値を指定しない場合、プラットフォームのデフォルトの動作が適用されます。
  • launchImageTextColor - 16 進数の色の値を受け取り、アプリのスプラッシュ画面に表示されるテキストの色を定義します。 このテキストのデフォルト色は黒であり、アプリのスプラッシュ スクリーンによっては、見えにくくなる場合があります。
  • platformName.appIcon - また、platformName は、使用するプラットフォームに置き換える必要があります。 これは、プラットフォーム固有のアプリ アイコンを定義するファイル パスを指定できます。 プラットフォームのアイコンが指定されていない場合、アプリ用に提供されている一般的なアイコンが使用されます。
  • android.adaptiveIcons - true に設定すると、Android デバイスはアプリのアダプティブ アイコンを表示します。 次のプロパティもリソースで指定する必要があります。アダプティブ アイコンのエレメントへのファイル パスを定義します。
    • android.appIcon - アダプティブ アイコンのランチャーへのファイル パスです。 前面ファイルと背景ファイルを参照します。
    • android.appIconForeground - アダプティブ アイコンの前面ファイルへのファイル パスです。 .xml または .png ファイルを指定できます。
    • android.appIconBackground - アダプティブ アイコンの背景ファイルへのファイル パスです。 .xml または .png ファイルを指定できます。
    • android.appIconBackgroundColor - 16 進数の色の値で、android.appIconBackground のオプションの代替です。 両方が定義されている場合、android.appIconBackground が使用されます。

次のコード サンプルは、Android のアダプティブ アイコンと各プラットフォームに固有のアイコンを示しています。

"resources": {
    "android": {
       "adaptiveIcons": true,
	      "appIcon": "ic_launcher.xml",
	      "appIconBackgroundColor": " ic_launcher_background.xml",
	      "appIconForeground": " ic_launcher_foreground.xml"
	     
    },
    "ios": {
        "appIcon": "ios_appicon.png"
    },
    "linux": {
        "appIcon": "linux_appicon.png"
    },
    "macos": {
        "appIcon": "mac_appicon.png"
    },
    "windows": {
        "appIcon": "windows_appicon.png"
    }
},

アダプティブ アイコンは Android に固有で、幅広いオペレーティング システム構成でアプリのアイコンが期待通りに表示されるようにするために使用されます。 アダプティブ アイコンは、円形、四角形、またはその間の形状で表示できます。 最も基本的なレベルでは、アダプティブ アイコンは、前面ファイルの .png と塗りつぶし色の背景から作成できます。 .png の作成には任意のツールを使用できますが、オペレーティング システムが適用するマスクで画像がトリミングされないように、画像に十分なパディングを設定しておくことが大切です。 アダプティブ アイコン ファイルのサイズと形状の仕様については、「アダプティブ アイコン」をご参照ください。 EasyAppIcon などのオンライン ツールを使用すると、アダプティブ アイコンに必要なすべてのファイルを作成することができますが、特定のファイル出力の作成のみに制限される場合があります。 アダプティブ アイコンの作成に最適な環境として、Android Studio を使用することをお勧めします。

上のサンプル コードでは、.xml ファイルが前面ファイルと背景ファイルの両方に使用されています。 次のコード サンプルは、前面ファイルと背景ファイルを参照する ic_launcher.xml ファイルの内容を示しています。

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/ic_launcher_background"/>
    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

次のサンプル コードは、ic_launcher_background.xml の内容を示しています。これは、青の塗りつぶしの背景を記述しています。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="ic_launcher_background">#3697f0</color>
</resources>

次のサンプル コードは、ic_launcher_foreground.xml ファイルの内容を示しています。これは、前面画像として AppStudio の実行アイコン Player を記述しています。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
  <group android:scaleX="1.62"
      android:scaleY="1.62"
      android:translateX="28.08"
      android:translateY="28.08">
    <path
        android:fillColor="#FF000000"
        android:pathData="M22.079,1L9.92,1A1.921,1.921 0,0 0,8 2.921L8,28.08A1.921,1.921 0,0 0,9.921 30L22.08,30A1.921,1.921 0,0 0,24 28.079L24,2.92A1.921,1.921 0,0 0,22.079 1zM23,28.08a0.922,0.922 0,0 1,-0.921 0.92L18,29v-1h-4v1L9.921,29A0.922,0.922 0,0 1,9 28.08L9,27h14zM23,26L9,26L9,4h14zM23,3L9,3v-0.08A0.922,0.922 0,0 1,9.921 2L22.08,2a0.922,0.922 0,0 1,0.921 0.92zM12.1,10.417L12.1,20.7l8.227,-5.142zM12.9,11.86l5.917,3.698 -5.917,3.699z"/>
  </group>
</vector>

翻訳

アプリの翻訳ファイルを生成した後に、それらのファイルが appinfo.json ファイル内で参照されるようにする必要があります。 変換のためのアプリの準備および変換ファイルの生成の詳細については、「アプリのローカライズ」をご参照ください。

それらのファイルがアプリ アイテム内に存在するようになったら、それらの位置を知らせるために、path プロパティおよび fileName プロパティを appinfo.json ファイル内の新しいカテゴリ translations の下に追加する必要があります。

以下の例では、Map Viewer テンプレート アプリのファイルを関連付けています。

"translations": {
    "path": "MapViewer/languages",
    "fileName": "MapViewer"
}

上記のコード サンプルを appinfo.json ファイルに追加すると、構築されたアプリは MapViewer languages フォルダー内の MapViewer_ロケールコード.qm という名前のファイル (たとえば、MapViewer_en.qm、MapViewer_ja.qm) を使用するようになります。

使用法の説明キー

appinfo.json ファイルを直接編集することに関するよくある例は、使用法の説明キーの追加です。 それらは、アプリがカメラ機能、バックグラウンド位置のキャプチャ、Bluetooth などの機能の使用を要求する理由を説明する短い文字列です。 これは、iOS および macOS デバイスでは必須ですが、他のプラットフォーム上では現在正しく使用できません。 このキーは、今後、ユーザー インターフェイス アイテムとして実装することが予定されていますが、現在は手動で追加する必要があります。

個別の使用法の説明は、usageDescriptionKeys の見出しの下に追加する必要があります。 このセクションは、いつでも appinfo.json ファイルに挿入できます。 各値の順序は機能に影響を与えません。 アプリでサポートされていない機能でも、すべての機能の説明を含めることに害はありませんが、不要な説明文字列はアプリの構築プロセスに含まれません。

次のサンプル コードでは、アプリに Bluetooth 機能が含まれていないため、bluetoothUsageDescription は使用されません。

"usageDescriptionKeys": {
    "bluetoothUsageDescription": "This app uses Bluetooth to scan and connect to devices. (iOS only)",
    "cameraUsageDescription": "This app needs access to the camera to take a picture. (iOS only)",
    "faceIDUsageDescription": "This app uses face ID to authenticate using facial recognition. (iOS only)",
    "locationAlwaysUsageDescription": "This app needs access to device location when the app is running or in the background. (iOS and macOS)",
    "locationWhenInUseUsageDescription": "This app needs access to device location when the app is running. (iOS and macOS)",
    "microphoneUsageDescription": "This app needs access to a microphone to record audio. (iOS only)",
    "photoLibraryUsageDescription": "This app needs access to the photo library to select a photo. (iOS only)",
    "photoLibraryAddUsageDescription": "This app uses your photo library to save photos in the camera roll for use in the app. (iOS only)",
    "locationAlwaysAndWhenInUseUsageDescription": "This app needs access to device location when the app is running or in the background. (iOS and macOS)",
    "sensorsUsageDescription": "This app uses the Activity Recognizer to identify device motion."
},

その他のプロパティ

次のプロパティは、任意のカテゴリの外側に追加されます。

queryApps.packageNames - このプロパティは任意のセクションの外側に追加されます。 このプロパティは、アプリ パッケージ名のリストを受け取り、Android デバイスで使用中に、AppFramework コンポーネントの isAppInstalled 関数によってクエリされます。