So I'm working on an iOS project in Swift, and I wanted to create a Static library with some useful stuff in it.
My problem is when I try to build my lib in Xcode (version 6.3) I have a "Build Failed" followed by : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: unknown option character 'X' in: -Xlinker
I've never saw this and it's not my first static lib. So I was thinking I may be linked to the fact that I'm using exclusively Swift class.
What do you guys think ? Thank you in advance.
Swift consumer -> Swift static library
Xcode version 10.2.1
Create Swift static library
Create a library project or create a library target
Add files
.swift
Build library - ⌘ Command + B or
Product -> Build
Note 1: Be sure that you build library for the same process architecture as the client code.
Note 2: expose your API that should be visible for consumer using
public
oropen
access modifiers[About]Find generated output[Build location]
The directory includes
lib<product_name>.a
– a built static library<product_name>.swiftmodule
folder that includes:.swiftdoc
- docs.swiftmodule
- public interface/definitionsSwift consumer with Swift static library
Drag and drop
the binary into the Xcode project[About]Link Binary
[Undefined symbols] [Link vs Embed]Add
Library Search paths
[Library not found for] [Recursive path]Add
Import Paths
[No such module] [Recursive path]Import module to the Swift client code [module_name]
[More examples]
Swift doesn't support static library
Although the correct way should be create a framework, there is a workaround here.
As mentioned, Apple does allow Swift in static libraries as of Xcode 9 Beta 4.
We attempted to do this on an existing project with an Objective-C-based target and "child" static library projects and kept running into a linking error
also
This is because the main target (app) is trying to build solely against Objective-C and isn't told by the static library that it needs to include Swift libraries. This was because there weren't any Swift files in the
Compile Sources
section of ourBuild Phases
for the app target.So basically all you have to do is add at least one
.swift
file to that compile list and it will include the Swift libraries for you. It doesn't even need to have any code or values in it, it can be an empty file.Then you can start adding Swift files to your "child" static library project. I would let it generate the bridging header for you at first then you can move it around and change what gets imported (make sure the project points to the right file in the build settings if you move it).
You should still keep in mind that using Swift and Objective-C within the same static library may have issues of its own. I suggest reading the Apple developer doc "Swift and Objective-C in the Same Project" on how to address importing Objective-C into Swift (using a bridging header) and how to use the Swift files in your Objective-C code (importing the generated
-Swift.h
for your library).As of Xcode 9 beta 4, Xcode natively supports static libraries with Swift sources.