توفر هذه المكتبة روابط صدأ آمنة لـ AppKit على MacOS (جودة بيتا ، قابلة للاستخدام إلى حد ما) و UIKit على iOS/TVOS (جودة ألفا ، انظر الريبو). إنه يحاول القيام بذلك بطريقة ، إذا قمت بالبرمجة للإطار من قبل (في Swift أو Objective-C) ، ستشعر بالمعرفة. هذا أمر صعب في الصدأ بسبب نموذج الملكية ، لكن بعض الترميز والافتراضات الإبداعية يمكن أن تجعلنا بعيدًا.
هذا موجود على Catse.io جزئيًا لتمكين المشروع من رؤية الاستخدام الأوسع ، والذي يمكنه إبلاغ التطوير. ومع ذلك ، فإن هذه المكتبة هي المراحل المبكرة حاليًا وقد تحتوي على أخطاء - استخدامك لها على مسؤوليتك الخاصة. ومع ذلك ، شريطة اتباع القواعد (فيما يتعلق بالذاكرة/الملكية) ، إنه جيد بالفعل لبعض التطبيقات. يحتوي المستودع الأساسي على ثروة من الأمثلة لمساعدتك في البدء.
مهم
إذا كنت تهاجر من 0.2 إلى 0.3 ، فيجب عليك انتخاب
appkitأوuikitكميزة فيCargo.toml. تم إجراء هذا التغيير لدعم المنصات التي ليست فقط MacOS/iOS/TVOS (على سبيل المثال ، Gnustep ، Airyx). إحدى هذه الميزات مطلوبة للعمل ؛ تم تخلفappkitلسهولة التطوير.
لاحظ أن هذا الصندوق يعتمد على وقت تشغيل الهدف-C. يتطلب التواصل مع وقت التشغيل كتل غير آمنة ؛ يعالج هذا الصندوق تلك التفاعلات غير الآمنة بالنسبة لك وتوفر غلافًا آمنًا ، ولكن باستخدام هذا الصندوق ، فأنت تفهم أن استخدام
unsafeأمر معطى وسيكون متفشيًا إلى حد ما لعناصر التحكم ملفوفة. هذا لا يعني أنه لا يمكنك تقييم أو مراجعة أو استجواب الاستخدام غير الآمن - فقط اعلم أنه يحدث ، وفي جزء كبير منه لن يزول. سيتم إغلاق القضايا المتعلقة بوجود غير آمن دون تعليق.
إذا كنت تتطلع إلى إنشاء مستندات لهذا على جهازك المحلي ، فستحتاج إلى ما يلي بسبب طريقة عمل علامات الميزات مع cargo doc :
RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features --open
use cacao :: appkit :: { App , AppDelegate } ;
use cacao :: appkit :: window :: Window ;
# [ derive ( Default ) ]
struct BasicApp {
window : Window
}
impl AppDelegate for BasicApp {
fn did_finish_launching ( & self ) {
self . window . set_minimum_content_size ( 400. , 400. ) ;
self . window . set_title ( "Hello World!" ) ;
self . window . show ( ) ;
}
}
fn main ( ) {
App :: new ( "com.hello.world" , BasicApp :: default ( ) ) . run ( ) ;
} للحصول على أمثلة أكثر شمولاً ، تحقق examples/ المجلد.
إذا كنت مهتمًا بمثال "حوض المطبخ" ، تحقق من Todos_List مع:
cargo run --example todos_list نظرًا للطريقة التي تعمل بها برامج AppKit و Uikit عادةً ، يتم تشجيعك على القيام بكمؤم عملك بدءًا من طريقة did_finish_launching() في AppDelegate . هذا يضمن أن التطبيق لديه وقت لتهيئة والقيام بأي التدبير المنزلي الضروري وراء الكواليس.
من حيث القطع العاملة في الغالب ، يعرض الجدول أدناه مستوى الدعم للميزات المختلفة. هذه القائمة ليست شاملة فقط بحكم تحديث الوثائق كونها الجحيم - لذلك يتم تشجيعك على التحقق من الوثائق التي تم بناؤها في التعليمات البرمجية لمزيد من المعلومات:
لاحظ أنه على الرغم من أن iOS لديها علامات فحص خضراء ، إلا أن بعض المكونات لا تزال غير محددة جيدًا (على سبيل المثال ، لا تزال المشاهدات/ViewControllers Alpha جدًا).
قد تتمكن المنصات غير Apple التي تشرق أو توفر شكلاً من أشكال AppKit من استخدام جزء كبير من دعم AppKit في هذه المكتبة.
| عنصر | وصف | appkit | iOS | tvos |
|---|---|---|---|---|
| برنامج | التهيئة والأحداث | ✅ | ✅ | |
| نافذة | البناء ، المناولة ، الأحداث | ✅ | ✅ | |
| منظر | البناء ، التصميم ، الأحداث | ✅ | ✅ | |
| ViewController | البناء ، أحداث دورة الحياة | ✅ | ✅ | |
| لون | ألوان مدعومة بالنظام ، وهم | ✅ | ✅ | |
| ListView | قائمة قابلة لإعادة الاستخدام مع صفوف مخبأة | ✅ | ||
| زر | التصميم والأحداث ودعم شريط الأدوات | ✅ | ||
| تسمية/textfield | تقديم النص وإدخاله | ✅ | ||
| Image/ImageView | التحميل ، الرسم ، إلخ | ✅ | ✅ | |
| شريط الأدوات | شريط الأدوات الأصلي الأساسي | ✅ | ||
| SplitViewController | وجهات النظر المنقسمة (Big Sur Friendly) | ✅ | ||
| WebView | غلاف ل WKWEBVIEW | ✅ | ||
| userDefaults | استمرار البيانات الصغيرة | ✅ | ✅ | |
| autolayout | عرض تخطيط للشاشات المختلفة | ✅ | ✅ |
فيما يلي قائمة بميزات الشحن التي يمكن تمكينها أو تعطيلها.
appkit : Links AppKit.framework .uikit : Links UIKit.framework (iOS/TVOS فقط).cloudkit : Links CloudKit.framework ويوفر بعض الأغطية حول وظائف CloudKit. حاليا غير ميزة كاملة.color_fallbacks : يوفر ألوانًا متاحة للأنظمة القديمة حيث لا توجد أنواع ألوان systemColor . هذه الميزة غير شائعة جدًا وربما لا تحتاجها.quicklook : Links QuickLook.framework ويقدم طرقًا لإنشاء صور معاينة للملفات.user-notifications : روابط UserNotifications.framework . لاحظ أن هذا يتطلب توقيع التطبيق الخاص بك ، ولن يعمل بدونه.webview : Links WebKit.framework ويوفر عنصر تحكم WebView مدعومًا بـ WKWebView . لا يتم دعم هذه الميزة على TVOS ، لأن النظام الأساسي لا يوجد لديه عنصر تحكم في عرض الويب. من المحتمل أيضًا أن يتم دعم هذه الميزة فقط لـ MacOS/iOS بسبب التحكم في WKWEBView ودعم متفاوت على المنصات غير Apple.webview-downloading-macos : يتيح تنزيل الملفات من WebView عبر واجهة خاصة. هذه ليست ميزة آمنة لمتجر التطبيقات ، لذا كن على دراية بذلك قبل التمكين. لا يتم دعم هذه الميزة على iOS (يقوم المستخدم بالتعامل مع التنزيلات بشكل مختلف تمامًا) أو TVOS (لا يوجد متصفح ويب على الإطلاق). لماذا لا تمدد قفص الكاكاو RS الحالي؟
سؤال جيد. في نهاية اليوم ، يرتبط هذا الصندوق (على ما أظن ، ويمكن لأي شخص تصحيحني إذا كنت مخطئًا) إلى حد ما إلى المؤازرة ، وأردت تجربة ما هو أفضل طريقة لتمثيل نموذج واجهة المستخدم الكاكاو في الصدأ. لا يتجاهل هذا الصندوق عملهم بالكامل ، سواء - يتم استخدام core_foundation و core_graphics داخليًا وإعادة تصدير للاستخدام العام.
لماذا يجب أن أكتب في الصدأ ، بدلاً من لغة X؟
في حالتي ، أريد أن أكون قادرًا على كتابة التطبيقات الأصلية لأجهزتي (والمنصة التي أحب بناء منتجات لها) دون أن يتم قفلها للكتابة بلغات خاصة بـ Apple ... ودون الكتابة في C/C ++ أو JavaScript (ملاحظة: مخطط الأدوات ، وليس اللغة - ES6/Typescript على ما يرام). أريد أن أفعل ذلك لأنني سئمت من ضرب جبل من العمل عندما أرغب في نقل تطبيقاتي إلى النظم الإيكولوجية الأخرى. أعتقد أن Rust يوفر نموذجًا (متزايدًا ، ولكن مهمًا) لمشاركة التعليمات البرمجية عبر المنصات والنظم الإيكولوجية دون التضحية بالأداء.
(هذا هو الجزء الذي يضيء فيه الإنترنت ويشدق حول مزيج من الإلكترون ، QT ، وهكذا - نحن لا نضايق هنا لأنه يتعرض للضرب حتى الموت في مكان آخر)
يعد هذا الصندوق مفيدًا للأشخاص الذين لا يحتاجون إلى الذهاب إلى النظام الإيكولوجي لـ Apple ، لكنهم يرغبون في نقل عملهم هناك ببعض السهولة النسبية. من غير المتوقع أن يرغب الجميع فجأة في إعادة كتابة تطبيقات MacOS/IOS/TVOS في Rust.
أليس الهدف سي ميت؟
نعم ، ولا.
صحيح أن Apple تفضل بالتأكيد Swift ، ولسبب وجيه (وأقول هذا كمحبي بلا خجل لـ Objective-C). مع ذلك ، سأفاجأ إذا لم يكن لدينا آخر 5+ سنوات من الدعم ؛ تسرع Apple في الانخفاض ، لكن إزالة وقت تشغيل الهدف-C سيتطلب الكثير من الوقت والجهد. ربما يقتلها سويفتوي ، من يدري. من المفترض أن يجعل الغلاف حول هذه الأشياء من السهل تبديل الواجهة الخلفية للاتصالات الأساسية كلما حان الوقت.
شيء واحد يجب ملاحظته هو أن Apple بدأت في إطلاق أطر عمل سريعة فقط. بالنسبة للحالات التي تحتاج فيها إلى هذه ، يجب أن يكون من الممكن القيام ببعض مزيج من الارتباط والسد - مما قد يعلم كيف سيحدث تبديل الواجهة الخلفية الأساسية في مرحلة ما.
قد يتفكك البعض أيضًا الهدف-C على أنه بطيء. لذلك ، سألاحظ ما يلي:
TL ؛ DR ربما يكون على ما يرام ، ولديك الصدأ لاحتياجات أدائك.
لماذا لا تلف Uikit فقط ، ثم تعتمد على المحفز؟
لم أر بعد تطبيقًا واحدًا حيث شعر المحفز بالرضا. الهدف جيد ، وإذا وصل الأمر إلى نقطة بدا فيها هذا الأمر وكأنه الطريق إلى الأمام (على سبيل المثال ، تقتل Apple Appkit فقط) فهذا بالتأكيد خيار.
لا يمكنك لف جميع السلوك الخاص بالمنصة هنا ...
صحيح! يحتوي كل عنصر تحكم في واجهة المستخدم على حقل objc ، والذي يمكنك استخدامه كفتحة للهروب - إذا لم يدعم عنصر التحكم شيئًا ما ، فأنت حر في الهبوط إلى وقت تشغيل Objective -C بنفسك والتعامل معه.
لماذا لا تستخدم الارتباطات لإنشاء هذه الأشياء تلقائيًا؟
لأغراض الاستكشاف الأولية ، قمت بمعظم هذا باليد ، حيث أردت أن أجد نهجًا يتناسب بشكل جيد في نموذج الصدأ قبل الالتزام بتوليد الربط. هذا شيء من المحتمل أن أركز عليه بعد ذلك الآن بعد أن عملت أشياء "بشكل جيد بما فيه الكفاية.
هل هذا يتعلق بـ Cacao ، المشروع السريع؟
لا. المشروع المشار إليه في هذا السؤال يهدف إلى تعيين أجزاء من الكاكاو و Uikit للتشغيل على Linux ، لكنه لم ير نشاطًا في وقت ما (كان رائعًا أيضًا!).
يشبه تسمية المشروع مفتوح المصدر في عام 2020 محاولة شراء مجال .com : كل شيء جيد. لحسن الحظ ، يمكن لمشاريع متعددة مشاركة اسم ... وهذا ما سيحدث هنا.
أليس هذا النوع من الغش في نموذج كائن الصدأ؟
يعتمد على كيفية النظر إليه. أنا شخصياً لا أهتم كثيرًا - تعد طبقة واجهة المستخدم الرسومية لهذه المنصات شرطًا صعبًا لدعم فئات معينة من المنتجات ، كما أن التخلي عنها تعني التخلي عن أدوات تم اختبارها في المعركة لأشياء مثل إمكانية الوصول وتكامل نظام التشغيل الأعمق. ومع ذلك ، هناك جهود داخلية لمحاولة جعل الأمور تحترم نموذج الصدأ لكيفية عمل الأشياء.
يمكنك التفكير في هذا على أنه مشابه لـ GTK-RS. إذا كنت ترغب في دعم أو تجربة طراز أكثر نقية ، فاطلب راجع Druid أو شيء من هذا القبيل. سائدا
مرخصة مزدوجة بموجب ترخيص MIT/MPL-2.0. راجع الملفات المناسبة في هذا المستودع لمزيد من المعلومات. Apple و Appkit و Uikit و Cocoa وغيرها من العلامات التجارية هي حقوق الطبع والنشر Apple ، Inc.
يمكنك متابعتي على Twitter أو مراسلتي عبر البريد الإلكتروني مع أسئلة لا تتناسب مع مشكلة هنا.