唐彬琪
可能很多大牛都见过FaceBook的three20框架的源码,但是不知道大家有没有对它里面的工程之间的相互引用,相互调用产生过一些兴趣和疑问,如下图:

由于目前公司正在做一个类似three20的app框架,我的两位ios大牛使出自己的各种绝技、大招,现在终于做出了一个初期的版本,我因为经验略显骨干,所以没怎么瞎掺和,但就耳濡目染也学到了很多东西,我就把自己学到这个关于项目之前联调,以及在项目中编辑新的framework的东西,总结并分享给大家。
我还是以问题的方式来解答吧,顺序是时间顺序
一,如何将两个项目整合到一个项目下(图1)
可能你试过直接在一个项目里面直接把另一个项目拖进来,也试过add File..这些东西,但是最终可能还是没能完成,那么,到底要怎么做呢?
首先,在进入到你当前项目的路径下,把需要添加的工程/framework手动拷贝到这个目录。
第二步,在Xcode上面打开当前项目,在侧边栏点击最左下角的“+”按钮,选择Add Files to “”命令,弹出框,选择要加进来的工程/framework的工程文件添加,如图2

完成!这时,已经能够看到要添加的东西已经在我们的项目目录下了(图1)。
添加完成之后,我们试着改动一下新加入的项目的内容,比如把它代码改出点问题,比如下图

本来正常情况下,第12行会报错,可是现在没有,说明新加入的项目还没有和当前项目产生关联。
二,如何让新加入的项目和当然项目产生关联呢?
如图4打开当前项目的Build Phases,再打开该界面下的Link Binary With Libraries,把新添加的项目的Products文件夹下的“.a”或者”.app”文件拖到Link Binary With Libraries当中,然后编译。

这时,之前我们在图3所示位置添加的非法的代码就会报错了,这时,就说明我们新加入的项目已经和当前项目产生了关联。

当我们和新加入的项目产生了关联之后,我们可能想去调用或者使用里面的累或者方法,首先我们把新加入项目的一个头文件“TestFrameworks.h”引入当前项目的AppDelegate当中,这时我们又看到了报错!编译器说他没有发现这个头文件在哪里!?<!--EndFragment-->

可是我们不是已经产生关联了吗?原来,还不仅仅如此,我们还需要添加引入头文件的路径(path);
三,如何让当前项目在引用加入项目的头文件是不报错?
我们需要这样做:
打开当前项目的Build Settings,修改它的Header Seach Path ,如图7

Header Seach Path 里面的路径应该为新加入项目的Products文件夹下,“.a”或者“.app”文件的路径下的,include文件夹里面的文件夹的路径下,如图8


添加完成后,再编译,发现之前的报错已经默默的消失了。
到这里,我要说的东西已经完成了90%,所以,我还有一些东西要说。
往往,在我们完成上面这些步骤之后,我们可能还会在新加入的项目中添加新的文件,来实现一些新的功能,或者结构上的更改,这时我们还会碰到之前的错我,提示我们,有一些文件找不到,无法引入,而这些文件,都是我们刚刚添加的。
Header
Link Path都已经修改到相应路径下,为什么还会有这样的错误呢?这给原因我也不能解释,但是我知道怎么去解决。
选择编译新加入的项目(真机模式),如图10:

在新加入项目的Build Phases下,打开Copy
Files 点击相应的左下角的“+”号,在弹出框里面输入“.h”,这时就会看到所有未加入到include文件的头文件,然后选择添加。如图11

这样新加入的文件的头文件也就正常引入到项目了,我们在新加入的类TestFramework设置断点,然后运行,发现确实已经被引用,如同12


- 大小: 194.4 KB

- 大小: 263.4 KB

- 大小: 269.1 KB

- 大小: 272.4 KB

- 大小: 245.3 KB

- 大小: 220 KB

- 大小: 349.4 KB

- 大小: 158.7 KB

- 大小: 290.3 KB

- 大小: 289.1 KB

- 大小: 203.4 KB

- 大小: 226.9 KB
分享到:
相关推荐
在iOS开发中,网络请求是应用与服务器交互的重要环节。为了进行有效的后台联调测试,开发者经常需要模拟各种网络环境,比如重定向、错误状态码等。标题中的“ios网络重定向,用于模拟后台联调测试”正是针对这一需求...
使用这个压缩包,开发者可以直接在Xcode中配置对应的iOS 16开发环境,进行真机调试,从而高效地完成应用的适配工作。 总的来说,通过Xcode的真机调试包,开发者可以快速地为iOS 16做好准备,确保应用在新系统上的...
通信工程联调方案是针对XX至XX通信系统改造与新建项目的详细规划,旨在确保通信设备的安装、调试与开通能够高效、稳定地进行。本工程涉及XX、XX、XX车站及XX通信站、调度所等多个站点的设备升级,涵盖了光缆敷设、...
通信工程联调方案是通信工程项目中的关键环节,它涉及到整个通信系统的集成与测试,确保所有设备和系统的功能正常,能够协同工作。以下是基于提供的文件内容的详细解释: 1. **工程概况** - 该工程主要包括XX至XX...
在设计和监理方面,分别由XXXXXXX和XXXXXXX两家单位负责,保证了工程的专业性和规范性。 接着,针对系统调试内容,本文档逐一列举了多项关键领域的调试步骤。电气系统是机电工程的核心之一,其调试内容包括防雷接地...
在电子工程领域,尤其是嵌入式系统开发中,Proteus和Keil是两个非常重要的工具。Proteus是一款强大的电路仿真软件,而Keil则是一个集成开发环境(IDE),主要用于编写和编译C/C++代码,适用于微控制器程序开发。本...
两级联调稳压电源设计通常包括预稳压和精细调整两个阶段。预稳压阶段主要负责将输入电源(如AC或高电压DC)转换为初步稳定的电压,这一过程可能通过线性稳压器或开关电源来实现。线性稳压器易于设计,但效率较低;而...
在电子工程和嵌入式系统开发领域,"vdmagdi_keil与proteus联调驱动"是一个关键的技术主题,它涉及到两个重要的工具:Keil μVision IDE和Proteus仿真软件。这两个工具在硬件设计和软件开发的集成过程中扮演着至关...
在电子工程和嵌入式系统开发领域,Keil和Proteus是两款非常重要的工具。Keil是一款功能强大的C/C++编译器和集成开发环境(IDE),适用于各种微控制器,如ARM、8051等。而Proteus则是一款仿真软件,它允许开发者在...
在iOS应用开发中,集成支付宝支付功能是一项常见的需求,尤其对于电商、游戏等类型的应用更是不可或缺。本教程将深入探讨如何在iOS应用中实现支付宝支付功能,为新手开发者提供详尽的指南。 首先,我们需要了解iOS...
xcode真机调试所需,从xcode9.2解压获得,使用时解压到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport即可
在电子工程和嵌入式系统开发领域,Keil 和 Proteus 是两个非常重要的工具。Keil 是一款强大的集成开发环境(IDE),支持C51和ARM等微控制器的编程,而Proteus则是一款硬件仿真软件,允许开发者在虚拟环境中模拟硬件...
驱动程序在联调过程中起着关键作用,它是两个独立软件间交互的桥梁。"Proteus VSM Keil Driver vdmagdi.exe"就是这样的驱动程序,它的作用是让Proteus理解并执行由Keil产生的目标代码,从而实现软件层面的仿真和硬件...
总的来说,Keil与Proteus联调插件是嵌入式开发中的强大工具,它融合了软件开发的便利性和硬件仿真的直观性,让开发者可以在一个集成的环境中实现从概念到验证的无缝过渡。无论你是初学者还是经验丰富的工程师,熟练...
4. **联调设置**:在Keil中编译并生成可执行文件,将其复制到Proteus的工程目录。在Proteus中加载电路,通过菜单选择"Start/Stop Simulation"开始仿真。 5. **调试**:点击Keil的Debug按钮,即可在Proteus中看到...
总之,"Proteus+Keil联调补丁Vdmagdi.exe"是连接这两个强大工具的关键桥梁,使得开发者可以在虚拟环境中进行完整的系统级验证,极大地提高了开发效率。在学习和工作中,正确理解和使用这个补丁,能帮助我们更好地...
- 需要分别下载Qt库和Qt Creator两个软件包。 - 在此示例中,仅下载了Qt桌面版开发环境,不包含移动平台的开发库。 2. **Qt与Qt Creator安装**: - 安装qt-win-opensource-4.7.0-beta1-mingw,全程使用默认设置...
下位机的dsp上电由一次boot引导至flash,flash内根据cmd文件划分两个工程,分别二次引导程序(boot)和app程序;上位机解析hex文件,通过can通信完成在线升级操作。 上位机和下位机均带思路解析,附带本人调试过程的...
在电子工程和嵌入式系统开发领域,Keil和Proteus是两个非常重要的工具。Keil是一款功能强大的C编译器,适用于多种单片机(MCU)开发,而Proteus则是一款著名的电子电路仿真软件。这篇文章将详细介绍如何使用Keil C与...