GeekBand.iOS-xcode的工程管理

2016/4/11 posted in  iOS学习笔记  

从本周开始,课程进入到高级iOS开发,听了一周课,虽然对理论知识有一定的补充,但是仅仅存在于理论层面,可能由于接触代码量太小,也由于自己写的不多,所以对很多问题没有宏观的认识。所以先把知识进行归纳,具体的应用,先挖个坑!!!!(我会回来补的!!!)。

注:本文的工程管理指的是Xcode对自身的project的相关操作与架构,与公司中的多人协作等工程管理概念无关,请读者知悉。

Xcode的工程结构

Workspace

workspace(工作空间)从学习java转过来的同学一定不陌生。在Xcode中关于workSpace的理解也差不多,就是一个可以存放多个project的空间合集。
其作用是管理一组project,在同一个workspace中的project会有以下联系:

  • 这些项目将使用同一个位置
    • 保存项目状态
    • 保存构造出来的产品
    • 自动可以相互引用
  • Xcode自动为独立的项目提供Workspace
  • Workspace中的Project仍然可以独立打开

如果开发人数很多,且负责不同的部分和组件的话,可以用子Project的方式或者Workspace+多个Project的方式来分割功能和组件。由于project.pbxproj这个文件很容易发生冲突(比如新增文件,删除文件,改变Build Setting等都会改变这个文件),且很难合并冲突,那么采用多Project的方式可以降低project.pbxproj冲突的机会,而一些公用的代码或组件也可以放在一个Project中,然后其他Project来依赖这个公用的Project就可以搞定了。

Project

我们接触到的最多的就是Project,再次根据老师的建议,将其翻译为工程。其作用主要为:

  • 组织工程用到的文件
  • 管理构建目标Traget
  • 告诉Xcode当前构建和执行目标
    • 通过Scheme选择

Group vs. Floder Reference

Group是对Project中的文件进行分组,为了便于查找和管理
Floder Reference是对外部文件的一个引用,可以将其关联进入工程,但是文件本身不在工程中,需要额外添加入工程

Traget

Traget(目标),他主要是对Project最后生成的结果进行规划的一个概念,主要作用为:
- 定义如何构造一个产品(product)
- 指定用到的文件子集
- 定义依赖关系
- 提供构建过程的规则与参数

Traget与Project区别

project就是一个工程,一个project可以对应多个target,比如一个xxx游戏的project,有free版的target,收费版的,或者还有什么节日版,product就是target build出来的一个app。
建议参考:XCode工程中 Project 和 Targets区别

Scheme和Destination

  • Scheme 一组指令在指定Traget上完成特定的任务
  • Destination 告诉Xcode使用哪个设备或模拟器