iOS之ProtocolBuffer搭建和示例demo

     此次搭建iOS的ProtocolBuffer編譯器和把*.proto源文件編譯成*.pbobjc.h 和 *.pbobjc.m文件時,碰到很多問題!html

搭建pb編譯器到時沒有什麼問題,只是在把*.proto文件編譯出來後,我用cocoaPods集成ProtocolBuffers到本身項目,git

cocoaPods集成的時候,我嘗試了兩個庫,一個是:github

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

另一個是:測試

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

可是運行時都一直報錯經過:google

一會報ProtocolBuffer庫文件找不到;spa

一會報版本不對:This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;3d

一會報屬性數據格式不存在,不匹配。code

 

   最後不得已只好放棄CocoaPods, 直接把從https://github.com/google/protobuf下載下來的庫拖進工程裏面,這樣才OK了!

簡單說下我這邊pb編譯器的安裝過程,和編譯後的使用demo:

 

1、環境安裝:pb編譯器的安裝

     一、從https://github.com/google/protobuf/releases下載protocolBuffer對應版本編譯器包,好比目前的對應的objc最新版本

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


  二、解壓包,假設解壓後的文件夾名爲: protobuf-objectivec-3.1.0,
    打開終端,進入文件夾protobuf-objectivec-3.1.0, 依次執行如下命令:

./configure
make
make check
sudo make install

  若是編譯順利的話,即可以使用protoc命令了,之後即可以用這個命令將.proto文件轉換爲不一樣語言的源代碼文件。

 

2、建立新項目,導入pb庫,編寫proto文件編譯,使用過程

      一、從https://github.com/google/protobuf.git下載源碼,解壓,裏面有支持不一樣語言的版本源碼,

  咱們只須要裏面的支持objc的文件夾名爲:objectivec,如圖:

  

 

  二、新建一個工程命名爲Tan_ProtocolBuffer,建立一個文件夾,假設命名爲:protocolbuf, 把第一步的pb源碼複製到此文件夾中:

  

 

  三、使用Xcode打開工程,點擊左下角「+」, 引用protocolBuffer源文件到工程中

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

      

   

  四、選中工程: targets —>  Build Phases  —>  Link Binary With Libraries, 引用源碼靜態庫文件:libProtocolBuffers.a

  

 

  五、在工程設置搜索靜態庫的頭文件(pb文件在protocolbuf文件夾裏面):

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

  

 

  

  六、編寫測試文件*.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, 而後就可使用了。

  截圖以下:  

    

 

    

 

           

 

   

 

     

 

 

  七、編寫測試代碼,使用Person類進行數據序列化和反序列:

  

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

 

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

 

關於使用GCDAsyncSocket 和 Protobuf開發中碰到的拆包和粘包問題,見個人下一篇文章:

CocoaAsyncSocket + Protobuf 處理粘包和拆包問題

相關文章
相關標籤/搜索