
- بواسطة x32x01 ||
تخيل كده الموقف 
أنت مطور شغال على تطبيق Flutter جامد جدًا، ورفعته على Google Play وApp Store.
الناس بدأت تستخدمه وفرحانة بيه جدًا، وكل حاجة تمام.
بس في يوم وانت بتشرب كوباية الشاي الصبح
، لقيت Bug مزعج طالع للمستخدمين أو واجهة محتاجة تعديل بسيط عشان تحسّن تجربة المستخدم.
وهنا السؤال الكبير:
هل لازم أرجع أعمل Build جديد ورفع ومراجعة وتحديث يدوي لكل المستخدمين؟
ولا في طريقة أذكى وأسرع؟
تعالى بقى نحل اللغز مع بعض!
الطريقة التقليدية لتحديث التطبيقات
الطريقة اللي أغلب الناس شغالة بيها حالياً بتكون كده بالضبط:
المستخدمين يشتكوا إنهم كل شوية بيضطروا يحدثوا التطبيق
وأنت كمطور تضيع وقتك بين مراجعات ومتابعات وتحديثات لا تنتهي.
يعني باختصار... صداع!
الحل العبقري: أداة Shorebird
وهنا بييجي دور البطل المنقذ... Shorebird! 
أداة جديدة وذكية جدًا مخصصة لتطبيقات Flutter، بتخليك تبعت تحديثات مباشرة للمستخدمين بدون ما يحتاجوا يدخلوا المتجر ويعملوا Update بنفسهم.
يعني لو اكتشفت خطأ بسيط أو عايز تغير شكل زر أو لون واجهة، ممكن تعدل وترسل التحديث فورًا لكل المستخدمين بضغطة واحدة!
يعني إيه Shorebird بالظبط؟
Shorebird عبارة عن أداة (CLI Tool) بتشتغل جنب تطبيقك الـ Flutter وبتخليك تعمل حاجة اسمها Over-the-air updates
بمعنى إنك تبعت تعديلات أو إصلاحات بسيطة (زي bug fix أو تعديل UI) من غير ما تنشر نسخة جديدة على المتجر.
وده بيخلي شغلك أسرع، والمستخدمين مبسوطين أكتر لأن التطبيق بيبقى دايمًا ثابت وسريع
إزاي تشتغل بـ Shorebird خطوة بخطوة
خلينا نبدأ من الأول خالص ونمشي سطر بسطر 
1. تجهيز المشروع:
ضيف Shorebird لتطبيقك Flutter باتباع الخطوات الرسمية من الموقع بتاعهم.
غالبًا هتبدأ بالأوامر دي في التيرمنال:
بعد كده هتكون ربطت مشروعك مع حسابك في Shorebird.
2. تعديل المشكلة وإرسال التحديث
لما تكتشف مشكلة أو عايز تعمل تعديل بسيط، عدل الكود كالمعتاد.
وبعدين شغّل الأمر ده من التيرمنال:
الأداة دي هتجهز التعديلات وتبعتها للسيرفر، وبعدها المستخدمين هيستقبلوا النسخة الجديدة فورًا 
3. المستخدمين يستقبلوا التحديث تلقائي
الجميل في Shorebird إن المستخدم مش بيحتاج يعمل أي حاجة بنفسه.
كل حاجة بتحصل أوتوماتيك، أول ما يفتح التطبيق التحديث بيتحمل في الخلفية.
يعني ببساطة: لا مراجعة، لا انتظار، ولا صداع
إيه مميزات Shorebird اللي هتخليك تقع في حبها؟
تعالى نعد مع بعض شوية مزايا قوية جدًا:
متى تستخدم Shorebird ومتى لا؟
رغم إن Shorebird قوية جدًا، بس مش دايمًا تنفع لكل الحالات.
استخدمها لما التعديلات تكون بسيطة زي:
نصايح مهمة قبل استخدام Shorebird
مثال عملي كامل
خلينا نفترض إنك عايز تعدل لون الزر الأساسي في تطبيقك من الأزرق للأخضر.
كل اللي هتعمله في الكود هو الآتي:
بعد كده شغّل الأمر ده:
وخلال ثواني التحديث يوصل لكل المستخدمين من غير ما حد يفتح المتجر 
لو بتشتغل على تطبيقات Flutter وعايز توفر وقتك وتخلي المستخدمين مبسوطين، فـ Shorebird هو الحل السحري اللي كنت بتدور عليه 
هيساعدك تبعت التحديثات فورًا، تصلح الأخطاء بسرعة، وتدي انطباع احترافي جدًا عن تطبيقك
جربها بنفسك وشوف الفرق

أنت مطور شغال على تطبيق Flutter جامد جدًا، ورفعته على Google Play وApp Store.
الناس بدأت تستخدمه وفرحانة بيه جدًا، وكل حاجة تمام.
بس في يوم وانت بتشرب كوباية الشاي الصبح

وهنا السؤال الكبير:
هل لازم أرجع أعمل Build جديد ورفع ومراجعة وتحديث يدوي لكل المستخدمين؟

ولا في طريقة أذكى وأسرع؟
تعالى بقى نحل اللغز مع بعض!

الطريقة التقليدية لتحديث التطبيقات
الطريقة اللي أغلب الناس شغالة بيها حالياً بتكون كده بالضبط:- تفتح الكود وتعدل المشكلة.
- تعمل Build جديد للتطبيق.
- ترفع النسخة الجديدة على المتاجر.
- تستنى موافقة Google وApple (وده ممكن ياخد أيام خصوصاً مع Apple
).
- المستخدمين يبدأوا يعملوا تحديث يدوي للتطبيق.
المستخدمين يشتكوا إنهم كل شوية بيضطروا يحدثوا التطبيق

وأنت كمطور تضيع وقتك بين مراجعات ومتابعات وتحديثات لا تنتهي.
يعني باختصار... صداع!

الحل العبقري: أداة Shorebird 
وهنا بييجي دور البطل المنقذ... Shorebird! 
أداة جديدة وذكية جدًا مخصصة لتطبيقات Flutter، بتخليك تبعت تحديثات مباشرة للمستخدمين بدون ما يحتاجوا يدخلوا المتجر ويعملوا Update بنفسهم.
يعني لو اكتشفت خطأ بسيط أو عايز تغير شكل زر أو لون واجهة، ممكن تعدل وترسل التحديث فورًا لكل المستخدمين بضغطة واحدة!

يعني إيه Shorebird بالظبط؟
Shorebird عبارة عن أداة (CLI Tool) بتشتغل جنب تطبيقك الـ Flutter وبتخليك تعمل حاجة اسمها Over-the-air updatesبمعنى إنك تبعت تعديلات أو إصلاحات بسيطة (زي bug fix أو تعديل UI) من غير ما تنشر نسخة جديدة على المتجر.
وده بيخلي شغلك أسرع، والمستخدمين مبسوطين أكتر لأن التطبيق بيبقى دايمًا ثابت وسريع

إزاي تشتغل بـ Shorebird خطوة بخطوة
خلينا نبدأ من الأول خالص ونمشي سطر بسطر 
1. تجهيز المشروع:
ضيف Shorebird لتطبيقك Flutter باتباع الخطوات الرسمية من الموقع بتاعهم.
غالبًا هتبدأ بالأوامر دي في التيرمنال:
Code:
dart pub global activate shorebird_cli
shorebird login
shorebird init
2. تعديل المشكلة وإرسال التحديث

لما تكتشف مشكلة أو عايز تعمل تعديل بسيط، عدل الكود كالمعتاد.
وبعدين شغّل الأمر ده من التيرمنال:
Code:
shorebird patch

3. المستخدمين يستقبلوا التحديث تلقائي

الجميل في Shorebird إن المستخدم مش بيحتاج يعمل أي حاجة بنفسه.
كل حاجة بتحصل أوتوماتيك، أول ما يفتح التطبيق التحديث بيتحمل في الخلفية.
يعني ببساطة: لا مراجعة، لا انتظار، ولا صداع

إيه مميزات Shorebird اللي هتخليك تقع في حبها؟
تعالى نعد مع بعض شوية مزايا قوية جدًا:- حل المشاكل فورًا:
- مش لازم تستنى مراجعة المتجر عشان تصلح
bug
. التعديل يوصل للمستخدمين في نفس اللحظة
- مش لازم تستنى مراجعة المتجر عشان تصلح
- تحسين تجربة المستخدم:
- الناس هتحس إن تطبيقك ثابت ومحترف ومفيهوش تأخير في التحديثات
- الناس هتحس إن تطبيقك ثابت ومحترف ومفيهوش تأخير في التحديثات
- توفير وقت ومجهود:
- مش كل تعديل صغير يستاهل رفع نسخة جديدة، كده هتوفّر وقتك في حاجات أهم.
- التحكم الكامل في الإصدارات:
- ممكن تتحكم في مين اللي يستقبل التحديث ومتى، وده مفيد جدًا وقت التجربة.
متى تستخدم Shorebird ومتى لا؟
رغم إن Shorebird قوية جدًا، بس مش دايمًا تنفع لكل الحالات.استخدمها لما التعديلات تكون بسيطة زي:
- إصلاح واجهة.
- تعديل نص أو زر.
- إصلاح
bug
صغير.
نصايح مهمة قبل استخدام Shorebird
- تأكد إن التطبيق بتاعك معمول بـ Flutter stable channel.
- دايمًا جرب التحديث على نسخة تجريبية قبل ما تبعته لكل المستخدمين.
- خليك حريص على إنك ما تبعتش أكواد حساسة عن طريق patch.
مثال عملي كامل
خلينا نفترض إنك عايز تعدل لون الزر الأساسي في تطبيقك من الأزرق للأخضر.كل اللي هتعمله في الكود هو الآتي:
Code:
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
),
onPressed: () => print("تم الضغط ✅"),
child: Text("اضغط هنا"),
);
بعد كده شغّل الأمر ده:
Code:
shorebird patch



هيساعدك تبعت التحديثات فورًا، تصلح الأخطاء بسرعة، وتدي انطباع احترافي جدًا عن تطبيقك

جربها بنفسك وشوف الفرق

التعديل الأخير: