Framework en Swift escrito originalmente por Zaid Pathan versión español.

Daniel Mora
6 min readFeb 6, 2018

--

Los Frameworks en Swift son simplemente asombrosos.

Basados en la programación WORE que significa “Write Once Run EveryWhere” (Escribe una vez, ejecuta donde sea) ahora es usado en Swift como con Java (Ya se utilizaba por integración de paquetes “Java Beans”)

Conforme Swift se convierte en un lenguaje de programación popular a lo largo del desarrollo día a día.

Desarrollar un framework en Swift tiene sus ventajas, como las siguientes.
1. Ocultar tu implementación de código.
2. Como los archivos .framework son pre-compilados puede reducirse el re-compilado ahorrando tiempo mientras se desarrolla.
3. Es utilizado por Apple por ejemplo: UIKit.framework
4. Ahorra tiempo de desarrollo en equipos de trabajo y funciona perfecto para aplicar el paradigma de trabajo ágil “Divide y vencerás” — Ventaja personal

Entonces… que esperamos, empecemos desarrollando nuestro propio Framework en Swift ahora mismo.

Herramientas utilizadas: XCode 9.2+, Swift 4+

Paso 1: Iniciemos un nuevo proyecto de nuestro Framework

  • Creamos un nuevo proyecto de Xcode.
Si tu Xcode es 8.2 si funcionará.
  • Damos clic en Cocoa Touch Framework
En otras versiones puede cambiar el iconito, pero no le tomes importancia.
  • Ponemos un nombre a nuestro proyecto, en caso de este tutorial usaré AlamoWake sonando similar a Alamofire. (Asegurate de elegir lenguaje — Swift)
Asegurarse de poner lenguaje Swift.
  • Clic dentro del archivo de proyecto AlamoWake y presiona ⌘ + N ó clic izquierdo sobre el archivo y “Nuevo archivo”.
  • Seleccionamos el nombre del archivo “AlamoWake” y como subclase de “NSObject”

Paso 2: Escribir un poco de código

Agregamos el siguiente código dentro de nuestro archivo AlamoWake.swift

Nota: Asegurarse de que su clase y métodos sean de tipo open.

open class AlamoWake: NSObject {   public static let shared = AlamoWake()   open func hello(){      debugPrint("Hola desde AlamoWake!")    }}

Paso 3: Para crear un framework para ejecutar tanto dispositivos iOS como simuladores agregamos un nuevo “Target” a nuestro proyecto.

Asegurarnos de buscar dentro de “Cross-platform

Luego de agregar el “Target” damos clic en el archivo de proyecto y nos dirigimos hacía la pestaña de “Build phases” desplazamos para mostrar nuestra área de “Project and Target List” y seleccionamos nuestro nuevo “Target” “UniversalAlamoWake” y damos clic sobre el icono de + para agregar un nuevo Script “New Run Script Phase

  • Agregamos un script en fase de ejecución.
  • Nota: Agrego la descripción de los comandos que ejecutarás y que hacen cada uno de ellos.
# Asegurate que "Shell" este con disposición "/bin/sh" que es la dirección de ejecución de consola# En caso de usar ZSH configurado en Xcode (Poco común) poner en Shell "/bin/zsh" aunque es lo mismo porque se ejecuta sobre SH# Asignamos una variable a la dirección de compilación "Donde queramos que salga el Framework"FOLDER_SALIDA_FRAMEWORK=${BUILD_DIR}/${CONFIGURATION}-universal# ${BUILD_DIR} es una variable dentro de xCode de dirección de compilación# ${CONFIGURATION} es la variable de parametros de compilación del paquete "universal" es la de origen# Nos aseguramos de que el directorio exista, si no, lo creamosmkdir -p "${FOLDER_SALIDA_FRAMEWORK}"# ---------------- PASO 1 ----------------# Compilamos el paquete con el SDK establecido y luego con los simuladores genericos# Los simuladores genericos los ubicas con el tipico nombre "Generic iOS device"xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean buildxcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build# Intentare explicar los comandos# xcodebuild: Es el comando que se realiza cuando precionamos [Command+B]# PROJECT_NAME: Nombre del proyecto (Variable de XCode !No cambiar¡)# -target : El archivo a compilar en este caso nuestro interpolador de plataforma# ONLY_ACTIVE_ARCH: Comando de xCode para elegir las arquitecturas soportadas [x86_64,armv6,armv7, etc]# -configuration: Si necesitamos caracteristicas diferentes aquí pueden ponerse ejemplo "breakpoints"# -sdk: Disposición de S.O# BUILD_DIR: Dirección de compilación paquete (User/YourName/Projects/MiProject)# BUILD_ROOT: Dirección de compilación proyecto (usr/xcode/builds/project_name/)# clean build: Limpiar compilación pasada# ---------------- PASO 2 ----------------# Una vez compilado el Framework copiamos a la carpeta de compilación de simuladorcp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${FOLDER_SALIDA_FRAMEWORK}/"# ---------------- PASO 3 ----------------# Verificamos si hay compilaciones pasadas previo a compilar, si no, copiamos al directorio salidaSIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/."if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; thencp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${FOLDER_SALIDA_FRAMEWORK}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"fi# ---------------- PASO 4 ----------------# Creamos el archivo binario del framework, el archivo que se añade a los proyectos a heredarlipo -create -output "${FOLDER_SALIDA_FRAMEWORK}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"# lipo es un comando de xcode para convertir archivos a binarios, la extención la ponemos como "framework"# ---------------- PASO 5 ----------------# Copiamos el archivo resultado a la carpeta donde la usaremos, en este caso puedes cambiarla por tu proyecto# En este ejemplo solo se copia al directorio del proyectocp -R "${FOLDER_SALIDA_FRAMEWORK}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"# Como cambio donde sale mi archivo? Checa la linea de abajo# Y luego de compilar observa que hay de nuevo en tu escritorio#cp -R "${FOLDER_SALIDA_FRAMEWORK}/${PROJECT_NAME}.framework" "/Users/<TuUsuarioMac>/Desktop"# ---------------- PASO 6 ----------------# (Opcional) Este comando abre en "Finder" la ubicación del archivo, para que lo copies oh# hagas lo que desees con el, reitero: "NO ES NECESARIO" solo abre la ubicaciónopen "${PROJECT_DIR}"

Paso 4: Construimos nuestro primer framework seleccionando nuestro “Target” en vez del proyecto y presionando ⌘ + B

Después de completado, es posible que se abra una ventana de Finder con la ubicación de nuestro Framework.

Nuestro Framework esta listo para usar…

“Happy Happy :) ”

Paso 5: Agregamos nuestro framework a otro proyecto usando el siguiente código de ejemplo.

Sobre “Embedded Binaries” damos clic en + para agregar un archivo de binarios.
import UIKitimport AlamoWakeclass ViewController: UIViewController {   override func viewDidLoad() {      super.viewDidLoad()      AlamoWake.shared.hello()   }}
Prueba de que funciona nuestro proyecto 😎
  • Si continuando los pasos obtenemos errores al pegar el código, presionamos ⌘ + K.
  • Si aún aparecen errores verificar que tengamos agregado nuestro archivo sobre “Embedded Binaries” y “Linked Framework and Libraries

De igual forma que con Zaid Pathan, si tienen dudas en español pueden escribirlas directamente en el artículo y las contestaré a la brevedad.

Si desean obtener el código funcional del proyecto, pueden descargarlo desde el repositorio de Zaid Pathan aquí ó el mío personal.

--

--

Daniel Mora
Daniel Mora

Written by Daniel Mora

Web,Mobile,Backend + Cloud Developer (Wish to be a Software Architect)

Responses (1)