今天開始做項目中的即時聊天模塊,客戶端用到了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
/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
的所有文件均會被安裝到預定義目錄下
$ brew create https://foo.com/bar-1.0.tgz
Created /usr/local/Library/Formula/bar.rb
5、
$ brew edit wget
# 使用 $EDITOR 編輯!
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添加下面這個句子
pod ProtocolBuffers,~> 1.9.7
在保存之後,到終端,cd到工程裏面,
等一會,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