如何使用
Use Guidelines
这是apple给出的官方使用说明,结合第一行的描述
Dynamic libraries can be loaded either when the app launches or as it runs. Libraries that are loaded at launch time are called dependent libraries. Libraries that are loaded at runtime are called dynamically loaded libraries.
由此,现在有两种load的方式,第一种作为依赖load,这样的话是在运行之前就配置好的,相当于全局的load。
其次是动态的load,在动态load时,是一个runtime的使用方式,也就是说在具体的code里面需要自己反射lib里面的方法,通过dlopen等api来加载lib,调用方法。
具体的参考Use Guidelines
不过,一般我们都会优先考虑使用全局的方式load,那么此时如何让项目自动load?
- 在build phase里进行copy 动作,将我么需要的lib文件copy到响应的目录下,如framework
- 在最终build出来的执行文件,使用otool查看lib的加载信息,然后使用install name tool来修改具体的加载路径
这里可以参考stackoverflow的具体问题,最佳答案有详细步骤 - 需要注意的是,在现在使用了instal name tool之后,这个项目中的这个install后的相关lib属性就已经保存到了项目生成的binary文件中,无论copy到何处都是保留了这个配置信息的
- 在具体问题中我们看到了类似,@executable_path的写法,这是系统保留的动态获取路径的方法,详细使用可以参考动态路径,其中涉及
- @rpath
- @loader_path
- @executable_path
他们的具体含义,用到的继续学习吧
PS:
在本次项目调试中发现,直接使用xcode的run,那么xcode会自动将引入的全局加载方式的lib文件install到当前product所在的目录,与生成的product平级。从而只要我们在build phase copy这个lib文件到product directory,