Grow your own Cocoapod

Cocoapods

Why create a Cocoapod?

Over the years we’ve gathered a tonne of useful code snippets/functions/classes to make coding easier. Whether it’s wanting to detect if your app is running on an iPad or checking if an NSDate is between two others, there are a tonne of code snippets out there (mostly on Stack Overflow). Others you may have written yourself and re-used between projects

 

After a few years copying over the same ‘helper’ classes and categories to every new project, I decided it’s time for be a better way to manage this ‘base’ code.

 

Cocoapods is already widely used as an iOS and OSX library dependency manager so why not package everything into a nice, clean cocoapod, then it’s only one line in a podfile to include it in future projects!

Creating a cocoapod is quite straightforward. Cocoapods.org have a great guide to accomplish this so I won’t go into too much detail here. However there were a few things to note during setup.

 

 

Project Setup

It’s one line to create a cocoapod environment. Navigate to a new project folder and run:

pod lib create <project name>

replacing ‘JDUtils’ with your preferred project name. You’ll then be presented with a few config options. I said ‘No’ to including testing frameworks and view based testing but these are up to you.

Likewise you have the option to give a class prefix but can leave blank if desired (My classes all start with “JD” so I chose that).

 

Eventually you’ll end up with a folder containing your podspec file, classes folder and an Xcode project shortcut. I’ve modified the default podspec file so it looks like this:

Really all that’s changed is the summary, description and source/homepage git URLs. Notice Cocoapods automatically chooses MIT as the licence type. For most open source projects MIT is fine, however I recommend checking out http://choosealicense.com/ if you’re looking for options.

This last line is where I set the default values for my fonts and colours categories. More on that in a bit.

 

 

Submitting Pod

Once you’re happy with your podspec, run the following in terminal replacing ‘<project name>’ with your own to validate it. Then push your project to a git repository of your choosing and tag with the same version number in your podspec. You can commit, tag and push in Sourcetree if easier.

pod lib lint <project name>.podspec 

git add -A

git commit -m “Release 0.1.0”

git tag ‘0.1.0’

git push  – – tags

 

To submit a podspec to the cocoapods repository (where it’ll be accessible to the public) you need to register your machine with

pod trunk register <email address> –description='<machine name>’ 

Then check your inbox for a verification email. After verified it’s just one more command to push to cocoapods specs repo:

pod trunk push <project name>.podspec

 

That’s it! Your cocoapod will be fetched and included in any project with a podfile that references it. 

 

 

 

So what is JDUtils?

JDUtils

JDUtils is a collection of Objective-C Categories that I created for many native objects used in iOS development. The main two are UIFont+Additions and UIColor+Additions. JDAdditions.h also includes a bunch of useful methods such as NSDate comparison, Notification permission check, email regex, UIImage orientation fixing and more.

 

 

UIFont+Additions

The JD Utils UIFont category provides shortcut methods for getting the most common fonts you might use in a project. Just add fonts to your project as you would normally, include them in your info.plist’s “Fonts provided by application” then use the following method to find their usable names:

[UIFont NSLogInstalledFonts];

This will log a list of all fonts installed for your application at runtime. For example:

Next set a preprocessor macro for your desired font name in the list. Preprocessor macros are like #defines but are accessible globally throughout your project. Go to your target’s Build Settings and find the preprocessor macro rows. Then enter the following to set a macro with the font name

JD_APP_FONT=’@”Arial-BoldItalicMT”‘

Now you can use the following method in UIFont+JDAdditions to get this font:

label.font = [UIFont fontWithMacro:JD_APP_FONT size:16.0f];

JDUtils comes with a few pre-defined macros for a Logo font and bold/regular/light versions of an app font of your choosing. Remember that xcconfig line in my podspec earlier? Just override the following macros:

JD_LOGO_FONT

JD_APP_BOLD_FONT

JD_APP_FONT

JD_APP_LIGHT_FONT

Then use the shortcut methods in UIFont+JDAdditions for each:

label.font = [UIFont logoFontWithSize:16.0f];

 

 

 

UIColor+Additions

Like fonts, colours are defined as hex strings in your target preprocessor macros and set using the following method:

label.color = [UIColor colorWithMacro:MY_MACRO_COLOR];

JDUtils comes with a few shortcut methods for colours too. Just override the macros for:

JD_BLACK_COLOR

JD_WHITE_COLOR

JD_DARK_GREY_COLOR

JD_GREY_COLOR

JD_SEMI_LIGHT_GREY_COLOR

JD_LIGHT_GREY_COLOR

JD_REALLY_LIGHT_GREY_COLOR

Then use a pre-defined colour method like:

label.color = [UIColor appBlack];

UIColor+JDAdditions includes methods for getting a UIColor from hex directly, darker and lighter colours from an existing UIColor and quick social channel colour methods.

 

 

Feel free to check out JDUtils on Github and give it a go. Eventually we’ll be upgrading to Swift so stay tuned for updates soon! 

Related Items

Projects
F&B FEATURE IMAGEnew

Frankie & Benny's restaurant app

The new loyalty app for Frankie & Benny's features mobile vouchers and full integration with existing CRM platforms.

Read More
News
Garden-of-Hope-Westfield-main

Garden of Hope wins REVO Opal Award

We are proud to announce that the Garden of Hope project has picked up REVO's Opal Award for Mall Retail over 1 million sq. ft.!

Read More
News
992f0fb9-7276-4304-8780-cfbea0ebe5c8-original

Omnifi makes Deloitte EU Retail Tech 2018

Omnifi has been listed as a leading company in the TNW X and Deloitte Startup Retail Tech Landscape 2018.

Read More