ترحيل مشروع بازل
[Bazel] (https://bazel.build) هو نظام بناء قامت جوجل بفتح مصادره في عام 2015. وهو أداة قوية تسمح لك ببناء واختبار البرمجيات من أي حجم، بسرعة وموثوقية. تستخدمه بعض المؤسسات الكبيرة مثل Spotify أو Tinder أو Lyft، ومع ذلك، فإنه يتطلب استثمارًا مقدمًا (أي تعلم التكنولوجيا) واستثمارًا مستمرًا (أي مواكبة تحديثات Xcode) لتقديمه وصيانته. وفي حين أن هذا الأمر مناسب لبعض المؤسسات التي تتعامل معه على أنه اهتمام شامل، إلا أنه قد لا يكون الأنسب لمؤسسات أخرى تريد التركيز على تطوير منتجاتها. على سبيل المثال، رأينا مؤسسات قام فريق منصة iOS لديها بتقديم بازل واضطروا إلى التخلي عنه بعد أن غادر المهندسون الذين قادوا هذا الجهد الشركة. موقف Apple من الاقتران القوي بين Xcode ونظام الإنشاء هو عامل آخر يجعل من الصعب الحفاظ على مشاريع Bazel مع مرور الوقت.
بدلًا من محاربة Xcode ومشاريع Xcode، يحتضن تويست ذلك. إنها نفس المفاهيم (مثل الأهداف والمخططات وإعدادات الإنشاء)، ولغة مألوفة (أي سويفت)، وتجربة بسيطة وممتعة تجعل صيانة المشاريع وتوسيع نطاقها مهمة الجميع وليس فقط فريق منصة iOS.
القواعد#
يستخدم بازل قواعد لتحديد كيفية بناء واختبار البرمجيات. تتم كتابة القواعد بلغة [Starlark] (https://github.com/bazelbuild/starlark)، وهي لغة شبيهة بلغة بايثون. يستخدم تويست لغة سويفت كلغة تكوين، والتي توفر للمطورين سهولة استخدام ميزات الإكمال التلقائي والتحقق من النوع والتحقق من صحة برمجيات Xcode. على سبيل المثال، تصف القاعدة التالية كيفية بناء مكتبة سويفت في بازل:
:::: مجموعة الرموز
swift_library(
name = "MyLibrary.library",
srcs = glob(["**/*.swift"]),
module_name = "MyLibrary"
)
let project = Project(
// ...
targets: [
.target(name: "MyLibrary", product: .staticLibrary, sources: ["**/*.swift"])
]
)
:::
إليك مثال آخر ولكن بمقارنة كيفية تعريف اختبارات الوحدة في بازل وتويست:
:::: مجموعة الرموز
ios_unit_test(
name = "MyLibraryTests",
bundle_id = "dev.tuist.MyLibraryTests",
minimum_os_version = "16.0",
test_host = "//MyApp:MyLibrary",
deps = [":MyLibraryTests.library"],
)
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.
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 لك.