يوم من حياة مطور Swift: من فنجان قهوة إلى النشر في App Store

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف يبدو يوم العمل النموذجي لمطور Swift في عام 2025

\n\n

عندما بدأت تعلم Swift لأول مرة، كنت أعتقد أن مطوري iOS هم سحرة يكتبون كودًا مثاليًا من الصباح حتى المساء مع فنجان لاتيه في مساحة عمل أنيقة. الواقع، كما تتوقع، كان أكثر واقعية ولكنه ليس أقل إثارة للاهتمام.

\n\n

في هذه المقالة، سأصحبك خلال يوم العمل النموذجي لمطور Swift - من قهوة الصباح إلى النشر المسائي في App Store. سترى ليس فقط الجدول الزمني، ولكن أيضًا أجزاء حقيقية من الكود نواجهها كل يوم. هيا بنا!

\n\n

09:00 - الصباح: الاجتماع اليومي القصير والتخطيط

\n\n

يبدأ اليوم باجتماع قصير عبر Zoom أو Slack. نحن فريق من 5 مطوري iOS، ومطوري خلفية، ومدير منتج. يتحدث كل شخص لمدة 1-2 دقيقة: ما تم إنجازه أمس، وما هو مخطط له اليوم، وما هي العوائق.

\n\n

إجابتي النموذجية تبدو هكذا:

\n\n
    \n
  • أمس: أنهيت إعادة هيكلة وحدة تسجيل الدخول باستخدام Combine.
  • \n
  • اليوم: سأدمج شاشة الملف الشخصي الجديدة مع SwiftUI، وأحتاج إلى عمل أنيميشن للانتقال.
  • \n
  • عائق: أنتظر من المصمم النماذج النهائية للوضع الداكن.
  • \n
\n\n

بعد الاجتماع القصير - 15 دقيقة لمراجعة الرسائل في Jira وGitHub. أطلع على طلبات السحب (PRs) التي تتطلب مراجعتي، وأقرأ التعليقات على طلبات السحب الخاصة بي.

\n\n

09:45 - العمل العميق الأول: وظيفة جديدة

\n\n

الصباح هو أفضل وقت للمهام المعقدة. اليوم أكتب وحدة الإشعارات الفورية مع الروابط العميقة. إليك كيف يبدو الهيكل النموذجي لفئة المعالج:

\n\n
import UIKit\nimport UserNotifications\n\nfinal class PushNotificationHandler: NSObject, UNUserNotificationCenterDelegate {\n    \n    func userNotificationCenter(\n        _ center: UNUserNotificationCenter,\n        didReceive response: UNNotificationResponse,\n        withCompletionHandler completionHandler: @escaping () -> Void\n    ) {\n        let userInfo = response.notification.request.content.userInfo\n        \n        guard let deepLink = DeepLinkParser.parse(userInfo) else {\n            completionHandler()\n            return\n        }\n        \n        Task { @MainActor in\n            Coordinator.shared.handle(deepLink)\n        }\n        \n        completionHandler()\n    }\n    \n    func userNotificationCenter(\n        _ center: UNUserNotificationCenter,\n        willPresent notification: UNNotification,\n        withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void\n    ) {\n        completionHandler([.banner, .sound, .badge])\n    }\n}
\n\n

لاحظ استخدام Task { @MainActor in } - هذه هي الطريقة الحديثة لفرض التنفيذ على الخيط الرئيسي بدلاً من الطريقة القديمة DispatchQueue.main.async. مطور iOS يستخدم الآن بنشاط Concurrency من Swift 5.5+.

\n\n

11:00 - مراجعة الكود: نظرة من الخارج

\n\n

يصل إشعار من زميل: "من فضلك ألق نظرة على طلب السحب". أفتح GitHub، وأرى تغييرات في نموذج البيانات. إليك مثال على ما أعلق عليه غالبًا:

\n\n
// ❌ سيء: فتح إجباري\nlet user = users.first!\n\n// ✅ جيد: استخراج آمن\nguard let user = users.first else {\n    assertionFailure("قائمة users لا يجب أن تكون فارغة في هذه المرحلة")\n    return\n}
\n\n

في مراجعة الكود، نناقش ليس فقط الصحة، ولكن أيضًا البنية المعمارية. اليوم استخدم الزميل SwiftUI مع @ObservableObject، ولكن وفقًا لدليل الأسلوب الخاص بنا، ننتقل إلى @Observable (iOS 17+). أقدم ملاحظة لطيفة:

\n\n
// نوصي بإعادة الكتابة باستخدام @Observable\n@Observable\nfinal class ProfileViewModel {\n    var name: String = ""\n    var age: Int = 0\n}
\n\n

12:30 - الغداء وتغيير السياق

\n\n

الغداء مقدس. أخرج إلى الخارج أو أطبخ بنفسي. أحاول ألا أنظر إلى الشاشة - عيناي تستريحان. أثناء الغداء، غالبًا ما أقرأ التليجرام

المدونات

توصيات الكتب