项目结构的设计(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. 【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!

    原文:[百度地图API]如何进行地址解析与反地址解析?--模糊地址能搜索到精确地理信息! 摘要: 什么是地址解析? 什么是反地址解析? 如何运用地址解析,和反地址解析? 可以同时运用地址解析,和反地址 ...

  2. 【百度地图API】暑假放假回老家——城市切换功能

    原文:[百度地图API]暑假放假回老家--城市切换功能 任务描述: 酸奶小妹放寒假啦,要从北京呼啦一下飞回重庆呢.现在百度地图API上不能直接切换城市,怎么办呢? 如何实现: 利用API先搜索到要去城 ...

  3. ExtJs--15--Ext.is*各种类型推断的方法,简单看源代码就能够明确了

    /** * Returns true if the passed value is empty, false otherwise. The value is deemed to be empty if ...

  4. c#-Artificial Intelligence Class

    NET Artificial Intelligence Class http://www.codeproject.com/KB/recipes/aforge_neuro/neuro_src.zip

  5. Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)

    D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. 快速构建Windows 8风格应用14-ShareContract概述及原理

    原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...

  7. JS基础——事件绑定

    上一篇博客JS事件对象中,老师问JS事件处理和VB中的事件处理有什么联系?先来解决一下这个问题.举个VB.net中事件处理的样例(JS敲久了,VB习惯的都不熟悉了,看来得常常回想了): 1.事件处理V ...

  8. 使用Prism提供的类实现WPF MVVM点餐Demo

    使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...

  9. 安装WindowsXP操作系统(安装版) - 初学者系列 - 学习者系列文章

    本文主要介绍下Windows XP操作系统的安装. 1.             将光驱装入光驱.启动电脑,在开始界面按下DEL键,进入BIOS设置界面.将光驱设置为第一启动项.下面以虚拟机为例子. ...

  10. 删除sql server中重复的数据

    原文:删除sql server中重复的数据 with list_numbers as( select Name, AuthorOrTime, Url, Price, EstimatePrice, Si ...