ProtocolBuffers 1.9.11

ProtocolBuffers 1.9.11

测试测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布最后发布2016年7月

Alexey Khokhlov 维护。



  • 作者
  • Alexey Khokhlov

Objective-C 的 Protocol Buffers

这是一个在 Objective C 中实现的 Protocol Buffers。

Protocol Buffers 是一种在高效且可扩展的格式下编码结构化数据的方式。本项目基于 Google 的 Protocol Buffers 实现。有关更多信息,请参阅 Google protobuf 项目

此分支只包含库的 ARC 版本。

如何安装 Protobuf

构建 Objective-C Protobuf 编译器

  1. 检查您是否有 Homebrew brew -v
  2. 如果您还没有 Homebrew,那么安装它 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. 安装主要的 Protobuf 编译器和所需工具 brew install automake brew install libtool brew install protobuf
  4. (可选)为您创建一个指向您的 Protobuf 编译器的符号链接。 ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
  5. 克隆此仓库。 git clone https://github.com/alexeyxo/protobuf-objc.git
  6. 构建它! ./scripts/build.sh

作为子项目添加到您的项目中

...

  1. /src/runtime/ProtocolBuffers.xcodeproj 添加到您的项目中。

作为 CocoaPod 添加到您的项目中

...

  1. cd <您的 .xcodeproj 目录>

  2. echo -e "platform :ios , 6.0 \nlink_with '<YourAppTarget>', '<YourAppTarget_Test>' \npod 'ProtocolBuffers'" > Podfile

  3. pod install

编译 ".proto" 文件。

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

编译选项

protobuf-objc 编译器识别多个 obj-c 特定编译选项。这些被添加到您的 .proto 文件开头

    package dataexchange;

    import "objectivec-descriptor.proto";
    option (google.protobuf.objectivec_file_options).package = "DataExchange";
    option (google.protobuf.objectivec_file_options).class_prefix = "DE";
    option (google.protobuf.objectivec_file_options).relax_camel_case = true;
    .
    .
    .

选项

package

设置Objective-C包,这里将从该.proto文件中生成的类放置的位置。这通常在使用Objective-C库时使用,因为Objective-C库将所有头文件输出到单个目录中。例如:Foundation/* AddressBook/* UIKit/* 等。

class_prefix

可以在所有类的前面添加的字符串,以使它们看起来更像'Cocoa'样式。例如,为NextStep/AddressBook/CoreFoundation/ProtocolBuffer库分别使用'NS/AB/CF/PB'。这通常是上面定义的包目录中的大写字母。

relax_camel_case

值:true/false。

放松默认的严格驼峰命名法。

当设置此选项时,只强制 underscores 后的第一个字母大写。我添加这个功能是为了让生成的obj-c代码与我们自己内部的驼峰命名风格更接近。

示例

    enum Gender {
      GUnknown  = 0;
      GFemale   = 1;
      GMale     = 2;
      GOther    = 3;
    }

    enum PlatformType {
      PTUnknown   = 0;
      PTiOS       = 1;
      PTAndroid   = 2;
      PTWeb       = 3;
    }

常规输出

    typedef NS_ENUM(SInt32, HMGender) {
      HMGenderGunknown = 0,
      HMGenderGfemale = 1,
      HMGenderGmale = 2,
      HMGenderGother = 3,
    };

    typedef NS_ENUM(SInt32, HMPlatformType) {
      HMPlatformTypePtunknown = 0,
      HMPlatformTypePtiOs = 1,
      HMPlatformTypePtandroid = 2,
      HMPlatformTypePtweb = 3,
    };

放松的驼峰命名法

    typedef NS_ENUM(SInt32, HMGender) {
      HMGenderGUnknown = 0,
      HMGenderGFemale = 1,
      HMGenderGMale = 2,
      HMGenderGOther = 3,
    };

    typedef NS_ENUM(SInt32, HMPlatformType) {
      HMPlatformTypePTUnknown = 0,
      HMPlatformTypePTiOS = 1,
      HMPlatformTypePTAndroid = 2,
      HMPlatformTypePTWeb = 3,
    };

Protobuf 示例

网络

服务器端需要Ruby(2.0+)和Sinatra gem。

要在/Example/Web中启动 ruby sinatra.rb

如果你需要重新编译ruby proto模型,请安装ruby_protobuf gem并执行 'rprotoc person.proto'

iOS 示例

/Example/iOS/Proto.xcodeproj

项目包含protobuf示例和小的json对比。

赞助

维护者 - Alexey Khokhlov

Booyah Inc. - Jon Parise

Google Protocol Buffers, Objective C - Cyrus Najmabadi - Sergey Martynov

Google Protocol Buffers - Kenton Varda, Sanjay Ghemawat, Jeff Dean, 和其他人