iOS Library not loaded 原因探究以及处理

起因

在接入一些三方的时候,会遇到 dyld: Library not loaded: @rpath/XXXX Reason: image not found 的问题,导致闪退

原因探究

根据提示,可以得知两个情报:一个是库没加载到,二是没有找到对应镜像。那么就可以推出一个结论,就是设备中找不到对应的库

这是在有用到动态库的时候才会出现的问题。静态库跟动态库的区别就在于编译之后,静态库会将自身复制到程序中,会增加程序的大小;而动态库只相当于一个引用指向的作用,不影响程序体积,并可以让许多程序共用一个库。

而出现的原因有两种:

1.调用的是系统库:设备版本太低,而编译的时候所用的版本又太高,设备中不存在这么高版本的库。例如:Photos.framework 库是 iOS 8 之后才支持的,那么如果是 iOS 8 之前的版本,在调用的时候,就会发现设备上找不到对应库,导致报错。

2.调用的是三方库:在Xcode 6之后,iOS 平台就已经添加了对于动态库的支持,那么就有可能会接入一些三方的动态库。那么理所当然的,如果没做相关的处理,肯定会找不到对应的库。

问题处理

既然找到了原因,那么对症下药即可,两种症状两贴药方

  1. 系统库出现问题:例如 Photos.framework 找不到,那么可以将 Photos.framework 先加入到 Link Binary With Libraries ,并将 status 改为 Optional。如果有可替代的库,则加入对应的库。如加入 AssetstLibrary.framework 库做替代。
例子
  1. 三方库出现问题:三方库找不到,那么就只能把库加入到工程中,如果有Embed Frameworks,那么就直接加入即可
    iOS Library not loaded 原因探究以及处理_第1张图片
    Embed Frameworks

    如果没有的话,那么需要

    1、选择新增 New Copy Files Phase
    iOS Library not loaded 原因探究以及处理_第2张图片
    New Copy Files Phase

    2、将 Destination 设置为 Frameworks
    iOS Library not loaded 原因探究以及处理_第3张图片

    3、加入对应的动态库,齐活

题外

可以用 file 命令查看三方库是动态的还是静态的

你可能感兴趣的:(iOS Library not loaded 原因探究以及处理)