自动化将生成的 proto 文件包含到 Xcode 项目中的过程

Posted

技术标签:

【中文标题】自动化将生成的 proto 文件包含到 Xcode 项目中的过程【英文标题】:Automate the process of including generated proto files into an Xcode project 【发布时间】:2021-07-02 02:33:33 【问题描述】:

我们的 ios 应用目前使用 Google protobuffer gRPC 作为我们的 API 层来在应用和后端之间进行通信。所以我们的后端目录中有这些.proto 文件,它们将被gRPC-Swift-Plugins 转换为.grpc.swift.pb.swift 文件,然后由应用程序使用。

这行得通,但是转换的过程非常繁琐,我们希望将整个过程自动化。

以下是我们的做法:
    删除之前复制的目录,并通过 shell 脚本将所有 .proto 文件从后端(.proto 文件由后端开发人员维护)复制到名为“Protos”的 App 目录中 我们已经设置了构建规则并将.proto文件包含在Compile Sources中。按照an answer here on SO 的步骤

Xcode 中当前设置的屏幕截图构建规则

    每当我们构建项目时,都会生成.pb.swift.grpc.swift,并将其放入“Protos”文件夹下名为“generated”的目录中。

问题如下:

    如果后端将新的.proto 文件添加到源目录中,我的脚本只会将文件复制到 Protos 目录中,而不会将新闻文件包含在 Compile Sources 列表中。 与第一个问题类似,我们需要在 Xcode 中手动设置 Compile Sources,这意味着如果新开发人员加入我们的团队,他/她也需要再次进行相同的设置。 编码时有时需要参考.grpc.swift.ph.swift 文件。但是如果我们将这些文件添加到 Xcode 中并再次构建项目,Xcode 会抱怨这些生成的文件在那里(对不起,我们正在处理私有 repo,因此项目名称和文件名被替换):

多个命令产生'$user_path/$proto_name.pb.o':

    目标“$my_project_name”(项目“$my_project_name”)具有 Swift 源文件的编译命令 目标“$my_project_name”(项目“$my_project_name”)具有 Swift 源文件的编译命令

非常感谢任何答案或 cmets 和建议!

【问题讨论】:

【参考方案1】:

有趣的是,如果我使用 $DERIVED_FILE_DIR,我在 Swift 中没有这些问题

protoc "$INPUT_FILE_NAME" --swift_out="$DERIVED_FILE_DIR" --proto_path="Your/proto/path"

我不使用该插件,因为我的 /usr/local/bin 中已安装该插件

但是当我们将输出用于 cpp 文件时,我确实遇到了这些问题。

【讨论】:

以上是关于自动化将生成的 proto 文件包含到 Xcode 项目中的过程的主要内容,如果未能解决你的问题,请参考以下文章

自动生成proto Js语句

如何从生成的文件夹中删除自动生成的 proto 文件

xcode核心数据类中的数据类型不匹配

将 dlib 链接到 Xcode

如何将已编译的协议缓冲区转换回 .proto 文件?

linux 和windows 的protoc生成的proto文件不同吗