iOS组件化之subspec子组件分文件夹

3,817 阅读3分钟

问题 :   我们自己做的pod库,我们所有的文件都在一个目录下,默认都在classes文件下.这样就不太好找文件,比如:我们写了一个组件,肯定有ViewController ,View,Model文件夹,如果不分类,所有的文件全部在一起 ,会造成混乱.难以维护.

解决方案 : 我们使用subspec分文件夹相当于子库,一个文件相当于一个子库 ,可以通过pod来加入到工程中,如果通过subspec分了很多子库,那么当我们pod一个需要的库时候,会把所有的子库都加入进去的,如果我们并不需要所有,那么可以pod子库,这样就增加了灵活性.

1.例子 _这是AFNetworking分文件夹的样子

2.我们就来做一个一样东西.这里我直接就用我前面建好的pod库,不知道的可以看我上一个文章.

 2.1先在本地项目中把文件建出来

 2.2 建完文件pod install 就可以在调试demo中看到文件路径.

3.subspec文件写法

    1.source_files使用的物理路径,dependency使用的时候层级路径(如上图) 

source_files路径解释:

  "TJYNetWork/*"  表示匹配所有TJYNetWork目录下文件,不包含子目录的
  "TJYNetWork/NetWork/NSURLSession/*.{h,m}"  表示匹配NSURLSession所有以.h和.m结尾的文件 

   "TJYNetWork/**/*"  表示匹配所有文件(主目录和子目录,其中**相当于省略中间层级) 

提示:   

         1. 提如果在A文件夹里面引用到了B文件夹里面的类,记得要依赖一下,如果A文件夹里面引用到了B文件夹里面的类,B文件夹里面引导到了A文件夹里面的类,就建一个公用的.h文件(公用文件可以放在主sepc中,路径如上),引入两个类.否则会造成互相引用,造成推送远端索引库会验证不过.

4. 执行

     pod repo push TJYNetWork TJYNetWork.podspec --allow-warnings

5.接下来我们可以

pod 'TJYNetWork'

也可以pod子模块

pod 'TJYNetWork/NSURLSession'

最后 在工程中pod 'TJYNetWork'  就会看到如下:

(如遇报错可以查看下面验证参数,可能会解决问题)

podspec验证相关参数的作用:

Options:

--allow-warnings : 忽略警告,即可以允许有警告也可以通过验证
--use-libraries: 使用静态库安装规范,当包含依赖的第三方或自定义的静态库需要添加此规范
--use-modular-headers: 如果是OC和swift 的混编需要加上
--sources=https://cdn.cocoapods.org/: 指定索引库的源,多个源必须用逗号分隔
--local-only: 不执行将回购推到其远程服务器的步骤
--no-private: 包括仅适用于公共回购的检查
--skip-import-validation: 跳过验证pod是否可以导入
--skip-tests: 在验证期间跳过构建和运行测试
--commit-message="Fix bug in pod": 添加自定义提交消息。如果没有指定提交消息,则打开默认编辑器
--use-json: 在将其推送到repo之前,将podspec转换为JSON
--swift-version=VERSION: 在标记规范时应该使用的SWIFT_VERSION。这优先于规范中指定的Swift版本或. Swift版本文件
--no-overwrite: 不允许将覆盖现有规范的推送

1.过程中报错,具体问题也不太清楚.

解决使用 

pod lib lint xxxxx --allow-warnings --verbose --skip-import-validation(验证)

pod repo push TJYNetWork TJYNetWork.podspec --allow-warnings --verbose --skip-import-validation(跳过验证pod,直接推送)