美文网首页
创建一个弱引用的dylib和framework

创建一个弱引用的dylib和framework

作者: xiaoliang1 | 来源:发表于2019-05-22 17:23 被阅读0次

    最近改了一个插入和删除dylib或者framework一个工具。insert_remove_dylib。
    最新添加了支持-w 可选选项,让你插入的库以LC_LOAD_WEAK_DYLIB引用形式在loadcommand里面。识别@loader_path和@rpath前缀。这虽然没技术含量。但是我还是要说的。
    使用: ./insert_remove_dylib -i -w @rpath/zzz.framework/zzz xxxx
    效果:

    .:insert_remove_dylib -i -w @rpath:zzz.framework:zzz BonreeBox.png WX20190522-172319.png

    如XCode的:


    WX20190522-160208.png

    linkFrameworks是status使用optional选项。
    或者:


    WX20190522-160440.png
    在Other link flags 添加 -weak_framework zzz.framework
    ,不知道你们还记不得Reveal从2.0版本把自己的library有dylib变成了Framework .他们们文档就是这样让你手动添加Framework的:-ObjC -weak_framework RevealServer
    WX20190522-161022.png


    以LC_LOAD_WEAK_DYLIB方式引用库,有什么好处呢。好处就是当你这个库不存在或者丢失时,照样能运行起来,dyld加载可执行文件时绑定库时,找不到时不会抛出异常。
    那么好了,我们在注入别人APP时,可以以这种形式注入库。这样库文件移除或者丢失完全不会报错。
    那你运行起来时。你引用这个库里面的东西会变成 什么样呢。测试一下,用ARKit的。


    WX20190522-164303.png
    要求iOS11.那我们用个iOS9的系统。
    WX20190522-164407.png
    link 方式改为optional; WX20190522-170107.png WX20190522-165329.png

    你互发现你引用ARKit里面的ARSKView创建的对象变成nil.不会崩溃,也不提示找不到库。

    WX20190522-165540.png

    跑到iOS9.1系统上完全无压力。
    改回requried时。注意缓存,不然还是LC_LOAD_WEAK_DYLIB。

    最后说下我改好的insert_remove_dylib
    github:https://github.com/LoveSVN/Insert_Remove_dylib.git

    相关文章

      网友评论

          本文标题:创建一个弱引用的dylib和framework

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