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

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 moderno e de alto desempenho para chamada remota de procedimentos (RPC), desenvolvido pelo Google. Ele usa Protocol Buffers (protobuf) para serialização de dados e HTTP/2 para transporte. No ecossistema Swift (iOS/macOS), o gRPC é implementado através da biblioteca gRPC-Swift, construída sobre o framework assíncrono SwiftNIO. Isso permite criar aplicações cliente e servidor em Swift com suporte a streaming de dados, timeouts e autenticação.



Principais bibliotecas para gRPC em Swift

  • gRPC-Swift — biblioteca oficial da Apple e Google. Fornece API para criar servidores e clientes gRPC. Suporta streams unários, do servidor, do cliente e bidirecionais.
  • SwiftNIO — framework assíncrono de baixo nível para comunicação de rede, no qual o gRPC-Swift é baseado.
  • protoc-gen-swiftgrpc — plugin para o compilador protoc que gera código Swift a partir de arquivos .proto.
  • SwiftProtobuf — biblioteca para trabalhar com mensagens protobuf em Swift (serialização/desserialização).


Instalação via Swift Package Manager

Adicione as dependências no Package.swift do seu projeto:

// 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") ] ) ])


Criação do arquivo .proto

Defina o serviço e as mensagens. Exemplo do arquivo helloworld.proto:

syntax = "proto3";

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Geração de código Swift

Instale o protoc e os plugins:

brew install protobufbrew install swift-protobufbrew install grpc-swift

Gere o código:

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

Serão criados os arquivos helloworld.pb.swift e helloworld.grpc.swift.



Exemplo de servidor em Swift (macOS)

import GRPCimport NIOimport HelloWorld // módulo gerado

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


Exemplo de cliente em 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