გადადით შინაარსზე

გენერირებული პროექტები

Tuist-ის გენერირებული პროექტები არის საიმედო ალტერნატივა, რომელიც ეხმარება ამ გამოწვევების გადალახვას სირთულისა და ხარჯების მისაღებ დონეზე შენარჩუნებით. ის Xcode-ის პროექტებს ფუნდამენტურ ელემენტად მიიჩნევს, რაც უზრუნველყოფს მდგრადობას Xcode-ის მომავალი განახლებების მიმართ და იყენებს Xcode-ის პროექტების გენერაციას, რათა გუნდებს შესთავაზოს მოდულარიზაციაზე ორიენტირებული დეკლარატიული API. Tuist იყენებს პროექტის დეკლარაციას მოდულარიზაციის სირთულეების გასამარტივებლად, ისეთი სამუშაო პროცესების ოპტიმიზაციისთვის, როგორიცაა კომპილაცია ან ტესტირება სხვადასხვა გარემოში, და ხელს უწყობს Xcode-ის პროექტების ევოლუციის გამარტივებას და დემოკრატიზაციას.

როგორ მუშაობს?#

გენერირებულ პროექტებთან სამუშაოს დასაწყებად, თქვენ მხოლოდ უნდა განსაზღვროთ თქვენი პროექტი Tuist-ის დომენური სპეციფიკური ენის (DSL) გამოყენებით. ეს გულისხმობს ისეთი მანიფესტური ფაილების გამოყენებას, როგორიცაა Workspace.swift ან Project.swift. თუ ადრე მუშაობდით Swift Package Manager-თან, მიდგომა ძალიან მსგავსია.

პროექტის განსაზღვრის შემდეგ, Tuist გთავაზობთ სხვადასხვა სამუშაო პროცესს მისი მართვისა და ურთიერთქმედებისთვის:

  • გენერირება: ეს არის საბაზისო სამუშაო პროცესი. გამოიყენეთ ის Xcode-თან თავსებადი Xcode-ის პროექტის შესაქმნელად.
  • კომპილაცია: ეს სამუშაო პროცესი არა მხოლოდ აგენერირებს Xcode-ის პროექტს, არამედ იყენებს xcodebuild-ს მის კომპილირებისთვის.
  • ტესტირება: კომპილაციის სამუშაო პროცესის მსგავსად, ეს არა მხოლოდ აგენერირებს Xcode-ის პროექტს, არამედ იყენებს xcodebuild-ს მის ტესტირებისთვის.

გამოწვევები Xcode-ის პროექტებთან#

Xcode-ის პროექტების ზრდასთან ერთად, ორგანიზაციებმა შეიძლება წარმოადგინონ პროდუქტიულობის კლება რამდენიმე ფაქტორის გამო, მათ შორის არასანდო ინკრემენტული კომპილაციები, Xcode-ის გლობალური ქეშის ხშირი გასუფთავება პრობლემების შემთხვევაში და მყიფე პროექტის კონფიგურაციები. სწრაფი ფუნქციების განვითარების შესანარჩუნებლად, ორგანიზაციები ჩვეულებრივ სხვადასხვა სტრატეგიას იკვლევენ.

ზოგიერთი ორგანიზაცია ირჩევს კომპილატორის გვერდის ავლით პლატფორმის აბსტრაქციას JavaScript-ზე დაფუძნებული დინამიური გარემოების გამოყენებით, მაგალითად React Native. მიუხედავად იმისა, რომ ეს მიდგომა შეიძლება ეფექტური იყოს, ის ართულებს პლატფორმის ნატიური ფუნქციების წვდომას. სხვა ორგანიზაციები ირჩევენ კოდის ბაზის მოდულარიზაციას, რაც ეხმარება ცხადი საზღვრების დადგენას, კოდის ბაზასთან მუშაობის გაადვილებას და კომპილაციის დროის საიმედოობის გაუმჯობესებას. თუმცა, Xcode-ის პროექტის ფორმატი არ არის განკუთვნილი მოდულარობისთვის და იწვევს იმპლიციტურ კონფიგურაციებს, რომელთა გაგებაც ცოტას შეუძლია და ხშირ კონფლიქტებს. ეს იწვევს ცუდ „bus factor“-ს და მიუხედავად იმისა, რომ ინკრემენტული კომპილაციები შეიძლება გაუმჯობესდეს, დეველოპერებმა მაინც ხშირად შეიძლება გაასუფთაონ Xcode-ის კომპილაციის ქეში (ე.ი. derived data), როდესაც კომპილაციები ვერ ხერხდება. ამის გადასაჭრელად, ზოგიერთი ორგანიზაცია ირჩევს Xcode-ის კომპილაციის სისტემის მიტოვებას და ალტერნატივების, როგორიცაა Buck ან Bazel, ათვისებას. თუმცა, ეს თან ახლავს მაღალ სირთულეს და მოვლის ტვირთს.

ალტერნატივები#

Swift Package Manager#

მიუხედავად იმისა, რომ Swift Package Manager (SPM) ძირითადად დამოკიდებულებებზეა ორიენტირებული, Tuist სხვა მიდგომას სთავაზობს. Tuist-ით თქვენ არა მხოლოდ განსაზღვრავთ პაკეტებს SPM-თან ინტეგრაციისთვის; თქვენ ქმნით თქვენს პროექტებს ისეთი ნაცნობი კონცეფციების გამოყენებით, როგორიცაა პროექტები, სამუშაო სივრცეები, სამიზნეები და სქემები.

XcodeGen#

XcodeGen არის სპეციალიზებული პროექტის გენერატორი, რომელიც შექმნილია კოლაბორატიულ Xcode-ის პროექტებში კონფლიქტების შესამცირებლად და Xcode-ის შიდა მუშაობის ზოგიერთი სირთულის გასამარტივებლად. თუმცა, პროექტები განისაზღვრება სერიალიზებადი ფორმატების გამოყენებით, როგორიცაა YAML. Swift-ისგან განსხვავებით, ეს არ აძლევს დეველოპერებს საშუალებას ააგონ აბსტრაქციები ან შემოწმებები დამატებითი ინსტრუმენტების ჩართვის გარეშე. მიუხედავად იმისა, რომ XcodeGen გთავაზობთ დამოკიდებულებების შიდა წარმოდგენაზე ასახვის გზას ვალიდაციისა და ოპტიმიზაციისთვის, ის მაინც აქვეყნებს დეველოპერებს Xcode-ის ნიუანსებთან. ეს შეიძლება XcodeGen-ს შესაფერის საფუძვლად აქციოს ინსტრუმენტების აგებისთვის, როგორც ეს Bazel-ის საზოგადოებაში ჩანს, მაგრამ ის არ არის ოპტიმალური ინკლუზიური პროექტის ევოლუციისთვის, რომელიც მიზნად ისახავს ჯანსაღი და პროდუქტიული გარემოს შენარჩუნებას.

Bazel#

Bazel არის გაწინაურებული კომპილაციის სისტემა, რომელიც ცნობილია თავისი დისტანციური ქეშირების ფუნქციებით და პოპულარობას იძენს Swift-ის საზოგადოებაში ძირითადად ამ შესაძლებლობის გამო. თუმცა, Xcode-ისა და მისი კომპილაციის სისტემის შეზღუდული გაფართოებადობის გათვალისწინებით, მისი Bazel-ის სისტემით ჩანაცვლება მნიშვნელოვან ძალისხმევასა და მოვლას მოითხოვს. მხოლოდ რამდენიმე კომპანიას, რომელსაც აქვს საკმარისი რესურსები, შეუძლია ამ დანახარჯის ატანა, რაც ჩანს Bazel-ის Xcode-თან ინტეგრირებაში მნიშვნელოვანი ინვესტიციების ჩამდებ ფირმების შერჩევითი სიიდან. საინტერესოა, რომ საზოგადოებამ შექმნა ინსტრუმენტი, რომელიც იყენებს Bazel-ის XcodeGen-ს Xcode-ის პროექტის გენერირებისთვის. ეს იწვევს გადაქცევების რთულ ჯაჭვს: Bazel-ის ფაილებიდან XcodeGen YAML-მდე და საბოლოოდ Xcode-ის პროექტებამდე. ასეთი მრავალშრიანი არაპირდაპირობა ხშირად ართულებს პრობლემების აღმოფხვრას, რაც პრობლემების დიაგნოსტიკასა და გადაჭრას უფრო რთულს ხდის.