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로 설정하는 경우 실내 측위에 필요한 모든 블루투스 기능이 활성화됩니다. 이 등록정보가 지정되지 않은 경우 기본값은 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 앱의 기본값은 로컬 제작의 경우 31이고 클라우드 제작의 경우 33입니다. 자세한 내용은 Google Play 콘솔 도움말을 참고하세요.
    비고:

    로컬 제작 사용자는 https://developer.android.com/google/play/requirements/target-sdk에 나온 요구 사항을 충족하려면 해당 앱의 appinfo.json 파일에서 deployment.android.targetSdkVersion를 33으로 설정해야 합니다.

  • android.enableGooglePlayServicesSecurityProvider - 앱이 알려진 공격으로부터 보호되고 최신 업데이트가 설치된 기기에서 실행되고 있는지 확인하기 위해 Google Play 보안 공급자의 호출 여부를 제어합니다. 이 등록정보가 지정되지 않은 경우 AppStudio 앱의 기본값은 false입니다.
  • ios.minimumVersion - 소프트웨어를 실행할 수 있는 최소 운영 체제 버전을 정의합니다. 이 등록정보가 지정되지 않은 경우 AppStudio 앱의 기본값은 13.0입니다.
  • desktop.allowOverwrite - 등록정보가 true로 설정된 경우 이전 버전의 앱을 제거하지 않고도 Windows에 앱을 설치할 수 있습니다. 이 등록정보가 지정되지 않은 경우 기본값은 false입니다.

다음 예시에서 모든 인증 기관은 Android에서 허용되며 AndroidiOS에 대해 앱을 설치할 수 있는 최소 운영 체제는 각각 6.0 및 13.0입니다.

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

표시

‏표시 범주는 appinfo.json 구성 파일에 이미 있으며, 설정 도구의 표시 섹션에서 선택한 옵션으로 채워질 수 있습니다. 다음과 같은 등록정보를 수동으로 추가할 수도 있습니다.

  • enableHighDpi - 높은 DPI 모드가 지원되는 기기에서 앱이 해당 모드로 열리는지 여부를 결정합니다. 이 등록정보가 지정되지 않은 경우 기본값은 false입니다.
  • statusBar - iOSAndroid 기기에서 앱을 사용할 때 상태 표시줄의 표시 여부를 정의합니다. 앱의 설정 > 기기 탭에 있는 상태 표시줄 옵션에서 설정한 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 개발자 레퍼런스를 참고하세요.
  • android.restrictionFile - Android 기기의 제한 사항을 적용하는 데 사용되는 .xml 파일의 이름 또는 경로를 허용합니다. EMM 소프트웨어로 앱을 배포할 때 앱 구성을 사용하려면 해당 등록정보를 지정해야 합니다. 해당 .xml 파일의 형식을 지정하는 방법에 대한 자세한 내용은 RestrictionsManager에 대한 Android 개발자 레퍼런스를 참고하세요.
  • 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 기기에 앱의 Adaptive 아이콘이 표시됩니다. Adaptive 아이콘 요소에 대한 파일 경로를 정의하는 다음 등록정보도 리소스 아래에 지정해야 합니다.
    • android.appIcon - Adaptive 아이콘의 실행 프로그램에 대한 파일 경로입니다. 전경 및 배경 파일을 참조합니다.
    • android.appIconForeground - Adaptive 아이콘의 전경에 대한 파일 경로입니다. .xml 또는 .png 파일이 될 수 있습니다.
    • android.appIconBackground - Adaptive 아이콘의 배경에 대한 파일 경로입니다. .xml 또는 .png 파일이 될 수 있습니다.
    • android.appIconBackgroundColor - 16진수 색상 값으로, android.appIconBackground에 대한 선택적 대안입니다. 두 가지 모두 정의된 경우 android.appIconBackground가 사용됩니다.

다음 코드 샘플은 Android에 대한 Adaptive 아이콘 및 각 플랫폼에 대한 고유한 아이콘을 보여줍니다.

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

Adaptive 아이콘은 Android에 고유하며 다양한 운영 체제 구성에서 앱 아이콘을 예상대로 표시하는 데 사용됩니다. Adaptive 아이콘은 원형, 사각형 또는 그 사이의 변형으로 표시될 수 있습니다. 가장 기본적인 수준에서 Adaptive 아이콘은 전경의 .png 및 배경의 단색으로 제작할 수 있습니다. .png를 생성하는 데 모든 도구를 사용할 수 있지만, 운영 체제에서 적용한 마스크로 인해 이미지가 잘리지 않도록 이미지에 충분한 안쪽 여백이 있는지 확인해야 합니다. Adaptive 아이콘 파일의 크기 및 모양 사양은 Adaptive 아이콘을 참고하세요. EasyAppIcon과 같은 온라인 도구는 Adaptive 아이콘에 필요한 모든 파일을 생성하는 데 사용할 수 있지만 특정 파일 결과만 생성하도록 제한될 수 있습니다. 최상의 Adaptive 아이콘 생성 환경을 위해 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>

다음 샘플 코드는 AppStudio 실행 아이콘 Player을 전경 이미지로 설명하는 ic_launcher_foreground.xml 파일의 콘텐츠를 보여줍니다.

<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 파일에 참조되었는지 확인해야 합니다. 이러한 파일을 변환 및 생성하기 위한 앱을 준비하는 방법에 대한 자세한 내용은 앱 세계화를 참고하세요.

해당 파일이 앱 항목에 나타나면 pathfileName 등록정보가 appinfo.json 파일의 새 범주 translations 아래에 추가되어 파일의 위치를 나타내야 합니다.

다음 예시에서는 Map Viewer 템플릿 앱의 파일과 연관되어 있습니다.

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

위의 코드 샘플을 appinfo.json 파일에 추가한 후에는 생성된 앱이 이름이 MapViewer_localecode.qm(예시: MapViewer_en.qm 및 MapViewer_ja.qm)인 MapViewer languages 폴더의 파일을 사용합니다.

사용 설명 키

appinfo.json 파일을 직접 편집하는 일반적인 경우는 사용 설명 키를 추가하는 것입니다. 앱이 카메라, 백그라운드 위치 캡처, Bluetooth 등 기능을 사용하도록 요청하는 이유를 설명하는 짧은 문자열입니다. iOSmacOS 기기에 대한 요구 사항으로, 현재는 다른 플랫폼에서 사용할 수 없습니다. 이는 향후에 UI 항목으로 구현되도록 고안되었으나 현재는 수동으로 추가해야 합니다.

개별 사용 설명은 usageDescriptionKeys 머리글 아래에 추가해야 합니다. 이 섹션은 언제든지 appinfo.json 파일에 삽입할 수 있습니다. 값의 순서는 기능에 영향을 주지 않습니다. 앱에서 지원되지 않는 기능을 비롯하여 모든 기능에 대한 설명을 포함해도 문제는 없지만 불필요한 설명 문자열은 앱 생성 프로세스에 포함되지 않습니다.

앱에 블루투스 기능이 없으므로 다음 코드 샘플에서는 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 함수에서 쿼리됩니다.