ProtocolBuffer for Objective-C 运行环境配置

【protobuf】protobuf-2.4.1 兼容objective c插件的版本 protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 立即下载

原文地址:http://blog.youkuaiyun.com/marujunyy/article/details/8875964


1、下载ProtocolBuffer包(2.5版本与下面的object-c插件不兼容,建议下载2.4.1版本的):


            http://code.google.com/p/protobuf/downloads/list

     编译安装(生成的编译器protoc在/usr/local/bin目录下):


           cd protobuf-2.4.1

           ./configure
           make
           make install


2、下载Objective-C compiler for ProtocolBuffer(目前有两种类型的实现)。


    (1)、针对ProtocolBuffer2.2做修改,使最后生成的.proto文件编译器(protoc)支持Objective-C类型的文件输出。
http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers

    (2)、针对ProtocolBuffer2.3推出的plugin模式编写插件,以插件方式支持Objective-C类型的文件输出。
                      https://github.com/booyah/protobuf-objc

        我选用第二种方式,这也是Google推荐的方式。

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

        进入该目录,并执行(生成的插件protoc-gen-objc在/usr/local/bin/目录下):


                       cd  protobuf-objc

                       ./autogen.sh
                       ./configure
                       make
                       make install


3、测试.proto文件编译


        写一个person.proto文件:

[cpp]  view plain copy
  1. message Person {  
  2.  required string name = 1;  
  3.  required int32 id = 2;  
  4.  optional string email = 3;  
  5.    
  6.  enum PhoneType {  
  7.     MOBILE = 0;  
  8.     HOME = 1;  
  9.     WORK = 2;  
  10.  }  
  11.    
  12.  message PhoneNumber {  
  13.     required string number = 1;  
  14.     optional PhoneType type = 2 [default = HOME];  
  15.  }  
  16.    
  17.  repeated PhoneNumber phone = 4;  
  18. }  


        编译该文件:

                protoc  person.proto   --objc_out=/Output/Directory/   


        protoc会使用该插件编译.proto文件,最终生成两个文件:Person.pb.h 、Person.pb.m(不支持ARC)


        如果工程中使用了ARC ,所以需要使用-fno-objc-arc来标识相关的文件不使用ARC机制:



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

4、在Xcode中使用ProtocolBuffer


        将步骤2中protobuf-obj/src/runtime/Classes目录导入到Xcode项目中,导入时,选中”Copy items into destination group‘s folder(if needed)“。

        导入位置选择项目根目录。导入完毕后,项目根目录下将会出现Classes目录,将该目录改名为ProtocolBuffers(注意最后的s): mv Classes ProtocolBuffers

        修改项目属性中”Build Settings-->Search Paths-->Header Search Paths”,将项目根目录“.”添加到头文件搜索路径中去。

        这样ProtocolBuffer for Objective-C的工作环境就配置好了。


5、使用


        1)、将步骤3中编译输出的Person.pb.h 和Person.pb.m添加到项目中


        2)、将Person.pb.h 中的 #import <ProtocolBuffers/ProtocolBuffers.h> 改为#import"ProtocolBuffers/ProtocolBuffers.h"


        3)、在需要使用的地方引入头文件:#import "Person.pb.h"

[cpp]  view plain copy
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view, typically from a nib.  
  5.       
  6.     [self writeAndReadProtobuf];  
  7. }  
  8.   
  9. - (void)writeAndReadProtobuf{  
  10.     Person *person = [[[[[Person builder] setName:@"极致"]  
  11.                         setId:1]  
  12.                        setEmail:@"abc@163.com"] build];  
  13.     NSData *data = [person data];  
  14.       
  15.     NSString *docPath = [self applicationDocumentsDirectory];  
  16.     NSString *path = [docPath stringByAppendingFormat:@"/person.data"];  
  17.       
  18.     if ([data writeToFile:path atomically:YES]) {  
  19.         [self readFileWithPath:path];  
  20.     }  
  21. }  
  22.   
  23. - (NSString *)applicationDocumentsDirectory {  
  24.       
  25.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  26.     NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;  
  27.     return basePath;  
  28. }  
  29.   
  30. - (void)readFileWithPath:(NSString *)path {  
  31.       
  32.     NSData *data = [NSData dataWithContentsOfFile:path];  
  33.     Person *person = [Person parseFromData:data];  
  34.       
  35.     if (person) {  
  36.         NSLog(@"\n id %d \n name: %@ \n email: %@ \n",person.id, person.name, person.email);  
  37.     }  
  38. }  
输出打印的结果如下:

              

遇到的问题:


          在执行 ./autogen.sh时出现错误:   
./autogen.sh: line 10: autoreconf: command not found

          

          解决办法:需要安装automake和autoconf:


                      brew install automake

                      brew install autoconf 

brew command not found:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 


Script used to build Google Protobuf 2.5.0 for use with Xcode 5 / iOS 7. Builds all supported architectures and produces a universal binary static library.


Third-Party Add-ons for Protocol Buffers


低速信号设计之 ESPI 篇 ESPI 是 Intel 推出的增强型串行外设接口,基于 SPI 发展而来,新增 Reset# 和 Alert# 信号,采用点对点主从通信模型,最高速率达 33MHz,支持半双工与 DMA 传输。 其物理接口含 10 条线路,通信协议分物理层、数据链路层等四层。布局布线需关注信号完整性、电源完整性,还得考虑与 SPI 的兼容性。 ESPI 广泛应用于计算机系统(连接 BIOS、电源管理器等)和工业控制领域,具有引脚少、功耗低等优势,但设计复杂且存在兼容性挑战。 阅读详情

相关推荐

普冉(PUYA)单片机开发笔记 [完结篇]:使用体会

这一篇是 PY32F003 应用实验的完结篇,总结了对这颗 MCU 的使用体会。我已经把自己实验用的代码打包上传,供各位码神参考。

Tomcat0130 - 代码生涯 9608

Object-C编译的Protobuf

因工作需要,要编译Object-C可用的Protocbuf,开始查资料, http://www.cnblogs.com/uniy/archive/2011/12/21/2296405.html 结果执行完 A. 下载Protocol Buffers将下载解压后的文件存放至Applications目录下,进到ProtocolBuffers-2.2.0-Source目录看看会发现 有个src目录...

weixin_30636089的博客 167

顺序功能图基本结构

顺序功能图(Sequential Function Chart,SFC)是一种用于描述工业控制系统中顺序控制流程的图形化编程语言,广泛应用于PLC(可编程逻辑控制器)编程。其核心思想是将复杂的控制流程分解为多个有序的步骤,通过逻辑条件实现步骤间的切换。顺序功能图通过图形化的方式简化了复杂控制逻辑的设计,尤其适用于需要严格顺序控制的工业自动化场景。[初始步] → 转换条件1 → [步1] → 转换条件2 → [步2] → ...[步X] → → [步B] → 转换条件B → → [合并步]

ayingqin1的博客 1227

centos7安装protocol buffer

centos7安装protocol buffer 因为搭建go环境需要使用protoc,所以记录一下对于protoc的安装记录: 是用wget下载protobuf包 wget https://github.com/protocolbuffers/protobuf/releases/download/v3.10.0/protobuf-all-3.10.0.tar.gz tar zvxf pr...

虹少侠的博客 1157

ESP-01S使用micropython,利用Thonny烧写固件

在家舒服的太久了,想学习点新的东西,这次看上了ESP8266系列的联网设备,想自己做点小玩意出来耍耍,下面跟我一起来学习吧。本篇主要记录固件的烧写及测试。Thonny下载链接不算难,但是网上资源较少。也是提醒自己不要忘记这个步骤,记录一下,也分享给和我一样开始接触的小伙伴,加油加油,万事开头难。

weixin_43422072的博客 1693

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

CentOS7 安装 protobuf-2.5.0

当你在Linux(我这里是Ubuntu10.04LTS Desktop)下编译安装某个包的时候,你首先是进入到解压目录然后执行“$ ./configure”的,但是有时候你会发现提示错误,错误提示是这样的: $ ./configure bash: ./configure:权限不够?????? [英文状态下提示的是“bash . /configure permission denied”] 如

love5117的专栏 5414

Token 费用爆炸?教你用 Semantic Cache(语义缓存)把 API 成本降低 80%

本文介绍了语义缓存(Semantic Cache)技术在大模型应用中的关键作用。传统Redis缓存基于精确匹配,无法处理用户提问的语义相似性,导致重复调用昂贵的LLM API。语义缓存通过将问题向量化并在向量空间中进行相似度匹配,可识别30%-50%的重复提问,直接返回历史答案。文章详细解析了技术原理(Embedding+向量搜索)、架构设计,并提供了基于Python和ChromaDB的50行核心实现代码。同时指出了生产环境中的三大挑战:阈值设定、隐私保护和多轮对话处理,并给出相应解决方案。该技术能以极低成

BUG猿的博客 1056

mac下安装 protocol buffer 2.6.1 以及object-c 支持

1. 下载protobuf2.6.1:https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz 2. 解压下载的文件 3. cd到protobuf-2.6.1目录 4. $./configure 5. $make 6. $make check 7. $sudo make install (需要接着输入密码) 8. $which protoc 9. $protoc --version -

qq_40248612的博客 626

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

weixin_46183247的博客 767

15、远程操作水下航行器(ROV)的非线性控制系统设计

本文探讨了远程操作水下航行器(ROV)的非线性控制系统设计,重点介绍了多变量PID控制、改进的PD控制和滑模控制三种方法。详细阐述了各控制策略的原理、建模与仿真过程,并通过对比分析其在稳态误差、振荡、抖振及跟踪效果等方面的性能表现。文章还提出了针对不同控制方法的优化建议,并给出了选择合适控制策略的决策流程,为ROV高精度运动控制提供了系统性解决方案。

sun99的博客 157

ProtocolBuffer for Objective-C 运行环境配置及使用

一 、前言最近要做一个新的项目需要用到Google的Protocol Buffer,所以最近两天一直在学习这个。在网上看了很多人写的相关博客,发现他们写的配置环境的步骤不尽相同,并且不需要那么复杂,所以就想写一篇最新的文章。 配置环境:mac OS 10.11.1 本文若有叙述错误之处,欢迎指点。二 、Protocol Buffer简介Protocolbuffer(简称Protobuf或PB)

Xcoder_的专栏 828

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 38

ProtocolBuffer for Objective-C Mac运行环境配置

  上班第4天,上司让我研究Google的Protocol Buffer,对于我这个小白来说这是一大难题。结合了一下网上资料,用了几个小时的时间,终于搞明白了。做个笔记,也当做资料给大家分享一下。   什么是Protocol Buffer?Protocolbuffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,它独立于语言,独立于平台。它是一种二进制格式,转换效率特别快...

weixin_30425949的博客 122

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ProtocolBuffer for Objective-C 运行环境配置[转]

1,下载ProtocolBuffer包,并按照包中根目录下README.txt安装。 http://code.google.com/intl/zh-CN/apis/protocolbuffers/ 当前最新版本2.4.1 最后make install后,会生成编译器protoc,并拷贝到/usr/local/bin目录下。   2,下载Objective-C compiler ...

lcdxwhj2003的专栏 106

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ProtocolBuffer for Objective-C 运行环境配置(真正测试过的)

还未完成验证,只是作为纪录,后续有时间完善 1、下载ProtocolBuffer包(2.5版本与下面的object-c插件不兼容,建议下载2.4.1版本的):              http://code.google.com/intl/zh-CN/apis/protocolbuffers/      编译安装(生成的编译器protoc在/usr/local/bin目

muyu114的专栏 2249

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 适配iOS7开发
下一篇: iOS 后台运行NSTimer
ios_developer
博客等级 码龄14年 1粉丝 4原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值