专栏首页向治洪ios入门之项目结构介绍

ios入门之项目结构介绍

对于刚入门的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 字段。
TIPS:当然了,如果你的编译管理没有这么严格,那么可以用下面的形式:version:1.0.0 build:10000。最好不要把 version 和 build 都写成一样的,这样做在统计和版本判断上可能会出现不必要的麻烦。
  • Deployment Target:定义了我们这个应用允许在哪个 iOS SDK 版本以上才可以安装或升级。对于一个全新的应用,安装用户的 iOS 版本低于这个值,那么是不允许安装这个应用的;对于一个升级的应用,升级用户的 iOS 版本低于这个值,那么是不允许升级这个应用的,会提示需要升级你的 iOS 系统,但并不会影响到上个版本的使用。
TIPS:建议全新应用和升级应用兼容最新和上一个版本的SDK(例如:现在Apple 发布了最新的iOS 8 版本,那么你可以把这个只调整为 7.0);对体验要求比较高的应用可以只兼容最新版本的SDK;对于一个在做成熟产品移动化的新应用,可以再往下兼容一个版本,但总的兼容SDK的数量不要超过三个。因为每兼容一个版本的SDK,工作量会大大加大,而且收益会越来越低。

Capabilities:这里面定义了很多应用附加功能的开关,如果你需要某些功能,那么就需要在这里把这些功能打开。具体这些功能都是什么,大家可以自行查看。

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

  • Custom iOS Target Properties:从上图中我们可以看出,Custom iOS Target Properties就是 Info.plist 里面的内容。
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。

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文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 仿美团下拉

    git 下载地址:https://github.com/nugongshou110/MeiTuanRefreshListView ? 实现原理: 美团的下拉刷新...

    xiangzhihong
  • node.js基本工作原理及流程

    概述 Node.js是什么 Node 是一个服务器端 JavaScript 解释器,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动,...

    xiangzhihong
  • android混淆和反编译

    混淆 Android Studio: 只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,...

    xiangzhihong
  • Linux笔记(1)| 常用命令

    从今天开始将会陆续更新一些有关Linux的笔记,从arm裸机到uboot的移植、Linux应用编程和网络编程再到Linux驱动开发。同时也会夹杂更新stm32对...

    飞哥
  • 一日一技:超级简单搭建更加稳定安全的文件分享服务器

    在公众号以前的文章里面,我们提到,如果想简单的分享一下文件,我们可以使用一行 Python 命令:

    青南
  • 如何让matlab心甘情愿地做你的文件搬运工

    小编:由于后台服务器故障,要到10月32号才能恢复正常,大家耐心等等!咱们先来看matlab有哪些与文件操作相关的函数表吧!

    艾木樨
  • 国标GB28181摄像头直播视频流媒体服务器获取视频流失败问题分析

    国标28181协议全称为GB/T28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是由公安部科技信息化局提出,由全国安全防范报警系统标准化技术...

    EasyNVR
  • Mac必备软件

    原文见Mac必备软件 - yongle 。Mac上有很多优秀的软件,可以极大地提升效率和工作体验。

    用户2183996
  • 迷你图工具汇总~

    自小魔方的公众号开通以来,陆陆续续、啰里啰嗦的分享了很多技巧,但是一直觉得很杂乱,缺乏体系,所以以后有必要定期对各系列分享内容进行阶段性总结。 最近一个系列一直...

    数据小磨坊
  • 加权无向图----Kruskal算法实现最小生成树

    SuperHeroes

扫码关注云+社区

领取腾讯云代金券