While the answer of @Morty points you in the right direction, it leaves a lot open to interpretation and didn't work for me, so here's what I had to do:
Open a terminal at your Mylib.dylib
file and run
$ lipo -create Mylib.dylib -output Mylib
Create a folder with the same name as the created binary.framework
and mirror this folder structure:
.
└── Mylib.framework
├── Mylib <- Binary created by lipo
├── Headers
│ └── Mylib.h <- Symbols you want to access from the binary
├── Info.plist
└── Modules
└── module.modulemap
Minimal Info.plist
file for iOS Device:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>XXXXX</string> <- See Mac System Report/Software
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>Mylib</string>
<key>CFBundleIdentifier</key>
<string>some.bundle.identifier</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Mylib</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>MinimumOSVersion</key>
<string>16.0</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
</dict>
</plist>
Make sure CFBundleExecutable
is set to the name of your binary, otherwise you'll get the signing issue: "The code signature version is no longer supported.".
Example module.modulemap
:
framework module Mylib {
umbrella header "Mylib.h"
export *
}
Now you should be able to add the framework with Embed & Sign to your target, import it in swift via import Mylib
and use the symbols defined by Mylib.h
. When you run the app, you might encounter the crash Library not loaded: @rpath/Mylib.dylib
, which can be fixed with this command in the directory of the binary:
$ install_name_tool -id @rpath/Mylib.framework/Mylib Mylib
Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
Could you please let me know if the iOS app can contain .dylib files or they need to be converted into frameworks? – Jornada