iOS -- Protocol Buffers 应用于 iOS 的尝试

来源:互联网 发布:mac怎么看群相册 编辑:程序博客网 时间:2024/05/17 10:04

Protocol Buffers 应用于 iOS 的尝试

原文链接:http://www.cnblogs.com/araneidblog/archive/2012/05/06/2486688.html

      在应用ProtocolBuffers ,我首先尝试的是 protobuf-2.4.1版本,该版本支持C++,Java,Python,但参考一篇博文,据说以插件的方式可以实现proto文件到.h/.m文件的转换(博文地址:Protocol buffer for objective-c 环境配置),但是我没能成功,给出连接供有心人尝试。

      在超凡兄提点下我尝试了protobuf-2.2.0版本,这个用起来比较简单,参考超凡兄给的一片博文很快就把.h/.m文件生成了。(博文地址:Protocol Buffers for Objective-C)。(打开中断的命令-- cd /Applications/ProtocolBuffers-2.2.0-Source

     测试代码上面博文已经有了,用不着我赘述了。我在使用的时候遇到两个小问题:

1.服务器给我的.proto文件中 某些message中有 value 字段,这与 生成代码中set方法形参一样,会造成讨厌的警告;

2.服务器给我的.proto文件中 某些message中有 result 字段,这样会造成生成的oc 代码编译不通过,在该message对应_builder类中会报 set方法返回类型错误,应该为void*类型。

  针对这一问题,解决很简单,将.proto文件中对应字段改名就ok了(我是在该字段前加了字母'a')。

关于value很好理解;关于result我猜想是与保留字有关,就像property定义为new**报警告一样。

我用的是第二种http://www.cnblogs.com/uniy/archive/2011/12/21/2296405.html


配置过程中遇到的问题:

1.自己编写的.proto文件时每行前面不能有空格等字符  

2.给到的生成静态库的程序时mac版本的而且版本很低要改为当前版本  

3.代码中会报三项错误一个是结构体判断前面强转(int)剩下两处把协议注掉能编译成功  

4.静态库链接xcode时生成的静态库在~~debug文件夹在而不在 xcode搜索的debug-iphone~下,需要我们复制过去(不同的框架下生成的静态库种类不同amv7/amv7s/i386等,我们要的时i386的。关于这个问题查看另一篇博文) 

5.报错少一个文件Descriptor.pb.h/Descriptor.pb.m我在另一个Protocol buffer项目中找到添加到,主项目引用的Protocol buffer头文件classes中   

6.倒入静态库后编译出错(提示:Undefined symbols for architecture i386:"_OBJC_METACLASS_$_SenTestCase", referenced from:)库连接错误,更改Build Setting "Framework Search Paths"删除原来的接连目录改为$(SDKROOT)/Developer/Library/Frameworks和$(DEVELOPER_LIBRARY_DIR)/Frameworks--关于$(SDKROOT)是什么意思我会在另一篇博客里说明   

7.最后编译又出错是因为重复链接,一个程序中不能有两个main目录,我刚引用protobuf头文件时把整个文件全都引用进去(包括生成静态库的mac项目的main)把他删除就ok了 

8.到这里总算告一段落编译通过了,后面我会对用protobuf过程中学到的东西也写道我的博客中~~