项目结构的设计(iOS篇)

本文附带源码:YoungHeart-Chapter-02.zip

在设计任何一个框架之前,都应规划好项目结构。

假定Git作为我们的项目管理工具。我们要建立两个仓库,一个用于存放我们的框架,另一个用于存放我们的项目,后者引用前者。

对于iOS而已,大部分开发者已经习惯于就一个project,所有的功能、页面都做在上面,倒也没错。然而我现在要做的是,要让我所设计的框架,脱离于项目而存在,这样,明天我也许会做另一个项目,但是所使用的框架确是同一个。

为此,iOS需要用到workspace的概念。它相当于.NET中的solution文件,在.NET中,我们可以在一个solution中添加多个project,同理,在iOS中,我们也可以在一个workspace中添加多个project。

搭建步骤如下:

1)新建一个空的workspace

选择 File -> New -> Workspace , 将 Workspace 命名为 YoungHeart。

2)创建框架的project,命名为MyLib。

3)在MyLib中实现几个方法,build一次。

4)创建项目的project,命名为MyApp

5)在MyApp中添加对MyLib的引用

先在Target中,选中Summary这个Tab,添加libMyLib.a的引用:

然后在Project中,选中Build Settings这个Tab,查找关键字Header Search Path,

在搜索到的结果中,选中Header Search Path,添加路径,记得选择recursive:

添加路径后效果如下所示:

最后,会发现,项目中,多了一个libMyLib.a,将其转移到Frameworks目录下:

6)在MyApp中使用MyLib的方法

在MyApp的ViewController.m文件中,首先添加对MyLib项目的引用:

#import "MyLib.h"

然后编写以下代码:

如果编译不出错,就说明添加引用成功了。否则,请检查1-4步。

同时,如果编译不出错,你会发现,在调试期间,你可以同时调试MyApp和MyLib两个项目里面的代码。而这非常重要。

最终截图如下:

如果以后对MyLib进行了修改,比如,我将add方法的实现修改为

,这时,MyApp是不知道的,仍然返回修改之前的结果(a1+a2)。这时,我们需要额外做一些事情,才能让MyApp知道MyLib的修改。步骤如下:

1)删除MyApp中对libMyLib的引用。

2)对修改过的MyLib项目,先Clean再Build。

3)在MyApp项目中重新添加对MyLib项目的引用。

也许你会觉得麻烦,但是框架一旦稳定下来之后,修改就不是那么频繁了,所以上述那么麻烦的事情不会经常去做。而且,一般而言,框架只会由一个人维护,所以只要他每次修改框架并相应更新项目后,发封邮件通知到家更新Git就好了。

 
 
分类: App开发

项目结构的设计(iOS篇)的更多相关文章

  1. 无线客户端框架设计(2):项目结构的设计(iOS篇)

    本文附带源码:YoungHeart-Chapter-02.zip 在设计任何一个框架之前,都应规划好项目结构. 假定Git作为我们的项目管理工具.我们要建立两个仓库,一个用于存放我们的框架,另一个用于 ...

  2. QQ聊天界面的布局和设计(IOS篇)-第一季

    我写的源文件整个工程会再第二季中发上来~,存在百度网盘, 感兴趣的童鞋, 可以关注我的博客更新,到时自己去下载~.喵~~~ QQChat Layout - 第一季 一.准备工作 1.将假数据messa ...

  3. QQ聊天界面的布局和设计(IOS篇)-第二季

    QQChat Layout - 第二季 本来第二季是快写好了, 也花了点功夫, 结果gitbook出了点问题, 给没掉了.有些细节可能会一带而过, 如有疑问, 相互交流进步~. 在第一季中我们完成了Q ...

  4. 【Django】Django项目结构与单元测试

    学校的软工项目要开发一个网站,自然的想到用python+Django来做.由于之前没有用Django开发过大型的网站项目,所以遇到了一些问题.记录在此,便于以后查阅. 今天完成了项目结构的设计.部分的 ...

  5. Django官方为什么没有标准项目结构

    Django官方并没有提供标准的项目结构,于是网上众说纷纭,百花齐放,一千个读者有一千个哈姆雷特.那我们该怎么设计项目结构呢?在回答这个问题之前,先了解一下Django原生的目录和文件都是干嘛的. p ...

  6. 调用MobileAPI的设计(iOS篇)

    调用MobileAPI的设计(iOS篇) 这一节讲如何发起网络请求. iOS用于调用MobileAPI的第三方组件很多,我们这里采用的是以下组件: 1)ASIHTTPRequest,用于请求Mobil ...

  7. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  8. Atitit 项目的主体设计与结构文档 v5

    Atitit 项目的主体设计与结构文档 v5 1. 版本历史说明2 2. 功能大概说明2 3. 实现的目标3 3.1. cross device跨设备(pc 手机 平板)3 3.2. cross sc ...

  9. Atitit 项目的主体设计与结构文档 v3

    Atitit 项目的主体设计与结构文档 v3 1. 实现的目标2 1.1. cross device跨设备(pc 手机 平板)作为规划2 1.2. 企业级Java体系与开发语言2 1.3. 高扩展性, ...

随机推荐

  1. java_OutOfMorryError 内存溢出(replaceAll)

    最近在使用string类中的replaceAll函数时碰到这个错误,由于string长度比较长,文本文档9M多,可以增加jvm的内存大小解决. 下面是一篇对OutOfMorryError错误的一些处理 ...

  2. HTML5多图片拖拽上传带进度条

    前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ...

  3. UVa 10533 - Digit Primes

    题目:输出给定区间中,本身是素数,而且这个数的各位之和也是素数的数(称为位素数)的个数. 分析:数论.首先利用筛法,求出1000000内的全部的素数:然后在利用生成的素数表, 推断每一个数是不是各位之 ...

  4. jquery 调用wcf 的SOA架构,将三层架构运用到SOA的架构中来(第四天)

    经过前面3天的学习,我想大家应该对SOA的架构有了初步的了解,其实 SOA与三层架构并不冲突,而是三层架构的升级版. 来看下传统的三层架构! 一共可以分为4个层: 模型层(可有可无),客户端,服务端, ...

  5. uptime命令具体解释——linux性能分析

    基本使用: uptime [-V] 实际分析: 这里因为命令比較简单,所以我们不进行具体地介绍.但越是简单的命令,就越是好用方便.像之前百度面试运维的时候,面试管问我哪个命令能够看得到系统负载.我立即 ...

  6. 【Java&Android开源库代码分析】のandroid-async-http の开盘

          在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正 ...

  7. Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法

    原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他 ...

  8. jQuery数字加减插件

    jQuery数字加减插件 我们在网上购物提交订单时,在网页上一般会有一个选择数量的控件,要求买家选择购买商品的件数,开发者会把该控件做成可以通过点击实现加减等微调操作,当然也可以直接输入数字件数.本文 ...

  9. 快速构建Windows 8风格应用4-FlipView数据控件

    原文:快速构建Windows 8风格应用4-FlipView数据控件 本篇博文主要介绍为什么使用FlipView控件.什么是FlipView控件.如何使用FlipView控件和FlipView控件最佳 ...

  10. POI操作Excel详细解释,HSSF和XSSF两种方式

    HSSF道路: package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundEx ...