ios swift static-libraries webrtc

ios - ¿Cómo puedo usar una biblioteca estática.a en Swift?



static-libraries webrtc (4)

Quiero usar mi biblioteca estática webrtc .a en swift. ¿Podrías ayudarme por favor? Leí que no puedes usar bibliotecas estáticas en Swift, ¿es cierto?


¿Has solucionado este problema que preguntaste? Hoy también me encuentro con este problema y lo solucioné por un momento. Si no ha solucionado este problema, puede probar los siguientes pasos:

ps: los 2 proyectos están en el mismo espacio de trabajo (el proyecto lib estático y el proyecto App), el proyecto lib estático se construye antes que el proyecto app. La estructura del espacio de trabajo como muestra la imagen:

  1. En el proyecto lib estático, todos los archivos .h deben agregarse a "Crear fases / Copiar archivos":

  1. Arrastre el archivo del producto lib estático (el archivo .a) al proyecto de la aplicación, vea la imagen:

(ruta: "proyecto de aplicación / Fases de construcción / Enlace binario con bibliotecas")

* si le importa la marca de color rojo para el archivo .a, solo necesita elegir el "dispositivo iOS genérico" como dispositivo de compilación para reconstruir el proyecto de lib estática y volver a arrastrar el .a al proyecto de la aplicación ( el rojo se puede eliminar)

  1. Establezca la "Ruta de búsqueda de biblioteca" en su proyecto de aplicación:

esta es la ruta de archivo .a en la que se construyó el proyecto: $ (USER_LIBRARY_DIR) / Developer / Xcode / DerivedData / StockApp-fkjqyvsniiauxogkivalcduqeotj / Build / Products / Debug-iphoneos

  1. Cree el archivo Bridging-Header para su proyecto de aplicación e importe la biblioteca estática en él, en mi caso incluyo "StaticLib / StaticLib.h" y "CommonFoundation / CommonFoundation.h":

  1. Agregue la ruta del archivo Bridging-Header al "Objective-C Bridging Header" de su proyecto de aplicación:

Entonces todo listo, puede usar las funciones de las bibliotecas estáticas ahora.


Con Xcode 9 usando bibliotecas estáticas compatibles con Swift . Puedes usar como usar en Objective-C. Notas de lanzamiento de Xcode

Xcode admite objetivos de biblioteca estática que contienen código Swift. Las aplicaciones de depuración que usan bibliotecas estáticas Swift pueden requerir un conjunto completo de artefactos de compilación que se encuentran en su ubicación original


Sí, puedes usar bibliotecas estáticas en Swift. Vaya a las fases de compilación y en "Vincular binario con bibliotecas" y agréguelas allí.

Alternativamente, puede ir a Configuración de compilación y en "Rutas de búsqueda" agregue el valor "Rutas de búsqueda de biblioteca" para incluir la ruta a la carpeta en la que se encuentra su archivo .a.

Puede agregar encabezados para su biblioteca de la misma manera en "Rutas de búsqueda de encabezados"

También tenga en cuenta que si esta biblioteca está escrita en Objective-C, necesitará un Encabezado de puente para usarlo en Swift.


Uso de clases de Objective-C en Swift

Si va a importar código dentro de un Objetivo de aplicación (Mezcla Swift y Objective-C en un proyecto), debe usar el archivo de bridging header para exponer el código Objective-C al código Swift. [Mezcla de código Swift y Objective-C en un proyecto]

En esta publicación, describiré cómo importar la biblioteca estática Objective-C al código Swift

Consumidor Swift -> biblioteca estática Objective-C

Xcode versión 10.2.1

Crear una biblioteca estática de Objective-C

Crear un proyecto de biblioteca o crear un objetivo de biblioteca

File -> New -> Project... -> Cocoa Touch Static Library //or Project editor -> Add a Target -> Cocoa Touch Static Library

Crear archivo module.modulemap [Acerca de]

module module_name { umbrella header "module_name-umbrella.h" export * }

Cree el archivo module_name-umbrella.h [About] y agregue todos los archivos .h que estarán abiertos para el consumidor

#import "header_1.h" #import "header_2.h"

Agregue los module.modulemap y module_name-umbrella.h en la sección Copy Files [About] .

Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h`

Agregar archivos de implementación .m

Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target //or Project editor -> select a target -> Build Phases -> Compile Sources -> add files

Agregue los archivos de encabezados .h que se enumeraron en module_name-umbrella.h ( header_1.h , header_2.h ) [no puede hacerlo] [público objetivo de membresía]

Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public** //or Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone

Construir biblioteca - ⌘ Comando + B o Product -> Build

Nota: Asegúrese de crear una biblioteca para la misma arquitectura de proceso que el código del cliente.

Buscar salida generada [ubicación de construcción]

Products group -> lib<product_name>.a -> Show in Finder

El directorio incluye

  • lib<product_name>.a - una biblioteca estática construida
  • include/<product_name> carpeta include/<product_name> con archivos de la sección Copy Files
  • carpeta usr/local/include con archivos de la sección Headers . Hay interfaces / definiciones públicas

Usando la biblioteca estática Objective-C

Link Library [Símbolos indefinidos] [Enlace vs Incrustar]

Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file //or Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file

Agregar Library Search paths [Biblioteca no encontrada para] [Ruta recursiva]

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<product_name>.a` file

Agregar Header Search Paths [Módulo no encontrado] [Ruta recursiva]

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include/<product_name>` folder with `module.modulemap` and `<product_name>-umbrella.h`

Importar módulo al código del cliente Swift [module_name]

import module_name

Más ejemplos aquí.