如何将Proto文件编译为Obj-C源码文件,用在iOS和Mac平台上开发?

Protobuf是Google公司内部的混合语言数据标准,全称是Google Protocol Buffer,Protobuf是一种更小、更快、更简单的结构化数据存储格式,可用于序列化返回数据,目前已经支持生成Java,Python,Objective-C,C++代码。本文将介绍如何将Proto文件编译为Obj-C源码文件,方便在iOS和Mac平台上面,使用Xcode开发并存储解析Protobuf文件。

如何将Proto文件编译为Obj-C源码文件?

如果要在苹果iOS或者Mac开发过程中需要用到.pbobjc.h和.pbobjc.m文件,这些文件都是使用Protobuf编译工具(protoc命令)根据.proto后缀文件编译生成的。

1. 检查自己的Mac电脑内是否有protoc命令,打开终端输入一下命令。

$protoc -h

 

2. 如果没有,就需要编译和安装protoc命令文件

这里两种方案:

1. 进入Google Protobuf项目,自己下载、编译和安装;

下载地址:https://github.com/protocolbuffers/protobuf/releases

里面选择protobuf-objectivec-xxxx.zip文件下载,再找一下网上的教程编译完成。

2. 直接下载protoc命令文件后,手动将下载的protoc可执行命令文件复制到/usr/local/bin/文件夹下面。

下载地址:https://github.com/protocolbuffers/protobuf/releases

里面选择protoc-xxxx-osx-x86_64.zip文件下载。

或者,下载CSDN上传的,v3.12.4版本,下载地址:https://download.csdn.net/download/aogufeixue/12691484

$open /usr/local/bin/

注意,启动protoc命令文件,可能需要打开‘系统设置’进入‘安全和隐私’去允许打开非验证的app。

 

3. 如果有protoc命令,接下来就可以用它将.proto后缀的文件转换为Obj-C文件。

比如我桌面pb文件夹下面有个SubCmdPrinterMsg.proto,使用以下命令转换。

$cd /Users/James/Desktop/pb/

$protoc --objc_out=./ ./SubCmdPrinterMsg.proto

如何将Proto文件编译为Obj-C源码文件,用在iOS和Mac平台上开发?_第1张图片

4. 最后将可以将.pbobjc.h和.pbobjc.m文件,复制加入到xcode工程项目里面

如何将Proto文件编译为Obj-C源码文件,用在iOS和Mac平台上开发?_第2张图片

最后注意,在xcode里面使用.pbobjc.h和.pbobjc.m文件需要导入Google的一个库,可以使用Pod导入,在Podfile文件里面加入

pod 'Protobuf'

最后执行Pod Install命令:

pod install --verbose --no-repo-update

最终就可以在Xcode里面正常编译和使用Google Protocol Buffer,可以保存和解析Google的二进制数据格式。

// 创建
Person *person = [[Person alloc] init];
person.age = 100;
person.name = @"Feixue";
// 存储
NSData *pdata = [person data];
// 解析
Person *p = [Person parseFromData:pdata error:nil];
NSLog(@"person:%@",p);

这里还需要注意的地方是:生成的protoc执行命令文件版本要和Pod上面的版本一致,否则会报错:

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

比如,查看protoc的版本:

$protoc --version
$libprotoc 3.12.4

在Pod里面查看版本是3.10.2,这样就出现编译错误警告。

pod 'Protobuf' , '~> 3.10.0'

所有最好是转换.proto的protoc和Pod库版本一致。

你可能感兴趣的:(iPhone,google,protobuf,ios,objective-c,proto,转换格式)