I created a static library in Swift and the goal is of course to distribute this and reuse this library in another project. In the project where I want to import this static library I do the following:
Drag xcode project from static library in Project Navigator
Drag xxxx.a (inside Products folder) to Build Phases > Link binaries with libraries
In the class where I want to use this library add: import MyStaticLib
Unfortunately I get an error saying: No such module 'MyStaticLib'.
But then when I create a new project in Xcode and do the exact same steps there's no error at all and I'm able to use the library in any class that imports this library. I looked at both project settings and can't seem to find anything weird.
Settings like Header Search Path and Library Search Path are empty in both projects.
Can someone point me in the right direction?
I built a static libxyz.a in one xcode project and am trying to include it in a separate app project abc.xcodeproj. I also put the public .h files in Build Phase->Copy Files in this library project, according to this: https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/creating.html#//apple_ref/doc/uid/TP40012554-CH2-SW1
I included libxyz.a in Build Phase->Link Binary With Libraries of all the dependent frameworks.
However when I tried to build the abc.app target, I got error messages that the public .h files from the libxyz.a proejct could not be found.
I tried several things but could not fix the problem.
Any idea? Thanks!
Hi My app storyboard works and I can link the custom class of my MainProject Storyboard to Static Library ViewController but my problem is when i try to use #import from my MainProject to locate for header files, my header files in my Static library doesn't show up.
here's my project settings(SecondSample is my Static Library)
My MainProject header search path
My Static Library build setting
I hope someone can help me with my issue. Thanks in advance :)
EDIT: I didn't copy my static library to my MainProject folder... I've just add a reference to it.
I have a static library project and in that project I linked a .xcodeproj to the source code so I can update easily actually and to not copy and paste files in the static library project for easy update.
The purpose thought it's to embed this .xcodeproj with my code into the result static library or .framework that I will build using a script.
Although I can see that there is nothing added in the compile sources or the copy header files which I added. If I try to add with drag and drop files from the linked project to my static library build phases copy header section it copies the file to my project again, but I don't want this.
And if I add a header file #import to one of my public headers and try to use the static library to the client project it complains that the header is not found!
So, in the end, what I want is the whole linked project files to be copied in the resulting static library or .framework with the scripts and target I have.
Is this possible to achieve, I think I miss some project setting that I'm not aware about that will see and copy all header and implementation files to my result static library or .framework?
Is my approach overall correct? I don't think that there is no option to use a linked project in a static library and embed it when the build is happening since I am using it in my project!
I could add the .framework of the third party component too and merge to my static library. I have created this question earlier today. Is it possible to include a .framework in a .framework and how?
Regards.
Not sure if your #import-not-found issue is a linker issue, but...
Make sure to use the -ObjC flag in "Other Linker Flags" in the library's Build Settings. This gets the linker to build everything in the library.
Mentioned here:
https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html
And also make sure you link in the library in the build settings for the project that needs it.
How can I create static library and can add just .a file on any project in ios.
I tried doing this but couldn't do it.
Thanks in advance
if you want create static lib mean refer the link http://jaym2503.blogspot.in/2013/01/how-to-make-universal-static-library.html
Step 1 : Create a New Project, Named it "Logger"
Step 2 : Create Classes
You can create as many classes you wants, In our tutorial we will create one class named "Logger".
So, now two files should be in our resource.
1. Logger.h
2. Logger.m
Step 3 : Put some useful code into Classes
Step 4 : Create New Target
Create New Target from File Menu.
New Target
Select Cocoa Touch Static Library
Step 5 : Add files to Compile Resource
Select "Logger" Target of Static Library
Go to Build Phases
In Complied Sources section, Add all the .m and .mm files.
In Copy Files section, Add all the .h files and resource files.
Build Phases
Step 6 : Compile Project with Static Library Target
Compile Project for iOS Device
Compile Project for Simulator
You can find two different .a files generated in build folders.
Find .a file
Step 7: Make Static Library Universal
You can find two different library now, one is for simulator and one is for iOS devices.
Create a New Folder and name it LoggerMerge.
Copy libLogger.a file of Debug-iphoneos folder to "LoggerMerge" rename it to libLogger_device.a
Copy libLogger.a file of Debug-iphonesimulator folder to "LoggerMerge" rename it to libLogger_simulator.a
Open LoggerMerge folder with Terminal
Fire below command
lipo -create "libLogger_simulator.a" "libLogger_device.a" -output "libLogger.a"
Now, you can find libLogger.a in LoggerMerge folder, this is Universal static library file.
Now, Just one thing you need is headers, See above screenshot there is folder called include in both build folder. Just copy header file from this folder.
Step 8 : Test Static Library
Create New Project, name it TestLogger
Import libLogger.a and header files
Import header file "Logger.h" anywhere you want to use
Now, Use this Logger class as default practice.
In our case, [Logger log:#"Test String"];
Run Project in Simulator and Device both
That's it!! You have your own static Library!!
Step 1: Starting a New Static Library Project
Open XCode and start a new project. Under iOS, select Library and “Cocoa Touch Static Library” say it as "staticlibrary". This will create a nice new project for us that builds a .a file.
Step 2: Code your static library
First we need to add some files. Add a new NSObject subclass to your project and name it StaticClass.Then Write some useful code in those files.
Step 3: Building And Distributing Your Library
Once you are happy with your library, simply build it in XCode. Obviously, don’t do build and run as you can’t run it (again unless you have a test suite). Now, look under the Products group in XCode and you should see a file called lib(libraryName).a. In our case, it’s libstaticlibrary.a.
Right click on that file and select “Reveal In Finder”. Drag this file into a new folder that you create where you will be bundling all of your library files.Now, do the same with all of the .h files. In our case, just copy StaticClass.h into this new directory. Your directory structure should now look like:
FolderName
|- libstaticlibrary.a
|- StaticClass.h
Now you can zip this folder and sell it to would-be iOS developers for millions!
Step 4: Linking Your Library In A New Project
So now that you have built your shiny new static library, it’s time to test it out in another application.
Create a new View-Based project (or whatever it doesn’t really matter). Name it as Test.
Now, just drag this folder into the project and XCode will set up all of the linking automatically. When prompted to copy, I usually say yes, but you can do whatever you want depending on how you intend on using the library. Sometimes just linking and not copying is far more beneficial if you have multiple projects sharing a single library. It ensures that they all use the most up to date version.
You should now see the .a file along with the header files in the new project.
Step 5: Using The Static Library Code
Now that all of the linking is set up, you just use your library like any other class.
For Further clarifications
http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial hope this tutorial helps for you.
Objective-C consumer -> Objective-C static library
Xcode version 10.2.1
1. Create Objective-C static library
Follow section 1. Create Objective-C static library
2. Objective-C consumer with Objective-C static library
Follow section 2. Swift consumer with Objective-C static library
3. Consume Objective-C static library from Objective-C
Import module to the Objective-C client code[module_name]
#import module_name;
//or umbrella or public header
#import <module_name/module_name.h>
[More examples]