Protobuf 小記錄

搜索了很多資料,看了很多相關(guān)博客,終于還是踏過一個個大坑(相關(guān)方法都試過),實現(xiàn)相關(guān)功能。本文章親試可行,轉(zhuǎn)載請注明出處:
Protocol Buffer是google 的一種數(shù)據(jù)交換的格式,已經(jīng)在Github開源,目前最新版本是3.1.0。它獨立于語言,獨立于平臺。google 提供了多種語言的實現(xiàn):Java、C#、C++、Go 和 Python,Objective-C,每一種實現(xiàn)都包含了相應(yīng)語言的編譯器以及庫文件。由于它是一種二進(jìn)制的格式,比使用 XML 進(jìn)行數(shù)據(jù)交換快許多??梢园阉糜诜植际綉?yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。作為一種效率和兼容性都很優(yōu)秀的二進(jìn)制數(shù)據(jù)傳輸格式,可以用于諸如網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲等諸多領(lǐng)域。

mac相關(guān)配置

生成protoc,一步步跟隨操作即可

  • 首先確保你已經(jīng)安裝brew
  • brew install automake
  • brew install libtool
  • brew install autoconf
  • 下載面向Objective-C的protobuf庫,地址為(https://github.com/google/protobuf/releases),要下載對應(yīng)Objective-C的版本比如 protobuf-objectivec-3.5.1.zip,解壓
    FFB72176-1D4A-440C-8652-46B8CEA7AEB5.png

下面準(zhǔn)備生成protoc

  • cd到該文件夾下面,例如:cd /Users/***/Desktop/protobuf-3.5.1
  • ./autogen.sh
  • ./configure
  • make
  • make check
  • sudo make install

然后通過protoc --version查看,如果現(xiàn)實如下,則表示成功


AB9FD41C-943C-4524-8307-F02B9DE3F1EE.png

查看安裝好的查看安裝好的protoc可以通過 open /usr/local/bin 看到protoc以及open /usr/local/include 看到google文件夾

XCode相關(guān)配置

網(wǎng)上介紹大多是通過cocoaPods導(dǎo)入第三方庫的形式將protobuf加入項目,但實測Podfile 里面pod 'ProtocolBuffers’(這個不行)。最終還是采用了手動導(dǎo)入的方式;

  • 進(jìn)入mac相關(guān)配置中下載解壓的包中

  • 找到如圖文件夾,


    ![![C5BB6817-0502-4486-AE65-819E9901AE8F.png](http://upload-images.jianshu.io/upload_images/1400066-003df2349c085e2e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/1400066-462ac64102a05327.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 將其中g(shù)oogl文件夾和除開(GPBProtocolBuffers.m)的所有.h 和.m文件拷貝到項目第三方庫的文件夾下面:如圖


    DA4F8D26-4182-472C-882B-77CE2B96A6B6.png
  • 開始編譯(一堆錯誤,但是很容易解決),一是非ARC在ARC下編譯錯誤(在build phase 相關(guān)文件后面添加-fno-objc-arc,基本導(dǎo)入的文件全部添加),二是google文件夾下相關(guān)頭文件尋址錯誤,添加路徑即可;此外還需添加頭文件搜索路徑如圖:


    C5BB6817-0502-4486-AE65-819E9901AE8F.png

使用說明

使用主要有三點

  • 一是建造model對應(yīng)的創(chuàng)建的proto文件,
  syntax = "proto3";
  message YLmessage
 { 
    int32 text = 1;
    string receiveName = 2;
    string phone = 3;
  }
  • 二是將proto文件轉(zhuǎn)換成OC能用的文件

    生成proto的oc文件  protoc --proto_path=/Users/*****/Desktop/protoTest --objc_out=/Users/****/Desktop/OCProtobuf  /Users/******/Desktop/protoTest/message.proto
    
    
    其中--proto_path=/Users/****/Desktop/protoTest 為proto文件存放的文件夾
--objc_out=/Users/****/Desktop/OCProtobuf為生成OC文件存放的文件夾
/Users/****/Desktop/protoTest/message.proto為要轉(zhuǎn)換的proto文件

  • 三是使用,將生成的.h和.m文件加入項目
    // 序列化
        YLmessage * pmessage = [YLmessage new];
    pmessage.text = message;
    // 序列化為Data
    NSData *data = [pmessage data];
    NSLog(@"%@",data);
    [_webSocket send: data];
    
    
    // 反序列化
    
    - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
    
    if (_delegate && [_delegate respondsToSelector:@selector(receiveMessage:)])            
    {
        NSError *error;
         YLmessage * pmessage  = [[YLmessage alloc] initWithData:message error:&error];
        NSLog(@"%@",pmessage.description); 
        [_delegate receiveMessage: pmessage.text];
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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