Ce este Carthage și cum poate optimiza dezvoltarea aplicațiilor?

Carthage este un dependency manager pentru proiectele iOS și macOS, care le permite dezvoltatorilor să integreze biblioteci terțe în aplicațiile lor într-un mod simplu și eficient. Spre deosebire de alte instrumente, precum CocoaPods, Carthage pune accent pe a fi minimalist și neinvaziv, ceea ce înseamnă că nu modifică structura proiectului și necesită doar un simplu fișier text, un Cartfile, care listează dependențele. Acest lucru l-a făcut o alegere populară printre dezvoltatorii care vor să păstreze controlul asupra configurației proiectului, beneficiind în același timp de biblioteci și framework-uri terțe.

Carthage funcționează prin construirea unor framework-uri binare, care pot fi apoi integrate direct în proiectele Xcode. Această abordare înseamnă că dezvoltatorii pot beneficia de timpi de build mai rapizi și de un proces de dezvoltare mai eficient. Cu Carthage, dependențele pot fi adăugate, actualizate și gestionate ușor, fără fișiere de configurare complexe sau modificări nedorite ale proiectului. În schimb, framework-urile construite se adaugă manual în Xcode. Acest lucru face din Carthage un instrument bun pentru cei care vor o soluție simplă, dar puternică, de gestionare a dependențelor în proiectele lor de dezvoltare iOS și macOS.

Carthage este un dependency manager descentralizat pentru proiectele iOS și macOS. Preia și construiește biblioteci terțe sub formă de framework-uri, pe care dezvoltatorul le adaugă apoi singur în proiectul Xcode, fără ca fișierul proiectului să fie modificat automat. Acest lucru oferă control deplin asupra structurii proiectului și poate oferi timpi de build mai rapizi, deoarece dependențele sunt construite doar atunci când sunt actualizate. Carthage este folosit în principal ca alternativă mai simplă la CocoaPods, în timp ce Swift Package Manager este soluția integrată a Apple pentru gestionarea pachetelor.

More about Carthage

Carthage este un dependency manager pentru iOS și macOS, care oferă un mod simplu și flexibil de integrare a bibliotecilor terțe în proiecte. Spre deosebire de alte instrumente care modifică automat configurația proiectului, Carthage pune accent pe o configurare minimă și le oferă dezvoltatorilor libertatea de a-și gestiona proiectele fără restricții inutile.

Din punct de vedere tehnic, Carthage funcționează construind framework-uri binare din codul sursă sau descărcând framework-uri deja construite, ceea ce le permite dezvoltatorilor să includă aceste framework-uri direct în proiectele lor Xcode. Acest lucru înseamnă că Carthage nu modifică fișierele proiectului, ci generează un folder „Carthage/Build” în care sunt stocate framework-urile compilate. Această abordare le oferă dezvoltatorilor control deplin asupra structurii proiectului și a dependențelor.

Carthage suportă trei funcții principale, fiecare oferind un mod diferit de gestionare a dependențelor:

  1. Construirea dependențelor: Carthage poate construi automat toate dependențele specificate într-un „Cartfile”. Acest lucru le permite dezvoltatorilor să se concentreze pe propriul cod, în timp ce Carthage se ocupă de compilarea bibliotecilor externe. Această funcție este ideală pentru proiectele care necesită mai multe biblioteci terțe.

  2. Actualizarea dependențelor: Cu o singură comandă, Carthage poate actualiza toate dependențele la cele mai noi versiuni care respectă cerințele de versiune din Cartfile. Acest lucru face ușoară menținerea bibliotecilor la zi, inclusiv cu corecturile de securitate, ceea ce este important pentru menținerea compatibilității și a securității.

  3. Integrarea framework-urilor: Carthage generează framework-uri pe care dezvoltatorul le adaugă singur în proiectul Xcode, de obicei în „Frameworks, Libraries, and Embedded Content”. Acest lucru necesită un pas manual, dar oferă o imagine completă asupra bibliotecilor exacte care fac parte din proiect și face ușoară valorificarea funcțiilor noi și a îmbunătățirilor din bibliotecile terțe.

Unul dintre cele mai mari puncte forte ale Carthage este simplitatea și flexibilitatea sa. Evitând modificările automate ale proiectului, Carthage le permite dezvoltatorilor să păstreze controlul asupra proiectelor lor. Acest lucru reduce riscul de conflicte în fișierul proiectului și face mai ușoară integrarea unor dependențe noi fără a perturba structurile de proiect existente.

Abordarea Carthage privind gestionarea dependențelor economisește, de asemenea, timp în munca de zi cu zi. Construind dependențele doar atunci când sunt adăugate sau actualizate și evitând modificările inutile ale proiectului, Carthage minimizează timpul și resursele necesare pentru întreținerea unui proiect. Acest lucru îl face un instrument bun pentru dezvoltatorii care vor să își optimizeze fluxurile de lucru și să se concentreze pe livrarea unui software de calitate ridicată.

În practică, Carthage a avut un impact semnificativ asupra modului în care dezvoltatorii gestionează dependențele în proiectele iOS și macOS. A fost folosit atât de echipe de dezvoltare mici, cât și de echipe mari, pentru a-și menține proiectele la zi, sigure și ușor de întreținut. Astăzi, însă, dezvoltarea Carthage a încetinit considerabil, iar majoritatea bibliotecilor vizează acum în primul rând Swift Package Manager.

În concluzie, Carthage este un instrument care combină simplitatea, flexibilitatea și eficiența într-o soluție ce face gestionarea dependențelor mai transparentă atât pentru dezvoltatorii individuali, cât și pentru echipele mari. Configurarea sa simplă și intervenția minimă în structura proiectului l-au făcut un instrument util în dezvoltarea aplicațiilor, unde sunt necesare integrări rapide și sigure.

Frequently asked questions about Carthage

Ce este Carthage și cum funcționează în practică?

Carthage este un dependency manager descentralizat pentru proiectele iOS, macOS, tvOS și watchOS scrise în Swift și Objective-C. Nu există un registru central de pachete. În schimb, fiecare dependență indică direct către un repository Git, de obicei pe GitHub.

Dependențele sunt specificate într-un fișier text numit Cartfile, aflat în folderul rădăcină al proiectului. Când este rulată comanda carthage update, Carthage găsește versiunile potrivite, preia codul sursă în folderul Carthage/Checkouts și construiește fiecare bibliotecă cu instrumentele de build proprii ale Xcode. Framework-urile finalizate sunt plasate în Carthage/Build.

Carthage nu modifică fișierul proiectului Xcode. Dezvoltatorul adaugă framework-urile construite în Frameworks, Libraries, and Embedded Content în target-ul relevant. Acest lucru oferă control deplin asupra configurației proiectului, dar necesită puțin mai multă muncă manuală decât instrumentele care fac integrarea automat.

Cum se instalează Carthage și cum se adaugă o bibliotecă?

Carthage se instalează cel mai des cu Homebrew, folosind comanda brew install carthage. Alternativ, un pachet de instalare poate fi descărcat din release-urile proiectului de pe GitHub.

O bibliotecă se adaugă de obicei în patru pași:

  • Fișierul Cartfile este creat în folderul rădăcină al proiectului, cu o linie precum github "Alamofire/Alamofire" ~> 5.0.
  • Comanda carthage update --use-xcframeworks --platform iOS preia și construiește biblioteca.
  • Fișierul .xcframework finalizat din Carthage/Build este tras în Frameworks, Libraries, and Embedded Content în target-ul aplicației.
  • Pentru framework-urile dinamice, se selectează Embed & Sign.

Operatorul ~> înseamnă că sunt acceptate versiuni mai noi atâta timp cât versiunea majoră rămâne aceeași. Biblioteca poate fi apoi folosită în cod cu import Alamofire.

Care este diferența dintre Cartfile și Cartfile.resolved?

Cartfile descrie de ce dependențe are nevoie proiectul și ce cerințe de versiune trebuie să îndeplinească acestea, de ex. ~> 5.0, >= 2.1 sau un anumit branch. Fișierul este editat manual și exprimă intenția.

Cartfile.resolved este generat automat și conține versiunile sau commit-urile exacte care au fost alese efectiv, inclusiv pentru dependențele dependențelor. Fișierul funcționează ca un lock, astfel încât toți membrii unei echipe și fiecare server de build primesc exact același cod.

Diferența se vede în comenzi:

  • carthage update găsește cele mai noi versiuni care se potrivesc cu Cartfile și scrie rezultatul în Cartfile.resolved.
  • carthage bootstrap preia și construiește exact versiunile listate în Cartfile.resolved.

De aceea, ambele fișiere trebuie păstrate în sistemul de control al versiunilor. Dependențele folosite doar în timpul dezvoltării, precum bibliotecile de test, pot fi plasate în Cartfile.private.

Cum construiește Carthage XCFrameworks și de ce contează acest lucru?

Anterior, Carthage construia așa-numitele fat frameworks, în care codul pentru dispozitivele fizice și pentru simulator era combinat într-un singur fișier cu instrumentul lipo. Acest lucru a încetat să funcționeze odată cu Xcode 12, deoarece atât dispozitivele, cât și simulatoarele de pe Apple Silicon folosesc arhitectura arm64, iar aceeași arhitectură nu poate apărea de două ori într-un singur fat framework.

Soluția este XCFrameworks, pe care Apple le-a introdus odată cu Xcode 11. Un XCFramework este un pachet cu un binar separat pentru fiecare platformă și variantă, precum dispozitivul iOS și simulatorul iOS. Începând cu Carthage 0.37, XCFrameworks se construiesc cu flag-ul --use-xcframeworks, de ex. carthage bootstrap --use-xcframeworks.

Rezultatul este plasat ca foldere .xcframework în Carthage/Build. Acestea se adaugă direct în target-ul aplicației, iar vechea fază de build cu carthage copy-frameworks nu mai este necesară.

Care este diferența dintre Carthage, CocoaPods și Swift Package Manager?

Cele trei instrumente rezolvă aceeași sarcină, dar în moduri diferite:

  • Carthage este descentralizat și preia dependențele direct din repository-urile Git specificate într-un Cartfile. Bibliotecile sunt construite ca framework-uri binare, iar proiectul Xcode nu este modificat. Integrarea se face manual.
  • CocoaPods folosește un registru central de biblioteci și un Podfile. Comanda pod install creează un workspace și modifică configurația proiectului, astfel încât integrarea are loc automat, dar este mai puțin transparentă. CocoaPods este acum în modul de mentenanță.
  • Swift Package Manager (SPM) este instrumentul propriu al Apple și este integrat în Xcode. Pachetele se adaugă direct în Xcode sau se descriu într-un Package.swift și nu este necesară nicio instalare suplimentară.

Carthage este util atunci când se dorește control deplin asupra fișierului proiectului și timpi de build mai scurți, deoarece dependențele sunt construite doar când sunt actualizate. Pentru proiectele noi, SPM este acum alegerea cea mai folosită, deoarece majoritatea bibliotecilor îl suportă.

Cum pot fi menținuți scăzuți timpii de build cu Carthage?

Deoarece Carthage construiește implicit dependențele din codul sursă, primul build poate dura mult. Mai multe opțiuni pot reduce timpul:

  • --platform iOS limitează build-ul la platformele pe care proiectul le folosește efectiv.
  • --cache-builds sare peste dependențele care au fost deja construite în aceeași versiune, astfel încât sunt reconstruite doar bibliotecile modificate.
  • Dependențele individuale pot fi actualizate separat, de ex. cu carthage update Alamofire, în loc să fie actualizate toate.
  • Multe biblioteci oferă framework-uri deja construite în release-urile lor de pe GitHub, pe care Carthage le descarcă automat. SDK-urile closed-source pot fi specificate cu binary și un URL către o specificație JSON.

Pe serverele de build, folderul Carthage/Build poate fi, de asemenea, pus în cache între rulări. Multe echipe țin folderul în afara Git prin .gitignore și îl recreează cu carthage bootstrap.

Carthage for dummies

Carthage este un instrument care ajută la organizarea și gestionarea micilor blocuri de construcție din care sunt făcute aplicațiile, numite „dependențe”. Imaginează-ți că faci o aplicație care are nevoie de câteva piese gata făcute, pe care alții le-au creat deja, ca să funcționeze mai bine. Carthage ajută la preluarea acestor piese și la ținerea evidenței lor, astfel încât să nu trebuiască făcute de la zero. Funcționează puțin ca un bibliotecar care ține evidența tuturor cărților necesare pentru un proiect, astfel încât scriitorul să se poată concentra pe propria poveste. Face dezvoltarea aplicațiilor mai ușoară și mai rapidă, pentru că munca altora poate fi reutilizată, asigurându-se în același timp că totul se potrivește.

Lasă un comentariu