Prerrequisitos
macOS + Xcode (15+ recomendado).
Cuenta en GitHub
Git instalado y configurado
Repositorio Github
Paso 1: Crear la librería universal (.a)
Una biblioteca universal combina todas estas arquitecturas en un solo archivo, lo que te permite usarla sin problemas en cualquier entorno de desarrollo.
1.1. Crear librería universal para simulator
lipo -create \
target/x86_64-apple-ios/release/tu_lib.a \
target/aarch64-apple-ios-sim/release/tu_lib.a -output tu_lib_universal.a
//Verifica arquitecturas:
lipo -info tu_lib_universal.a
//Deberías ver algo como:
Architectures in the fat file: tu_lib_universal.a are: arm64 x86_64Paso 2: Crear el .xcframework
xcodebuild -create-xcframework \
-library tu_lib_universal.a \
-headers src \
-output tu_lib.xcframeworkPaso 3: SPM
3.1. Crear carpeta e inicializar SPM
mkdir safe_passwordiOS
cd safe_passwordiOS
swift package init --type library3.2. Copiar xcframework a la carpeta safe_passwordiOS/Sources/safe_passwordiOS/
3.3. Configurar SPM (Package.swift)
let package = Package(
name: "safe_passwordiOS",
platforms: [
.iOS(.v17)
],
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "safe_passwordiOS",
targets: ["safe_passwordiOS"]),
],
targets: [
.binaryTarget(
name: "safe_passwordiOS",
path: "Sources/safe_passwordiOS/tu_lib.xcframework"
),
.target(
name: "safe_passwordiOS",
dependencies: [
"safe_passwordiOS",
],
path: "Sources/safe_passwordiOS",
sources: ["safe_passwordiOS.swift"],
publicHeadersPath: "include",
),
.testTarget(
name: "safe_passwordiOSTests",
dependencies: ["safe_passwordiOS"]
),
]
)3.3. Agregar bindings
Copia el contenido del archivo .swift generado en Parte 4-2 y agregalo al archivo safe_passwordiOS/Sources/safe_passwordiOS.swift
Paso 4: Subir a github y generar tags
Paso 5: Consumir el package publicado
En Xcode, File → Add Packages → Enter package repository URL…
Pega el URL del repo
Selecciona la versión/tag o rama que quieras
Añade el producto safe_passwordiOS a tu target
Paso 6: Usar los métodos.
//Método definido en mi lib rust y bindings swift
generatePassword(length: UInt64, includeUppercase: Bool, includeNumbers: Bool, includeSymbols: Bool)
checkStrength(password: String) //retorna PasswordStrength
//enum
public enum PasswordStrength {
case weak
case moderate
case strong
}¡Transforma Rust en iOS!.
Creamos un .xcframework y un Swift Package listo para instalar en SwiftUI. Tu librería ahora es compartible, versionable y reutilizable.
Si te ha sido útil, apóyame: tu ayuda me permite seguir creando guías paso a paso y recursos para la comunidad.
