Carthage / Carthage

author
23 minutes, 11 seconds Read

Carthage se dorește a fi cel mai simplu mod de a adăuga cadre de lucru la aplicația Cocoa.

Carthage vă construiește dependențele și vă oferă cadre de lucru binare, dar dumneavoastră păstrați controlul total asupra structurii și configurației proiectului dumneavoastră. Carthage nu vă modifică automat fișierele de proiect sau setările de construire.

  • Început rapid
  • Instalarea Carthage
  • Adăugarea de framework-uri la o aplicație
    • Noțiuni introductive
      • Construirea platformei-XCFrameworks independente de platformă
        • Migrarea unui proiect de la pachete de cadre la XCFrameworks
      • Construirea pachetelor de cadre specifice platformei
        • Dacă construiți pentru macOS
        • Dacă construiți pentru iOS, tvOS, sau watchOS
      • Pentru toate platformele
      • (Opțional) Adăugați faza de compilare pentru a avertiza cu privire la dependențele învechite
      • Compatibilitatea descărcării cadrului binar Swift

      .

    • Executarea unui proiect care utilizează Carthage
    • Adaugarea de cadre de lucru la testele unitare sau la un cadru de lucru
    • Actualizarea cadrelor de lucru
      • Experimental Resolver
    • Nested dependențe
    • Utilizarea submodulelor pentru dependențe
    • Reconstruirea automată a dependențelor
    • Caching builds
    • Completarea Bash/Zsh/Fish
  • Sprijin pentru Carthage pentru cadrul dvs. de lucru
    • Părtășiți schemele Xcode
    • Rezolvați eșecurile de compilare
    • Etichetați versiunile stabile
    • Arhivați cadrele de lucru precompuse într-un singur fișier zip
      • Utilizați travis-ci pentru a încărca cadrele pre-construite etichetate
    • Constituiți cadrele statice pentru a accelera timpii de lansare a aplicației dvs. CocoaPods
    • Licența

    Quick Start

    1. Obțineți Carthage rulând brew install carthage sau alegeți o altă metodă de instalare

    2. Crearea unui fișier Cartfile în același director în care se află .xcodeproj sau .xcworkspace

    3. Enumerați dependențele dorite în fișierul Cartfile, de exemplu:

      github "Alamofire/Alamofire" ~> 4.7.2
    4. Executați carthage update --use-xcframeworks

    5. Un fișier Cartfile.resolved și un director Carthage vor apărea în același director în care se află .xcodeproj sau .xcworkspace

    6. Trageți pachetele .xcframework construite din Carthage/Build în secțiunea „Frameworks and Libraries” a proiectului Xcode al aplicației dumneavoastră.

    7. Dacă utilizați Carthage pentru o aplicație, selectați „Embed & Sign”, altfel „Do Not Embed”.

    Pentru un ghid aprofundat, citiți mai departe din Adăugarea cadrelor de lucru la o aplicație

    Instalarea Carthage

    Există mai multe opțiuni pentru instalarea Carthage:

    • Installer: Descărcați și rulați fișierul Carthage.pkg pentru cea mai recentă versiune, apoi urmați instrucțiunile de pe ecran. Dacă instalați pkg-ul prin CLI, este posibil să fie nevoie să rulați mai întâi sudo chown -R $(whoami) /usr/local.

    • Homebrew: Puteți utiliza Homebrew și instala instrumentul carthage pe sistemul dumneavoastră pur și simplu rulând brew update și brew install carthage. (notă: dacă ați instalat anterior versiunea binară a Carthage, trebuie să ștergeți /Library/Frameworks/CarthageKit.framework).

    • MacPorts: Puteți utiliza MacPorts și instala instrumentul carthage pe sistemul dvs. pur și simplu executând sudo port selfupdate și sudo port install carthage. (notă: dacă ați instalat anterior versiunea binară a Carthage, trebuie să ștergeți /Library/Frameworks/CarthageKit.framework).

    • De la sursă: Dacă doriți să rulați cea mai recentă versiune de dezvoltare (care poate fi foarte instabilă sau incompatibilă), clonați pur și simplu ramura master a depozitului, apoi rulați make install. Necesită Xcode 10.0 (Swift 4.2).

    Adaugarea de cadre de lucru la o aplicație

    După ce ați instalat Carthage, puteți începe să adăugați cadre de lucru la proiectul dumneavoastră. Rețineți că Carthage acceptă numai cadre dinamice, care sunt disponibile numai pe iOS 8 sau mai târziu (sau pe orice versiune de OS X).

    Noțiuni introductive

    Construirea de cadre XCFrameworks independente de platformă (Xcode 12 și mai sus)

    1. Creează un fișier Cartfile care listează cadrele pe care doriți să le utilizați în proiectul dumneavoastră.
    2. Executați carthage update --use-xcframeworks. Aceasta va prelua dependențele într-un dosar Carthage/Checkouts și le va construi pe fiecare dintre ele sau va descărca un XCFramework precompilat.
    3. În fila General settings (Setări generale) a obiectivelor aplicației dumneavoastră, în secțiunea Frameworks, Libraries, and Embedded Content (Cadre, biblioteci și conținut încorporat), trageți și fixați fiecare XCFramework pe care doriți să îl utilizați din dosarul Carthage/Build de pe disc.
    Migrarea unui proiect de la pachete de cadre la XCFrameworks

    Încurajăm utilizarea XCFrameworks începând cu versiunea 0.37.0 (ianuarie 2021) și solicităm XCFrameworks atunci când construiți pe un Mac Apple Silicon. Trecerea de la pachete de cadre discrete la XCFrameworks necesită câteva modificări ale proiectului dvs.:

    Pași de migrare

    1. Ștergeți dosarul Carthage/Build pentru a elimina orice pachete de cadre existente.
    2. Constituiți un nou XCFrameworks prin rularea carthage build --use-xcframeworks. Orice alte argumente cu care construiți pot fi furnizate în mod normal.
    3. Îndepărtați referințele la vechile cadre în fiecare dintre țintele dvs.:
      • Eliminați referințele la cadrele Carthage din secțiunea Cadre, biblioteci și conținut încorporat a țintei și/sau din faza de construcție Link Binary with Libraries a acesteia.
      • Eliminați referințele la cadrele Carthage din orice fază de construcție Copy Files.
      • Eliminați faza de construcție carthage copy-frameworks a țintei, dacă este prezentă.
    4. Adaugați referințe la XCFrameworks în fiecare dintre țintele dumneavoastră:
      • Pentru o țintă de aplicație: În fila General settings, în secțiunea Frameworks, Libraries, and Embedded Content, trageți și fixați fiecare XCFramework pe care îl utilizați din folderul Carthage/Build de pe disc.
      • Pentru o țintă cadru: În fila Build Phases, într-o fază Link Binary with Libraries, trageți și fixați fiecare XCFramework pe care îl utilizați din folderul Carthage/Build de pe disc.

    Construirea pachetelor cadru specifice platformei (implicit pentru Xcode 11 și următoarele)

    Incompatibilitate Xcode 12+: Platformele cu mai multe arhitecturi nu sunt acceptate atunci când se construiesc pachete de cadre în Xcode 12 și mai sus. Preferați construirea cu XCFrameworks. Dacă aveți nevoie să construiți pachete de cadre discrete, utilizați un fișier xcconfig de rezolvare.

    Dacă construiți pentru macOS

    instrucțiuni specifice macOS

    1. Creați un fișier Cartfile care listează cadrele pe care doriți să le utilizați în proiectul dumneavoastră.
    2. Executați carthage update --platform macOS. Acest lucru va prelua dependențele într-un dosar Carthage/Checkouts și le va construi pe fiecare dintre ele sau va descărca un framework precompilat.
    3. În fila General settings a aplicației dvs. țintă, în secțiunea Embedded Binaries, trageți și fixați fiecare framework pe care doriți să îl utilizați din dosarul Carthage/Build de pe disc.

    În plus, va trebui să copiați simbolurile de depanare pentru depanare și raportarea accidentelor pe OS X.

    1. În fila Build Phases settings a aplicației țintă, faceți clic pe pictograma + și alegeți New Copy Files Phase.
    2. Faceți clic pe meniul derulant Destination și selectați Products Directory.
    3. Pentru fiecare framework pe care îl utilizați, trageți și fixați fișierul dSYM corespunzător.
    Dacă construiți pentru iOS, tvOS sau watchOS

    Instrucțiuni specifice platformei

    1. Creați un fișier Cartfile care listează cadrele pe care doriți să le folosiți în proiect.

    2. Executați carthage update. Aceasta va prelua dependențele într-un dosar Carthage/Checkouts, apoi va construi fiecare dintre ele sau va descărca un framework precompilat.

    3. Deschideți fila Setări generale a obiectivelor aplicației dvs. Pentru Xcode 11.0 și versiunile ulterioare, în secțiunea „Frameworks, Libraries, and Embedded Content” (Cadre, biblioteci și conținut încorporat), trageți și fixați fiecare cadru pe care doriți să îl utilizați din folderul Carthage/Build de pe disc. Apoi, în secțiunea „Embed”, selectați „Do Not Embed” din meniul derulant pentru fiecare element adăugat. Pentru Xcode 10.x și versiunile inferioare, în secțiunea „Linked Frameworks and Libraries” (Cadre și biblioteci legate), trageți și fixați fiecare cadru pe care doriți să îl utilizați din folderul Carthage/Build de pe disc.

    4. În fila Build Phases settings (Setări faze de construcție) a obiectivelor aplicației dumneavoastră, faceți clic pe pictograma + și alegeți New Run Script Phase (Fază nouă de execuție a scriptului). Creați un Run Script în care specificați shell-ul dvs. (ex: /bin/sh), adăugați următorul conținut în zona de script de sub shell:

      /usr/local/bin/carthage copy-frameworks
    5. Creați un fișier numit input.xcfilelist și un fișier numit output.xcfilelist

    6. Adaugați în input.xcfilelist căile de acces la cadrele pe care doriți să le utilizați. De exemplu:

      $(SRCROOT)/Carthage/Build/iOS/Result.framework$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
    7. Adaugați căile de acces la cadrele copiate la output.xcfilelist. De exemplu:

      $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework

      Cu fișierele de ieșire specificate alături de fișierele de intrare, Xcode trebuie să ruleze scriptul doar atunci când fișierele de intrare au fost modificate sau când fișierele de ieșire lipsesc. Acest lucru înseamnă că compilările murdare vor fi mai rapide atunci când nu ați reconstruit cadrele cu Carthage.

    8. Adaugați input.xcfilelist la secțiunea „Input File Lists” (Liste de fișiere de intrare) din faza de execuție a scriptului Carthage

    9. Adaugați output.xcfilelist la secțiunea „Output File Lists” (Liste de fișiere de ieșire) din faza de execuție a scriptului Carthage

    Acest script rezolvă o eroare de trimitere în App Store declanșată de binari universali și se asigură că fișierele necesare legate de bitcode și dSYM-urile sunt copiate la arhivare.

    Cu informațiile de depanare copiate în directorul de produse construite, Xcode va putea simboliza urma de stivă ori de câte ori vă opriți la un punct de întrerupere. Acest lucru vă va permite, de asemenea, să parcurgeți codul terților în depanator.

    Când vă arhivați aplicația pentru a fi trimisă în App Store sau TestFlight, Xcode va copia, de asemenea, aceste fișiere în subdirectorul dSYMs al pachetului .xcarchive al aplicației dvs. Cel mai important dintre acestea este fișierul Cartfile.resolved, care enumeră versiunile care au fost efectiv construite pentru fiecare framework. Asigurați-vă că ați confirmat fișierul Cartfile.resolved, deoarece oricine altcineva care utilizează proiectul va avea nevoie de acest fișier pentru a construi aceleași versiuni de framework.

    (Opțional) Adăugați o fază de construire pentru a vă avertiza cu privire la dependențele neactualizate

    Puteți adăuga o fază Run Script pentru a vă avertiza automat atunci când una dintre dependențele dvs. este neactualizată.

    1. În fila de setări Build Phases a obiectivelor aplicației dvs. Creați un script de execuție în care specificați shell-ul dvs. (ex: /bin/sh), adăugați următorul conținut în zona de script de sub shell:
    /usr/local/bin/carthage outdated --xcode-warnings 2>/dev/null

    Compatibilitatea descărcării cadrului binar Swift

    Carthage va verifica pentru a se asigura că cadrele Swift (și cadrele mixte Objective-C/Swift) descărcate au fost construite cu aceeași versiune de Swift care este utilizată la nivel local. Dacă există o neconcordanță de versiune, Carthage va continua să construiască cadrul din sursă. Dacă cadrul nu poate fi construit de la sursă, Carthage va eșua.

    Pentru că Carthage utilizează ieșirea din xcrun swift --version pentru a determina versiunea locală Swift, asigurați-vă că rulați comenzile Carthage cu lanțul de instrumente Swift pe care intenționați să îl utilizați. Pentru multe cazuri de utilizare, nu este nevoie de nimic suplimentar. Cu toate acestea, de exemplu, dacă construiți un proiect Swift 2.3 utilizând Xcode 8.x, o abordare pentru a specifica swift implicit pentru carthage bootstrap este de a utiliza următoarea comandă:

    TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap

    Rularea unui proiect care utilizează Carthage

    După ce ați finalizat pașii de mai sus și v-ați împins modificările, ceilalți utilizatori ai proiectului trebuie doar să recupereze depozitul și să ruleze carthage bootstrap pentru a începe să utilizeze cadrele pe care le-ați adăugat.

    Adăugarea cadrelor la testele unitare sau la un cadru

    Utilizarea Carthage pentru dependențele oricărei ținte arbitrare este destul de asemănătoare cu utilizarea Carthage pentru o aplicație. Principala diferență constă în modul în care cadrele sunt de fapt configurate și legate în Xcode.

    Pentru că țintelor de teste unitare le lipsește secțiunea Linked Frameworks and Libraries (Cadre și biblioteci legate) din fila General settings (Setări generale), trebuie în schimb să trageți cadrele construite în faza de construire Link Binaries With Libraries (Legătură de binare cu biblioteci).

    În ținta Test din fila Build Settings, adăugați @loader_path/Frameworks la Runpath Search Paths dacă nu este deja prezentă.

    În cazuri rare, este posibil să doriți să copiați, de asemenea, fiecare dependență în produsul de construcție (de ex, pentru a încorpora dependențele în cadrul exterior, sau pentru a vă asigura că dependențele sunt prezente într-un pachet de testare). Pentru a face acest lucru, creați o nouă fază de construire Copy Files (Copiere fișiere) cu destinația Frameworks (Cadre), apoi adăugați acolo și referința cadrului. Nu ar trebui să folosiți comanda carthage copy-frameworks deoarece pachetele de testare nu au nevoie de cadre dezbrăcate, iar rularea unor instanțe simultane de copy-frameworks (cu compilările paralele activate) nu este suportată.

    Actualizarea cadrelor

    Dacă ați modificat fișierul Cartfile sau doriți să actualizați la cele mai noi versiuni ale fiecărui cadru (sub rezerva cerințelor pe care le-ați specificat), pur și simplu rulați din nou comanda carthage update.

    Dacă doriți să actualizați doar una, sau anumite dependențe, treceți-le ca o listă separată prin spațiu la comanda update. de exemplu:

    carthage update Box

    sau

    carthage update Box Result
    Experimental Resolver

    O rescriere a logicii de actualizare a cadrelor a fost făcută cu scopul de a crește viteza și de a reduce utilizarea memoriei. În prezent, este o caracteristică opt-in. Poate fi utilizată trecând la comanda de actualizare, de exemplu,

    carthage update --new-resolver Box

    Dacă întâmpinați probleme de performanță în timpul actualizărilor, vă rugăm să încercați noul rezolvator

    Dependențe imbricate

    Dacă cadrul pe care doriți să îl adăugați la proiectul dvs. are dependențe listate în mod explicit într-un Cartfile, Carthage le va prelua automat pentru dvs. Va trebui apoi să le trageți dvs. însuși în proiectul dvs. din folderul Carthage/Build.

    Dacă framework-ul încorporat în proiectul dvs. are dependențe de alte framework-uri, trebuie să le legați la ținta aplicației (chiar dacă ținta aplicației nu are dependențe de framework-urile respective și nu le folosește niciodată).

    Utilizarea submodulelor pentru dependențe

    În mod implicit, Carthage va verifica direct fișierele sursă ale dependențelor în dosarul proiectului dumneavoastră, lăsându-vă să le confirmați sau să le ignorați după cum doriți. Dacă doriți ca dependențele să fie disponibile ca submodule Git în schimb (poate pentru a putea confirma și împinge modificări în cadrul acestora), puteți rula carthage update sau carthage checkout cu stegulețul --use-submodules.

    Când este rulat în acest mod, Carthage va scrie în fișierele .gitmodules și .git/config ale depozitului dvs. și va actualiza automat submodulele atunci când versiunile dependențelor se schimbă.

    Reconstituirea automată a dependențelor

    Dacă doriți să lucrați la dependențele dvs. în timpul dezvoltării și doriți ca acestea să fie reconstruite automat atunci când construiți proiectul părinte, puteți adăuga o fază de construire Run Script care invocă Carthage astfel:

    /usr/local/bin/carthage build --platform "$PLATFORM_NAME" --project-directory "$SRCROOT"

    Rețineți că ar trebui să folosiți submodule înainte de a face acest lucru, deoarece verificările simple nu trebuie modificate direct.

    Construirea în cache

    În mod implicit, Carthage va reconstrui o dependență indiferent dacă este aceeași versiune rezolvată ca înainte. Trecerea --cache-builds va face ca carthage să evite reconstruirea unei dependențe dacă poate. Consultați informațiile despre fișierele de versiune pentru detalii despre modul în care Carthage realizează această memorare.

    Nota: În acest moment --cache-builds este incompatibil cu --use-submodules. Utilizarea ambelor va avea ca rezultat faptul că copia de lucru și modificările angajate în dependența submodulelor dvs. nu vor fi reconstruite corect. Consultați #1785 pentru detalii.

    Completarea Bash/Zsh/Fish

    Completarea automată a comenzilor și opțiunilor Carthage este disponibilă așa cum este documentat în Completarea Bash/Zsh/Fish.

    Sprijinirea Carthage pentru cadrul dvs. de lucru

    Carthage sprijină doar oficial cadrele de lucru dinamice. Cadrele dinamice pot fi utilizate pe orice versiune de OS X, dar numai pe iOS 8 sau mai târziu. În plus, începând cu versiunea 0.30.0, Carthage suportă cadrele statice.

    Pentru că Carthage nu are o listă de pachete centralizată și nici un format de specificații de proiect, majoritatea cadrelor ar trebui să se construiască automat.

    Cerințele specifice ale oricărui proiect de cadru sunt enumerate mai jos.

    Împărtășiți schemele Xcode

    Carthage va construi numai schemele Xcode care sunt partajate din .xcodeproj. Puteți vedea dacă toate schemele pe care le intenționați să le construiți cu succes executând carthage build --no-skip-current, apoi verificând dosarul Carthage/Build.

    Dacă o schemă importantă nu este construită atunci când executați această comandă, deschideți Xcode și asigurați-vă că schema este marcată ca Shared, astfel încât Carthage să o poată descoperi.

    Rezolvați eșecurile de construcție

    Dacă întâmpinați eșecuri de construcție în carthage build --no-skip-current, încercați să rulați xcodebuild -scheme SCHEME -workspace WORKSPACE build sau xcodebuild -scheme SCHEME -project PROJECT build (cu valorile reale) și vedeți dacă apare același eșec acolo. Acest lucru ar trebui să dea, sperăm, suficiente informații pentru a rezolva problema.

    Dacă aveți instalate mai multe versiuni ale instrumentelor de dezvoltare Apple (o versiune beta Xcode, de exemplu), utilizați xcode-select pentru a schimba ce versiune folosește Carthage.

    Dacă tot nu reușiți să vă construiți framework-ul cu Carthage, vă rugăm să deschideți o problemă și vom fi bucuroși să vă ajutăm!

    Versiuni stabile de etichete

    Carthage determină ce versiuni ale framework-ului dvs. sunt disponibile căutând printre etichetele publicate pe depozit și încercând să interpreteze fiecare nume de etichetă ca o versiune semantică. De exemplu, în tag-ul v1.2, versiunea semantică este 1.2.0.

    Tag-urile fără niciun număr de versiune sau cu orice caractere după numărul de versiune (de ex, ) nu sunt acceptate în prezent și vor fi ignorate.

    Arhivați cadrele preinstalate într-un singur fișier zip

    Carthage poate utiliza automat cadrele preinstalate, în loc să le construiască de la zero, dacă acestea sunt atașate la o versiune GitHub Release pe depozitul proiectului dumneavoastră sau prin intermediul unui fișier binar de definire a proiectului.

    Pentru a oferi cadre pre-construite pentru o anumită etichetă, fișierele binare pentru toate platformele acceptate ar trebui să fie comprimate împreună într-o singură arhivă, iar arhiva respectivă ar trebui să fie atașată la un Release publicat corespunzător etichetei respective. Atașamentul ar trebui să includă .framework în numele său (de exemplu, ReactiveCocoa.framework.zip), pentru a indica lui Carthage că acesta conține binare. Structura de directoare a arhivei este liberă, dar, cadrele ar trebui să apară o singură dată în arhivă, deoarece vor fi copiate în Carthage/Build/<platform> pe baza numelui lor (de exemplu ReactiveCocoa.framework).

    Puteți efectua operațiunea de arhivare cu carthage însuși folosind:

    -carthage build --no-skip-current-carthage archive YourFrameworkName

    sau alternativ

    carthage build --archive

    Lansările provizorii vor fi ignorate automat, chiar dacă corespund etichetei dorite.

    Utilizați travis-ci pentru a vă încărca cadrele precompilate etichetate

    Este posibil să utilizați travis-ci pentru a construi și încărca versiunile etichetate.

    1. Instalați travis CLI cu gem install travis

    2. Configurați travis-ci pentru depozitul dvs. (Pașii 1 și 2)

    3. Creați fișierul .travis.yml la rădăcina depozitului dvs. pe baza acestui șablon. Setați FRAMEWORK_NAME la valoarea corectă.

      Înlocuiți PROJECT_PLACEHOLDER și SCHEME_PLACEHOLDER

      Dacă folosiți un spațiu de lucru în loc de un proiect, eliminați linia xcode_project și decomentați linia xcode_workspace.

      Proiectul ar trebui să fie în formatul: MyProject.xcodeproj

      Spațiul de lucru trebuie să fie în formatul: MyWorkspace.xcworkspace

      Simțiți-vă liber să actualizați valoarea xcode_sdk la un alt SDK, rețineți că testarea pe iphoneos SDK ar necesita încărcarea unei identități de semnare a codului

      Pentru mai multe informații puteți vizita travis docs for objective-c projects

      language: objective-cosx_image: xcode7.3xcode_project: <PROJECT_PLACEHOLDER># xcode_workspace: <WORKSPACE_PLACEHOLDER>xcode_scheme: <SCHEME_PLACEHOLDER>xcode_sdk: iphonesimulator9.3env: global: - FRAMEWORK_NAME=<THIS_IS_A_PLACEHOLDER_REPLACE_ME>before_install: - brew update - brew outdated carthage || brew upgrade carthagebefore_script: # bootstrap the dependencies for the project # you can remove if you don't have dependencies - carthage bootstrapbefore_deploy: - carthage build --no-skip-current - carthage archive $FRAMEWORK_NAME
    4. Executați travis setup releases, urmați documentația aici

      Acestă comandă va codifica acreditările GitHub în fișierul .travis.yml pentru a permite lui travis să încarce versiunea pe GitHub.comCând vi se cere fișierul de încărcat, introduceți $FRAMEWORK_NAME.framework.zip

    5. Actualizați secțiunea deploy pentru a rula pe etichete:

      În .travis.yml localizați:

      on: repo: repo/repo

      Și adăugați tags: true și skip_cleanup: true:

      skip_cleanup: trueon: repo: repo/repo tags: true

      Aceasta îi va permite lui travis să știe că trebuie să creeze o implementare atunci când o nouă etichetă este împinsă și îl va împiedica pe travis să curețe fișierul zip generat

    Construiți cadre statice pentru a accelera timpii de lansare a aplicației dumneavoastră

    Dacă încorporați multe cadre dinamice în aplicația dumneavoastră, timpii de lansare înainte de lansare principală pot fi destul de lenți. Carthage vă poate ajuta să atenuați acest lucru prin construirea cadrelor dvs. dinamice ca cadre statice în schimb. Cadrele statice pot fi legate direct în aplicația dvs. sau pot fi îmbinate într-un cadru dinamic mai mare cu câteva modificări simple ale fluxului dvs. de lucru, ceea ce poate duce la reduceri dramatice ale timpilor de lansare pre-main.

    Carthage 0.30.0 sau o versiune mai recentă

    De la versiunea 0.30.0, proiectul Carthage lansează suportul pentru cadrele legate static scrise în Swift sau Objective-C, suport pentru care a fost introdus în Xcode 9.4. Vă rugăm să rețineți totuși că se vorbește în mod specific de framework-uri, de unde și pachetele Darwin cu extensia .framework și arhivele de obiecte legate static din interior. Carthage nu suportă în prezent schemele de bibliotecă statică și nici nu există planuri de a introduce suportul acestora în viitor.

    Fluxul de lucru diferă abia:

    • Încă trebuie să bifați schemele proiectului dvs. compatibil Carthage ca fiind partajate în Product > Scheme > Manage Schemes…, la fel ca în cazul binarelor dinamice
    • Încă trebuie să faceți legătura cu schemele statice .frameworks în fazele de construire ale proiectului dumneavoastră, la fel ca și în cazul binarelor dinamice
    • Cu toate acestea:

      • În secțiunea Build Settings, Linking (Setări de construire, Legătură) din targetul Cocoa Framework al proiectului dumneavoastră compatibil cu Carthage, setați Mach-O Type (Tip Mach-O) la Static Library (Bibliotecă statică)
      • Structurile dumneavoastră legate static vor fi construite la ./Carthage/Build/$(PLATFORM_NAME)/Static
      • Nu ar trebui să adăugați niciunul dintre cadrele statice ca fișiere de intrare/ieșire în faza de construire carthage copy-frameworks

      Carthage 0.29.0 sau inferior

      Vezi documentul StaticFrameworks pentru detalii.

      Rețineți că se aplică câteva avertismente la această abordare:

      • Cadrele statice Swift nu sunt suportate oficial de Apple
      • Acesta este un flux de lucru avansat care nu este încorporat în Carthage, YMMV

      Declarați-vă compatibilitatea

      Vreți să anunțați că proiectul dvs. poate fi utilizat cu Carthage? Puteți adăuga o insignă de compatibilitate:

      … la README dumneavoastră, prin simpla inserare a următorului Markdown:

      (https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)

      Probleme cunoscute

      Problema simbolului DWARFs

      Cadrul pre-construit nu poate fi depanat folosind execuția pas cu pas pe altă mașină decât cea pe care a fost construit cadrul. Pur și simplu carthage bootstrap/build/update --no-use-binaries ar trebui să rezolve această problemă, dar pentru o soluție mai automatizată, a se vedea #924. Dublați rdar://23551273 dacă doriți ca Apple să rezolve cauza principală a acestei probleme.

      CarthageKit

      Majoritatea funcționalității instrumentului de linie de comandă carthage este de fapt încapsulată într-un cadru numit CarthageKit.

      Dacă sunteți interesat să folosiți Carthage ca parte a unui alt instrument, sau poate să extindeți funcționalitatea lui Carthage, aruncați o privire la codul sursă CarthageKit pentru a vedea dacă API-ul se potrivește nevoilor dumneavoastră.

      Diferențe între Carthage și CocoaPods

      CocoaPods este un manager de dependențe de lungă durată pentru Cocoa. Deci, de ce a fost creat Carthage?

      În primul rând, CocoaPods (în mod implicit) creează și actualizează automat un spațiu de lucru Xcode pentru aplicația dumneavoastră și toate dependențele. Carthage construiește binarele cadrului folosind xcodebuild, dar lasă responsabilitatea integrării acestora în sarcina utilizatorului. Abordarea CocoaPods este mai ușor de utilizat, în timp ce cea a lui Carthage este flexibilă și neintruzivă.

      Obiectivul lui CocoaPods este enumerat în README-ul său după cum urmează:

      … pentru a îmbunătăți capacitatea de descoperire și implicarea în bibliotecile open-source ale terților, prin crearea unui ecosistem mai centralizat.

      În schimb, Carthage a fost creat ca un manager de dependențe descentralizat. Nu există o listă centrală de proiecte, ceea ce reduce munca de întreținere și evită orice punct central de eșec. Cu toate acestea, descoperirea proiectelor este mai dificilă – utilizatorii trebuie să recurgă la paginile Trending de pe GitHub sau altele similare.

      Proiectele CocoaPods trebuie să aibă, de asemenea, ceea ce se numește un fișier podspec, care include metadate despre proiect și specifică modul în care acesta trebuie construit. Carthage folosește xcodebuild pentru a construi dependențele, în loc să le integreze într-un singur spațiu de lucru, nu are un fișier de specificații similar, dar dependențele dvs. trebuie să includă propriul lor proiect Xcode care descrie modul de construire a produselor lor.

      În cele din urmă, am creat Carthage pentru că am vrut cel mai simplu instrument posibil – un manager de dependențe care își face treaba fără a prelua responsabilitatea Xcode și fără a crea muncă suplimentară pentru autorii de cadre. CocoaPods oferă multe caracteristici uimitoare pe care Carthage nu le va avea niciodată, în detrimentul unei complexități suplimentare.

      Licență

      Carthage este eliberat sub licența MIT.

      Fotografia de fundal a antetului este eliberată sub licența CC BY-NC-SA 2.0. Fotografia originală a fost realizată de Richard Mortel.

      .

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată.