This article was accepted into the corpus but its outbound wikilinks were never NER-processed — typical at the deepest BFS hop or when the run's entity cap was reached. No expansion funnel to show.
| Carthage (software) | |
|---|---|
![]() | |
| Name | Carthage |
| Developer | GitHub |
| Released | 2014 |
| Programming language | Swift |
| Operating system | macOS |
| Platform | iOS, macOS, tvOS, watchOS |
| License | MIT License |
Carthage (software) is a decentralized package manager for Swift and Objective‑C projects that emphasizes minimalism and noninvasive integration into Xcode workflows. It provides a lightweight alternative to integrated systems by producing binary frameworks and leveraging Git and semantic versioning to manage dependencies for Apple Inc. platforms such as iOS, macOS, tvOS, and watchOS. The tool is associated with the developer community around GitHub and the Swift (programming language) ecosystem.
Carthage was created to handle third‑party libraries in Xcode projects while avoiding tight coupling with build systems like CocoaPods and Buck (build tool), and it relies on Git for source retrieval, Semantic Versioning for version selection, and SwiftPM for conceptual comparisons. It outputs prebuilt frameworks compatible with Xcode schemes and supports binary distribution models similar to approaches used by Binary frameworks in commercial products from Apple Inc.. The design aligns with philosophies promoted by contributors from organizations such as Realm (company), ReactiveCocoa, and maintainers active on GitHub.
Development of Carthage began in the early 2010s amid community interest sparked by the release of Swift (programming language) at WWDC and the growth of package management debates on GitHub and the Swift Evolution forums. Key contributors included developers from projects like ReactiveCocoa, Alamofire, and engineers formerly associated with Twitter, Inc. and Raleigh‑based startups who sought to avoid the centralized manifest model used by CocoaPods. Over time, updates tracked interoperability improvements with Xcode releases, adjustments for new Swift language versions, and changes influenced by discussions at events such as WWDC and community proposals on GitHub Issues.
Carthage's architecture centers on a minimal runtime that orchestrates cloning from GitHub, Bitbucket, or other Git hosts and building using xcodebuild while preserving upstream project build systems. It uses a plain text Cartfile for dependency declarations and a Cartfile.resolved for reproducible builds, integrating with Xcode by producing framework artifacts that are manually linked into projects. This design contrasts with monolithic systems by avoiding a centralized repository like the one used by npm, delegating version resolution to a lightweight SAT‑style resolver informed by Semantic Versioning, and enabling binary distribution paths akin to those used by Dropbox and Facebook SDK distributions.
Dependencies are declared in a Cartfile using Git repository identifiers and version specifiers following Semantic Versioning conventions; resolution produces a Cartfile.resolved that pins commits or tagged releases to support deterministic builds. The resolver interacts with remote hosts such as GitHub and Bitbucket and honors tags created in repositories by maintainers from projects like Alamofire, ReactiveSwift, and Kingfisher. When faced with version conflicts, Carthage applies constraint solving techniques similar in goal to those in Bundler (Ruby), Cargo (software), and Maven but intentionally avoids enforcing a global lockfile model imposed by systems like npm or Yarn (package manager).
Carthage invokes xcodebuild to build frameworks for supported platforms and places outputs in a Carthage/Build directory for manual integration into Xcode projects or workspaces. Integrators add the produced frameworks to Xcode targets, configure runpath search paths, and, if desired, use script phases to copy frameworks into app bundles similarly to practices described in Apple Developer Documentation. Carthage also supports prebuilt binary frameworks via JSON‑indexed archives hosted on services like Amazon S3 or artifact repositories maintained by organizations such as Microsoft or Google, enabling CI pipelines with tools like Jenkins, Travis CI, and GitHub Actions to cache artifacts.
Compared with CocoaPods, Carthage avoids modifying the Xcode project file and does not create workspaces by default, favoring manual linking and preserving upstream project structures akin to philosophies seen in SwiftPM and Bazel (software). Unlike Carthage competitors, which centralize manifests, Carthage leverages plain Git tags and supports binary distribution, making it distinct from manifest‑centric ecosystems like npm and Maven. In contrast to integrated build systems such as Buck (build tool) or Bazel (software), Carthage remains intentionally simple, focusing on framework production rather than cross‑language build optimization.
Carthage has been adopted by numerous open‑source projects and companies that prioritize explicit dependency control, including libraries like Alamofire, ReactiveCocoa, and Kingfisher, and by teams at firms that use Xcode‑centric CI like CircleCI and Travis CI. While some organizations migrated to SwiftPM following its maturation and Swift community endorsements at WWDC, others continue to prefer Carthage for legacy projects and for cases requiring noninvasive integration into complex Xcode workspaces. The tool remains present in discussions on GitHub and in tooling comparisons on developer forums such as Stack Overflow.
Category:Software