上一篇:CocoaPods实现管理库、发布库、组件化
CocoaPods的官网
CocoaPods
CocoaPods组件化问题记录
代码修改之后运行不生效
1、代码修改之后运行不生效,需要shift+command+K进行clean之后重新编译才生效; 2、主工程的Podfile设置use_frameworks! 时,修改之后执行pod install、pod update并不能使更改后的代码生效; 3、主工程的Podfile注释掉use_frameworks! ,注释掉之后一定要记得执行pod install,这样才会编译出.a文件,下次修改文件之后编译可以让最新代码生效。 (如果不是注释掉use_frameworks! ,而是改成use_frameworks! :linkage => :static 或者use_frameworks! :linkage => :dynamic ,则编译结果是framework,代码修改之后重新编译运行不生效。)
调用其他模块方法
1、如果不使用”use_frameworks!“,则可以直接调用其他模块方法; 2、如果使用”use_frameworks!“,则必须在本模块的ModuleA.podspec中添加s.dependency 'ModuleB' 才能调用其他模块方法; 3、所以不管是否使用”use_frameworks!“,如果依赖其他模块,都要加上s.dependency,这样可以表明依赖关系。
新文件没有代码提示
新创建文件、在pch文件中import文件之后,都要执行pod install,才会有代码提示。
当LocalPods中的模块使用Swift
1、必须将主项目的podfile改成use_frameworks! :linkage => :static 。但是有时执行调用模块内方法会出现unrecognized selector,需要command+k清除之后重新编译。改成dynamic还是每次修改视图显示都要重新编译,否则不生效。 2、本地模块的xx.podspec文件中的s.public_header_files = 'Classes/Public/**/*.h' 这个参数设置好像只能用于.h文件,如果改成“‘Classes/Public/**/*’”导入了Public目录下.m或.swift文件会有问题。Swift文件能不能被模块外访问可以用open/public访问控制修饰,默认访问控制是internal只能模块内使用这些类,改成open可以被模块外继承重写,public可以被模块外使用。 3、在模块内部的OC文件里不能使用“#import “RCLiveModule(模块名)-Swift.h””,在主项目中可以,因为是use_frameworks!,如果去掉这句则变成模块内部可以使用而在主项目中不可以。而且那些需要被OC访问的类需要有一个父类,并且自定义方法要加上@objc才会自动生成OC方法。
其他问题记录
查看ruby版本
ruby -v 查看ruby版本为2.6.3,执行sudo gem install -n /usr/local/bin cocoapods -v 1.10.1 出错“ERROR: Failed to build gem native extension.”,下载1.9.3也是这个错误,下载1.7.2成功,所以可能是ruby版本太低。
查看CocoaPods所在目录
在“/Library/Ruby/Gems/(版本比如)2.6.0/gems/”可以查看下载的gem list,如cocoapods-1.7.2、cocoapods-trunk-1.3.1、concurrent-ruby-1.1.8目录。
use_frameworks!
1、use_frameworks!使用框架,默认是动态链接,到了cocoapods1.9之后可以指定动态链接(use_frameworks! :linkage => :dynamic)还是静态链接(use_frameworks! :linkage => :static)。 2、OC默认不使用use_frameworks!,Swift只能使用use_frameworks!。
|