博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载: iOS之ProtocolBuffer搭建和示例demo
阅读量:6624 次
发布时间:2019-06-25

本文共 1962 字,大约阅读时间需要 6 分钟。

原文地址:

这次搭建的ProtocolBuffer编译器和把.proto源文件编译成.pbobjc.h 和 .pbobjc.m文件时,碰到不少问题!

搭建pb编译器到时没有什么问题,只是在把.proto文件编译出来后,我用cocoaPods集成ProtocolBuffers到自己项目,
cocoaPods集成的时候,我尝试了两个库,一个是:
.,
另外一个是:
但是运行时都一直报错通过:
一会报ProtocolBuffer库文件找不到;
一会报版本不对:This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;
一会报属性数据格式不存在,不匹配。

最后不得已只好放弃CocoaPods, 直接把从下载下来的库拖进工程里面,这样才OK了!

简单说下我这边pb编译器的安装过程,和编译后的使用demo:

一、环境安装:pb编译器的安装

1、从下载protocolBuffer对应版本编译器包,比如目前的对应的objc最新版本
    下载地址为:
  2、解压包,假设解压后的文件夹名为: protobuf-objectivec-3.1.0,     打开终端,进入文件夹protobuf-objectivec-3.1.0, 依次执行以下命令:
./configuremakemake checksudo make install

如果编译顺利的话,便可以使用protoc命令了,以后便可以用这个命令将.proto文件转换为不同语言的源代码文件。

二、创建新项目,导入pb库,编写proto文件编译,使用过程 1、从下载源码,解压,里面有支持不同语言的版本源码,

  我们只需要里面的支持objc的文件夹名为:objectivec,如图:
  

img_0f8216f25f6493715d3b5545177550f2.png

2、新建一个工程命名为Tan_ProtocolBuffer,创建一个文件夹,假设命名为:protocolbuf, 把第一步的pb源码复制到此文件夹中:

  
img_651b9e1656c3940143b9d153602eeaf1.png

3、使用Xcode打开工程,点击左下角“+”, 引用protocolBuffer源文件到工程中

  (源文件里面有两个工程配置文件:ProtocolBuffers_iOS.xcodeproj和ProtocolBuffers_OSX.xcodeproj,引用ProtocolBuffers_iOS.xcodeproj就好)

  
img_bab0f08f68132e5c61f237f48fa5a04b.png
img_17cbad555ca4f4ed68d181e687637ec8.png

4、选中工程: targets —> Build Phases —> Link Binary With Libraries, 引用源码静态库文件:libProtocolBuffers.a

  
img_4abc50a3e227048cf4a74a30ecfea140.png

5、在工程设置搜索静态库的头文件(pb文件在protocolbuf文件夹里面):

   targets —> Build Setting —> Search Paths —> Header Search Paths, 写入:$(PROJECT)/protocolbuf

  
img_52a3d6fe7501cfe0e74a0a1acf082c4b.png

6、编写文件.proto,比如新建一个文件Person.proto, 按照官方标准语法 编写通用代码,  写好后在终端进入该Person.proto文件所在目录,使用protoc命令:protoc .proto --objc_out=../Pro_out 进行编译。  把Person.proto文件编译成Person.pbobjc.h和Person.pbobjc.m, 生成的文件在Pro_out文件夹里面。  如果Person.proto源文件有语法问题,编译时会报错;当编译时什么提示都没有,表示编译成功:  将编译好的.pbobjc.h和.pbobjc.m拖入工程中,因为不支持arc, 所以需要在*.pbobjc.m设置-fno-objc-arc, 然后就可以使用了。

  截图如下:  
   

img_6d7f42f70d658c3ca8aa55ee1cc07081.png

img_e6d0eb46d39cd42dea4622e8206e9ae2.png
![](http://upload-images.jianshu.io/upload_images/1293851-7dbc1e8b34f2e1b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
img_da8bcb6c45814c6598f74206df25ddfd.png
![](http://upload-images.jianshu.io/upload_images/1293851-28ccd3f34f77c698.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

7、编写测试代码,使用Person类进行数据序列化和反序列:

  

img_343437918f7286df4e8b5b659a76cc9a.gif
示例demo下载地址:

原文链接:

转载地址:http://umtpo.baihongyu.com/

你可能感兴趣的文章
python学习笔记(15-18)
查看>>
Oracle 查询不区分大小写 (正则函数)
查看>>
T264接口说明
查看>>
SELinux介绍
查看>>
visual C++ 用 TextOut 输出单个字符
查看>>
Rsyslog实现Nginx日志统一收集
查看>>
开源数字媒体资产管理系统:Razuna
查看>>
linux文本处理三剑客之grep家族及其相应的正则表达式使用详解
查看>>
Java中的IO操作(一)
查看>>
Python---装饰器
查看>>
s17data01
查看>>
kubernetes1.9.1 集群
查看>>
java set and get 用法
查看>>
linux笔记1-1
查看>>
dubbo源码分析-负载均衡
查看>>
一统江湖的大前端(3) DOClever——你的postman有点low
查看>>
云栖大会上发布了哪些移动研发新利器?
查看>>
《黑客免杀攻防》读书笔记-软件逆向工程(6) switch-case分支
查看>>
day6作业--游戏人生完善
查看>>
金字塔思维
查看>>