最近在嘗試編譯 objc 的源碼,碰到的問題記錄。
編譯源碼的過程,大致分為兩步:
1.編譯通過 objc target
1.添加一些源文件,在官網(wǎng)提供的其他源代碼包里找,然后在
header search paths里添加這些 源文件的路徑即可
2.源代碼的一些改動(dòng),比如添加一些宏定義,注釋一些條件判斷等等
網(wǎng)上有很多很詳細(xì)的教程,舉個(gè)?? 參考
https://juejin.cn/post/7042624465175314445
2.編譯自己創(chuàng)建的 target
1.build phases -> dependencies 添加
objc的依賴
- build settings ->enable harden runtime -> NO(其實(shí)此為默認(rèn)值,不知道為什么教程都強(qiáng)調(diào)這一點(diǎn))
注意,坑來(lái)了
常規(guī)的坑:
1.編譯自己的 target 成功以后,出現(xiàn)了打在自己的 target里的斷點(diǎn)斷不住的問題,
修改 compile sources ,把 main.m 提到最上面,解決
2.打在源碼里的斷點(diǎn)斷不住的問題,要在自己的 target 里面添加objc的依賴
但是我在添加了objc依賴的情況下,依然斷不住源碼里的斷點(diǎn),改了enable harden runtime 為 NO 也是不行
測(cè)了半天,把自己target的 macOS Deployment Target 改成macOS 10.12,成功斷住了源碼
原因猜測(cè):是與xxCommon/mach/dyld_priv.h新添加的宏定義有關(guān),只有10_11~10_14,而我當(dāng)前的Xcode12.5.1 創(chuàng)建的命令行項(xiàng)目,該項(xiàng)默認(rèn)設(shè)置了macOS 11.3

dyld_priv.h文件

自己創(chuàng)建的 target,該項(xiàng)初始值是 macOS 11.3