protoc转换Swift文件失败:‘google.type.LatLng’未定义问题求助
解决protoc无法找到google/type/latlng.proto依赖的问题
别担心,这个问题其实是因为google/type下的这类类型不属于Protocol Buffers核心库(核心库是google/protobuf/*这类官方基础类型),所以protoc默认不会包含它们的搜索路径,咱们一步步来解决:
1. 准备Google Type的proto文件
首先你需要获取google/type/latlng.proto以及其他你用到的同系列依赖文件。你可以拿到对应版本的官方proto定义文件,然后在项目里创建匹配的目录结构——比如新建third_party/google/type/目录,把latlng.proto放在这个路径下,这样目录结构就和你proto里的import "google/type/latlng.proto"语句完全对应了。
2. 修改protoc命令,添加依赖搜索路径
原来的protoc命令没有指定第三方proto的搜索目录,现在需要用--proto_path(或简写-I)参数告诉protoc去哪里找这些依赖。假设你的第三方proto放在当前项目的third_party目录下,修改后的命令如下:
protoc -I=. -I=./third_party --swift_out=. my_proto_file.proto
-I=.:指定当前目录作为搜索路径,用于找到你自己的my_proto_file.proto-I=./third_party:指定第三方依赖的根目录,这样protoc就能定位到third_party/google/type/latlng.proto,匹配你的import语句
3. 额外注意点
- 确保你下载的
latlng.proto版本和你的protoc版本(libprotoc 3.13.0)兼容,避免因语法差异出现新错误 - 如果你的proto里还用到了其他
google/type下的类型,比如google/type/date.proto,也要把对应的proto文件放到third_party/google/type/目录下 - 执行命令后,protoc不仅会生成
my_proto_file对应的Swift文件,还会生成latlng.proto对应的Swift文件,记得把这些生成的文件都添加到你的Swift项目中,不然代码会找不到google.type.LatLng对应的Swift类型
这样调整之后,protoc就能正确找到所有依赖,顺利生成你需要的Swift文件了。
内容的提问来源于stack exchange,提问作者Sandeep Bhandari
相关产品推荐
相关产品推荐

