美文网首页
iOS将ProtocolBuffer集成为私有组件

iOS将ProtocolBuffer集成为私有组件

作者: 海浪萌物 | 来源:发表于2018-06-12 16:47 被阅读27次

    公司开始准备做组件化,而且之前网络传输使用的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集成为私有组件

          本文链接:https://www.haomeiwen.com/subject/afkreftx.html