配置protobuf需要HomeBrew工具或则是MacPort。如没有安装,则需要配置HomeBrew工具或则是MacPort。

步骤1(环境配置前的准备工作):

1:使用HomeBrew

brew install autoconf

brew install automake

brew install libtool

2:使用MacPort(使用了HomeBrew,请忽视这一步。当然也可以执行这一步)

sudo port install autoconf automake libtool

步骤2(下载谷歌的protobuf库):

下载基于c++的protobuffer:protobuffer

步骤3(生成将.proto文件编译成oc类的工具):

1: cd到下载下来的文件的目录(以下的步骤需要在vpn的情况下进行处理,如果没有开通,网上有解决方法)

例如cd/Users/macxu/Desktop/protobuf-master

2:输入

./autogen.sh

3:输入

./configure

4:输入

make

# 如果希望安装protoc,执行下面的命令

make install

(最好生成编译工具)

步骤4(工程中使用protobuf):

1:创建proto文件指定数据格式,可以选择proto2和proto3格式,它们有些细微的区别,在生成代码的时候会提示的,具体情况查看文档LanguageGuide proto3。下面使用proto3格式,并且保存为Person.proto。(请在windows环境下生成以下的文本,mac平台下好像不能够生成。编译成oc的时候好像会报错)

syntax = "proto3";

message   Person {

string name = 1;

int32 uid = 2;

string email = 3;

enum PhoneType {

MOBILE = 0;

HOME = 1;

WORK = 2;}

message PhoneNumber {

string number = 1;

PhoneType type = 2;}

repeated PhoneNumber phone = 4;}

2:使用protoc工具生成Objective-C代码。其中--proto_path=后跟需要处理的proto文件所在的文件夹,--objc_out=指明生成的是Objective-C代码以及目标文件存放路径,最后是需要处理的文件。(objc_out表示生成oc下的文件)

protoc --proto_path=. --objc_out=. Person.proto

3:处理完成后,生成两个文件,分别是Person.pbobjc.h和Person.pbobjc.m。这两个文件是采用的手动引用计数,因此在加入项目后需要设置它们的编译参数。

-fno-objc-arc

4:为了方便管理,我们直接将Protocol Buffers中的iOS静态库项目引入进来

 

(ps:里面有可能会有mac下的工程,请手动删除)(最好在新建的工程目录下新建一个文件夹,用来添加需要添加的工程例如protoTool文件夹)。

 

5:在工程下面添加静态库项目,

 

6:设置依赖和连接库。

 
 

7:记得设置Header Search Paths或者User Header Search Paths。将在本地所在的文件的上一层文件夹的路径添加进来。

 

现在就可以和使用普通的oc类一样使用Person.pbobjc.h。

8:具体的使用代码:

Person *person = [[Person alloc] init];

person.name= @"Zhangsan";

person.email= @"diveinedu@qq.com";

person.uid=23;

NSData *data = [person data];

NSString*path = @"/Users/apple/Desktop/test.data";

[data writeToFile:path atomically:YES];

NSData *ldata = [NSData dataWithContentsOfFile:path];

Person *p = [Person parseFromData:ldata error:nil];

ps:添加原生的库的时候有可能遇到问题的解决办法:

1:以前没有直接添加过带静态库的项目。添加的时候直接将需要添加的项目拖进去是不对的,不对的,不对。应该用add files来添加。

2:添加header search时,出现找不到路径的问题。需要添加被添加工程所在路径的上一层文件夹的路径。

转自:https://www.jianshu.com/p/e835376b2ba9

最新文章

  1. windows10 声音图标总是被禁用,检测显示:扬声器,耳机或者耳机已拔出
  2. 入门 ARM 汇编(二)—— 寻址方式
  3. 1.openstack之mitaka搭建基本配置
  4. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
  5. MyBatis学习总结_01_MyBatis快速入门
  6. C++ STL算法系列6---copy函数
  7. 关于CORS
  8. c# 判断窗体是否永在最前(TopMost),调用windows API
  9. gooflow0.6的流程设计
  10. 折腾iPhone的生活——通过设置使iPhone更省电
  11. last期末作业
  12. [ACM] n划分数m部分,它要求每一个部分,并采取了最大的产品(间隔DP)
  13. tomcat 错误查看
  14. java 接口默认修饰符问题
  15. (DP) 关于最优三角剖分
  16. suoi46 最大和和 (线段树)
  17. 为PartialView传递一个参数
  18. everything 提供http和ftp的功能
  19. Windows中的时间(SYSTEMTIME和FILETIME) (转载)
  20. java多态成员的特点

热门文章

  1. git clone 指定分支操作
  2. JS BOM(浏览器对象)
  3. windows中eclipse连接虚拟机hdfs
  4. python基础及安装
  5. 应用安全 - 工具 - 浏览器 - 火狐(FireFox) - 漏洞汇总
  6. 20191128 Spring Boot官方文档学习(10)
  7. 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法
  8. windows VS2013中使用<pthread.h>
  9. [转帖]C#中字典集合HashTable、Dictionary、ConcurrentDictionary三者区别
  10. 洛谷P1600 天天爱跑步——题解