# How Apollo Manages Swift Packages in a Monorepo with Git Subtrees

DevFeed: [How Apollo Manages Swift Packages in a Monorepo with Git Subtrees](<https://devfeed.tech/articles/how-apollo-manages-swift-packages-in-a-monorepo-with-git-subtrees-23357.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/how-apollo-manages-swift-packages-in-a-monorepo-with-git-subtrees>)

Author: Zach FettersMoore

Published: 2024-01-30T07:45:00Z

Content type: article

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [monorepo](<https://devfeed.tech/topics/monorepo.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [swift-package-manager](<https://devfeed.tech/topics/swift-package-manager.md>), [Git](<https://devfeed.tech/topics/git.md>), [Submodules](<https://devfeed.tech/topics/submodules.md>), [Library](<https://devfeed.tech/topics/library.md>), [Package manager](<https://devfeed.tech/topics/package-manager.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Code](<https://devfeed.tech/topics/code.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [development](<https://devfeed.tech/tags/development.md>), [git](<https://devfeed.tech/tags/git.md>), [ios](<https://devfeed.tech/tags/ios.md>), [library](<https://devfeed.tech/tags/library.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [monorepo](<https://devfeed.tech/tags/monorepo.md>), [packages](<https://devfeed.tech/tags/packages.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [submodules](<https://devfeed.tech/tags/submodules.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-package](<https://devfeed.tech/tags/swift-package.md>), [swift-package-manager](<https://devfeed.tech/tags/swift-package-manager.md>), [testing](<https://devfeed.tech/tags/testing.md>)

## AI overview

The article describes Apollo iOS's challenges with managing multiple Swift Package Manager library targets in a monorepo. It explains the goal of distributing smaller, independently versioned packages while preserving an efficient shared development and testing workflow, and discusses Git submodules as one approach and its operational drawbacks.

## Source excerpt

The monorepo is a common structure for many software projects, and Apollo iOS is no different. Our project was structured in a single repo containing many different Swift Package Manager (SPM) library targets, along with test code and code only used as part of development. This presents a few problems however, one being that when a user adds the SPM package as a dependency, it will pull down all of the code and files in the repo, even though most of them aren't needed.