配置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

iOS使用protobuf环境的配置的更多相关文章

  1. cocos2d-x学习记录第一篇-环境变量配置

    最近准备学习cocos2d-x,之前一直是做iOS开发的,算是零基础开始学习吧. (此条后来修改,不用配置下面这些东西,下载一个cocosstudio就可以了,直接在里边就创建工程了) 本人用Mac电 ...

  2. Cordova - 使用Cordova开发iOS应用实战1(配置、开发第一个应用)

    Cordova - 使用Cordova开发iOS应用实战1(配置.开发第一个应用) 现在比较流行使用 html5 开发移动应用,毕竟只要写一套html页面就可以适配各种移动设备,大大节省了跨平台应用的 ...

  3. 使用VSTS/TFS搭建iOS持续集成环境

    TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力.这篇文章给大家介绍一下如何使 ...

  4. ios搭建开发环境

    ios搭建开发环境 好久就想试水IOS开发了,由于开发环境限制,一直局限于理论和虚拟机,近来入手了MacBook Pro,也来尝尝鲜,笔者也是现学现总结,如果有不足,请指正. IOS开发必备MAC O ...

  5. IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  6. 【1】windows下IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  7. 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

    使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...

  8. iOS React Native 环境的搭建

    react native 的官网:http://reactnative.cn/docs/0.47/getting-started.html#content  --iOS如何搭建mac版的环境 1.配置 ...

  9. appium+ios+macaca自动化测试环境部署

    环境准备(供参考) mac v10.14.4 xcode v10.2 python v3.6 确保上述环境已满足,即可开始搭建appium+ios测试环境 1 jdk安装 下载mac版本的jdk并安装 ...

随机推荐

  1. Object Creation

    Although using the object constructor or an object literal are convenient ways to create single obje ...

  2. mysql linux环境

    创建新用户 create user jnroot@'%' identified by 'Yc@edc#sJn';创建数据库 create database price_monitor DEFAULT ...

  3. LeetCode.1029-两城调度(Two City Scheduling)

    这是小川的第383次更新,第412篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第245题(顺位题号是1029).公司计划采访的人数为2N.将第i个人飞往城市A的费用是[ ...

  4. 【HTTP】三、HTTP状态保持机制(Cookie和Session)

      前面我们提到HTTP协议的特点:无连接.无状态.无连接带来的时间开销随着HTTP/1.1引入了持久连接的机制得到了解决.现在来关注其"无状态"的特点.   所谓的无状态,就是指 ...

  5. 平衡树(fhq无旋treap)

    fhq板子(代码正确且风格易懂) 洛谷P3369 #include<iostream> #include<cstring> #include<cstdio> #in ...

  6. CF650A Watchmen(STL+map)

    目录 CF650A Watchmen 1. 手推公式 2.算法 3.优化 4.补充 CF650A Watchmen 只有三个map的一篇题解 1. 手推公式 \(|x2-x1|+|y2-y1|=\sq ...

  7. mysql中char,varchar与text类型的区别

      关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... text  ...

  8. sqlserver迁移mysql语法修改

    1.top 100  选取表中前100条改为 limit #{limit},limit 为变量2.获取当前日期getdate()改为now()3.id=#{id,jdbcType=BIGINT}改为i ...

  9. 配置Bean的作用域

    一.Spring中Bean的5个作用域 在Spring 2.0及之后的版本中,Bean的作用域被划分为5种.如下 singleton  默认值.以单例模式创建Bean的实例,即容器中该Bean的实例只 ...

  10. Git介绍、安装、命令和实战

    一.Git介绍 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 二.Git安装(Mac系统) 在Git官网下载安装包双击直接安装 在终端输入git来检测Git ...