xcode项目间依赖总是给人一种莫名其秒,是似而非的感觉。究其原因是因为对于xcode工具配置不熟所致。那么本篇文章主要就这点作下疏理。
Workspace与Project
当我们打开xcode,新建一个项目时,xcode提供了Workspace/Project供我们选择使用。通常我们会选择Project,二者有什么区别吗? 新建工程时workspace与project的决择示例
第一步:使用xcode新建一个WorkspaceProjectTargetDemo的Workspace。在Finder中查看,只生成了一个文件,xcode左边栏中也没有任何内容。
只生成一个xcworkspace文件
xcode中没有任何内容 第二步:在该workspace中新建一个静态库工程TestLib,选择保存路径时注意选择将Project添加到刚才新建的WorkspaceProjectTargetDemo中去。 新建静态库工程
可以在Finder中看到,新生成的TestLib文件夹与workspace文件放置在同一级目录,且xcode左边栏已经将TestLib工程组织显示了出来。
静态库工程生成的目录架构
xcode显示的Project
第三步:再TestLib.h/m文件中添加一个test函数,做简单的LOG打印。
测试代码
第四步:重复上面的第二步,新建一个测试工程TestLibDemo。新生成的目录结构与xcode显示的左边栏如下:
新生成的目录结构
新生成的工程结构
第五步:TestLibDemo中调用TestLib中的代码。
调用测试代码
工程依赖
编译TestLibDemo时会报头文件找不到的错误。
头文件找不到错误
该错误出错的原因是因为,在工程TestLibDemo的target中,其黑夜的编译设置限制了它寻找头文件的范围只是在TestLibDemo文件夹内,并不会到TestLib文件夹中查找。只需要将TestLib的路径添加到其头文件寻找范围内,该问题便可解决。
在target-Build Settings中搜索Header Search Path便可以找到该配置项,新增头文件寻找路径,如下:
新增头文件寻找路径
再次编译,新的问题出现了,注意这次的错误是一个链接错误,这说明我们已经走完了代码的编译阶段,只要再全部解决这类错误,代码就能够运行了。
链接不到静态库中的类
既然是链接不到静态库中的类,要么是静态库没有编译该类所在的文件,要么是TestLibDemo工程没有加载到该静态库。
先来确认是否编译。TestLib类位于TestLib.m文件中,在TestLib的target-Build Phases-Compile Sources中查找是否存在TestLib.m文件,存在则说明编译没有问题。
编译文件配置
再来确认静态库的加载,在target-Build Phases-Link Binary with Librarys中的确没有看到TestLib库的存在,手动将其添加进去。
添加静态库
再次编译,错误消失了,程序运行起来了,日志也成功的打印了出来。
程序运行正常
很幸运,程序运行起来了。而如果开发者碰到了那么库文件正常导入,但就是链接不到的错误怎么办呢?与头文件找不到的错误一样,Library Search Paths是xcode提供给开发者手动配置库文件查找路径的配置项。同样功能的配置项还Framework Search Paths。开发者碰到的很多类似问题很可能是因为这三个路径配置项混乱导致的。
常用路径变量
XCODE给开发者提供了很多常用变量,这里列举如下:
- $(PROJECT_DIR)代表工程的绝对路径
- $(SRCROOT)工程文件的路径,即.xcodeproj所在的文件夹路径
- $(BUILT_PRODUCTS_DIR)build成功后,最终生成的产品路径,该参数可以通过Per-configuration Build Products Path配置项来定义
还有更多的变量定义可以参考这篇文章
网友评论