How do I compile a library in Xcode using a makefile? - ios

I need to compile a library written in C in Xcode. For this I need to use a make file. How can I include a make file in my project?
Any link for writing a make file or sample of a make file for running on the iOS simulator would be helpful.
Also if I use cmake, then what commands do I use in the terminal to create a static Library for iOS simulator?
Thanks

First, your project generator is either Xcode or Make. You can't have a makefile in Xcode.
If you want to generate an iOS library from C/C++ sources, take a look at this google project. The project wiki explains how to use the iOS CMake toolchain. This will give you a .xcodeproj file. You can build and then link to that library from other iOS projects. Also there's this fork available on Github which you could take a look at.
If the target system is exclusively iOS, you could alternatively create a new iOS library project from scratch (no CMake) and throw in your sources manually.

Related

How do I build native C source code to create a library for Unity, to be used for iOs Platform?

I want to import a library from native C source code to be used Unity, for iOs. I expect to require the .a binaries and the .h header (and any other file required if I'm missing any), but I cannot find any guide around about how to build it.
I tried to build the source code directly on Xcode, but I was not able to create a library from that. XCode accepts native C only with command line project, while I need a library.
Then I tried to run this CMake command on mac terminal:
cmake . -DCMAKE_SYSTEM_NAME=iOS "-DCMAKE_OSX_ARCHITECTURES=arm64;arm64e" -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 -DENET_STATIC=1 -DENET_LZ4=1 -GXcode
This creates an Xcode project, I build it for generic IOS but the code does not work on unity when I deploy it on the device.
A good place to start is the Bonjour example from the Unity Manual. This at least gives you a working iOS plugin as a starting point.
You include the files in your Unity project, and build for iOS. You will notice that the files under Plugins/iOS are automatically included in the generated Xcode project. They will only be compiled when you build/run your Xcode project.
Careful, an iOS plugin is not the same as a MacOS plugin. For a MacOS plugin, you will need to create the bundle and include this into your UnityProject. The DllImport decorator will also be different on your C# code. For iOS it is "__Internal", but for MacOS it is the name of the bundle.
If you are trying to interface with a third party library, you may need to manually modify the library search paths of your Xcode project to correctly locate your .a and .h files when building and linking.
As a side note, when including a third party .a binary, verify that it conforms to the iOS architecture requirements, otherwise your app may be rejected when submitting to the app-store.

Use a custom C++ library in a Swift iOS project

I have a C++ lib as a separate project that I'm trying to use in a Swift iOS app.
The approach I'm pursuing right now is:
Compile the lib into .dylib. This happens outside of Xcode.
In Xcode, add the lib to Build Phases -> Link Binary With Libraries.
Add the (C compatible) header to Bridging-Header.h.
Now, build succeeds but it crashes on simulator (something like ".dylib not found"), because the .dylib is not added to the app package.
Unfortunately I couldn't add the .dylib to "Embedded Binaries". I guess it must be somehow packaged into a framework (no idea how)?
How to make this work? Is including the sources into the project a better approach?

Can I build a static library for iOS without using the Xcode IDE?

I can't handle the Xcode IDE for this particular project anymore!
I have a simple C project I want to build into a static library for iOS, and I don't want to use the Xcode IDE.
I'm familiar with xcodebuild but my understanding is that I'd first need to create an Xcode project to use it - and simply being able to build the project on the command line isn't my goal.
I want a standard make-style build process for this project but can't seem to find any information about doing such a thing. It seems like I can't. Is that true?
You absolutely CAN use a makefile project. It's just a matter of using the correct paths, etc...
Here's something to get you started:
iOS static lib cross-compile script

Using DCMTK in iOS application

I want to use DCMTK in my application and have successfully compiled DCMTK 3.6.0 for the iOS Simulator. Then I created a workspace into which I added the DCMTK project and my application. I added the .a files as target dependencies and linked the binaries. I think I am missing the part where I have to set the header/library search paths. I try to include a header file say #include "dcm2xml.h" and it says file not found. What am I doing wrong?
I have seen this. -> How to use DCMTK in an iPhone project But I think there's a simpler way without using that framework.
you can find some info on how to compile dctmk for ios and simulator here,
and from here you can download a demo project which make use of the dcmtk. It will not display the image but will print the information found in some tags found in the file. I hope it will help you start.

How do I add this C library to my iOS Xcode 4 project?

I'm trying to add the openjpeg library to my XCode 4 project so that I can compress images taken by the iPhone's camera to jpeg2000.
I built the static library (libopenjpeg.a) using Cmake on OS/X. (I'm guessing this may have been the first error, that it needs to be built by XCode so it's built for iPhone architecture and not OS X).
I have the library added in the Link Binary with Libraries of my target.
The project builds successfully but I can't seem to import any of the headers from the library into any of my Objective-C classes. I've tried manually adding the folder that contains the libopenjpeg header files to the User Header Search Path but that did not seem to do anything.
Any suggestions?
for the simplest solution
Import the head files to you project's source.
You can still build it on the command-line with CMake, you'd just have to modify the CMakeLists.txt file so the right flags are passed when compiling.
However as Gavin indicates, it may be simpler just to drag the header and source files from the library into your Xcode project, and forego the building of a static library.

Resources