الفرق بين المراجعتين لصفحة: «Cordova/plugin ref»

من موسوعة حسوب
لا ملخص تعديل
لا ملخص تعديل
 
(11 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الملف Plugin.xml في كوردوفا}}</noinclude>
<noinclude>{{DISPLAYTITLE:الملف Plugin.xml في كوردوفا}}</noinclude>
[[تصنيف: Cordova]]
[[تصنيف: Cordova]]
[[تصنيف: Plugin.xml]]
يعرِّف الملف <code>Plugin.xml</code> بنية وإعدادات الإضافة في مشروعك، ويحتوي على العديد من العناصر التي يمكن استخدامها لتوفير تفاصيل عن الإضافة.
يحدد الملف <code>Plugin.xml</code> بنية وإعدادات الإضافة. ويحتوي على العديد من العناصر التي يمكن استخدامها لتحديد تفاصيل الإضافة.
==العنصر <code>plugin</code>==  
==<code>plugin</code>==  


العنصر <code>plugin</code> هو العنصر الجذري (top-level) لبيان (manifest) الإضافة.   
العنصر <code>plugin</code> هو العنصر الجذري (top-level) لبيان (manifest) الإضافة.   
سطر 9: سطر 8:
!الخاصيات  (النوع)   
!الخاصيات  (النوع)   


<small>فقط للمنصة:</small>  
<small>فقط للمنصة</small>  
!الوصف
!الوصف
|-
|-
|<code>xmlns</code> (سلسلة نصية)
|<code>xmlns</code> (سلسلة نصية)
|مطلوب
|(مطلوب)


مجال اسماء (namespace) الإضافة، <code>http://apache.org/cordova/ns/plugins/1.0</code>. إن كان المستند يحتوي على وُسوم XML من مجالات أسماء أخرى، مثل الوسوم المراد إضافتها إلى الملف <code>AndroidManifest.xml</code> في حالة استهداف المنصة أندرويد، فيجب أيضًا تضمين مجالات الأسماء تلك في العنصر.   
مجال أسماء (namespace) الإضافة، <code>http://apache.org/cordova/ns/plugins/1.0</code>. إن كان المستند يحتوي على وُسوم XML من مجالات أسماء أخرى، مثل الوسوم المراد إضافتها إلى الملف <code>AndroidManifest.xml</code> في حالة استهداف منصة أندرويد، فيجب أيضًا تضمين مجالات الأسماء تلك في العنصر.   
|-
|-
|<code>id</code> (سلسلة نصية)               
|<code>id</code> (سلسلة نصية)               
|مطلوب  
|(مطلوب)


مُعرف نمط (style identifier) مدير الحُزم npm الخاص بالإضافة.
مُعرف نمط (style identifier) مدير الحُزم npm الخاص بالإضافة.
|-
|-
|<code>version</code> (سلسلة نصية)
|<code>version</code> (سلسلة نصية)
|مطلوب  
|(مطلوب)


رقم إصدار الإضافة. يمكن اعتماد صياغة الإصدار الرمزي [http://semver.org/ Semver].
رقم إصدار الإضافة. يمكن اعتماد صياغة الإدارة الدلالية لنُسخ البرمجيات ([https://semver.org/lang/ar/ SemVer]، اختصار للكملتين Semantic Versioning).
|}
|}
مثال: <syntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8"?>
إليك المثال التالي: <syntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
     id="my-plugin-id"
     id="my-plugin-id"
     version="1.0.2"></syntaxhighlight>
     version="1.0.2"></syntaxhighlight>


== <code>engines</code> و <code>engine</code> ==
== العنصرين <code>engines</code> و <code>engine</code> ==
تحدد العناصر الفرعية من العنصر<code><engines></code> إصدارات بيئات العمل المستندة إلى Apache Cordova، والتي تدعمها هذه الإضافة. ستعيد [[Cordova/cli|واجهة سطر الأوامر]] عند الخروج قيمةً غير معدومة لكل الإضافات التي لا يلبي مشروعها المستهدف القيود المحددة من طرف الوسم <code>engine</code>. في حال عدم تحديد أي وسم، فستحاول [[Cordova/cli|واجهة سطر الأوامر]] التثبيت في مجلد مشروع كوردوفا المحدد بطريقة عمياء.   
تحدد العناصر الفرعية من العنصر <code><engines></code> إصدارات بيئات العمل المستندة إلى أباتشي كوردوفا التي تدعمها هذه الإضافة. ستعيد [[Cordova/cli|واجهة سطر الأوامر]] عند الخروج قيمةً غير معدومة لكل الإضافات التي لا يلبي مشروعها المستهدف القيود المحددة من طرف الوسم <code>engine</code>. في حال عدم تحديد أي وسم، فستحاول [[Cordova/cli|واجهة سطر الأوامر]] التثبيت في مجلد مشروع كوردوفا المحدد دون القيام بأي عملية تحقق.   


'''ملاحظة''': في الإصدار '''Cordova 6.1.0‎''' وما بعده، المكان الموصى به لتحديد المنصة أو الإضافة أو ارتباطات (dependencies) [[Cordova/cli|واجهة سطر الأوامر]] هو الملف <code>package.json</code> الخاص بالإضافة. انظر صفحة [https://cordova.apache.org/docs/en/latest/guide/hybrid/plugins/index.html#specifying-cordova-dependencies تحديد ارتباطات كوردوفا] لمزيد من المعلومات.   
'''ملاحظة''': في الإصدار '''Cordova 6.1.0‎''' وما بعده، المكان الموصى به لتحديد المنصة أو الإضافة أو اعتماديات (dependencies) [[Cordova/cli|واجهة سطر الأوامر]] هو الملف <code>package.json</code> الخاص بالإضافة. انظر صفحة [[Cordova/plugins#.D8.AA.D8.AD.D8.AF.D9.8A.D8.AF .D8.A7.D9.84.D8.A7.D8.B9.D8.AA.D9.85.D8.A7.D8.AF.D9.8A.D8.A7.D8.AA|تحديد اعتماديات كوردوفا]] لمزيد من المعلومات.   
{| class="wikitable"
{| class="wikitable"
!الخاصيات  (النوع)   
!الخاصيات  (النوع)   
سطر 44: سطر 43:
|-
|-
|<code>name</code> (سلسلة نصية)  
|<code>name</code> (سلسلة نصية)  
|مطلوب  
|(مطلوب)


تمثل هذه الخاصية اسم المحرك (engine). فيما يلي المحركات الافتراضية المدعومة:  
تمثل هذه الخاصية اسم المحرك (engine). فيما يلي المحركات الافتراضية المدعومة:  
سطر 50: سطر 49:
* <code>cordova-plugman</code>
* <code>cordova-plugman</code>
* <code>cordova-android</code>
* <code>cordova-android</code>
* <code>cordova-browser</code>
* <code>cordova-ios</code>  
* <code>cordova-ios</code>  
* <code>cordova-windows</code>
* <code>cordova-windows</code>
سطر 56: سطر 56:


* <code>android-sdk</code> (تعيد أعلى مستوى لواجهة أندرويد البرمجية المثبتة)  
* <code>android-sdk</code> (تعيد أعلى مستوى لواجهة أندرويد البرمجية المثبتة)  
* <code>windows-sdk</code> (تعيد إصدار إطار العمل الأصلية SDK الخاصة بويندوز)  
* <code>windows-sdk</code> (تعيد إصدار إطار العمل الأصلي SDK الخاص بويندوز)  
* <code>apple-xcode</code> (تعيد إصدار xcode)  
* <code>apple-xcode</code> (تعيد إصدار xcode)  
* <code>apple-ios</code> (تعيد أعلى إصدار مثبت من منصة iOS)  
* <code>apple-ios</code> (تعيد أعلى إصدار مثبت من منصة iOS)  
* <code>apple-osx</code> (تعيد إصدار OSX)   
* <code>apple-osx</code> (تعيد إصدار OSX)   
يمكنك أيضًا تحديد إطار عمل مخصص إضافة للبيئات الافتراضية.
يمكنك أيضًا تحديد إطار عمل مخصص إضافةً للبيئات الافتراضية.
|-
|-
|<code>version</code> (سلسلة نصية)  
|<code>version</code> (سلسلة نصية)  
|مطلوب  
|(مطلوب)


إصدار  إطار العمل اللازم حتى يتم تثبيته. الإصدار الرمزي (Semver) مدعوم.  
إصدار  إطار العمل اللازم لكي يتم تثبيته. الإدارة الدلالية لنُسخ البرمجيات (Semver) مدعوم.  
|-
|-
|<code>scriptSrc</code> (سلسلة نصية)
|<code>scriptSrc</code> (سلسلة نصية)
|'''لإطارات العمل المُخصصة فقط'''
|'''لإطارات العمل المُخصصة فقط'''


مطلوب
(مطلوب)


ملف البرنامج النصي الذي يُعلِم الأمر <code>[[Cordova/plugman|plugman]]</code> بإصدار  إطار العمل المخصص. يُفضل أن يكون هذا الملف ضمن المجلد الجذري في مجلد الإضافات.   
ملف البرنامج النصي الذي يُعلِم الأمر <code>[[Cordova/plugman|plugman]]</code> بإصدار  إطار العمل المخصص. يُفضل أن يكون هذا الملف ضمن المجلد الجذري في مجلد الإضافات.   
سطر 77: سطر 77:
|'''لإطارات العمل المُخصصة فقط'''
|'''لإطارات العمل المُخصصة فقط'''


مطلوب  
(مطلوب)


المنصات التي يدعمها إطار العمل خاصتك. يمكنك استخدام الحرف العام <code>*</code> لتعبّر عن حقيقة أن إطار العمل يدعم جميع المنصات، أو تحديد عدة منصات مفصولة بعارضة ("<code>|</code>").
المنصات التي يدعمها إطار العمل خاصتك. يمكنك استخدام المحرف <code>*</code> العام لتعبّر عن حقيقة أنَّ إطار العمل يدعم جميع المنصات، أو تحديد عدة منصات مفصولة بخط شاقولي ("<code>|</code>").
|}
|}
 
اطلع على المثال التالي:<syntaxhighlight lang="xml"><engines>
=== أمثلة ===
<syntaxhighlight lang="xml"><engines>
   <engine name="cordova-android" version="=1.8.0" />
   <engine name="cordova-android" version="=1.8.0" />
</engines>‎</syntaxhighlight>  
</engines>‎</syntaxhighlight>  


قد تحدد عناصر المحرك (<code>Engine</code>) أيضًا التطابقات غير المضبوطة باستخدام المحارف "‎<code>></code>‎‎" و "‎<code>>=</code>‎" إلخ. وذلك لتجنب التكرار وتقليل أعباء الصيانة والمراجعة عند تحديث المنصة.  
قد تحدد عناصر المحرك (<code>engine</code>) أيضًا التطابقات غير المضبوطة باستخدام المحارف "‎<code>></code>‎‎" و "‎<code>>=</code>‎" ...إلخ. وذلك لتجنب التكرار وتقليل أعباء الصيانة والمراجعة عند تحديث المنصة.  
<syntaxhighlight lang="xml"><engines>
<syntaxhighlight lang="xml"><engines>
   <engine name="cordova-android" version=">=1.8.0" />
   <engine name="cordova-android" version=">=1.8.0" />
</engines>‎</syntaxhighlight>  
</engines>‎</syntaxhighlight>  


كذلك تدعم وسوم <code><engine></code> افتراضيًا جميع المنصات التي تعمل عليها كوردوفا. تحديد الوسم <code>engine</code> يعني أنّ جميع إصدارات كوردوفا، وعلى كل المنصات، يجب أن تتطابق مع قيمة الخاصية <code>version</code> الواردة في الوسم <code>engine</code>. يمكنك أيضًا سرد قائمة من منصات محددة مع إصداراتها لتجاوز الاختيار العام للوسم <code>engine</code>:  
كذلك تدعم وسوم <code><engine></code> افتراضيًا جميع المنصات التي تعمل عليها كوردوفا. تحديد الوسم <code>engine</code> يعني أنّ جميع إصدارات كوردوفا، على كل المنصات، يجب أن تتطابق مع قيمة الخاصية <code>version</code> الواردة في الوسم <code>engine</code>. يمكنك أيضًا سرد قائمة من منصات محددة مع إصداراتها لاستبدال الاختيار العام للوسم <code>engine</code>:  
<syntaxhighlight lang="xml"><engines>
<syntaxhighlight lang="xml"><engines>
   <engine name="cordova" version=">=1.7.0" />
   <engine name="cordova" version=">=1.7.0" />
   <engine name="cordova-android" version=">=1.8.0" />
   <engine name="cordova-android" version=">=1.8.0" />
   <engine name="cordova-ios" version=">=1.7.1" />
   <engine name="cordova-ios" version=">=1.7.1" />
</engines></syntaxhighlight>  
</engines></syntaxhighlight>  


مثال على بيئة عمل مخصصة:  
مثال على بيئة عمل مخصصة:  
سطر 104: سطر 102:
   <engine name="another_framework" version=">0.2.0" platform="ios|android" scriptSrc="path_to_another_framework_version"/>
   <engine name="another_framework" version=">0.2.0" platform="ios|android" scriptSrc="path_to_another_framework_version"/>
   <engine name="even_more_framework" version=">=2.2.0" platform="*" scriptSrc="path_to_even_more_framework_version"/>
   <engine name="even_more_framework" version=">=2.2.0" platform="*" scriptSrc="path_to_even_more_framework_version"/>
</engines>‎</syntaxhighlight>
</engines></syntaxhighlight>
 
== <code>name</code> ==
يُستخدم الوسم <code>name</code> لتحديد اسم الإضافة. هذا الوسم لا يدعم (لحد الساعة) إعدادات اللغة المحلية.
 
مثال:
<syntaxhighlight lang="xml"><name>Foo</name>‎</syntaxhighlight>
 
description
 
يُستخدم العنصر <code>description</code> لتحديد وصفٍ للإضافة. هذا العنصر لا يدعم (لحد الساعة) اللغات المحلية.
 
مثال:
<syntaxhighlight lang="xml"><description>Foo plugin description</description>‎</syntaxhighlight>  


author
== العنصر <code>name</code> ==
يُستخدم الوسم <code>name</code> لتحديد اسم الإضافة. هذا الوسم لا يدعم (إلى الآن) إعدادات اللغة المحلية.


يحتوي العنصر <code>author</code> على اسم مؤلف الإضافة.
مثال على استخدام الوسم <code>name</code>:
<syntaxhighlight lang="xml"><name>Foo</name>‎</syntaxhighlight>


مثال:
== العنصر <code>description</code> ==
<syntaxhighlight lang="xml"><author>Foo plugin author</author></syntaxhighlight>  
يُستخدم الوسم <code>description</code> لتحديد وصفٍ للإضافة. هذا العنصر لا يدعم (إلى الآن) اللغات المحلية.


keywords
مثال على استخدام الوسم <code>description</code>:
<syntaxhighlight lang="xml"><description>Foo plugin description</description>‎</syntaxhighlight>


يحتوي العنصر <code>keywords</code> على كلمات رئيسية مفصولة بفواصل لوصف الإضافة.  
== العنصر <code>author</code> ==
يحتوي الوسم <code>author</code> على اسم مؤلف الإضافة. مثال على استخدام الوسم <code>author</code>: <syntaxhighlight lang="xml"><author>Foo plugin author</author>‎</syntaxhighlight>


مثال:
== العنصر <code>keywords</code> ==
<syntaxhighlight lang="xml"><keywords>foo,bar</keywords>‎</syntaxhighlight>  
يحتوي العنصر <code>keywords</code> على كلمات مفتاحية مفصولة بفاصلة لوصف الإضافة.


license
مثال على استخدام الوسم <code>keywords</code>:
<syntaxhighlight lang="xml"><keywords>foo,bar</keywords>‎</syntaxhighlight>


== العنصر <code>license</code> ==
يُستخدم هذا العنصر لتحديد ترخيص الإضافة.  
يُستخدم هذا العنصر لتحديد ترخيص الإضافة.  


مثال:  
مثال على استخدام الوسم <code>license</code>:  
<syntaxhighlight lang="xml"><license>Apache 2.0 License</license>‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><license>Apache 2.0 License</license>‎</syntaxhighlight>


asset  
== العنصر <code>asset</code> ==
يُستخدم هذا العنصر لسرد الملفات أو المجلدات المراد نسخها في مجلد التطبيق <code>www</code>. عناصر <code><asset></code> المتشعبة (nested) داخل العنصر <code><platform></code> ستحدد أصول الويب (web assets) الخاصة بالمنصة. 
{| class="wikitable"
!الخاصيات  (النوع) 


يُستخدم هذا العنصر لسرد الملفات أو المجلدات المراد نسخها إلى مجلد التطبيق <code>www</code>. عناصر <code><asset></code> المتشعبة في عناصر <code><platform></code> ستحدد أصول الويب (web assets) الخاصة بالمنصة.
<small>فقط للمنصة</small>  
الخاصيات(النوع)  
!الوصف
|-
|<code>src</code> (سلسلة نصية)
|(مطلوب)


فقط للمنصة:
تحدد هذه الخاصية المكان الذي يوجد فيه الملف أو المجلد في حزمة الإضافة نسبةً إلى المستند <code>plugin.xml</code>. إن لم يكن الملف موجودًا في الموضع <code>src</code> المحدد، فستتوقف [[Cordova/cli|واجهة سطر الأوامر]] وستعكس عملية التثبيت، وستطلق تنبيهًا حول وجود تعارض، ثم تخرج مع إعادة قيمة غير معدومة.  
الوصف
|-
src (سلسلة نصية)
|<code>target</code> (سلسلة نصية)
مطلوب
|(مطلوب)
تحدد هذه الخاصية المكان الذي يوجد فيه الملف أو المجلد في حزمة الإضافة، نسبةً إلى المستند <code>plugin.xml</code>. إن لم يكن الملف موجودًا في الموضع src المحدد، فستتوقف [[Cordova/cli|واجهة سطر الأوامر]] وستعكس عملية التثبيت، وستطلق تنبيهًا حول التعارض، ثم تخرج مع إعادة قيمة غير معدومة.  
target (سلسلة نصية)
مطلوب
تحدد هذه الخاصية المكان الذي يجب أن يوجد فيه الملف أو المجلد في تطبيق كوردوفا، نسبةً إلى المجلد <code>www</code>. إن كان هناك ملف موجود سلفًا في الموضع المستهدف، فستتوقف [[Cordova/cli|واجهة سطر الأوامر]]، ثم ستعكس عملية التثبيت، وتطلق تنبيهًا حول التعارض، ثم ستخرج مع إعادة قيمة غير معدومة.


أمثلة
تحدد هذه الخاصية المكان الذي يجب أن يوجد فيه الملف أو المجلد في تطبيق كوردوفا نسبةً إلى المجلد <code>www</code>. إن كان هناك ملف موجود سلفًا في الموضع المستهدف، فستتوقف [[Cordova/cli|واجهة سطر الأوامر]]، ثم ستعكس عملية التثبيت، وتطلق تنبيهًا حول التعارض، ثم ستخرج مع إعادة قيمة غير معدومة.
<syntaxhighlight lang="xml"><!-- a single file, to be copied in the root directory -->
|}
إليك المثال التالي:<syntaxhighlight lang="xml"><!-- ملف سيُنسخ داخل المجلد الجذري -->
<asset src="www/foo.js" target="foo.js" />
<asset src="www/foo.js" target="foo.js" />
<!-- a directory, also to be copied in the root directory -->
<!-- مجلد سيُنسخ داخل المجلد الجذري -->
<asset src="www/foo" target="foo" />‎</syntaxhighlight>  
<asset src="www/foo" target="foo" />‎</syntaxhighlight>  


يمكن أيضًا استهداف الأصول (Assets) في المجلدات الفرعية. سيؤدي هذا إلى إنشاء مجلد <code>js/experimental</code> داخل المجلد <code>www</code>، ما لم يكن موجودًا بالفعل، وسينسخ الملف <code>new-foo.js</code> ويعيد تسميته عند القيمة <code>foo.js</code>.  
يمكن أيضًا استهداف الأصول (Assets) في المجلدات الفرعية. وسيؤدي ذلك إلى إنشاء المجلد <code>js/experimental</code> داخل المجلد <code>www</code>، ما لم يكن موجودًا بالفعل، وسيُنسَخ الملف <code>new-foo.js</code> وسيُعطَى الاسم <code>foo.js</code>.  
<syntaxhighlight lang="xml"><asset src="www/new-foo.js" target="js/experimental/foo.js" />‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><asset src="www/new-foo.js" target="js/experimental/foo.js" />‎</syntaxhighlight>


js-module  
== العنصر <code>js-module</code> ==
معظم الإضافات تتضمن ملف [[JavaScript|JavaScript]] واحدًا على الأقل. كل وسم <code><js-module></code> يقابل ملف [[JavaScript|JavaScript]]، إذ يُعفي ذلك مستخدمي الإضافة من إضافة وسم <code><script></code> لكل ملف. 


تتضمن معظم الإضافات ملف [[JavaScript|جافااسكريبت]] واحدًا أو أكثر. يقابل كل وسم <code><js-module></code> ملف [[JavaScript|جافااسكريبت]]، ويُعفي مستخدمي الإضافة من إضافة الوسم <code><script></code> لكل ملف. لا تقم بتغليف (wrap) الملف باستخدام cordova.define، إذ تتم إضافته تلقائيًا. يتم تغليف الوحدة في دالة مجهولة (closure)، مع الوحدة ، والتصدير (exports)، والاستيراد (require) في نطاق، كما هو معتاد في الوحدات غير المتزامنة AMD. تشعيب (Nesting) عناصر <code><js-module></code> ضمن الوسم <code><platform></code> سيُصرّح بارتباطات وحدة [[JavaScript|جافااسكريبت]] الخاصة بالمنصة.  
لا تقم بتغليف (wrap) الملف بواسطة <code>cordova.define</code>، لأنه سيُضاف تلقائيًا. يتم تغليف الوحدة في دالة مجهولة (closure)، حيث ستكون <code>module</code> و <code>exports</code> <code>وrequire</code> في النطاق، كما هو معتاد في الوحدات AMD.
الخاصيات(النوع)


فقط للمنصة:
تشعيب (Nesting) عناصر <code><js-module></code> ضمن الوسم <code><platform></code> سيُصرّح بارتباطات (bindings) وحدة [[JavaScript|JavaScript]] الخاصة بالمنصة.  
الوصف
{| class="wikitable"
src (سلسلة نصية)  
!الخاصيات (النوع) 
تحدد هذه الخاصية مرجعًا لملف في مجلد الإضافة نسبةً إلى الملف <code>plugin.xml</code>. إذا لم يتم حل src إلى ملف موجود، ستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق إشعارًا بالمشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
name (سلسلة نصية)
يوفر الجزء الأخير من اسم الوحدة النمطية. يمكن أن يكون ما تريده عادةً، ولا يهمك إلا إن كنت تريد استخدام كوردوفا.require لاستيراد أجزاء أخرى من الإضافات في شفرة [[Java|جافا]]ا سكريبت. اسم الوحدة النمطية لـ <code><js-module></code> هو معرف الإضافة متبوعًا بقيمة الاسم.


 
<small>فقط للمنصة</small>
مثال:
!الوصف
 
|-
عند تثبيت الإضافة في المثال أدناه، يُنسخ الملف socket.js في المسار <code>www/plugins/my-plugin-id/socket.js</code>، ويُضاف في كمُدخلة (entry) إلى الملف <code>www/cordova_plugins.js</code>. في وقت التحميل، تستخدم الشيفرة البرمجية في الملف <code>cordova.js</code> الواجهة البرمجية XHR لقراءة كل الملفات وإدارج الوسم <code><script></code> في ملف HTML.
|<code>src</code> (سلسلة نصية)
|تحدد هذه الخاصية مرجعًا لملف ما في مجلد الإضافة نسبةً إلى الملف <code>plugin.xml</code>. إذا لم يكن المسار المُستنتج من  <code>src</code> يشير إلى ملف موجود فعلًا، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا بالمشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
|-
|<code>name</code> (سلسلة نصية)
|توفر  هذه الخاصية الجزء الأخير من اسم الوحدة. يمكن أن تعطيها أي قيمة تريد، وليس لذلك أهمية إلا إن كنت تريد استخدام <code>cordova.require</code>  لاستيراد أجزاء أخرى من الإضافات في شيفرة JavaScript. اسم الوحدة <code><js-module></code> يساوي مُعرّف (id) الإضافة متبوعًا بقيمة الاسم.
|}عند تثبيت الإضافة في المثال أدناه، يُنسخ الملف <code>socket.js</code> في المسار <code>www/plugins/my-plugin-id/socket.js</code>، ويُضاف كمُدخلة (entry) إلى الملف <code>www/cordova_plugins.js</code>. في وقت التحميل، تستخدم الشيفرة البرمجية في الملف <code>cordova.js</code> الواجهة البرمجية XHR لقراءة كل الملفات وإدارج الوسم <code><script></code> في ملف [[HTML]]:
<syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
<syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
</js-module>‎</syntaxhighlight>  
</js-module>‎</syntaxhighlight>  


في هذا المثال أيضًا، باعتبار أن مُعرف (id) الإضافة يساوي <code>chrome-socket</code>، فسيكون اسم الوحدة هو <code>chrome-socket.Socket</code>.  
باعتبار أن مُعرف (id) الإضافة يساوي <code>chrome-socket</code>، فسيكون اسم الوحدة هو <code>chrome-socket.Socket</code>.  
== clobbers ==  
=== الوسم <code>clobbers</code> ===  


هذا الوسم مسموح به داخل العنصر <code><js-module></code>. وتستخدم لتحديد مجال الاسماء في الكائن <code>window</code> حيث يتم إدراج module.exports. يمكنك إدارج ما تشاء من وسوم <code><clobbers></code>. وسيتم إنشاء أي كائن غير متوفر في الكائن <code>window</code>.  
هذا الوسم مسموح به داخل العنصر <code><js-module></code>. ويُستخدم لتحديد مجال الأسماء (namespace) في الكائن <code>window</code> حيث يتم إدراج <code>module.exports</code>. يمكنك إدارج ما تشاء من الوسوم <code><clobbers></code>. الكائنات غير المتوفرة في الكائن <code>window</code> سيتم إنشاؤها.
الخاصيات (النوع)  
{| class="wikitable"
!الخاصيات (النوع)


فقط للمنصة:
<small>فقط للمنصة</small>
الوصف
!الوصف
target (سلسلة نصية)  
|-
مجال الأسماء حيث يتم إدراج module.exports.  
|<code>target</code> (سلسلة نصية)
 
|مجال الأسماء حيث يتم إدراج <code>module.exports</code>.
مثال:  
|}ألقِ نظرة فاحصة على المثال التالي: <syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
<syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
   <clobbers target="chrome.socket" />
   <clobbers target="chrome.socket" />
</js-module>‎</syntaxhighlight>  
</js-module>‎</syntaxhighlight>  


يُدرج module.exports هنا في الكائن <code>window</code> بحيث يمكن الوصول إليه بالتعبير <code>window.chrome.socket</code>.  
تُدرج <code>module.exports</code> هنا في الكائن <code>window</code> بحيث يمكن الوصول إليها عبر <code>window.chrome.socket</code>.  
==merges==  
===الوسم <code>merges</code>===  


هذا الوسم مسموح به داخل العنصر <code><js-module></code>. ويُستخدم لتحديد مجال الاسماء المرتبط بالكائن <code>window</code> حيث يُدمج module.exports مع القيمة الموجودة. إذا كان هناك مفتاح موجود سلفًا، فسيتجاوز (overrides) إصدار الوحدة الإصدار الأصلي. يمكنك إدارج أي عدد تريد من الوسوم <code><merges></code>. الكائنات غير المتوفر في الكائن <code>window</code> سيتم إنشاؤها.  
هذا الوسم مسموح به داخل العنصر <code><js-module></code>. ويُستخدم لتحديد مجال الأسماء المرتبط بالكائن <code>window</code> حيث يُدمج <code>module.exports</code> مع القيمة الموجودة. إذا كان هناك مفتاح (key) موجود سلفًا، فسيستبدل (overrides) إصدارُ الوحدة الإصدارَ الأصلي. يمكنك إدارج أي عدد تريد من الوسوم <code><merges></code>. سيتم إنشاء الكائنات غير المتوفرة في الكائن <code>window</code>.
الخاصيات(النوع)  
{| class="wikitable"
!الخاصيات (النوع)


فقط للمنصة:
<small>فقط للمنصة</small>
الوصف
!الوصف
target (سلسلة نصية)  
|-
مجال الاسماء حيث يتم دمج module.exports.
|<code>target</code> (سلسلة نصية)
 
|مجال الأسماء حيث يتم إدراج module.exports
مثال:  
|}إليك المثال التالي: <syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
<syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
   <merges target="chrome.socket" />
   <merges target="chrome.socket" />
</js-module>‎</syntaxhighlight>  
</js-module>‎</syntaxhighlight>  


في هذا المثال يُدمج module.exports مع أي قيمة موجودة في <code>window.chrome.socket</code>.  
في هذا المثال ستُدمَج <code>module.exports</code> مع أي قيمة موجودة في <code>window.chrome.socket</code>.  
==runs==  
===الوسم <code>runs</code>===  


هذا الوسم مسموح به داخل العنصر <code><js-module></code>. إذ يستدعي ضرورة تحديد شيفرتك البرمجية عبر <code>cordova.require</code>، دون أن تكون مثبتة في كائن <code>window</code>. هذا مفيد عند تهيئة الوحدة ،أو إرفاق معالجات الأحداث (event handlers) و غير ذلك. يمكن استخدام وسم <code><runs/></code> واحد فقط. لاحظ أن تضمين <code><runs/></code> مع <code><clobbers/></code> أو <code><merges/></code> فيه تكرار، لأنهم يستوردون الوحدة عبر الأمر <code>cordova.require</code>.  
هذا الوسم مسموح به داخل العنصر <code><js-module></code>. ويستلزم ضرورة تحديد شيفرتك البرمجية عبر <code>cordova.require</code>، لكن دون أن تكون مثبتة في الكائن <code>window</code>. هذا مفيد عند تهيئة الوحدة، أو عند إرفاق معالجات الأحداث (event handlers) و غير ذلك. يمكن استخدام الوسم <code><runs/></code> مرةً واحدةً فقط. لاحظ أن تضمين <code><runs/></code> مع <code><clobbers/></code> أو <code><merges/></code> فيه تكرار، لأنها تستورد الوحدة عبر الأمر <code>cordova.require</code>.  


مثال:  
اطلع على الشيفرة التالية:  
<syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
<syntaxhighlight lang="xml"><js-module src="socket.js" name="Socket">
   <runs/>
   <runs/>
</js-module>‎</syntaxhighlight>  
</js-module>‎</syntaxhighlight>
 
== العنصر <code>dependency</code> ==
يسمح لك الوسم <code><dependency></code> بتحديد الإضافات الأخرى التي تعتمد عليها الإضافة الحالية. يُشار إلى الإضافات بواسطة معرفات مدير الحُزم npm، أو عن طريق عنوان مستودع github.
{| class="wikitable"
!الخاصيات (النوع) 


dependency
<small>فقط للمنصة</small>
!الوصف
|-
|<code>id</code> (سلسلة نصية)
|توفّر هذه الخاصية معرف الإضافة.
|-
|<code>url</code> (سلسلة نصية)
|عنوان URL الخاص بالإضافة. يجب أن يشير هذا العنوان إلى مستودع git الذي ستحاول [[Cordova/cli|واجهة سطر الأوامر]] نسخه.
|-
|<code>commit</code> (سلسلة نصية)
|مرجع لمستودع git مفهوم من قبل <code>git checkout</code>: يمكن أن يكون فرعًا أو وسمًا (مثل <code>master</code>، أو <code>0.3.1</code>)، أوقيمة hash) عبر commit hash مثل <code>975ddb228af811dd8bb37ed1dfd092a3d05295f9</code>).
|-
|<code>subdir</code> (سلسلة نصية)
|تبيّن هذه الخاصية أن اعتماديات الإضافة المستهدفة موجودة كمجلد فرعي في مستودع git. وهذا مفيد لأنه يسمح للمستودع بأن يحتوي على العديد من الإضافات ذات الصلة، بحيث تُحدد كلها  بشكل فردي.


يسمح لك الوسم <code><dependency></code> بتحديد الإضافات الأخرى التي تعتمد عليها الإضافة الحالية. تتم الإشارة إلى الإضافات بواسطة معرفات مدير الحُزم npm، أو عن طريق عنوان مستودع github.  
إذا قمت بتعيين الخاصية <code>url</code> في الوسم <code><dependency></code> وأعطيتها القيمة <code>"."،</code> وقمت بتحديد الخاصية <code>subdir</code>، فستُثبّت الإضافة المرتبطة من نفس مستودع git المحلي أو البعيد مثل الإضافة الأب (parent plugin) التي حددت الوسم <code><dependency></code>. لاحظ أن المسار الذي تحدده <code>subdir</code> منسوب دائمًا إلى جذر مستودع git، وليس الإضافة الأم. هذا الأمر لن يتغير حتى لو قمت بتثبيت الإضافة عبر مسار محلي موجه مباشرة إليها. ستجد [[Cordova/cli|واجهة سطر الأوامر]] جذر مستودع git، ثم ستجد الإضافة الأخرى من هناك.
الخاصيات(النوع)  
|-
|<code>version</code> (سلسلة نصية)  
|إصدار الإضافة المعتمد عليها. الإدارة الدلالية لنُسخ البرمجيات ([https://semver.org/lang/ar/ SemVer]، اختصار للكملتين Semantic Versioning) مدعوم.
|}مثال على استخدام الوسم <code>dependency</code>: <syntaxhighlight lang="xml"><dependency id="cordova-plugin-someplugin" url="https://github.com/myuser/someplugin" commit="428931ada3891801" subdir="some/path/here" />
<dependency id="cordova-plugin-someplugin" version="1.0.1">
</syntaxhighlight>


فقط للمنصة:
== العنصر <code>platform</code> ==
الوصف
يعرّف هذا الوسم المنصات التي لها أكواد برمجية أصيلة (native code) مرتبطة بها، أو تتطلب تعديلات على ملفات الإعدادات الخاصة بها. يمكن للأدوات التي تستخدم هذه المواصفات التعرف على المنصات المدعومة وتثبيت الشيفرة البرمجية في مشروعات كوردوفا. الإضافات التي لا تستخدم الوسوم <code><platform></code> يُفترض أن تكون بلغة [[JavaScript|JavaScript]] فقط، وبالتالي ستكون قابلة للتثبيت على كل المنصات.
id (سلسلة نصية)
{| class="wikitable"
توفر معرف الإضافة.
!الخاصيات  (النوع)
url (سلسلة نصية)
عنوان URL الخاص بالإضافة. يجب أن يشير هذا العنوان إلى مستودع git، والذي ستحاول [[Cordova/cli|واجهة سطر الأوامر]] استنساخه.
commit (سلسلة نصية)
مرجع لمستودع git مفهوم من قبل <code>git checkout</code>: فرع أو وسم (على سبيل المثال، <code>master</code>، <code>0.3.1</code>)، أو تجزئة التزام commit hash (على سبيل المثال، <code>975ddb228af811dd8bb37ed1dfd092a3d05295f9</code>).  
subdir (سلسلة نصية)
تحدد هذه الخاصية أن ارتباطات الإضافة المستهدفة موجودة كمجلد فرعي في مستودع git. وهذا مفيد لأنه يسمح بأن يحتوي المستودع على العديد من الإضافات ذات الصلة، كل منها محددة بشكل فردي.
إذا قمت بتعيين <code>url</code> في الوسم <code><dependency></code> عند القيمة <code>"."</code> وقمت بتوفير <code>subdir</code>، فستُثبّت الإضافة المرتبطة من نفس مستودع git المحلي أو البعيد باغتبارها الإضافة الأم (parent plugin) التي تحدد الوسم <code><dependency></code>.
لاحظ أن <code>subdir</code> تحدد دومًا مسارًا نسبة إلى جذر المستودع git، وليس الإضافة الأم. يبفى هذا صحيحًا حتى لو قمت بتثبيت الإضافة عبر مسار محلي موجه مباشرة إليه.ستجد [[Cordova/cli|واجهة سطر الأوامر]] جذر مستودع git، ثم ستجد الإضافة الأخرى من هناك.  
version (سلسلة نصية)
إصدار الإضافة المعتمد عليها. الإصدار الرمزي (Semver) مدعوم.


أمثلة
<small>فقط للمنصة</small>  
<syntaxhighlight lang="xml"><dependency id="cordova-plugin-someplugin" url="https://github.com/myuser/someplugin" commit="428931ada3891801" subdir="some/path/here" />
!الوصف
<dependency id="cordova-plugin-someplugin" version="1.0.1"></syntaxhighlight>  
|-
|<code>name</code> (سلسلة نصية)
|(مطلوب)


platform
القيم المسموح بها هي: <code>ios</code> و <code>android</code> و <code>windows</code> و <code>browser</code> و <code>osx</code>


يعرّف هذا الوسم المنصات التي لها أكواد برمجية أصلية مرتبطة بها، أو تتطلب تعديلات على ملفات الإعدادات الخاصة بها. يمكن للأدوات التي تستخدم هذه المواصفات التعرف على المنصات المدعومة وتثبيت الشيفرة البرمجية في مشروعات كوردوفا. الإضافات التي ليس لها وسوم <code><platform></code> يُفترض أن تكون بلغة [[JavaScript|جافااسكريبت]] فقط، وبالتالي ستكون قابلة للتثبيت على كل المنصات.
تجعل هذه الخاصية المنصة المحددة مدعومة، مع ربط العنصر الفرعي (element's children) بتلك المنصة.
الخاصيات(النوع)
|}مثال على استخدام الوسم <code>platform</code>: <syntaxhighlight lang="xml"><platform name="android">
  <!-- عناصر خاصة بأندرويد -->
</platform></syntaxhighlight>


فقط للمنصة:
== العنصر <code>source-file</code> ==
الوصف
يحدد هذا الوسم الشيفرة المصدرية القابلة للتنفيذ التي يجب تثبيتها في المشروع. 
name (سلسلة نصية)
{| class="wikitable"
مطلوب
!الخاصيات (النوع)
القيم المسموح بها: ios و android و windows و browser و osx
تجعل هذه الخاصية المنصة مدعومة، مع ربط العنصرالفرعي (element's children) بتلك المنصة.


مثال:
<small>فقط للمنصة</small>  
<syntaxhighlight lang="xml"><platform name="android">
!الوصف
  <!-- android-specific elements -->
|-
</platform></syntaxhighlight>  
|<code>src</code> (سلسلة نصية)
|(مطلوب)


source-file
تحدد هذه الخاصية موقع الملف نسبةً إلى الملف <code>plugin.xml</code>. إذا تعذر العثور على الملف src، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
|-
|<code>target-dir</code> (سلسلة نصية)
|المجلد الذي يجب أن تُنسخ الملفات فيه نسبةً إلى جذر مشروع كوردوفا. من الناحية العملية، يعد هذا أكثر أهمية للمنصات القائمة على جافا، حيث يجب وضع الملفات الموجودة في الحزمة <code>com.alunny.foo</code> داخل المجلد <code>com/alunny/foo</code>. بالنسبة للمنصات التي لا يكون للمجلد المصدري أهمية كبيرة فيها، فيجب حذف هذه الخاصية.
|-
|<code>framework</code> (قيمة منطقية)


نحدبد الشيفرة المصدرية القابلة للتنفيذ التي يجب تثبيتها في المشروع.
(المنصة iOS)
الخاصيات(النوع)  
|القيمة الافتراضية: <code>false</code>


فقط للمنصة:
عند تعيين هذه الخاصية إلى القيمة <code>true</code>، فستضيف أيضًا الملف المحدد كإطار عمل للمشروع.
الوصف
|-
src (سلسلة نصية)
|<code>compiler-flags</code> (سلسلة نصية)
مطلوب
موقع الملف نسبةً إلى الملف <code>plugin.xml</code>. إذا تعذر العثور على الملف src، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.  
target-dir (سلسلة نصية)
المجلد الذي يجب أن تُنسخ الملفات فيه، نسبةً إلى جذر مشروع كوردوفا. من الناحية العملية، يعد هذا أكثر أهمية للمنصات القائمة على [[Java|جافا]]ا، حيث يجب وضع الملفات الموجودة في الحزمة <code>com.alunny.foo</code> داخل المجلد <code>com/alunny/foo</code>. بالنسبة للمنصات التي لا يكون للمجلد المصدري أهمية كبيرة، فيجب حذف هذه الخاصية.
framework (قيمة منطقية)
القيمة الافتراضية: false
عند تعيين هذه الخاصية عند القيمة true، فستضيف أيضًا الملف المحدد كإطار عمل للمشروع.
compiler-flags (سلسلة نصية)  
في حال تعيين هذه الخاصية، فستعيّن رايات المُصرّف (compiler flags) المحددة الملف المصدري المحدد.


أمثلة:  
(المنصة iOS)
<syntaxhighlight lang="xml"><!-- android -->
|هذه الخاصية ستعيّن رايات المُصرّف (compiler flags) الخاصة بالملف المصدري المحدد.
|}مثال على استخدام الوسم <code>source-file</code>: <syntaxhighlight lang="xml"><!-- android -->
<source-file src="src/android/Foo.java" target-dir="src/com/alunny/foo" />
<source-file src="src/android/Foo.java" target-dir="src/com/alunny/foo" />
<!-- ios -->
<!-- ios -->
<source-file src="src/ios/CDVFoo.m" />
<source-file src="src/ios/CDVFoo.m" />
<source-file src="src/ios/someLib.a" framework="true" />
<source-file src="src/ios/someLib.a" framework="true" />
<source-file src="src/ios/someLib.a" compiler-flags="-fno-objc-arc" /></syntaxhighlight>  
<source-file src="src/ios/someLib.a" compiler-flags="-fno-objc-arc" />
</syntaxhighlight>


header-file  
== العنصر <code>header-file</code> ==
هذا الوسم يشبه <code><source-file></code>، ولكنه مُخصص لمنصات مثل iOS و Android، والتي تُميز بين الملفات المصدرية (source files)، والملفات الرئيسية (headers) والموارد (resources). هذا الوسم غير مدعوم من قبل ويندوز.
{| class="wikitable"
!الخاصيات (النوع) 


هذا الوسم يشبه <code><source-file></code>، ولكنه مخصص للمنصات مثل iOS و Android، التي تميز بين الملفات المصدرية (source files)، والمفات الرئيسية (headers) والموارد. هذا الوسم غير مدعو من قبل ويندوز.
<small>فقط للمنصة</small>
الخاصيات(النوع)  
!الوصف
|-
|<code>src</code> (سلسلة نصية)
|(مطلوب)  


فقط للمنصة:
موضع الملف نسبةً إلى الملف <code>plugin.xml</code>. إذا تعذر العثور على الملف الذي تحدده src، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
الوصف
|-
src (سلسلة نصية)
|<code>target-dir</code> (سلسلة نصية)
مطلوب
|المجلد حيث يجب نسخ الملفات، يُحدد نسبةُ إلى جذر مشروع كوردوفا.
موقع الملف نسبةً إلى <code>plugin.xml</code>. إذا تعذر العثور على الملف src، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.  
|-
target-dir (سلسلة نصية)  
|<code>type</code> (سلسلة نصية)
المجلد حيث يجب نسخ الملفات، يُحدد نسبةُ إلى جذر مشروع كوردوفا.  
IOS
|إم كانت قيمتها تساوي <code>BridgingHeader</code>، فسيُستورد الملف من <code>Bridging-Header.h</code> ويمكن أن يُستدعى من برنامج سويفت.
|}مثال خاص بمنصة iOS: <syntaxhighlight lang="xml"><header-file src="CDVFoo.h" />
<header-file src="CDVSomeHeader.h" type="BridgingHeader" />
</syntaxhighlight>


مثال:
== العنصر <code>resource-file</code> ==
هذا الوسم يشبه <code><source-file></code>، ولكنه مخصوص بمنصات مثل iOS و Android التي تميز بين الملفات المصدرية والملفات الرئيسية والموارد. 
{| class="wikitable"
!الخاصيات  (النوع) 


لمنصة iOS:  
<small>فقط للمنصة:</small>
<syntaxhighlight lang="xml"><header-file src="CDVFoo.h" />‎</syntaxhighlight>  
!الوصف
|-
|<code>src</code> (سلسلة نصية)
|(مطلوب)


resource-file
موضع الملف نسبةً إلى الملف <code>plugin.xml</code>. إذا تعذر العثور على الملف src، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
|-
|<code>target-dir</code> (سلسلة نصية)
|المسار حيث سيُنسخ الملف داخل المجلد خاصتك.
|-
|<code>arch</code> (سلسلة نصية)


هذا الوسم يشبه <code><source-file></code>، ولكنه مخصوص بمنصات مثل iOS و Android التي تميز بين الملفات المصدرية والمفات الرئيسية والموارد.  
(منصة ويندوز)
الخاصيات(النوع)
|القيم المسموح بها: <code>x86</code> أو <code>x64</code> أو <code>ARM</code>.  


فقط للمنصة:
تشير هذه الخاصية إلى أنه يجب ألا يتم تضمين الملف إلا عند بناء معمارية (architecture) محددة.
الوصف
|-
src (سلسلة نصية)
|<code>device-target</code>
مطلوب
موقع الملف بالنسبة إلى <code>plugin.xml</code>. إذا تعذر العثور على الملف src، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
target (سلسلة نصية)
المسار حيث سيُنسخ الملف داخل المجلد خاصتك.
arch (سلسلة نصية)
القيم المسموح بها: <code>x86</code> أو <code>x64</code> أو <code>ARM</code>.
تشير هذه الخاصية إلى أنه يجب ألا يتم تضمين الملف إلا عند بناء الهيكل (architecture) المحددة.


(منصة ويندوز)
|القيم المسموح بها: <code>win</code> (أو <code>windows</code>) أو <code>phone</code> أو <code>all</code>.


device-target
تشير هذه الخاصية إلى أنه لا ينبغي تضمين الملف إلا عند القيام بالبناء لأجل نوع الجهاز المستهدف.  
القيم المسموح بها: <code>win</code> (أو <code>windows</code>) أو <code>phone</code> أو <code>all</code>.
|-
تشير هذه الخاصية إلى أنه لا ينبغي تضمين الملف إلا عند البناء لأجل نوع الجهاز المستهدف.  
|<code>versions</code>
versions  
تشير هذه الخاصية إلى أنه لا ينبغي تضمين الملف إلا عند البناء لأجل الإصدارات التي تطابق سلسلة النصية المحددة. قيمة هذه الخاصية يمكن أن تكون أي سلسلة نصية تحدد مجالًا لإصدار دلالي (node semantic version) صالح.
reference
تشير هذه الخاصية إلى أنه يجب الرجوع إلى الملف من src بدلاً من نسخه إلى الوجهة المستهدفة. سيظهر الملف في Visual Studio مع اسم الملف المحدد من طرف target، ولكنه سيشير إلى src المقابل، بحسب الهيكل (architecture).


أمثلة:
(ويندوز)
|تشير هذه الخاصية إلى أنه لا ينبغي تضمين الملف إلا عند القيام بالبناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. قيمة هذه الخاصية يمكن أن تكون أي سلسلة نصية تحتوي مجالًا لإصدار دلالي (node semantic version) صالح.
|-
|<code>reference</code>


لأجهزة الأندرويد:  
(منصة ويندوز)
<syntaxhighlight lang="xml"><resource-file src="FooPluginStrings.xml" target="res/values/FooPluginStrings.xml" /></syntaxhighlight>  
|تشير هذه الخاصية إلى أنه يجب الرجوع إلى الملف عبر <code>src</code> بدلًا من نسخه في الوجهة المستهدفة. سيظهر الملف في Visual Studio مع اسم الملف المحدد من طرف <code>target</code>، ولكنه سيشير إلى الموضع <code>src</code> المقابل، وذلك بحسب المعمارية (architecture) المستخدمة.
|}مثال لأجهزة الأندرويد: <syntaxhighlight lang="xml"><resource-file src="FooPluginStrings.xml" target="res/values/FooPluginStrings.xml" />
</syntaxhighlight>  


لويندوز:  
مثال خاص بمنصة ويندوز:  
<syntaxhighlight lang="xml"><resource-file src="src/windows/win81/MobServices.pri" target="win81\MobServices.pri" device-target="windows" versions="8.1" arch="x64"/>
<syntaxhighlight lang="xml"><resource-file src="src/windows/win81/MobServices.pri" target="win81\MobServices.pri" device-target="windows" versions="8.1" arch="x64"/>
<!-- Example of referencing  -->
 
<!-- مثال على الترجيع -->
<resource-file src="x86/foo.dll" target="foo.dll" arch="x86" reference="true" />
<resource-file src="x86/foo.dll" target="foo.dll" arch="x86" reference="true" />
<resource-file src="x64/foo.dll" target="foo.dll" arch="x64" reference="true" /></syntaxhighlight>  
<resource-file src="x64/foo.dll" target="foo.dll" arch="x64" reference="true" />
</syntaxhighlight>  
 
'''ملاحظة''': يجب أن تستخدم الخاصية <code>target</code> الخطوط المائلة العكسية ("\") لتجنب الخطأ <code>DEP2100 deploy</code> في Visual Studio.


'''NOTE''': يجب استخدام <code>target</code> الخطوط المائلة العكسية ("\") لتجنب الخطأ DEP2100 deploy في Visual Studio.  
== العنصر <code>config-file</code> ==
يحدد هذا الوسم ملف الإعداد (XML) المراد تعديله، ويحدد موضع التعديل في ذلك المستند، وما الذي ينبغي تعديله.


config-file  
هناك نوعان من الملفات تم اختبارها وتعديلها عبر هذا العنصر، وهما الملفان <code>xml</code> و <code>plist</code>. لا يسمح العنصر <code>config-file</code> إلا بإلحاق الوسوم الفرعية الجديدة إلى شجرة المستند XML. الوسوم الفرعية هي عناصر XML حرفية (literals) يتم إدراجها في الوثيقة المستهدفة.
{| class="wikitable"
!الخاصيات (النوع) 


يحدد هذا الوسم ملف إعداد XML ليتم تعديله، ويحدد أين ينبغي أن يحدث التعديل في ذلك المستند، وما الذي ينبغي تعديله. هناك نوعان من الملفات تم اختبارها وتعديلها عبر هذا العنصر، وهما الملفان <code>xml</code> و <code>plist</code>. لا يسمح العنصر <code>config-file</code> إلا بإلحاق وسوم فرعية جديدة لشجرة مستند XML. الوسوم الفرعية هي عناصر XML حرفية ليتم إدراجها في الوثيقة المستهدفة.  
<small>فقط للمنصة</small>
الخاصيات(النوع)  
!الوصف
|-
|<code>target</code> (سلسلة نصية)
|تحدد هذه الخاصية الملف المراد تعديله، والمسار نسبةً لجذر مشروع كوردوفا. إن لم يكن الملف المحدد موجودًا، فستتجاهل الأداة التعديلات على الإعدادات وستستمر في التثبيت.
 
يمكن أن يتضمن الهدف المحرف العام (<code>*</code>). في هذه الحالة، ستبحث [[Cordova/cli|واجهة سطر الأوامر]] عوديًا (recursively) في مجلد المشروع، وستستخدم أول تطابق.
 
في منصة iOS، موضع ملفات الإعدادات نسبةً إلى جذر مجلد المشروع غير معروف، لذلك فاعتماد القيمة <code>config.xml</code> سيُترجم إلى <code>cordova-ios-project/MyAppName/config.xml</code>.
|-
|<code>parent</code> (سلسلة نصية)
|محدد XPath ‏(XPath selector‏) يشير إلى أصل (parent) العناصر المراد إضافتها إلى ملف الإعدادات. إن استخدمت محددًا مطلقًا (absolute selectors)، فيمكنك استخدام المحرف العام (<code>*</code>) لتحديد العنصر الجذري، على سبيل المثال، ‎<code>/*/plugins</code>. إن لم يكن المحدد يُشير إلى وسم فرعي (child) من المستند المحدد، فستوقف الأداة عملية التثبيت وتعكسها، وتطلق تنبيًها، ثم تخرج وتعيد قيمة غير معدومة.
 
بالنسبة للملفات <code>plist</code>، تحدد الخاصية <code>parent</code> المفتاح الأصلي (parent key) الذي ينبغي أن يُدرج فيه عنصر XML المحدد.
|-
|after (سلسلة نصية)
|قائمة مرتبة حسب الأولوية للوسوم الإخوة (siblings) المقبولة التي ينبغي إضافة بيانات XML بعدها. هذه الخاصية مفيدة لتحديد التغييرات في الملفات التي تتطلب ترتيبًا صارمًا لعناصر XML، كما هو الحال [http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769509%28v=vs.105%29.aspx#BKMK_EXTENSIONSelement هنا].
|-
|<code>device-target</code> (سلسلة نصية)


فقط للمنصة:
(منصة ويندوز)
الوصف
|القيم المسموح بها: <code>win</code> و <code>phone</code> و <code>all</code>.  
target (سلسلة نصية)  
تحدد هذه الخاصية الملف المراد تعديله، والمسار نسبة لجذر مشروع كوردوفا. إن لم يكن الملف المحدد موجودًا، فستتجاهل الأداة التعديلات على الإعدادات وستستمر في التثبيت.
يمكن أن يتضمن الهدف المحرف العام (<code>*</code>). في هذه الحالة، ستبحث [[Cordova/cli|واجهة سطر الأوامر]] عوديًا (recursively) في بنية مجلد المشروع، وستستخدم أول تطابق.
على منصة iOS، لا يُعرف موقع ملفات الإعدادات المنسوبة إلى جذر مجلد المشروع، لذلك فإعطاء الخاصية target القيمة <code>config.xml</code> سيُترجم إلى <code>cordova-ios-project/MyAppName/config.xml</code>.
parent (سلسلة نصية)
محدد XPath يشير إلى أصل العناصر المراد إضافتها إلى ملف الإعداد. إن استخدمت محددًا مطلقًا (absolute selectors)، فيمكنك استخدام المحرف العام (<code>*</code>) لتحديد العنصر الجذري، على سبيل المثال، <code>/*/plugins</code>. إذا لم يتم حل المحدد إلى وسم فرعي (child) من المستند المحدد، فستوقف الأداة عملية التثبيت وتعكسها، وتطلق تنبيًها، ثم تخرج وتعيد قيمة غير معدومة.
بالنسبة لملفات <code>plist</code>، تحدد الخاصية <code>parent</code> المفتاح الأصلي (parent key) الذي ينبغي أن يُدرج فيه عنصر XML المحدد.
after (سلسلة نصية)
قائمة مرتبة حسب الأولوية للوسوم الإخوة (siblings) المقبولة التي ينبغي إضافة مقتطف XML بعدها. هذه الخاصية مفيدة لتحديد التغييرات في الملفات التي تتطلب ترتيبًا صارمًا لعناصر XML، كما هو الحال في [http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769509%28v=vs.105%29.aspx#BKMK_EXTENSIONSelement this].
device-target (سلسلة نصية)
القيم المسموح بها: <code>win</code> و <code>phone</code> و <code>all</code>.
هذه الخاصية قابلة للتطبيق عند التأثير على اسم الاسم الوصفي <code>package.appxmanifest</code>، تشير هذه الخاصية إلى أنه يجب ألا يُعدّل الملف إلا عند البناء لأجل نوع الجهاز المستهدف المحدد.
versions (سلسلة نصية)
تُطبق هذه الخاصية عند التأثير على الاسم الوصفي <code>package.appxmanifest</code>، تشير هذه الخاصية إلى أنه يجب ألا تُعدّل ملفان بيان (manifests) التطبيق الخاصة بإصدارات ويندوز المحددة إلا في الإصدارات التي تطابق السلسلة النصية في الخاصية versions. يمكن أن تكون القيمة أي سلسلة نصية تحتوي مجالًا صالحًا للإصدارات الدلالية (semantic version).  


أمثلة:
هذه الخاصية قابلةً للتطبيق عند التأثير على  الاسم الوصفي <code>package.appxmanifest</code>، تشير هذه الخاصية إلى ضرورة عدم تعديل الملف إلا عند القيام بالبناء لأجل نوع الجهاز المستهدف المحدد.
|-
|<code>versions</code> (سلسلة نصية)


بالنسبة لـ XML:  
(منصة ويندوز)
|تُطبق هذه الخاصية عند التأثير على الاسم الوصفي <code>package.appxmanifest</code>، تشير هذه الخاصية إلى ضرورة عدم تعديل ملفات بيان (manifests) التطبيق الخاصة بإصدارات ويندوز المحددة إلا في الإصدارات التي تطابق السلسلة النصية المُعيّنة في الخاصية <code>versions</code>. يمكن أن تكون قيمة هذه الخاصية أي سلسلة نصية تحتوي مجالًا صالحًا للإصدارات الدلالية (semantic version).
|}مثال عن XML:  
<syntaxhighlight lang="xml"><config-file target="AndroidManifest.xml" parent="/manifest/application">
<syntaxhighlight lang="xml"><config-file target="AndroidManifest.xml" parent="/manifest/application">
     <activity android:name="com.foo.Foo" android:label="@string/app_name">
     <activity android:name="com.foo.Foo" android:label="@string/app_name">
سطر 377: سطر 418:
         </intent-filter>
         </intent-filter>
     </activity>
     </activity>
</config-file></syntaxhighlight>  
</config-file></syntaxhighlight>  


بالنسبة لـ <code>plist</code>:  
مثال آخر عن <code>plist</code>:  
<syntaxhighlight lang="xml"><config-file target="*-Info.plist" parent="CFBundleURLTypes">
<syntaxhighlight lang="xml"><config-file target="*-Info.plist" parent="CFBundleURLTypes">
     <array>
     <array>
سطر 387: سطر 428:
         </dict>
         </dict>
     </array>
     </array>
</config-file></syntaxhighlight>  
</config-file></syntaxhighlight>  


بالنسبة للخاصيات المخصوصة بويندوز:  
مثال آخر من أجل الخاصيات الخاصة بويندوز:  
<syntaxhighlight lang="xml"><config-file target="package.appxmanifest" parent="/Package/Capabilities" versions="&lt;8.1.0">
<syntaxhighlight lang="xml"><config-file target="package.appxmanifest" parent="/Package/Capabilities" versions="&lt;8.1.0">
     <Capability Name="picturesLibrary" />
     <Capability Name="picturesLibrary" />
سطر 396: سطر 437:
<config-file target="package.appxmanifest" parent="/Package/Capabilities" versions=">=8.1.0" device-target="phone">
<config-file target="package.appxmanifest" parent="/Package/Capabilities" versions=">=8.1.0" device-target="phone">
     <DeviceCapability Name="webcam" />
     <DeviceCapability Name="webcam" />
</config-file></syntaxhighlight>  
</config-file>
</syntaxhighlight>  


المثال أعلاه سيجعل المنصات السابقة للإصدار 8.1 (ويندوز 8، على وجه التحديد) مُطالبة باستيراد مكتبة <code>webcam</code> والمكتبة العامة <code>picturesLibrary</code>، مع تطبيق مكتبة الجهاز <code>webcam</code> حصريًا على مشاريع ويندوز 8.1 التي تُبنى لأجل Windows Phone. أما منصات Windows 8.1 المكتبية فلا تُعدل.  
المثال أعلاه سيجعل المنصات السابقة للإصدار 8.1 (ويندوز 8، على وجه التحديد) تطالب باستيراد مكتبة <code>webcam</code> والمكتبة العامة <code>picturesLibrary</code>، مع تطبيق مكتبة الجهاز <code>webcam</code> حصريًا على مشاريع ويندوز 8.1 التي تُبنى لأجل Windows Phone. أما منصات Windows 8.1 المكتبية فلن تُعدَّل.  


edit-config  
== العنصر <code>edit-config</code> ==
هذا الوسم مشابه للعنصر <code>config-file</code>. يعرّف <code>edit-config</code> ملف الإعداد (XML) المراد تعديله، وأين ينبغي إجراء التعديل في ذلك الملف، وما الذي يجب تعديله. بدلًا من إلحاق وسوم فرعية (children) جديدة لشجرة المستند XML، يجري العنصر <code>edit-config</code> تعديلات على خاصيات عناصر XML. هناك وضعان سيحددان نوع التعديل الذي سيُجرى على الخاصيات، وهما <code>merge</code> و <code>overwrite</code>. الوسم <code>edit-config</code> لديه وسم فرعي واحد، والذي سيحتوي على الخاصيات المراد إضافتها. 
{| class="wikitable"
!الخاصيات (النوع) 


هذا الوسم مشابهٌ للوسم <code>config-file</code>، يعرّف <code>edit-config</code> ملف إعداد XML المراد تعديله، وأين ينبغي إجراء التعديل في ذلك المفد، وما الذي يجب تعديله. بدلاً من إلحاق وسوم فرعية (children) جديدة لشجرة مستند XML، يقوم <code>edit-config</code> بإجراء تعديلات على خاصيات عناصر XML. هناك وضعان سيحددان نوع التعديل الذي سيُجرى على الخاصيات، وهما <code>merge</code> و <code>overwrite</code>. الوسم <code>edit-config</code> لديه وسم فرعي واحد، والذي سيحتوي على الخاصيات المراد إضافتها.
<small>فقط للمنصة</small>  
الخاصيات(النوع)
!الوصف
|-
|<code>file</code> (سلسلة نصية)
|تحدد هذه الخاصية الملف المراد تعديله، والمسار نسبةً إلى المجلد الجذري لمشروع كوردوفا. إن لم يكن الملف المحدد موجودًا، فستتجاهل الأداة تغييرات الإعدادات وستستمر في عملية التثبيت.  


فقط للمنصة:
يمكن أن يتضمن الهدف المحرف العام (<code>*</code>). في هذه الحالة، ستبحث [[Cordova/cli|واجهة سطر الأوامر]] عوديًا (recursively) في مجلد المشروع، وستستخدم أول تطابق.  
الوصف
file (سلسلة نصية)
الملف المراد تعديله، والمسار نسبة إلى المجلد الجذري لمشروع كوردوفا. إن لم يكن الملف المحدد موجودا، فستتجاهل الأداة تغييرات الإعدادات وستستمر في عملية التثبيت.
يمكن أن يتضمن الهدف عناصر عامة (<code>*</code>). في هذه الحالة، ستبحث [[Cordova/cli|واجهة سطر الأوامر]] عوديًا (recursively) في مجلد المشروع، وستستخدم أول تطابق.
على منصة iOS، لا يُعرف موقع ملفات الإعداد نسبةً إلى المجلد الجذري للمشروع، لذلك فتحديد الهدف عند القيمة <code>config.xml</code> سينتج عنه <code>cordova-ios-project/MyAppName/config.xml</code>.
target (سلسلة نصية)
محدد XPath يشير إلى العنصر المستهدف المراد تعديل خاصياته. إن كنت تستخدم محددات مطلقة (absolute selectors)، فيمكنك استخدام محرف عام (<code>*</code>) لتحديد العنصر الجذري (root element)، على سبيل المثال، <code>/*/plugins</code>. إذا لم تكن نتيجة حل المُحدد وسمًا فرعيًا (child) من المستند المحدد، فستوقف الأداة عملية التثبيت وتعكسها، وتطلق تنبيهًا، ثم ستخرج مع إعادة قيمة غير معدومة.
mode (سلسلة نصية)
تعيّن هذه الخاصية الوضع الذي سيحدد نوع التعديلات التي سيتم إجراؤها على الخاصيات.
<code>merge</code> - يضيف هذا الوضع الخاصيات المحددة إلى العنصر المستهدف. سيتم استبدال قيم الخاصيات إن كانت الخاصيات المحددة موجودة سلفًا في العنصر المستهدف.
<code>overwrite</code> - يستبدل هذا الوضع كل الخاصيات في العنصر المستهدف بالخاصيات المحددة.  


مثال:  
في منصة iOS، موضع ملفات الإعداد نسبةً إلى المجلد الجذري للمشروع غير معروف، لذلك فتحديد الهدف عند القيمة <code>config.xml</code> سينتج عنه <code>cordova-ios-project/MyAppName/config.xml</code>.
<syntaxhighlight lang="xml"><!-- plugin-1 -->
|-
|<code>target</code> (سلسلة نصية)
|محدد XPath يشير إلى العنصر المستهدف المراد تعديل خاصياته. إن كنت تستخدم محددات مطلقة (absolute selectors)، فيمكنك استخدام المحرف العام (<code>*</code>) لتحديد العنصر الجذري (root element)، على سبيل المثال، ‎<code>/*/plugins</code>. إن لم يكن  المحدد يشير إلى وسم فرعي (child) من المستند المحدد، فستوقف الأداة عملية التثبيت وتعكسها، وتطلق تنبيهًا، ثم ستخرُج مع إعادة قيمة غير معدومة.
|-
|<code>mode</code> (سلسلة نصية)
|تحدد هذه الخاصية الوضع الذي سيحدد نوع التعديلات التي سيتم إجراؤها على الخاصيات.
* <code>merge</code> - يضيف هذا الوضع الخاصيات المحددة إلى العنصر المستهدف. سيتم استبدال قيم الخاصيات إن كانت الخاصيات المحددة موجودة سلفًا في العنصر المستهدف.
* <code>overwrite</code> - يستبدل هذا الوضع كل الخاصيات في العنصر المستهدف بالخاصيات المحددة.
|}إليك المثال التالي:<syntaxhighlight lang="xml"><!-- plugin-1 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
     <uses-sdk android:minSdkVersion="16" android:maxSdkVersion="23" />
     <uses-sdk android:minSdkVersion="16" android:maxSdkVersion="23" />
سطر 425: سطر 470:
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
     <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
     <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config></syntaxhighlight>  
</edit-config>
</syntaxhighlight>  


AndroidManifest.xml قبل إضافة plugin-1:  
الملف <code>AndroidManifest.xm</code> قبل إضافة <code>plugin-1</code>:  
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
     ...
     ...
سطر 435: سطر 481:
     ...
     ...
     <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
     <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
</manifest></syntaxhighlight>  
</manifest></syntaxhighlight>  


AndroidManifest.xml بعد إضافة plugin-1:  
الملف <code>AndroidManifest.xml</code> بعد إضافة <code>plugin-1</code>:  
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
     ...
     ...
سطر 445: سطر 491:
     ...
     ...
     <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="16" android:targetSdkVersion="23" />
     <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="16" android:targetSdkVersion="23" />
</manifest></syntaxhighlight>  
</manifest>
==== إدارة تعارضات edit-config ====  
</syntaxhighlight>  
=== إدارة تعارضات <code>edit-config</code> ===  


لا يمكن أن تعدل أكثر من إضافة واجدة نفس الخاصيات، لأنها قد تتسبب في مشاكل في التطبيق. وسيُطلق خطأ، ويفشل تثبيت الإضافة. يجب حل الوسوم المتعارضة <code>edit-config</code> قبل إضافة الإضافة. أدخل تعديلات على الوسوم المتعارضة لأجل حل التعارض، ثم أزل الإضافات المحدّثة وأعد إضافتها.
لا يمكن أن تعدل أكثرُ من إضافة واحدة نفس الخاصيات، لأنها قد تتسبب في مشاكل في التطبيق. وسيُطلق خطأ ويفشل تثبيت الإضافة. لذلك يجب حل التعارض في الوسوم <code>edit-config</code> قبل إضافة الإضافة.


هناك خيار يمكن استخدامه إن أردت تثبيت الإضافة على الرغم من التعارضات. يمكن استخدام الراية <code>--force</code> مع الأمر <code>cordova plugin add</code>. وسيجبر كوردوفا على أن تضيف الإضافة، هذا سيؤدي إلى عكس التغييرات المتعارضة التي أجرتها الإضافات الأخرى لتجنب المشاكل. يجب استخدام <code>--force</code> بحذر، لأن عكس التغييرات التي أجرتها الإضافات الأخرى قد يتسبب بمشاكل في عمل التطبيق.  
أدخل تعديلات على الوسوم المتعارضة لأجل حل التعارض، ثم أزل الإضافات المحدّثة وأعد إضافتها.
 
هناك خيار يمكن استخدامه إن أردت تثبيت الإضافة حتى بوجود تعارضات. يمكن استخدام الراية <code>--force</code> مع الأمر <code>cordova plugin add</code>. وهذا سيجبر كوردوفا على أن تضيف الإضافة، وسيؤدي إلى عكس التغييرات المتعارضة التي أجرتها الإضافات الأخرى لأجل تجنب المشاكل.
 
يجب استخدام الراية ‎<code>--force</code> بحذر، لأن عكس التغييرات التي أجرتها الإضافات الأخرى قد يتسبب بمشاكل في عمل التطبيق.  


إن لاحظت وجود مشاكل في عمل الإضافات، فأزلها جميعًا ثم أعد إضافتها.  
إن لاحظت وجود مشاكل في عمل الإضافات، فأزلها جميعًا ثم أعد إضافتها.  


مثال:
لتفترض أنَّ الإضافة <code>plugin-1</code> الواردة أعلاه مثبتةٌ بالفعل. إنّ محاولة تثبيت الإضافة <code>plugin-2</code> أدناه ستؤدي إلى حدوث خطأ، نظرًا لكون الإضافة <code>plugin-1</code> قد عدّلت سلفًا العنصر <code>uses-sdk</code> الموجود في الملف <code>AndroidManifest.xml</code>.  
 
لتفترض أن الإضافة plugin-1 الواردة أعلاه مثبتة بالفعل. محاولة تثبيت الإضافة plugin-2 أدناه ستؤدي إلى حدوث خطأ نظرًا لكون الإضافة plugin-1 قد عدّلت سلفًا العنصر <code>uses-sdk</code> الموجود في AndroidManifest.xml.  
<syntaxhighlight lang="xml"><!-- plugin-2 -->
<syntaxhighlight lang="xml"><!-- plugin-2 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
سطر 462: سطر 511:
</edit-config>‎</syntaxhighlight>  
</edit-config>‎</syntaxhighlight>  


يمكن إضافة plugin-2 بطريقتين، وهما:  
يمكن إضافة <code>plugin-2</code> بطريقتين:  


إحدى الطرق الممكنة لحل التعارضات هي إزالة الوسم <code>edit-config</code> من plugin-2 ودمجه في الوسم <code>edit-config</code> الخاص بالإضافة plugin-1 (على افتراض أن plugin-1 ليس لها أي مشكلة مع هذا التغيير). أزل كلا الإضافتين، ثم أعد إضافتهما مع هذه التغييرات. يُفترض أن تُضاف الإضافة plugin-2 بدون مشاكل هذه المرة.  
الطريقة الأولى لحل التعارضات هي إزالة الوسم <code>edit-config</code> من الإضافة <code>plugin-2</code> ودمجه في الوسم <code>edit-config</code> الخاص بالإضافة <code>plugin-1</code> (على افتراض أنَّ الإضافة <code>plugin-1</code> ليس لها أي مشكلة مع هذا التغيير). أزل كلا الإضافتين، ثم أعد إضافتهما مع هذه التغييرات. يُفترض أن تُضاف الإضافة <code>plugin-2</code> بدون مشاكل هذه المرة.  


إزالة <code>edit-config</code> من plugin-2 ودمجها في plugin-1:  
إزالة الوسم <code>edit-config</code> من <code>plugin-2</code> ودمجه في <code>plugin-1</code>:  
<syntaxhighlight lang="xml"><!-- plugin-1 -->
<syntaxhighlight lang="xml"><!-- plugin-1 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
سطر 473: سطر 522:
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
     <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
     <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config></syntaxhighlight>  
</edit-config></syntaxhighlight>  


الملف AndroidManifest.xml الناتج بعد إزالة وإعادة إضافة كلا الإضافتين:  
الملف <code>AndroidManifest.xml</code> الناتج بعد إزالة وإعادة إضافة كلا الإضافتين:  
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
     ...
     ...
سطر 483: سطر 532:
     ...
     ...
     <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="15" android:targetSdkVersion="23" />
     <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="15" android:targetSdkVersion="23" />
</manifest></syntaxhighlight>  
</manifest></syntaxhighlight>  


الطريقة الثانية لإضافة plugin-2 تتضمن إضافة الإضافة مع الراية <code>--force</code>. سيتم التراجع عن التغييرات المتعارضة في <code>edit-config</code> من plugin-1 وسيتم تطبيق تغييرات plugin-2. الملف AndroidManifest.xml الناتج سيتضمن التغيير <code>uses-sdk</code> من plugin-2 والتغيير <code>activity</code> من plugin-1. لاحظ أنه تم تجاوز التغيير <code>uses-sdk</code> وحده من plugin-1 لأنه التغيير الوحيد المتعارض.  
الطريقة الثانية لإضافة <code>plugin-2</code> تتطلب أن تُضيف الإضافة مع الراية ‎ <code>--force</code>. سيتم التراجع عن التغييرات المتعارضة التي أجرتها الإضافة <code>plugin-1</code> في الوسم <code>edit-config</code> وسيتم تطبيق تغييرات <code>plugin-2</code>. الملف <code>AndroidManifest.xml</code> الناتج سيتضمن التغيير <code>uses-sdk</code> من <code>plugin-2</code> والتغيير <code>activity</code> من <code>plugin-1</code>. لاحظ أنه لم يتم استبدال إلا التغيير <code>uses-sdk</code> وحده من بين التغييرات التي قامت بها الإضافة <code>plugin-1</code>، إذ أنه هو التغيير الوحيد المتعارض.  


الملف AndroidManifest.xml الناتج بعد فرض إضافة plugin-2:  
الملف <code>AndroidManifest.xml</code> الناتج بعد فرض إضافة الإضافة <code>plugin-2</code>:  
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
<syntaxhighlight lang="xml"><manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
     ...
     ...
سطر 495: سطر 544:
     ...
     ...
     <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
     <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
</manifest>‎</syntaxhighlight>  
</manifest></syntaxhighlight>
 
'''ملاحظة''': التغييرات المعكوسة عبر الراية ‎<code>--force</code> ستُفقَد بشكل دائم. ولن تعود بعد إزالة الإضافة التي أُضيفت بالقوة. إن كنت بحاجة إلى تلك التغييرات المعكوسة، فينبغي إزالة جميع الإضافات المرتبطة وإعادة إضافتها.
 
== العنصر <code>plugins-plist</code> ==
يحدد هذا الوسم مفتاحًا (key) وقيمة لإلحاقهما بالملف <code>AppInfo.plist</code> المناسب في مشروع iOS Cordova. هذا الوسم أصبح مهملًا لأنه لا ينطبق إلا على الإصدار cordova-ios 2.2.0 وما قبله. استخدم الوسم <code><config-file></code> في إصدارات كوردوفا الأحدث. إليك المثال التالي: <syntaxhighlight lang="xml"><plugins-plist key="Foo" string="CDVFoo" />‎</syntaxhighlight>


ملاحظة: التغييرات المعكوسة عبر الراية <code>--force</code> ستُفقد بشكل دائم. ولن تعود بعد إزالة الإضافة الذي أُضيفت بالقوة. إن كنت ستحتاج التغييرات المعكوسة، فينبغي إزالة جميع الإضافات المرتبطة وإعادة إضافتها.  
== العنصر <code>lib-file</code> ==
الوسم <code>lib-file</code> يشبه الملفات المصدرية (sources)، والموارد (resources)، والملفات الرئيسية (header files)، ولكنه مخصوص بمنصات مثل BlackBerry 10 التي تستخدم المكتبات المُولّدة من قبل المستخدمين. بالنسبة لمنصة ويندوز، يسمح الوسم <code><lib-file></code> بتضمين العنصر <code><SDKReference></code> في ملفات مشروع ويندوز المُنشأة.  
{| class="wikitable"
!الخاصيات (النوع) 


plugins-plist
<small>فقط للمنصة</small>
!الوصف
|-
|<code>src</code> (سلسلة نصية)
|(مطلوب)


يحدد هذا الوسم مفتاحًا (key) وقيمة لإلحاقهما بالملف <code>AppInfo.plist</code> الصحيح في مشروع iOS Cordova. هذا الوسم صار مُتجاوزًا، لأنه لا ينطبق إلا على cordova-ios 2.2.0 وما قبله. استخدم الوسم <code><config-file></code> لإصدارات كوردوفا الأحدث.  
موضع الملف نسبةً إلى الملف <code>plugin.xml</code>. إذا تعذر العثور على <code>src</code>، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتصدر تنبيهًا بشأن المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.  


مثال:
بالنسبة لمنصة ويندوز، فهذه الخاصية تشير إلى اسم إطار العمل SDK المراد تضمينه (والذي سيُستخدَم كقيمة للخاصية <code>Include</code> في العنصر المولد <code><SDKReference></code>).
<syntaxhighlight lang="xml"><plugins-plist key="Foo" string="CDVFoo" />‎</syntaxhighlight>  
|-
|<code>arch</code> (سلسلة نصية)
|تمثل هذه الخاصية المعمارية (architecture) التي بُنِي الملف <code>.so</code> على أساسها، والتي ستكون إما <code>device</code> أو <code>simulator</code>.


lib-file
بالنسبة لمنصة ويندوز، هذه الخاصية ستشير إلى أنه لا يجب تضمين العنصر <code><SDKReference></code> إلا عند القيام بالبناء لأجل البنية المحددة.


الوسم lib-file يشبه الملفات المصدرية (source)، والموارد (resource)، والملفات الرئيسية (header files)، ولكنه مخصوص بمنصات مثل BlackBerry 10 التي تستخدم المكتبات التي ينشئها المستخدم. بالنسبة لمنصة ويندوز، يسمح الوسم <code><lib-file></code> بتضمين العنصر <code><SDKReference></code> في ملفات مشروع ويندوز التي تم إنشاؤها.  
القيم المدعومة هي <code>x86</code> أو <code>x64</code> أو <code>ARM</code>.
الخاصيات(النوع)  
|-
|<code>device-target</code> (سلسلة نصية)  


فقط للمنصة:
(منصة ويندوز)
الوصف
|القيم المسموح بها: <code>win</code> (أو <code>windows</code>) أو <code>phone</code> أو <code>all</code>.  
src (سلسلة نصية)  
مطلوب
موقع الملف نسبةً إلى الملف <code>plugin.xml</code>. إذا تعذر العثور على <code>src</code>، فستوقف [[Cordova/cli|واجهة سطر الأوامر]] التثبيت وتعكسه، وتصدر تنبيهًا بشأن المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
بالنسبة لمنصة ويندوز، فهذه الخاصية تشير إلى اسم إطار العمل SDK المراد تضمينها (والذي ستُستخدم كقيمة للخاصية <code>Include</code> الخاصة بالعنصر المولد <code><SDKReference></code>).
arch (سلسلة نصية)
تمثل هذه الخاصية البنية (architecture) التي بُنِي الملف <code>.so</code> على أساسها، والتي ستكون إما <code>device</code> أو <code>simulator</code>.
بالنسبة لمنصة ويندوز، هذه الخاصية ستشير إلى أنه لا يجب تضمين العنصر <code><SDKReference></code> إلا عند البناء لأجل البنية المحددة. القيم المدعومة هي <code>x86</code> أو <code>x64</code> أو <code>ARM</code>.
device-target (سلسلة نصية)
القيم المسموح بها: <code>win</code> (أو <code>windows</code>) أو <code>phone</code> أو <code>all</code>.  
تشير هذه الخاصية إلى أنه لا يجب تضمين العنصر <code><SDKReference></code> إلا عند البناء لأجل نوع الجهاز المحدد.
versions (سلسلة نصية)
تشير هذه الخاصية إلى أنه لا يجب تضمين <code><SDKReference></code> إلا عند البناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. قيمة هذه الخاصية قد تكون أي سلسلة نصية تحتوي مجال إصدارات دلالية (semantic version range) صالحة


بالنسبة للأندرويد، يُستخدم العنصر <code><lib-file></code> لتثبيت الملفات '''.jar''' في المشروع '''libs directory'''. ولا يدعم إلا الخاصية <code>src</code> التي تحتوي على المسار النسبي لملف .jar.
توضح هذه الخاصية أنه لا يجب تضمين العنصر <code><SDKReference></code> إلا عند القيام بالبناء لأجل نوع الجهاز المحدد.
|-
|<code>versions</code> (سلسلة نصية)


أمثلة:  
(منصة ويندوز)
|توضح هذه الخاصية أنَّه لا يجب تضمين <code><SDKReference></code> إلا عند القيام بالبناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. قيمة هذه الخاصية قد تكون أي سلسلة نصية تحتوي مجال إصدارات دلالية (semantic version range) صالحة
|}
بالنسبة للأندرويد، يُستخدم العنصر <code><lib-file></code> لتثبيت الملفات ‎'''<code>.jar</code>''' في المجلد '''<code>libs</code>''' الخاص بالمشروع. ولا يدعم إلا الخاصية <code>src</code> التي تحتوي على المسار النسبي للملف ‎<code>.jar</code>.
 
اطلع على المثال التالي:  
<syntaxhighlight lang="xml"><lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
<syntaxhighlight lang="xml"><lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
<lib-file src="src/BlackBerry10/native/simulator/libfoo.so" arch="simulator" /></syntaxhighlight>
<lib-file src="src/BlackBerry10/native/simulator/libfoo.so" arch="simulator" />
 
</syntaxhighlight>


لويندوز:  
مثال آخر لمنصة لويندوز:  
<syntaxhighlight lang="xml"><lib-file src="Microsoft.WinJS.2.0, Version=1.0" arch="x86" />
<syntaxhighlight lang="xml"><lib-file src="Microsoft.WinJS.2.0, Version=1.0" arch="x86" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" versions=">=8.1" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" versions=">=8.1" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" target="phone" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" target="phone" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" target="win" versions="8.0" arch="x86" /></syntaxhighlight>  
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" target="win" versions="8.0" arch="x86" />
</syntaxhighlight>


framework  
== العنصر <code>framework</code> ==
يحدد هذ الوسم إطار العمل (عادة ما يكون جزءًا من نظام التشغيل أو المنصة) الذي تعتمد عليه الإضافة.
{| class="wikitable"
!الخاصيات (النوع) 


يحدد هذ الوسم الإطار (عادة ما يكون جزءًا من نظام التشغيل أو المنصة) الذي تعتمد عليه الإضافة.
<small>فقط للمنصة</small>
الخاصيات(النوع)  
!الوصف
|-
|<code>src</code> (سلسلة نصية)  
|(مطلوب)  


فقط للمنصة:
تحدد هذه الخاصية اسم الإطار، أو المسار النسبي لإطارٍ مُضمّنٍ كجزء من ملفات الإضافات.
الوصف
|-
src (سلسلة نصية)
|<code>custom</code> (قيمة منطقية)
مطلوب
|توضح هذه الخاصية ما إن كان الإطار مضمّنًا كجزء من ملفات الإضافات.  
تحدد هذه الخاصية اسم الإطار، أو المسار النسبي لإطارٍ مُضمّنٍ كجزء من ملفات الإضافات.  
|-
custom (قيمة منطقية)  
|<code>weak</code> (قيمة منطقية)  
توضح هذه الخاصية ما إذا كان الإطار مضمّنًا كجزء من ملفات الإضافات.  
|القيمة الافتراضية: <code>false</code>  
weak (قيمة منطقية)
القيمة الافتراضية: false
تبيّن ما إذا كان ينبغي أن يكون الإطار موصولًا بروابط ضعيفة (weakly linked).
type (سلسلة نصية)
تبيّن نوع الإطار المراد إضافته.
parent (سلسلة نصية)
القيمة الافتراضية: .
تضبط هذه الخاصية المسار النسبي إلى المجلد الذي يحتوي على المشروع الفرعي الذي تريد إضافة المرجع إليه. القيمة الافتراضية، <code>.</code>، تعني مشروع التطبيق.
arch (سلسلة نصية)
القيم المسموح بها: <code>x86</code> أو <code>x64</code> أو <code>ARM</code>.
تشير هذه الخاصية إلى أنه لا يجب تضمين الملف إلا عند البناء لأجل الهيكل (architecture) المحدد.
device-target (سلسلة نصية)
القيم المسموح بها: <code>win</code> (أو <code>windows</code>) أو <code>phone</code> أو <code>all</code>.
تشير هذه الخاصية إلى أنه لا يجب تضمين الإطار إلا عند البناء لأجل نوع الجهاز المحدد.
versions (سلسلة نصية)
تشير هذه الخاصية إلى أنه لا يجب تضمين الإطار إلا عند البناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. يمكن أن تكون القيمة أي سلسلة نصية تحتوي مجالًا صالحًا للإصدارات الدلالية (semantic version).
target-dir (سلسلة نصية)
تشير هذه الخاصية إلى المجلد الفرعي الذي سيُنسخ فيه الإطار. من الناحية العملية، أهمية هذه الخاصية تتجلى عندما تحتوي الإضافة على إصدارات مختلفة للإطار، لمُختلف بنيات الشرائح (chip architectures) أو الأجهزة، ولكنها تشترك في نفس الاسم. تتيح لك هذه الخاصية تحديد مجلدات فرعية مختلفة لكل إصدارٍ من الإطار، بحيث لا تتداخل مع بعضها البعض.
implementation (سلسلة)
تعيّن هذه الخاصية المسار النسبي إلى الملف <code>.dll</code> الذي يحتوي على تقديم (implementation) المُكوِّن WinMD، المكتوب بلغة في C++‎.
spec (سلسلة نصية)
تُقرن هذه الخاصية بالخاصية <code>type="podspec"</code>، وتمثل السلسلة النصية التي تحتوي مواصفات CocoaPod التي تريد تثبيتها (المكتبة الثابتة فقط). CocoaPod ليست مدعومة إلا في <code>cordova-ios 4.3.0</code> و <code>cordova-cli 6.4.0</code>. بالنسبة للإضافة الخاصة بك، تأكد من إضافة وسم <code><engine></code> المناسبة، و ارتباطات <code>package.json</code> الملف [../guide/hybrid/plugins/index.html#specifying-cordova-dependencies dependencies] لضمان التوافق مع الإصدارات السابقة.
embed (قيمة منطقية)  
القيمة الافتراضية: false
تُقرن هذه الخاصية مع <code>custom="true"</code>، تُعطى هذه الخاصية القيمة true إن كنت ترغب في تضمين الإطار المخصص في حزمة التطبيق (app bundle)، بحيث يمكن تحميلها ديناميكيًا في وقت التشغيل (إطار ديناميكي). هذا سيضع إطارك المخصص في القسم "Embedded Binaries" في إعدادات مشروع Xcode. هذه الخاصية مدعومة فقط عند الجمع بين <code>cordova-ios@4.4.0</code> و <code>cordova-cli@7.0.0</code>  


أمثلة:  
تبيّن ما إن كان ينبغي أن يكون الإطار موصولًا بروابط ضعيفة (weakly linked).
|-
|<code>type</code> (سلسلة نصية)
|تبيّن نوع الإطار المراد إضافته.
|-
|<code>parent</code> (سلسلة نصية)
|القيمة الافتراضية: <code>.</code>


لمنصة iOS:  
تضبط هذه الخاصية المسار النسبي إلى المجلد الذي يحتوي على المشروع الفرعي الذي تريد إضافة المرجع إليه. القيمة الافتراضية " <code>.</code>" تعني مشروع التطبيق.
|-
|<code>arch</code> (سلسلة نصية)
 
(منصة ويندوز)
|القيم المسموح بها: <code>x86</code> أو <code>x64</code> أو <code>ARM</code>.
 
توضح هذه الخاصية أنه لا يجب تضمين الملف إلا عند القيام بالبناء لأجل المعمارية (architecture) المحددة.
|-
|<code>device-target</code> (سلسلة نصية)
 
(منصة ويندوز)
|القيم المسموح بها: <code>win</code> (أو <code>windows</code>) أو <code>phone</code> أو <code>all</code>.
 
توضح هذه الخاصية أنه لا يجب تضمين الإطار إلا عند القيام بالبناء لأجل نوع الجهاز المحدد. 
|-
|<code>versions</code> (سلسلة نصية)
 
(منصة ويندوز)
|توضح هذه الخاصية أنه لا يجب تضمين الإطار إلا عند القيام بالبناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. يمكن أن تكون القيمة أي سلسلة نصية تحتوي مجالًا صالحًا للإصدارات الدلالية (semantic version).
|-
|<code>target-dir</code> (سلسلة نصية)
 
(منصة ويندوز)
|تشير هذه الخاصية إلى المجلد الفرعي الذي سيُنسخ فيه الإطار. من الناحية العملية، أهمية هذه الخاصية تظهر عندما تحتوي الإضافة على عدة إصدارات للإطار، ولمُختلف بنيات الشرائح (chip architectures) أو الأجهزة، ولكنها تشترك في نفس الاسم. تتيح لك هذه الخاصية تحديد مجلدات فرعية مختلفة لكل إصدارٍ من الإطار، حتى لا تتداخل مع بعضها البعض.
|-
|<code>implementation</code> (سلسلة)
 
(منصة ويندوز)
|تُعيّن هذه الخاصية قيمة المسار النسبي عند الملف <code>dll.</code> الذي يحتوي على تنفيذ (implementation) المُكوِّن WinMD المكتوب بلغة في C++‎.
|-
|<code>spec</code> (سلسلة نصية)
 
(منصة iOS)
|تُقرَن هذه الخاصية بالتعبير <code>type="podspec"‎</code>، وتمثل السلسلة النصية التي تحتوي مواصفات مدير الاعتماديات CocoaPod التي تريد تثبيتها (المكتبة الثابتة فقط). CocoaPod ليس مدعومًا إلا في cordova-ios 4.3.0 و cordova-cli 6.4.0. بالنسبة للإضافة الخاصة بك، تأكد من إضافة الوسم <code><engine></code> و<nowiki/>[[Cordova/plugins#.D8.AA.D8.AD.D8.AF.D9.8A.D8.AF .D8.A7.D9.84.D8.A7.D8.B9.D8.AA.D9.85.D8.A7.D8.AF.D9.8A.D8.A7.D8.AA|الاعتماديات]] <code>package.json</code> المناسبة لضمان التوافق مع الإصدارات السابقة.
|-
|<code>embed</code> (قيمة منطقية)
 
(منصة iOS)
|القيمة الافتراضية: <code>false</code>
 
تُقرَن هذه الخاصية مع <code>custom="true"‎</code>
 
اعط لهذه الخاصية القيمة <code>true</code> إن كنت ترغب في تضمين الإطار المخصص في حزمة التطبيق (app bundle)، بحيث يمكن تحميله ديناميكيًا في وقت التشغيل (إطار ديناميكي). هذا سيضع إطارك المخصص في القسم "Embedded Binaries" في إعدادات مشروع Xcode.
 
هذه الخاصية مدعومة فقط عند الجمع بين الإصدارين cordova-ios@4.4.0 و cordova-cli@7.0.0.
|}مثال خاص بمنصة iOS:  
<syntaxhighlight lang="xml"><framework src="libsqlite3.dylib" />
<syntaxhighlight lang="xml"><framework src="libsqlite3.dylib" />
<framework src="social.framework" weak="true" />
<framework src="social.framework" weak="true" />
<framework src="relative/path/to/my.framework" custom="true" />
<framework src="relative/path/to/my.framework" custom="true" />
<framework src="GoogleCloudMessaging" type="podspec" spec="~> 1.2.0" /></syntaxhighlight>  
<framework src="GoogleCloudMessaging" type="podspec" spec="~> 1.2.0" />
</syntaxhighlight>  


على منصة أندرويد (اعتبارًا من cordova-android@4.0.0)، يُستخدم الوسم framework لتضمين ارتباطات مُدير المشاريع Maven، أو لتضمين مشروعات المكتبة المجمعة.
على منصة أندرويد (اعتبارًا من الإصدار cordova-android@4.0.0)، يُستخدم الوسم <code>framework</code> لتضمين اعتماديات مُدير المشاريع Maven، أو لتضمين مشروعات المكتبة المجمعة (bundled):
<syntaxhighlight lang="xml"><!-- Depend on latest version of GCM from play services -->
<syntaxhighlight lang="xml"><!-- play من الخدمة GCM الاعتماد على الإصدار الأحدث من -->
<framework src="com.google.android.gms:play-services-gcm:+" />
<framework src="com.google.android.gms:play-services-gcm:+" />
<!-- Depend on v21 of appcompat-v7 support library -->
<!-- appcompat-v7 من مكتبة الدعم v21 الاعتماد على  -->
<framework src="com.android.support:appcompat-v7:21+" />
<framework src="com.android.support:appcompat-v7:21+" />
<!-- Depend on library project included in plugin -->
<!-- الاعتماد على مكتبة المشروع المُتضمنة في الإضافة -->
<framework src="relative/path/FeedbackLib" custom="true" />‎</syntaxhighlight>  
<framework src="relative/path/FeedbackLib" custom="true" />‎</syntaxhighlight>  


يمكن استخدام الوسم Framework أيضًا لتضمين الملفات <code>.gradle</code> المخصصة في الملف <code>build.gradle</code> الخاص بالمشروع الرئيسي:  
يمكن استخدام الوسم <code>framework</code> أيضًا لتضمين الملفات <code>.gradle</code> المخصصة في الملف <code>build.gradle</code> الخاص بالمشروع الرئيسي:  
<syntaxhighlight lang="xml"><framework src="relative/path/rules.gradle" custom="true" type="gradleReference" />‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><framework src="relative/path/rules.gradle" custom="true" type="gradleReference" />‎</syntaxhighlight>  


على ويندوز، سيؤدي استخدام <code>custom='true'</code> و <code>type='projectReference'</code> إلى إضافة مرجع إلى المشروع، والذي سيُضاف إلى خطوتي الربط + التصريف (compile+link) لمشروع كوردوفا. هذه هي الطريقة الوحيدة حاليًا التي تُمكّن إطارًا مخصصًا من استهداف عدة بنيات (architectures)، حيث تُبنى بشكل صريح على شكل ارتباطات من قبل تطبيق كوردوفا الذي أنشأ المرجع.  
على منصة ويندوز، سيؤدي استخدام <code>custom='true'</code> و <code>type='projectReference'</code> إلى إضافة مرجع إلى المشروع، والذي سيُضاف إلى خطوتي الربط والتصريف (compile+link) في مشروع كوردوفا. هذه هي الطريقة الوحيدة حاليًا التي تُمكّن أُطُر العمل المخصصة من استهداف عدة معماريات (architectures)، لأنها تُبنَى بشكل صريح كاعتماديات من قبل تطبيق كوردوفا الذي أنشأ المرجع.  
<syntaxhighlight lang="xml"><framework src="path/to/project/LibProj.csproj" custom="true" type="projectReference"/>‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><framework src="path/to/project/LibProj.csproj" custom="true" type="projectReference"/>‎</syntaxhighlight>  


أمثلة على استخدام هذه الخاصيات المخصوصة بويندوز:  
أمثلة على استخدام هذه الخاصيات الموجهة لويندوز:  
<syntaxhighlight lang="xml"><framework src="src/windows/example.dll" arch="x64" />
<syntaxhighlight lang="xml"><framework src="src/windows/example.dll" arch="x64" />
<framework src="src/windows/example.dll" versions=">=8.0" />
<framework src="src/windows/example.dll" versions=">=8.0" />
<framework src="src/windows/example.vcxproj" type="projectReference" target="win" />
<framework src="src/windows/example.vcxproj" type="projectReference" target="win" />
<framework src="src/windows/example.vcxproj" type="projectReference" target="all" versions="8.1" arch="x86" />
<framework src="src/windows/example.vcxproj" type="projectReference" target="all" versions="8.1" arch="x86" />
<framework src="src/windows/example.dll" target-dir="bin/x64" arch="x64" custom="true"/></syntaxhighlight>  
<framework src="src/windows/example.dll" target-dir="bin/x64" arch="x64" custom="true"/>
</syntaxhighlight>  


هذا مثال آخر على استخدام خاصيات مخصوصة بويندوز لإضافة مرجع إلى مكوّنات WinMD، المكتوبة بلغتي C#‎ و C++‎، والتي ستكون واجهتها البرمجية (API) متاحة في وقت التشغيل:  
هذا مثال آخر على استخدام الخاصيات الموجهة لويندوز لإضافة مرجع إلى مكوّنات WinMD المكتوبة بلغتي C#‎ و C++‎، والتي ستكون واجهتها البرمجية (API) متاحةً وقت التشغيل:  
<syntaxhighlight lang="xml"><!-- C# component that consists of one .winmd file -->
<syntaxhighlight lang="xml"><!-- .winmd يتألف من ملف واحد من النوع C# مكون -->
<framework src="lib\windows\component.winmd" versions="<10.0" />
<framework src="lib\windows\component.winmd" versions="<10.0" />
<!-- C++ component with separated metadata and implementation-->
<!-- مع بيانات وصفية وتقديم منفصل C++ مكون -->
<framework src="lib\windows\x86\cppcomponent.winmd"
<framework src="lib\windows\x86\cppcomponent.winmd"
           implementation="lib\windows\x86\cppcomponent.dll"
           implementation="lib\windows\x86\cppcomponent.dll"
           target-dir="component\x86" arch="x86" versions=">=10.0" />‎</syntaxhighlight>  
           target-dir="component\x86" arch="x86" versions=">=10.0" />‎</syntaxhighlight>


info
== العنصر <code>podspec</code> ==
تحدد ملف <code>Podfile</code> الخاص بـ CocoaPods، والذي يتضمن التبعيات التي تعتمد عليها الإضافة.


يحتوي هذا الوسم على معلومات إضافية لأجل تقديمها للمستخدمين. هذا مفيد عندما تحتاج إلى خطوات إضافية لا يمكن أتمتتها بسهولة، أو تتجاوز إمكانيات [[Cordova/cli|واجهة سطر الأوامر]]. تُطبع محتويات هذا الوسم عندما تثبّت [[Cordova/cli|واجهة سطر الأوامر]] الإضافة.  
يحتوي هذا الوسمين <code><config></code> و <code><pods></code>.


مثال:  
=== <code>config</code> ===
يحدد العنصر <code><config></code> عناوين url المصدرية التي تُستخلص منها مواصفات CocoaPods.
 
يحتوي هذا العنصر على وسم <code><nowiki><source></nowiki></code> واحد أو أكثر.
{| class="wikitable"
!الخاصيات (النوع) 
 
<small>فقط للمنصة</small>
!الوصف
|-
|<code>url</code>
|(مطلوب)
 
عنوان (url) المواصفات
|}
 
=== pods ===
يحدد العنصر <code><pods></code> مكتبات CocoaPods.
 
يحتوي هذا العنصر على وسم <code><pod></code> لكل مكتبة من مكتبات CocoaPods.
{| class="wikitable"
!الخاصيات (النوع) 
 
<small>فقط للمنصة</small>
!الوصف
|-
|<code>use-frameworks</code>
(سلسلة نصية)
|القيمة الافتراضية: <code>false</code>
 
إن كانت قيمتها تساوي <code>true</code>، فسيُصرَح بالخاصية <code>use_frameworks!</code>‎ في ملف Podfile.
|-
|<code>inhibit-all-warnings</code>
(سلسلة نصية)
|القيمة الافتراضية: <code>false</code>
 
إن كانت قيمتها تساوي <code>true</code>، فسيُصرَح بالخاصية <code>inhibit_all_warnings!</code>‎ في ملف Podfile.
|}
 
==== <code>pod</code> ====
{| class="wikitable"
!الخاصيات (النوع) 
 
<small>فقط للمنصة</small>
!الوصف
|-
|<code>name</code>
|مطلوب
اسم العنصر Pod
|-
|<code>spec</code>
|مطلوب
مواصفات العنصر Pod
|-
|<code>swift-version</code>
|تحدد إصدار سويفت الخاص بمكتبة CocoaPods
|-
|<code>git</code>
|خيار مستودع <code>git</code> الخاص بالعنصر Pod
|-
|<code>branch</code>
|الخيار <code>branch</code> الخاص بالعنصر Pod
|-
|<code>tag</code>
|الخيار <code>tag</code> الخاص بالعنصر Pod
|-
|<code>commit</code>
|الخيار <code>commit</code> الخاص بالعنصر Pod
|-
|<code>configurations</code>
|الخيار <code>configurations</code> الخاص بالعنصر Pod، إن إردت تمرير عدة قيم، فافصلها بفواصل.
|-
|<code>http</code>
|الخيار <code>http</code> الخاص بالعنصر Pod
|-
|<code>path</code>
|الخيار <code>path</code> الخاص بالعنصر Pod. ملف Pod الموجود في نظام الملفات المحلي.
|-
|<code>options</code>
|خيارات <code>path</code> المُصرح عنها على هيئة خام (raw format). في حال التصريح بها، ستكون لها الأسبقية على خيارات Pod الأخرى. مثلا: <code>options=":git => '<nowiki>https://github.com/Alamofire/Alamofire.git'</nowiki>, :tag => '3.1.1'"‎</code>
|}
أمثلة:<syntaxhighlight lang="xml">    <podspec>
      <config>
        <source url="https://github.com/brightcove/BrightcoveSpecs.git" />
        <source url="https://github.com/CocoaPods/Specs.git"/>
      </config>
      <pods use-frameworks="true">
        <pod name="AFNetworking" spec="~> 3.2" />
        <pod name="SDWebImage" spec="~> 4.0" />
        <pod name="Eureka" swift-version="3.3" />
        <pod name="AcknowList" />
        <pod name="Brightcove-Player-Core" spec="~> 6.3.4" />
        <pod name="Foobar1" git="git@github.com:hoge/foobar1.git" configurations="Debug"/>
        <pod name="Foobar2" git="git@github.com:hoge/foobar2.git" branch="next" configurations="Debug,Release"/>
        <pod name="FoobarSwift" swift-version="4.1" />
      </pods>
    </podspec>
</syntaxhighlight>هذا مثال على ملف <code>Podfile</code>:<syntaxhighlight lang="xml"> # DO NOT MODIFY -- auto-generated by Apache Cordova
source 'https://github.com/brightcove/BrightcoveSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target 'HelloCordova' do
    project 'HelloCordova.xcodeproj'
    pod 'AFNetworking', '~> 3.2'
    pod 'SDWebImage', '~> 4.0'
    pod 'Eureka'
    pod 'AcknowList'
    pod 'Brightcove-Player-Core', '~> 6.3.4'
    pod 'Foobar1', :git => 'git@github.com:hoge/foobar1.git', :configurations => ['Debug']
    pod 'Foobar2', :branch => 'next', :git => 'git@github.com:hoge/foobar2.git', :configurations => ['Debug','Release']
    pod 'FoobarSwift'
end
</syntaxhighlight>
== العنصر <code>info</code> ==
يحتوي هذا الوسم على معلومات إضافية لأجل تقديمها للمستخدمين. وهو أمر مفيد عندما تحتاج إلى توضيح خطوات إضافية لا يمكن أتمتتها بسهولة، أو تتجاوز إمكانيات [[Cordova/cli|واجهة سطر الأوامر]]. تُطبَع محتويات هذا الوسم عندما تثبّت [[Cordova/cli|واجهة سطر الأوامر]] الإضافة.
 
مثال على استخدام الوسم <code>info</code>:  
<syntaxhighlight lang="xml"><info>
<syntaxhighlight lang="xml"><info>
You need to install __Google Play Services__ from the `Android Extras` section using the Android SDK manager (run `android`).
`Android Extras` من القسم __Google Play Services__ عليك تثبيت
You need to add the following line to the `local.properties`:
(run `android`) SDK باستخدام المُدير
 
:local.properties تحتاج إلى إضافة السطر التالي إلى
android.library.reference.1=PATH_TO_ANDROID_SDK/sdk/extras/google/google_play_services/libproject/google-play-services_lib
android.library.reference.1=PATH_TO_ANDROID_SDK/sdk/extras/google/google_play_services/libproject/google-play-services_lib
</info>‎</syntaxhighlight>  
</info>‎</syntaxhighlight>
 
hook


يمثل هذا الوسمُ برنامجك النصي (script) المخصص والذي سيٌستدعى من قبل كوردوفا عند وقوع حدثٍ معينٍ (على سبيل المثال، بعد إضافة الإضافة أو عند استدعاء سلسلة تحضير المنصة). هذا مفيد عندما تحتاج إلى توسيع وظائف كوردوفا. راجع صفحة [../guide/appdev/hooks/index.html Hooks Guide] لمزيد من المعلومات.  
== العنصر <code>hook</code> ==
يمثل هذا الوسمُ برنامجك النصي (script) المخصص، والذي سيٌستدعى من قبل كوردوفا عند وقوع حدثٍ معينٍ (بعد إضافة الإضافة مثلًا أو عند استدعاء سلسلة تحضير المنصة). هذا مفيد إن كنت تحتاج إلى توسيع وظائف كوردوفا.  


مثال:  
مثال على استخدام الوسم <code>hook</code>:  
<syntaxhighlight lang="xml"><hook type="after_plugin_install" src="scripts/afterPluginInstall.js" />‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><hook type="after_plugin_install" src="scripts/afterPluginInstall.js" />‎</syntaxhighlight>راجع صفحة [[Cordova/hooks|الخطافات]] لمزيد من المعلومات.


uses-permission  
== العنصر <code>uses-permission</code> ==
 
في بعض الحالات، قد تحتاج الإضافة إلى إجراء تغييرات على الإعدادات بحسب التطبيق المستهدف. على سبيل المثال، للتسجيل في خدمة C2DM على أندرويد، سيتطلب التطبيق الذي يحمل رقم تعريفه <code>my-app-id</code> إذنًا على النحو التالي:  
في بعض الحالات، قد تحتاج الإضافة إلى إجراء تغييرات على الإعدادات اعتمادًا على التطبيق المستهدف. على سبيل المثال، للتسجيل في خدمة C2DM على أندرويد، سيتطلب التطبيق الذي يحمل رقم تعريفه <code>my-app-id</code> إذنًا على النحو التالي:  
<syntaxhighlight lang="xml"><uses-permission android:name="my-app-id.permission.C2D_MESSAGE"/>‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><uses-permission android:name="my-app-id.permission.C2D_MESSAGE"/>‎</syntaxhighlight>  


في هذه الحالة، حيث لا يكون المحتوى المدرج من الملف <code>plugin.xml</code> معروفًا في وقت مبكر، فيمكن الإشارة إلى المتغيرات بعلامة الدولار ("$") متبوعة بسلسلة من الحروف الكبيرة، أو الأرقام، أو الشرطات السفلية. في المثال أعلاه، سيتضمن الملف <code>plugin.xml</code> هذا الوسم:  
في حال لم يكن المحتوى المدرج من الملف <code>plugin.xml</code> معروفًا مُقدمًا، يمكن الإشارة إلى المتغيرات بالرمز <code>$</code> متبوعًا بسلسلة من الحروف الكبيرة، أو الأرقام، أو الشرطات السفلية. في المثال أعلاه، سيتضمن الملف <code>plugin.xml</code> هذا الوسم:  
<syntaxhighlight lang="xml"><uses-permission android:name="$PACKAGE_NAME.permission.C2D_MESSAGE"/>‎</syntaxhighlight>  
<syntaxhighlight lang="xml"><uses-permission android:name="$PACKAGE_NAME.permission.C2D_MESSAGE"/>‎</syntaxhighlight>  


تستبدل [[Cordova/cli|واجهة سطر الأوامر]] مراجع المتغيرات بالقيمة المحددة، أو بسلسلة نصية فارغة إذا لم يتم العثور عليها. قد تُرصد قيمة مرجع المتغير (في هذه الحالة، من الملف <code>AndroidManifest.xml</code>)، أو تُحدد من قبل مستخدم الأداة؛ تعتمد تفاصيل العملية على الأداة المستخدمة.  
تستبدل [[Cordova/cli|واجهة سطر الأوامر]] مراجع المتغيرات بالقيمة المحددة، أو بسلسلة نصية فارغة إذا لم يتم العثور عليها. قد تُرصَد قيمة مرجع المتغير (في هذه الحالة، من الملف <code>AndroidManifest.xml</code>)، أو تُحدَّد من قبل مستخدم الأداة فيما تعتمد تفاصيل العملية على الأداة المستخدمة.  


يمكن أن تطلب Plugman من المستخدمين تحديد المتغيرات المطلوبة في الإضافة. على سبيل المثال، يمكن تحديد مفاتيح الواجهة البرمجية لـ C2M ولخرائط Google كوسائط لسطر الأوامر:  
يمكن أن تطلب الأداة <code>[[Cordova/plugman|Plugman]]</code> من المستخدمين تحديد المتغيرات المطلوبة للإضافة. على سبيل المثال، يمكن تحديد مفاتيح الواجهة البرمجية من أجل C2M وخرائط Google كوسائط لسطر الأوامر:  
<syntaxhighlight lang="xml">plugman --platform android --project /path/to/project --plugin name|git-url|path --variable API_KEY=!@CFATGWE%^WGSFDGSDFW$%^#$%YTHGsdfhsfhyer56734‎</syntaxhighlight>  
<syntaxhighlight lang="shell">plugman --platform android --project /path/to/project --plugin name|git-url|path --variable API_KEY=!@CFATGWE%^WGSFDGSDFW$%^#$%YTHGsdfhsfhyer56734
</syntaxhighlight>  


بعض أسماء المتغيرات محجوزة، مثل الاسم <code>$PACKAGE_NAME</code>. فهذا هو معرف نمط النطاق العكسي (reverse-domain style identifier) للحزمة، ويقابله <code>CFBundleIdentifier</code> على منصة iOS، والخاصية <code>package</code> في العنصر الجذري <code>manifest</code> في الملف <code>AndroidManifest.xml</code>.  
بعض أسماء المتغيرات يجب أن تكون محجوزةً، مثل الاسم <code>PACKAGE_NAME$</code>. هذا هو معرِّف نمط النطاق العكسي (reverse-domain style identifier) للحزمة، ويقابله <code>CFBundleIdentifier</code> على منصة iOS، والخاصية <code>package</code> في العنصر الجذري <code>manifest</code> في الملف <code>AndroidManifest.xml</code>.  


preference  
== العنصر <code>preference</code> ==
كما هو موضح في القسم السابق، قد تتطلب الإضافة أحيانًا من المستخدم تحديد قيمٍ لمتغيراتها. لجعل تلك المتغيرات إلزامية، يجب أن يحتوي الوسم <code><platform></code> على الوسم <code><preference></code>. تتحقق [[Cordova/cli|واجهة سطر الأوامر]] من أنَّ تلك التفضيلات الإلزامية متوفرة. وإلا، فستنبه المستخدم إلى كيفية تمرير المتغيرات، ثم ستخرج مع إعادة قيمة مخالفة للصفر. يمكن الإشارة إلى التفضيلات في أماكن أخرى في الملف <code>plugin.xml</code> باستخدام الصياغة <code>PREFERENCE_NAME$</code>. 
{| class="wikitable"
!الخاصيات (النوع) 


كما هو موضح في القسم السابق، قد تتطلب الإضافة أحيانًا من المستخدم تحديد قيمٍ لمتغيراته. لجعل تلك المتغيرات إلزامية، يجب أن يحتوي الوسم <code><platform></code> على وسم <code><preference></code>. تتحقق [[Cordova/cli|واجهة سطر الأوامر]] من أن هذه التفضيلات الإلزامية متوفرة. وإلا فينبغي أن تنبه المستخدم إلى كيفية تمرير المتغير، وتخرج مع إعادة قيمة مخالفة للصفر. يمكن الإشارة إلى التفضيلات في أماكن أخرى في الملف <code>plugin.xml</code> باستخدام الصياغة <code>$PREFERENCE_NAME</code>.
<small>فقط للمنصة</small>  
الخاصيات(النوع)  
!الوصف
|-
|<code>name</code> (سلسلة نصية)
|(مطلوب)  


فقط للمنصة:
اسم المتغير. لا يمكن أن يحتوي إلا على الأحرف الكبيرة والأرقام والشرطات السفلية.
الوصف
|-
name (سلسلة نصية)
|<code>default</code> (سلسلة نصية)
مطلوب
|القيمة الافتراضية للمتغير. في حال تحديدها، فسيتم استخدامها، ولن يُطلق أي خطأ إذا لم يُدخِل المستخدم أي قيمة.
اسم المتغير. لا يمكن أن يحتوي إلا على الأحرف الكبيرة والأرقام والشرطات السفلية.  
|}
default (سلسلة نصية)  
القيمة الافتراضية للمتغير. في حال تحديده، فستُستخدم قيمته، ولن يُطلق أي خطأ عندما لا يدخل المستخدم أي قيمة.  


مثال:  
مثال على استخدام الوسم <code>preference</code>: <syntaxhighlight lang="xml"><preference name="MY_CUSTOM_STRING" default="default-value" />
<syntaxhighlight lang="xml"><preference name="MY_CUSTOM_STRING" default="default-value" />
<!--
<!--
     The preference may be referenced elsewhere in plugin.xml like so:
     plugin.xml التفضيلات يمكن أن توضع في أي مكان في الملف
-->
-->
<config-file target="./res/values/strings.xml" parent="/resources">
<config-file target="./res/values/strings.xml" parent="/resources">
     <string name="custom">$MY_CUSTOM_STRING</string>
     <string name="custom">$MY_CUSTOM_STRING</string>
</config-file>‎</syntaxhighlight>
</config-file>‎</syntaxhighlight>
== انظر أيضًا ==
* [[Cordova/config ref|الملف Config.xml]]
* [[Cordova/hooks|الخطافات]]
* <nowiki/>[[Cordova/cli|واجهة سطر الأوامر]]
==مصادر==
==مصادر==
*[https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html صفحة Plugin.xml في توثيق كوردوفا الرسمي.]
*[https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html صفحة Plugin.xml في توثيق كوردوفا الرسمي.]

المراجعة الحالية بتاريخ 19:09، 2 ديسمبر 2020

يعرِّف الملف Plugin.xml بنية وإعدادات الإضافة في مشروعك، ويحتوي على العديد من العناصر التي يمكن استخدامها لتوفير تفاصيل عن الإضافة.

العنصر plugin

العنصر plugin هو العنصر الجذري (top-level) لبيان (manifest) الإضافة.

الخاصيات (النوع)

فقط للمنصة

الوصف
xmlns (سلسلة نصية) (مطلوب)

مجال أسماء (namespace) الإضافة، http://apache.org/cordova/ns/plugins/1.0. إن كان المستند يحتوي على وُسوم XML من مجالات أسماء أخرى، مثل الوسوم المراد إضافتها إلى الملف AndroidManifest.xml في حالة استهداف منصة أندرويد، فيجب أيضًا تضمين مجالات الأسماء تلك في العنصر.

id (سلسلة نصية) (مطلوب)

مُعرف نمط (style identifier) مدير الحُزم npm الخاص بالإضافة.

version (سلسلة نصية) (مطلوب)

رقم إصدار الإضافة. يمكن اعتماد صياغة الإدارة الدلالية لنُسخ البرمجيات (SemVer، اختصار للكملتين Semantic Versioning).

إليك المثال التالي:

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    xmlns:android="http://schemas.android.com/apk/res/android"
    id="my-plugin-id"
    version="1.0.2">

العنصرين engines و engine

تحدد العناصر الفرعية من العنصر <engines> إصدارات بيئات العمل المستندة إلى أباتشي كوردوفا التي تدعمها هذه الإضافة. ستعيد واجهة سطر الأوامر عند الخروج قيمةً غير معدومة لكل الإضافات التي لا يلبي مشروعها المستهدف القيود المحددة من طرف الوسم engine. في حال عدم تحديد أي وسم، فستحاول واجهة سطر الأوامر التثبيت في مجلد مشروع كوردوفا المحدد دون القيام بأي عملية تحقق.

ملاحظة: في الإصدار Cordova 6.1.0‎ وما بعده، المكان الموصى به لتحديد المنصة أو الإضافة أو اعتماديات (dependencies) واجهة سطر الأوامر هو الملف package.json الخاص بالإضافة. انظر صفحة تحديد اعتماديات كوردوفا لمزيد من المعلومات.

الخاصيات (النوع)

فقط للمنصة:

الوصف
name (سلسلة نصية) (مطلوب)

تمثل هذه الخاصية اسم المحرك (engine). فيما يلي المحركات الافتراضية المدعومة:

  • cordova
  • cordova-plugman
  • cordova-android
  • cordova-browser
  • cordova-ios
  • cordova-windows
  • cordova-osx
  • windows-os
  • android-sdk (تعيد أعلى مستوى لواجهة أندرويد البرمجية المثبتة)
  • windows-sdk (تعيد إصدار إطار العمل الأصلي SDK الخاص بويندوز)
  • apple-xcode (تعيد إصدار xcode)
  • apple-ios (تعيد أعلى إصدار مثبت من منصة iOS)
  • apple-osx (تعيد إصدار OSX)

يمكنك أيضًا تحديد إطار عمل مخصص إضافةً للبيئات الافتراضية.

version (سلسلة نصية) (مطلوب)

إصدار إطار العمل اللازم لكي يتم تثبيته. الإدارة الدلالية لنُسخ البرمجيات (Semver) مدعوم.

scriptSrc (سلسلة نصية) لإطارات العمل المُخصصة فقط

(مطلوب)

ملف البرنامج النصي الذي يُعلِم الأمر plugman بإصدار إطار العمل المخصص. يُفضل أن يكون هذا الملف ضمن المجلد الجذري في مجلد الإضافات.

platform (سلسلة نصية) لإطارات العمل المُخصصة فقط

(مطلوب)

المنصات التي يدعمها إطار العمل خاصتك. يمكنك استخدام المحرف * العام لتعبّر عن حقيقة أنَّ إطار العمل يدعم جميع المنصات، أو تحديد عدة منصات مفصولة بخط شاقولي ("|").

اطلع على المثال التالي:

<engines>
  <engine name="cordova-android" version="=1.8.0" />
</engines>

قد تحدد عناصر المحرك (engine) أيضًا التطابقات غير المضبوطة باستخدام المحارف "‎>‎‎" و "‎>=‎" ...إلخ. وذلك لتجنب التكرار وتقليل أعباء الصيانة والمراجعة عند تحديث المنصة.

<engines>
  <engine name="cordova-android" version=">=1.8.0" />
</engines>

كذلك تدعم وسوم <engine> افتراضيًا جميع المنصات التي تعمل عليها كوردوفا. تحديد الوسم engine يعني أنّ جميع إصدارات كوردوفا، على كل المنصات، يجب أن تتطابق مع قيمة الخاصية version الواردة في الوسم engine. يمكنك أيضًا سرد قائمة من منصات محددة مع إصداراتها لاستبدال الاختيار العام للوسم engine:

<engines>
  <engine name="cordova" version=">=1.7.0" />
  <engine name="cordova-android" version=">=1.8.0" />
  <engine name="cordova-ios" version=">=1.7.1" />
</engines>

مثال على بيئة عمل مخصصة:

<engines>
  <engine name="my_custom_framework" version="1.0.0" platform="android" scriptSrc="path_to_my_custom_framework_version"/>
  <engine name="another_framework" version=">0.2.0" platform="ios|android" scriptSrc="path_to_another_framework_version"/>
  <engine name="even_more_framework" version=">=2.2.0" platform="*" scriptSrc="path_to_even_more_framework_version"/>
</engines>

العنصر name

يُستخدم الوسم name لتحديد اسم الإضافة. هذا الوسم لا يدعم (إلى الآن) إعدادات اللغة المحلية.

مثال على استخدام الوسم name:

<name>Foo</name>

العنصر description

يُستخدم الوسم description لتحديد وصفٍ للإضافة. هذا العنصر لا يدعم (إلى الآن) اللغات المحلية.

مثال على استخدام الوسم description:

<description>Foo plugin description</description>

العنصر author

يحتوي الوسم author على اسم مؤلف الإضافة. مثال على استخدام الوسم author:

<author>Foo plugin author</author>

العنصر keywords

يحتوي العنصر keywords على كلمات مفتاحية مفصولة بفاصلة لوصف الإضافة.

مثال على استخدام الوسم keywords:

<keywords>foo,bar</keywords>

العنصر license

يُستخدم هذا العنصر لتحديد ترخيص الإضافة.

مثال على استخدام الوسم license:

<license>Apache 2.0 License</license>

العنصر asset

يُستخدم هذا العنصر لسرد الملفات أو المجلدات المراد نسخها في مجلد التطبيق www. عناصر <asset> المتشعبة (nested) داخل العنصر <platform> ستحدد أصول الويب (web assets) الخاصة بالمنصة.

الخاصيات (النوع)

فقط للمنصة

الوصف
src (سلسلة نصية) (مطلوب)

تحدد هذه الخاصية المكان الذي يوجد فيه الملف أو المجلد في حزمة الإضافة نسبةً إلى المستند plugin.xml. إن لم يكن الملف موجودًا في الموضع src المحدد، فستتوقف واجهة سطر الأوامر وستعكس عملية التثبيت، وستطلق تنبيهًا حول وجود تعارض، ثم تخرج مع إعادة قيمة غير معدومة.

target (سلسلة نصية) (مطلوب)

تحدد هذه الخاصية المكان الذي يجب أن يوجد فيه الملف أو المجلد في تطبيق كوردوفا نسبةً إلى المجلد www. إن كان هناك ملف موجود سلفًا في الموضع المستهدف، فستتوقف واجهة سطر الأوامر، ثم ستعكس عملية التثبيت، وتطلق تنبيهًا حول التعارض، ثم ستخرج مع إعادة قيمة غير معدومة.

إليك المثال التالي:

<!-- ملف سيُنسخ داخل المجلد الجذري -->
<asset src="www/foo.js" target="foo.js" />
<!-- مجلد سيُنسخ داخل المجلد الجذري -->
<asset src="www/foo" target="foo" />

يمكن أيضًا استهداف الأصول (Assets) في المجلدات الفرعية. وسيؤدي ذلك إلى إنشاء المجلد js/experimental داخل المجلد www، ما لم يكن موجودًا بالفعل، وسيُنسَخ الملف new-foo.js وسيُعطَى الاسم foo.js.

<asset src="www/new-foo.js" target="js/experimental/foo.js" />

العنصر js-module

معظم الإضافات تتضمن ملف JavaScript واحدًا على الأقل. كل وسم <js-module> يقابل ملف JavaScript، إذ يُعفي ذلك مستخدمي الإضافة من إضافة وسم <script> لكل ملف.

لا تقم بتغليف (wrap) الملف بواسطة cordova.define، لأنه سيُضاف تلقائيًا. يتم تغليف الوحدة في دالة مجهولة (closure)، حيث ستكون module و exports وrequire في النطاق، كما هو معتاد في الوحدات AMD.

تشعيب (Nesting) عناصر <js-module> ضمن الوسم <platform> سيُصرّح بارتباطات (bindings) وحدة JavaScript الخاصة بالمنصة.

الخاصيات (النوع)

فقط للمنصة

الوصف
src (سلسلة نصية) تحدد هذه الخاصية مرجعًا لملف ما في مجلد الإضافة نسبةً إلى الملف plugin.xml. إذا لم يكن المسار المُستنتج من src يشير إلى ملف موجود فعلًا، فستوقف واجهة سطر الأوامر التثبيت وتعكسه، وتطلق تنبيهًا بالمشكلة، ثم تخرج مع إعادة قيمة غير معدومة.
name (سلسلة نصية) توفر هذه الخاصية الجزء الأخير من اسم الوحدة. يمكن أن تعطيها أي قيمة تريد، وليس لذلك أهمية إلا إن كنت تريد استخدام cordova.require لاستيراد أجزاء أخرى من الإضافات في شيفرة JavaScript. اسم الوحدة <js-module> يساوي مُعرّف (id) الإضافة متبوعًا بقيمة الاسم.

عند تثبيت الإضافة في المثال أدناه، يُنسخ الملف socket.js في المسار www/plugins/my-plugin-id/socket.js، ويُضاف كمُدخلة (entry) إلى الملف www/cordova_plugins.js. في وقت التحميل، تستخدم الشيفرة البرمجية في الملف cordova.js الواجهة البرمجية XHR لقراءة كل الملفات وإدارج الوسم <script> في ملف HTML:

<js-module src="socket.js" name="Socket">
</js-module>

باعتبار أن مُعرف (id) الإضافة يساوي chrome-socket، فسيكون اسم الوحدة هو chrome-socket.Socket.

الوسم clobbers

هذا الوسم مسموح به داخل العنصر <js-module>. ويُستخدم لتحديد مجال الأسماء (namespace) في الكائن window حيث يتم إدراج module.exports. يمكنك إدارج ما تشاء من الوسوم <clobbers>. الكائنات غير المتوفرة في الكائن window سيتم إنشاؤها.

الخاصيات (النوع)

فقط للمنصة

الوصف
target (سلسلة نصية) مجال الأسماء حيث يتم إدراج module.exports.

ألقِ نظرة فاحصة على المثال التالي:

<js-module src="socket.js" name="Socket">
  <clobbers target="chrome.socket" />
</js-module>

تُدرج module.exports هنا في الكائن window بحيث يمكن الوصول إليها عبر window.chrome.socket.

الوسم merges

هذا الوسم مسموح به داخل العنصر <js-module>. ويُستخدم لتحديد مجال الأسماء المرتبط بالكائن window حيث يُدمج module.exports مع القيمة الموجودة. إذا كان هناك مفتاح (key) موجود سلفًا، فسيستبدل (overrides) إصدارُ الوحدة الإصدارَ الأصلي. يمكنك إدارج أي عدد تريد من الوسوم <merges>. سيتم إنشاء الكائنات غير المتوفرة في الكائن window.

الخاصيات (النوع)

فقط للمنصة

الوصف
target (سلسلة نصية) مجال الأسماء حيث يتم إدراج module.exports

إليك المثال التالي:

<js-module src="socket.js" name="Socket">
  <merges target="chrome.socket" />
</js-module>

في هذا المثال ستُدمَج module.exports مع أي قيمة موجودة في window.chrome.socket.

الوسم runs

هذا الوسم مسموح به داخل العنصر <js-module>. ويستلزم ضرورة تحديد شيفرتك البرمجية عبر cordova.require، لكن دون أن تكون مثبتة في الكائن window. هذا مفيد عند تهيئة الوحدة، أو عند إرفاق معالجات الأحداث (event handlers) و غير ذلك. يمكن استخدام الوسم <runs/> مرةً واحدةً فقط. لاحظ أن تضمين <runs/> مع <clobbers/> أو <merges/> فيه تكرار، لأنها تستورد الوحدة عبر الأمر cordova.require.

اطلع على الشيفرة التالية:

<js-module src="socket.js" name="Socket">
  <runs/>
</js-module>

العنصر dependency

يسمح لك الوسم <dependency> بتحديد الإضافات الأخرى التي تعتمد عليها الإضافة الحالية. يُشار إلى الإضافات بواسطة معرفات مدير الحُزم npm، أو عن طريق عنوان مستودع github.

الخاصيات (النوع)

فقط للمنصة

الوصف
id (سلسلة نصية) توفّر هذه الخاصية معرف الإضافة.
url (سلسلة نصية) عنوان URL الخاص بالإضافة. يجب أن يشير هذا العنوان إلى مستودع git الذي ستحاول واجهة سطر الأوامر نسخه.
commit (سلسلة نصية) مرجع لمستودع git مفهوم من قبل git checkout: يمكن أن يكون فرعًا أو وسمًا (مثل master، أو 0.3.1)، أوقيمة hash) عبر commit hash مثل 975ddb228af811dd8bb37ed1dfd092a3d05295f9).
subdir (سلسلة نصية) تبيّن هذه الخاصية أن اعتماديات الإضافة المستهدفة موجودة كمجلد فرعي في مستودع git. وهذا مفيد لأنه يسمح للمستودع بأن يحتوي على العديد من الإضافات ذات الصلة، بحيث تُحدد كلها بشكل فردي.

إذا قمت بتعيين الخاصية url في الوسم <dependency> وأعطيتها القيمة "."، وقمت بتحديد الخاصية subdir، فستُثبّت الإضافة المرتبطة من نفس مستودع git المحلي أو البعيد مثل الإضافة الأب (parent plugin) التي حددت الوسم <dependency>. لاحظ أن المسار الذي تحدده subdir منسوب دائمًا إلى جذر مستودع git، وليس الإضافة الأم. هذا الأمر لن يتغير حتى لو قمت بتثبيت الإضافة عبر مسار محلي موجه مباشرة إليها. ستجد واجهة سطر الأوامر جذر مستودع git، ثم ستجد الإضافة الأخرى من هناك.

version (سلسلة نصية) إصدار الإضافة المعتمد عليها. الإدارة الدلالية لنُسخ البرمجيات (SemVer، اختصار للكملتين Semantic Versioning) مدعوم.

مثال على استخدام الوسم dependency:

<dependency id="cordova-plugin-someplugin" url="https://github.com/myuser/someplugin" commit="428931ada3891801" subdir="some/path/here" />
<dependency id="cordova-plugin-someplugin" version="1.0.1">

العنصر platform

يعرّف هذا الوسم المنصات التي لها أكواد برمجية أصيلة (native code) مرتبطة بها، أو تتطلب تعديلات على ملفات الإعدادات الخاصة بها. يمكن للأدوات التي تستخدم هذه المواصفات التعرف على المنصات المدعومة وتثبيت الشيفرة البرمجية في مشروعات كوردوفا. الإضافات التي لا تستخدم الوسوم <platform> يُفترض أن تكون بلغة JavaScript فقط، وبالتالي ستكون قابلة للتثبيت على كل المنصات.

الخاصيات (النوع)

فقط للمنصة

الوصف
name (سلسلة نصية) (مطلوب)

القيم المسموح بها هي: ios و android و windows و browser و osx

تجعل هذه الخاصية المنصة المحددة مدعومة، مع ربط العنصر الفرعي (element's children) بتلك المنصة.

مثال على استخدام الوسم platform:

<platform name="android">
  <!-- عناصر خاصة بأندرويد -->
</platform>

العنصر source-file

يحدد هذا الوسم الشيفرة المصدرية القابلة للتنفيذ التي يجب تثبيتها في المشروع.

الخاصيات (النوع)

فقط للمنصة

الوصف
src (سلسلة نصية) (مطلوب)

تحدد هذه الخاصية موقع الملف نسبةً إلى الملف plugin.xml. إذا تعذر العثور على الملف src، فستوقف واجهة سطر الأوامر التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.

target-dir (سلسلة نصية) المجلد الذي يجب أن تُنسخ الملفات فيه نسبةً إلى جذر مشروع كوردوفا. من الناحية العملية، يعد هذا أكثر أهمية للمنصات القائمة على جافا، حيث يجب وضع الملفات الموجودة في الحزمة com.alunny.foo داخل المجلد com/alunny/foo. بالنسبة للمنصات التي لا يكون للمجلد المصدري أهمية كبيرة فيها، فيجب حذف هذه الخاصية.
framework (قيمة منطقية)

(المنصة iOS)

القيمة الافتراضية: false

عند تعيين هذه الخاصية إلى القيمة true، فستضيف أيضًا الملف المحدد كإطار عمل للمشروع.

compiler-flags (سلسلة نصية)

(المنصة iOS)

هذه الخاصية ستعيّن رايات المُصرّف (compiler flags) الخاصة بالملف المصدري المحدد.

مثال على استخدام الوسم source-file:

<!-- android -->
<source-file src="src/android/Foo.java" target-dir="src/com/alunny/foo" />
<!-- ios -->
<source-file src="src/ios/CDVFoo.m" />
<source-file src="src/ios/someLib.a" framework="true" />
<source-file src="src/ios/someLib.a" compiler-flags="-fno-objc-arc" />

العنصر header-file

هذا الوسم يشبه <source-file>، ولكنه مُخصص لمنصات مثل iOS و Android، والتي تُميز بين الملفات المصدرية (source files)، والملفات الرئيسية (headers) والموارد (resources). هذا الوسم غير مدعوم من قبل ويندوز.

الخاصيات (النوع)

فقط للمنصة

الوصف
src (سلسلة نصية) (مطلوب)

موضع الملف نسبةً إلى الملف plugin.xml. إذا تعذر العثور على الملف الذي تحدده src، فستوقف واجهة سطر الأوامر التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.

target-dir (سلسلة نصية) المجلد حيث يجب نسخ الملفات، يُحدد نسبةُ إلى جذر مشروع كوردوفا.
type (سلسلة نصية)

IOS

إم كانت قيمتها تساوي BridgingHeader، فسيُستورد الملف من Bridging-Header.h ويمكن أن يُستدعى من برنامج سويفت.

مثال خاص بمنصة iOS:

<header-file src="CDVFoo.h" />
<header-file src="CDVSomeHeader.h" type="BridgingHeader" />

العنصر resource-file

هذا الوسم يشبه <source-file>، ولكنه مخصوص بمنصات مثل iOS و Android التي تميز بين الملفات المصدرية والملفات الرئيسية والموارد.

الخاصيات (النوع)

فقط للمنصة:

الوصف
src (سلسلة نصية) (مطلوب)

موضع الملف نسبةً إلى الملف plugin.xml. إذا تعذر العثور على الملف src، فستوقف واجهة سطر الأوامر التثبيت وتعكسه، وتطلق تنبيهًا حول المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.

target-dir (سلسلة نصية) المسار حيث سيُنسخ الملف داخل المجلد خاصتك.
arch (سلسلة نصية)

(منصة ويندوز)

القيم المسموح بها: x86 أو x64 أو ARM.

تشير هذه الخاصية إلى أنه يجب ألا يتم تضمين الملف إلا عند بناء معمارية (architecture) محددة.

device-target

(منصة ويندوز)

القيم المسموح بها: win (أو windows) أو phone أو all.

تشير هذه الخاصية إلى أنه لا ينبغي تضمين الملف إلا عند القيام بالبناء لأجل نوع الجهاز المستهدف.

versions

(ويندوز)

تشير هذه الخاصية إلى أنه لا ينبغي تضمين الملف إلا عند القيام بالبناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. قيمة هذه الخاصية يمكن أن تكون أي سلسلة نصية تحتوي مجالًا لإصدار دلالي (node semantic version) صالح.
reference

(منصة ويندوز)

تشير هذه الخاصية إلى أنه يجب الرجوع إلى الملف عبر src بدلًا من نسخه في الوجهة المستهدفة. سيظهر الملف في Visual Studio مع اسم الملف المحدد من طرف target، ولكنه سيشير إلى الموضع src المقابل، وذلك بحسب المعمارية (architecture) المستخدمة.

مثال لأجهزة الأندرويد:

<resource-file src="FooPluginStrings.xml" target="res/values/FooPluginStrings.xml" />

مثال خاص بمنصة ويندوز:

<resource-file src="src/windows/win81/MobServices.pri" target="win81\MobServices.pri" device-target="windows" versions="8.1" arch="x64"/>

<!-- مثال على الترجيع -->
<resource-file src="x86/foo.dll" target="foo.dll" arch="x86" reference="true" />
<resource-file src="x64/foo.dll" target="foo.dll" arch="x64" reference="true" />

ملاحظة: يجب أن تستخدم الخاصية target الخطوط المائلة العكسية ("\") لتجنب الخطأ DEP2100 deploy في Visual Studio.

العنصر config-file

يحدد هذا الوسم ملف الإعداد (XML) المراد تعديله، ويحدد موضع التعديل في ذلك المستند، وما الذي ينبغي تعديله.

هناك نوعان من الملفات تم اختبارها وتعديلها عبر هذا العنصر، وهما الملفان xml و plist. لا يسمح العنصر config-file إلا بإلحاق الوسوم الفرعية الجديدة إلى شجرة المستند XML. الوسوم الفرعية هي عناصر XML حرفية (literals) يتم إدراجها في الوثيقة المستهدفة.

الخاصيات (النوع)

فقط للمنصة

الوصف
target (سلسلة نصية) تحدد هذه الخاصية الملف المراد تعديله، والمسار نسبةً لجذر مشروع كوردوفا. إن لم يكن الملف المحدد موجودًا، فستتجاهل الأداة التعديلات على الإعدادات وستستمر في التثبيت.

يمكن أن يتضمن الهدف المحرف العام (*). في هذه الحالة، ستبحث واجهة سطر الأوامر عوديًا (recursively) في مجلد المشروع، وستستخدم أول تطابق.

في منصة iOS، موضع ملفات الإعدادات نسبةً إلى جذر مجلد المشروع غير معروف، لذلك فاعتماد القيمة config.xml سيُترجم إلى cordova-ios-project/MyAppName/config.xml.

parent (سلسلة نصية) محدد XPath ‏(XPath selector‏) يشير إلى أصل (parent) العناصر المراد إضافتها إلى ملف الإعدادات. إن استخدمت محددًا مطلقًا (absolute selectors)، فيمكنك استخدام المحرف العام (*) لتحديد العنصر الجذري، على سبيل المثال، ‎/*/plugins. إن لم يكن المحدد يُشير إلى وسم فرعي (child) من المستند المحدد، فستوقف الأداة عملية التثبيت وتعكسها، وتطلق تنبيًها، ثم تخرج وتعيد قيمة غير معدومة.

بالنسبة للملفات plist، تحدد الخاصية parent المفتاح الأصلي (parent key) الذي ينبغي أن يُدرج فيه عنصر XML المحدد.

after (سلسلة نصية) قائمة مرتبة حسب الأولوية للوسوم الإخوة (siblings) المقبولة التي ينبغي إضافة بيانات XML بعدها. هذه الخاصية مفيدة لتحديد التغييرات في الملفات التي تتطلب ترتيبًا صارمًا لعناصر XML، كما هو الحال هنا.
device-target (سلسلة نصية)

(منصة ويندوز)

القيم المسموح بها: win و phone و all.

هذه الخاصية قابلةً للتطبيق عند التأثير على الاسم الوصفي package.appxmanifest، تشير هذه الخاصية إلى ضرورة عدم تعديل الملف إلا عند القيام بالبناء لأجل نوع الجهاز المستهدف المحدد.

versions (سلسلة نصية)

(منصة ويندوز)

تُطبق هذه الخاصية عند التأثير على الاسم الوصفي package.appxmanifest، تشير هذه الخاصية إلى ضرورة عدم تعديل ملفات بيان (manifests) التطبيق الخاصة بإصدارات ويندوز المحددة إلا في الإصدارات التي تطابق السلسلة النصية المُعيّنة في الخاصية versions. يمكن أن تكون قيمة هذه الخاصية أي سلسلة نصية تحتوي مجالًا صالحًا للإصدارات الدلالية (semantic version).

مثال عن XML:

<config-file target="AndroidManifest.xml" parent="/manifest/application">
    <activity android:name="com.foo.Foo" android:label="@string/app_name">
        <intent-filter>
        </intent-filter>
    </activity>
</config-file>

مثال آخر عن plist:

<config-file target="*-Info.plist" parent="CFBundleURLTypes">
    <array>
        <dict>
            <key>PackageName</key>
            <string>$PACKAGE_NAME</string>
        </dict>
    </array>
</config-file>

مثال آخر من أجل الخاصيات الخاصة بويندوز:

<config-file target="package.appxmanifest" parent="/Package/Capabilities" versions="&lt;8.1.0">
    <Capability Name="picturesLibrary" />
    <DeviceCapability Name="webcam" />
</config-file>
<config-file target="package.appxmanifest" parent="/Package/Capabilities" versions=">=8.1.0" device-target="phone">
    <DeviceCapability Name="webcam" />
</config-file>

المثال أعلاه سيجعل المنصات السابقة للإصدار 8.1 (ويندوز 8، على وجه التحديد) تطالب باستيراد مكتبة webcam والمكتبة العامة picturesLibrary، مع تطبيق مكتبة الجهاز webcam حصريًا على مشاريع ويندوز 8.1 التي تُبنى لأجل Windows Phone. أما منصات Windows 8.1 المكتبية فلن تُعدَّل.

العنصر edit-config

هذا الوسم مشابه للعنصر config-file. يعرّف edit-config ملف الإعداد (XML) المراد تعديله، وأين ينبغي إجراء التعديل في ذلك الملف، وما الذي يجب تعديله. بدلًا من إلحاق وسوم فرعية (children) جديدة لشجرة المستند XML، يجري العنصر edit-config تعديلات على خاصيات عناصر XML. هناك وضعان سيحددان نوع التعديل الذي سيُجرى على الخاصيات، وهما merge و overwrite. الوسم edit-config لديه وسم فرعي واحد، والذي سيحتوي على الخاصيات المراد إضافتها.

الخاصيات (النوع)

فقط للمنصة

الوصف
file (سلسلة نصية) تحدد هذه الخاصية الملف المراد تعديله، والمسار نسبةً إلى المجلد الجذري لمشروع كوردوفا. إن لم يكن الملف المحدد موجودًا، فستتجاهل الأداة تغييرات الإعدادات وستستمر في عملية التثبيت.

يمكن أن يتضمن الهدف المحرف العام (*). في هذه الحالة، ستبحث واجهة سطر الأوامر عوديًا (recursively) في مجلد المشروع، وستستخدم أول تطابق.

في منصة iOS، موضع ملفات الإعداد نسبةً إلى المجلد الجذري للمشروع غير معروف، لذلك فتحديد الهدف عند القيمة config.xml سينتج عنه cordova-ios-project/MyAppName/config.xml.

target (سلسلة نصية) محدد XPath يشير إلى العنصر المستهدف المراد تعديل خاصياته. إن كنت تستخدم محددات مطلقة (absolute selectors)، فيمكنك استخدام المحرف العام (*) لتحديد العنصر الجذري (root element)، على سبيل المثال، ‎/*/plugins. إن لم يكن المحدد يشير إلى وسم فرعي (child) من المستند المحدد، فستوقف الأداة عملية التثبيت وتعكسها، وتطلق تنبيهًا، ثم ستخرُج مع إعادة قيمة غير معدومة.
mode (سلسلة نصية) تحدد هذه الخاصية الوضع الذي سيحدد نوع التعديلات التي سيتم إجراؤها على الخاصيات.
  • merge - يضيف هذا الوضع الخاصيات المحددة إلى العنصر المستهدف. سيتم استبدال قيم الخاصيات إن كانت الخاصيات المحددة موجودة سلفًا في العنصر المستهدف.
  • overwrite - يستبدل هذا الوضع كل الخاصيات في العنصر المستهدف بالخاصيات المحددة.

إليك المثال التالي:

<!-- plugin-1 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="16" android:maxSdkVersion="23" />
</edit-config>
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
    <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config>

الملف AndroidManifest.xm قبل إضافة plugin-1:

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            ...
        </activity>
    ...
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
</manifest>

الملف AndroidManifest.xml بعد إضافة plugin-1:

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden" android:label="NewLabel" android:name="MainActivity">
            ...
        </activity>
    ...
    <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="16" android:targetSdkVersion="23" />
</manifest>

إدارة تعارضات edit-config

لا يمكن أن تعدل أكثرُ من إضافة واحدة نفس الخاصيات، لأنها قد تتسبب في مشاكل في التطبيق. وسيُطلق خطأ ويفشل تثبيت الإضافة. لذلك يجب حل التعارض في الوسوم edit-config قبل إضافة الإضافة.

أدخل تعديلات على الوسوم المتعارضة لأجل حل التعارض، ثم أزل الإضافات المحدّثة وأعد إضافتها.

هناك خيار يمكن استخدامه إن أردت تثبيت الإضافة حتى بوجود تعارضات. يمكن استخدام الراية ‎--force مع الأمر cordova plugin add. وهذا سيجبر كوردوفا على أن تضيف الإضافة، وسيؤدي إلى عكس التغييرات المتعارضة التي أجرتها الإضافات الأخرى لأجل تجنب المشاكل.

يجب استخدام الراية ‎--force بحذر، لأن عكس التغييرات التي أجرتها الإضافات الأخرى قد يتسبب بمشاكل في عمل التطبيق.

إن لاحظت وجود مشاكل في عمل الإضافات، فأزلها جميعًا ثم أعد إضافتها.

لتفترض أنَّ الإضافة plugin-1 الواردة أعلاه مثبتةٌ بالفعل. إنّ محاولة تثبيت الإضافة plugin-2 أدناه ستؤدي إلى حدوث خطأ، نظرًا لكون الإضافة plugin-1 قد عدّلت سلفًا العنصر uses-sdk الموجود في الملف AndroidManifest.xml.

<!-- plugin-2 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="15" />
</edit-config>

يمكن إضافة plugin-2 بطريقتين:

الطريقة الأولى لحل التعارضات هي إزالة الوسم edit-config من الإضافة plugin-2 ودمجه في الوسم edit-config الخاص بالإضافة plugin-1 (على افتراض أنَّ الإضافة plugin-1 ليس لها أي مشكلة مع هذا التغيير). أزل كلا الإضافتين، ثم أعد إضافتهما مع هذه التغييرات. يُفترض أن تُضاف الإضافة plugin-2 بدون مشاكل هذه المرة.

إزالة الوسم edit-config من plugin-2 ودمجه في plugin-1:

<!-- plugin-1 -->
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="15" android:maxSdkVersion="23" />
</edit-config>
<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
    <activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config>

الملف AndroidManifest.xml الناتج بعد إزالة وإعادة إضافة كلا الإضافتين:

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden" android:label="NewLabel" android:name="MainActivity">
            ...
        </activity>
    ...
    <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="15" android:targetSdkVersion="23" />
</manifest>

الطريقة الثانية لإضافة plugin-2 تتطلب أن تُضيف الإضافة مع الراية ‎ --force. سيتم التراجع عن التغييرات المتعارضة التي أجرتها الإضافة plugin-1 في الوسم edit-config وسيتم تطبيق تغييرات plugin-2. الملف AndroidManifest.xml الناتج سيتضمن التغيير uses-sdk من plugin-2 والتغيير activity من plugin-1. لاحظ أنه لم يتم استبدال إلا التغيير uses-sdk وحده من بين التغييرات التي قامت بها الإضافة plugin-1، إذ أنه هو التغيير الوحيد المتعارض.

الملف AndroidManifest.xml الناتج بعد فرض إضافة الإضافة plugin-2:

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
    ...
        <activity android:configChanges="orientation|keyboardHidden" android:label="NewLabel" android:name="MainActivity">
            ...
        </activity>
    ...
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
</manifest>

ملاحظة: التغييرات المعكوسة عبر الراية ‎--force ستُفقَد بشكل دائم. ولن تعود بعد إزالة الإضافة التي أُضيفت بالقوة. إن كنت بحاجة إلى تلك التغييرات المعكوسة، فينبغي إزالة جميع الإضافات المرتبطة وإعادة إضافتها.

العنصر plugins-plist

يحدد هذا الوسم مفتاحًا (key) وقيمة لإلحاقهما بالملف AppInfo.plist المناسب في مشروع iOS Cordova. هذا الوسم أصبح مهملًا لأنه لا ينطبق إلا على الإصدار cordova-ios 2.2.0 وما قبله. استخدم الوسم <config-file> في إصدارات كوردوفا الأحدث. إليك المثال التالي:

<plugins-plist key="Foo" string="CDVFoo" />

العنصر lib-file

الوسم lib-file يشبه الملفات المصدرية (sources)، والموارد (resources)، والملفات الرئيسية (header files)، ولكنه مخصوص بمنصات مثل BlackBerry 10 التي تستخدم المكتبات المُولّدة من قبل المستخدمين. بالنسبة لمنصة ويندوز، يسمح الوسم <lib-file> بتضمين العنصر <SDKReference> في ملفات مشروع ويندوز المُنشأة.

الخاصيات (النوع)

فقط للمنصة

الوصف
src (سلسلة نصية) (مطلوب)

موضع الملف نسبةً إلى الملف plugin.xml. إذا تعذر العثور على src، فستوقف واجهة سطر الأوامر التثبيت وتعكسه، وتصدر تنبيهًا بشأن المشكلة، ثم تخرج مع إعادة قيمة غير معدومة.

بالنسبة لمنصة ويندوز، فهذه الخاصية تشير إلى اسم إطار العمل SDK المراد تضمينه (والذي سيُستخدَم كقيمة للخاصية Include في العنصر المولد <SDKReference>).

arch (سلسلة نصية) تمثل هذه الخاصية المعمارية (architecture) التي بُنِي الملف ‎.so على أساسها، والتي ستكون إما device أو simulator.

بالنسبة لمنصة ويندوز، هذه الخاصية ستشير إلى أنه لا يجب تضمين العنصر <SDKReference> إلا عند القيام بالبناء لأجل البنية المحددة.

القيم المدعومة هي x86 أو x64 أو ARM.

device-target (سلسلة نصية)

(منصة ويندوز)

القيم المسموح بها: win (أو windows) أو phone أو all.

توضح هذه الخاصية أنه لا يجب تضمين العنصر <SDKReference> إلا عند القيام بالبناء لأجل نوع الجهاز المحدد.

versions (سلسلة نصية)

(منصة ويندوز)

توضح هذه الخاصية أنَّه لا يجب تضمين <SDKReference> إلا عند القيام بالبناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. قيمة هذه الخاصية قد تكون أي سلسلة نصية تحتوي مجال إصدارات دلالية (semantic version range) صالحة

بالنسبة للأندرويد، يُستخدم العنصر <lib-file> لتثبيت الملفات ‎.jar في المجلد libs الخاص بالمشروع. ولا يدعم إلا الخاصية src التي تحتوي على المسار النسبي للملف ‎.jar.

اطلع على المثال التالي:

<lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
<lib-file src="src/BlackBerry10/native/simulator/libfoo.so" arch="simulator" />

مثال آخر لمنصة لويندوز:

<lib-file src="Microsoft.WinJS.2.0, Version=1.0" arch="x86" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" versions=">=8.1" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" target="phone" />
<lib-file src="Microsoft.WinJS.2.0, Version=1.0" target="win" versions="8.0" arch="x86" />

العنصر framework

يحدد هذ الوسم إطار العمل (عادة ما يكون جزءًا من نظام التشغيل أو المنصة) الذي تعتمد عليه الإضافة.

الخاصيات (النوع)

فقط للمنصة

الوصف
src (سلسلة نصية) (مطلوب)

تحدد هذه الخاصية اسم الإطار، أو المسار النسبي لإطارٍ مُضمّنٍ كجزء من ملفات الإضافات.

custom (قيمة منطقية) توضح هذه الخاصية ما إن كان الإطار مضمّنًا كجزء من ملفات الإضافات.
weak (قيمة منطقية) القيمة الافتراضية: false

تبيّن ما إن كان ينبغي أن يكون الإطار موصولًا بروابط ضعيفة (weakly linked).

type (سلسلة نصية) تبيّن نوع الإطار المراد إضافته.
parent (سلسلة نصية) القيمة الافتراضية: .

تضبط هذه الخاصية المسار النسبي إلى المجلد الذي يحتوي على المشروع الفرعي الذي تريد إضافة المرجع إليه. القيمة الافتراضية " ." تعني مشروع التطبيق.

arch (سلسلة نصية)

(منصة ويندوز)

القيم المسموح بها: x86 أو x64 أو ARM.

توضح هذه الخاصية أنه لا يجب تضمين الملف إلا عند القيام بالبناء لأجل المعمارية (architecture) المحددة.

device-target (سلسلة نصية)

(منصة ويندوز)

القيم المسموح بها: win (أو windows) أو phone أو all.

توضح هذه الخاصية أنه لا يجب تضمين الإطار إلا عند القيام بالبناء لأجل نوع الجهاز المحدد.

versions (سلسلة نصية)

(منصة ويندوز)

توضح هذه الخاصية أنه لا يجب تضمين الإطار إلا عند القيام بالبناء لأجل الإصدارات التي تطابق السلسلة النصية المحددة. يمكن أن تكون القيمة أي سلسلة نصية تحتوي مجالًا صالحًا للإصدارات الدلالية (semantic version).
target-dir (سلسلة نصية)

(منصة ويندوز)

تشير هذه الخاصية إلى المجلد الفرعي الذي سيُنسخ فيه الإطار. من الناحية العملية، أهمية هذه الخاصية تظهر عندما تحتوي الإضافة على عدة إصدارات للإطار، ولمُختلف بنيات الشرائح (chip architectures) أو الأجهزة، ولكنها تشترك في نفس الاسم. تتيح لك هذه الخاصية تحديد مجلدات فرعية مختلفة لكل إصدارٍ من الإطار، حتى لا تتداخل مع بعضها البعض.
implementation (سلسلة)

(منصة ويندوز)

تُعيّن هذه الخاصية قيمة المسار النسبي عند الملف dll. الذي يحتوي على تنفيذ (implementation) المُكوِّن WinMD المكتوب بلغة في C++‎.
spec (سلسلة نصية)

(منصة iOS)

تُقرَن هذه الخاصية بالتعبير type="podspec"‎، وتمثل السلسلة النصية التي تحتوي مواصفات مدير الاعتماديات CocoaPod التي تريد تثبيتها (المكتبة الثابتة فقط). CocoaPod ليس مدعومًا إلا في cordova-ios 4.3.0 و cordova-cli 6.4.0. بالنسبة للإضافة الخاصة بك، تأكد من إضافة الوسم <engine> والاعتماديات package.json المناسبة لضمان التوافق مع الإصدارات السابقة.
embed (قيمة منطقية)

(منصة iOS)

القيمة الافتراضية: false

تُقرَن هذه الخاصية مع custom="true"‎

اعط لهذه الخاصية القيمة true إن كنت ترغب في تضمين الإطار المخصص في حزمة التطبيق (app bundle)، بحيث يمكن تحميله ديناميكيًا في وقت التشغيل (إطار ديناميكي). هذا سيضع إطارك المخصص في القسم "Embedded Binaries" في إعدادات مشروع Xcode.

هذه الخاصية مدعومة فقط عند الجمع بين الإصدارين cordova-ios@4.4.0 و cordova-cli@7.0.0.

مثال خاص بمنصة iOS:

<framework src="libsqlite3.dylib" />
<framework src="social.framework" weak="true" />
<framework src="relative/path/to/my.framework" custom="true" />
<framework src="GoogleCloudMessaging" type="podspec" spec="~> 1.2.0" />

على منصة أندرويد (اعتبارًا من الإصدار cordova-android@4.0.0)، يُستخدم الوسم framework لتضمين اعتماديات مُدير المشاريع Maven، أو لتضمين مشروعات المكتبة المجمعة (bundled):

<!-- play من الخدمة GCM الاعتماد على الإصدار الأحدث من -->
<framework src="com.google.android.gms:play-services-gcm:+" />
<!-- appcompat-v7 من مكتبة الدعم v21 الاعتماد على  -->
<framework src="com.android.support:appcompat-v7:21+" />
<!-- الاعتماد على مكتبة المشروع المُتضمنة في الإضافة -->
<framework src="relative/path/FeedbackLib" custom="true" />

يمكن استخدام الوسم framework أيضًا لتضمين الملفات ‎.gradle المخصصة في الملف build.gradle الخاص بالمشروع الرئيسي:

<framework src="relative/path/rules.gradle" custom="true" type="gradleReference" />

على منصة ويندوز، سيؤدي استخدام custom='true'‎ و type='projectReference'‎ إلى إضافة مرجع إلى المشروع، والذي سيُضاف إلى خطوتي الربط والتصريف (compile+link) في مشروع كوردوفا. هذه هي الطريقة الوحيدة حاليًا التي تُمكّن أُطُر العمل المخصصة من استهداف عدة معماريات (architectures)، لأنها تُبنَى بشكل صريح كاعتماديات من قبل تطبيق كوردوفا الذي أنشأ المرجع.

<framework src="path/to/project/LibProj.csproj" custom="true" type="projectReference"/>

أمثلة على استخدام هذه الخاصيات الموجهة لويندوز:

<framework src="src/windows/example.dll" arch="x64" />
<framework src="src/windows/example.dll" versions=">=8.0" />
<framework src="src/windows/example.vcxproj" type="projectReference" target="win" />
<framework src="src/windows/example.vcxproj" type="projectReference" target="all" versions="8.1" arch="x86" />
<framework src="src/windows/example.dll" target-dir="bin/x64" arch="x64" custom="true"/>

هذا مثال آخر على استخدام الخاصيات الموجهة لويندوز لإضافة مرجع إلى مكوّنات WinMD المكتوبة بلغتي C#‎ و C++‎، والتي ستكون واجهتها البرمجية (API) متاحةً وقت التشغيل:

<!-- .winmd يتألف من ملف واحد من النوع C# مكون -->
<framework src="lib\windows\component.winmd" versions="<10.0" />
<!-- مع بيانات وصفية وتقديم منفصل C++ مكون -->
<framework src="lib\windows\x86\cppcomponent.winmd"
           implementation="lib\windows\x86\cppcomponent.dll"
           target-dir="component\x86" arch="x86" versions=">=10.0" />

العنصر podspec

تحدد ملف Podfile الخاص بـ CocoaPods، والذي يتضمن التبعيات التي تعتمد عليها الإضافة.

يحتوي هذا الوسمين <config> و <pods>.

config

يحدد العنصر <config> عناوين url المصدرية التي تُستخلص منها مواصفات CocoaPods.

يحتوي هذا العنصر على وسم <source> واحد أو أكثر.

الخاصيات (النوع)

فقط للمنصة

الوصف
url (مطلوب)

عنوان (url) المواصفات

pods

يحدد العنصر <pods> مكتبات CocoaPods.

يحتوي هذا العنصر على وسم <pod> لكل مكتبة من مكتبات CocoaPods.

الخاصيات (النوع)

فقط للمنصة

الوصف
use-frameworks

(سلسلة نصية)

القيمة الافتراضية: false

إن كانت قيمتها تساوي true، فسيُصرَح بالخاصية use_frameworks!‎ في ملف Podfile.

inhibit-all-warnings

(سلسلة نصية)

القيمة الافتراضية: false

إن كانت قيمتها تساوي true، فسيُصرَح بالخاصية inhibit_all_warnings!‎ في ملف Podfile.

pod

الخاصيات (النوع)

فقط للمنصة

الوصف
name مطلوب

اسم العنصر Pod

spec مطلوب

مواصفات العنصر Pod

swift-version تحدد إصدار سويفت الخاص بمكتبة CocoaPods
git خيار مستودع git الخاص بالعنصر Pod
branch الخيار branch الخاص بالعنصر Pod
tag الخيار tag الخاص بالعنصر Pod
commit الخيار commit الخاص بالعنصر Pod
configurations الخيار configurations الخاص بالعنصر Pod، إن إردت تمرير عدة قيم، فافصلها بفواصل.
http الخيار http الخاص بالعنصر Pod
path الخيار path الخاص بالعنصر Pod. ملف Pod الموجود في نظام الملفات المحلي.
options خيارات path المُصرح عنها على هيئة خام (raw format). في حال التصريح بها، ستكون لها الأسبقية على خيارات Pod الأخرى. مثلا: options=":git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'"‎

أمثلة:

    <podspec>
      <config>
        <source url="https://github.com/brightcove/BrightcoveSpecs.git" />
        <source url="https://github.com/CocoaPods/Specs.git"/>
      </config>
      <pods use-frameworks="true">
        <pod name="AFNetworking" spec="~> 3.2" />
        <pod name="SDWebImage" spec="~> 4.0" />
        <pod name="Eureka" swift-version="3.3" />
        <pod name="AcknowList" />
        <pod name="Brightcove-Player-Core" spec="~> 6.3.4" />
        <pod name="Foobar1" git="git@github.com:hoge/foobar1.git" configurations="Debug"/>
        <pod name="Foobar2" git="git@github.com:hoge/foobar2.git" branch="next" configurations="Debug,Release"/>
        <pod name="FoobarSwift" swift-version="4.1" />
      </pods>
    </podspec>

هذا مثال على ملف Podfile:

 # DO NOT MODIFY -- auto-generated by Apache Cordova 
source 'https://github.com/brightcove/BrightcoveSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target 'HelloCordova' do
    project 'HelloCordova.xcodeproj'
    pod 'AFNetworking', '~> 3.2'
    pod 'SDWebImage', '~> 4.0'
    pod 'Eureka'
    pod 'AcknowList'
    pod 'Brightcove-Player-Core', '~> 6.3.4'
    pod 'Foobar1', :git => 'git@github.com:hoge/foobar1.git', :configurations => ['Debug']
    pod 'Foobar2', :branch => 'next', :git => 'git@github.com:hoge/foobar2.git', :configurations => ['Debug','Release']
    pod 'FoobarSwift'
end

العنصر info

يحتوي هذا الوسم على معلومات إضافية لأجل تقديمها للمستخدمين. وهو أمر مفيد عندما تحتاج إلى توضيح خطوات إضافية لا يمكن أتمتتها بسهولة، أو تتجاوز إمكانيات واجهة سطر الأوامر. تُطبَع محتويات هذا الوسم عندما تثبّت واجهة سطر الأوامر الإضافة.

مثال على استخدام الوسم info:

<info>
`Android Extras`  من القسم __Google Play Services__ عليك تثبيت 
(run `android`) SDK باستخدام المُدير 

:local.properties تحتاج إلى إضافة السطر التالي إلى 
android.library.reference.1=PATH_TO_ANDROID_SDK/sdk/extras/google/google_play_services/libproject/google-play-services_lib
</info>

العنصر hook

يمثل هذا الوسمُ برنامجك النصي (script) المخصص، والذي سيٌستدعى من قبل كوردوفا عند وقوع حدثٍ معينٍ (بعد إضافة الإضافة مثلًا أو عند استدعاء سلسلة تحضير المنصة). هذا مفيد إن كنت تحتاج إلى توسيع وظائف كوردوفا.

مثال على استخدام الوسم hook:

<hook type="after_plugin_install" src="scripts/afterPluginInstall.js" />

راجع صفحة الخطافات لمزيد من المعلومات.

العنصر uses-permission

في بعض الحالات، قد تحتاج الإضافة إلى إجراء تغييرات على الإعدادات بحسب التطبيق المستهدف. على سبيل المثال، للتسجيل في خدمة C2DM على أندرويد، سيتطلب التطبيق الذي يحمل رقم تعريفه my-app-id إذنًا على النحو التالي:

<uses-permission android:name="my-app-id.permission.C2D_MESSAGE"/>

في حال لم يكن المحتوى المدرج من الملف plugin.xml معروفًا مُقدمًا، يمكن الإشارة إلى المتغيرات بالرمز $ متبوعًا بسلسلة من الحروف الكبيرة، أو الأرقام، أو الشرطات السفلية. في المثال أعلاه، سيتضمن الملف plugin.xml هذا الوسم:

<uses-permission android:name="$PACKAGE_NAME.permission.C2D_MESSAGE"/>

تستبدل واجهة سطر الأوامر مراجع المتغيرات بالقيمة المحددة، أو بسلسلة نصية فارغة إذا لم يتم العثور عليها. قد تُرصَد قيمة مرجع المتغير (في هذه الحالة، من الملف AndroidManifest.xml)، أو تُحدَّد من قبل مستخدم الأداة فيما تعتمد تفاصيل العملية على الأداة المستخدمة.

يمكن أن تطلب الأداة Plugman من المستخدمين تحديد المتغيرات المطلوبة للإضافة. على سبيل المثال، يمكن تحديد مفاتيح الواجهة البرمجية من أجل C2M وخرائط Google كوسائط لسطر الأوامر:

plugman --platform android --project /path/to/project --plugin name|git-url|path --variable API_KEY=!@CFATGWE%^WGSFDGSDFW$%^#$%YTHGsdfhsfhyer56734

بعض أسماء المتغيرات يجب أن تكون محجوزةً، مثل الاسم PACKAGE_NAME$. هذا هو معرِّف نمط النطاق العكسي (reverse-domain style identifier) للحزمة، ويقابله CFBundleIdentifier على منصة iOS، والخاصية package في العنصر الجذري manifest في الملف AndroidManifest.xml.

العنصر preference

كما هو موضح في القسم السابق، قد تتطلب الإضافة أحيانًا من المستخدم تحديد قيمٍ لمتغيراتها. لجعل تلك المتغيرات إلزامية، يجب أن يحتوي الوسم <platform> على الوسم <preference>. تتحقق واجهة سطر الأوامر من أنَّ تلك التفضيلات الإلزامية متوفرة. وإلا، فستنبه المستخدم إلى كيفية تمرير المتغيرات، ثم ستخرج مع إعادة قيمة مخالفة للصفر. يمكن الإشارة إلى التفضيلات في أماكن أخرى في الملف plugin.xml باستخدام الصياغة PREFERENCE_NAME$.

الخاصيات (النوع)

فقط للمنصة

الوصف
name (سلسلة نصية) (مطلوب)

اسم المتغير. لا يمكن أن يحتوي إلا على الأحرف الكبيرة والأرقام والشرطات السفلية.

default (سلسلة نصية) القيمة الافتراضية للمتغير. في حال تحديدها، فسيتم استخدامها، ولن يُطلق أي خطأ إذا لم يُدخِل المستخدم أي قيمة.

مثال على استخدام الوسم preference:

<preference name="MY_CUSTOM_STRING" default="default-value" />
<!--
    plugin.xml التفضيلات يمكن أن توضع في أي مكان في الملف
-->
<config-file target="./res/values/strings.xml" parent="/resources">
    <string name="custom">$MY_CUSTOM_STRING</string>
</config-file>

انظر أيضًا

مصادر