Какво е Carthage и как може да оптимизира разработката на приложения?

Carthage е мениджър на зависимости за iOS и macOS проекти, който позволява на разработчиците да интегрират библиотеки от трети страни в своите приложения по прост и ефективен начин. За разлика от други инструменти като CocoaPods Carthage се стреми да бъде минималистичен и ненатрапчив, което означава, че не променя структурата на проекта и изисква само обикновен текстов файл – Cartfile, в който са изброени зависимостите. Това го е превърнало в популярен избор сред разработчиците, които искат да запазят контрола върху настройката на проекта си, като същевременно се възползват от библиотеки и frameworks от трети страни.

Carthage работи, като изгражда двоични frameworks, които след това могат да бъдат интегрирани директно в Xcode проекти. Този подход означава, че разработчиците могат да се възползват от по-кратко време за изграждане и по-рационализиран процес на разработка. С Carthage зависимостите могат лесно да бъдат добавяни, актуализирани и управлявани без сложни конфигурационни файлове или нежелани промени в проекта. В замяна изградените frameworks се добавят в Xcode ръчно. Това прави Carthage добър инструмент за онези, които искат просто, но мощно решение за управление на зависимости в своите проекти за разработка за iOS и macOS.

Carthage е децентрализиран мениджър на зависимости за iOS и macOS проекти. Той извлича и изгражда библиотеки от трети страни като frameworks, които разработчикът след това сам добавя към своя Xcode проект, без файлът на проекта да бъде променян автоматично. Това дава пълен контрол върху структурата на проекта и може да осигури по-кратко време за изграждане, защото зависимостите се изграждат само когато бъдат актуализирани. Carthage се използва главно като по-проста алтернатива на CocoaPods, докато Swift Package Manager е вграденото решение на Apple за управление на пакети.

More about Carthage

Carthage е мениджър на зависимости за iOS и macOS, който предлага прост и гъвкав начин за интегриране на библиотеки от трети страни в проектите. За разлика от други инструменти, които променят настройката на проекта автоматично, Carthage се фокусира върху минимална настройка и дава на разработчиците свободата да управляват проектите си без ненужни ограничения.

Технически Carthage работи, като изгражда двоични frameworks от изходния код или изтегля предварително изградени такива, което позволява на разработчиците да включват тези frameworks директно в своите Xcode проекти. Това означава, че Carthage не променя файловете на проекта, а вместо това генерира папка „Carthage/Build“, в която се съхраняват компилираните frameworks. Този подход дава на разработчиците пълен контрол върху структурата и зависимостите на техните проекти.

Carthage поддържа три основни функции, всяка от които предлага различен начин за обработка на зависимостите:

  1. Изграждане на зависимости: Carthage може автоматично да изгради всички зависимости, посочени в „Cartfile“. Това позволява на разработчиците да се съсредоточат върху собствения си код, докато Carthage се грижи за компилирането на външните библиотеки. Тази функция е идеална за проекти, които изискват няколко библиотеки от трети страни.

  2. Актуализиране на зависимости: С една-единствена команда Carthage може да актуализира всички зависимости до най-новите версии, които отговарят на изискванията за версии в Cartfile. Това улеснява поддържането на библиотеките актуални, включително с корекциите на сигурността, което е важно за поддържане на съвместимостта и сигурността.

  3. Интегриране на frameworks: Carthage генерира frameworks, които разработчикът сам добавя към Xcode проекта, обикновено в „Frameworks, Libraries, and Embedded Content“. Това изисква ръчна стъпка, но дава пълна представа кои точно библиотеки са част от проекта и улеснява възползването от новите функции и подобрения в библиотеките от трети страни.

Една от най-големите силни страни на Carthage е неговата простота и гъвкавост. Като избягва автоматизираните промени в проекта, Carthage позволява на разработчиците да запазят контрола върху своите проекти. Това намалява риска от конфликти във файла на проекта и улеснява интегрирането на нови зависимости, без да се нарушават съществуващите структури на проекта.

Подходът на Carthage към управлението на зависимости спестява време и в ежедневната работа. Като изгражда зависимостите само когато те бъдат добавени или актуализирани и избягва ненужни промени в проекта, Carthage свежда до минимум времето и ресурсите, необходими за поддръжката на проекта. Това го прави добър инструмент за разработчици, които искат да оптимизират работните си процеси и да се съсредоточат върху доставянето на висококачествен софтуер.

На практика Carthage оказа значително влияние върху начина, по който разработчиците управляват зависимостите в iOS и macOS проекти. Той се използва както от малки, така и от големи екипи за разработка, за да поддържат проектите си актуални, сигурни и лесни за поддръжка. Днес обаче развитието на Carthage се е забавило значително и повечето библиотеки вече са насочени преди всичко към Swift Package Manager.

В обобщение, Carthage е инструмент, който съчетава простота, гъвкавост и ефективност в решение, което прави управлението на зависимости по-прозрачно както за отделни разработчици, така и за големи екипи. Простата му настройка и минималната намеса в структурата на проекта са го превърнали в полезен инструмент в разработката на приложения, където са необходими бързи и сигурни интеграции.

Frequently asked questions about Carthage

Какво е Carthage и как работи на практика?

Carthage е децентрализиран мениджър на зависимости за iOS, macOS, tvOS и watchOS проекти, написани на Swift и Objective-C. Няма централен регистър на пакети. Вместо това всяка зависимост сочи директно към Git хранилище, обикновено в GitHub.

Зависимостите се посочват в текстов файл с име Cartfile в основната папка на проекта. Когато се изпълни командата carthage update, Carthage намира подходящи версии, извлича изходния код в папката Carthage/Checkouts и изгражда всяка библиотека със собствените инструменти за изграждане на Xcode. Готовите frameworks се поставят в Carthage/Build.

Carthage не променя файла на Xcode проекта. Разработчикът добавя изградените frameworks в Frameworks, Libraries, and Embedded Content в съответния target. Това дава пълен контрол върху настройката на проекта, но изисква малко повече ръчна работа в сравнение с инструментите, които интегрират автоматично.

Как се инсталира Carthage и как се добавя библиотека?

Carthage най-често се инсталира с Homebrew чрез командата brew install carthage. Като алтернатива може да се изтегли инсталационен пакет от releases на проекта в GitHub.

Библиотека обикновено се добавя в четири стъпки:

  • В основната папка на проекта се създава файлът Cartfile с ред като github "Alamofire/Alamofire" ~> 5.0.
  • Командата carthage update --use-xcframeworks --platform iOS извлича и изгражда библиотеката.
  • Готовият .xcframework от Carthage/Build се плъзга в Frameworks, Libraries, and Embedded Content в target на приложението.
  • За динамични frameworks се избира Embed & Sign.

Операторът ~> означава, че се приемат по-нови версии, докато основната версия остава същата. След това библиотеката може да се използва в кода с import Alamofire.

Каква е разликата между Cartfile и Cartfile.resolved?

Cartfile описва от кои зависимости се нуждае проектът и на какви изисквания за версии трябва да отговарят те, напр. ~> 5.0, >= 2.1 или конкретен branch. Файлът се редактира ръчно и изразява намерението.

Cartfile.resolved се генерира автоматично и съдържа точните версии или commits, които действително са избрани, включително за собствените зависимости на зависимостите. Файлът действа като заключване, така че всички в екипа и всеки сървър за изграждане получават точно същия код.

Разликата личи в командите:

  • carthage update намира най-новите версии, които съответстват на Cartfile, и записва резултата в Cartfile.resolved.
  • carthage bootstrap извлича и изгражда точно версиите, посочени в Cartfile.resolved.

Затова и двата файла трябва да се съхраняват в системата за контрол на версиите. Зависимостите, които се използват само по време на разработката, например библиотеки за тестване, могат да бъдат поставени в Cartfile.private.

Как Carthage изгражда XCFrameworks и защо това е важно?

Преди Carthage изграждаше т.нар. fat frameworks, в които кодът за физически устройства и за симулатора беше обединен в един файл с инструмента lipo. Това спря да работи с Xcode 12, защото както устройствата, така и симулаторите на Apple Silicon използват архитектурата arm64, а една и съща архитектура не може да се среща два пъти в един fat framework.

Решението са XCFrameworks, които Apple въведе с Xcode 11. XCFramework е пакет с отделен двоичен файл за всяка платформа и вариант, например iOS устройство и iOS симулатор. От Carthage 0.37 XCFrameworks се изграждат с флага --use-xcframeworks, напр. carthage bootstrap --use-xcframeworks.

Резултатът се поставя като папки .xcframework в Carthage/Build. Те се добавят директно към target на приложението, а предишната фаза на изграждане с carthage copy-frameworks вече не е необходима.

Каква е разликата между Carthage, CocoaPods и Swift Package Manager?

Трите инструмента решават една и съща задача, но по различни начини:

  • Carthage е децентрализиран и извлича зависимостите директно от Git хранилищата, посочени в Cartfile. Библиотеките се изграждат като двоични frameworks, а Xcode проектът не се променя. Интеграцията се извършва ръчно.
  • CocoaPods използва централен регистър на библиотеки и Podfile. Командата pod install създава workspace и променя настройката на проекта, така че интеграцията става автоматично, но е по-малко прозрачна. CocoaPods вече е в режим на поддръжка.
  • Swift Package Manager (SPM) е собственият инструмент на Apple и е вграден в Xcode. Пакетите се добавят директно в Xcode или се описват в Package.swift, като не е необходима допълнителна инсталация.

Carthage е полезен, когато се търсят пълен контрол върху файла на проекта и по-кратко време за изграждане, защото зависимостите се изграждат само при актуализиране. За нови проекти SPM вече е най-широко използваният избор, тъй като повечето библиотеки го поддържат.

Как може времето за изграждане с Carthage да се поддържа ниско?

Тъй като Carthage по подразбиране изгражда зависимостите от изходния код, първото изграждане може да отнеме много време. Няколко опции могат да намалят времето:

  • --platform iOS ограничава изграждането до платформите, които проектът действително използва.
  • --cache-builds пропуска зависимостите, които вече са изградени в същата версия, така че се изграждат отново само променените библиотеки.
  • Отделни зависимости могат да бъдат актуализирани поотделно, напр. с carthage update Alamofire, вместо да се актуализират всички.
  • Много библиотеки предоставят предварително изградени frameworks в своите GitHub releases, които Carthage изтегля автоматично. SDK със затворен код могат да бъдат посочени с binary и URL към JSON спецификация.

На сървърите за изграждане папката Carthage/Build може също да бъде кеширана между изпълненията. Много екипи държат папката извън Git чрез .gitignore и я пресъздават с carthage bootstrap.

Carthage for dummies

Carthage е инструмент, който помага да се организират и управляват малките градивни елементи, от които са съставени приложенията, наречени „зависимости“. Представете си, че създавате приложение, което се нуждае от някои готови части, които други вече са създали, за да работи по-добре. Carthage помага тези части да бъдат извлечени и проследени, така че да не се налага да бъдат правени от нулата. Той работи малко като библиотекар, който следи всички книги, необходими за даден проект, така че писателят да може да се съсредоточи върху собствената си история. Това прави разработването на приложения по-лесно и по-бързо, защото работата на други хора може да бъде използвана повторно, като същевременно се гарантира, че всичко пасва.

Вашият коментар