iOS framework 静态库 套娃🪆娃中娃

接到某个需求,需要把别人家的SDK封装一层,给到其他部门使用,... 啊这 这不就是套娃嘛
一开始以为很简单就直接拖入项目,添加各种依赖之后编译成功了,连真机调试就开始报错了
提示 Undefined symbols for xxxx
xxx_OBJC_Class_$__xxxx, referenced from xxx
ld: symbol(s) not found for archxxx arm64
找不到符号 , 文件找不到,也就是库的路径配置出错了


如果是.a静态库的嵌套话,那就没啥问题了,把静态库可执行文件和头文件引入就ok了

因为framework也是类似的,可以理解为是多封装了一层.framework文件夹,而Xcode比较睿智,有的时候并不会主动寻找三方类库的具体路径,所以有的时候有必要手动指定Library Search Path以及Header Search Path

还有一种笨方法就是直接把.framework文件拆出来,把可执行文件当.a静态库使用已经头文件一并拖入项目,道理也是一样的,只不过就不支持尖括号引入就是了

<!-- run -->
<div id="app">
    <div>
        <el-collapse v-model="active">
            <el-collapse-item :title="title" name="1">
                <pre :class=`language-${lang}`>
            <code :class=`language-${lang}`> {{code}} </code>
            </pre>
            </el-collapse-item>
        </el-collapse>
    </div>
</div>
<script>
    new Vue({
        el: '#app',
        data() {
            return {
                active: '1',
                title: '配置Path',
                lang: 'bash',
                code: `
#具体到某个.framework即可 
$(PROJECT_DIR)/项目根目录名/xxx.framework 
#当然也可以正则模糊匹配 所有三方.framework都放Libs目录下
$(PROJECT_DIR)/项目根目录名/Libs/*.framework
 `
            }
        },
    });
    setTimeout(() => {
        var codeNode = window.document.getElementsByTagName('code');
        if (codeNode.childNodes.length === 0) {
            window.location.reload();
        }
    }, 500);
</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章