Estoy considerando comenzar a usar Swift en un marco, que usa libz.dylib , pero parece que no hay forma de importarlo desde Swift. Probé import zlib e import libz , que no funcionó. ZLib ya está vinculado al objetivo.
Parece que la única forma de obtener mi código Swift para ver las clases de zlib es importar los encabezados necesarios en un encabezado de puente, pero los objetivos del marco no pueden tener un encabezado de puente, entonces, ¿hay alguna forma de usar un dylib?
He agregado una biblioteca dylib de C/C++, con encabezados de API pública de C a Swift Project.
Suponga que la biblioteca es libModule.dylib.
Crear un Directorio con "Módulo"
mkdir Module; cd ModuleCree un archivo module.map dentro del directorio del módulo
Touch module.mapcree un directorio, este será el directorio de archivos de encabezado, cualquier nombre servirá.
mkdir Headerscopie todos los encabezados en el directorio de encabezados
cp -R path/Headers Headers/abra module.map y copie los contenidos a continuación, sugiere el equipo de Swift, agregando el prefijo C delante del nombre de la biblioteca, en caso de que sea una biblioteca C.
module CModule { umbrella "Headers" // for multiple files header "filename.h" // for single header file, in this case even the Header directory is not needed. export * }Vaya a Configuración de compilación -> Compilador Swift - Rutas de búsqueda
Si se omite el paso 9, obtenemos el famoso error @rpath/ Image not found.
Ahora importe el módulo en Swift como se muestra a continuación:
import CModule // name given inside module.mapPara la biblioteca del sistema, la mayoría de los pasos no requieren ... simplemente cree un archivo de mapa de directorio y módulo con la ruta de encabezado correcta y haga 6, 7. Parece que el paso 10 ni siquiera es necesario ya que es una biblioteca del sistema.
module CommonCrypto [system] { header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h" export * }Puede importar módulos del sistema como se describe en esta respuesta: Importación de CommonCrypto en un marco Swift
TLDR
ZLib a su directorio de marcomodule.map con los siguientes contenidos module ZLib [system] { header "/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/zlib.h" export * }
Es posible que deba cambiar la ruta a su encabezado zlib . El ejemplo funciona para XCode 7 Beta y El Capitan.