Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

336
Views
Cómo usar un C dylib desde un archivo Swift en un marco

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?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

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.

  1. Crear un Directorio con "Módulo"

     mkdir Module; cd Module
  2. Cree un archivo module.map dentro del directorio del módulo

     Touch module.map
  3. cree un directorio, este será el directorio de archivos de encabezado, cualquier nombre servirá.

     mkdir Headers
  4. copie todos los encabezados en el directorio de encabezados

     cp -R path/Headers Headers/
  5. 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 * }
  6. Vaya a Configuración de compilación -> Compilador Swift - Rutas de búsqueda

  7. Agregue la ruta completa del directorio del módulo a la clave "Importar rutas".
  8. Vaya a Fases de compilación, Agregar nueva fase de copia de archivos.
  9. Arrastre libModule.dylib a la fase Copiar archivos. Seleccione Destino a "Frameworks".
  10. Si es necesario, agregue libModule.dylib a la sección Vincular binario con bibliotecas de Fases de compilación.

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.map

Para 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 * }
over 4 years ago · Santiago Trujillo Report

0

Puede importar módulos del sistema como se describe en esta respuesta: Importación de CommonCrypto en un marco Swift

TLDR

  1. Agregue una carpeta llamada ZLib a su directorio de marco
  2. Agregue un archivo module.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.

  1. Agregue el archivo module.map generado actualmente a su configuración de compilación
  2. Importe ZLib en su archivo Swift y estará listo para comenzar
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!