gRPC para Swift (iOS/macOS): bibliotecas, configuración y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

gRPC para Swift (iOS/macOS): bibliotecas y ejemplos

gRPC es un framework de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google. Utiliza Protocol Buffers (protobuf) para la serialización de datos y HTTP/2 para el transporte. Para las plataformas Apple (iOS, macOS), existe un ecosistema oficial Swift gRPC que permite crear aplicaciones tanto cliente como servidor con soporte completo de las capacidades modernas de Swift, incluyendo async/await.



Bibliotecas y herramientas principales

Para trabajar con gRPC en Swift se utilizan los siguientes componentes:

  • gRPC-Swift — paquete oficial de Google. Incluye runtime, generador de código y soporte para interacción cliente-servidor.
  • Swift Protobuf — biblioteca para trabajar con mensajes protobuf. Necesaria para generar estructuras Swift a partir de archivos .proto.
  • protoc — compilador de Protocol Buffers. Para generar código Swift se requieren los plugins protoc-gen-grpc-swift y protoc-gen-swift.
  • Swift Package Manager (SPM) — la forma principal de integrar dependencias.


Instalación y configuración

Para empezar, agregue las dependencias en Package.swift:

// swift-tools-version:5.9import PackageDescription

let package = Package( name: "GRPCExample", dependencies: [ .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.21.0"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.26.0") ], targets: [ .executableTarget( name: "GRPCExample", dependencies: [ .product(name: "GRPC", package: "grpc-swift"), .product(name: "SwiftProtobuf", package: "swift-protobuf") ] ) ])


También es necesario instalar protoc y los plugins mediante Homebrew:

brew install protobufbrew install grpc-swiftbrew install swift-protobuf


Ejemplo de archivo .proto

Creemos un servicio simple de saludo. Archivo hello.proto:

syntax = "proto3";

service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Genere el código Swift con el comando:

protoc --swift_out=. --grpc-swift_out=. hello.proto


Como resultado, aparecerán los archivos hello.pb.swift y hello.grpc.swift.



Parte del servidor en Swift

Creemos un servidor gRPC que procese las solicitudes SayHello:

import GRPCimport NIOimport NIOPosix

class GreeterProvider: GreeterProvider { func sayHello(request: HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<HelloReply> { var reply = HelloReply() reply.message = "¡Hola, \\(request.name)!" return context.eventLoop.makeSucceededFuture(reply) }}

let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)defer { try! group.syncShutdownGracefully() }

let server = try Server.insecure(group: group) .withServiceProviders([GreeterProvider()]) .bind(host: "localhost", port: 50051) .wait()

print("Servidor iniciado en localhost:50051")try server.onClose.wait()


Parte del cliente en Swift (con async/await)

Para iOS/macOS, el cliente se implementa convenientemente usando async/await. Asegúrese de usar Swift 5.5+ y un objetivo de implementación mínimo de iOS 13.0 / macOS 10.15.

import GRPCimport NIOimport NIOPosiximport SwiftProtobuf

func greet(name: String) async throws -> String { let group = PlatformSupport.makeEventLoopGroup(loopCount: 1) defer { try? group.syncShutdownGracefully() }\

Recommendations