iOS下 安裝Protobuf(ProtocolBuffers)的詳細(xì)步驟,解決網(wǎng)上出現(xiàn)的所有問(wèn)題

Protobuf是什么?

Protobuf 即 google protocol buffer 是一種數(shù)據(jù)封裝格式協(xié)議,是google推出
的一種語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、擴(kuò)展性好的用于通信協(xié)議、數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù)串行化方法。支持
C++、Python、Java三種語(yǔ)言。

為什么要使用Protobuf?

在不同平臺(tái)通信的時(shí)候,首先需要將對(duì)象進(jìn)行序列化。iOS平臺(tái)上我們常用NSKeyedArchiver進(jìn)行
歸檔,當(dāng)然也可以將數(shù)據(jù)處理為JSON或者XML格式。NSKeyedArchiver只能在iOS/Mac平臺(tái)使用,
因此它歸檔的二進(jìn)制數(shù)據(jù)不適合于在不同平臺(tái)之間使用。JSON和XML雖然由于容易維護(hù),易讀而應(yīng)用
比較廣泛,但是對(duì)數(shù)據(jù)的利用效率都不是高。這時(shí)候該使用Protobuf了,因?yàn)镻rotobuf的優(yōu)勢(shì)是
效率高,同樣的一份數(shù)據(jù)使用protobuf存儲(chǔ)的時(shí)候更小,更加方便

安裝步驟如下:

一.安裝環(huán)境 

    1.打開終端
    2.查看你的mac上是否安裝了brew
      $ brew -v
      Homebrew 1.6.8
      Homebrew/homebrew-core (git revision d822; last commit 2018-06-12)
     這是表明已經(jīng)安裝,如果沒(méi)有安裝,使用下面的命令安裝下

   3.安裝brew (使用ruby安裝)
      $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/
   Homebrew/install/master/install)"

   4.下載依賴庫(kù)(工具)
       $ brew install automake
       $ brew install libtool

   5.下載Protobuf
       $ brew install protobuf

   6.克隆protobuf-objc,也就是說(shuō)吧代碼下載到本地
      $ cd desktop 我是clone到桌面,你們可以隨便放那
      $ git clone https://github.com/alexeyxo/protobuf-objc.git

    7.運(yùn)行腳本
        $  cd ~/protobuf-objc    切換到clone的目錄

        $  ./scripts/build.sh
     或者這樣
        $ ./autogen.sh
        $ ./configure
        $ make
        # 如果希望安裝protoc,執(zhí)行下面的命令
        $ make install

      編譯后報(bào)錯(cuò):In file included from objc_helpers.cc:27:./google/protobuf/
     objectivec-descriptor.pb.h:17:2: error: This file was generated by 
      an older version of protoc which is 
      #error This file was generated by an older version of protoc which is
      ^
      ./google/protobuf/objectivec-descriptor.pb.h:18:2: error: incompatible with your
      Protocol Buffer headers. Please
    #error incompatible with your Protocol Buffer headers. Please
      ^
     ./google/protobuf/objectivec-descriptor.pb.h:19:2: error: regenerate this file
     with a newer version of protoc.
   #error regenerate this file with a newer version of proton.
    ......
出現(xiàn)這樣的錯(cuò)誤,不要慌,這是google自己版本的問(wèn)題,我們不用管他,而且也不會(huì)像其他文章說(shuō)的那
樣,生成protoc-gen-objc這個(gè)插件,根本就不會(huì)生成,除非版本是2.6.0,這個(gè)問(wèn)題采用下面的方式
一樣能生成proto文件

二.生成后綴proto的文件
說(shuō)明: 創(chuàng)建 proto 文件指定數(shù)據(jù)格式,可以選擇proto2和proto3格式,它們有些細(xì)微的區(qū)別,在生成代碼的時(shí)候會(huì)提示的,具體情況查看文檔Language Guide proto3。下面使用proto3格式,并且保存為person.proto。

  1.  創(chuàng)建文件person.proto
      $  cd desktop  我還是切換到桌面
      $  touch person.proto
  2. 編輯person.proto文件
      2.1 使用終端編輯
           $ vi person.proto
              syntax = "proto3";
              message Person{
              string name = 1;
               int32 age = 20;
             enum DeviceType{
                      iOS = 0;
                     Android = 1;
                  }
              }
        2.2 放到xcode中直接寫(推薦)

三.轉(zhuǎn)化成objc文件

由于我們生成不了protoc-gen-objc,因此使用
protoc --plugin=/usr/local/bin/protoc-gen-objc  --objc_out=./ person.proto這種方式是不行的

我們使用 protoc 工具生成Objective-C代碼:
終端輸入: $ protoc --proto_path=A --objc_out=B person.proto

其中--proto_path=后跟A是需要處理的proto文件所在的文件夾,--objc_out=指明生成的是
Objective-C代碼以及目標(biāo)文件存放路徑,B是目標(biāo)文件存放路徑,person.proto是需要處理的文件。

這時(shí)候我們就生成了2個(gè)文件,如下圖


objc-proto文件

導(dǎo)入工程中,這兩個(gè)文件是采用的手動(dòng)引用計(jì)數(shù),因此在加入項(xiàng)目后需要設(shè)置它們的編譯參數(shù)。


設(shè)置

四.項(xiàng)目使用 (下載Protocol Buffers的源碼(下載地址),也可以到官網(wǎng)上下載)

 1.使用cocoapods方式導(dǎo)入
    pod  'Protobuf'  而不是   pod 'ProtocolBuffers',      
    使用 pod 'ProtocolBuffers'
    下載成功之后,編譯一看,結(jié)果報(bào)錯(cuò) 
    #import "GPBProtocolBuffers_RuntimeSupport.h"無(wú)法找到
報(bào)錯(cuò)
  原因是pods下來(lái)的是不帶GPB的,所以網(wǎng)上說(shuō)的不對(duì),應(yīng)該是用
pod 'Protobuf' ,這樣就沒(méi)有問(wèn)題
 
 2.靜態(tài)庫(kù)引入方式 
     1.下載Protocol Buffers的源代碼 
     2.工程里引入ProtocolBuffers_iOS.xcodeproj,或者編譯成靜態(tài)庫(kù).a方式,然后公開頭文件(如圖2)
     3.設(shè)置依賴和連接庫(kù)。(如圖3)
     4.引入頭文件(如圖4)
圖2
圖3

圖4

參考文章

https://my.oschina.net/kgdugyiy/blog/538333 安裝和使用
https://developers.google.com/protocol-buffers/ 語(yǔ)法方面
https://github.com/google/protobuf/blob/master/src/README.md 官網(wǎng)教程
至于如何使用,下期文章會(huì)詳細(xì)介紹,并提供demo,喜歡的,點(diǎn)下贊,謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考:http://www.itdecent.cn/p/8c6c009bc500 http://blog.csdn...
    F麥子閱讀 2,916評(píng)論 2 1
  • 因?yàn)閔ttps://blog.csdn.net/urdfmqcul2/article/details/787889...
    蘇大盒子閱讀 4,806評(píng)論 1 1
  • 歡迎訪問(wèn) Protocol Buffers ——一個(gè)用于通信協(xié)議、數(shù)據(jù)存儲(chǔ)及其它場(chǎng)景中,語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展...
    hanpfei閱讀 7,417評(píng)論 0 10
  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,213評(píng)論 3 119
  • 有些人無(wú)論你怎么努力,友情也好愛情也罷,你們終歸是普通朋友。這就是為什么要物以類聚,人以群分的意義所在。
    哥特鋒閱讀 195評(píng)論 0 0

友情鏈接更多精彩內(nèi)容