Carthage ma być najprostszym sposobem na dodanie frameworków do twojej aplikacji Cocoa.
Carthage buduje twoje zależności i dostarcza ci binarne frameworki, ale zachowujesz pełną kontrolę nad strukturą projektu i ustawieniami. Kartagina nie modyfikuje automatycznie plików projektu ani ustawień budowania.
- Szybki start
- Instalacja Carthage
- Dodawanie frameworków do aplikacji
- Początek
- Budowanie niezależnych od platformyniezależnych od platformy XCFrameworks
- Migracja projektu z frameworków do XCFrameworks
- Budowanie frameworków specyficznych dla platformy
- Jeśli budujesz dla macOS
- Jeśli budujesz dla iOS, tvOS, lub watchOS
- Dla wszystkich platform
- (Opcjonalnie) Dodaj fazę budowania, aby ostrzec o nieaktualnych zależnościach
- Zgodność pobierania frameworków binarnych Swift
.
- Budowanie niezależnych od platformyniezależnych od platformy XCFrameworks
- Uruchamianie projektu, który używa Carthage
- Dodawanie frameworków do testów jednostkowych lub frameworków
- Uaktualnianie frameworków
- Experimental Resolver
- Zagnieżdżone zależności
- Używanie submodułów dla zależności
- Automatyczna przebudowa zależności
- Buforowanie kompilacji
- Uzupełnianie Bash/Zsh/Fish
- Początek
- Wspieranie Carthage dla Twojego frameworka
- Udostępniaj swoje schematy Xcode
- Rozwiązuj błędy kompilacji
- Taguj stabilne wydania
- Archiwizuj prebuilowane frameworki w jeden plik zip
- Użyj travis-ci, aby przesłać swoje oznaczone prefabrykowane frameworki
- Buduj statyczne frameworki, aby przyspieszyć czas uruchamiania aplikacji
- Deklaruj swoją kompatybilność
- Znane problemy
- Problem z symbolami DWARF
- CarthageKit
- Różnice pomiędzy Carthage i CocoaPods
- Licencja
- Szybki start
- Instalowanie Carthage
- Dodawanie frameworków do aplikacji
- Początek
- Tworzenie niezależnych od platformy frameworków XCFrameworks (Xcode 12 i nowsze)
- Migracja projektu z pakietów frameworków do XCFrameworks
- Building platform-specific framework bundles (default for Xcode 11 and below)
- Jeśli budujesz dla macOS
- Jeśli budujesz dla iOS, tvOS lub watchOS
- Dla wszystkich platform
- (Opcjonalnie) Dodaj fazę budowania, aby ostrzegać o nieaktualnych zależnościach
- Zgodność pobranych frameworków binarnych Swift
- Uruchamianie projektu, który używa Carthage
- Dodawanie frameworków do testów jednostkowych lub frameworków
- Uaktualnianie frameworków
- Experimental Resolver
- Zależności zagnieżdżone
- Używanie submodułów dla zależności
- Automatyczne przebudowywanie zależności
- Buforowanie buildów
- Uzupełnianie Bash/Zsh/Fish
- Obsługa Carthage dla Twojego frameworka
- Udostępnij swoje schematy Xcode
- Rozwiązywanie błędów budowania
- Znaczniki stabilnych wydań
- Archiwizacja gotowych frameworków w jednym pliku zip
- Użyj travis-ci do wgrania swoich tagowanych prebuilowanych frameworków
- Zbuduj statyczne frameworki, aby przyspieszyć czasy uruchamiania aplikacji
- Carthage 0.30.0 lub nowsza
- Carthage 0.29.0 lub niższej
- Zgłoś swoją kompatybilność
- Znane problemy
- Problem z symbolem DWARFs
- CarthageKit
- Różnice między Carthage a CocoaPods
- Licencja
Szybki start
-
Pobierz Carthage uruchamiając
brew install carthage
lub wybierz inną metodę instalacji -
Utwórz Cartfile w tym samym katalogu, w którym znajduje się Twój
.xcodeproj
lub.xcworkspace
-
Wymień żądane zależności w Cartfile, na przykład:
github "Alamofire/Alamofire" ~> 4.7.2
-
Run
carthage update --use-xcframeworks
-
Plik
Cartfile.resolved
i katalogCarthage
pojawią się w tym samym katalogu, w którym znajduje się Twój.xcodeproj
lub.xcworkspace
-
Przeciągnij zbudowane
.xcframework
bundle zCarthage/Build
do sekcji „Frameworks and Libraries” w projekcie Xcode Twojej aplikacji. -
Jeśli używasz Carthage dla aplikacji, wybierz „Osadź & Znak”, w przeciwnym razie „Nie osadzaj”.
Aby uzyskać szczegółowy przewodnik, przeczytaj dalej Dodawanie frameworków do aplikacji
Instalowanie Carthage
Istnieje wiele opcji instalacji Carthage:
-
Instalator: Pobierz i uruchom plik
Carthage.pkg
dla najnowszego wydania, a następnie postępuj zgodnie z instrukcjami wyświetlanymi na ekranie. Jeśli instalujesz pkg przez CLI, być może będziesz musiał najpierw uruchomićsudo chown -R $(whoami) /usr/local
. -
Homebrew: Możesz użyć Homebrew i zainstalować narzędzie
carthage
w swoim systemie po prostu uruchamiającbrew update
ibrew install carthage
. (Uwaga: jeśli wcześniej zainstalowałeś binarną wersję Kartaginy, powinieneś usunąć/Library/Frameworks/CarthageKit.framework
). -
MacPorty: Możesz użyć MacPorts i zainstalować narzędzie
carthage
w swoim systemie po prostu uruchamiającsudo port selfupdate
isudo port install carthage
. (Uwaga: jeśli wcześniej zainstalowałeś binarną wersję Carthage, powinieneś usunąć/Library/Frameworks/CarthageKit.framework
). -
Zródło: Jeśli chciałbyś uruchomić najnowszą wersję rozwojową (która może być wysoce niestabilna lub niekompatybilna), po prostu sklonuj gałąź
master
repozytorium, a następnie uruchommake install
. Wymaga Xcode 10.0 (Swift 4.2).
Dodawanie frameworków do aplikacji
Po zainstalowaniu Carthage możesz zacząć dodawać frameworki do swojego projektu. Zauważ, że Carthage obsługuje tylko dynamiczne frameworki, które są dostępne tylko na iOS 8 lub nowszym (lub dowolnej wersji OS X).
Początek
Tworzenie niezależnych od platformy frameworków XCFrameworks (Xcode 12 i nowsze)
- Utwórz plik Cartfile, który zawiera listę frameworków, których chcesz użyć w swoim projekcie.
- Uruchom
carthage update --use-xcframeworks
. Spowoduje to pobranie zależności do folderu Carthage/Checkouts i zbudowanie każdej z nich lub pobranie prekompilowanego XCFramework. - Na karcie Ogólne ustawienia celów aplikacji, w sekcji Frameworks, Libraries i Embedded Content, przeciągnij i upuść każdy XCFramework, którego chcesz użyć z folderu Carthage/Build na dysku.
Migracja projektu z pakietów frameworków do XCFrameworks
Zachęcamy do używania XCFrameworks od wersji 0.37.0 (styczeń 2021) i wymagamy XCFrameworks podczas budowania na Apple Silicon Mac. Przejście z dyskretnych pakietów frameworków na XCFrameworks wymaga kilku zmian w twoim projekcie:
Kroki migracji
- Usuń swój folder
Carthage/Build
, aby usunąć wszelkie istniejące pakiety frameworków. - Buduj nowe XCFrameworks, uruchamiając
carthage build --use-xcframeworks
. Wszelkie inne argumenty, z którymi budujesz, mogą być podane jak zwykle. - Usuń odniesienia do starych frameworków w każdym z twoich celów:
- Usuń odniesienia do frameworków Carthage z sekcji Frameworks, Libraries, and Embedded Content celu i/lub jego fazy budowania Link Binary with Libraries.
- Usuń odniesienia do frameworków Carthage z wszelkich faz budowania Copy Files.
- Usuń fazę budowania
carthage copy-frameworks
celu, jeśli jest obecna.
- Dodaj odniesienia do XCFrameworks w każdym z twoich celów:
- Dla celu aplikacji: W zakładce Ustawienia ogólne, w sekcji Frameworks, Libraries, and Embedded Content, przeciągnij i upuść każdy XCFramework, którego używasz z folderu Carthage/Build na dysku.
- Dla docelowego frameworka: W zakładce Build Phases, w fazie Link Binary with Libraries, przeciągnij i upuść każdy XCFramework, którego używasz z folderu Carthage/Build na dysku.
Building platform-specific framework bundles (default for Xcode 11 and below)
Kompatybilność z Xcode 12+: Platformy wieloarchitektoniczne nie są obsługiwane podczas budowania wiązek frameworków w Xcode 12 i wyżej. Preferuj budowanie za pomocą XCFrameworks. Jeśli musisz zbudować dyskretne pakiety frameworków, użyj obejścia w postaci pliku xcconfig.
Jeśli budujesz dla macOS
instrukcje specyficzne dla macOS
- Utwórz plik Cartfile, który zawiera listę frameworków, których chcesz użyć w swoim projekcie.
- Uruchom
carthage update --platform macOS
. Spowoduje to pobranie zależności do folderu Carthage/Checkouts i zbudowanie każdej z nich lub pobranie prekompilowanego frameworka. - Na karcie Ogólne ustawienia celów aplikacji, w sekcji Wbudowane pliki binarne, przeciągnij i upuść każdy framework, którego chcesz użyć z folderu Carthage/Build na dysku.
Dodatkowo będziesz musiał skopiować symbole debugowania do debugowania i raportowania awarii w systemie OS X.
- Na karcie Ustawienia faz budowania w docelowej aplikacji kliknij ikonę + i wybierz opcję Nowa faza kopiowania plików.
- Kliknij menu rozwijane Miejsce docelowe i wybierz Katalog produktów.
- Dla każdego używanego frameworka przeciągnij i upuść odpowiedni plik dSYM.
Jeśli budujesz dla iOS, tvOS lub watchOS
Instrukcje specyficzne dla platformy
-
Utwórz plik Cartfile, który zawiera listę frameworków, których chcesz użyć w swoim projekcie.
-
Uruchom
carthage update
. Spowoduje to pobranie zależności do folderu Carthage/Checkouts, a następnie zbudowanie każdego z nich lub pobranie wstępnie skompilowanego frameworka. -
Otwórz zakładkę Ustawienia ogólne swoich celów aplikacji. W przypadku Xcode 11.0 i nowszych, w sekcji „Frameworks, Libraries, and Embedded Content” przeciągnij i upuść każdy framework, którego chcesz użyć z folderu Carthage/Build na dysku. Następnie, w sekcji „Osadzanie”, wybierz „Nie osadzaj” z menu rozwijanego dla każdego dodanego elementu. W przypadku Xcode 10.x i niższych, w sekcji „Połączone frameworki i biblioteki” przeciągnij i upuść każdy framework, którego chcesz użyć z folderu Carthage/Build na dysku.
-
Na karcie Ustawienia faz budowania celów aplikacji, kliknij ikonę + i wybierz Nowa faza skryptu uruchamiania. Utwórz skrypt uruchamiania, w którym określasz swoją powłokę (np.
/bin/sh
), dodaj następującą zawartość do obszaru skryptu poniżej powłoki:/usr/local/bin/carthage copy-frameworks
-
Utwórz plik o nazwie
input.xcfilelist
i plik o nazwieoutput.xcfilelist
-
Dodaj ścieżki do frameworków, których chcesz użyć do
input.xcfilelist
. Na przykład:$(SRCROOT)/Carthage/Build/iOS/Result.framework$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
-
Dodaj ścieżki do skopiowanych frameworków do
output.xcfilelist
. Na przykład:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework
Z plikami wyjściowymi określonymi obok plików wejściowych, Xcode musi uruchomić skrypt tylko wtedy, gdy pliki wejściowe uległy zmianie lub brakuje plików wyjściowych. Oznacza to, że brudne kompilacje będą szybsze, jeśli nie przebudowałeś frameworków za pomocą Carthage.
-
Dodaj
input.xcfilelist
do sekcji „Listy plików wejściowych” w fazie skryptu uruchamianego z Carthage -
Dodaj
output.xcfilelist
do sekcji „Listy plików wyjściowych” w fazie skryptu uruchamianego z Carthage
Skrypt ten rozwiązuje problem błędu zgłaszania do App Store wywołanego przez uniwersalne binarki i zapewnia, że niezbędne pliki związane z bitcode i dSYM są kopiowane podczas archiwizacji.
Po skopiowaniu informacji o debugowaniu do katalogu zbudowanych produktów, Xcode będzie w stanie symbolizować ślad stosu za każdym razem, gdy zatrzymasz się w punkcie przerwania. Umożliwi to również przejście przez kod innych firm w debugerze.
Podczas archiwizowania aplikacji w celu przesłania jej do App Store lub TestFlight, Xcode skopiuje również te pliki do podkatalogu dSYMs w pakiecie .xcarchive
aplikacji.
Dla wszystkich platform
Po drodze, Carthage utworzy pewne artefakty budowy. Najważniejszym z nich jest plik Cartfile.resolved, który zawiera listę wersji, które zostały faktycznie zbudowane dla każdego frameworka. Upewnij się, że zatwierdziłeś swój Cartfile.resolved, ponieważ każdy inny użytkownik projektu będzie potrzebował tego pliku, aby zbudować te same wersje frameworka.
(Opcjonalnie) Dodaj fazę budowania, aby ostrzegać o nieaktualnych zależnościach
Możesz dodać fazę skryptu uruchomieniowego, aby automatycznie ostrzegać, gdy jedna z twoich zależności jest nieaktualna.
- Na karcie ustawień
Build Phases
celów aplikacji, kliknij ikonę+
i wybierzNew Run Script Phase
. Utwórz skrypt uruchomieniowy, w którym określasz swoją powłokę (np./bin/sh
), dodaj następującą zawartość do obszaru skryptu poniżej powłoki:
/usr/local/bin/carthage outdated --xcode-warnings 2>/dev/null
Zgodność pobranych frameworków binarnych Swift
Carthage sprawdzi, czy pobrane frameworki Swift (i mieszane Objective-C/Swift) zostały zbudowane z tą samą wersją Swift, która jest używana lokalnie. Jeśli istnieje niedopasowanie wersji, Carthage przystąpi do budowania frameworka ze źródła. Jeśli framework nie może być zbudowany ze źródła, Carthage zawiedzie.
Ponieważ Carthage używa wyjścia xcrun swift --version
do określenia lokalnej wersji Swifta, upewnij się, że uruchamiasz polecenia Carthage z zestawem narzędzi Swift, którego zamierzasz używać. Dla wielu przypadków użycia, nic dodatkowego nie jest potrzebne. Jednak na przykład, jeśli budujesz projekt Swift 2.3 przy użyciu Xcode 8.x, jednym z podejść do określenia domyślnego swift
dla carthage bootstrap
jest użycie następującego polecenia:
TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap
Uruchamianie projektu, który używa Carthage
Po wykonaniu powyższych kroków i przesłaniu zmian, inni użytkownicy projektu muszą tylko pobrać repozytorium i uruchomić carthage bootstrap
, aby rozpocząć pracę z dodanymi frameworkami.
Dodawanie frameworków do testów jednostkowych lub frameworków
Używanie Carthage do zależności dowolnego celu jest dość podobne do używania Carthage dla aplikacji. Główna różnica polega na tym, w jaki sposób frameworki są faktycznie skonfigurowane i połączone w Xcode.
Ponieważ cele testów jednostkowych nie mają sekcji Połączone frameworki i biblioteki w zakładce Ustawienia ogólne, musisz zamiast tego przeciągnąć zbudowane frameworki do fazy budowania Link Binaries With Libraries.
W celu testowym w zakładce Ustawienia budowania, dodaj @loader_path/Frameworks
do ścieżki wyszukiwania Runpath, jeśli jeszcze jej nie ma.
W rzadkich przypadkach, możesz również chcieć skopiować każdą zależność do produktu budowania (np, aby osadzić zależności w zewnętrznym frameworku, lub upewnić się, że zależności są obecne w pakiecie testowym). Aby to zrobić, należy utworzyć nową fazę budowania Copy Files z miejscem docelowym Frameworks, a następnie dodać tam również referencje do frameworków. Nie powinieneś używać polecenia carthage copy-frameworks
, ponieważ pakiety testowe nie wymagają usuwania frameworków, a równoległe uruchamianie instancji copy-frameworks
(z włączonym równoległym budowaniem) nie jest obsługiwane.
Uaktualnianie frameworków
Jeśli zmodyfikowałeś swój Cartfile lub chcesz uaktualnić do najnowszych wersji każdego frameworka (zgodnie z wymaganiami, które określiłeś), po prostu uruchom ponownie polecenie carthage update
.
Jeśli chcesz zaktualizować tylko jedną lub konkretne zależności, przekaż je jako listę oddzieloną spacjami do polecenia update
. np.
carthage update Box
lub
carthage update Box Result
Experimental Resolver
Przepisanie logiki aktualizacji frameworków zostało dokonane w celu zwiększenia szybkości i zmniejszenia zużycia pamięci. Jest to obecnie funkcja typu opt-in. Można jej użyć przekazując --new-resolver
do polecenia aktualizacji, np.,
carthage update --new-resolver Box
Jeśli doświadczasz problemów z wydajnością podczas aktualizacji, wypróbuj nowy resolver
Zależności zagnieżdżone
Jeśli framework, który chcesz dodać do swojego projektu ma zależności wyraźnie wymienione w pliku Cartfile, Carthage automatycznie pobierze je dla Ciebie. Następnie będziesz musiał sam przeciągnąć je do swojego projektu z folderu Carthage/Build.
Jeśli wbudowany framework w twoim projekcie ma zależności do innych frameworków, musisz połączyć je z celem aplikacji (nawet jeśli cel aplikacji nie ma zależności do tych frameworków i nigdy ich nie używa).
Używanie submodułów dla zależności
Domyślnie, Kartagina będzie bezpośrednio sprawdzać pliki źródłowe zależności do folderu projektu, pozostawiając Ci możliwość ich zatwierdzenia lub zignorowania według Twojego uznania. Jeśli chcesz, aby zamiast tego zależności były dostępne jako submoduły Git (być może po to, abyś mógł w nich wprowadzać zmiany), możesz uruchomić carthage update
lub carthage checkout
z flagą --use-submodules
.
Po uruchomieniu w ten sposób, Carthage będzie pisać do plików .gitmodules
i .git/config
Twojego repozytorium i automatycznie aktualizować submoduły, gdy zmienią się wersje zależności.
Automatyczne przebudowywanie zależności
Jeśli chcesz pracować nad swoimi zależnościami podczas rozwoju i chcesz, aby były one automatycznie przebudowywane podczas budowania projektu nadrzędnego, możesz dodać fazę budowania Run Script, która wywołuje Carthage w następujący sposób:
/usr/local/bin/carthage build --platform "$PLATFORM_NAME" --project-directory "$SRCROOT"
Zauważ, że powinieneś używać submodułów zanim to zrobisz, ponieważ zwykłe checkouty nie powinny być modyfikowane bezpośrednio.
Buforowanie buildów
Domyślnie Carthage przebuduje zależność niezależnie od tego, czy jest to ta sama rozwiązana wersja co poprzednio. Przekazanie --cache-builds
spowoduje, że carthage uniknie przebudowy zależności, jeśli będzie to możliwe. Zobacz informacje o plikach wersji, aby dowiedzieć się, jak Carthage wykonuje to buforowanie.
Uwaga: W tym czasie --cache-builds
jest niekompatybilne z --use-submodules
. Użycie obu spowoduje, że kopia robocza i zmiany w zależnościach twojego submodułu nie zostaną poprawnie przebudowane. Zobacz #1785 po szczegóły.
Uzupełnianie Bash/Zsh/Fish
Automatyczne uzupełnianie poleceń i opcji Carthage jest dostępne jak udokumentowano w Bash/Zsh/Fish Completion.
Obsługa Carthage dla Twojego frameworka
Carthage oficjalnie obsługuje tylko dynamiczne frameworki. Dynamiczne frameworki mogą być używane na każdej wersji OS X, ale tylko na iOS 8 lub nowszym. Dodatkowo, od wersji 0.30.0 Carthage obsługuje statyczne frameworki.
Ponieważ Carthage nie ma scentralizowanej listy pakietów, ani formatu specyfikacji projektu, większość frameworków powinna budować się automatycznie.
Specyficzne wymagania każdego projektu frameworka są wymienione poniżej.
Udostępnij swoje schematy Xcode
Carthage zbuduje tylko te schematy Xcode, które są udostępnione z Twojego .xcodeproj
. Możesz sprawdzić, czy wszystkie zamierzone schematy zostały zbudowane pomyślnie, uruchamiając carthage build --no-skip-current
, a następnie sprawdzając folder Carthage/Build.
Jeśli ważny schemat nie został zbudowany po uruchomieniu tego polecenia, otwórz Xcode i upewnij się, że schemat jest oznaczony jako udostępniony, aby Carthage mógł go odkryć.
Rozwiązywanie błędów budowania
Jeśli napotkasz błędy budowania w carthage build --no-skip-current
, spróbuj uruchomić xcodebuild -scheme SCHEME -workspace WORKSPACE build
lub xcodebuild -scheme SCHEME -project PROJECT build
(z rzeczywistymi wartościami) i zobacz, czy ten sam błąd występuje tam. To powinno przynieść wystarczająco dużo informacji, aby rozwiązać problem.
Jeśli masz zainstalowanych kilka wersji narzędzi deweloperskich Apple (na przykład Xcode beta), użyj xcode-select
, aby zmienić wersję, której używa Carthage.
Jeśli nadal nie jesteś w stanie zbudować swojego frameworka z Carthage, otwórz problem, a my z przyjemnością pomożemy!
Znaczniki stabilnych wydań
Carthage określa, które wersje Twojego frameworka są dostępne, przeszukując znaczniki opublikowane w repozytorium i próbując interpretować każdą nazwę znacznika jako semantyczną wersję. Na przykład, w tagu v1.2
, semantyczna wersja to 1.2.0.
Tagi bez numeru wersji lub z dowolnymi znakami po numerze wersji (np, 1.2-alpha-1
) są obecnie nieobsługiwane i będą ignorowane.
Archiwizacja gotowych frameworków w jednym pliku zip
Carthage może automatycznie używać gotowych frameworków, zamiast budować je od zera, jeśli są dołączone do wydania GitHub Release na repozytorium Twojego projektu lub poprzez binarny plik definicji projektu.
Aby zaoferować wbudowane frameworki dla konkretnego tagu, pliki binarne dla wszystkich obsługiwanych platform powinny być spakowane razem w jedno archiwum, a to archiwum powinno być dołączone do opublikowanego wydania odpowiadającego temu tagowi. Załącznik powinien zawierać .framework
w swojej nazwie (np., ReactiveCocoa.framework.zip
), aby wskazać Kartaginie, że zawiera binarki. Struktura katalogów w archiwum jest dowolna, ale frameworki powinny pojawić się w archiwum tylko raz, ponieważ zostaną skopiowane do Carthage/Build/<platform>
na podstawie ich nazwy (np. ReactiveCocoa.framework
).
Operację archiwizacji można wykonać w samym carthage używając:
-carthage build --no-skip-current-carthage archive YourFrameworkName
lub alternatywnie
carthage build --archive
Draft Releases będą automatycznie ignorowane, nawet jeśli odpowiadają żądanemu tagowi.
Użyj travis-ci do wgrania swoich tagowanych prebuilowanych frameworków
Możliwe jest użycie travis-ci w celu zbudowania i wgrania swoich tagowanych wydań.
-
Zainstaluj travis CLI za pomocą
gem install travis
-
Skonfiguruj travis-ci dla swojego repozytorium (Krok 1 i 2)
-
Utwórz plik
.travis.yml
w korzeniu swojego repozytorium w oparciu o ten szablon. UstawFRAMEWORK_NAME
na właściwą wartość.Replace PROJECT_PLACEHOLDER i SCHEME_PLACEHOLDER
Jeśli używasz przestrzeni roboczej zamiast projektu usuń linię xcode_project i odkomentuj linię xcode_workspace.
Projekt powinien mieć format: MyProject.xcodeproj
Przestrzeń robocza powinna być w formacie: MyWorkspace.xcworkspace
Możesz swobodnie zaktualizować wartość
xcode_sdk
do innego SDK, zauważ, że testowanie na iphoneos SDK wymagałoby przesłania tożsamości podpisywania koduWięcej informacji można znaleźć w 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
-
Run
travis setup releases
, postępuj zgodnie z dokumentacją tutajTo polecenie zakoduje twoje dane uwierzytelniające GitHub w pliku
.travis.yml
, aby umożliwić travisowi przesłanie wydania do GitHub.comGdy pojawi się monit o plik do przesłania, wpisz$FRAMEWORK_NAME.framework.zip
-
Zaktualizuj sekcję deploy, aby działała na tagach:
W
.travis.yml
zlokalizuj:on: repo: repo/repo
I dodaj
tags: true
iskip_cleanup: true
:skip_cleanup: trueon: repo: repo/repo tags: true
To pozwoli travisowi wiedzieć, aby utworzyć wdrożenie, gdy nowy tag zostanie popchnięty i zapobiegnie czyszczeniu przez travisa wygenerowanego pliku zip
Zbuduj statyczne frameworki, aby przyspieszyć czasy uruchamiania aplikacji
Jeśli osadzasz wiele dynamicznych frameworków w swojej aplikacji, jej czasy uruchamiania przed głównym uruchomieniem mogą być dość powolne. Carthage jest w stanie pomóc złagodzić ten problem, budując dynamiczne frameworki jako statyczne frameworki. Statyczne frameworki mogą być połączone bezpośrednio w aplikacji lub połączone w większe dynamiczne frameworki z kilkoma prostymi modyfikacjami przepływu pracy, co może skutkować znacznym skróceniem czasu uruchamiania przed startem głównym.
Carthage 0.30.0 lub nowsza
Od wersji 0.30.0 projekt Carthage rozwija wsparcie dla statycznie połączonych frameworków napisanych w Swift lub Objective-C, dla których wsparcie zostało wprowadzone w Xcode 9.4. Proszę jednak zauważyć, że jest tu mowa konkretnie o frameworkach, stąd Darwin bundle z rozszerzeniem .framework i statycznie połączone archiwa obiektów wewnątrz. Carthage nie obsługuje obecnie schematów bibliotek statycznych, ani nie ma planów wprowadzenia ich obsługi w przyszłości.
Przebieg pracy różni się nieznacznie:
- Wciąż musisz zaznaczyć schematy projektu zgodnego z Carthage jako współdzielone w Product > Scheme > Manage Schemes…, tak jak w przypadku dynamicznych binariów
- Wciąż musisz łączyć się ze statycznymi .frameworków w fazach budowania projektu, tak jak w przypadku dynamicznych binariów
Jednakże:
- W ustawieniach budowania, sekcji Linkowanie, w docelowym Cocoa Framework projektu zgodnego z Carthage, ustaw typ Mach-O na Static Library
- Twoje statycznie połączone frameworki będą budowane pod adresem ./Carthage/Build/$(PLATFORM_NAME)/Static
- Nie powinieneś dodawać żadnych statycznych frameworków jako plików wejściowych/wyjściowych w fazie budowania carthage copy-frameworks
Carthage 0.29.0 lub niższej
Zobacz dokument StaticFrameworks, aby uzyskać szczegółowe informacje.
Proszę zauważyć, że do tego podejścia stosuje się kilka zastrzeżeń:
- Swift static frameworks nie są oficjalnie wspierane przez Apple
- Jest to zaawansowany przepływ pracy, który nie jest wbudowany w Carthage, YMMV
Zgłoś swoją kompatybilność
Chcesz zareklamować, że Twój projekt może być używany z Carthage? Możesz dodać plakietkę zgodności:
… do swojego README
, po prostu wstawiając następujący Markdown:
(https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
Znane problemy
Problem z symbolem DWARFs
Pre-build framework nie może być debugowany przy użyciu step execution na maszynie innej niż ta, na której został zbudowany. Po prostu carthage bootstrap/build/update --no-use-binaries
powinno to naprawić, ale dla bardziej zautomatyzowanego obejścia, zobacz #924. Zduplikuj rdar://23551273, jeśli chcesz, aby Apple naprawiło pierwotną przyczynę tego problemu.
CarthageKit
Większość funkcjonalności carthage
narzędzia wiersza poleceń jest w rzeczywistości zamknięta we frameworku o nazwie CarthageKit.
Jeśli jesteś zainteresowany użyciem Carthage jako części innego narzędzia lub rozszerzeniem funkcjonalności Carthage, spójrz na kod źródłowy CarthageKit, aby sprawdzić, czy API pasuje do Twoich potrzeb.
Różnice między Carthage a CocoaPods
CocoaPods to znany od dawna menedżer zależności dla Cocoa. Dlaczego więc stworzono Carthage? Po pierwsze, CocoaPods (domyślnie) automatycznie tworzy i aktualizuje obszar roboczy Xcode dla Twojej aplikacji i wszystkich zależności. Carthage buduje binaria frameworków za pomocą xcodebuild
, ale pozostawia odpowiedzialność za ich integrację użytkownikowi. Podejście CocoaPods jest łatwiejsze w użyciu, podczas gdy podejście Carthage jest elastyczne i nieinwazyjne.
Cel CocoaPods jest wymieniony w jego README w następujący sposób:
… aby poprawić odkrywanie i zaangażowanie w biblioteki open-source stron trzecich, tworząc bardziej scentralizowany ekosystem.
Dla kontrastu, Carthage została stworzona jako zdecentralizowany menedżer zależności. Nie ma centralnej listy projektów, co redukuje prace konserwacyjne i pozwala uniknąć centralnego punktu awarii. Jednak odkrywanie projektów jest trudniejsze – użytkownicy muszą korzystać z Trending pages GitHuba lub podobnych.
Projekty CocoaPods muszą również mieć tak zwany plik podspec, który zawiera metadane o projekcie i określa, jak powinien być zbudowany. Carthage używa xcodebuild
do budowania zależności, zamiast integrować je w jeden obszar roboczy, nie ma podobnego pliku specyfikacji, ale twoje zależności muszą zawierać swój własny projekt Xcode, który opisuje, jak budować ich produkty.
Ultimately, we created Carthage because we wanted the simplest tool possible – dependency manager that gets the job done without taking over the responsibility of Xcode, and without creating extra work for framework authors. CocoaPods oferuje wiele niesamowitych funkcji, których Carthage nigdy nie będzie miała, kosztem dodatkowej złożoności.
Licencja
Carthage jest wydana na licencji MIT.
Zdjęcie tła nagłówka jest wydane na licencji CC BY-NC-SA 2.0. Oryginalne zdjęcie autorstwa Richarda Mortela.