公司最近在推动组件私有库的工作, 自己在尝试把组件推到远端私有库时,遇到了几个问题。
1 s.homepage 和 s.source
自己在写demo时,索引库和组件代码库用的都是github,地址比较接近。在XXX.podspec文件中,s.homepage 和 s.source对应的链接,很容易弄错。
s.homepage 和 s.source对应的链接指的是你的组件代码库的地址。不要写成索引库的地址。
2 组件推送到远端之后,通过pod的方式加载了组件,发现文件目录并非是自己想要的目录结构。
我期望的目录结构:
Manual changes.png
实际的目录结构:
Don't expect.png
我手动在Classes文件夹下创建了两个文件夹:Category和Downloader
将文件放在对应的文件夹下。
但是,pod进项目之后,发现Classes文件下并没有我手动创建的两个文件夹。所有的代码文件被统一放到了Classes文件下。
但是我发现AFN等一些三方,却可以把代码源文件文件按照功能来分块。
后面我查找了一些资料,发现了subspec这个东西。
因为我只是手动在 Classes文件下创建了子文件夹,并没修改XXX.podspec中的source_files。而s.source_files = 'XXX/Classes/*/' 指定了Classes目录为代码源文件的目录地址,系统会将Classes及其子目录下所有的文件统一放到Classes下,不展示手动创建的子目录。
这里需要更改XXX.podspec中的代码。
注释原来的s.source_files,按照Classes中子目录的文件结构,在XXX.podspec中,写上对应的subspec代码。
# s.source_files = 'XXX/Classes/**/*'
s.subspec 'Category' do |category|
category.source_files = 'XXX/Classes/Category/**/*'
category.dependency 'AFNetworking'
end
s.subspec 'Downloader' do |dowmloader|
dowmloader.source_files = 'XXX/Classes/Downloader/**/*'
dowmloader.dependency 'YYModel'
end
重新cd到example中pod install. 更新版本号并将组件推到远程私有库中。
此时,再通过pod的方式加载组件,就会得到想要的目录结构。
victory.png
还可以通过修改podfile中的代码,来指定加载XXX组件的子组件。
pod 'XXX/Category' 或 pod 'XXX/Downloader'
效果图如下:
subspecs.png
网友评论