iOS 關(guān)于Framework的坑

1. 測試工程中引用SDK.framework, 發(fā)現(xiàn)執(zhí)行SDK后, Xcode中的打印日志居然是以前SDK的日志內(nèi)容, 判斷可能是引入了舊版的SDK.framework, 刪掉重新引入依然出現(xiàn)以上的問題. 從測試工程中刪除掉引入SDK.framework, 測試工程中的代碼依然 import<SDK/SDK.h>, Command+B 依然成功. (此處請允許我爆粗口, 艸, 這個問題浪費了我3個多小時??)

解決過程:

  1. 拷貝同樣的測試工程, 換一臺機器編譯(帶上了之前我認為引入錯誤的SDK), Xcode打印的日志是最新的日志.
  2. 刪除掉SDK.framework, 代碼中 import<SDK/SDK.h> , Command + B 報錯找不到頭文件. 這樣說明在別的機器上是正常的, 可是為什么自己的機器就連沒有SDK.framework, 代碼中import<SDK/SDK.h>也不是報錯呢?(思考中??).
  3. 懷疑是有緩存或者是引入framework的路徑出了問題. clean工程沒用, 我以為緩存已經(jīng)清除掉了(卻不知道clean工程并沒有什么卵用). 然后檢查framework的路徑 framework search path, 沒檢查出問題(因為即便是刪除掉里面的內(nèi)容還是能運行成功,此時心中一萬頭草泥馬狂奔).
  4. 找到技術(shù)總裁(大佬), 幫我排除一切可能之后發(fā)現(xiàn)了DerivedData這個??東西, 刪除掉里面的全部內(nèi)容再次嘗試引入SDK.framework運行出了正確的結(jié)果. 把我感動的不行, DerivedData這是個什么鬼??東西呢?
  5. DerivedData從字面上看意思是派生數(shù)據(jù)的意思, 其實就是Xcode編譯出來的各種緩存文件和數(shù)據(jù), clean工程的時候清理不掉(不知道要這個clean功能有啥用).如果發(fā)現(xiàn)Xcode在編譯工程的時候出現(xiàn)詭異的情況, 比如說我這種, 就考慮一下清理Xcode/DerivedData里的全部緩存文件吧(要養(yǎng)成經(jīng)常清理緩存的好習慣).

備注: Xcode/DerivedData文件夾從這里可以進入

image.png

2. 制作靜態(tài)庫(.a或.framework)的時候, 如果使用了分類, 最好將分類中的方法名稱帶上前綴. 這樣做可以有效的防止使用靜態(tài)庫的時候,外部工程中有某類的分類中方法名和靜態(tài)庫該分類的方法名相同,導致靜態(tài)庫中的分類方法異常.

例如: 靜態(tài)庫中創(chuàng)建了UIView的分類UIView+A,并使用了分類UIView+A中的- (void)abcde;方法. 此時外部工程也有一個UIView的分類UIView+B,并使用了分類UIView+B中的- (void)abcde;方法, 那么很可能會導致靜態(tài)庫中UIView+A中的- (void)abcde;被覆蓋, 程序異?;騝rash.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容