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。没疑问的小伙伴给个爱心😀。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

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