问题描述
拖入一张图片或者一个下载好的第三方框架文件到目录结构下,编译不报错,运行时会报错;
问题原因
可能是
Xcode 9的一个bug,编译期间没有添加文件到Compile Sources问题重现
- 拖入下载好的
Masonry框架到项目中; - 导入头文件,使用;
- 查看
TARGETS ~> Build Phases ~> Compile Sources,发现没有自动添加到Compile Sources; Command+b,编译成功(说明Xcode甚至没有检查对错);Command+r,运行报错;
- 拖入下载好的

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

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