نشر تطبيق iOS بدون Mac: دليل Expo وEAS
بقلم Mehdi Azizi
حُدّث في ، 9 د
من جهاز Windows، تبني Expo وEAS تطبيق iOS الخاص بك وترسله إلى Apple. ما الذي ينجح بدون Mac، وما الذي يصعب، ولماذا تحتاج إلى iPhone.
هل يمكن نشر تطبيق iOS بدون Mac؟
نعم. يمكنك نشر تطبيق iOS بدون Mac إذا بنيته باستخدام Expo وReact Native. تقوم EAS Build بتجميع تطبيقك على أجهزة Mac تستضيفها Expo في السحابة، ثم ترسله EAS Submit إلى App Store Connect. توثيق Expo واضح في هذا: تعمل EAS Submit على macOS وLinux وWindows، لذلك لا تحتاج إلى Mac لتسليم build لنظام iOS.
في المقابل، تحتاج إلى ثلاثة أشياء لا بديل لها: حساب Apple Developer مدفوع، وiPhone لتختبر تطبيقك فعليًا، ومتصفح لتملأ صفحة التطبيق في App Store Connect. يشرح باقي هذا الدليل ما ينجح من جهاز Windows، وما الذي يصعب، وترتيب الخطوات.
كل تطبيقاتي على iOS تمر بهذه السلسلة: Expo، ثم EAS Build، ثم EAS Submit. هكذا وصل Solys وTradaZen إلى App Store. أنا أعمل على Mac، لكن لا توجد خطوة واحدة في النشر تعتمد عليه: تُبنى الـ builds في سحابة Expo، ويتم الإرسال إلى Apple عبر سطر الأوامر.
كيف تحل Expo وEAS محل الـ Mac
لتفهم ما هو ممكن، يجب أن تعرف لماذا كان الـ Mac إلزاميًا. يجب تجميع تطبيق iOS باستخدام Xcode، أداة Apple التي لا تعمل إلا على macOS، وبإصدار حديث بما يكفي لتجنب الرفض ITMS-90725. بعد ذلك يجب توقيعه بـ شهادة مرتبطة بحساب المطور الخاص بك، ثم إرساله إلى App Store Connect.
تقسم Expo هذا العمل إلى ثلاث أدوات:
- Expo وReact Native: تكتب تطبيقك بلغة JavaScript أو TypeScript، على أي حاسوب.
- EAS Build: تشغّل الأمر من حاسوبك، فيذهب الكود إلى Mac تابع لـ Expo، يجمّع التطبيق ويوقّعه نيابة عنك. تحصل على ملف جاهز للتثبيت أو الإرسال.
- EAS Submit: تأخذ هذه الـ build وترسلها إلى App Store Connect. بعد معالجة Apple لها، التي تتحقق مثلًا من الأيقونة (ITMS-90717)، تظهر في TestFlight.
الـ Mac ما زال موجودًا في السلسلة. الفرق أنه لم يعد جهازك. إذا أردت أن تفهم لماذا أنصح المبتدئين بهذه الحزمة، اقرأ صفحة React Native وExpo لتطبيق جوال.
ما الممكن من جهاز Windows
كتابة كود التطبيق
كل التطوير يتم على Windows بلا قيود: المحرر (VS Code، Cursor)، وNode.js، والطرفية. وإذا كنت تكتب الكود بمساعدة Claude أو ChatGPT، فلا شيء يتغير أيضًا. حول هذا الموضوع، اقرأ إنشاء تطبيق iOS بالذكاء الاصطناعي.
رؤية تطبيقك على iPhone أثناء كتابة الكود
للبداية، يقرأ تطبيق Expo Go المثبت على iPhone رمز QR يظهر في الطرفية ويحمّل مشروعك. يظهر كل تعديل على الهاتف خلال ثوانٍ. هذا مثالي للشاشات الأولى. منذ مايو 2026، بقيت نسخة App Store من Expo Go على SDK 54: أنشئ مشروعك باختيار التوافق معها، أو استخدم eas go وTestFlight لإصدار SDK أحدث.
لـ Expo Go حدّ: لا يحتوي إلا على الوحدات الأصلية التي توفرها Expo. بمجرد أن يستخدم تطبيقك مكتبة أصلية غير موجودة فيه، مثل SDK الخاص بـ RevenueCat للاشتراكات، تحتاج إلى build تطوير: نسخة خاصة من تطبيقك، تجمّعها EAS Build، وتثبّتها على iPhone.
تثبيت build على iPhone دون المرور بـ App Store
توفر EAS التوزيع الداخلي. تسجّل جهاز iPhone بالأمر eas device:create، ثم تشغّل build بنوع التوزيع internal. تحصل على رابط تثبيت. تضع Apple حدودًا لهذه الطريقة: يمكن للحساب التوزيع بهذه الطريقة على 100 جهاز iPhone كحد أقصى سنويًا، وكل جهاز جديد يتطلب build جديدة أو توقيعًا جديدًا. لك وحدك ولبعض المقربين، هذا أكثر من كافٍ.
إدارة الشهادات بدون Xcode
التوقيع هو أكثر ما يعيق المبتدئين على Mac، وصولًا إلى الخطأ ITMS-90034 عند الإرسال. مع EAS، تسجّل الدخول إلى حساب Apple من سطر الأوامر، ويمكن للأداة أن تنشئ بنفسها شهادة التوزيع وملف التزويد (provisioning profile). لن تفتح Keychain Access أبدًا.
إرسال تطبيقك إلى Apple ونشره
يرسل الأمر eas submit --platform ios الـ build إلى App Store Connect. ويمكنك أيضًا ربط الخطوتين معًا بالخيار --auto-submit في eas build. كل ما تبقى يتم في المتصفح: صفحة App Store، ولقطات الشاشة، وتصريحات الخصوصية، والاشتراكات، وTestFlight، والإرسال للمراجعة. App Store Connect تطبيق ويب، ويعمل جيدًا على Windows.
ما غير الممكن (أو الأصعب) بدون Mac
محاكي iOS محليًا
محاكي iOS جزء من Xcode، لذلك لا يعمل على Windows. عمليًا، هذا ليس مشكلة: iPhone أفضل من المحاكي للاختبار. أعلنت Expo في سبتمبر 2026 عن محاكي iOS في السحابة، EAS Simulator، وما زال وصوله محدودًا وقت كتابتي. لا تبنِ طريقة عملك عليه ما دام غير متاح للجميع.
تصحيح الكود الأصلي
إذا جاء الانهيار من الكود الأصلي (Swift، Objective-C، مكتبة مُعدّة بشكل خاطئ)، فأدوات التشخيص الخاصة بـ Apple موجودة في Xcode. بدون Mac، تعتمد على سجلات build في EAS وعلى أداة مثل Sentry، التي تبلّغ عن انهيارات التطبيق المثبّت. هذا ممكن، لكنه أبطأ. لذلك من المفيد في أول تطبيق أن تلتزم بمكتبات متوافقة مع Expo ويتم صيانتها، وهذا يجنّبك أيضًا الرفض ITMS-90338 عند الإرسال.
كتابة امتدادات أصلية يدويًا
الـ Widgets، وامتدادات الإشعارات، والأهداف الأصلية الخاصة: كل هذا ممكن مع Expo بفضل config plugins، لكن بدون Xcode لفحص المشروع المُولَّد، كل خطأ يكلّفك build إضافية. في أول تطبيق، أجّل هذه الميزات.
التجميع محليًا
الـ builds المحلية في EAS (الخيار --local) غير مدعومة على Windows. على الحاسوب الشخصي، تمر builds الخاصة بـ iOS إذن عبر سحابة Expo. تتضمن الخطة المجانية في EAS عددًا محدودًا من الـ builds شهريًا، مع قائمة انتظار: تحقق من الشروط الحالية في صفحة أسعار Expo قبل أن تخطط لأسبوع عمل مكثف.
حساب Apple Developer: إلزامي بلا استثناء
لا توجد حيلة تتجاوز هذه النقطة، ولا حتى Apple Developer Enterprise Program، المخصص للتطبيقات الداخلية في المؤسسات الكبيرة. بدون الاشتراك في Apple Developer Program، لا App Store Connect، ولا TestFlight، ولا توزيع داخلي، ولا إرسال إلى App Store. يكلّف الاشتراك 99 دولارًا سنويًا، تُخصم بعملتك.
نصيحتان قبل التسجيل:
- اختر جيدًا بين حساب فردي وحساب مؤسسة. في الحساب الفردي، يظهر اسمك كبائع على App Store. في حساب المؤسسة، يظهر اسم كيانك، لكن Apple تطلب حينها رقم D-U-N-S وتحققًا أطول.
- خصص بضعة أيام. التحقق من الحساب ليس فوريًا دائمًا. سجّل بمجرد أن تعرف أنك ستنشر، لا في اليوم السابق للإرسال.
الحاجة الحقيقية إلى iPhone للاختبار
تقنيًا، يمكن نشر تطبيق iOS دون أن تمسكه بيدك أبدًا. أنصحك بشدة بعدم فعل ذلك، وApple كذلك: قواعد المراجعة لديها (guideline 2.1) تطلب أن يكون التطبيق قد اختُبر على جهاز، من حيث الأخطاء والاستقرار، قبل الإرسال. أما مستخدموك فلن يكون لديهم إلا هذا: iPhone حقيقي.
هذا ما لا يُظهره لك إلا iPhone حقيقي:
- التشغيل الأول الفعلي، بدون خادم تطوير: هنا تختبئ الانهيارات عند الإقلاع.
- عمليات الشراء داخل التطبيق في بيئة الاختبار، لتتحقق من أن شاشة الدفع (paywall) تعرض الأسعار الصحيحة وأن الاشتراك يفتح التطبيق فعلًا.
- الإشعارات، والكاميرا، والاهتزازات، والأذونات، التي تتصرف بشكل مختلف أو لا تعمل إطلاقًا في أماكن أخرى.
- التخطيط الفعلي: النتوء أو Dynamic Island، وشريط الشاشة الرئيسية، ولوحة المفاتيح التي تغطي حقلًا.
- السلاسة، التي غالبًا ما يخفيها حاسوب قوي.
يكفي iPhone مستعمل حديث، بشرط أن يشغّل إصدار iOS يدعمه إصدار Expo SDK لديك. وإذا استطعت، استعر أيضًا iPhone بحجم مختلف: تطبيق يظهر جيدًا على شاشة كبيرة قد يُقطع على شاشة صغيرة. هذا بالضبط ما سبّب لي رفضًا في Solys، أحكيه في لماذا ترفض Apple التطبيق.
بدون Mac، الأمر ممكن. بدون iPhone، أنت ترسل إلى Apple تطبيقًا لم تره يعمل أبدًا.
الخطوات بالترتيب من Windows
- أنشئ مشروعك بالأمر
npx create-expo-appواختبر شاشاتك الأولى باستخدام Expo Go. - ثبّت EAS CLI بالأمر
npm install -g eas-cli، ثمeas loginوeas build:configure. - سجّل في Apple Developer Program بمجرد أن يبدأ مشروعك بالتشكّل.
- سجّل جهاز iPhone بالأمر
eas device:createوشغّل build تطوير. - أنشئ صفحة تطبيقك في App Store Connect، بنفس معرّف الحزمة (bundle identifier) الموجود في إعدادات Expo.
- شغّل build الإنتاج بالأمر
eas build --platform ios. - أرسلها بالأمر
eas submit --platform ios، ثم اختبرها في TestFlight. يشرح دليل TestFlight لاختبار تطبيقك هذه الخطوة بالتفصيل. - املأ الصفحة وأرسلها للمراجعة من المتصفح. أما النص الترويجي، فيمكن تغييره لاحقًا دون إصدار جديد.
ثلاثة فخاخ تتكرر كثيرًا في هذه المرحلة. يجب أن يزيد رقم الـ build مع كل إرسال: فعّل الزيادة التلقائية في EAS حتى لا تفكر فيه مجددًا. سؤال التشفير يعيق كل build ما دمت لم تجب عنه: يمكنك التصريح به مرة واحدة ونهائيًا في إعدادات التطبيق. ويجب أن يكون معرّف الحزمة متطابقًا في كل مكان، وإلا فلن تجد EAS Submit تطبيقك. لما بعد ذلك، من الصفحة حتى القبول، تغطي صفحة نشر تطبيق على App Store كل خطوة.
انشر تطبيقك الأول، بدون Mac ودون أن تضيع
لم يعد الـ Mac هو العائق الحقيقي. العوائق الحقيقية في مكان آخر: اختيار تطبيق لديه فرصة لتحقيق دخل، وربط اشتراكات تعمل، وتجهيز ملف تقبله Apple. هذا ما يغطيه المسار ذو الخطوات الأربع في iOS Kit، تتبعه بالسرعة التي تناسبك. أما الملف، فيجمع Apple Review Kit قائمة التحقق التي أستخدمها قبل الإرسال والملاحظات الموجهة للمراجع. وتعرض الصفحة الرئيسية كيف تنشئ تطبيق جوال دون أن تبدأ من الصفر باستخدام Expo وClaude Code، مع Mac أو بدونه.
يبقى القرار النهائي بنشر تطبيقك بيد Apple، ولا يمكن لأي kit أن يضمنه. ما أستطيع تقديمه لك هو المنهجية التي أطبّقها على تطبيقاتي.
الأسئلة الشائعة
كيف أنشر تطبيق iOS بدون Mac؟
مع Expo وReact Native، يحل Mac تستضيفه Expo محل جهازك. تكتب الكود على أي حاسوب، وتجمّع EAS Build التطبيق وتوقّعه في السحابة، ثم ترسله EAS Submit إلى App Store Connect. تحتاج أيضًا إلى حساب Apple Developer مدفوع، ومتصفح لملء الصفحة، وiPhone لتختبر تطبيقك فعليًا.
ما خطوات نشر تطبيق iOS من Windows؟
أنشئ مشروعك باستخدام Expo، وثبّت EAS CLI، وسجّل في Apple Developer Program. سجّل جهاز iPhone، وشغّل build تطوير، ثم أنشئ صفحتك في App Store Connect بنفس معرّف الحزمة الموجود في إعدادات Expo. بعد ذلك شغّل build الإنتاج، وأرسلها باستخدام EAS Submit واختبرها في TestFlight، ثم املأ الصفحة وأرسل التطبيق للمراجعة من المتصفح.
كم تكلفة نشر تطبيق على App Store؟
يكلّف الاشتراك في Apple Developer Program مبلغ 99 دولارًا سنويًا، تُخصم بعملتك. وهو إلزامي: بدونه لا يوجد App Store Connect، ولا TestFlight، ولا توزيع داخلي، ولا إرسال إلى App Store. من جهة Expo، تتضمن الخطة المجانية في EAS عددًا محدودًا من الـ builds شهريًا، مع قائمة انتظار: تحقق من الشروط الحالية في صفحة أسعار Expo.
هل أحتاج إلى iPhone لنشر تطبيق iOS بدون Mac؟
تقنيًا لا، لكنني أنصحك بشدة بعدم الاستغناء عنه، وApple كذلك: قواعد المراجعة لديها (guideline 2.1) تطلب أن يكون التطبيق قد اختُبر على جهاز من حيث الأخطاء والاستقرار قبل الإرسال. يكفي iPhone مستعمل حديث، بشرط أن يشغّل إصدار iOS يدعمه إصدار Expo SDK لديك.
كيف أختبر تطبيق iOS بدون Mac؟
ثبّت تطبيق Expo Go على iPhone: يقرأ رمز QR يظهر في الطرفية ويحمّل مشروعك، ويظهر كل تعديل خلال ثوانٍ. لا يحتوي Expo Go إلا على الوحدات الأصلية التي توفرها Expo. بمجرد أن يستخدم تطبيقك مكتبة أصلية غير موجودة فيه، مثل SDK الخاص بـ RevenueCat، تحتاج إلى build تطوير تجمّعها EAS Build. لاختبار الـ build النهائية، اقرأ TestFlight لاختبار تطبيقك.
ما حدود تطوير iOS بدون Mac؟
لا يمكنك استخدام محاكي iOS محليًا: فهو جزء من Xcode، لذلك لا يعمل على Windows. الـ builds المحلية في EAS (--local) غير مدعومة على Windows: تمر builds الخاصة بـ iOS عبر سحابة Expo. يبقى تصحيح الكود الأصلي وكتابة امتدادات أصلية يدويًا ممكنين، لكنهما أصعب، لأن أدوات Apple موجودة في Xcode.