对于刚入门的ios程序猿来说,掌握Xcode开发工具及程序项目是非常必要的,掌握这些基本的内容对于我们后期开发,调试也是很有帮助的。
首先,创建一个 Xcode 工程。
应用配置
点击项目的.xcodeproj文件即可查看项目配置信息。
进入配置文件之后,我们会看到编辑区域的左侧有两个大的分类:PROJECT 和 TARGETS。PROJECT 里面是整个工程的配置文件;而 TARGETS 里面 包含了这个工程中不同的可执行程序的配置文件,每个target都代表了一个编译执行的程序,这个程序可以是一个可以运行的App,可以是一个测试,可以是一个应用扩展,也可以是一个静态库或或者Framework。
PROJECT 配置
点击 PROJECT 下面的 Tasted 工程。
PROJECT 配置主要分为两个部分 info 和 Build Settings。而 Build Settings 通常是在每个 target 里面单独配置的,我们很少去改动整个工程的编译设置。所以在这里我们来主要介绍一下 info 的配置。Deployment Target:定义了我们这个工程在部署时使用的最低 iOS SDK 版本。
Configurations:定义了我们在编译的时候可以使用的配置。在创建工程的时候会有两个默认的配置:Debug 和 Release。在你运行你的应用时,Xcode会使用Debug配置来编译和签名你的应用,在你打包(Archive)你的应用时,Xcode 会使用 Release 配置来编译和签名你的应用。这个设置在 Tool bar scheme-> Manager schemes -> edit 里面配置的,你可以对它进行修改。
Localizations:定义了我们应用的本地化语言,默认是英语,你也可以添加简体中文,繁体中文,日语等语言。当在不同的地区时,系统会帮你使用用不用的语言文件。
TARGET 配置
TARGET 的配置里面由7个面板组成: General,Capabilities, Info,Resource Tags,Build Settings, Build Phases 和 Build Rules。
General:通用配置里面包括了一些应用基本信息的配置。这个里面着重介绍一下下面的着几个配置。
- version & build:从名字上来看就可以很清楚的区分这两个字段的不同:一个是当前的版本号,对应 Info.plist 里面的CFBundleShortVersionString 字段;另一个是你当前版本的编译次数,对应 Info.plist 里面的 CFBundleVersion 字段。
- Deployment Target:定义了我们这个应用允许在哪个 iOS SDK 版本以上才可以安装或升级。对于一个全新的应用,安装用户的
iOS 版本低于这个值,那么是不允许安装这个应用的;对于一个升级的应用,升级用户的 iOS
版本低于这个值,那么是不允许升级这个应用的,会提示需要升级你的 iOS 系统,但并不会影响到上个版本的使用。
Capabilities:这里面定义了很多应用附加功能的开关,如果你需要某些功能,那么就需要在这里把这些功能打开。具体这些功能都是什么,大家可以自行查看。
Info:这里面定义了我们应用里面用到的所有信息。
- Custom iOS Target Properties:从上图中我们可以看出,Custom iOS Target Properties就是 Info.plist 里面的内容。
- Document Types & Exported UTIs & Import UTIs:
这三个配置是:让其他app可以通过你的程序来打开某些类型的文件,或者你的app调用其他app来显示某些类型的文件用的。这个配置大部分的app都用不到。 - URL Types:我们的程序可以向系统注册自己的 URL Scheme,来使得另外一个App可以通过这个 URL Scheme来打开我们的应用,点击添加按钮可以添加一个URL Scheme。
Build Settings:这里面包括了我们在编译过程中会用到的所有配置。
首先,我们先要选择 All。如果不选择 All,有些编译选项是会被隐藏掉的。然后我们再来看下下面的两个箭头:你工程的每个 Configuration 都可以单独设置编译选项。右上角的搜索框有助于你快速的找到相应的配置。
- Code Signing Idenity:这个选项是用来告诉 Xcode,你编译的时候是用哪个证书来签名的。通常情况下,Debug可以选择 iOS Developer; Release 可以选择 iOS Distribution;
- Preprocessor Macros:可以这个里面定义一些预处理的宏。例如,Xcode 自动帮你在 Debug 里面定了一个宏DEBUG=1,这样就可以用这个宏来判断当前的App是不是Debug版本了。也可以用它来为你的内部版本增加一些测试功能。
- Search Path:可以用来指定你的工程可以在哪个目录下,搜索头文件、Framework或者库。
Build Phases:是应用管理源文件、资源和依赖的地方。主要分为下面的这四个部分:
- Target Dependencies:是用来管理你的 Target依赖的。在几年前,基本上都是使用它来做第三方工程依赖的。现在基本上都是使用 Cocoapods 来引导第三方的项目了。
- Compile Sources:是用来管理你这个应用里面需要编译的所有源文件的。所以,一个 Target里面并不一定要编译和使用左侧工程里面的所有源文件。
- Link Binary With Libraries:是用来管理二进制库和Framework的。
- Copy Bundle Resources:是用来设置你需要拷贝到 Main Bundle 里面的资源文件的,里面可能会包括storyboard,xib,图片文件,JS 文件,CSS 文件,其他的资源包 等等。
iOS项目分层
通常按照MVC的开发模式,我们把文件分到不同的 Group 里面。然后会把 AppDelegate、定义常量的文件或者一些全局性质的类/文件放到一个Group下面,可以叫做 App 或者 Global。然后我们可以把通用的 Category 或者 独立的功能组件放到一个单独的Group下面,可以叫做 extensions、libraries。最后,使用叫做resources的group来放置我们所有的资源文件。
这里借鉴网上比较流行的方式,将项目分为常用的四个模块:Main(主要)、Expand(扩展)、Resource(资源)、Vender(第三方)。
Main
此模块主要目的是为了存放项目的页面内容,比如MVC的内容,Base(基类)用于存放一些公共的内容,其它功能模块的提取,方便继承调用。
Expand(扩展)模块
此模块主要包含Const、Macros、Tool、NetWork、Category、DataBase等功能扩展模块;
Resource(资源)模块
资源模块主要包含三方面,Global(全局)、Image(图片)、Plist(配置文件)等。
Vender(第三方)模块
本模块主要用来管理第三方库等。
示例
文件说明:
Bms:这个文件夹下主要放的是与业务相关的文件;
Application:这个文件夹下主要放的是UI相关的文件、业务控制层相关的文件、数据模型、业务逻辑相关的文件等;
BaseServer:这个文件夹下主要放的是 UI 业务逻辑相关文件和业务数据逻辑相关的文件;
Controllers:这个文件夹下主要放的是业务相关控制类,例如:UIViewcontroller;
Dtabase:这个文件夹下主要放的是数据库相关的业务文件;
Models: 这个文件夹下主要放的是业务数据实体(数据模型);
View:这个文件夹下主要放的是UI窗口组件和UI 公共组件;
Config:这个文件夹下主要放的是一些自定义的配置文件,例如:宏定义文件、自定义 .plist文件、.pch文件等;
Helpers:这个文件夹下主要放的是一些辅助业务相关的辅助文件;
IM:这个文件夹下主要放的是即时聊天相关的业务文件;
Core:这个文件夹下主要放的是一些核心代码,比如一些三方包,工具类,底层代码等;
Database:这个文件夹下主要放的是一些数据库底层核心代码;
IM:这个文件夹下主要放的是即时聊天模块的核心代码;
Libs:这个文件夹下主要放的是三方包文件,例如:FMDB 三方包;
Network:这个文件下主要放的是与服务器交互的核心文件,例如:Https、Socket、Webserver等;
Utils:这个文件夹下主要放的是一些系统常用的工具类,例如:获取时间工具类,文件大小等;
Supporting Files :这个文件夹下主要放的是系统生成的文件,比如:AppDelegate文件、info.plist文件和 main.m文件;
Resource:这个文件夹下主要放的是一些资源文件,比如:图片文件、音频文件等;
Frameworks: 这个文件夹下主要是将用到系统的 Frameworks,整理到这个文件夹下,比如:AVFoundation.framework
Products:这个文件夹是系统自己生成的,主要放的是 .app文件。