这是一个在 Objective C 中实现的 Protocol Buffers。
Protocol Buffers 是一种在高效且可扩展的格式下编码结构化数据的方式。本项目基于 Google 的 Protocol Buffers 实现。有关更多信息,请参阅 Google protobuf 项目。
此分支只包含库的 ARC 版本。
brew -v
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install automake
brew install libtool
brew install protobuf
ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
git clone https://github.com/alexeyxo/protobuf-objc.git
./scripts/build.sh
...
/src/runtime/ProtocolBuffers.xcodeproj
添加到您的项目中。...
cd <您的 .xcodeproj 目录>
echo -e "platform :ios , 6.0 \nlink_with '<YourAppTarget>', '<YourAppTarget_Test>' \npod 'ProtocolBuffers'" > Podfile
pod install
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,
};
服务器端需要Ruby(2.0+)和Sinatra gem。
要在/Example/Web中启动 ruby sinatra.rb
如果你需要重新编译ruby proto模型,请安装ruby_protobuf gem并执行 'rprotoc person.proto'
/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, 和其他人