[Parte 4] De Rust a iOS: integra tu libr ...

[Parte 4] De Rust a iOS: integra tu librería UniFFI en Xcode

Sep 03, 2025

1. Instalar los targets de Rust

    rustup target add aarch64-apple-ios

    rustup target add x86_64-apple-ios

    rustup target add aarch64-apple-ios-sim

2. Generar bindings Swift

cargo run --bin uniffi-bindgen generate src/lib.udl --language swift

3. Compila la lib para iOS

    cargo build --target x86_64-apple-ios --release

    cargo build --target aarch64-apple-ios --release

    cargo build --target aarch64-apple-ios-sim --release

4. Dentro de la carpeta raiz-proyecto/target/aarch64-apple-ios-sim copia la lib .a.

5. Para la integración en iOS:

  • Abre tu proyecto en Xcode

  • Crea una carpeta "Headers" en la carpeta raiz del proyecto.

  • Arrastra los archivos .h, .a y .modulemap a la carpeta Headers.

  • Renombra el archivo tu_lib.modulemap a module.modulemap.

6. Configurar Build Settings (Xcode)

  • Header Search Paths

    Ve a:
    TARGET → Build Settings → Search Paths → Header Search Paths

    //agrega

    $(SRCROOT)/Headers/**
  • Library Search Paths

    Ve a:
    TARGET → Build Settings → Search Paths → Library Search Paths

    //agrega

    $(SRCROOT)/Headers
  • Other Linker Flags

    Ve a:
    TARGET → Build Settings → Linking → Other Linker Flags

    //(Aquí reemplaza rustlib por el nombre real de tu librería, sin el prefijo lib.
    //Ejemplo: si tu archivo es librustffi.a, el flag es -lrustffi).

    -lrustlib
  • Enable Modules (C and Objective-C)

    Ve a:
    TARGET → Build Settings → Apple Clang - Language - Modules

    Pon Yes

    //Esto permite que el module.modulemap funcione y puedas usar import RustLib en Swift.
  1. 7. Agregamos los bindings (.swift) generados por UniFFI al proyecto de iOS (Punto 2) y llamamos a nuestras funciones.

    import tu_lib

    let password = generatePassword(

    length: UInt64(passwordLength),

    includeUppercase: includeUppercase,

    includeNumbers: includeNumbers,

    includeSymbols: includeSymbols

    )

    let strength = checkStrength(password: password)

Conclusión

En esta cuarta parte dimos un paso clave: llevar nuestra librería escrita en Rust a Xcode utilizando UniFFI.
Ya no solo tenemos nuestro código compilado en Rust, sino que ahora está empaquetado en un .a (static library) junto con sus headers (.h) y modulemap, lo que nos permite integrarlo de manera nativa dentro de cualquier app iOS.

Con esto abrimos la puerta a:

  • Reutilizar lógica crítica de Rust (seguridad, performance, criptografía, etc.) en aplicaciones iOS.

  • Reducir duplicación de código al tener la misma librería disponible en múltiples plataformas.

  • Aprovechar UniFFI para generar bindings automáticos en Swift, lo que simplifica enormemente la integración con nuestro proyecto.

👉 En la siguiente parte de la serie veremos cómo empaquetar nuestra librería en un Swift Package Manager (SPM), exponer los métodos generados y consumirlos fácilmente desde cualquier proyecto SwiftUI o UIKit. Esto nos permitirá distribuir nuestra librería Rust + UniFFI como un paquete Swift estándar, instalable con solo agregar la dependencia en Xcode.

Si te ha gustado este contenido y quieres apoyar la serie, considera dejar tu feedback o unirte como suscriptor. Así podremos seguir profundizando en Rust + UniFFI + iOS/Android con proyectos prácticos y avanzados.

Ti piace questo post?

Offri un caffè a wuilmerj24

Altro da wuilmerj24