Edytowanie pliku appinfo

Plik konfiguracyjny appinfo.json zawiera informacje w postaci par klucz-wartość, które definiują działanie aplikacji. Wiele właściwości zdefiniowanych w tym pliku można skonfigurować z poziomu panelu Ustawienia aplikacji AppStudio, ale w niektórych przypadkach trzeba dodać pozycje do pliku ręcznie.

Niektóre kategorie wymienione poniżej nie są domyślnie w ogóle umieszczane w pliku konfiguracyjnym appinfo.json. Inne kategorie pojawiają się już w pliku konfiguracyjnym z właściwościami, którymi zarządza się na panelu Ustawienia. Właściwości wymienione w tym temacie są dodatkowe w stosunku do tych, które zostały skonfigurowane na panelu Ustawienia.

Plik appinfo.json znajduje się w folderze głównym aplikacji. Aby uzyskać do niego dostęp, kliknij przycisk Pliki dla swojej aplikacji w aplikacji ArcGIS AppStudio.

Funkcje

Kategoria możliwości będzie już istnieć w pliku konfiguracyjnym appinfo.json i może być wypełniona opcjami, które zostały wybrane w sekcji Możliwości narzędzia Ustawienia. Można również ręcznie dodać dowolną z poniższych właściwości.

  • backup — jeśli zostanie ona skonfigurowana na wartość fałsz (false), nigdy nie będzie tworzona ani przywracana kopia zapasowa tej aplikacji w systemie Android. Ta aplikacja zostanie wykluczona podczas tworzenia pełnych kopii zapasowych systemu. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).
  • ios.appTransportSecurity.allowArbitraryLoads — jeśli zostanie skonfigurowana wartość fałsz (false), w przypadku połączeń sieciowych będą stosowane ograniczenia zabezpieczeń transportu. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).
  • interAppFileSharing — jeśli zostanie skonfigurowana wartość prawda (true), dostęp do plików aplikacji będzie można uzyskiwać przy użyciu aplikacji Files (Pliki) w systemie iOS. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).
  • mediaLocation — skonfigurowanie wartości true powoduje, że aplikacja może pobierać nieredagowane metadane Exif ze zdjęć. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).
  • indoorLocation — skonfigurowanie wartości true powoduje, że zostają włączone wszystkie wymagane opcje Bluetooth dla pozycjonowania w pomieszczeniach. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).

W poniższym przykładzie nie są stosowane żadne ograniczenia zabezpieczeń transportu.

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

Opracowanie

Kategoria wdrażania będzie już istnieć w pliku konfiguracyjnym appinfo.json i może być wypełniona opcjami, które zostały wybrane w sekcjach Platformy i Zaawansowane narzędzia Ustawienia. Można również ręcznie dodać dowolną z poniższych właściwości.

  • android.trustUserCertificates — ustawienie tej właściwości na wartość prawda (true) powoduje akceptowanie przez aplikację wszystkich jednostek certyfikujących. Domyślnie ma ona wartość fałsz (false) i aplikacje AppStudio nie ufają jednostkom certyfikującym dodanym przez użytkowników w zakresie bezpiecznych połączeń w systemie Android.
  • android.minimumSdkVersion — definiuje minimalny poziom interfejsu API wymagany do uruchomienia aplikacji. Jeśli wartość nie zostanie podana, domyślna wartość aplikacji AppStudio wynosi 23.
  • android.targetSdkVersion — definiuje zakładany poziom interfejsu API dla aplikacji. Ma ona także wpływ na sposób, w jaki użytkownik będzie musiał przyznawać uprawnienia aplikacji. Jeśli na urządzeniu używany jest system Android w wersji 6.0 lub nowszej i docelowy pakiet SDK aplikacji jest w wersji 23 lub wyższej, użytkownik musi żądać każdego potrzebnego uprawnienia podczas działania aplikacji. Jeśli wartość nie zostanie podana, domyślna wartość aplikacji AppStudio wynosi 31 dla lokalnego programu Make (Utwórz) i 33 dla programu Make (Utwórz) w chmurze. Aby dowiedzieć się więcej, zapoznaj się z pomocą do aplikacji Google Play Console.
    Notatka:

    Lokalni użytkownicy programu make (utwórz) muszą ustawić parametr deployment.android.targetSdkVersion na wartość 33 w pliku appinfo.json swojej aplikacji, aby spełnić wymagania wymienione na stronie https://developer.android.com/google/play/requirements/target-sdk.

  • android.enableGooglePlayServicesSecurityProvider — określa, czy aplikacja wywołuje dostawcę bezpieczeństwa sklepu Google Play, aby upewnić się, że aplikacja jest uruchamiana na urządzeniu z najnowszymi aktualizacjami. Ma to na celu ochronę przed wykorzystaniem znanych luk zabezpieczeń. Jeśli wartość nie zostanie podana, domyślna wartość aplikacji AppStudio to fałsz (false).
  • ios.minimumVersion — definiuje minimalną wersję systemu operacyjnego, w której można uruchamiać oprogramowanie. Jeśli wartość nie zostanie podana, domyślna wartość aplikacji AppStudio wynosi 13.0.
  • desktop.allowOverwrite — jeśli jest skonfigurowana na wartość true, aplikację można zainstalować w systemie Windows bez odinstalowywania jej poprzedniej wersji. Jeśli wartość nie jest określona, zostanie użyta domyślna wartość fałsz (false).

W poniższym przykładzie wszystkie jednostki certyfikujące będą akceptowane w systemie Android, a minimalne wersje systemów operacyjnych Android i iOS, w których można zainstalować aplikację, to odpowiednio 6.0 i 13.0.

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

Wyświetlanie

Kategoria wyświetlania będzie już istnieć w pliku konfiguracyjnym appinfo.json i może być wypełniona opcjami, które zostały wybrane w sekcji Wyświetlanie narzędzia Ustawienia. Można również ręcznie dodać dowolną z poniższych właściwości.

  • enableHighDpi — decyduje o tym, czy aplikacja będzie otwierana w trybie wysokiej rozdzielczości (DPI) na urządzeniach, które obsługują ten tryb. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).
  • statusBar — decyduje ona o tym, czy podczas używania tej aplikacji na dowolnych urządzeniach z systemami iOS i Android będzie wyświetlany pasek stanu. Nie należy mylić tej właściwości z właściwością usesStatusBar ustawianą w opcjach Pasek stanu na karcie Ustawienia > Urządzenia aplikacji, która decyduje o tym, czy pasek stanu ma być wyświetlany na telefonach lub tabletach. Jeśli wartość nie zostanie podana, zostanie użyta domyślna wartość fałsz (false).
  • ios.windowMode — definiuje sposób, w jaki aplikacja prowadzi interakcje z funkcją wielozadaniowości urządzenia iPad i pozwala na użycie aplikacji jednocześnie z innymi aplikacjami na tym samym ekranie. Domyślnie ta właściwość jest włączana, gdy w opcjach Tablet na karcie Ustawienia > Urządzenia dla aplikacji jest wyłączony tryb pionowy lub poziomy. Aby wyłączyć właściwość ios.windowMode, pozwalając na uruchamianie aplikacji tylko w trybie pełnoekranowym urządzenia iPad, skonfiguruj ją na wartość fullscreen.

W poniższym przykładzie włączona jest wysoka wartość DPI, pasek stanu jest włączony na wszystkich urządzeniach z systemem iOS, a aplikacja będzie działać na pełnym ekranie tylko na urządzeniu iPad.

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

Utworzenie

Kategoria tworzenia nie istnieje jeszcze w pliku konfiguracyjnym appinfo.json. Można ręcznie dodać dowolną z poniższych właściwości.

  • ignore — definiuje listę wzorców nazw plików, które mają być wykluczane z zasobów aplikacji podczas kompilowania. Dzięki temu pliki, które są przydatne podczas opracowywania i testowania aplikacji, ale nie są potrzebne podczas jej budowania, mogą pozostać w elemencie aplikacji.
  • ios.enableBitcode — określa, czy aplikacja obsługuje technikę Bitcode. Firma Apple optymalizuje pliki binarne aplikacji pod kątem konkretnych urządzeń bez konieczności aktualizowania ani ponownego przesyłania. Obsługa techniki Bitcode dotyczy tylko aplikacji dla systemu iOS i domyślnie jest włączona dla kompilacji ze sklepu Apple App Store.

Zarządzanie

Kategoria zarządzania nie istnieje jeszcze w pliku konfiguracyjnym appinfo.json. Można ręcznie dodać dowolną z poniższych właściwości.

  • configurationSchema — wartością tej właściwości może być nazwa pliku lub ścieżka do pliku .xml, który zawiera wartości domyślne konfiguracji aplikacji używane podczas wdrażania aplikacji przy użyciu oprogramowania Enterprise Mobile Management (EMM). Informacje o sposobach formatowania tego pliku .xml można znaleźć w materiałach referencyjnych programistów systemu Android dotyczących definiowania konfiguracji zarządzanych.
  • android.restrictionFile — wartością tej właściwości może być nazwa pliku lub ścieżka do pliku .xml używanego do nakładania ograniczeń na urządzeniach z systemem Android. Ta właściwość jest wymagana, aby można było korzystać z konfiguracji aplikacji podczas wdrażania aplikacji przy użyciu oprogramowania EMM. Informacje o sposobach formatowania tego pliku .xml można znaleźć w materiałach referencyjnych programistów systemu Android dotyczących klasy RestrictionsManager.
  • windows.applicationName — nazwa aplikacji, która potrzebuje właściwości konfiguracyjnych aplikacji, jeśli aplikacja wymaga konfiguracji korporacyjnej.
  • windows.keyRoot — główny klucz rejestru, w którym należy szukać właściwości konfiguracyjnych aplikacji. Jeśli nie zostanie podany, domyślnie przyjmowana jest wartość HKEY_CURRENT_USER.
  • windows.vendorName — nazwa dostawcy oprogramowania odpowiedzialnego za aplikację. W przypadku aplikacji firmy Esri wartością jest ESRI.

W poniższym przykładzie wymienione są pliki konfiguracyjne i parametry wykorzystywane podczas wdrażania aplikacji z oprogramowaniem EMM.

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

Zasoby

Kategoria wdrażania będzie już istnieć w pliku konfiguracyjnym appinfo.json i może być wypełniona opcjami, które zostały wybrane w sekcjach Zasoby narzędzia Ustawienia. Można również ręcznie dodać dowolną z poniższych właściwości.

  • appIconBackgroundColor — przyjmuje szesnastkową wartość koloru i definiuje kolor wypełnienia tła dla platform, które wymuszają konkretny kształt ikony. Na przykład system iOS wymusza kształt zaokrąglonego prostokąta dla ikon aplikacji i automatycznie wypełnia przezroczyste obszary kolorem czarnym. Jeśli żadna wartość nie zostanie podana, stosowane jest domyślne zachowanie na danej platformie.
  • launchImageTextColor — przyjmuje szesnastkową wartość koloru i definiuje kolor tekstu wyświetlanego na ekranie powitalnym aplikacji. Domyślnie ten tekst ma kolor czarny i może być trudny do odczytania, w zależności od ekranu powitalnego aplikacji.
  • platformName.appIcon — ponadto wartość platformName należy zastąpić używaną platformą. Akceptowana jest ścieżka do pliku na potrzeby zdefiniowania ikony aplikacji właściwej dla platformy. Jeśli dla danej platformy nie zostanie dostarczona ikona, zostanie użyta ikona ogólna udostępniona dla aplikacji.
  • android.adaptiveIcons — gdy ustawiona jest wartość prawda (true), na urządzeniach z systemem Android będzie wyświetlana ikona adaptacyjna aplikacji. W zasobach należy również określić następujące właściwości określające ścieżki do plików z elementami ikony adaptacyjnej.
    • android.appIcon — ścieżka do aplikacji uruchamiającej ikonę adaptacyjną. Odwołania do plików pierwszego planu i tła.
    • android.appIconForeground — ścieżka do pliku pierwszego planu ikony adaptacyjnej. Może to być plik .xml lub .png.
    • android.appIconBackground — ścieżka do pliku tła ikony adaptacyjnej. Może to być plik .xml lub .png.
    • android.appIconBackgroundColor — szesnastkowa wartość koloru, opcjonalna alternatywa dla android.appIconBackground. Jeśli zdefiniowane są obie, zostanie użyta właściwość android.appIconBackground.

Poniższy przykładowy kod pokazuje ikonę adaptacyjną dla systemu Android i unikalne ikony dla każdej platformy.

"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"
    }
},

Ikony adaptacyjne są unikalne w systemie Android i służą do zapewnienia, że ikona Twojej aplikacji będzie wyświetlana zgodnie z oczekiwaniami w szerokim zakresie konfiguracji systemu operacyjnego. Ikony adaptacyjne mogą być wyświetlane jako okręgi, kwadraty lub w różnych pośrednich formach. Na najbardziej podstawowym poziomie ikona adaptacyjna może być utworzona z wykorzystaniem pliku .png na pierwszym planie i jednolitego koloru jako tła. Do utworzenia pliku .png można użyć każdego narzędzia, ale ważne jest, aby upewnić się, że obraz ma wystarczające dopełnienie, aby nie był przycięty przez maskę stosowaną przez system operacyjny. Informacje na temat specyfikacji rozmiaru i kształtu plików ikon adaptacyjnych można znaleźć w temacie Ikony adaptacyjne. Narzędzia online takie jak EasyAppIcon mogą być używane do tworzenia wszystkich plików potrzebnych do utworzenia ikony adaptacyjnej, ale mogą mieć ograniczenia do tworzenia tylko określonych plików wyjściowych. Aby uzyskać najlepsze wyniki w tworzeniu ikon adaptacyjnych, zalecane jest użycie pakietu Android Studio.

W powyższym kodzie przykładowym pliki .xml są używane zarówno dla pierwszego planu, jak i tła. Poniższy kodu przykładowy pokazuje zawartość pliku ic_launcher.xml, który odwołuje się do plików pierwszego planu i tła.

<?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>

Poniższy kod przykładowy pokazuje zawartość pliku ic_launcher_background.xml, który opisuje jednolite niebieskie tło.

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

Poniższy kod przykładowy przedstawia zawartość pliku ic_launcher_foreground.xml, który opisuje ikonę Uruchom aplikacji AppStudio Player jako obraz pierwszego planu.

<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>

Tłumaczenia

Po wygenerowaniu plików tłumaczeń dla aplikacji należy się upewnić, że mają one odniesienia w pliku appinfo.json. Aby uzyskać więcej informacji o przygotowywaniu aplikacji do tłumaczenia i generowaniu tych plików, zobacz temat Globalizowanie aplikacji.

Gdy pliki zostaną umieszczone w elemencie aplikacji, właściwości path i fileName muszą zostać dodane w nowej kategorii translations w pliku appinfo.json w celu wskazania ich lokalizacji.

W poniższym przykładzie skojarzono pliki szablonu aplikacji Map Viewer:

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

Po dodaniu powyższego przykładu kodu do pliku appinfo.json zbudowana aplikacja będzie używać plików w folderze MapViewer languages o nazwie MapViewer_kodUstawieńNarodowych.qm (np. MapViewer_en.qm i MapViewer_ja.qm).

Klucze opisu użycia

Typowym przypadkiem, w którym trzeba bezpośrednio edytować plik appinfo.json, jest dodanie kluczy opisu użycia. Są to krótkie ciągi znakowe służące do opisywania, dlaczego aplikacja żąda możliwości korzystania z funkcji, takich jak aparat, rejestrowanie lokalizacji w tle lub Bluetooth. Te ciągi są wymagane w przypadku urządzeń iOS oraz macOS i obecnie nie mogą być używane na innych platformach. Zaimplementowanie odpowiedniej funkcji w postaci elementu interfejsu użytkownika jest planowane w przyszłości, jednak w tym momencie te ciągi znakowe trzeba dodać ręcznie.

Pojedyncze opisy użycia należy dodać pod nagłówkiem usageDescriptionKeys. Tę sekcję można wstawić do pliku appinfo.json w dowolnym momencie. Kolejność wartości nie ma wpływu na funkcjonalność. Choć dodanie opisów dla wszystkich możliwości, nawet tych nieobsługiwanych przez aplikację, w niczym nie przeszkadza, zbędne ciągi znakowe opisów są uwzględniane podczas procesu kompilowania aplikacji.

W tym przykładzie kodu opis bluetoothUsageDescription nie zostałby użyty, ponieważ aplikacja nie obsługuje funkcjonalności Bluetooth.

"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."
},

Dodatkowe właściwości

Następującą właściwość dodaje się poza każdą kategorią:

queryApps.packageNames — tę właściwość dodaje się poza każdą sekcją. Akceptuje ona listę nazw pakietów aplikacji, które będą następnie przeszukiwane przez funkcję isAppInstalled w komponencie AppFramework w przypadku użycia na urządzeniach z systemem Android.