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

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 moderno 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. En el ecosistema de Swift (iOS/macOS), gRPC se implementa a través de la biblioteca gRPC-Swift, construida sobre el framework asíncrono SwiftNIO. Esto permite crear aplicaciones tanto de cliente como de servidor en Swift con soporte para transmisión de datos, tiempos de espera y autenticación.



Bibliotecas principales para gRPC en Swift

  • gRPC-Swift — biblioteca oficial de Apple y Google. Proporciona una API para crear servidores y clientes gRPC. Soporta flujos unarios, de servidor, de cliente y bidireccionales.
  • SwiftNIO — framework asíncrono de bajo nivel para comunicación en red, en el que se basa gRPC-Swift.
  • protoc-gen-swiftgrpc — plugin para el compilador protoc que genera código Swift a partir de archivos .proto.
  • SwiftProtobuf — biblioteca para trabajar con mensajes protobuf en Swift (serialización/deserialización).


Instalación mediante Swift Package Manager

Añada las dependencias en Package.swift de su proyecto:

// swift-tools-version:5.7import PackageDescription

let package = Package( name: "gRPCExample", platforms: [.macOS(.v12), .iOS(.v15)], 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.21.0") ], targets: [ .executableTarget( name: "gRPCExample", dependencies: [ .product(name: "GRPC", package: "grpc-swift"), .product(name: "SwiftProtobuf", package: "swift-protobuf") ] ) ])


Creación del archivo .proto

Defina el servicio y los mensajes. Ejemplo del archivo helloworld.proto:

syntax = "proto3";

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Generación de código Swift

Instale protoc y los plugins:

brew install protobufbrew install swift-protobufbrew install grpc-swift

Genere el código:

protoc helloworld.proto \    --proto_path=. \    --swift_out=. \    --grpc-swift_out=.

Se crearán los archivos helloworld.pb.swift y helloworld.grpc.swift.



Ejemplo de servidor en Swift (macOS)

import GRPCimport NIOimport HelloWorld // módulo generado

class GreeterProvider: Greeter_GreeterProvider { func sayHello(request: Greeter_HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Greeter_HelloReply> { var reply = Greeter_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()


Ejemplo de cliente en Swift (iOS/macOS)

import GRPCimport NIOimport HelloWorld

let group = PlatformSupport.makeEventLoopGroup(loopCount: 1)defer { try! group.syncShutdownGracefully() }

let channel = try GRPCChannelPool.with( target: .host("localhost", port: 50051), transportSecurity: .plaintext, eventLoopGroup: group)defe

Recommendations