---
title: 'إتقان أتمتة macOS مع JavaScript: من Shortcuts إلى Scriptable التدفقات'
description: تعلم كيفية أتمتة macOS باستخدام JavaScript — من جسور AppleScript إلى برمجة نصية لـ JXA، تكامل Shortcuts، وأنماط أتمتة واقعية للمطورين.
url: https://nerdleveltech.com/ar/mastering-macos-automation-with-javascript-from-shortcuts-to-scriptable-workflow
language: ar
date: '2025-12-05'
category: tooling
tags:
  - macOS
  - automation
  - JavaScript
  - JXA
  - Shortcuts
  - scripting
  - developer-tools
markdown_url: https://nerdleveltech.com/ar/mastering-macos-automation-with-javascript-from-shortcuts-to-scriptable-workflow.md
attribution: 'Source: NerdLevelTech — https://nerdleveltech.com/ar/mastering-macos-automation-with-javascript-from-shortcuts-to-scriptable-workflow'
terms: https://nerdleveltech.com/llms.txt
---

# إتقان أتمتة macOS مع JavaScript: من Shortcuts إلى Scriptable التدفقات

## باختصار

- macOS تدعم الأتمتة عبر **JavaScript للأتمتة (JXA)**، وهي بديل حديث لـ AppleScript.
- يمكنك أتمتة Finder و Mail و Safari وتطبيقات macOS الأخرى مباشرة باستخدام واجهات JavaScript APIs.
- دمج **Shortcuts** و **Automator** و **JXA** لإنشاء سير عمل متينة عبر التطبيقات.
- تعلم كيفية بناء واختبار وتأمين سكربتات الأتمتة باستخدام أمثلة واقعية.
- اكتشف متى تكون الأتمتة تستحق البناء—ومتى يكون العمل اليدوي أو التطبيقات الأصلية أفضل.

---

## ما ستتعلمه

- ما هو JavaScript للأتمتة (JXA) وكيف يندرج ضمن أتمتة macOS.
- كيفية كتابة وتشغيل وتصحيح أخطاء سكربتات JXA باستخدام Script Editor وأدوات سطر الأوامر.
- كيفية دمج الأتمتة مع macOS Shortcuts و Automator.
- كيفية التعامل مع الأذونات والبيئة المعزولة والمخاوف الأمنية.
- كيفية هيكلة واختبار وصيانة سير عمل الأتمتة مثل المحترفين.

---

## المتطلبات الأساسية

قبل البدء، يجب أن يكون لديك:

- معرفة أساسية ببنية **JavaScript (ES5/ES6)**.
- الوصول إلى نظام **macOS** (يُوصى باستخدام macOS Catalina أو أحدث).
- فهم أساسي لـ **Terminal** و **أذونات macOS**.

---

## مقدمة: لماذا لا تزال أتمتة macOS مهمة

تتمتع أتمتة macOS بتاريخ طويل — من AppleScript في التسعينيات إلى سير عمل Automator في العقد 2000، والآن Shortcuts و JXA. بينما تظل AppleScript قوية، فإن بناءها قد يبدو قديمًا للمطورين الحديثين. وهنا يأتي دور **JavaScript للأتمتة (JXA)**.

تم تقديم JXA مع OS X Yosemite، مما يسمح لك بكتابة سكربتات الأتمتة باستخدام JavaScript مع الاستفادة من نظام Apple Event[^1]. يمكنك التحكم في التطبيقات الأصلية، وتعديل الملفات، وحتى التفاعل مع مربعات الحوار النظامية — باستخدام لغة برمجة مألوفة.

باختصار: يمكنك أتمتة جهاز Mac باستخدام نفس اللغة التي تستخدمها لتطبيقات الويب.

---

## تطور أتمتة macOS

| العصر            | الأداة      | اللغة               | المزايا الرئيسية                  | الاستخدام النموذجي               |
| ---------------- | ----------- | ------------------- | --------------------------------- | -------------------------------- |
| التسعينيات–2010s | AppleScript | AppleScript         | تكامل عميق مع التطبيقات           | أتمتة Finder و Mail و iTunes     |
| 2005–2020        | Automator   | واجهة رسومية        | لا حاجة للكود                     | سير عمل للمستخدمين النهائيين     |
| 2014–الحاضر      | JXA         | JavaScript          | بنية حديثة، تطبيقات قابلة للبرمجة | أتمتة صديقة للمطورين             |
| 2021–الحاضر      | Shortcuts   | مرئي + قابل للبرمجة | أتمتة عبر الأجهزة                 | سير عمل موحدة لنظام Apple البيئي |

كل جيل بني على سابقه. JXA يسد الفجوة بين قوة AppleScript وانتشار JavaScript، بينما Shortcuts تجلب الأتمتة إلى iOS وmacOS تحت واجهة واحدة.

---

## البدء: أول سكربت JXA لك

### الخطوة 1. فتح Script Editor

1. قم بتشغيل **Script Editor** (موجود في `/Applications/Utilities/`).
2. اختر **File → New**.
3. في شريط الأدوات، اضبط اللغة على **JavaScript**.

### الخطوة 2. كتابة سكربت Finder بسيط

```JavaScript
// Example: Open a Finder window to your Documents folder
var Finder = Application('Finder');
Finder.open(Path('/Users/' + $.NSProcessInfo.processInfo.userName + '/Documents'));
```

### الخطوة 3. تشغيله

انقر على **Run**. يجب أن يفتح Finder مجلد المستندات.

---

## تشغيل سكربتات JXA من Terminal

يمكنك تنفيذ سكربتات JXA من سطر الأوامر باستخدام `osascript`:

```bash
osascript -l JavaScript ~/scripts/openDocs.js
```

**مثال لإخراج Terminal:**

```bash
$ osascript -l JavaScript openDocs.js
Finder opened: /Users/alex/Documents
```

هذا مفيد بشكل خاص لمهام CI/CD وأدوات المطورين أو دمج الأتمتة في سكريبتات shell.

---

## بناء أتمتة عملية: إعادة تسمية الملفات دفعة واحدة

لننشئ سكربتًا يقوم بإعادة تسمية جميع الملفات `.png` في مجلد مع إضافة بادئة تاريخ.

### السكربت الكامل

```JavaScript
const app = Application.currentApplication();
app.includeStandardAdditions = true;

const Finder = Application('Finder');
const folder = Finder.chooseFolder("Select a folder to rename PNGs:");

const files = Finder.items.of(folder).whose({ name: { _endsWith: '.png' } });
const datePrefix = new Date().toISOString().split('T')[0];

files().forEach(file => {
  const oldName = file.name();
  const newName = `${datePrefix}-${oldName}`;
  file.name = newName;
});

app.displayNotification(`${files.length} files renamed`, { withTitle: 'Batch Rename Complete' });
```

### كيف يعمل

- يستخدم Finder API لاختيار مجلد.
- يقوم بتصفية الملفات التي تنتهي بـ `.png`.
- يقوم بإضافة التاريخ الحالي في بداية اسم كل ملف.
- يعرض إشعارًا أصليًا لـ macOS.

### تحدي جربه بنفسك

قم بتعديل السكريبت لـ:

- قم بإعادة تسمية الملفات `.jpg` و `.jpeg`.
- انقل الملفات المُعاد تسميتها إلى مجلد فرعي يسمى `Processed`.

---

## دمج JXA مع Shortcuts

منذ macOS Monterey، استبدلت **Shortcuts** Automator كمنصة أبل الرئيسية للأتمتة[^2]. لكن JXA لا يزال يلعب دورًا حاسمًا: يمكنك استدعاء سكريبتات JXA **داخل** Shortcuts.

### مثال: تفعيل سكريبت JXA من Shortcut

1. أنشئ Shortcut جديدًا.
2. أضف إجراء **Run JavaScript for Automation**.
3. الصق سكريبت JXA الخاص بك.
4. أضف مُحفز **Quick Action** (مثل: النقر بزر الماوس الأيمن في Finder → Quick Actions).

هذا يسمح لك بتشغيل أتمتتك من أي مكان — حتى عبر Siri أو اختصارات لوحة المفاتيح.

---

## متى تستخدم JXA ومتى لا تستخدمها

| حالة الاستخدام                                     | استخدام JXA | تجنب JXA                                    |
| -------------------------------------------------- | ----------- | ------------------------------------------- |
| أتمتة تطبيقات macOS الأصلية (Finder, Mail, Safari) | ✅           |                                             |
| التكامل مع iOS Shortcuts                           | ✅           |                                             |
| بناء أتمتات متعددة المنصات                         |             | ❌ (استخدم Node.js أو Python بدلاً من ذلك)   |
| عمليات حسابية ثقيلة أو سير عمل غير متزامن          |             | ❌ (JXA أحادية الخيط)                        |
| نصوص إنتاجية شخصية سريعة                           | ✅           |                                             |
| خطوط أنابيب أتمتة على مستوى المؤسسات               |             | ❌ (فكر في AppleScript + shell أو أدوات MDM) |

---

## مثال عملي: أتمتة أدوات المطورين

يستخدم العديد من المطورين أتمتة macOS لتبسيط المهام المتكررة:

- **أتمتة البناء:** تشغيل بناءات Xcode وفتح السجلات تلقائيًا.
- **إعداد البيئة:** تشغيل تطبيقات متعددة (Terminal, VS Code, Browser) لمشروع معين.
- **إدارة الملفات:** تنظيم لقطات الشاشة أو التنزيلات باستخدام تسميات محددة.

على سبيل المثال، قد يستخدم مطور واجهة أمامية نص JXA لفتح خادم محلي ومتصفح ومحرر في خطوة واحدة:

```JavaScript
const app = Application.currentApplication();
app.includeStandardAdditions = true;

Application('Terminal').doScript('cd ~/projects/myapp && npm start');
Application('Google Chrome').openLocation('http://localhost:3000');
Application('Visual Studio Code').activate();
```

يقوم هذا النص بتشغيل بيئة تطوير كاملة في ثوانٍ.

---

## المزالق الشائعة & الحلول

| المشكلة             | السبب                           | الحل                                                                                              |
| ------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------- |
| رفض الصلاحية        | إعدادات خصوصية macOS            | اذهب إلى **إعدادات النظام → الخصوصية & الأمان → الأتمتة** واسمح بالوصول.                          |
| مرجع تطبيق غير محدد | التطبيق غير قابل للبرمجة النصية | استخدم **Script Editor → File → Open Dictionary** للتحقق مما إذا كان التطبيق يدعم البرمجة النصية. |
| النص لا يعمل        | علامة لغوية خاطئة               | تأكد من استخدام `-l JavaScript` في `osascript`.                                                   |
| الإشعار غير معروض   | أذونات الإشعارات                | تمكين الإشعارات لـ Script Editor أو Terminal.                                                     |

---

## أنماط معالجة الأخطاء

يدعم JXA قياسي JavaScript try/catch، لكن يمكنك أيضًا عرض تنبيهات ودية للمستخدم:

```JavaScript
try {
  const Mail = Application('Mail');
  const inbox = Mail.inbox();
  console.log(`Inbox has ${inbox.messages.length} messages`);
} catch (error) {
  const app = Application.currentApplication();
  app.includeStandardAdditions = true;
  app.displayDialog(`Error: ${error.message}`);
}
```

**نصيحة:** دائمًا لف استدعاءات جسر AppleScript في `try/catch` — أخطاء JXA قد تكون غامضة.

---

## اختبار وتصحيح أخطاء نصوص JXA

### 1. استخدام Script Editor Console

- استخدم Result pane لفحص قيم الإرجاع.
- سجل إخراج التصحيح باستخدام `console.log()`.

### 2. استخدام Terminal

- نفذ السكريبتات باستخدام `osascript -l JavaScript`.
- استخدم `exit(1)` عند الفشل للتكامل مع سكريبتات CI.

### 3. استخدام اختبار الوحدة عبر Node.js (متقدم)

يمكنك محاكاة أجزاء من منطق الأتمتة في Node.js باستخدام محاكيات لاختبار المنطق التجاري قبل التشغيل على macOS.

---

## اعتبارات الأمان

يمكن لسكريبتات الأتمتة الوصول إلى بيانات حساسة أو التحكم في التطبيقات — لذا فإن macOS تفرض عزلًا صارمًا[^3].

### نقاط الأمان الرئيسية

- تتطلب السكريبتات موافقة المستخدم للتحكم في التطبيقات.
- تُخزَّن أذونات الأتمتة في قاعدة بيانات TCC (الشفافية، الموافقة، والتحكم).
- تجنب تخزين بيانات الاعتماد كنص عادي — استخدم Keychain Access أو المتغيرات البيئية.

### مثال: الوصول إلى Keychain بشكل آمن

```JavaScript
const app = Application.currentApplication();
app.includeStandardAdditions = true;
const password = app.doShellScript('security find-generic-password -w -a myuser -s myservice');
```

يقوم هذا باسترجاع كلمة المرور المخزنة في Keychain بشكل آمن.

---

## الأداء والقابلية للتوسع

سكريبتات JXA أحادية الخيط ومبنية على الأحداث. هي ممتازة لأتمتة مستوى المستخدم لكنها ليست مناسبة للأحمال عالية الأداء.

### نصائح الأداء

- قلل من تشغيل التطبيقات — أعد استخدام مراجع Application.
- قم بعمليات الدُفعات بدلاً من التكرار لكل ملف.
- استخدم أوامر shell للعمليات الثقيلة على الملفات.

على سبيل المثال، بدلاً من تسمية الملفات واحدة تلو الأخرى، استخدم استدعاء shell:

```JavaScript
Application.currentApplication().doShellScript('for f in *.png; do mv "$f" "2025-$f"; done');
```

يمكن أن يكون هذا **10–50× أسرع** للمجلدات الكبيرة[^4].

---

## المراقبة والرصد

بينما لا توفر macOS مراقبة مدمجة لسكريبتات الأتمتة، يمكنك:

- سجل في الملفات باستخدام `doShellScript('echo ... >> ~/automation.log')`.
- استخدم `displayNotification()` للحصول على ردود فعل للمستخدم.
- دمج مع أدوات طرف ثالث مثل Raycast أو Alfred للحصول على رؤية أفضل.

---

## نظرة عامة على البنية

هكذا يندرج JXA في نظام أتمتة macOS:

```mermaid
graph TD
A[User Action] --> B[Shortcuts or Script Trigger]
B --> C[JXA Script]
C --> D[Apple Event Bridge]
D --> E[macOS Applications]
E --> F[System APIs / Files / Network]
```

يوضح هذا النموذج أن JXA تعمل كجسر بين إجراءات المستخدم ونظام أحداث Apple في macOS.

---

## الأخطاء الشائعة التي يرتكبها الجميع

1. **خلط سينتاكس AppleScript في JXA** — هما لغتان مختلفتان.
2. **نسيان تمكين أذونات الأتمتة** في إعدادات النظام.
3. **استخدام حلقات متزامنة** للتحكم في التطبيقات — قد تؤدي إلى تجمد الواجهة.
4. **عدم التحقق من قواميس التطبيقات** — ليس كل تطبيق يدعم البرمجة النصية.
5. **تجاهل تحذيرات الأمان** — قد تفشل السكريبتات بصمت.

---

## دراسة حالة: أتمتة سير عمل إنتاج الفيديو

أتمتت استوديو إبداعي صغير عملية تصدير الفيديو باستخدام JXA:

- **الهدف:** تصدير مشاريع Final Cut Pro ورفعها تلقائيًا إلى YouTube.
- **الحل:** سكريبت JXA يتم تشغيله عبر Shortcut ينفذ أمر التصدير في Final Cut Pro، ويضغط الفيديو باستخدام سكريبت shell، ويقوم برفعه عبر API.
- **النتيجة:** تقليل وقت التصدير اليدوي من 15 دقيقة إلى أقل من دقيقتين.

بينما محدودية برمجة Final Cut Pro، فإن دمج JXA + shell + API أنشأ سير عمل هجين قوي وقابل للصيانة.

---

## دليل استكشاف الأخطاء وإصلاحها

| الأعراض                          | السبب المحتمل                                 | الحل                                            |
| -------------------------------- | --------------------------------------------- | ----------------------------------------------- |
| السكريبت يعمل لكن لا يحدث شيء    | التطبيق غير قابل للبرمجة النصية أو عدم السماح | تحقق من قاموس التطبيق وإعدادات النظام → الأتمتة |
| `osascript` يعيد خطأ بناء الجملة | غياب علامة `-l JavaScript`                    | حدد دائمًا `-l JavaScript`                      |
| إجراءات Finder تفشل بصمت         | Finder غير نشط                                | استخدم `Finder.activate()` قبل تنفيذ الإجراءات  |
| إشعارات غير معروضة               | أذونات الإشعارات                              | تمكين في إعدادات النظام → الإشعارات             |

---

## متى تتجاوز JXA

إذا أصبحت أتمتتك معقدة، فكر في:

- **جسر Node.js + AppleScript** للسيرورات غير المتزامنة.
- **إجراءات Automator بـ Swift** للأداء الأصلي.
- **Shortcuts API** للسيرورات عبر الأجهزة.

JXA مثالية للأتمتة الشخصية وإنتاجية المطورين، لكنها غير مناسبة للتنسيق على مستوى المؤسسة.

---

## الاستنتاجات الرئيسية

> **JXA تجلب قوة JavaScript الحديثة لأتمتة macOS.** هي مثالية للمطورين الذين يريدون أتمتة التطبيقات الأصلية، وتبسيط سير العمل، والتكامل مع Shortcuts — باستخدام لغة مألوفة.

**المميزات:**

- استخدم `osascript -l JavaScript` لتشغيل سكريبتات JXA.
- دمجها مع Shortcuts لإنشاء محفزات مرنة.
- تعامل دائمًا مع الأذونات والأمان بحذر.
- اختبار السكريبتات في Script Editor قبل الاستخدام الإنتاجي.

---

## الأسئلة الشائعة

**1. هل JXA مُهمَل؟**\
&#x20;لا. JXA لا يزال مدعومًا في macOS، على الرغم من أن Apple تركز على Shortcuts للمستخدمين النهائيين[^2].

**2. هل يمكن لـ JXA التحكم في تطبيقات الطرف الثالث؟**\
&#x20;نعم، إذا كان التطبيق يعرض قاموس AppleScript.

**3. هل يمكنني استخدام async/await في JXA؟**\
&#x20;لا. JXA يعمل في بيئة JavaScriptCore متزامنة.

**4. هل JXA يعمل على iOS؟**\
&#x20;لا. JXA مخصص لـ macOS فقط.

**5. هل يمكنني توزيع سكريبتات JXA؟**\
&#x20;نعم. احفظها كـ `.scpt` أو `.app` لمشاركة.

---

## الخطوات التالية

- استكشف ميزة **Script Editor → Open Dictionary**.
- دمج JXA مع **Shortcuts** لأتمتة هجينة.
- جرّب **Raycast** أو **Alfred** لتشغيل السكريبتات.

---

[^1]: وثائق مطوري Apple – JavaScript للأتمتة: <https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/>

[^2]: Apple Support – Use Shortcuts on Mac: <https://support.apple.com/guide/shortcuts-mac/welcome/mac>

[^3]: Apple Platform Security Guide – Transparency, Consent, and Control (TCC): <https://support.apple.com/guide/security/transparency-consent-and-control-secb7f9e31d4/web>

[^4]: Apple Developer Documentation – Shell Scripting Primer: <https://developer.apple.com/library/archive/documentation/OpenSource/Conceptual/ShellScripting/Introduction/Introduction.html>
