美文网首页转载
iOS开发之Xcode 相对路径与绝对路径

iOS开发之Xcode 相对路径与绝对路径

作者: Steven_Wu | 来源:发表于2017-02-05 12:04 被阅读1757次

    在iOS的工程中,尤其是在使用CocoaPods前,经常会把某个静态库或者Framework直接拖到工程中,编译运行通过,这样就可以了么?

    一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现。

    Xcode用户可以 通过Header Search Paths 来配置环境变量。但这里涉及到一个另外一个参数 User Header Search Paths, 这两者到底有什么区别呢?

    首先明确一点,Header Search Paths 顾名思义就是用来存放 Project 中头文件的搜索根源,没有被add到项目里的头文件,可以通过配置Header Search Paths 来引入头文件,这样的好处可以不让project 包含的文件太多,便于管理。

    浅显一点的区别是,编码时候通过 #import 引入头文件的方式有 <> 和 ""两种。 <> 是只从 Header Search Paths 中搜索, 而 "" 则能从 Header Search Paths 和 User Header Search Paths 中搜索。 换言之 ,假如你把 路径加到 User Header Search Paths 中,那么你用 #import <file.h> 的方式去引入对应的头文件,就会报错。 如果加到 Header Search Paths, 就没有问题了。

    具体一点的区别是,<> 是从系统目录空间 (对应 Header Search Paths)中搜索文件, "" 是从用户目录空间(对应 User Header Search Paths)中搜索文件。 如果你把路径加到 User Header Search Paths 中,却使用 <>导入头文件,那么程序无法从系统目录空间中找到新加的路径,从而报错。

    所以在修改User Header Search Paths这个选项的时候使用
    "$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹"
    将上面的双引号里面的字符串拷贝之后,你会发现这个“$(SRCROOT)”,会自动变成当前工程所以的目录。
    这样就可以了,发给别人,别人也不用再去修改路径了。

    绝对路径: 点击工程某个文件,右键“show in finder”打开终端,cd 把文件夹拖入,即可出现一个路径,这个就是绝对路径.
    相对路径: 相对于当前工程文件的路径,“./”表示当前工程文件夹,,"../"表示上层目录 ,在xcode里“$(PROJECT_DIR)”也表示当前工程文件夹目录

    这里还要了解一下在iOS中怎么代表相对路径和绝对路劲
    $(SRCROOT)代表的是项目根目录下
    $(PROJECT_DIR)代表的是整个项目
    ./也表示当前工程文件夹
    ../表示上层目录

    以上相对路径后面拼接的必须是项目中真实文件夹名,工程内部的group无效!

    1.c/c++ 头文件引用问题

    include/import <> 引用编译器的类库路径下的头文件
    include/import “” 引用工程目录的相对路径的头文件
    include/import 都是编译指令,在编译时,编译器会将相对路径替换成绝对路径。因此,头文件的绝对路径=搜索路径+相对路径。

    Xcode Build Settings 中的 Header Search Paths: 即可设置头文件搜索路径。
    例如:文件test.h的路径为testDemo/libs/test.h,我们在Xcode的
    Header Search Paths中添加$(SRCROOT),那么项目中引用该文件的写法为#import "libs/test.h"
    如果在Header Search Paths中添加$(SRCROOT)/libs, 那么项目中引用该文件的写法为#import "test.h"

    2. Other Linker Flags:“-ObjC”

    当导入的静态库使用了类别,其他链接标签设需要设为-ObjC

    相关文章

      网友评论

        本文标题:iOS开发之Xcode 相对路径与绝对路径

        本文链接:https://www.haomeiwen.com/subject/doxeittx.html