ios用Protocol Buffers遇到的坑

原创 2016年08月30日 15:45:48

前半部分抄袭另一个博友 http://blog.csdn.net/u014202635/article/details/46531329


打开终端!

brew -v

查看你的mac里面有没有装brew。brew是mac os里面,类似于ubuntu的apt-get的功能,都可以直接在终端输入命令然后安装程序。-v自然就是版本version的意思

ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

这一句半懂不懂,大概就是利用curl工具访问那个url,然后在ruby环境下载安装brew
建议先去Homebrew官网找最新的下载地址
brew install automake
brew install libtool
brew install protobuf

就是利用brew下载安装了。protobuf就是我们想要的,另外两个是依赖库

git clone https://github.com/alexeyxo/protobuf-objc.git

./build.sh

从github下载protobuf-objc这个工程,build脚本里面做的是编译。
我建议不要用 ./build.sh ,我安装过程中发现未知错误最终没有进行下去。哎,好失败。懂脚本的朋友可以尝试下。

到此,我们先得感谢 http://www.2cto.com/kf/201503/382440.html的文章作者。点开链接的朋友会发现,这都什么吗,明显照抄人家的。。。尴尬
我只能说,该作者前半部分解释的非常好,我是超越不了了,只能完全借用了。其实说白了,就是懒。言归正传:
当我们 git clone https://github.com/alexeyxo/protobuf-objc.git 完成后,

cd ~/protobuf-objc
./autogen.sh
./configure


~/protobuf-objc其实就是刚刚clone的文件目录
进行./configure 可能会报错,不过别着急,先分析错误信息
configure: error: 
ERROR: protobuf headers are required.
You must either install protobuf from google,
or if you have it installed in a custom location
you must add '-Iincludedir' to CXXFLAGS
and '-Llibdir' to LDFLAGS.
If you did not specify a prefix when installing
protobuf, try
  './configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib'
In some 64-bit environments, try LDFLAGS=-L/usr/local/lib64.

仔细看,不难发现终端给出了解决办法,我想这应该是跟系统是不是64位有关吧(个人猜测)。

./configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib

运行通过后,

make
make install


最终生成的插件名字为protoc-gen-objc,会被安装到/usr/local/bin/目录下。
你可以 

cd /usr/local/bin/ 
ls -a


按照我的方法,肯定能看见protoc-gen-objc。

一切准备就绪,我们来测试下。
在桌面创建一个 ProtoBuf的文件夹。然后
cd ~/Desktop/ProtoBuf
touch person.proto
vi person.proto


就按ProtocolBuffer的语法规则简单建立一个.proto的文件

package csdnblog;
message PBUser {
required string userId = 1;
optional string nick = 2;
optional string avatar = 3;
}


创建完毕后,我们来编译这个person.proto文件。cd到ProtoBuf的文件夹后,命令如下:

protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out=./

protoc会自动在/usr/local/bin/目录下寻找名为”protoc-gen-objc”的插件,并使用该插件编译.proto文件,最终生成两个文件:

Person.pb.h
Person.pb.m

这个步骤通过后,说明ProtocoBuffer Compiler for Objective-C可以正常工作了。

现在我们可以在Xcode中使用ProtocolBuffer

------------------------------------------------------------------------------------------------------熟悉的分割线--------------------------------------------------------------------------------------------------------------

每次都是这里遇到的问题,

1、添加/src/runtime/ProtocolBuffers.xcodeproj到自己的工程,楼主把工程文件add进去,各种问题找不到然后放弃了,然后用了命令行

2、先装好了cocoaPods,这个百度吧,安装的时候可能会在Setting up CocoaPods master repo这个地方登上十几分钟,我装完后是七百多M,所以等了很久...一度想放弃。。。。最后总算成功、这篇文章算是安装的http://my.oschina.net/w11h22j33/blog/206129

3、安装ProtocolBuffers,cd进入到自己的.xcodeproj文件夹,然后

  a:$ vim Podfile

//创建一个Podfile的文件,此时在文件夹下可以看到这么个文件

  b:此时在插入模式,命令行里面输入:


platform :ios, '8.0'
target “RecordAndListen” do
pod 'ProtocolBuffers'

end


  c:按ESC退出插入模式,输入:wq,表示保存退出,直接打开那个Podfile文件,可以看到里面保存着上面写入的信息。

  d:$ pod install

此时等待安装完成,然后多了一个.xcworkspace文件,以后打开这个就能用了


网上的文章都是坑太多,对很多没弄过的,自己绕了一阵子,也算搞定了




关于protobuf的一些问题解决思路汇总

一、外界符号问题> 这种情况一般是没有导入LIB库,先去 项目->属性->链接器->常规 选择附加库目录,把protobuf的lib库目录引入进来,一般都会和项目放在一切,然后在VS项目中导入,最后在...
  • kan464872327
  • kan464872327
  • 2017年07月16日 13:27
  • 446

Protobuf c++使用小坑(set_allocated函数)

protobuf是后台开发中,比较常用的数据通信协议。相对于json,具有数据压缩率高等优点。但是,在某些情况下,稍不留神容易用错。 最近使用protobuf的时候,使用了相对陌生的复合类型的赋值...
  • u014088857
  • u014088857
  • 2016年11月22日 21:43
  • 2602

C++使用protobuffer的一些坑

服务器用protobuffer (之后简称pb)做协议包体使用了两个月, 确实体验到了很多方便的地方(接口代码易写易维护, 内部编码高效,传输快等)但不可否认的是C++在使用它的时候存在一些很难发现...
  • AXuan_K
  • AXuan_K
  • 2017年03月22日 17:55
  • 1151

在 iOS 中使用 Protocol Buffers

原文:Introduction to Protocol Buffers on iOS 作者: Vincent Ngo 译者:kmyhy 对于大部分需要后台支持的 App 来说,转化和存储...
  • kmyhy
  • kmyhy
  • 2017年04月19日 17:25
  • 1450

分享iOS使用ProtocolBuffer的方法

简要描述iOS实际开发中,怎么使用Google的 ProtocolBuffer。包括搭建protocolbuffer编译器,cocoapods导入。C++使用Protocolbuffer的思路。使用N...
  • leihaoyude
  • leihaoyude
  • 2015年10月20日 10:59
  • 3565

Mac OS下安装ProtocolBuffer与iOS的简单使用

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相...
  • Aaidong
  • Aaidong
  • 2015年03月27日 15:55
  • 2285

IOS代理 protocol最简单的实例,没有之一。。

#import "Aclass.h" @implementation Aclass @synthesize buyDele; -(void) showIt { //调用代理方法 具体...
  • u010586842
  • u010586842
  • 2014年11月20日 23:08
  • 990

Objective-C Expected a type错误

刚学到Objective-C的复合,于是就写了一个关于英雄和怪物的简单模拟程序,目测写法没有任何的错,但就是出现一个Expected a type的错误,很坑,但后来发现,问题出现在了前边的头文件,虽...
  • RunIntoLove
  • RunIntoLove
  • 2015年08月05日 17:08
  • 7693

ios用Protocol Buffers遇到的坑

前半部分抄袭另一个博友http://blog.csdn.net/u014202635/article/details/46531329 打开终端! brew -v 查看你的mac里面有没有装...
  • likui1989
  • likui1989
  • 2016年08月30日 15:45
  • 1304

iOS protocol buffer的使用

protocol buffer 是 google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编...
  • u011404663
  • u011404663
  • 2015年06月29日 23:11
  • 556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios用Protocol Buffers遇到的坑
举报原因:
原因补充:

(最多只允许输入30个字)