这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题!

搭建pb编译器到时没有什么问题,只是在把*.proto文件编译出来后,我用cocoaPods集成ProtocolBuffers到自己项目,

cocoaPods集成的时候,我尝试了两个库,一个是:

https://github.com/google/protobuf.git,

另外一个是:

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

但是运行时都一直报错通过:

一会报ProtocolBuffer库文件找不到;

一会报版本不对:This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;

一会报属性数据格式不存在,不匹配。

最后不得已只好放弃CocoaPods, 直接把从https://github.com/google/protobuf下载下来的库拖进工程里面,这样才OK了!

简单说下我这边pb编译器的安装过程,和编译后的使用demo:

一、环境安装:pb编译器的安装

1、从https://github.com/google/protobuf/releases下载protocolBuffer对应版本编译器包,比如目前的对应的objc最新版本

    下载地址为:https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-objectivec-3.1.0.zip

  2、解压包,假设解压后的文件夹名为: protobuf-objectivec-3.1.0,
    打开终端,进入文件夹protobuf-objectivec-3.1.0, 依次执行以下命令:

./configure
make
make check
sudo make install

  如果编译顺利的话,便可以使用protoc命令了,以后便可以用这个命令将.proto文件转换为不同语言的源代码文件。

二、创建新项目,导入pb库,编写proto文件编译,使用过程

1、从https://github.com/google/protobuf.git下载源码,解压,里面有支持不同语言的版本源码,

  我们只需要里面的支持objc的文件夹名为:objectivec,如图:

  

  2、新建一个工程命名为Tan_ProtocolBuffer,创建一个文件夹,假设命名为:protocolbuf, 把第一步的pb源码复制到此文件夹中:

  

  3、使用Xcode打开工程,点击左下角“+”, 引用protocolBuffer源文件到工程中

  (源文件里面有两个工程配置文件:ProtocolBuffers_iOS.xcodeproj和ProtocolBuffers_OSX.xcodeproj,引用ProtocolBuffers_iOS.xcodeproj就好)

      

  4、选中工程: targets —>  Build Phases  —>  Link Binary With Libraries, 引用源码静态库文件:libProtocolBuffers.a

  

  5、在工程设置搜索静态库的头文件(pb文件在protocolbuf文件夹里面):

   targets —>  Build Setting  —>  Search Paths  —> Header Search Paths, 写入:$(PROJECT)/protocolbuf

  

  

  6、编写测试文件*.proto,比如新建一个文件Person.proto, 按照官方标准语法https://developers.google.com/protocol-buffers/ 编写通用代码,
  写好后在终端进入该Person.proto文件所在目录,使用protoc命令:protoc *.proto --objc_out=../Pro_out 进行编译。
  把Person.proto文件编译成Person.pbobjc.h和Person.pbobjc.m, 生成的文件在Pro_out文件夹里面。
  如果Person.proto源文件有语法问题,编译时会报错;当编译时什么提示都没有,表示编译成功:
  将编译好的*.pbobjc.h和*.pbobjc.m拖入工程中,因为不支持arc, 所以需要在*.pbobjc.m设置-fno-objc-arc, 然后就可以使用了。

  截图如下:  

    

  7、编写测试代码,使用Person类进行数据序列化和反序列:

  

示例demo下载地址:https://github.com/xiaotanit/Tan_ProtocolBuffer

原文链接:http://www.cnblogs.com/tandaxia/p/6181534.html 

关于使用GCDAsyncSocket 和 Protobuf开发中碰到的拆包和粘包问题,见我的下一篇文章:

CocoaAsyncSocket + Protobuf 处理粘包和拆包问题

 

iOS之ProtocolBuffer搭建和示例demo的更多相关文章

  1. iOS之ProtocolBuffer搭建

    一.环境安装:pb编译器的安装 1.从https://github.com/google/protobuf/releases下载protocolBuffer对应版本编译器包,比如目前的对应的objc最 ...

  2. 快速搭建一个直播Demo

    缘由 最近帮朋友看一个直播网站的源码,发现这份直播源码借助 阿里云 .腾讯云这些大公司提供的SDK 可以非常方便的搭建一个直播网站.下面我们来给大家讲解下如何借助 腾讯云 我们搭建一个简易的 直播示例 ...

  3. iOS自动化环境搭建——macaca

    macaca-java for ios 自动化环境搭建 基础原理解析:https://testerhome.com/topics/6608 一.环境搭建 1.安装eclipse; -----Java开 ...

  4. Appium(JAVA)Windows 7系统搭建及示例运行

    Appium(JAVA)Windows 7系统搭建及示例运行 分类: Appium 2014-11-14 17:44 4323人阅读 评论(2) 收藏 举报 1.搭建Android环境 http:// ...

  5. 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收

    利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介   WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  6. S2X环境搭建与示例运行

    S2X环境搭建与示例运行 http://dbis.informatik.uni-freiburg.de/forschung/projekte/DiPoS/S2X.html 环境 Maven proje ...

  7. 网络基础、ftp任务(进度条、计算文件大小、断点续传、搭建框架示例)

    一.网络基础 1.端口,是什么?为什么要有端口? 端口是为了将同一个电脑上的不同程序进行隔离. IP是找电脑:端口是找电脑上的应用程序: 端口范围:1 – 65535 :    1 - 1024 不要 ...

  8. React Native IOS ---基础环境搭建(前端架构师)

    React Native -IOS 开发环境搭建 web架构(基础) 安装依赖 * 必须安装的依赖有:Node.Watchman 和 React Native 命令行工具以及 Xcode. npm 镜 ...

  9. springboot成神之——springboot+mybatis+mysql搭建项目简明demo

    springboot+mybatis+mysql搭建项目简明demo 项目所需目录结构 pom.xml文件配置 application.properties文件配置 MyApplication.jav ...

随机推荐

  1. PHP-生成缩略图和添加水印图-学习笔记

    1.开始 在网站上传图片过程,经常用到缩略图功能.这里我自己写了一个图片处理的Image类,能生成缩略图,并且可以添加水印图. 2.如何生成缩略图 生成缩略图,关键的是如何计算缩放比率. 这里,我根据 ...

  2. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  3. Taurus.MVC 2.0 开源发布:WebAPI开发教程

    背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...

  4. Android Ormlite 学习笔记1 -- 基础

    Ormlite 是一个开源Java数据实体映射框架.其中依赖2个核心类库: 1.ormlite-android-4.48.jar 2.ormlite-core-4.48.jar 新建项目,引用上面2个 ...

  5. Unity3D框架插件uFrame实践记录(一)

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  6. 【C#公共帮助类】 Utils 10年代码,最全的系统帮助类

    为大家分享一下个人的一个Utils系统帮助类,可能有些现在有新的技术替代,自行修改哈~ 这个帮助类主要包含:对象转换处理 .分割字符串.截取字符串.删除最后结尾的一个逗号. 删除最后结尾的指定字符后的 ...

  7. PHP static静态属性和静态方法

    这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...

  8. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  9. 手机web如何实现多平台分享

    话说App一般都带有分享到社交平台的入口,web网页的分享也有很不错的框架,但是随着HTML5的不断发展,手机web页面越来越多的进入到我们的生活中,那如何在我们的手机上完成分享呢?话说各大分享平台都 ...

  10. Android之ContentProvider数据存储

    一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...