原文地址:http://blog.csdn.net/long458/article/details/54693371
這次搭建iOS的ProtocolBuffer編譯器和把.proto源文件編譯成.pbobjc.h 和 .pbobjc.m文件時,碰到不少問題!
搭建pb編譯器到時沒有什么問題,只是在把.proto文件編譯出來后,我用cocoaPods集成ProtocolBuffers到自己項目,
cocoaPods集成的時候,我嘗試了兩個庫,一個是:
https://github.com/google/protobuf.Git,
另外一個是:
https://github.com/alexeyxo/protobuf-objc.git
但是運行時都一直報錯通過:
一會報ProtocolBuffer庫文件找不到;
一會報版本不對:This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;
一會報屬性數據格式不存在,不匹配。
最后不得已只好放棄CocoaPods, 直接把從https://github.com/google/protobuf下載下來的庫拖進工程里面,這樣才OK了!
簡單說下我這邊pb編譯器的安裝過程,和編譯后的使用demo:
一、環境安裝:pb編譯器的安裝
1、從https://github.com/google/protobuf/releases下載protocolBuffer對應版本編譯器包,比如目前的對應的objc最新版本
下載地址為:https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-objectivec-3.1.0.zip
2、解壓包,假設解壓后的文件夾名為: protobuf-objectivec-3.1.0, 打開終端,進入文件夾protobuf-objectivec-3.1.0, 依次執行以下命令:
./configuremakemake checksudo make install
如果編譯順利的話,便可以使用protoc命令了,以后便可以用這個命令將.proto文件轉換為不同語言的源代碼文件。
二、創建新項目,導入pb庫,編寫proto文件編譯,使用過程 1、從https://github.com/google/protobuf.git下載源碼,解壓,里面有支持不同語言的版本源碼,
我們只需要里面的支持objc的文件夾名為:objectivec,如圖:
2、新建一個工程命名為Tan_ProtocolBuffer,創建一個文件夾,假設命名為:protocolbuf, 把第一步的pb源碼復制到此文件夾中:
3、使用Xcode打開工程,點擊左下角“+”, 引用protocolBuffer源文件到工程中
(源文件里面有兩個工程配置文件:ProtocolBuffers_iOS.xcodeproj和ProtocolBuffers_OSX.xcodeproj,引用ProtocolBuffers_iOS.xcodeproj就好)
4、選中工程: targets —> Build Phases —> Link Binary With Libraries, 引用源碼靜態庫文件:libProtocolBuffers.a
5、在工程設置搜索靜態庫的頭文件(pb文件在protocolbuf文件夾里面):
targets —> Build Setting —> Search Paths —> Header Search Paths, 寫入:$(PROJECT)/protocolbuf
6、編寫測試文件.proto,比如新建一個文件Person.proto, 按照官方標準語法https://developers.google.com/protocol-buffers/ 編寫通用代碼, 寫好后在終端進入該Person.proto文件所在目錄,使用protoc命令:protoc .proto --objc_out=../Pro_out 進行編譯?! “裀erson.proto文件編譯成Person.pbobjc.h和Person.pbobjc.m, 生成的文件在Pro_out文件夾里面?! ∪绻鸓erson.proto源文件有語法問題,編譯時會報錯;當編譯時什么提示都沒有,表示編譯成功: 將編譯好的.pbobjc.h和.pbobjc.m拖入工程中,因為不支持arc, 所以需要在*.pbobjc.m設置-fno-objc-arc, 然后就可以使用了。
截圖如下:


7、編寫測試代碼,使用Person類進行數據序列化和反序列:
示例demo下載地址:https://github.com/xiaotanit/Tan_ProtocolBuffer