一、新建工程整体目录结构预览
我的项目一般的目录结构,见下图:
二、 独立的逻辑模块工程的建立
如上图,可以发现,在主工程XLLIMChat下,还有一个XLLDragCollection工程。XLLDragCollection工程实际上就是主工程里的一个功能模块。这里类似于模块化的思想,将一个独立的模块单独在一个工程中展现,方便其他项目直接使用。建立模块工程步骤如下:
- 新建一个Project,选择Cocoa Touch Static Library。
- 新建一个Project,选择Cocoa Touch Static Library。
- 设置模块工程主target下的Build Settings -> Code Signing Identity为Don’t Code Sign。
- 设置模块工程主target下的Build Settings -> Code Signing Identity为Don’t Code Sign。
-
Build Phases -> Copy Files下,清空Subpath,并删掉引入的.h文件。
-
Build Phases -> Copy Files下,清空Subpath,并删掉引入的.h文件。
- 关闭模块工程,打开主工程,将模块工程的.xcodeproj文件拖到指定位置。
- 设置工程依赖,如下图:
上面是为了在编译主工程的时候,同时编译模块工程。下面是为了引入模块工程类。
- 设置工程依赖,如下图:
- 设置头文件路径,如下图:
因为模块工程与主工程目录在同一级,所以使用../即可,并设置为recursive状态
- 设置头文件路径,如下图:
需要注意一点的是,模块工程要保持完全的独立,以上设置完成后,在主工程就可以使用模块工程的相关类了。
三、配置PCH文件路径
在目录结构图
的Macro里有一个Public目录,存放着项目全局的宏,常量,方法等。具体内容如下图:
PCH文件里实现了全局类的声明,方便项目中的其他类直接调用全局类、全局宏等。
项目主target -> Build Setting -> Prefix Header设置PCH文件路径。如下图是本工程的pch文件路径设置:
四、自定义Supporting Files目录
貌似是Xcode9.0之后,系统不生成Supporting Files目录了,对于强迫症患者来说,面对系统生成的一些文件如info.plist,还是想单独放在一个目录里。所以自己手动创建一个Supporting Files目录。
这里要注意的是,如果你自己创建目录的时候,有下面两种样式:
区别如下:
- 如果选用New Group without Folder系统并不会真的生成一个文件夹。
- 如果选用New Group系统会生成一个文件夹来存储此目录下的文件。此时需要重新设置info.plist文件的路径,因为info.plist文件路径默认直接是在主工程目录下的。设置方法如下图:
五、多target管理工程
项目开发中,我们一定会需要多个版本。如开发版本,测试版本等。之前一直都是使用很low的if else进行判断。这种方式很low,也很傻。因为到项目上线的时候,为了保险起见,还需要将这些代码删掉。这很可能会造成bug。使用多个target来处理这个问题才是正确的操作。步骤如下:
- 在主工程target下右键,选择Duplicate复制一个配置完全一样的target。
- 更改target名称
- 双击当前target至编辑模式,更改名称。
- Manager Schemes下找到对应target,双击至编辑模式,更改名称。
- 更改新target下的info.plist路径。
- 设置全局target宏
在新的target下 -> Build Setting -> Preprocessor Macros。双击进行编辑。
在两个target共用的同一份代码里,使用以下方式就可以区分是开发版本target还是上线版本的target了。
六、配置本地pod,实现简单组件化
如果你的独立模块比较大,而且使用到了一些三方库。这时候建议使用使用本地Pod进行管理。步骤如下:
-
将pod工程放在与主工程目录同级处。
- 配置podsepc文件
与远程pod不同的一点是,这里要额外设置一个
s.ios.deployment_target = "8.0"
。并且可以在此文件里设置对三方库的依赖。
为了方便修改podSpec文件,可以将此文件放入xcode中的一个without folder的Group中。
-
修改podfile文件,并update即可。
-
本地pod工程文件所在位置。
七、添加自动化打包脚本target
使用脚本语言,Xcode在编译的时候,就可以进行生成ipa包并上传至蒲公英了。极大地节省了项目开发时间。
- 新建一个Aggregate target
- 在新target下 -> Build Phases -> 添加一个Run Script。并将脚本复制到指定区域即可。
- 需要打包的时候,Sheme切换此target下,Command + B编译直接进行打包并上传。
- 打包脚本如下,此脚本参考朱锅锅的文章神气的iOS打包
#构建 .xcarchive文件
xcodebuild archive -workspace EUCSDK_Sample.xcworkspace -scheme EUCSDK_Sample -configuration Release -archivePath EUCSDK_Sample.xcarchive
#通过 .xcarchive文件导出.ipa包
xcodebuild -exportArchive -archivePath EUCSDK_Sample.xcarchive -exportPath EUCSDK_Sample.ipa -exportOptionsPlist ExportOptions.plist
#将 .ipa的包上传至蒲公英平台
curl -F "file=@EUCSDK_Sample.ipa/EUCSDK_Sample.ipa" \
-F "uKey=略(在你的蒲公英账号下获取)" \
-F "_api_key=略(在你的蒲公英账号下获取)" \
-F "updateDescription=更新内容" \
https://www.pgyer.com/apiv1/app/upload
八、总结
以上就是我总结的iOS项目基础工程的完美搭建。看完希望能够对你有所帮助。有疑问的小伙伴欢迎下方issue。没疑问的小伙伴给个爱心😀。