iOS之ProtocolBuffer搭建和示例demo

轉(zhuǎn)載自:#####iOS之ProtocolBuffer搭建和示例demo

這次搭建iOS的ProtocolBuffer編譯器和把.proto源文件編譯成.pbobjc.h 和 *.pbobjc.m文件時(shí),碰到不少問(wèn)題!

搭建pb編譯器到時(shí)沒(méi)有什么問(wèn)題,只是在把*.proto文件編譯出來(lái)后,我用cocoaPods集成ProtocolBuffers到自己項(xiàng)目,

cocoaPods集成的時(shí)候,我嘗試了兩個(gè)庫(kù),一個(gè)是:

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

另外一個(gè)是:

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

但是運(yùn)行時(shí)都一直報(bào)錯(cuò)通過(guò):

一會(huì)報(bào)ProtocolBuffer庫(kù)文件找不到;

一會(huì)報(bào)版本不對(duì):This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;

一會(huì)報(bào)屬性數(shù)據(jù)格式不存在,不匹配。

最后不得已只好放棄CocoaPods, 直接把從https://github.com/google/protobuf下載下來(lái)的庫(kù)拖進(jìn)工程里面,這樣才OK了!

簡(jiǎn)單說(shuō)下我這邊pb編譯器的安裝過(guò)程,和編譯后的使用demo:

一、環(huán)境安裝:pb編譯器的安裝

1、從https://github.com/google/protobuf/releases下載protocolBuffer對(duì)應(yīng)版本編譯器包,比如目前的對(duì)應(yīng)的objc最新版本

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

2、解壓包,假設(shè)解壓后的文件夾名為: protobuf-objectivec-3.1.0,
  打開(kāi)終端,進(jìn)入文件夾protobuf-objectivec-3.1.0, 依次執(zhí)行以下命令:

./configure
make
make check
sudo make install

如果編譯順利的話,便可以使用protoc命令了,以后便可以用這個(gè)命令將.proto文件轉(zhuǎn)換為不同語(yǔ)言的源代碼文件。

二、創(chuàng)建新項(xiàng)目,導(dǎo)入pb庫(kù),編寫(xiě)proto文件編譯,使用過(guò)程

1、從https://github.com/google/protobuf.git下載源碼,解壓,里面有支持不同語(yǔ)言的版本源碼,

我們只需要里面的支持objc的文件夾名為:objectivec,如圖:

image

2、新建一個(gè)工程命名為T(mén)an_ProtocolBuffer,創(chuàng)建一個(gè)文件夾,假設(shè)命名為:protocolbuf, 把第一步的pb源碼復(fù)制到此文件夾中:

image

3、使用Xcode打開(kāi)工程,點(diǎn)擊左下角“+”, 引用protocolBuffer源文件到工程中

(源文件里面有兩個(gè)工程配置文件:ProtocolBuffers_iOS.xcodeproj和ProtocolBuffers_OSX.xcodeproj,引用ProtocolBuffers_iOS.xcodeproj就好)

*
image
![image](http://upload-images.jianshu.io/upload_images/4108415-7bd5680a9a006ecf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)* 

4、選中工程: targets —> Build Phases —> Link Binary With Libraries, 引用源碼靜態(tài)庫(kù)文件:libProtocolBuffers.a

image

5、在工程設(shè)置搜索靜態(tài)庫(kù)的頭文件(pb文件在protocolbuf文件夾里面):

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

image

6、編寫(xiě)測(cè)試文件*.proto,比如新建一個(gè)文件Person.proto, 按照官方標(biāo)準(zhǔn)語(yǔ)法https://developers.google.com/protocol-buffers/ 編寫(xiě)通用代碼,
  寫(xiě)好后在終端進(jìn)入該P(yáng)erson.proto文件所在目錄,使用protoc命令:protoc *.proto --objc_out=../Pro_out 進(jìn)行編譯。
  把Person.proto文件編譯成Person.pbobjc.h和Person.pbobjc.m, 生成的文件在Pro_out文件夾里面。
  如果Person.proto源文件有語(yǔ)法問(wèn)題,編譯時(shí)會(huì)報(bào)錯(cuò);當(dāng)編譯時(shí)什么提示都沒(méi)有,表示編譯成功:
  將編譯好的*.pbobjc.h和*.pbobjc.m拖入工程中,因?yàn)椴恢С謅rc, 所以需要在*.pbobjc.m設(shè)置-fno-objc-arc, 然后就可以使用了。

截圖如下:

image
image
    ![image](http://upload-images.jianshu.io/upload_images/4108415-a80937c781062c4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
image
image

7、編寫(xiě)測(cè)試代碼,使用Person類進(jìn)行數(shù)據(jù)序列化和反序列:

image

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

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

關(guān)于使用GCDAsyncSocket 和 Protobuf開(kāi)發(fā)中碰到的拆包和粘包問(wèn)題,見(jiàn)我的下一篇文章:

CocoaAsyncSocket + Protobuf 處理粘包和拆包問(wèn)題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容