开发常见问题整理

CocoaPods

  • 制作OC与swift混编的pod库时注意事项
    如果pod库是以静态库的形式加入到OC工程中,OC工程必须包含一个bridge文件和一个.swift文件,否则会有一堆swift库找不到的链接错误。还需要在OC工程的podfile里 使用use_modular_headers! 指令

  • 如果希望在Pod库的入口头文件中包含左右的子pod的头文件(这个在swift与OC混编过程中至关重要),比如Pod库名称为FYIM,则入口头文件为FYIM.h,需要进行如下配置:

    s.subspec 'Core' do |cs|
    cs.source_files = 'FYIM/Classes/Core/**/*.{h,m}'
    cs.prefix_header_file = 'FYIM/Classes/Core/PrefixHeader.pch'
    cs.exclude_files = 'FYIM/Classes/UI/**/*.{h,m,swift}'
    cs.private_header_files = [
    'FYIM/Classes/Core/Private/**/*.h'
    ]
    end
    s.subspec 'UI' do |cs|
    cs.ios.frameworks = 'UIKit', 'Photos'
    cs.source_files = 'FYIM/Classes/UI/**/*.{h,m,swift}'
    cs.resource_bundles = {
    'FYIMUI' => ['FYIM/Assets/UI/**/*.{xcassets}']
    }
    cs.public_header_files = [
    'FYIM/Classes/UI/Public/**/*.h'
    ]
    cs.dependency 'MJRefresh'
    cs.dependency 'YYText', '~> 1.0.7'
    cs.dependency 'FYIM/Core'
    end

    并在FYIM.h中以下面的方式引入头文件

    #import <FYIM/FYIMConfiguration.h>
    #import <FYIM/XXXXX.h>
    // UI (子pod为UI)
    #if __has_include(<FYIM/FYIMUI.h>)
    #import <FYIM/FYIMUI.h>
    #endif
  • 包装三方framework时,找不到module的情况,需要在三方framework中手动创建Module/module.modulemap

Swift

  • 如果想让OC中的支持(或)类型的枚举在swift中使用,需要通过NS_OPTIONS进行声明,如:

    typedef NS_OPTIONS(NSUInteger,FYImagePickerMediaType) 
    {
    FYImagePickerMediaTypeImage = 1 << 0,
    FYImagePickerMediaTypeVideo = 1 << 1
    };

    这样声明可以在swift中以OptionSet类型去处理。

  • 条件编译

#if targetEnvironment(simulator)
#else
RPSDK.initialize(.online)
#endif
You Might Also Like
发表评论