ان كنتم تتكلمون عن الواجهات ، فإنه من الصعب جدا تصميمها لتظهر بنفس الشكل على منصتين مختلفتين
دائما ماكنت استخدم الـ Specifiers في تصميم الواجهات وتحجيم الكونترولز
مثلا ، عندما اصمم الواجهة واسوي لها debug على جوال اندرويد كانت تظهر بشكل مقارب جدا للمتوقع ، ولكن عندما اشغل الواجهة على الايفون او الايباد كانت تظهر بشكل غير منظم نوعا ما ، حيث ان احجام بعض الكونترول والmargin بينهم غير مثالي .
فكان نادرا ماتخلو الواجهات من الspecifiers التي تعطي قيم محددة بناء على المنصة .
(مثال ، تحديد قيمة محددة لحجم خط البوتون بناء على المنصة) :
<Button.FontSize>
<OnPlatform x:TypeArguments="x:double" iOS="15" Android="13" WinPhone="14" />
</Button.FontSize>
فطريقتي هي تصميم البرنامج بالكامل وعمل debug له على الاندرويد ، ثم عمل debug له على الiOS وضبط القيم لكل منصة.
فلا يوجد كود مثالي 100% يعطيك تصميم مطابق لما تريده على المنصتين لابد من استعمال محددات القيم مثل onPlatform , onidom
هذا كان من ناحية كتابة كود الواجهات (UI)
اما اكواد البرمجة (C#) فهي تعمل بشكل رائع على المنصتين ، ولكن في بعض الاحيان يجب ان تقوم بكتابة اكواد سي شارب تستهدف الiOS فقط او الـ Android فقط او حتى الـ Windows App ، ويكون ذلك باستعمال واحدة من ميزات لغة السي شارب ( C# preprocessor directives) ، او انشاء الـ Abstract classes ثم تقوم بعمل implement خاص لها على كل منصة حتى تقوم xamarin.forms بتحديد وتشغيل الimplement الخاص بالمنصة التي يعمل عليها برنامجك حاليا .(وهناك طرق اخرى)
وايضا هناك تنويه بخصوص xaml ،
xaml في WPF و UWP يختلف نوعا ما عن xamarin.forms
فxaml في xamarin.forms محدودة حيث لايوجد طريقة حتى الان لرسم path vector (اكثر شيئ محبط
) او تفعيل نظام الstatus او الstoryboard او الactions.
وايضا لايمكنك تصميم الواجهة بالسحب والافلات ، كل شيئ تكتبه بيدك، لكن تستطيع رؤية نتيجة ماتكتبه في شاشة الpreviewer او على جهازك مباشرة بستخدام tool (نسيت اسمها).
مع ذلك ، التقنية تستحق العمل بها حتى رغم وجود هذه الاستثناءات والحاجة الى بعض التدقيق وكتابة الاكواد الخاصة لضمان عمل البرنامج بالشكل المطلوب على مختلف المنصات ،
ولكن هذا التدقيق لايقارن ابدا بالمجهود والوقت المتطلب لإعادة صناعة برنامج من الصفر لمنصة اخرى . << الا اذا كان الوضع يتطلب صناعة برنامج من الصفر لمنصة اخرى.
في النهاية لاننسى قاعدة مايكروسوفت :-
إقتباس :Xamarin.Forms is best for:
- Data entry apps
- Prototypes and proofs-of-concept
- Apps that require little platform-specific functionality
- Apps where code sharing is more important than custom UI
Xamarin.iOS & Xamarin.Android are best for:
- Apps that require specialized interactions
- Apps with highly polished design
- Apps that use many platform-specific APIs
- Apps where custom UI is more important than code sharing
تحياتي