ios iphone xcode swift ios8.3

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