CocoaPods is a great tool not only for adding open source code to your project, but also for sharing components across projects. You can use a private Spec Repo to do this.
There are a few steps to getting a private pods setup for your project; creating a private repository for them, letting CocoaPods know where to find it and adding the podspecs to the repository.
<1. Create a Private Spec Repo
To work with your collection of private pods, we suggest creating your own Spec repo. This should be in a location that is accessible to all who will use the repo.
You do not need to fork the CocoaPods/Specs Master repo. Make sure that everyone on your team has access to this repo, but it does not need to be public.
<2. Add your Private Spec Repo to your CocoaPods installation
$ pod repo add REPO_NAME SOURCE_URL
To check if your installation is successful and ready to go:
$ cd ~/.cocoapods/repos/REPO_NAME
$ pod repo lint .
<3. Add your Pod's Podspec to your repo
Make sure you've tagged and versioned your source appropriately, then run:
$ pod repo push REPO_NAME SPEC_NAME.podspec
This will run pod spec lint
, and take care of all the little details for setting up the spec in your private repo.
The structure of your repo should mirror this:
.
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
<That's it!
Your private Pod is ready to be used in a Podfile. You can use the spec
repository with the source
directive
in your Podfile as shown in the following example:
source 'URL_TO_REPOSITORY'
<An Example
<1. Create a Private Spec Repo
Create a repo on your server. This can be achieved on Github or on your own server as follows
$ cd /opt/git
$ mkdir Specs.git
$ cd Specs.git
$ git init --bare
(The rest of this example uses the repo at https://github.com/artsy/Specs)
<2. Add your repo to your CocoaPods installation
Using the URL of your repo on your server, add your repo using
$ pod repo add artsy-specs https://github.com/artsy/Specs.git
Check your installation is successful and ready to go:
$ cd ~/.cocoapods/repos/artsy-specs
$ pod repo lint .
<3. Add your Podspec to your repo
Create your Podspec
cd ~/Desktop
touch Artsy+OSSUIFonts.podspec
Artsy+OSSUIFonts.podspec should be opened in the text editor of your choice. Typical contents are
Pod::Spec.new do |s|
s.name = "Artsy+OSSUIFonts"
s.version = "1.1.1"
s.summary = "The open source fonts for Artsy apps + UIFont categories."
s.homepage = "https://github.com/artsy/Artsy-OSSUIFonts"
s.license = 'Code is MIT, then custom font licenses.'
s.author = { "Orta" => "[email protected]" }
s.source = { :git => "https://github.com/artsy/Artsy-OSSUIFonts.git", :tag => s.version }
s.social_media_url = 'https://twitter.com/artsy'
s.platform = :ios, '7.0'
s.requires_arc = true
s.source_files = 'Pod/Classes'
s.resources = 'Pod/Assets/*'
s.frameworks = 'UIKit', 'CoreText'
s.module_name = 'Artsy_UIFonts'
end
Save your Podspec and add to the repo
pod repo push artsy-specs ~/Desktop/Artsy+OSSUIFonts.podspec
Assuming your Podspec validates, it will be added to the repo. The repo will now look like this
.
├── Specs
└── Artsy+OSSUIFonts
└── 1.1.1
└── Artsy+OSSUIFonts.podspec
See this Podfile for an example of how the repo URL is included
<How to remove a Private Repo
pod repo remove [name]