Developing and Distributing Private Libraries with Cocoapods

Developing and Distributing Private Libraries with Cocoapods
COMMENTS ()
Tweet

Hey Guys,

In this post I’m going to show you how to develop and distribute in-house private code libraries using Cocoapods. Cocoapods by the way is an excellent tool for managing third party dependencies in a project. It not only provides a way for easily integrating those dependencies but also allows you create your own dependencies and manage them as well. And best of all, you can it to simplify code sharing inside your organization. This is known as a private pod and is described in great detail on the cocoapods site.

In this blog I’m going to show you a simpler way to create a private pod, which will be easier to understand for beginners as well.

The most important thing you should keep in mind while creating a private pod is that it requires the creation of two repositories. One repository is for the code or classes you want to share (which we call the ‘Pod’) and the other is the ‘Podspec’ repository which includes all the information about that Pod. The Podspec repository needs to be created once for all the pods you create, but the pod repository is a separate repository for each branch of code you want to reuse and share with your team.

Having said that, the first step we need to perform is to create these repositories. Let’s jump right to it.


Step 1: Create your Podspec Repository on Github

First of all, you need to create the private ‘Podspec’ repository. For this you need to create a repository in Github first. To do so:

  • Go to Github
  • Create new repo
  • Select the private option and name your spec repository. In this case we have created a repository named folio3-specs in Github.)
  • Now run the following commands


echo "# folio3-specs" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/shahabejaz/folio3-specs.git
git push -u origin master

The above created repository does not hold anything yet other than a Readme.md file. We will address this later when we create our first pod.


Step 2: Add your Private Repository to your CocoaPods Installation

Once you’re done with creating a spec repository in Github, you only need to run the following command in the terminal to add your private repository to the cocoapods installation.

pod repo add [REPO_NAME] [SOURCE_URL]

In the above code snippet REPO_NAME is the name you will use to reference the ‘PodSpec’ repo and SOURCE_URL is the Github url of the repository you just have created. In this case our repository name is folio3-specs and the source URL is the Github URL of that repository.

If everything worked correctly then you should be able to link your spec repository by running the following commands.

cd ~/.cocoapods/repos/REPO_NAME
pod repo lint
.

Now that our podspec repository is ready, we can move forward and create our second private repository which is our Pod repo. This repository will hold the code you want to share within the organization.


Step 3: Create your Pod Repository on Github

First we’ll need to create an empty Github repository as specified in Step 1 above, only now, we’ll give it the name of the pod we want to share. So we’ll name the repository FLCommonLibrary. This is basically a repository that holds a bunch of utilities and categories that are used in different projects across the organization.



wordpress plugin



Step 4: Generate the Pod Project

CocoaPods provides a nice utility to help you setup your Pod project along with a test app and testing framework. So to generate your Pod project, just run the following command while standing at your empty github repo directory.

pod lib create [POD_NAME]

where [POD_NAME] is the name of the pod you’re creating and want to share with fellow developers in your organization.

After running the above specified command you will be prompted by an interactive script to select various options for your new Pod project. After selecting those options (as shown below) cocoapod will run ‘pod install’ on the sample project we’ve just created.



wordpress plugin


The end result will be an XCode workspace that is setup for you to commence Pod development. If you already have some source files to add to the project, you can copy them into the Pod/Classes folder that has been created for you. You’ll also find that a default test app has been created for you where you can write unit tests and view tests for your Pod.

After the completion of this command the .workspace project will open up automatically. If it does not, open the .workspace file in the sample project. You will see a ReplaceMe.m file in the pod target as shown below.



wordpress plugin


This is the location where you will put the files [.h,.m] that you want to share with your pod. You will also see the Podspec Metadata folder as well. Next, we need to edit the podspec file.


Step 5: Edit the Podspec File

Open the newly generated podspec file. Thankfully Cocoapod has generated a well completed pod spec template for us.

A Podspec file, or Spec, describes a version of a Pod library. It includes details about where the source files are located, which files to use, the build settings to apply, dependencies, frameworks used and other general metadata such as the name, version and description for the Pod.

Below is an example of a Podspec generated by cocoapod for our private pod:



wordpress plugin


Now, open up the terminal again and go to the folder where the .podspec file is located and run the following command without changing anything in the .podspec file.

pod lib lint FLCommonLibrary.podspec

When you do that, you might see the following output.



wordpress plugin


If you do, it means that something’s wrong with our podspec file. So we’ll need to resolve those issues. To do so, we need to do the following.

  • Specify the proper summary of our pod
  • Add some description
  • Replace the with our Github’s username

After making these changes, run the pod lib lint FLCommonLibrary.podspec again.

Tip: You should also specify the Github username for the s.source field otherwise it will generate errors later on when you push this podspec to your spec repo.

This time you’ll see that the command is successful, as you can see in the screenshot below.



wordpress plugin


Now, we’re good to go with the podspec file and our pod is ready to have some shareable files added to it. So we’ll do exactly that.


Step 6: Add Code in your Pod

Since we have created some reusable utility classes and extensions which we want to share with our team, we will drag and drop these files in the folder (as depicted below).



wordpress plugin


Now we want to test these files in the sample project we created. For this we will run the pod install command on our sample project. This will install these files in the sample project’s Pod file. You can include these files in the sample project by using the following command.

.

After testing in the sample project, you are ready to push the pod project and share it with fellow developers in your organization.

Note: Remove the ReplaceMe.m file, it’s of no use any more.


Step 7: Push your Pod in the Specs Repo

Now that you’ve built and tested your Pod, it’s time to deploy it to your private Podspec repository. The first thing you need to do, in order to do this, is tag your Pod’s Git repo.


Step 7a: Tagging

First we will update the pod version in the .podspec file to 1.0.1 and will commit the changes on Github. You can change it to any version that is suitable to you but make sure that it is the same version as your Git tag version.

Now we will tag the code on Github by running following command on our repo from the terminal.

git tag ‘1.0.1’
git push –tags


Step 7b: Push to Spec Repo

After pushing the tag to the pod repo, you need to push this pod to your private spec repo which you created in the first step. To do that, run the following command to send the library your private Podspec repo.

pod repo push [REPO_NAME] [POD_NAME].podspec

In this case, folio3-specs is the repo_name and FLCommonLibrary is the pod_name of our pod. So you should specify (substitute) these names in above code snippet.



wordpress plugin


Tip: Before running this command you should run the pod spec lint FLCommonLibrary.podspec to validate that your spec is correct.

Now you can see that this pod repo is referenced in your spec repo (as shown below).



wordpress plugin



Step 8: Share It with Your Team

If you want other members of your development team to be able to use this pod then they should have access to the spec repo, and they must add the private repo to their local Cocoapods installation with the command:

pod repo add [REPO_NAME] [SOURCE_URL]

They also need to specify the source URL of the spec repo at the top of the pod file, so that cocoapods knows where to find the installation of your pod (as shown below).



wordpress plugin


Congratulations! You have just published your first private Pod with your team. You can now leverage the benefits of reusable code in your internal iOS projects using the power of cocoapods.

Tip: You can get the latest updates in cocoapods by following them on twitter: https://twitter.com/cocoapods

Happy coding and keep sharing 🙂



Explore our blog


ABOUT FOLIO3

As a leading mobile app development company (iPhone, Android, Windows Phone, HTML5 app development), Folio3 specializes in native app development services and cross platform mobile app development services for the iPhone and iPad. We also offer extensive mobile app testing and QA services. If you have a mobile app idea that you’d like to discuss please or would like to know more about our iPhone app development services, please Contact Us. Learn more about our iPhone, Android and Windows Phone app development services.

CALL

USA408 365 4638

VISIT

1301 Shoreway Road, Suite 160,

Belmont, CA 94002

Contact us

Whether you are a large enterprise looking to augment your teams with experts resources or an SME looking to scale your business or a startup looking to build something.
We are your digital growth partner.

Tel: +1 408 365 4638
Support: +1 (408) 512 1812