首页 > 解决方案 > Swift 5:通过包管理器指定 GRPC 的导入路径

问题描述

我想在 Ubuntu 环境中有一个可执行的 GRPC 客户端。为此,我有以下内容Package.swift

// swift-tools-version:5.1
// The swift-tools-version declares the minimum version of Swift required to build this 

package.
import PackageDescription

let package = Package(
    name: "grpc_client",
    dependencies: [
        .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.0.0-alpha.6")
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "grpc_client",
            dependencies: ["GRPC"]),
        .testTarget(
            name: "grpc_clientTests",
            dependencies: ["grpc_client"]),
    ]
)

我从 *.proto 文件中生成 *.pb.swift 和 *.grpc.swift 并将这些文件放到 Source 文件夹中。但是当我打电话时,swift build我收到以下错误:

no such module 'SwiftGRPC'
import SwiftGRPC

来自两个生成的 *.swift 文件。看来我必须像这样提供导入路径或smth,但我不确定。

如何解决这个问题?

标签: swift

解决方案


刚刚找到了一个解决方案 - 也许它对具有类似环境的人会有所帮助。

  1. 要在 ubuntu 19.10 下构建 swift grpc,请使用以下补丁: https ://github.com/grpc/grpc-swift/issues/655

您需要static long gettid(void) { return syscall(__NR_gettid); }从 Sources/CgRPC/src/core/lib/gpr/log_linux.cc b/Sources/CgRPC/src/core/lib/gpr/log_linux.cc 和 Sources/CgRPC/src/core/lib/iomgr/ 中删除ev_epollex_linux.cc b/Sources/CgRPC/src/core/lib/iomgr/ev_epollex_linux.cc

因为更新的 glibc 版本。

  1. 添加项目依赖项的正确方法是

    .target(名称:“grpc_client”,依赖项:[“SwiftGRPC”]),

但不像GRPC回购自述文件中所述。


推荐阅读