IOS 使用protobuf

今天開始做項目中的即時聊天模塊,客戶端用到了protobuf就從gitHub上下載了protobuf-objc,readme文旦中安裝brew的命令報400錯誤,然後我就到Home-brew官網看了一下並使用裏面的命令安裝

1、打開終端,寫入命令並執行:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2、如果提示缺少套件執行

$ brew install wget
3、Homebrew 會將套件安裝到獨立目錄,並將文件軟鏈接至 /usr/local
$ cd /usr/local
$ find Cellar
Cellar/wget/1.16.1
Cellar/wget/1.16.1/bin/wget
Cellar/wget/1.16.1/share/man/man1/wget.1

$ ls -l bin
bin/wget -> ../Cellar/wget/1.16.1/bin/wget
的所有文件均會被安裝到預定義目錄下

4、輕鬆創建您的 Homebrew 程式。
$ brew create https://foo.com/bar-1.0.tgz
Created /usr/local/Library/Formula/bar.rb
5、

$ brew edit wget # 使用 $EDITOR 編輯!

6、

Homebrew 的程式都是簡單的 Ruby 腳本:

class Wget < Formula
  homepage "https://www.gnu.org/software/wget/"
  url "https://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz"
  sha256 "52126be8cf1bddd7536886e74c053ad7d0ed2aa89b4b630f76785bac21695fcd"

  def install
    system "./configure", "--prefix=#{prefix}"
    system "make", "install"
  end
end

7、從github上下載protobuf-objc-master下載鏈接解壓。

    依次執行 

brew -v

brew install automake
brew install libtool
brew install protobuf

8、在終端cd到這個解壓好的文件夾下,如圖在終端中打cd 然後用鼠標將文件夾拖入終端即可得到路徑



9、cd ./scripts裏面,ls命令可以看到build.sh等文件

10、執行$ ./build.sh
報錯:+ ./autogen.sh
./build.sh: line 5: ./autogen.sh: No such file or directory,發現下載下來的文件夾裏面有autogen.sh文件但在上一層目錄,所以講autogen.sh文件移到scripts文件夾中重新執行

11、遇到新錯:autoreconf: 'configure.ac' or 'configure.in' is required,找到configure.ac文件將其放入script文件夾;

12、no 'Makefile.am' found for any configure output
autoreconf: automake failed with exit status: 1找到Makefile.am文件將其放入script文件夾;

13、Makefile.am:5: error: required directory ./src/compiler does not exist,將整個src文件夾拖到scripts。

14、接着執行$ ./build.sh

看到好多以YES結尾的logo最後提示:

make[2]: Nothing to be done for `all-am'.
+ make install
Making install in src/compiler
 ../.././install-sh -c -d '/usr/local/bin'
  /bin/sh ../../libtool   --mode=install /usr/bin/install -c protoc-gen-objc '/usr/local/bin'
libtool: install: /usr/bin/install -c protoc-gen-objc /usr/local/bin/protoc-gen-objc
make[2]: Nothing to be done for `install-data-am'.
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.

a.這句提示是說明你已經編譯好了,而且沒有對代碼進行任何改動。

若想重新編譯,可以先刪除以前編譯產生的目標文件:
make clean
然後再
make
 
b.出現這種情況解決方法:

a.make clean 清除安裝時留下的文件
b.在運行一下ldconfig

(參考文章:http://www.cnblogs.com/Arlen/articles/1756636.html)


參考文章:http://www.2cto.com/kf/201503/382440.html


15、找到ProtocolBuffers.xcodeproj文件拖入自己的文件夾

16、


17、配置header路徑,將class路徑直接拉入路徑添加(或者這個工程先拷貝到自己的工程目錄下然後再做這個操作,這樣自己的工程文件夾歸檔的時候方便一點)


配置Framework:Build Phases->Target dependencies-> 添加



18、當然也可以用cocoaPods也可以,方便管理,不過我項目用的svn用cocoaPods好像不太方便就放棄了。

在Podfile添加下面這個句子


platform : ios , 7.0

pod ProtocolBuffers,~> 1.9.7

在保存之後,到終端,cd到工程裏面,

pod install

等一會,cocoapod就會幫我們添加好,以後我們就應該打開 project的workspace,因爲添加了pod作爲子工程。


20、終點

在你的工程裏面,新建一個文件夾,命名假如叫Protobuf 在這個文件夾裏面新建一個proto文件。例如要在本地儲存用戶信息,那麼就新建一個user.proto 裏面內容可以如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package csdnblog;
 
message PBUser {
 
required string userId =1;                      // 用戶ID
optional string nick =2;                        // 用戶暱稱
optional string avatar =3;                      // 用戶頭像
 
optional string password =7;
optional string email =8;
optional string mobile =9;                      // 手機號碼
optional string qqOpenId =10;                   // QQ ID
optional string sinaId =11;                     // SINA UserID
optional string weixinId =12;                   // WeChat UserID
}

上面這個例子包括了幾個要素。 一個是包名。包的概念在object c裏面沒有,java裏面有,c++裏面namespace也是差不多意思。 順便提一下,oc裏面一般在庫名前面添加兩個字母,起的作用差不多就是包的作用,作爲類的上一層組織結構。 例如官方的NS,例如AFNetworking這種第三方類庫的AF。
回到正題。編寫pb文件,第二個要素是message 一個message就是一個整體,裏面有哪些必要的內容,哪些可選的內容。詳細的proto語法隨便一找一大把,就不囉嗦了。
寫好了proto,接下來就是編譯這個proto文件,protobuf-objc這個類庫會編譯聲稱一些源碼,是讀寫proto數據的接口API。 編譯命令如下: 先打開工程,建議單獨新建一個文件夾作爲輸出路徑,例如工程下新建文件夾Gen,用來放generate出來的.pb.h文件&&.pb.m文件 打開終端 cd

到工程路徑下


protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out=./Gen




參考文章:iOS中從零開始使用protobuf

發佈了33 篇原創文章 · 獲贊 30 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章