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