前文已经介绍了模块化的流程及一些常见的问题,咱们在这里再次总结一下。git
在工做中,当咱们开始一个新项目的时候,最早考虑的就是模块化工做。github
模块化工做的想法是很美好的,但是执行过程当中会遇到不少的问题,而这些问题可能会让咱们在工做中举步维艰。shell
工具使用问题。iOS的模块化通常会使用cocoapods工具,这个工具很强大,内容也很丰富,咱们想要完成模块化工做,须要创建私有库,编写podspec文件,处理资源,编写Podfile文件,创建本地依赖等等。让团队成员每一个人都精通这个工具是没必要要的。所以常常会在使用工具中遇到不易解决的问题,从而浪费大量的时间。swift
xcode设置问题。xcode设置项多如牛毛,不少内容看起来并不直观,须要咱们去查阅官方文档来解决。并且这些设置数量多,使用的频率又少,因此不免会出现这样的状况:每一个人都遇到的问题,而后各自去花时间解决,而后过段时间遇到相同的问题经常就忘记了,还要花时间去查阅解决,形成资源的重复浪费。xcode
模块间依赖的问题,当你依赖的也是私有库的其余模块(下文中称为自有模块)
时,开发中可能要同时修改多个模块,这样就会出如今多个工程中切换的问题。bash
规范问题,每一个人创建模块的方式可能都不一样,包括工程结构,工程设置等等。这样一来,不一样的模块可能差别特别大,当跨模块开发或者代码交接的时候,可能就会出现难以解决的问题。服务器
设置的变动修改都是手动修改,有时候不免会由于疏忽,而致使难以发现的错误,当须要处理的模块和依赖较多时,发生错误的几率也会增长。app
为了解决这些问题,让团队可以将精力所有集中到业务开发中,特使用bash shell开发一个构建工具,用于自动化处理模块化的过程当中遇到的设置及工具使用问题。模块化
工具的地址以下:github.com/hardman/AWM…工具
使用这个自动化工具你将会得到以下能力:
所以,使用这个自动化工具,你不须要了解cocoapods工具,也不须要处理任何工程和工具设置,能够将注意力都集中到业务开发中。
【注】工具使用静态库做为模块的输出文件。
tools/config
修改配置文件
git@
开头。这个git库用于保存全部自有模块名称及地址。git@
开头。这个git库就是你的私有库地址。pod repos
,通常状况下保持默认便可,支持多行,每行保存一个地址./create.sh -n=[模块名] -b=[bundle id] -t=[s|f|r]
便可建立工程
工程根目录/modules
。./create.sh -n=HelloWorld -b=com.helloworld -t=s
./push.sh [模块名] [tag]
./push.sh HelloWorld 0.0.1
./pull.sh [模块名]
便可下载其余未同步到本地的自有模块
./pull.sh HelloWorld
有的时候,当前模块所依赖的模块版本升级了,须要修改当前模块的依赖文件。 有2种方法:
dependency.txt
文件,文件内记录了当前模块依赖的自有模块
。dependency.txt
文件记录模块版本的格式是:每行一个模块;格式为:模块名@@版本号
,版本号支持~>
前缀,不可带空格模块名.podspec
文件podspec
文件要求的格式去修改版本号./utils.sh [模块名] upgradedependency [依赖的模块名] [版本号]
./utils.sh LoginModule upgradedependency AFNetworking 3.5.0
./utils.sh LoginModule upgradedependency AFNetworking
#import "模块名/模块名-Swift.h"
。#import "TestOC.h"
。xcode - build phases - [模块名].h
文件必须在public区域(.xcassets, .xib, .png, .jpg, .jpeg, .gif, .txt, .plist, .bundle, .zip, .car)
都是放到: "模块名.bundle"
文件中的,而这个bundle在main bundle
的根目录(这也是要求模块名防止重名的缘由之一)UIImage.init(named: name, in: bundle, compatibleWith: nil)
方法UIImage.init(named:String)
这种方法,即便是在模块工程内部的代码也不行./utils.sh [模块名] upgradedependency [依赖的模块名] [版本号]
命令修改模块所依赖的模块的版本号--完--