# cocoapods-jxedt cocoapods-jxedt提供组件二进制链接的功能,你不需要更改podspec源文件,只需要在Podfile文件中配置好use_binary的标识,执行`pod install`的时候就会帮你完成二进制链接的工作。 使用cocoapods-jxedt理论上来说可以使你的pods工程编译时间减少到秒级,取决于你怎样配置二进制文件。 ## Installation ### 使用已发布的插件 $ gem install cocoapods-jxedt ### 本地编译插件安装 $ rake build $ sudo rake install ## Usage 打开Podfile文件,在合适的位置添加 ``` plugin 'cocoapods-jxedt' all_binary! binary_dir('../_Prebuild') ``` 或 ``` plugin 'cocoapods-jxedt' options = { 'all_binary': true, # 全部开启bianry,默认false 'binary_dir': '../_Prebuild', # binary编译的最终路径,默认为'../_Prebuild' 'binary_switch': true, # 二进制开关,设置为关则不hook pre_install过程,默认开 'prebuild_job': true, #开启预编译任务,默认开启 'excluded_pods': ['WIMPhotoBrowser', 'JXFavoriteLib'], # 排除binary的组件 'framework_header_search_enabled': true, # 是否开启binary的header search path功能,默认不开启 'configurations': ['Release', 'Debug'], # 支持的configurations,默认只编译Release 'xcframework': false, # 编译结果是否为xcframework,默认false 'dev_pods_enabled': false, # 开发中的pod是否支持binary,默认false 'simulator_build_enabled': false, # 是否编译模拟器,默认不支持 'clean_build': false, # build的时候是否clean,默认不clean 'build_args': { # 编译的配置 'default':["ONLY_ACTIVE_ARCH=NO", "BUILD_LIBRARY_FOR_DISTRIBUTION=YES"], 'device':["ARCHS='arm64'"], # "ARCHS='arm64 armv7 armv7s'" 'simulator':["ARCHS='x86_64'"] # "ARCHS='arm64 x86_64 i386' } } cocoapods_jxedt_config(options) ``` 如果只需要某个组件实现二进制的链接,你可以 ``` pod 'PodA', :binary => true # 明确的指定某个pod组件支持binary pod 'PodB', :framework_header_search => false # 明确指出某个pod不支持配置framework的`HEADER_SEARCH_PATH` ``` ## 原理 ... 待完善 ## TODO - [x] 支持从已有framework文件完成源码和二进制切换 - [x] 解决依赖的组件被打成framework,头文件依赖的问题 - [x] 解决源码和二进制切换的问题,现有binary插件均不支持 - [x] 支持不同环境(Debug、Release)编译时链接不同环境的framework - [x] 记录组件的hash(git提交)值,用户校验二进制的源码组件的版本。这个值在podfile.lock文件中 - [x] 两次install去校验checksum值,确保源码和二进制是对应版本,checksum值校验通过才支持binary - [x] 添加是否从header_search_path中查找framework的header(为了兼容"" <> 这种方式引用头文件的问题) - [x] 插件支持编译为framework - [x] prebuild流程添加到pod的install流程中,形成闭环,使用二进制的时候,发现没有对应的二进制文件,那么可以预编译 - [x] 添加`pod jxedt options`命令,输出配置文件详细介绍 - [ ] 添加`pod jxedt binary`命令,支持命令行打包framework - [ ] 支持配置git地址做编译结果缓存 - [ ] 支持缓存的fetch和push - [ ] 支持多线程下载 ## 已知问题 1. 不支持framework中有xib文件,如果pod仓库中有xib文件且不在bundle中,需要设置:binary=>false 2. 不支持多个target依赖同一个pod时,target的platform版本不一致的情况 3. 不支持同一个pod,多个target且使用了不同的subspec 4. framework_header_search_enabled不支持使用`#if __has_include()`方式设置的组件,如果有会出现重复定义的错误。如YYImage、YYWebImage等 ## 感谢 感谢[cocoapods-binary](https://github.com/leavez/cocoapods-binary)和[cocoapods-binary-cache](https://github.com/grab/cocoapods-binary-cache)的作者,因为看了他们的源码之后受到了启发。