? ? ? ? 由于公司需要做智能設(shè)備的項目,據(jù)說用的是socket+protobuf來進行相互交互!拔鹰,由于自己從來沒有做過這方面的東西,沒辦法贵涵!就硬著頭皮去研究列肢。
? ? ? ?關(guān)于protobuf的介紹,網(wǎng)上很多宾茂。
? ? ? ? 因為谷歌沒有為mac系統(tǒng)提供專用的系統(tǒng)的庫瓷马,雖然c++庫可以使用,但是個人覺得不是很方便跨晴。所以欧聘,使用編譯成oc能夠直接調(diào)用的。
配置protobuf需要HomeBrew工具或則是MacPort端盆。如沒有安裝怀骤,則需要配置HomeBrew工具或則是MacPort。
步驟1(環(huán)境配置前的準備工作):
? ? ? ? ?1:使用HomeBrew?
? ? ? ? ? ? ? brew install autoconf
? ? ? ? ? ? ? ?brew install automake
? ? ? ? ? ? ? ?brew install libtool
? ? ? ? 2:使用MacPort(使用了HomeBrew焕妙,請忽視這一步蒋伦。當然也可以執(zhí)行這一步)
? ? ? ? ? ? ? ?sudo port install autoconf automake libtool
步驟2(下載谷歌的protobuf庫):
? ? ? ? ? ?下載基于c++的protobuffer:protobuffer
步驟3(生成將.proto文件編譯成oc類的工具):
? ? ? ? ?1: cd到下載下來的文件的目錄(以下的步驟需要在vpn的情況下進行處理,如果沒有開通焚鹊,網(wǎng)上有解決方法)
? ? ? ? ? 例如cd/Users/macxu/Desktop/protobuf-master
? ? ? ? ? 2:輸入
? ? ? ? ? ?./autogen.sh
? ? ? ? ? ?3:輸入
? ? ? ? ? ?./configure
? ? ? ? ? ?4:輸入
? ? ? ? ? make
? ? ? ? ? # 如果希望安裝protoc痕届,執(zhí)行下面的命令 ?
? ? ? ? ? ?make install
? ? ? (最好生成編譯工具)
步驟4(工程中使用protobuf):
? ? 1:創(chuàng)建proto文件指定數(shù)據(jù)格式,可以選擇proto2和proto3格式末患,它們有些細微的區(qū)別研叫,在生成代碼的時候會提示的,具體情況查看文檔LanguageGuide proto3璧针。下面使用proto3格式嚷炉,并且保存為Person.proto。(請在windows環(huán)境下生成以下的文本陈莽,mac平臺下好像不能夠生成渤昌。編譯成oc的時候好像會報錯)
syntax = "proto3";
message ? Person {
? ? ? ? ? ?string name = 1;
? ? ? ? ? int32 uid = 2;
? ? ? ? ? string email = 3;
? ? ? ? ?enum PhoneType {
? ? ? ? ? ? ? ?MOBILE = 0;
? ? ? ? ? ? ? HOME = 1;
? ? ? ? ? ? ? WORK = 2;}
message PhoneNumber {
? ? ? ? ? ?string number = 1;
? ? ? ? ? ?PhoneType type = 2;}
repeated PhoneNumber phone = 4;}
2:使用protoc工具生成Objective-C代碼虽抄。其中--proto_path=后跟需要處理的proto文件所在的文件夾走搁,--objc_out=指明生成的是Objective-C代碼以及目標文件存放路徑独柑,最后是需要處理的文件。(objc_out表示生成oc下的文件)
protoc --proto_path=. --objc_out=. Person.proto
3:處理完成后私植,生成兩個文件忌栅,分別是Person.pbobjc.h和Person.pbobjc.m。這兩個文件是采用的手動引用計數(shù)曲稼,因此在加入項目后需要設(shè)置它們的編譯參數(shù)索绪。
-fno-objc-arc
4:為了方便管理,我們直接將Protocol Buffers中的iOS靜態(tài)庫項目引入進來
(ps:里面有可能會有mac下的工程贫悄,請手動刪除)(最好在新建的工程目錄下新建一個文件夾瑞驱,用來添加需要添加的工程例如protoTool文件夾)。
5:在工程下面添加靜態(tài)庫項目窄坦,
6:設(shè)置依賴和連接庫唤反。
7:記得設(shè)置Header Search Paths或者User Header Search Paths。將在本地所在的文件的上一層文件夾的路徑添加進來鸭津。
現(xiàn)在就可以和使用普通的oc類一樣使用Person.pbobjc.h彤侍。
8:具體的使用代碼:
Person *person = [[Person alloc] init];
person.name= @"Zhangsan";
person.email= @"diveinedu@qq.com";
person.uid=23;
NSData *data = [person data];
NSString*path = @"/Users/apple/Desktop/test.data";
[data writeToFile:path atomically:YES];
NSData *ldata = [NSData dataWithContentsOfFile:path];
Person *p = [Person parseFromData:ldata error:nil];
ps:添加原生的庫的時候有可能遇到問題的解決辦法:
1:以前沒有直接添加過帶靜態(tài)庫的項目。添加的時候直接將需要添加的項目拖進去是不對的逆趋,不對的盏阶,不對。應(yīng)該用add files來添加闻书。
2:添加header search時名斟,出現(xiàn)找不到路徑的問題。需要添加被添加工程所在路徑的上一層文件夾的路徑魄眉。