gRPC para Swift (iOS/macOS): bibliotecas, configuração e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

gRPC para Swift (iOS/macOS): bibliotecas e exemplos

gRPC é um framework de alta performance para chamada de procedimentos remotos (RPC), desenvolvido pelo Google. Ele utiliza Protocol Buffers (protobuf) para serialização de dados e HTTP/2 para transporte. Para as plataformas Apple (iOS, macOS), existe o ecossistema oficial Swift gRPC, que permite criar aplicações tanto cliente quanto servidor com suporte completo aos recursos modernos do Swift, incluindo async/await.



Principais bibliotecas e ferramentas

Para trabalhar com gRPC em Swift, são utilizados os seguintes componentes:

  • gRPC-Swift — pacote oficial do Google. Inclui runtime, gerador de código e suporte para interação cliente-servidor.
  • Swift Protobuf — biblioteca para trabalhar com mensagens protobuf. Necessária para gerar estruturas Swift a partir de arquivos .proto.
  • protoc — compilador Protocol Buffers. Para gerar código Swift, são necessários os plugins protoc-gen-grpc-swift e protoc-gen-swift.
  • Swift Package Manager (SPM) — principal forma de integrar dependências.


Instalação e configuração

Para começar, adicione as dependências no 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") ] ) ])


Também é necessário instalar o protoc e os plugins via Homebrew:

brew install protobufbrew install grpc-swiftbrew install swift-protobuf


Exemplo de arquivo .proto

Vamos criar um serviço simples de saudação. Arquivo hello.proto:

syntax = "proto3";

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Gere o código Swift com o comando:

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


Como resultado, serão criados os arquivos hello.pb.swift e hello.grpc.swift.



Parte do servidor em Swift

Vamos criar um servidor gRPC que processará as requisições SayHello:

import GRPCimport NIOimport NIOPosix

class GreeterProvider: GreeterProvider { func sayHello(request: HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<HelloReply> { var reply = HelloReply() reply.message = "Olá, \\(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 em localhost:50051")try server.onClose.wait()


Parte do cliente em Swift (com async/await)

Para iOS/macOS, o cliente pode ser implementado convenientemente usando async/await. Certifique-se de usar Swift 5.5+ e o deployment target mínimo 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