تحرير appinfo

يحتوي ملف تكوين appinfo.json على معلومات تُعرّف عملية التطبيق، ويتم تخزينه كأزواج قيم رئيسية. يتم تكوين العديد من الخصائص المعرفة في الملف في إعدادات AppStudio، إلا أنه توجد حالات يلزم عليك فيها إضافة عناصر إلى الملف يدويًا.

بعض الفئات المدرجة أدناه ليست في ملف التكوين appinfo.json على الإطلاق بشكل افتراضي. تظهر الفئات الأخرى بالفعل في ملف التكوين، مع الخصائص التي تتم إدارتها في الإعدادات. الخصائص المدرجة في هذا الموضوع إضافية لتلك التي تم تكوينها في الإعدادات.

يوجد ملف appinfo.json في المجلد الرئيسي لتطبيقك. للوصول إليه، انقر فوق زر ملفات في تطبيقك في ArcGIS AppStudio.

الإمكانات

ستكون فئة الإمكانات موجودة بالفعل في ملف التكوين appinfo.json وقد يتم ملؤها بالخيارات التي تم تحديدها في قسم الإمكانات في أداة الإعدادات. يمكنك أيضًا إضافة أي من الخصائص التالية يدويًا.

  • backup—عند التعيين على خطأ، لن يتم إجراء أي نسخ احتياطي أو استعادة للتطبيق على Android، وسيتم استبعاد التطبيق من خلال النسخ الاحتياطي الكامل للنظام. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.
  • ios.appTransportSecurity.allowArbitraryLoads—في حالة التعيين على خطأ، يتم تطبيق قيود أمان النقل على اتصالات الشبكة. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.
  • interAppFileSharing—عند التعيين على صواب، يمكن الوصول إلى الملفات الموجودة في التطبيق الخاص بك باستخدام تطبيق الملفات على نظام التشغيل iOS. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.
  • mediaLocation— عند التعيين على صواب، يمكن لتطبيقك استرداد بيانات تعريف Exif غير المعدلة من الصور. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.
  • indoorLocation—عند التعيين على صواب، يتم تعيين جميع إمكانات البلوتوث المطلوبة لتحديد الموضع في المكان الداخلي. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.

في المثال التالي، لا يتم تطبيق أي قيود على أمن النقل.

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

النشر

ستكون فئة النشر موجودة بالفعل في ملف التكوين appinfo.json ويمكن ملؤها بالخيارات المحددة في قسمي الأنظمة الأساسية والمتقدم في أداة الإعدادات. يمكنك أيضًا إضافة أي من الخصائص التالية يدويًا.

  • android.trustUserCertificates—يؤدي تعيين هذه الخاصية إلى صحيح إلى قبول تطبيقك لجميع المراجع المصدَّقة. افتراضيًا، هذا خطأ ولا تثق تطبيقات AppStudio المراجع المصدَّقة المضافة من قبل المستخدم للاتصالات الآمنة على Android.
  • android.minimumSdkVersion—تحدد أدنى مستوى API مطلوب لتشغيل التطبيق. وفي حال عدم التحديد، فستكون القيمة الافتراضية لتطبيق AppStudio هي 23.
  • android.targetSdkVersion—تحدد أدنى مستوى API مقصود للتطبيق. كما أنه يؤثر على الطريقة التي يجب أن يمنح بها المستخدم أذونات التطبيق. إذا كان الجهاز يُشغِّل Android 6.0 أو إصدارًا لاحقًا، وكانت مجموعة SDK الهدف الخاصة بالتطبيق 23 أو أعلى، فإنه يجب على المستخدم طلب كل إذن مطلوب أثناء تشغيل التطبيق. في حال عدم التحديد، ستكون القيمة الافتراضية لتطبيق AppStudio 31 لأداة Make المحلية و33 لأداة Make السحابية. لمزيد من المعلومات، راجع تعليمات وحدة تحكم Google Play.
    ملاحظة:‏

    يجب على مستخدمي أداة make المحلية تعيين deployment.android.targetSdkVersion على 33 في ملف appinfo.json في تطبيقهم لتلبية المتطلبات الواردة في https://developer.android.com/google/play/requirements/target-sdk.

  • android.enableGooglePlayServicesSecurityProvider—هي تتحكم في فيما إذا كان تطبيقك يتصل بمزود خدمة أمن Google Play لضمان أن التطبيق يعمل على الجهاز بآخر التحديثات لحمايته من وسائل الاستغلال المعروفة. وفي حال عدم التحديد، ستكون القيمة الافتراضية لتطبيق AppStudio هي خطأ.
  • ios.minimumVersion—يحدد الحد الأدنى لإصدار نظام التشغيل الذي يمكن تشغيل برنامجك عليه. وفي حال عدم التحديد، فستكون القيمة الافتراضية لتطبيق AppStudio هي 13.0.
  • desktop.allowOverwrite—إذا تم تعيينها على true، فيمكن تثبيت التطبيق على Windows دون إزالة تثبيت إصدار سابق من التطبيق. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.

في المثال التالي، سيتم قبول جميع المراجع المعتمدة على Android، والحد الأدنى من أنظمة التشغيل التي يمكن تثبيت التطبيق عليها لـ Android وiOS هما 6.0 و13.0 على التوالي.

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

العرض

ستكون فئة العرض موجودة بالفعل في ملف التكوين appinfo.json وقد يتم ملؤها بالخيارات التي تم تحديدها في قسم العرض في أداة الإعدادات. يمكنك أيضًا إضافة أي من الخصائص التالية يدويًا.

  • enableHighDpi—يحدد هذا ما إذا كان سيتم فتح التطبيق في وضع DPI (نقطة لكل بوصة) العالي على الأجهزة التي تدعمه. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.
  • statusBar—يحدد ما إذا كان شريط الحالة سيظهر عند استخدام التطبيق الخاص بك على أي من أجهزة iOS وAndroid. لا ينبغي الخلط بين ذلك وبين الخاصية usesStatusBar المضبوطة في خيارات شريط الحالة في علامة تبويب إعدادات > أجهزة لتطبيقك، التي تتحكم في ما إذا كان شريط الحالة سيظهر على الهواتف أو الأجهزة اللوحية. وفي حال عدم التحديد، فستكون القيمة الافتراضية هي خطأ.
  • 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—يقبل ذلك اسم ملف أو مسار .xml لملف يحتوي على إعدادات تكوين التطبيق الافتراضية المستخدمة عند نشر التطبيق الخاص بك مع برنامج Enterprise Mobile Management (EMM)‎. للحصول على معلومات حول كيفية تنسيق ملف .xml هذا، راجع مرجع مطور Android لإعداد التكوينات المُدارة.
  • android.restrictionFile—يقبل ذلك اسم ملف أو مسار لملف .xml يستخدم لفرض قيود على أجهزة Android. ذلك مطلوب لاستخدام تكوين التطبيق عند نشر التطبيق الخاص بك مع برنامج 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—يقبل ذلك قيمة لون سداسي الشكل، ويُعرّف لون تعبئة الخلفية في الأنظمة التي تفرض شكل محدد للرمز. على سبيل المثال، يفرض iOS مستطيلاً مستديرًا لأيقونات التطبيق، ويقوم بتعبئة المناطق الشفافة باللون الأسود تلقائيًا. إذا تم تحديد القيمة، يتم تطبيق السلوك الافتراضي للنظام.
  • launchImageTextColor—يقبل ذلك قيمة لون سداسي الشكل، ويُعرّف لون النص الذي يظهر على شاشة بداية التطبيق. اللون الافتراضي لهذا النص هو اللون الأسود، وهو ما قد تصعُب رؤيته بحسب شاشة بداية التطبيق.
  • platformName.appIcon—بالإضافة إلى ذلك، يجب استبدال platformName بالنظام الأساسي الذي تستخدمه. يقبل ذلك مسار ملف لتحديد أيقونة تطبيق محددة للنظام. إذا لم يتم توفير أيقونة للنظام، فإنه يتم استخدام الأيقونة العامة المتوفرة للتطبيق.
  • android.adaptiveIcons—عند التعين على صحيح، ستظهر أجهزة Android رمز الجهاز التفاعلي. يجب أيضًا تحديد الخصائص التالية ضمن الموارد وتحديد مسارات الملفات لعناصر الرمز التكيفي.
    • android.appIcon—مسار الملف إلى المشغل للرمز التكيفي. يشير إلى ملفات المقدمة والخلفية.
    • android.appIconForeground—مسار الملف إلى مقدمة الرمز التكيفي. يمكن أن يكون ملف .xml أو ملف .png.
    • android.appIconBackground—مسار الملف إلى خلفية الرمز التكيفي. يمكن أن يكون ملف .xml أو ملف .png.
    • android.appIconBackgroundColor—قيمة اللون السداسي، بديل اختياري لـ 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 ضمن فئة جديدة translations في ملف appinfo.json لمعرفة موقعها.

يقوم المثال التالي بإقران ملفات تطبيق قالب Map Viewer:

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

بعد إضافة نموذج الكود أعلاه إلى ملف appinfo.json، يستخدم تطبيق الإنشاء الملفات في مجلد لغات MapViewer الذي يحمل اسم MapViewer_localecode.qm (على سبيل المثال، MapViewer_en.qm وMapViewer_ja.qm).

مفاتيح وصف الاستخدام

حالة شائعة لتحرير ملف appinfo.json مباشرةً لإضافة مفاتيح وصف الاستخدام. وهي سلاسل قصيرة تُستخدَم لتوضيح سبب طلب التطبيق لاستخدام وظائف، مثل وظائف الكاميرا أو التقاط موقع الخلفية أو البلوتوث. إنه طلب لأجهزة iOS وmacOS ويتعذر استخدامه حاليًا على أنظمة أخرى. في حين الاتجاه إلى تنفيذ ذلك كعنصر واجهة مستخدم في المُستقبِل، يجب عليك إضافتها يدويًا في الوقت الحالي.

يجب عليك إضافة أوصاف استخدام فردية تحت عنوان 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—تُضاف هذه الخاصية خارج أي قسم. يقبل هذا قائمة بأسماء حزم التطبيقات، والتي سيتم الاستعلام عنها بعد ذلك بواسطة دالة isAppInstalled الموجودة في المكون AppFramework عند استخدامها على أجهزة Android.