94

My Cartfile has many libraries. When I do carthage update it goes through all the libraries. That can take very long time.

Is there a way to update just a single library with carthage? Something like this? (this will not work)

carthage update "evgenyneu/moa"
Evgenii
  • 36,389
  • 27
  • 134
  • 170

9 Answers9

167

From 0.12 version build, checkout, and update take an optional space separated list of dependencies

For a Cartfile like the following

github "Alamofire/Alamofire"
github "ReactiveX/RxSwift"

You could choose to update one dependency

carthage update Alamofire

or multiple dependencies

carthage update Alamofire RxSwift

If you need to add flags, add them last:

carthage update Alamofire --platform iOS
LinusGeffarth
  • 27,197
  • 29
  • 120
  • 174
Alex Salom
  • 3,074
  • 4
  • 22
  • 33
  • 25
    **carthage update Box --no-use-binaries --platform iOS** // if you need to specify additional flags – nalexn Nov 23 '16 at 07:47
  • @Alex Salom: Box being the name of the repo in the Cartfile? would be easier to understand if you used something more familiar like AlamoFire maybe? And what is the Result portion? Another repo name or? – Sentry.co Feb 02 '17 at 23:17
  • 1
    @GitSyncApp, yeah you have to write the names of the dependencies separated by spaces. I edited my answer – Alex Salom Feb 06 '17 at 10:34
  • @MartinRomañuk what exactly doesn't work? I've just tried the example above with `carthage bootstrap` and it only processed one dependency from the two defined in the Cartfile. Take a look at the screenshot from my terminal https://pasteboard.co/I9bARyq.png – Alex Salom Apr 08 '19 at 13:03
  • @AlexSalom to be fair, you are using `bootstrap` while the answer says to use `update`. With `bootstrap` you are downloading whatever the `Carfile.resolved` says, it won't update. – Lluis Gerard Sep 16 '19 at 11:33
  • `carthage update Box --platform ios --use-ssh --cache-builds --use-xcframeworks` – dwbrito May 03 '23 at 10:04
13

Carthage supports updating single dependencies now.If you have something like this in your Cartfile:

github "bitstadium/HockeySDK-iOS"

Then you can update only this one dependency by running

carthage update HockeySDK-iOS
user978510
  • 177
  • 2
  • 7
9

Right now the answer is no... If your run carthage help update you'll see

Update and rebuild the project's dependencies

[--configuration Release]
    the Xcode configuration to build (ignored if --no-build option is present)

[--platform all]
    the platform to build for (ignored if --no-build option is present)

[--verbose]
    print xcodebuild output inline (ignored if --no-build option is present)

[--no-build]
    skip the building of dependencies after updating

[--use-ssh]
    use SSH for downloading GitHub repositories

[--use-submodules]
    add dependencies as Git submodules

[--no-use-binaries]
    check out dependency repositories even when prebuilt frameworks exist (ignored if --no-build option is present)

[--color auto]
    whether to apply color and terminal formatting (one of ‘auto’, ‘always’, or ‘never’)

[/path/to/your/app]
    the directory containing the Carthage project

As you can see there is no mention to an option to specify only one dependency to update.

You should open an issue on the project repo asking to support that.

mokagio
  • 16,391
  • 3
  • 51
  • 58
9

If the framework isn't stored in GitHub, or you are using the git identifier, and your cartfile looks like this:

git "ssh://git@bitbucket.org/teamname/repo-name.git" ~> 1.0

then you can update only that one running the following command

carthage update repo-name
SeanRobinson159
  • 894
  • 10
  • 19
7

I tried all of the answers, and for me only removing or commenting temporarily the repositories and after running

carthage update --platform ios

after I restore the Catfile to previous state

Ronaldo Albertini
  • 1,329
  • 20
  • 24
5

I ended up writing my own script that builds a single dependency for me and merges it with my existing dependencies. You can find it at https://github.com/ruipfcosta/carthage-workarounds.

Rui
  • 5,900
  • 10
  • 38
  • 56
1

Carthage --no-use-binaries and specific schema

[Carthage flow]

carthage [update|bootstrap|checkout|build] [dependency1] [dependency2] [--no-use-binaries] [--platform <name>]

//--no-use-binaries - does not use prebuild binary and use source code
//--platform - specify a platform

The longest phase is a carthage build(xcodebuild) step because:

  1. carthage build generates fat binary which is built using lipo[About]

  2. Carthage builds all shared frameworks schemes of a project. If you know which exactly schema which you need you can:

    • [UI] Open built project from Carthage/Checkouts folder -> Manage Schemes... -> check specific schemes

    • [Manually] Leave specific schemes at xcschemes folder .../Carthage/Checkouts/<dependency>/<project>.xcodeproj/xcshareddata/xcschemes/<schema>.xcscheme

[Carthage --no-use-binaries]

yoAlex5
  • 29,217
  • 8
  • 193
  • 205
0

Swift 5

//MARK:- Step 1
carthage update KeychainAccess --platform iOS

carthage update SDKNAME(like i mention KeychainAccess upper) --platform iOS

if you face an Error like this

//MARK:- If this error occur
error: unable to find utility "xcodebuild", not a developer tool or in PATH

Then use Part 1 in Terminal Again

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

and again

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Shakeel Ahmed
  • 5,361
  • 1
  • 43
  • 34
0

Looks like carthage update repo-name doesn't work on Carthage 0.36.0. I solved this problem by manually updating Carthage.resolved. For example, add to a Cartfile a new dependency:

github "konkab/AlamofireNetworkActivityLogger" ~> 3.0.0

Add to a Cartfile.resolved a new dependency manually:

github "konkab/AlamofireNetworkActivityLogger" "3.0.0"

Then do carthage bootstrap to only update one dependency:

carthage bootstrap

It will use Carthage.resolved and just add one dependency.

Denis Kutlubaev
  • 15,320
  • 6
  • 84
  • 70