Skip to content

Files

Latest commit

 

History

History
161 lines (93 loc) · 10.2 KB

02.2.md

File metadata and controls

161 lines (93 loc) · 10.2 KB

#2.2 应用配置和项目结构

上一节我们介绍了如果创建一个 Xcode 工程,那么在这节里面我们将介绍:

  1. 如何配置我们的工程
  2. 什么样子的项目结构有利于提高我们的开发效率,使代码管理起来更加的方便快捷。

应用配置

首先工程和应用配置的入口在下图箭头的位置,点击之后我们就可以进入工程的配置文件。

image

进入配置文件之后,我们会看到编辑区域的左侧有两个大的分类:PROJECTTARGETSPROJECT 里面是整个工程的配置文件;而 TARGETS 里面 包含了这个工程中不同的可执行程序的配置文件,每个target都代表了一个编译执行的程序,这个程序可以是一个可以运行的App,可以是一个测试,可以是一个应用扩展,也可以是一个静态库或或者Framework。

那么我们来分别看下 PROJECTTARGETS的配置:

PROJECT 配置

我们先点击 PROJECT 下面的 Tasted 工程,就会出现下图:

image

PROJECT 配置主要分为两个部分 infoBuild Settings。而 Build Settings 通常是在每个 target 里面单独配置的,我们很少去改动整个工程的编译设置。所以在这里我们来主要介绍一下 info 的配置。

Deployment Target:定义了我们这个工程在部署时使用的最低 iOS SDK 版本。

TIPS: 这个配置是应用在工程上面的,对于每个 Target 也会有一个相应的配置的,所以关于这个配置的说明我们会放到后面 target 中再详细说明。

Configurations:定义了我们在编译的时候可以使用的配置。在创建工程的时候会有两个默认的配置:DebugRelease。在你运行你的应用时,Xcode会使用Debug配置来编译和签名你的应用,在你打包(Archive)你的应用时,Xcode 会使用 Release 配置来编译和签名你的应用。这个设置实在 Tool bar scheme-> Manager schemes -> edit 里面配置的,你可以对它进行修改。

image

当然了你也可以点击 Configurations 下面的 + 来创建其他的配置。比如可以建立一个在发布inhous版本的时候使用的配置等。

Localizations:定义了我们应用的本地化语言,默认是英语,你也可以添加简体中文,繁体中文,日语等语言。当在不同的地区时,系统会帮你使用用不用的语言文件。

PROJECT 配置大致需要我们关注的就是这些内容,下面我们来看下 TARGETS 配置。

====

TARGET 配置

image

TARGET 的配置配置,主要分为5大部分 General Capabilities Info Build Settings Build PhasesBuild Rules。下面我们来介绍一些常用的配置:

General:通用配置里面包括了一些应用基本信息的配置。这个里面着重介绍一下下面的着几个配置。

  • version & build:从名字上来看就可以很清楚的区分这两个字段的不同:一个是当前的版本号,对应 Info.plist 里面的 CFBundleShortVersionString 字段;另一个是你当前版本的编译次数,对应 Info.plist 里面的 CFBundleVersion 字段。

    当然了,如果你的编译管理没有这么严格,那么可以用下面的形式:version:1.0.0 build:10000。

    TIPS:最好不要把 versionbuild 都写成一样的,这样做在统计和版本判断上可能会出现不必要的麻烦。

  • Deployment Target:定义了我们这个应用允许在哪个 iOS SDK 版本以上才可以安装或升级。对于一个全新的应用,安装用户的 iOS 版本低于这个值,那么是不允许安装这个应用的;对于一个升级的应用,升级用户的 iOS 版本低于这个值,那么是不允许升级这个应用的,会提示需要升级你的 iOS 系统,但并不会影响到上个版本的使用。

    TIPS:建议全新应用和升级应用兼容最新和上一个版本的SDK(例如:现在Apple 发布了最新的iOS 8 版本,那么你可以把这个只调整为 7.0);对体验要求比较高的应用可以只兼容最新版本的SDK;对于一个在做成熟产品移动化的新应用,可以再往下兼容一个版本,但总的兼容SDK的数量不要超过三个。因为每兼容一个版本的SDK,工作量会大大加大,而且收益会越来越低。

Capabilities:这里面定义了很多应用附加功能的开关,如果你需要某些功能,那么就需要在这里把这些功能打开。具体这些功能都是什么,如何使用,我们会在之后单独开一个专题来说一说。

image

Info:这里面定义了我们应用里面用到的所有信息。

image

  • Custom iOS Target Properties:从上图中我们可以看出,Custom iOS Target Properties 就是 Info.plist 里面的内容。在这个里面,我们可以更改:Bundle name(iOS 桌面上显示的名字);Bundle identifier 等...

    TIPS:如果你需要动态改变 status bar的颜色和状态的话,就需要添加 View controller-based status bar appearance字段,并设置为 NO

  • Document Types & Exported UTIs & Import UTIs: 这三个配置是:让其他app可以通过你的程序来打开某些类型的文件,或者你的app调用其他app来显示某些类型的文件用的。这个配置大部分的app都用不到。所以这里就不做详细的介绍了。

  • URL Types:我们的程序可以向系统注册自己的 URL Scheme,来使得另外一个App可以通过这个 URL Scheme 来打开我们的应用。例如我们添加了一个 URL Scheme

    image

    这样,其他的程序就可以通过 tasted:// 来打开我们的应用了。

    TIPS:如果你的 URL Scheme 跟其他的App重复了,那么会调用谁,就听天由命了。所以,最好不要使用一样的 URL Scheme,可以通过加前缀的方式来避免。

Build Settings:这里面包括了我们在编译过程中会用到的所有配置。

image

如上图所示:

首先,我们先要选择 All。如果不选择 All,有些编译选项是会被隐藏掉的。然后我们再来看下下面的两个箭头:你工程的每个 Configuration 都可以单独设置编译选项。右上角的搜索框有助于你快速的找到相应的配置。

下面我们就来看看,几个我们常用的编译配置:

  • Code Signing Idenity:这个选项是用来告诉 Xcode,你编译的时候是用哪个证书来签名的。通常情况下,Debug 可以选择 iOS Developer; Release 可以选择 iOS Distribution;

  • Preprocessor Macros:可以这个里面定义一些预处理的宏。例如,Xcode 自动帮你在 Debug 里面定了一个宏 DEBUG=1,这样就可以用这个宏来判断当前的App是不是Debug版本了。也可以用它来为你的内部版本增加一些测试功能。

  • Search Path:可以用来指定你的工程可以在哪个目录下,搜索头文件、Framework或者库。

    TIPS:建议使用Cocoapods来管理你的依赖库,这样 Search Path 基本上就不用自己设置了。

Build Phases:是应用管理源文件、资源和依赖的地方。主要分为下面的这四个部分:

image

  • Target Dependencies:是用来管理你的 Target 依赖的。在几年前,基本上都是使用它来做第三方工程依赖的。现在基本上都是使用 Cocoapods 来引导第三方的项目了。

  • Compile Sources:是用来管理你这个应用里面需要编译的所有源文件的。所以,一个 Target 里面并不一定要编译和使用左侧工程里面的所有源文件。

  • Link Binary With Libraries:是用来管理二进制库和Framework的。

  • Copy Bundle Resources:是用来设置你需要拷贝到 Main Bundle 里面的资源文件的,里面可能会包括 storyboard,xib,图片文件,JS 文件,CSS 文件,其他的资源包 等等。

  • Run Script:可以你的应用启动运行时,运行一些脚本。但这个有啥用捏。。。

    1. 在 N 前年是这样用的
    2. 现在最经常使用的就是 Crashlytics 会让你的应用在启动之前往它的Server上发送一些东西。

好了,关于应用配置,我们乱七八糟的说了很多。大部分都是我们经常会用到的;还有很多是基本上不会用到的,但是出问题会有坑的。如果大家遇到了坑,可以提 issues。我会尽可能的帮大家解决。

那么下面我们就来看下,关于项目结构我们应该注意些什么:

##项目结构

通常我们会按照 MVC 的形式来把我们的文件分到不同的 Group 里面。

然后会把 AppDelegate、定义常量的文件或者一些全局性质的类/文件放到一个Group下下面,可以叫做 App 或者 Global 或者其他的你觉得不错的名字。

然后我们可以把通用的 Category 或者 独立的功能组件放到一个单独的Group下面,可以叫做 extensionslibraries 或者其他你觉得不错的名字。

最后,我们可以见一个叫做resources的group来放置我们所有的资源文件。

这样我们就大致把我们的文件都放到了合适的地方了,我们的项目结构大致就会变成下面的样子:

image

TIPS:

  1. 对于每一个 Group 最好都要在文件系统上有对应的文件夹,这样会让你的工程不管在Xcode里面还是在文件系统里面看起来都是一样的。对别人在git上面看你的工程是非常友好的。

  2. 不要使用过深的目录结构。从你的工程目录开始算,一般不要超过3层,这样会方便的代码的查找和阅读。

  3. 当你的工程很庞大的时候,再好的项目结构也很难帮助你做快速的文件定位了。这时你就需要 command + shift + o快捷键来帮助你快速定位文件、类或者方法了。

##Links