Skip to content

الترجمة 🌍

ساهم في ترجمة هذه الصفحة أو تحسينها.

ساهم

ترحيل مشروع بازل

[Bazel] (https://bazel.build) هو نظام بناء قامت جوجل بفتح مصادره في عام 2015. وهو أداة قوية تسمح لك ببناء واختبار البرمجيات من أي حجم، بسرعة وموثوقية. تستخدمه بعض المؤسسات الكبيرة مثل Spotify أو Tinder أو Lyft، ومع ذلك، فإنه يتطلب استثمارًا مقدمًا (أي تعلم التكنولوجيا) واستثمارًا مستمرًا (أي مواكبة تحديثات Xcode) لتقديمه وصيانته. وفي حين أن هذا الأمر مناسب لبعض المؤسسات التي تتعامل معه على أنه اهتمام شامل، إلا أنه قد لا يكون الأنسب لمؤسسات أخرى تريد التركيز على تطوير منتجاتها. على سبيل المثال، رأينا مؤسسات قام فريق منصة iOS لديها بتقديم بازل واضطروا إلى التخلي عنه بعد أن غادر المهندسون الذين قادوا هذا الجهد الشركة. موقف Apple من الاقتران القوي بين Xcode ونظام الإنشاء هو عامل آخر يجعل من الصعب الحفاظ على مشاريع Bazel مع مرور الوقت.

::: تلميح تكمن الفرادة في فرادتها

بدلًا من محاربة Xcode ومشاريع Xcode، يحتضن تويست ذلك. إنها نفس المفاهيم (مثل الأهداف والمخططات وإعدادات الإنشاء)، ولغة مألوفة (أي سويفت)، وتجربة بسيطة وممتعة تجعل صيانة المشاريع وتوسيع نطاقها مهمة الجميع وليس فقط فريق منصة iOS.

:::

القواعد

يستخدم بازل قواعد لتحديد كيفية بناء واختبار البرمجيات. تتم كتابة القواعد بلغة [Starlark] (https://github.com/bazelbuild/starlark)، وهي لغة شبيهة بلغة بايثون. يستخدم تويست لغة سويفت كلغة تكوين، والتي توفر للمطورين سهولة استخدام ميزات الإكمال التلقائي والتحقق من النوع والتحقق من صحة برمجيات Xcode. على سبيل المثال، تصف القاعدة التالية كيفية بناء مكتبة سويفت في بازل:

txt
swift_library(
    name = "MyLibrary.library",
    srcs = glob(["**/*.swift"]),
    module_name = "MyLibrary"
)
swift
let project = Project(
    // ...
    targets: [
        .target(name: "MyLibrary", product: .staticLibrary, sources: ["**/*.swift"])
    ]
)

إليك مثال آخر ولكن بمقارنة كيفية تعريف اختبارات الوحدة في بازل وتويست:

txt
ios_unit_test(
    name = "MyLibraryTests",
    bundle_id = "dev.tuist.MyLibraryTests",
    minimum_os_version = "16.0",
    test_host = "//MyApp:MyLibrary",
    deps = [":MyLibraryTests.library"],
)
swift
let project = Project(
    // ...
    targets: [
        .target(
            name: "MyLibraryTests",
            destinations: .iOS,
            product: .unitTests,
            bundleId: "dev.tuist.MyLibraryTests",
            sources: "Tests/MyLibraryTests/**",
            dependencies: [
                .target(name: "MyLibrary"),
            ]
        )
    ]
)

تبعيات Swift Package Manager

في Bazel، يمكنك استخدام [rules_swift_swift_package_manager]](https://github.com/cgrindel/rules_swift_package_manager) Gazelle المكوّن الإضافي لاستخدام حزم سويفت كتبعيات. يتطلب المكون الإضافي Package.swift كمصدر للحقيقة للتبعيات. واجهة تويست مشابهة لواجهة بازل بهذا المعنى. يمكنك استخدام الأمر tuist install لحل وسحب تبعيات الحزمة. بعد اكتمال عملية الحل، يمكنك بعد ذلك إنشاء المشروع باستخدام الأمر tuist gener.

bash
tuist install # Fetch dependencies defined in Tuist/Package.swift
tuist generate # Generate an Xcode project

توليد المشاريع

يوفّر المجتمع مجموعة من القواعد، rules_xcodeproj، لتوليد مشاريع Xcode من مشاريع بازل المعلنة. على عكس Bazel، حيث تحتاج إلى إضافة بعض التهيئة إلى ملف BUILD ، لا يتطلب Tuist أي تهيئة على الإطلاق. يمكنك تشغيل tuist gener في الدليل الجذر لمشروعك، وسيقوم Tuist بإنشاء مشروع Xcode لك.

Released under the MIT License.