Better Programming

Advice for programmers.

Follow publication

Create a Swift 5 Static Library

Rostyslav Druzhchenko
Better Programming
Published in
6 min readOct 15, 2019

Photo by Fabian Grohs on Unsplash

In this article, we will consider creating a static library for Swift 5 and its integration to another project.

The article is mostly like a step-by-step how-to tutorial and does not cover a lot of theoretical and historical topics. It also does not aim to consider all the possible cases where static libraries can be used or created.

It’s just a short and basic tutorial to create your first Swift static library for an iOS application as simple and fast as possible.

Create Static Library Project

Let’s create a library project first. Open Xcode and select Cocoa Touch Static Library.

Give it a name and select Swift as the development language. In our case, we will call it Networking and assume that it will contain the code to communicate with a back end.

Press Cmd+N and select Swift file.

Give it a name, in our case, we will create a dummy class to communicate with the authentication part of the back-end API and call it AuthenticationService.

Paste the code below to the created file:

Important: Make sure you made your class and methods public. Otherwise, those methods and classes won’t be available from a project that you are going to use your library.

Moreover, you have to write an implementation for init and explicitly make it public.

Then, select any Simulator as a target to build.

Then, press Cmd+B to build the project, and in the Project Navigator in the Products section, you will find a binary file called libNetworking.a.

Don’t mind the prefix lib, that’s fine. It’s the way Apple provides naming.

That’s actually it for static library creation. You’ve just built your library for the simulator. You can also build it for mobile devices, but in this tutorial we will skip it to keep the tutorial simple and concentrate on the general idea.

Integration to Another Project

OK, now that we have a binary code file, let’s use it in another project.

In Xcode, press Cmd+Shift+N and from the window that appears, selectSingle View Project. Press Next.

Call the project whatever you want, for instance, SimpleApplication, and press Next again.

After the project is created, we are ready to integrate the library we created in the previous section.

The first thing is that we need to add the compiled library’s files to the new project. To reach that, right-click on the project name in the project navigator and select Show in Finder.

In the opened Finder’s window, create a new folder in the project’s root folder and name it lib.

Go back to the library project in Xcode, find the file libNetworking.a in the project navigator, right-click on it, and select Show in Finder.

You will find the libNetworking.a file and Networking.swiftmodule folder there. Copy and paste them both to the SimpleApplication/lib folder.

Move back to Xcode and right-click on the project’s name again, select Add files to "SimpleApplication".

In the window that appears, make sure that the Create Groups radio button is selected, select lib folder, and press Add.

Now you have the library for your new project and Xcode even did some integration for you. Now your task is to check if it did it correctly and perform some additional steps.

Select the project’s name in project navigator, then select General, and select your’s application target.

The section Linked Frameworks and Libraries has to contain a line with libNetworking.a. If it does not, press the + button and select it manually. Make sure that the Required status is selected.

After that, go to the Build Phases tab, expand Link Binary with Libraries, and make sure that it contains a line with libNetworking.a. If it does not, again, add it manually and set it to required.

Finally, we’ve reached the last, and maybe the most sensitive integration step — setting paths. It’s a step where it’s very easy to make a mistake, so be neat and careful.

In the Build Settings (1) tab, select your target (2), select All (3), and Combined (4).

In the search field (5) in the top-right corner, type Search Paths. Copy the path from Library Search Path (6) and paste it to Import Paths (7).

If there is no value in Library Search Path, add a new one, $(PROJECT_DIR)/lib. Do the same for Import Paths.

Then, go to your ViewController class and add the code there:

Let’s discuss this small piece of code.

  • // 1 — Import Networking library. It will give you the ability to use the code from your library in ViewController.
  • // 2 — Create an instance of a class that belongs to the library.
  • // 3 — Make a call for a method that belongs to the library and save the result to a local variable. For sure, we send some dummy data and receive a dummy response here.
  • And the last // 4 — print the result to the console. When you run your project, you have to see something like this:

Of course, you will see another value for the token, as we program our method to return a random value.

That’s pretty much it. Now you have a working workflow to encapsulate your code to a static library, and you can extend it with the code that you need for your real-life project.

What’s Next?

As we mentioned above, in this article we described static library creation, only for the simulator. For sure, in most cases it’s not enough, and usually you need compiled code for both architectures, simulator and mobile device.

There is more. You have to make a single binary file that contains code for both architectures. It’s known as fat, or it’s better to say universal library. It will be the next step to do.

That’s finally it. Thanks for reading and don’t hesitate to ask any questions related to the topics described in the article.

Happy coding.

References

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Rostyslav Druzhchenko
Rostyslav Druzhchenko

Written by Rostyslav Druzhchenko

An experienced software engineer with over 17 years in mobile development. Interested in Swift, iOS, Java and music programming. Skydive as a hobby.

Responses (7)

Write a response

I used this method to create an '.a' file made in Swift. How can I get it to work in Objective-C?

--

Thanks for the helpful tutorial. However, I couldn't find anything like the "Product" section after building the project. The build was succeeded, but not a single file was generated. I think I followed all you instructed. I downloaded the project…

--