iOS项目工程的完美搭建

一、新建工程整体目录结构预览

我的项目一般的目录结构,见下图:


1.项目工程基本目录结构

二、 独立的逻辑模块工程的建立

如上图,可以发现,在主工程XLLIMChat下,还有一个XLLDragCollection工程。XLLDragCollection工程实际上就是主工程里的一个功能模块。这里类似于模块化的思想,将一个独立的模块单独在一个工程中展现,方便其他项目直接使用。建立模块工程步骤如下:

    1. 新建一个Project,选择Cocoa Touch Static Library
      2.新建模块工程
    1. 设置模块工程主target下的Build Settings -> Code Signing IdentityDon’t Code Sign
      3.设置code signing
    1. Build Phases -> Copy Files下,清空Subpath,并删掉引入的.h文件。
      4.设置copy Files
    1. 关闭模块工程,打开主工程,将模块工程的.xcodeproj文件拖到指定位置。
    1. 设置工程依赖,如下图:
      上面是为了在编译主工程的时候,同时编译模块工程。下面是为了引入模块工程类。
      5.添加工程之间的依赖
    1. 设置头文件路径,如下图:
      因为模块工程与主工程目录在同一级,所以使用../即可,并设置为recursive状态
      6.设置模块工程头文件路径

需要注意一点的是,模块工程要保持完全的独立,以上设置完成后,在主工程就可以使用模块工程的相关类了。

三、配置PCH文件路径

目录结构图的Macro里有一个Public目录,存放着项目全局的宏,常量,方法等。具体内容如下图:

7.全局类目录

PCH文件里实现了全局类的声明,方便项目中的其他类直接调用全局类、全局宏等。
项目主target -> Build Setting -> Prefix Header设置PCH文件路径。如下图是本工程的pch文件路径设置:
8.设置pch文件路径

四、自定义Supporting Files目录

貌似是Xcode9.0之后,系统不生成Supporting Files目录了,对于强迫症患者来说,面对系统生成的一些文件如info.plist,还是想单独放在一个目录里。所以自己手动创建一个Supporting Files目录。
这里要注意的是,如果你自己创建目录的时候,有下面两种样式:

9.创建目录的两种样式

区别如下:

  1. 如果选用New Group without Folder系统并不会真的生成一个文件夹。
  2. 如果选用New Group系统会生成一个文件夹来存储此目录下的文件。此时需要重新设置info.plist文件的路径,因为info.plist文件路径默认直接是在主工程目录下的。设置方法如下图:
    10.重新设置info.plist文件路径

五、多target管理工程

项目开发中,我们一定会需要多个版本。如开发版本,测试版本等。之前一直都是使用很low的if else进行判断。这种方式很low,也很傻。因为到项目上线的时候,为了保险起见,还需要将这些代码删掉。这很可能会造成bug。使用多个target来处理这个问题才是正确的操作。步骤如下:

  • 在主工程target下右键,选择Duplicate复制一个配置完全一样的target。
    11.复制主target
  • 更改target名称
  1. 双击当前target至编辑模式,更改名称。
  2. Manager Schemes下找到对应target,双击至编辑模式,更改名称。
  3. 更改新target下的info.plist路径。
  • 设置全局target宏
    在新的target下 -> Build Setting -> Preprocessor Macros。双击进行编辑。
    12.修改工程配置文件

    在两个target共用的同一份代码里,使用以下方式就可以区分是开发版本target还是上线版本的target了。
    13.不同target的代码区分

六、配置本地pod,实现简单组件化

如果你的独立模块比较大,而且使用到了一些三方库。这时候建议使用使用本地Pod进行管理。步骤如下:

  • 将pod工程放在与主工程目录同级处。


    14.放置pod工程
  • 配置podsepc文件
    与远程pod不同的一点是,这里要额外设置一个
    s.ios.deployment_target = "8.0"。并且可以在此文件里设置对三方库的依赖。
    为了方便修改podSpec文件,可以将此文件放入xcode中的一个without folderGroup中。
    15.podspec文件所在位置
  • 修改podfile文件,并update即可。


    16.修改podfile
  • 本地pod工程文件所在位置。


    17.本地pod工程文件位置

七、添加自动化打包脚本target

使用脚本语言,Xcode在编译的时候,就可以进行生成ipa包并上传至蒲公英了。极大地节省了项目开发时间。

  • 新建一个Aggregate target
    18.Aggregate target
  • 在新target下 -> Build Phases -> 添加一个Run Script。并将脚本复制到指定区域即可。
    19.添加打包脚本
  • 需要打包的时候,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。没疑问的小伙伴给个爱心😀。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 22,527评论 0 39
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,314评论 30 472
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,355评论 19 139
  • 秀发于飞,玉指轻拨弄。眉眼迷离,顾盼回眸间。男人看到这场景,心中难免突突嗒嗒的流口水。 所以很多电影会把这极美的一...
    董小小鸟阅读 1,105评论 0 0
  • 只要有群体地方就应该有领导,这个领导要么是领导一些底层人员,要么是领导一些高智商的群体。这段时间,我一直在思考这...
    戴老师成长记录仪阅读 3,911评论 1 3