文档章节

protocolbuffers应用在iOS的配置以及使用方法

啊子同
 啊子同
发布于 2016/11/14 15:03
字数 606
阅读 148
收藏 0
点赞 0
评论 0

Protocol Buffers 是 Google 出品的用来序列化/反序列化数据的工具。原生支持 C++、Java、Python。

如果要在 iOS 上使用 PB,可以直接使用 C++,但是编译过程很麻烦,因此这里使用的是第三方的库。

安装 Protocol Buffers

  • 安装 homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安装 automake、libtool、protobuf。这里安装的 protobuf 是 google 官方版本。
brew install automake
brew install libtool
brew install protobuf
  • 先下载protocolbuffer的源码 protocolbuffer 。里面有ios的部分,可以编译成framework的动态库或静态库,我做好一个demo,可以用现成的,见github demo
  • 安装protocolbuffer,protol类成成工具,一种办法是用上述源码里。
$ cd compiler
$ ./autogen.sh
$ ./configure
$ make
$ make install (optional)

 

  • 编译 protoc-gen-objc。protoc-gen-objc 是 protoc 的一个插件,使其能将 .proto 文件编译成 objective-c 代码。
git clone git@github.com:alexeyxo/protobuf-objc.git

cd protobuf-objc

./autogen.sh

# 后面的参数保证 configure 能找到 protobuf 相关的头文件和库
# 避免报 protobuf headers are required 错误
./configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib

make

make install

若make后编译不通过,报错如下:

    google/protobuf/message.cc:130:60: error: implicit instantiation of undefined template  
          'std::__1::basic_istream<char, std::__1::char_traits<char> >'  
      return ParseFromZeroCopyStream(&zero_copy_input) && input->eof();  
                                                               ^  
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:109:33: note:   
          template is declared here  
        class _LIBCPP_TYPE_VIS_ONLY basic_istream;  
                                    ^  
    google/protobuf/message.cc:135:67: error: implicit instantiation of undefined template  
          'std::__1::basic_istream<char, std::__1::char_traits<char> >'  
      return ParsePartialFromZeroCopyStream(&zero_copy_input) && input->eof();  
                                                                      ^  
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:109:33: note:   
          template is declared here  
        class _LIBCPP_TYPE_VIS_ONLY basic_istream;  
                                    ^  
    google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template  
          'std::__1::basic_ostream<char, std::__1::char_traits<char> >'  
      return output->good();  
                   ^  
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:111:33: note:   
          template is declared here  
        class _LIBCPP_TYPE_VIS_ONLY basic_ostream;  
                                    ^  
    3 errors generated.  
    make[2]: *** [message.lo] Error 1  
    make[1]: *** [all-recursive] Error 1  
    make: *** [all] Error 2  

根据错误信息,对报错的文件进行如下修改:

protobuf-2.4.1/src/google/protobuf/message.cc,添加#include<istream>

添加后make成功。make install,安装到自定义目录。

这些完成之后,写一个protoc文件测试: UserInfo.proto

enum UserStatus {
    OFFLINE = 0;
    ONLINE = 1;
}
message UserInfo {
    required int64 acctID = 1;
    required string name = 2;
    required UserStatus status = 3;
}

转换:

$protoc --objc_out=. UserInfo.proto

在当前目录出现两个文件: UserInfo.pb.h UserInfo.pb.m

在 Podfile 中添加 pod 'ProtocolBuffers', '1.9.2' 然后执行 pod install

生成完成,使用起来很方便,导入framework静态库到工程中,使用方法:

UserInfoBuilder* builder = [UserInfo builder];
[builder setName:@"zhangsan"];
[builder setAcctId:1000];
[builder setStatus:UserStatusOnline];

UserInfo* info1 = [builder build];
NSData* data = info1.data;
NSLog(@"data:%@", data);


//data->obj

UserInfo* info2 = [UserInfo parseFromData:data];
NSLog(@"obj:%@", info2);

© 著作权归作者所有

共有 人打赏支持
啊子同
粉丝 0
博文 46
码字总数 10556
作品 0
广州
程序员
有道云笔记是如何使用TensorFlow Lite的?

文 / 有道技术团队 近年来,有道技术团队在移动端实时 AI 能力的研究上,做了很多探索及应用的工作。2017 年 11 月 Google 发布 TensorFlow Lite (TFLlite) 后,有道技术团队第一时间跟进 TF...

谷歌开发者 ⋅ 04/21 ⋅ 0

grpc| python 实战 grpc

date: 2018-5-15 22:12:32 title: grpc| python 实战 grpc description: 只要代码可以跑起来, 很多难题都会迎刃而解. so, keep coding and stay hungry. 之前用 swoole 写 server 时就接触过...

daydaygo ⋅ 05/16 ⋅ 0

基于Go语言的protobuf 安装 以及简单测试用例

先去官网下载protobuf的源码 https://github.com/google/protobuf/releases 可以先下载本地,然后上传到虚拟机中 我选择的是Source code(tar.gz) 安装依赖包(如果缺少包,可能会报错) yum i...

故新 ⋅ 06/13 ⋅ 0

google的protobuf库

这篇文章将讲述如何使用google的protobuf库实现一个RPC service,就实现一个最简单的service吧:echo.文章对应的代码都可以在eventrpc中找到,写下这篇文章时的svn revision是138. 1) 定义协议首...

moki_oschina ⋅ 06/06 ⋅ 0

用 Maven 实现一个 protobuf 的 Java 例子

原文出处:jihite 1. 介绍Protocol Buffers Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化,常用于RPC 系统(Remote Procedure Call Protocol System...

jihite ⋅ 05/14 ⋅ 0

hadoop2.6.4 安装和编译

hadoop集群搭建 tools: SecureCRT8.0 VMware12 RHEL 6.6 x64 网络规划: hadoop0 192.168.248.150 hadoop1 192.168.248.151 hadoop2 192.168.248.152 hadoop3 192.168.248.153 设置静态ip:......

lizer2016 ⋅ 2016/07/26 ⋅ 0

在项目中使用Protobuf协议实现数据传输(二)

上篇已经简单的分析了什么是ProtoBuf协议的优缺点、简单的环境配置、项目中的简单使用和一些编写.Proto文件的注意点,下面我们更加深入一下ProtoBuf的语法及高级使用(非常感谢Carson_Ho大神...

大荣言午 ⋅ 05/31 ⋅ 0

vs2013 写一份C++ 使用PROTOBUF的案例

vs2013 写一份C++ 使用PROTOBUF的案例 CNETOS 7.2下面也写一份C++ 使用PROTOBUF的案例 DEMO 只需要包含一个PROTO协议打包解包即可,包含REQUIEd字段,REPEATE,OPTIONAL字段,具体可以自定义...

张伟华 ⋅ 03/29 ⋅ 0

hadoop-2.6.4集群编译搭建-阿里云和腾讯云

腾讯云阿里云 hadoop集群编译搭建 环境准备 阿里云配置: 腾讯云配置: 创建用户 useradd hadoop passwd haddop jdk1.7安装: 下载:http://www.oracle.com/technetwork/java/javase/downloa...

lizer2016 ⋅ 2016/07/31 ⋅ 0

Protobuf序列化对象放到redis

安装Protobuf 下载包,3.0+; 解压包; make; make check; make install; 构建模板 指定3.0+版本 生成protof文件: 引入依赖: 如果使用json,引入依赖: 构建对象并序列化放到redis red...

春哥大魔王的博客 ⋅ 04/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 13分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 32分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 56分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 今天 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 今天 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 今天 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 今天 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部