接到某個需求,需要把別人家的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>