Mikä on Carthage ja miten se voi optimoida sovelluskehitystä?

Carthage on iOS- ja macOS-projektien riippuvuuksienhallintatyökalu, jonka avulla kehittäjät voivat integroida kolmannen osapuolen kirjastoja sovelluksiinsa yksinkertaisesti ja tehokkaasti. Toisin kuin muut työkalut, kuten CocoaPods, Carthage pyrkii olemaan minimalistinen ja huomaamaton, mikä tarkoittaa, ettei se muuta projektin rakennetta ja vaatii vain yksinkertaisen tekstitiedoston, Cartfilen, johon riippuvuudet listataan. Tämä on tehnyt siitä suositun valinnan kehittäjille, jotka haluavat säilyttää projektiasetustensa hallinnan ja samalla hyödyntää kolmannen osapuolen kirjastoja ja frameworkeja.

Carthage toimii buildaamalla binäärisiä frameworkeja, jotka voidaan sitten integroida suoraan Xcode-projekteihin. Tämän lähestymistavan ansiosta kehittäjät voivat hyötyä nopeammista build-ajoista ja virtaviivaisemmasta kehitysprosessista. Carthagen avulla riippuvuuksia voi helposti lisätä, päivittää ja hallita ilman monimutkaisia konfiguraatiotiedostoja tai ei-toivottuja muutoksia projektiin. Vastineeksi buildatut frameworkit lisätään Xcodeen manuaalisesti. Tämä tekee Carthagesta hyvän työkalun niille, jotka haluavat yksinkertaisen mutta tehokkaan riippuvuuksienhallintaratkaisun iOS- ja macOS-kehitysprojekteihinsa.

Carthage on hajautettu riippuvuuksienhallintatyökalu iOS- ja macOS-projekteille. Se hakee ja buildaa kolmannen osapuolen kirjastoja frameworkeiksi, jotka kehittäjä sitten lisää itse Xcode-projektiinsa ilman, että projektitiedostoa muutetaan automaattisesti. Tämä antaa täyden hallinnan projektin rakenteeseen ja voi nopeuttaa build-aikoja, koska riippuvuudet buildataan vain, kun niitä päivitetään. Carthagea käytetään pääasiassa CocoaPodsin yksinkertaisempana vaihtoehtona, kun taas Swift Package Manager on Applen sisäänrakennettu ratkaisu pakettien hallintaan.

Lisää Carthage:stä

Carthage on riippuvuuksienhallintatyökalu iOS:lle ja macOS:lle, ja se tarjoaa yksinkertaisen ja joustavan tavan integroida kolmannen osapuolen kirjastoja projekteihin. Toisin kuin muut työkalut, jotka muuttavat projektiasetuksia automaattisesti, Carthage keskittyy minimaaliseen käyttöönottoon ja antaa kehittäjille vapauden hallita projektejaan ilman tarpeettomia rajoituksia.

Teknisesti Carthage toimii buildaamalla binäärisiä frameworkeja lähdekoodista tai lataamalla valmiiksi buildattuja, minkä ansiosta kehittäjät voivat sisällyttää nämä frameworkit suoraan Xcode-projekteihinsa. Tämä tarkoittaa, ettei Carthage muuta projektitiedostoja, vaan se luo ”Carthage/Build”-kansion, johon käännetyt frameworkit tallennetaan. Tämä lähestymistapa antaa kehittäjille täyden hallinnan projektirakenteeseensa ja riippuvuuksiinsa.

Carthage tukee kolmea päätoimintoa, joista kukin tarjoaa eri tavan käsitellä riippuvuuksia:

  1. Riippuvuuksien buildaaminen: Carthage voi automaattisesti buildata kaikki ”Cartfile”-tiedostossa määritetyt riippuvuudet. Näin kehittäjät voivat keskittyä omaan koodiinsa, kun Carthage hoitaa ulkoisten kirjastojen kääntämisen. Tämä toiminto sopii erinomaisesti projekteihin, jotka tarvitsevat useita kolmannen osapuolen kirjastoja.

  2. Riippuvuuksien päivittäminen: Yhdellä komennolla Carthage voi päivittää kaikki riippuvuudet uusimpiin versioihin, jotka täyttävät Cartfilen versiovaatimukset. Tämä helpottaa kirjastojen pitämistä ajan tasalla tietoturvakorjauksineen, mikä on tärkeää yhteensopivuuden ja tietoturvan ylläpitämiseksi.

  3. Frameworkien integrointi: Carthage luo frameworkeja, jotka kehittäjä lisää itse Xcode-projektiin, tyypillisesti kohtaan ”Frameworks, Libraries, and Embedded Content”. Tämä vaatii manuaalisen vaiheen, mutta antaa täyden näkyvyyden siihen, mitkä kirjastot tarkalleen ovat osa projektia, ja helpottaa kolmannen osapuolen kirjastojen uusien ominaisuuksien ja parannusten hyödyntämistä.

Yksi Carthagen suurimmista vahvuuksista on sen yksinkertaisuus ja joustavuus. Välttämällä automaattisia projektimuutoksia Carthage antaa kehittäjien säilyttää projektiensa hallinnan. Tämä vähentää projektitiedoston konfliktien riskiä ja helpottaa uusien riippuvuuksien integroimista häiritsemättä olemassa olevia projektirakenteita.

Carthagen lähestymistapa riippuvuuksien hallintaan säästää myös aikaa päivittäisessä työssä. Koska Carthage buildaa riippuvuudet vain silloin, kun niitä lisätään tai päivitetään, ja välttää tarpeettomia projektimuutoksia, se minimoi projektin ylläpitoon tarvittavan ajan ja resurssit. Tämä tekee siitä hyvän työkalun kehittäjille, jotka haluavat optimoida työnkulkujaan ja keskittyä laadukkaan ohjelmiston toimittamiseen.

Käytännössä Carthagella on ollut merkittävä vaikutus siihen, miten kehittäjät hallitsevat riippuvuuksia iOS- ja macOS-projekteissa. Sekä pienet että suuret kehitystiimit ovat käyttäneet sitä pitääkseen projektinsa ajan tasalla, turvallisina ja helposti ylläpidettävinä. Nykyään Carthagen kehitys on kuitenkin hidastunut huomattavasti, ja useimmat kirjastot tukevat nyt ensisijaisesti Swift Package Manageria.

Yhteenvetona Carthage on työkalu, joka yhdistää yksinkertaisuuden, joustavuuden ja tehokkuuden ratkaisuksi, joka tekee riippuvuuksien hallinnasta läpinäkyvämpää sekä yksittäisille kehittäjille että suurille tiimeille. Sen yksinkertainen käyttöönotto ja minimaalinen puuttuminen projektirakenteeseen ovat tehneet siitä hyödyllisen työkalun sovelluskehityksessä, jossa nopeat ja turvalliset integraatiot ovat välttämättömiä.

Usein kysyttyjä kysymyksiä Carthage:stä

Mikä on Carthage ja miten se toimii käytännössä?

Carthage on hajautettu riippuvuuksienhallintatyökalu iOS-, macOS-, tvOS- ja watchOS-projekteille, jotka on kirjoitettu Swiftillä ja Objective-C:llä. Keskitettyä pakettirekisteriä ei ole. Sen sijaan jokainen riippuvuus osoittaa suoraan Git-repositorioon, tyypillisesti GitHubissa.

Riippuvuudet määritetään tekstitiedostossa nimeltä Cartfile projektin juurikansiossa. Kun komento carthage update ajetaan, Carthage etsii sopivat versiot, hakee lähdekoodin Carthage/Checkouts-kansioon ja buildaa jokaisen kirjaston Xcoden omilla build-työkaluilla. Valmiit frameworkit sijoitetaan kansioon Carthage/Build.

Carthage ei muuta Xcode-projektitiedostoa. Kehittäjä lisää buildatut frameworkit kohtaan Frameworks, Libraries, and Embedded Content asianomaisessa targetissa. Tämä antaa täyden hallinnan projektiasetuksiin, mutta vaatii hieman enemmän manuaalista työtä kuin työkalut, jotka integroivat automaattisesti.

Miten Carthage asennetaan ja miten kirjasto lisätään?

Carthage asennetaan useimmiten Homebrew’lla komennolla brew install carthage. Vaihtoehtoisesti asennuspaketin voi ladata projektin GitHub-julkaisuista.

Kirjasto lisätään tyypillisesti neljässä vaiheessa:

  • Projektin juurikansioon luodaan tiedosto Cartfile, jossa on esimerkiksi rivi github "Alamofire/Alamofire" ~> 5.0.
  • Komento carthage update --use-xcframeworks --platform iOS hakee ja buildaa kirjaston.
  • Valmis .xcframework kansiosta Carthage/Build vedetään sovelluksen targetin kohtaan Frameworks, Libraries, and Embedded Content.
  • Dynaamisille frameworkeille valitaan Embed & Sign.

Operaattori ~> tarkoittaa, että uudemmat versiot hyväksytään, kunhan pääversio pysyy samana. Kirjastoa voi sitten käyttää koodissa lauseella import Alamofire.

Mikä on Cartfilen ja Cartfile.resolvedin ero?

Cartfile kuvaa, mitä riippuvuuksia projekti tarvitsee ja mitkä versiovaatimukset niiden on täytettävä, esim. ~> 5.0, >= 2.1 tai tietty haara. Tiedostoa muokataan manuaalisesti, ja se ilmaisee aikomuksen.

Cartfile.resolved luodaan automaattisesti, ja se sisältää tarkat versiot tai commitit, jotka todella valittiin, myös riippuvuuksien omille riippuvuuksille. Tiedosto toimii lukkona, joten jokainen tiimin jäsen ja jokainen build-palvelin saa täsmälleen saman koodin.

Ero näkyy komennoissa:

  • carthage update etsii uusimmat versiot, jotka vastaavat Cartfilea, ja kirjoittaa tuloksen tiedostoon Cartfile.resolved.
  • carthage bootstrap hakee ja buildaa täsmälleen ne versiot, jotka on lueteltu tiedostossa Cartfile.resolved.

Molemmat tiedostot tulee siksi pitää versionhallinnassa. Vain kehityksen aikana käytettävät riippuvuudet, kuten testikirjastot, voidaan sijoittaa tiedostoon Cartfile.private.

Miten Carthage buildaa XCFrameworkeja ja miksi sillä on merkitystä?

Aiemmin Carthage buildasi niin sanottuja fat frameworkeja, joissa fyysisten laitteiden ja simulaattorin koodi yhdistettiin yhdeksi tiedostoksi lipo-työkalulla. Tämä lakkasi toimimasta Xcode 12:n myötä, koska sekä laitteet että simulaattorit käyttävät Apple Siliconilla arm64-arkkitehtuuria, eikä sama arkkitehtuuri voi esiintyä kahdesti yhdessä fat frameworkissa.

Ratkaisu on XCFrameworkit, jotka Apple esitteli Xcode 11:n myötä. XCFramework on paketti, jossa on erillinen binääri kullekin alustalle ja variantille, kuten iOS-laitteelle ja iOS-simulaattorille. Carthage 0.37:stä alkaen XCFrameworkit buildataan --use-xcframeworks-lipulla, esim. carthage bootstrap --use-xcframeworks.

Tulos sijoitetaan .xcframework-kansioina kansioon Carthage/Build. Ne lisätään suoraan sovelluksen targetiin, eikä aiempaa carthage copy-frameworks -build-vaihetta enää tarvita.

Mikä on Carthagen, CocoaPodsin ja Swift Package Managerin ero?

Kolme työkalua ratkaisevat saman tehtävän, mutta eri tavoin:

  • Carthage on hajautettu, ja se hakee riippuvuudet suoraan Cartfilessa määritetyistä Git-repositorioista. Kirjastot buildataan binäärisiksi frameworkeiksi, eikä Xcode-projektia muuteta. Integrointi tehdään manuaalisesti.
  • CocoaPods käyttää keskitettyä kirjastorekisteriä ja Podfilea. Komento pod install luo työtilan ja muuttaa projektiasetuksia, joten integrointi tapahtuu automaattisesti mutta on vähemmän läpinäkyvää. CocoaPods on nyt ylläpitotilassa.
  • Swift Package Manager (SPM) on Applen oma työkalu, ja se on rakennettu Xcodeen. Paketit lisätään suoraan Xcodessa tai kuvataan Package.swift-tiedostossa, eikä erillistä asennusta tarvita.

Carthage on hyödyllinen, kun halutaan täysi hallinta projektitiedostoon ja lyhyemmät build-ajat, koska riippuvuudet buildataan vain päivitettäessä. Uusissa projekteissa SPM on nyt yleisimmin käytetty valinta, koska useimmat kirjastot tukevat sitä.

Miten Carthagen build-ajat voidaan pitää kurissa?

Koska Carthage buildaa riippuvuudet oletuksena lähdekoodista, ensimmäinen build voi kestää kauan. Useat vaihtoehdot voivat lyhentää aikaa:

  • --platform iOS rajoittaa buildin alustoihin, joita projekti todella käyttää.
  • --cache-builds ohittaa riippuvuudet, jotka on jo buildattu samassa versiossa, joten vain muuttuneet kirjastot buildataan uudelleen.
  • Yksittäisiä riippuvuuksia voidaan päivittää erikseen, esim. komennolla carthage update Alamofire, sen sijaan että päivitettäisiin kaikki.
  • Monet kirjastot tarjoavat GitHub-julkaisuissaan valmiiksi buildattuja frameworkeja, jotka Carthage lataa automaattisesti. Suljetun lähdekoodin SDK:t voidaan määrittää binary-avainsanalla ja URL-osoitteella JSON-määrittelyyn.

Build-palvelimilla Carthage/Build-kansion voi myös tallentaa välimuistiin ajojen välillä. Monet tiimit pitävät kansion Gitin ulkopuolella .gitignore:n avulla ja luovat sen uudelleen komennolla carthage bootstrap.

Carthage for dummies

Carthage on työkalu, joka auttaa järjestämään ja hallitsemaan pieniä rakennuspalikoita, joista sovellukset koostuvat ja joita kutsutaan ”riippuvuuksiksi”. Kuvittele rakentavasi sovellusta, joka tarvitsee joitakin valmiita osia, jotka muut ovat jo tehneet, jotta se toimisi paremmin. Carthage auttaa hakemaan näitä osia ja pitämään niistä kirjaa, joten niitä ei tarvitse tehdä alusta asti. Se toimii vähän kuin kirjastonhoitaja, joka pitää kirjaa kaikista projektiin tarvittavista kirjoista, jotta kirjoittaja voi keskittyä omaan tarinaansa. Se tekee sovellusten kehittämisestä helpompaa ja nopeampaa, koska muiden työtä voi käyttää uudelleen ja samalla varmistaa, että kaikki sopii yhteen.

Jätä kommentti