iOS将ProtocolBuffer集成为私有组件

公司开始准备做组件化,而且之前网络传输使用的ProtocolBuffer格式,如果用组件化的话就必须将ProtocolBuffer库制作成私有组件,但是目前集成ProtocolBuffer是没有通过cocoapods集成,所以现在通过cocoapods将ProtocolBuffer集成成私有组件。

一、创建私有组件工程BMCHttpClient
二、在podspec文件里添加依赖库

s.dependency 'Protobuf'

三、由于创建的pb文件都是mrc的,所以要将pb生成的类设置为mrc模式,在podspec里面添加

s.requires_arc = true
non_arc_files = 'BMCHttpClient/Classes/pbobject/*.{h,m}'

s.exclude_files = non_arc_files
s.subspec 'no-arc' do |sp|
sp.source_files = non_arc_files
sp.requires_arc = false
end

其中pbobject 文件夹里面的内容都是mrc模式下的文件
四、编译时候protobuf里面的GPBWellKnownTypes.h可能会报找不到google/protobuf/Any.pbobjc.h,可以手动将GPBWellKnownTypes.h里面的GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 值改为1,确定时候选择unclock即可。

中间遇到了Redefinition of 'GPBWellKnownTypesErrorCode'的报错,按经验Redifinition of错误是重复定义问题,只要删除重复的文件即可。但是切换到项目所在文件夹,始终无法找到同名类文件,以至于一筹莫展。考虑到报错的文件是集成的Protobuf第三方库文件,于是通过cocoapods的pod install先修改Podfile然后pod install重新添加第三方库来修复,但是始终无法解决问题。后来安静下来仔细对比编译报错前后的改动,发现先后引用的两个头文件中,第二个头文件已经引用了第一个,恍然大悟。其中第一个头文件是Protobuf库的文件,导致了循环引用,然后报错,删掉一个就是

你可能感兴趣的:(iOS将ProtocolBuffer集成为私有组件)