美文网首页iOS开发iOS开发iOS开发
iOS项目工程的完美搭建

iOS项目工程的完美搭建

作者: CoderXLL | 来源:发表于2018-04-09 17:09 被阅读1322次

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

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


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

    相关文章

      网友评论

      • 箫冰尘:厉害了,赞赞赞!
      • 追梦3000:写的不错,建议增加一下ios打包到appstore的脚本
        CoderXLL:是有这样的脚本,但是我个人还是不建议这样的。真正上线的时候最好还是老老实实地手动构建版本
      • 丶纳凉:完美肯定不完美的。过个半年你再来看,完美中的完美搭建~再过半年……:smile:
        CoderXLL:@丶纳凉 嗯嗯,这样才说明是有进步的
      • LV大树:666
        CoderXLL:@FiredPeter 共同进步
      • ZHANGMIAO_:第2步的Build Settings -> Code Signing Identity为Don’t Code Sign。和第3步的清空Subpath,并删掉引入的.h文件。

        想问下这样设置的意思是什么呢 谢谢
        ZHANGMIAO_:@CoderXLL 明白了 谢谢
        CoderXLL:这个之前是我做AppCan原生插件开发的时候,他们的官方文档里写的。http://newdocx.appcan.cn/newdocx/docx?type=1712_1291。 code sign设置的原因我觉得是为了只设置主工程的code sign,保证能够正确的真机运行起来吧。copy Files清空子路径我认为是为了依赖之后不会重新copy一份新的文件到主工程里。

      本文标题:iOS项目工程的完美搭建

      本文链接:https://www.haomeiwen.com/subject/mdzbhftx.html