gRPC pour Swift (iOS/macOS) : bibliothèques, configuration et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour Swift (iOS/macOS) : bibliothèques et exemples



gRPC est un framework moderne et haute performance pour l'appel de procédure à distance (RPC), développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 pour le transport. Dans l'écosystème Swift (iOS/macOS), gRPC est implémenté via la bibliothèque gRPC-Swift, construite sur le framework asynchrone SwiftNIO. Cela permet de créer des applications clientes et serveur en Swift avec prise en charge du streaming de données, des délais d'attente et de l'authentification.



Bibliothèques principales pour gRPC en Swift

  • gRPC-Swift — bibliothèque officielle d'Apple et Google. Fournit une API pour créer des serveurs et clients gRPC. Prend en charge les flux unaires, serveur, client et bidirectionnels.
  • SwiftNIO — framework asynchrone de bas niveau pour les communications réseau, sur lequel repose gRPC-Swift.
  • protoc-gen-swiftgrpc — plugin pour le compilateur protoc, générant du code Swift à partir de fichiers .proto.
  • SwiftProtobuf — bibliothèque pour travailler avec les messages protobuf en Swift (sérialisation/désérialisation).


Installation via Swift Package Manager

Ajoutez les dépendances dans Package.swift de votre projet :

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


Création d'un fichier .proto

Définissez le service et les messages. Exemple de fichier helloworld.proto :

syntax = "proto3";

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Génération du code Swift

Installez protoc et les plugins :

brew install protobufbrew install swift-protobufbrew install grpc-swift

Générez le code :

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

Les fichiers helloworld.pb.swift et helloworld.grpc.swift seront créés.



Exemple de serveur en Swift (macOS)

import GRPCimport NIOimport HelloWorld // module généré

class GreeterProvider: Greeter_GreeterProvider { func sayHello(request: Greeter_HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Greeter_HelloReply> { var reply = Greeter_HelloReply() reply.message = "Bonjour, \\(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("Serveur démarré sur localhost:50051")try server.onClose.wait()


Exemple de client 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