iOS使用protobuf环境的配置
配置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环境的配置的更多相关文章
- cocos2d-x学习记录第一篇-环境变量配置
最近准备学习cocos2d-x,之前一直是做iOS开发的,算是零基础开始学习吧. (此条后来修改,不用配置下面这些东西,下载一个cocosstudio就可以了,直接在里边就创建工程了) 本人用Mac电 ...
- Cordova - 使用Cordova开发iOS应用实战1(配置、开发第一个应用)
Cordova - 使用Cordova开发iOS应用实战1(配置.开发第一个应用) 现在比较流行使用 html5 开发移动应用,毕竟只要写一套html页面就可以适配各种移动设备,大大节省了跨平台应用的 ...
- 使用VSTS/TFS搭建iOS持续集成环境
TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力.这篇文章给大家介绍一下如何使 ...
- ios搭建开发环境
ios搭建开发环境 好久就想试水IOS开发了,由于开发环境限制,一直局限于理论和虚拟机,近来入手了MacBook Pro,也来尝尝鲜,笔者也是现学现总结,如果有不足,请指正. IOS开发必备MAC O ...
- IOS开发基础环境搭建
一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包: ...
- 【1】windows下IOS开发基础环境搭建
一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包: ...
- 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境
使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...
- iOS React Native 环境的搭建
react native 的官网:http://reactnative.cn/docs/0.47/getting-started.html#content --iOS如何搭建mac版的环境 1.配置 ...
- appium+ios+macaca自动化测试环境部署
环境准备(供参考) mac v10.14.4 xcode v10.2 python v3.6 确保上述环境已满足,即可开始搭建appium+ios测试环境 1 jdk安装 下载mac版本的jdk并安装 ...
随机推荐
- Python新手最容易犯的十大错误
1. 忘记写冒号 在 if.elif.else.for.while.class.def 语句后面忘记添加“:” if spam == 42 print('Hello!') 2. 误用 “=” 做等值比 ...
- IOS CocoaPods详细使用方法
自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切 一.什么是CocoaPods 1.为什么需要CocoaPo ...
- js处理表情字符且让数据库支持emoji表情符存储
数据库处理 更换字符集utf8-->utf8mb4 JS处理 将表情转为字符: function utf16toEntities(str) { var patt=/[\ud800-\udbff] ...
- css实现毛玻璃效果
css实现毛玻璃效果,效果图 1,html代码 <div class="mainHolder"> <div class="textHolder" ...
- mysql 表字段 记录创建时间和更新时间
sql语句创建: CREATE TABLE `NewTable` ( `id` int NOT NULL AUTO_INCREMENT , `name` varchar(20) NOT NULL , ...
- CDH管理节点扩容磁盘步骤
把4个节点加12G内存,把hive的heap调到6G,按group重启服务让配置生效 注: 停服务前在yarn的application webui查flink的application id yarn ...
- mysql之general log 日志
开启 general log 将所有到达MySQL Server的SQL语句记录下来. 一般不会开启开功能,因为log的量会非常庞大.但个别情况下可能会临时的开一会儿general log以供排障使用 ...
- C# System.Reflection (反射)
在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息. 在System.Reflectio ...
- C# 从集合A中取出集合B中不包含的数据(根据ID判断),并添加到集合B中
从一个集合A中取出另一个集合B中不包含的数据,并添加到集合B中 private void button2_Click(object sender, EventArgs e) { var ListA = ...
- 17.AutoMapper 之配置(Configuration)
https://www.jianshu.com/p/031ff68797dd 配置(Configuration) 通过构造函数创建并初始化MapperConfiguration实例: config = ...