ios - Biblioteca Estática y Swift
iphone xcode (4)
Consumidor Swift -> Biblioteca estática Swift
Xcode versión 10.2.1
Crear una biblioteca estática Swift
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
Agregar archivos
.swift
Select `.swift` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
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 -
Carpeta
<product_name>.swiftmodule
que incluye:-
.swiftdoc
- docs -
.swiftmodule
- interfaz pública / definiciones
-
Usando la biblioteca estática Swift
Drag and drop
el binario en el proyecto Xcode
[Acerca de]
Link Binary
[Símbolos indefinidos]
[Enlace vs Incrustar]
Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<target_name>.a` file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<target_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<target_name>.a` file
Agregar
Import Paths
[No existe tal módulo]
[Ruta recursiva]
Project editor -> select a target -> Build Settings -> Swift Compiler - Search Paths -> Import Paths -> add path to the parent of `.swiftmodule` folder
Importar módulo al código del cliente Swift [module_name]
import module_name
Más ejemplos aquí.
Así que estoy trabajando en un proyecto de iOS en Swift, y quería crear una biblioteca estática con algunas cosas útiles.
Mi problema es cuando intento compilar mi lib en Xcode (versión 6.3) Tengo un "Error de compilación" seguido de:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: unknown option character ''X'' in: -Xlinker
Nunca he visto esto y no es mi primera lib estática. Entonces pensé que podría estar relacionado con el hecho de que estoy usando exclusivamente la clase Swift.
Qué piensan ustedes ? Gracias de antemano.
A partir de Xcode 9 beta 4, Xcode admite de forma nativa bibliotecas estáticas con fuentes Swift.
Como se mencionó, Apple permite Swift en bibliotecas estáticas a partir de Xcode 9 Beta 4.
Intentamos hacer esto en un proyecto existente con un objetivo basado en Objective-C y proyectos de bibliotecas estáticas "secundarias" y seguimos encontrando un error de enlace
ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64
además
ld: library not found for -lswiftDispatch for architecture x86_64
Esto se debe a que el objetivo principal (aplicación) está tratando de construir únicamente contra Objective-C y la biblioteca estática no le dice que debe incluir bibliotecas Swift.
Esto se debió a que no había ningún archivo Swift en la sección
Compile Sources
de nuestras
Build Phases
para el objetivo de la aplicación.
Entonces, básicamente,
todo lo que tiene que hacer es agregar al menos un archivo
.swift
a esa lista de compilación e incluirá las bibliotecas Swift para usted.
Ni siquiera necesita tener ningún código o valor, puede ser un archivo vacío.
Luego puede comenzar a agregar archivos Swift a su proyecto de biblioteca estática "secundario". Al principio, dejaría que generara el encabezado de puente para usted, luego puede moverlo y cambiar lo que se importa (asegúrese de que el proyecto apunte al archivo correcto en la configuración de compilación si lo mueve).
Aún debe tener en cuenta que el uso de Swift y Objective-C dentro de la
misma
biblioteca estática puede tener problemas propios.
Sugiero leer
el documento para desarrolladores de Apple "Swift y Objective-C en el mismo proyecto"
sobre cómo abordar la importación de Objective-C en Swift (usando un encabezado de puente) y cómo usar los archivos Swift en su código Objective-C (importando el generado
-Swift.h
para su biblioteca).
Swift no es compatible con la biblioteca estática
Aunque la forma correcta debería ser crear un marco, hay una solución here .