搜索了很多資料,看了很多相關(guān)博客,終于還是踏過一個個大坑(相關(guān)方法都試過),實現(xiàn)相關(guān)功能。本文章親試可行,轉(zhuǎn)載請注明出處:
Protocol Buffer是google 的一種數(shù)據(jù)交換的格式,已經(jīng)在Github開源,目前最新版本是3.1.0。它獨立于語言,獨立于平臺。google 提供了多種語言的實現(xiàn):Java、C#、C++、Go 和 Python,Objective-C,每一種實現(xiàn)都包含了相應(yīng)語言的編譯器以及庫文件。由于它是一種二進(jìn)制的格式,比使用 XML 進(jìn)行數(shù)據(jù)交換快許多??梢园阉糜诜植际綉?yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。作為一種效率和兼容性都很優(yōu)秀的二進(jìn)制數(shù)據(jù)傳輸格式,可以用于諸如網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲等諸多領(lǐng)域。
mac相關(guān)配置
生成protoc,一步步跟隨操作即可
- 首先確保你已經(jīng)安裝brew
- brew install automake
- brew install libtool
- brew install autoconf
- 下載面向Objective-C的protobuf庫,地址為(https://github.com/google/protobuf/releases),要下載對應(yīng)Objective-C的版本比如 protobuf-objectivec-3.5.1.zip,解壓
FFB72176-1D4A-440C-8652-46B8CEA7AEB5.png
下面準(zhǔn)備生成protoc
- cd到該文件夾下面,例如:cd /Users/***/Desktop/protobuf-3.5.1
- ./autogen.sh
- ./configure
- make
- make check
- sudo make install
然后通過protoc --version查看,如果現(xiàn)實如下,則表示成功

查看安裝好的查看安裝好的protoc可以通過 open /usr/local/bin 看到protoc以及open /usr/local/include 看到google文件夾
XCode相關(guān)配置
網(wǎng)上介紹大多是通過cocoaPods導(dǎo)入第三方庫的形式將protobuf加入項目,但實測Podfile 里面pod 'ProtocolBuffers’(這個不行)。最終還是采用了手動導(dǎo)入的方式;
進(jìn)入mac相關(guān)配置中下載解壓的包中
-
找到如圖文件夾,
 ](http://upload-images.jianshu.io/upload_images/1400066-462ac64102a05327.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) -
將其中g(shù)oogl文件夾和除開(GPBProtocolBuffers.m)的所有.h 和.m文件拷貝到項目第三方庫的文件夾下面:如圖
DA4F8D26-4182-472C-882B-77CE2B96A6B6.png -
開始編譯(一堆錯誤,但是很容易解決),一是非ARC在ARC下編譯錯誤(在build phase 相關(guān)文件后面添加-fno-objc-arc,基本導(dǎo)入的文件全部添加),二是google文件夾下相關(guān)頭文件尋址錯誤,添加路徑即可;此外還需添加頭文件搜索路徑如圖:
C5BB6817-0502-4486-AE65-819E9901AE8F.png
使用說明
使用主要有三點
- 一是建造model對應(yīng)的創(chuàng)建的proto文件,
syntax = "proto3";
message YLmessage
{
int32 text = 1;
string receiveName = 2;
string phone = 3;
}
-
二是將proto文件轉(zhuǎn)換成OC能用的文件
生成proto的oc文件 protoc --proto_path=/Users/*****/Desktop/protoTest --objc_out=/Users/****/Desktop/OCProtobuf /Users/******/Desktop/protoTest/message.proto
其中--proto_path=/Users/****/Desktop/protoTest 為proto文件存放的文件夾
--objc_out=/Users/****/Desktop/OCProtobuf為生成OC文件存放的文件夾
/Users/****/Desktop/protoTest/message.proto為要轉(zhuǎn)換的proto文件
- 三是使用,將生成的.h和.m文件加入項目
// 序列化
// 反序列化YLmessage * pmessage = [YLmessage new]; pmessage.text = message; // 序列化為Data NSData *data = [pmessage data]; NSLog(@"%@",data); [_webSocket send: data];- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message { if (_delegate && [_delegate respondsToSelector:@selector(receiveMessage:)]) { NSError *error; YLmessage * pmessage = [[YLmessage alloc] initWithData:message error:&error]; NSLog(@"%@",pmessage.description); [_delegate receiveMessage: pmessage.text]; }



