Alfas11/AppleScript

آبل اسكربت (بالإنجليزية: AppleScript)‏ هي لغة برمجة نصية أنشأتها شركة آبل، وتم دمجها في نظام التشغيل ماك أو إس، و تهدف إلى العمل بالتوازي مع واجهة المستخدم الرسومية.[1]

نظرة عامة عدل

AppleScript هي لغة برمجة نصية تم تطويرها بواسطة أبل لإجراء اتصالات بين التطبيقات (IAC) باستخدام أحداث أبل.[2][3] ترتبط AppleScript بأحداث أبل ولكنها تختلف عنها. تم تصميم أحداث أبل لتبادل البيانات والتحكم في التطبيقات الأخرى من أجل أتمتة المهام المتكررة.

تمتلك AppleScript بعض قدرات المعالجة الخاصة بها ، بالإضافة إلى إرسال واستقبال أحداث أبل إلى التطبيقات. يمكن لـ AppleScript إجراء العمليات الحسابية الأساسية ومعالجة النصوص ، وهي قابلة للتوسيع ، مما يسمح باستخدام إضافات البرمجة النصية التي تضيف وظائف جديدة إلى اللغة. ومع ذلك ، تعتمد AppleScript بشكل أساسي على وظائف التطبيقات والعمليات للتعامل مع المهام المعقدة. كلغة أوامر منظمة ، يمكن مقارنة AppleScript بشل يونكس أو Microsoft Windows Script Host أو IBM REXX ولكنها تختلف عن الثلاثة. حقيقة أن تطبيقات ماكنتوش تنشر "قواميس" للكائنات والعمليات القابلة للتوجيه;ضروري جداً حتى يتمكن أبل سكربت من تأدية وظائفه.

يحتوي AppleScript على بعض عناصر البرمجة الإجرائية ، والبرمجة الموجهة للكائنات (خاصة في إنشاء كائنات النص البرمجي) ، واتجاهات برمجة اللغة الطبيعية في تركيبها ، ولكنها لا تتوافق تمامًا مع أي من نماذج البرمجة هذه.[3]:xxvi

تاريخ عدل

في أواخر الثمانينيات من القرن الماضي ، اعتبرت شركة أبل استخدام لغة البرمجة HyperTalk الخاصة بـ HyperCard كلغة تطوير قياسية للمستخدم النهائي، عبر الشركة وضمن نظام تشغيل Mac OS الكلاسيكي ، وكذلك لتمكين التواصل بين العمليات الخاصة بمنتجات Apple مع عمليات المنتجات الأخرى.[4] يمكن للمبتدئين استخدام HyperTalk لبرمجة مكدس HyperCard. أدرك مهندسو أبل أنه يمكن تصميم لغة برمجة نصية مماثلة ، ولكن أكثر توجهاً للكائنات ، لاستخدامها مع أي تطبيق ، وقد وُلد مشروع AppleScript كبرنامج منبثق عن جهد بحثي لتحديث نظام Macintosh ككل وأصبح أخيرًا جزءًا من النظام 7 (Mac OS 7).[5][6]

تم إصدار AppleScript في أكتوبر 1993 كجزء من نظام 7.1.1 (نظام ماك 7 Pro ، أول ترقية رئيسية للنظام 7).[6] كان QuarkXPress (الإصدار 3.2) من أوائل التطبيقات البرمجية الرئيسية التي دعمت AppleScript. أدى هذا بدوره إلى اعتماد AppleScript على نطاق واسع في عالم النشر وما قبل الطباعة ، وغالبًا ما يربط معًا مهام سير العمل المعقدة. كان هذا عاملاً رئيسيًا في الحفاظ على موقع Macintosh المهيمن في النشر وما قبل الطباعة ، حتى بعد نقل QuarkXpress وتطبيقات النشر الأخرى إلى Microsoft Windows.

بعد بعض الشكوك بشأن مستقبل AppleScript في الجيل التالي من نظام التشغيل من أبل ، أدى الانتقال إلى Mac OS X (حوالي 2002) وأطر عمل Cocoa إلى زيادة فائدة ومرونة AppleScript بشكل كبير. تتيح تطبيقات Cocoa لمطوري التطبيقات تحقيق قابلية البرمجة الأساسية لتطبيقاتهم بأقل جهد ممكن ، مما يؤدي إلى زيادة عدد التطبيقات القابلة للبرمجة مباشرة. وفي الوقت نفسه ،وبسبب التحول إلى أسس يونكس وقدرة AppleScript على تشغيل أوامر Unix مباشرة ، باستخدام الأمر do shell script[7] أتاح ذلك لأبل سكريبت تحكم أكبر بكثير في نظام التشغيل نفسه.[3]:863 تم إصدار AppleScript Studio مع نظام التشغيل Mac OS X 10.2 كجزء من Xcode (بيئة برمجية) ،ولاحقاً تم إصدار إطار العمل AppleScriptObjC ضمن نظام التشغيل Mac OS X 10.6 ، وكل ذلك سمح للمستخدمين بإنشاء تطبيقات Cocoa باستخدام AppleScript.[3]:969

في أكتوبر 2016 ، غادر سال سوجويان ، مدير منتج AppleScript ومبشر الأتمتة ، شركة أبل عندما تم إلغاء منصبه "لأسباب تتعلق بالعمل".[8] استجاب الخبراء في مجتمع Mac مثل جون غروبر و Andy Ihnatko بشكل عام بقلق ، وشككوا في التزام أبل تجاه مجتمع المطورين والمستخدمين المحترفين.[9] رد نائب الرئيس الأول لهندسة البرمجيات في أبل ، كريج فيديريغي ، في رسالة بريد إلكتروني قائلاً: "لدينا كل النية لمواصلة دعمنا لتقنيات الأتمتة العظيمة في macOS!" ، على الرغم من أن جيف جاميت في Mac Observer رأى أن ذلك لم يفعل شيئًا يذكر لتهدئة شكوكه حول مستقبل أتمتة Apple بشكل عام و AppleScript بشكل خاص.[10] في الوقت الحالي ، تظل AppleScript أحد مكونات تقنيات أتمتة macOS ، جنبًا إلى جنب مع Automator و Shortcuts و Services و shell scripting.

مفاهيم أساسية عدل

التعليقات برمجياً عدل

يمكن عمل التعليقات بطرق متعددة. يمكن أن يبدأ التعليق المكون من سطر واحد بشرطتين (--). في AppleScript 2.0 ، الذي تم إصداره لأول مرة في نظام التشغيل Mac OS X Leopard ، قد يبدأ أيضًا بعلامة الرقم (#). يسمح هذا بتخزين برنامج نصي AppleScript قائم بذاته كملف نصي قابل للتنفيذ يبدأ بسطر #!/usr/bin/osascript مثال:

- هذا تعليق من سطر واحد
# وايضاً هذا! (في Mac OS X Leopard أو أحدث)

بالنسبة إلى التعليقات التي تشغل سطورًا متعددة ، تستخدم AppleScript أقواسًا بداخلها علامات نجمية. مثال:

(* هذا 
تعليق
متعدد
السطور *)

برنامج أهلا بالعالم عدل

في AppleScript ، يمكن كتابة البرنامج التقليدي أهلا بالعالم(!Hello World) في عدة أشكال مختلفة ، بما في ذلك:

display dialog "Hello, world!" -- نافذة منبثقة بها زران "موافق" و "إلغاء"
-- أو
display alert "Hello, world!" --نافذة منبثقة بها زر واحد "موافق" وأيقونة تمثل التطبيق الذي يعرض التنبيه
-- أو
say "Hello, world!" -- رسالة صوتية باستخدام صوت الكمبيوتر المركب
-- أو
return "Hello, world!"

يحتوي AppleScript على العديد من خيارات واجهة المستخدم ، بما في ذلك الحوارات والتنبيهات وقائمة الاختيارات. (يشير الرمز ¬ ، الناتج عن كتابة option+return في Script Editor ، إلى استمرار جملة واحدة عبر عدة أسطر.)

-- نافذة حوار
set dialogReply to display dialog ¬
	"حوار نصي" default answer ¬
	"أجابة نصية" hidden answer false ¬
	buttons {"تخطي", "نعم", "إلغاء"} ¬
	default button ¬
	"نعم" cancel button ¬
	"تخطي" with title ¬
	"عنوان النافذة" with icon note ¬
	giving up after 15
-- أختيار من قائمة
set chosenListItem to choose from list {"A", "B", "3"} ¬
	with title "List Title" ¬
	with prompt "Prompt Text" ¬
	default items "B" ¬
	OK button name "Looks Good!" ¬
	cancel button name "Nope, try again" ¬
	multiple selections allowed false ¬
	with empty selection allowed
 
-- أظهار تنبية
set resultAlertReply to display alert "Alert Text" ¬
	as warning ¬
	buttons {"تخطي", "موافق", "إلغاء"} ¬
	default button 2 ¬
	cancel button 1 ¬
	giving up after 2

يمكن لكل طريقة تفاعل للمستخدم إرجاع قيم الأزرار التي تم النقر عليها أو العناصر المختارة أو النص الذي تم إدخاله لمزيد من المعالجة. فمثلا:

display alert "Hello, world!" buttons {"رفض", "قبول"}
set theAnswer to button returned of the result
if theAnswer is "قبول" then
	beep 5
else
	say "عفواً!"
end if

استعارات اللغة الطبيعية عدل

في حين أن أحداث أبل هي وسيلة لإرسال الرسائل إلى التطبيقات ، فإن AppleScript هي لغة معينة مصممة لإرسال أحداث أبل. تماشياً مع هدف سهولة الاستخدام للمبتدئين ، تم تصميم لغة AppleScript على استعارة اللغة الطبيعية ، تمامًا كما تم تصميم واجهة المستخدم الرسومية على استعارة سطح المكتب. يجب أن يكون AppleScript المكتوب جيدًا واضحًا بما يكفي ليقرأه ويفهمه أي شخص ، كما يجب تحريره بسهولة. تعتمد اللغة إلى حد كبير على لغة HyperTalk التابعة لـ HyperCard ، والتي امتدت لتشير ليس فقط إلى عالم HyperCard للبطاقات والمكدسات ، ولكن أيضًا من الناحية النظرية إلى أي مستند. تحقيقًا لهذه الغاية ، قدم فريق AppleScript نموذج كائن حدث أبل (AEOM) ، والذي يحدد الكائنات التي "يعرفها" أي تطبيق معين.

جوهر لغة AppleScript هو استخدام المصطلحات التي تعمل كأسماء وأفعال يمكن دمجها. على سبيل المثال ، بدلاً من فعل مختلف لطباعة صفحة أو مستند أو نطاق من الصفحات (مثل printPage و printDocument و printRange) ، تستخدم AppleScript فعل "print" واحد يمكن دمجه مع كائن ، مثل صفحة أو وثيقة أو مجموعة من الصفحات.

print page 1

print document 2

print pages 1 thru 5 of document 2

بشكل عام ، تحدد AEOM عددًا من الكائنات - مثل مستند "document" أو فقرة "paragraph" - والإجراءات المقابلة - مثل "cut" و "close". يحدد النظام أيضًا طرقًا للإشارة إلى خصائص الكائنات ، بحيث يمكن للمرء الرجوع إلى "الفقرة الثالثة من المستند" يوم جيد "--"third paragraph of the document 'Good Day'"، أو" لون الكلمة الأخيرة من النافذة الأمامية "--"color of the last word of the front window". يستخدم AEOM تطبيق القاموسdictionary" لربط أحداث أبل بمصطلحات يمكن للبشر قراءتها ، مما يسمح بالترجمة ذهابًا وإيابًا بين أحداث AppleScript القابلة للقراءة البشرية وأحداث أبل ذات الرمز الثانوي. لاكتشاف عناصر البرنامج القابلة للبرمجة ، يمكن عرض قواميس التطبيقات المدعومة. (في تطبيقي Xcode و Script Editor ، يوجد هذا ضمن File → Open Dictionary.)

لتحديد التطبيق المقصود أن يكون هدفًا لمثل هذه الرسالة ، تستخدم AppleScript بنية "tell":

tell application "Microsoft Word"
  quit
end tell

بدلاً من ذلك ، يمكن التعبير عن tell في سطر واحد باستخدام المصدر:

tell application "Microsoft Word" to quit

بالنسبة للأحداث في (activate و open و reopen و close و print و quit) ، قد يتم ألحاق التطبيق ككائن مباشر لأوامر متعدية:

quit application "Microsoft Word"


يمكن التعبير عن مفهوم التسلسل الهرمي للكائن باستخدام الكتل المتداخلة:

tell application "QuarkXPress"
  tell document 1
    tell page 2
      tell text box 1
        set word 5 to "Apple"
      end tell
    end tell
  end tell
end tell

يمكن أيضًا التعبير عن مفهوم التسلسل الهرمي للكائن باستخدام عبارات الجر المتداخلة:

pixel 7 of row 3 of TIFF image "my bitmap"

والتي يمكن التعبير عنها بلغة برمجة أخرى على أنها استدعاءات طريقة متسلسلة ، كما هو الحال في هذا الكود المزيف (للفهم فقط):

getTIFF("my bitmap").getRow(3).getPixel(7);

يتضمن AppleScript بناء الجملة للعد الترتيبي ، مثلاً: 'الفقرة الأولى' "the first paragraph" ، وكذلك الأساسي ،مثلاً:'الفقرة واحد' "paragraph one". وبالمثل ، يمكن الإشارة إلى الأرقام نفسها على أنها نص أو رقميًا ، "five"و "fifth" و "5" كلها مدعومة ؛ هم مرادفات في AppleScript. أيضًا ، يمكن استخدام كلمة "the" قانونيًا في أي مكان في البرنامج النصي من أجل تعزيز إمكانية القراءة: ليس لها أي تأثير على وظائف البرنامج النصي.

أمثلة عدل

حاسبة أمنة من الفشل:

tell application "Finder"
	-- Set variables
	set the1 to text returned of (display dialog "1st" default answer "Number here" buttons {"Continue"} default button 1)
	set the2 to text returned of (display dialog "2nd" default answer "Number here" buttons {"Continue"} default button 1)
	try
		set the1 to the1 as integer
		set the2 to the2 as integer
	on error
		display dialog "You may only input numbers into a calculator." with title "ERROR" buttons {"OK"} default button 1
		return
	end try
	
	-- Add?
	if the button returned of (display dialog "Add?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 + the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	-- Subtract?	
	else if the button returned of (display dialog "Subtract?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 - the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	-- Multiply?	
	else if the button returned of (display dialog "Multiply?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 * the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	-- Divide?	
	else if the button returned of (display dialog "Divide?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 / the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	else
		delay 1
		say "You haven't selected a function. The operation has cancelled."
	end if
	
end tell

تسلسل بسيط لمربع حوار اسم المستخدم و كلمة المرور. هنا ، اسم المستخدم هو احمد وكلمة المرور app123:

tell application "Finder"
	set passAns to "app123"
	set userAns to "احمد"
	if the text returned of (display dialog "Username" default answer "") is userAns then
		display dialog "Correct" buttons {"Continue"} default button 1
		if the text returned of (display dialog "Username : John" & return & "Password" default answer "" buttons {"Continue"} default button 1 with hidden answer) is passAns then
			display dialog "Access granted" buttons {"OK"} default button 1
		else
			display dialog "Incorrect password" buttons {"OK"} default button 1
		end if
	else
		display dialog "Incorrect username" buttons {"OK"} default button 1
	end if
end tell

ادوات التطوير عدل

موارد آبل اسكربت عدل

أساسيات اللغة عدل

أسلوب البرمجة النصية المفتوح عدل

أحد الجوانب المهمة لتطبيق AppleScript هو (Open Scripting Architecture (OSA.[11] توفر Apple OSA للغات البرمجة النصية الأخرى ومنتجات البرمجة النصية/الأتمتة التابعة لجهات خارجية مثل QuicKeys و UserLand Frontier ، للعمل في حالة متساوية مع AppleScript. تم تنفيذ AppleScript كمكون برمجة نصية ، وكانت المواصفات الأساسية لربط هذه المكونات بـ OSA عامة ، مما يسمح للمطورين الآخرين بإضافة مكونات البرمجة النصية الخاصة بهم إلى النظام. ستعمل واجهات برمجة التطبيقات الخاصة بالعميل العام لتحميل النصوص البرمجية وحفظها وتجميعها بنفس الطريقة لجميع هذه المكونات ، مما يعني أيضًا أن التطبيقات الصغيرة والقطيرات يمكنها الاحتفاظ بنصوص برمجية في أي من لغات البرمجة النصية هذه.

إحدى ميزات OSA هي إضافات البرمجة النصية ، أو OSAX لـ Open Scripting Architecture eXtension ، المستوحاة من أوامر HyperCard الخارجية.[12]إضافات البرمجة النصية هي مكتبات تسمح للمبرمجين بتوسيع وظيفة AppleScript. الأوامر المضمنة كإضافات نصية متاحة على مستوى النظام ، ولا تعتمد على أحد التطبيقات . محرر AppleScript قادر أيضًا على تحرير وتشغيل بعض لغات OSA مباشرة.

جافا سكريبت للأتمتة عدل

ضمن OS X Yosemite والإصدارات الأحدث من ماك او اس ، يظل مكون (JavaScript for Automation (JXA هو لغة OSA الوحيدة الجادة البديلة لـ AppleScript ،[13] على الرغم من أن إصدارات ماكنتوش من بيرل و بايثون و روبي و Tcl تدعم جميعها وسائل العمل الأصلية مع أحداث أبل دون أن تكون مكونات OSA.[14]:516

توفر JXA أيضًا واجهة لغة أجنبية Objective-C (ولغة C).[13] نظرًا لكونها بيئة تعتمد على محرك JavaScriptCore الخاص بـ WebKit ، فإن مجموعة ميزات JavaScript متزامنة مع محرك متصفح Safari الخاص بالنظام. توفر JXA نظام وحدة JavaScript ويمكن أيضًا استخدام وحدات CommonJS عبر browserify.[15]

مراجع عدل

  1. ^ "معلومات عن آبل اسكربت على موقع id.loc.gov". id.loc.gov. مؤرشف من الأصل في 2020-04-08.
  2. ^ Goldstein، Adam (2005). AppleScript: the missing manual. Sebastopol, CA: O'Reilly Media. ISBN:0596008503. OCLC:56912218.
  3. ^ أ ب ت ث Sanderson، Hamish؛ Rosenthal، Hanaan (2009). Learn AppleScript: the comprehensive guide to scripting and automation on Mac OS X (ط. 3rd). Berkeley: Apress. DOI:10.1007/978-1-4302-2362-7_27. ISBN:9781430223610. OCLC:308193726.
  4. ^ Flynn، Laurie (27 فبراير 1989). "Apple Ponders Standardizing on HyperTalk". InfoWorld. ج. 11 رقم  9. ص. 31.
  5. ^ https://books.google.com/books?id=_40AkCe9nOUC
  6. ^ أ ب Cook، William (2007). "AppleScript" (PDF). History of Programming Languages (HOPL III). Proceedings of the third ACM SIGPLAN conference. Association for Computing Machinery: 1–21. DOI:10.1145/1238844.1238845. ISBN:9781595937667. S2CID:220938191.
  7. ^ "AppleScript Language Guide commands reference: do shell script". developer.apple.com. اطلع عليه بتاريخ 2019-09-15.
  8. ^ Lovejoy، Ben (17 نوفمبر 2016). "Sal Soghoian says 'ask Apple' about future of Mac user automation as company eliminates position". 9to5mac.com. اطلع عليه بتاريخ 2017-05-08.
  9. ^ Evans، Jonny (17 نوفمبر 2016). "Does Apple really want to kill Automator, AppleScript? Shock termination of veteran Apple developer guru sends shockwaves across the Mac community". Computerworld.com. اطلع عليه بتاريخ 2017-05-08.
  10. ^ Gamet، Jeff (23 نوفمبر 2016). "Apple's intent isn't the same as committing to mac automation". macobserver.com. اطلع عليه بتاريخ 2017-05-08.
  11. ^ "AppleScript Overview: Open Scripting Architecture". developer.apple.com. اطلع عليه بتاريخ 2017-05-08.
  12. ^ "Technical Note TN1164: Scripting Additions for Mac OS X". developer.apple.com. اطلع عليه بتاريخ 2017-05-08.
  13. ^ أ ب Siracusa، John (16 أكتوبر 2014). "OS X 10.10 Yosemite: The Ars Technica Review: JavaScript automation". Ars Technica. اطلع عليه بتاريخ 2017-05-08.
  14. ^ Neuburg، Matt (2006). AppleScript: the definitive guide (ط. 2nd). Beijing: O'Reilly Media. ISBN:0596102119. OCLC:68694976.
  15. ^ "Importing Scripts". GitHub. JXA-Cookbook. 6 ديسمبر 2019. اطلع عليه بتاريخ 2019-12-09.