Xcode 9拖入框架报错问题

  • 问题描述

    拖入一张图片或者一个下载好的第三方框架文件到目录结构下,编译不报错,运行时会报错;

  • 问题原因

    可能是Xcode 9的一个bug,编译期间没有添加文件到Compile Sources

  • 问题重现

    1. 拖入下载好的Masonry框架到项目中;
    2. 导入头文件,使用;
    3. 查看TARGETS ~> Build Phases ~> Compile Sources,发现没有自动添加到Compile Sources;
    4. Command+b,编译成功(说明Xcode甚至没有检查对错);
    5. Command+r,运行报错;

  • 问题解决方式一

    1. 编译之前,在TARGETS ~> Build Phases ~> Compile Sources中手动添加
    2. 图片处理:在TARGETS ~> Build Phases ~> Copy Bundle Resources中手动添加
    3. 缺点:工作量大
  • 问题解决方式二
    1. 复制下载好的Masnory框架,预先写好代码,项目show in finder,粘贴;
    2. 工程Add Files To;
    3. 查看Build Phases ~> Compile Sources;
    4. Command+b,编译成功;
    5. Command+r,运行成功;

  • 解释

    1. Target Dependencies:编译依赖关系
      将lib工程的target加入到里面,告诉主工程当lib工程发生变化的时候自动编译它。
    2. Compile Sources:编译源文件
      这个阶段编译所有的源文件;默认情况下,项目中添加任何一个源文件,也将添加到编译列表中。
    3. Link Binary With Libraries:连接二进制文件和库
      在完成源文件的编译之后,连接框架(或库),这样代码就可以使用这些框架类了。
    4. Copy Bundle Resources:复制绑定资源
      在源文件编译和连接库之后,创建一个可执行文件,并放置在应用程序的绑定中,其实就是一个文件夹。其中资源文件将和可执行文件一起添加到绑定(bundle)中。这些资源文件是数据文件,应用程序在运行时需要使用,如XIB 文件和图像文件、声音文件等等。默认情况下,添加到项目中的文件,如不是源代码文件,将添加到这个构建阶段(Build Phase)。
这个人很帅<br>他什么都不想说<br>