ProtocolBuffers-3.0.0 For Objective C 的快速集成指南

2023-11-06

一 、前言

最近调研 Google的Protocol Buffer。在网上看了几篇相关博客,发现他们讲的都比较复杂 ,所以就想写一篇简单点的文章。 

配置环境:mac OS 10.11.5  &  Xcode7.3 


二 、Protocol Buffer简介

Protocolbuffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,它独立于语言,独立于平台。Google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。与传统的XML和JSON不同的是,它是一种二进制格式,免去了文本格式转换的各种困扰,并且转换效率非常快,由于它的跨平台、跨编程语言的特点,让它越来越普及,尤其是网络数据交换方面日趋成为一种主流。

PB目前托管在GitHub,链接地址:https://github.com/google/protobuf,源码的主要功能可以分为两部分:

PB基础库:完成对象->二进制数据的序列化、二进制数据->对象的反序列化这两个转换过程的支持;
PB编译器:源码生成器,将PB格式定义文件。proto(PB数据格式的一种定义文件)转换为对象源码(支持C++,JAVA,Python等格式)。

截止目前PB的最新版本为3.0.0-beta-2,已经加入了对Objective-C的支持(其它之前低版本中也已经有OC扩展支持)。


三、下载并安装代码生成器protoc 3.0.0-beta-3.1

请不要直接用  brew 安装protoc ,brew 安装的版本是 当前的 发布版本 2.6.0 发布版不支持objective c 

(装个插件就可支持objective c 但是仍然有问题,比如不支持 option objc_class_prefix = "QZG"; 


下载页面链接:

https://github.com/google/protobuf/releases

打开页面并下载 64位 os x 版本如图





下载完成后解压得到如下目录




将 protoc 可执行程序 放到   /usr/local/bin/  目录下 即安装完成


四、使用protoc利用 .proto 生成代码

使用 protoc 程序将 .proto 文件范例Persion.proto 转化成 Objective C类文件,文件内容如下

protoc 文件的编写规则请参考:http://blog.csdn.net/xiaofei125145/article/details/51859791

syntax = "proto2";


option objc_class_prefix = "QZG";

message Person {
repeated uint32 myfield = 1;
}

message ExampleObject {
repeated double example_field = 7;
}


终端执行过程如下: 可以看到我的   Persion.proto  文件

ZhiGuangdeMini:message Wangdy$ pwd
/Users/zhiguangqiao/Desktop/message
ZhiGuangdeMini:message Wangdy$ ls
Persion.proto
ZhiGuangdeMini:message Wangdy$ proto Persion.proto --objc_out="./"
-bash: proto: command not found
ZhiGuangdeMini:message Wangdy$ protoc Persion.proto --objc_out="./"
ZhiGuangdeMini:message Wangdy$ ls
Persion.pbobjc.h	Persion.pbobjc.m	Persion.proto
ZhiGuangdeMini:message Wangdy$ 


执行完之后 可以看到多了如下两个文件  ,即 Objective c 类文件 ,注意 这是 MRC 的不支持 ARC

别忘了配置 -fno-objc-arc

Persion.pbobjc.h	Persion.pbobjc.m



创建Demo 工程并将上面两个文件添加到工程中编译会报错,提示找不到文件 ,因为还没有配置protobuf运行时环境。



五、安装 ProtocolBuffer 运行时环境

运行时环境是可以 直接通过 Pod 安装的 ,如果没有安装 Pod 请自行安装 


创建Demo工程

cd 到工程目录下 执行 pod init 

pod init 会生成 Podfile 文件

执行pod search命令

pod search protobuf


搜索结果中第一条就是 如下

-> Protobuf (3.0.0-beta-3.1)
   Protocol Buffers v.3 runtime library for Objective-C.
   pod 'Protobuf', '~> 3.0.0-beta-3.1'
   - Homepage: https://github.com/google/protobuf
   - Source:   https://github.com/google/protobuf.git
   - Versions: 3.0.0-beta-3.1, 3.0.0-beta-3, 3.0.0-beta-2, 3.0.0-alpha-4.1, 3.0.0-alpha-3 [master repo]


将下面的 这行 文本添加到 工程中的 Podfile 内,然后 pod install 即可
pod 'Protobuf', '~> 3.0.0-beta-3.1'


pod install 完成后,会生成一个 .xcworkspace 后缀的 文件 ,关闭原来的 xcode 工程, 并打开 .xcworkspace ,编译通过 





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ProtocolBuffers-3.0.0 For Objective C 的快速集成指南 的相关文章

  • 如何将 CIFilter 输出到相机视图?

    我刚刚开始使用 Objective C 我正在尝试创建一个简单的应用程序 它显示带有模糊效果的相机视图 我得到了与 AVFoundation 框架一起使用的相机输出 现在 我正在尝试连接 Core 图像框架 但不知道如何连接 Apple 文
  • TableView 中图像的大小不正确

    我正在使用来自 URL 的图像创建一个表视图 但图像不会调整到所有视图的大小 直到我将其按入行中 知道为什么会发生这种情况吗 这是一个自定义的表格视图 我的代码是 UITableViewCell tableView UITableView
  • IOS 上图像的加密/解密

    我们正在使用加密 解密和 UIIMAGE 如果我们加密和解密 UIIMAge 而不保存到 iphone 画廊中 它工作正常 但如果我们加密 保存到画廊中 将 加密的图像 加载到应用程序中 然后解密它效果不好 我们使用这个函数来加密 解密 保
  • iOS 键盘显示后分屏宽度

    我刚刚开始研究 Cordova 应用程序对分屏多任务处理的支持 到目前为止 该应用程序在模拟器中的 iPad 上显示和调整大小都很好 但是当我单击编辑字段并显示软件键盘时 100 宽度的值开始返回整个屏幕 而不是给出的窗口 初始显示 到目前
  • GoogleSignIn ios 附加到谷歌表格

    我目前正在开发一个 iOS 应用程序 该应用程序需要写入登录用户拥有的 Google 工作表 要登录我正在使用的用户GoogleSignInpod 并附加到我正在使用的谷歌表GoogleAPIClientForREST Sheets pod
  • 在iOS中设置框架的原点

    我正在尝试以编程方式设置框架的原点 Method1 button frame origin y 100 方法二 CGRect frame button frame frame origin y 100 我尝试了方法 1 但它不起作用 显示错
  • 弱变量中间为零

    弱变量什么时候变为零 weak var backgroundNode SKSpriteNode texture SKTexture image initialBackgroundImage backgroundNode position C
  • 是否可以在增强现实应用程序中使用自定义 iOS UI 元素(例如 UILabel)

    我想知道是否可以使用像这样的 UI 元素UIButton UILabel在带有 ARKit 的增强现实应用程序中 如果您也对 UIView 子类的透明度模式感兴趣 请尝试我的示例https github com erikhric ar me
  • 防止点击 MKAnnotation 时检测到 MKMapView 上的触摸事件

    我有一个 UITapGestureRecognizer 当用户点击地图时 它将在我的 MKMap 上隐藏和显示工具栏 简单 但是 当用户点击 MKMapAnnotation 时 我不希望地图以正常方式响应点击 如上所述 此外 当用户点击地图
  • Android - API 请求

    我开发了一个应用程序 它也在 iPhone 上 问题出在 api 请求上 我为所有请求设置了超时 有时会出现 30 60 秒的中断 看起来这个应用程序执行了几个请求 然后就中断了 一直超时 大约 45 秒后一切正常 不知道是服务器问题还是安
  • 如何在 NSDate 变量中仅设置时间?

    我有 NSDate 变量 只想更改时间 不应更改日期 是否可以 例如 用户在 DatePicker 日期中选择日期间隔 如果是开始日期 我想将时间设置为 00 00 00 如果是结束日期 我将时间设置为 23 59 59 感谢你的帮助 问候
  • 在 Swift 中使用 commitEditingStyle 动态删除 UITable 部分

    我正在处理一个无法解决的问题 我有一个来自客户数据库数组的名称表 每个客户在其他数据成员中都有一个名称属性 我可以成功删除某个部分中的行 但我不能删除该部分 当该部分中的最后一行被删除时 该部分必须消失 I got NSInternalIn
  • 无法安装企业应用程序 - 此配置文件无法安装在此设备上

    我正在设置 Jenkins 来构建应用程序的企业版本 以便在我们的内部应用程序商店中分发 如果我将应用程序存档在 Xcode 中 然后在手机上下载内置的 ipa 则应用程序安装不会出现任何问题 但是当我使用 Jenkins 生成的具有相同私
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托
  • 在 UITextView 上添加具有自定义间距和文本的图像

    I want to add Image on text view and want proper spacing as shown in screenshot 我尝试在文本视图上添加图像 但在根据要求放置文本时遇到问题 请向我提供有关同样的
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • NSDateFormatter:根据 currentLocale 的日期,不包含年份

    这不会太难吧 我想显示不带年份的日期 例如 8 月 2 日 美国 或 02 08 德国 它也必须适用于许多其他语言环境 到目前为止 我唯一的想法是对年份进行正常格式 然后从生成的字符串中删除年份部分 我认为你需要看一下 NSString d
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV

随机推荐

  • (docker)mysql镜像拉取-创建容器-容器的使用【个人笔记】

    容器的第一次创建 容器的第一次创建 需要先下载镜像 从 镜像拉取 0 可以搜索镜像的版本 docker search mysql 1 先拉取MySQL的镜像 默认拉取最新版 使用下面的命令拉取mysql镜像 docker pull mysq
  • The GNU nano text editor (文本编辑器)

    The GNU nano text editor 文本编辑器 https www nano editor org GNU nano is a small and friendly text editor 1 GNU nano The GNU
  • 服务端缓存

    CDN缓存 用户浏览器与服务器的交互流程 客户端浏览器先检查是否有本地缓存是否过期 如果过期 则向CDN边缘节点发起请求 CDN边缘节点会检测用户请求数据的缓存是否过期 如果没有过期 则直接响应用户请求 此时一个完成http请求结束 如果数
  • 救世之树服务端开服架设服务器搭建教程

    救世之树服务端开服架设服务器搭建教程 救世之树架设教程 准备好服务端 版本 服务器 域名开始实操 我是艾西 需要给服务器开启虚拟内存 设置好后服务器需要重启下 第一步 解压服务端到D盘 右键 000 修改计算机名 ps1使用powershe
  • VMware15安装及Linux环境搭建教程

    VMware15安装及Linux环境搭建教程 A 软件安装 B 新建虚拟机环境 附加题 C 文件与网络 文件设置 网络设置 对于很多计算机类专业的学生来说 经常有在Linux系统上进行开发的需要 本文介绍了如何利用VMware在Window
  • js数组常用方法

    JavaScript是一种高级编程语言 广泛应用于Web开发 在JavaScript中 数组是一种常用的数据类型 它可以用来存储一组值 这些值可以是任何类型 包括数字 字符串 对象等 JavaScript数组提供了许多强大的操作方法 可以帮
  • jmeter学习所采的坑

    1 jdk安装是32位与jmeter版本不兼容 jdk安装是32位 jmeter5 4 1 卸载jdk安装64后问题解决 2 jmeter安装后保存不了测试计划 解决方案 各种百度 最后在选项 外观 选择windows 可以保存测试计划 3
  • (代码审计)zzcms存储型XSS

    1 漏洞成因是stripfxg 函数引起的 先来看看这个函数 inc function php function stripfxg string htmlspecialchars decode false nl2br false 去反斜杠
  • flask mvc模式开发_MVC设计模式

    MVC的全名是Model View Controller 是模型 Model 视图 view 控制器 controller 的缩写 是一种设计模式 它是用一种业务逻辑 数据与界面显示分离的方法来组织代码 将众多的业务逻辑聚集到一个部件里面
  • RuntimeError: Error(s) in loading state_dict for BASE_Transformer

    最近跑一个深度学习变化检测的项目BIT CD 严格按照作者的说明页进行训练和测试 但是跑出来的模型就是无法正常工作 而用作者的预训练模型就正常工作 百思不得其解 根据错误 逐步调试 输出 总算是找到了问题的所在 其实这个问题如果对于老手 估
  • 全面解析大语言模型的工作原理

    当ChatGPT在去年秋天推出时 在科技行业乃至世界范围内引起了轰动 当时 机器学习研究人员尝试研发了多年的语言大模型 LLM 但普通大众并未十分关注 也没有意识到它们变得多强大 如今 几乎每个人都听说过LLM 并有数千万人用过它们 但是
  • 3D模型的渲染,这一篇就够了

    3D模型的渲染 这一篇就够了 效果图及源码 1 mapbox 2 threebox tube line logistics raycaster mercator object3D 效果图及源码 1 mapbox https docs map
  • ORACLE(student)表习题与答案

    1 查询Student表中的所有记录的Sname Ssex和Class列 SELECT sname ssex class FROM student 2 查询教师所有的单位即不重复的Depart列 SELECT distinct depart
  • 集中式日志存储架构

    Hello大家好 欢迎回来 我们今天的视频课程要讨论的内容是 AWS的集中式日志存储架构 包括集中式日志存储架构需要考虑的事项 以及使用了两个AWS账户对架构的实现做了个快速的演示 我们开始今天的内容 集中式日志存储架构 当前 在绝大多数组
  • 对话力码科技:保险科技应用有待深入,价值落地更重要

    保险行业的数字化时机已来 更加专业化的企业才能立于不败之地 数科星球原创 作者丨苑晶 编辑丨大兔 对于国内的大多数企业来说 2023年是个极为重要的年份 在软件行业 随着人工智能等新技术的日益成熟和普及 软件行业迎来黄金时代 在这种趋势下
  • 多点双向重发布

    实验题目 要求 1 两个协议间进行多点双向重发布 2 R7的环回没有宣告在OSPF协议中 而且是后期重发布进去 3 解决环路 所有路径选择最优 且存在备份 实验拓扑图 IP地址与ospf和rip的配置 R1 int g0 0 0 ip ad
  • 华为OD机试真题-计算网络信号 【2023.Q1】

    题目内容 网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网络信号值 注意 网络信号可以绕过阻隔物 array m n 的二维数组代表网格地图 array i j 0代表i行j列是空旷位置 array i
  • 开源协议比较:BSD、Apache、GLP、LGLP、MIT

    BSD开源协议 original BSD license FreeBSD license Original BSD license BSD开源协议是一个给于使用者很大自由的协议 基本上使用者可以 为所欲为 可以自由的使用 修改源代码 也可以
  • Python报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte的最新解决办法2022-09-30

    合并txt文件内容时候 Python报错UnicodeDecodeError gbk codec can t decode byte 这个错误是做NLP的小伙伴常见的一个错误 报错原因是读取的文件中有中文 网上找到的解决办法 将 with
  • ProtocolBuffers-3.0.0 For Objective C 的快速集成指南

    一 前言 最近调研 Google的Protocol Buffer 在网上看了几篇相关博客 发现他们讲的都比较复杂 所以就想写一篇简单点的文章 配置环境 mac OS 10 11 5 Xcode7 3 二 Protocol Buffer简介