最近想把OC轉(zhuǎn)成C++代碼研究一下赌蔑,就搜索了一下結(jié)果發(fā)現(xiàn)文章內(nèi)容都差不多,直接拿來用始終報錯。最后綜合了一下找到了解決辦法闻葵,現(xiàn)在記錄一下,如果對你有幫助那就是再好不過了(記得給個贊??????)癣丧。
打開終端cd到你要轉(zhuǎn)換文件(xxx.m)的目錄下槽畔,執(zhí)行以下代碼:
cc -rewrite-objc xxx.m
運行結(jié)果:這是什么鬼?原來 'UIKit/UIKit.h' 識別不了胁编,繼續(xù)查吧厢钧。一搜果真好多文章啊來復(fù)制粘貼一下。
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxx.m
運行又報錯嬉橙?到底問題出在了哪里早直?
解決方法
仔細(xì)看了上面的命令發(fā)現(xiàn)有一個sdk的版本信息(也就是 xxxx/iPhoneSimulator.sdk xxx.m)應(yīng)該是這個sdk的版本不對造成的。
查看sdk的版本
打開終端執(zhí)行一下命令
xcodebuild -showsdks
運行結(jié)果:
我們清楚的看到是iOS 12.1 (這個根據(jù)你電腦里的版本確定的)市框。
輸入正確的指令
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk xxx.m
執(zhí)行完畢我們會在我們的文件目錄里看到增加了一個.cpp的文件,這個就是我們最終轉(zhuǎn)化成的C++代碼霞扬。
優(yōu)化寫法
為了避免每次轉(zhuǎn)化代碼都需要寫這么長,可以進一步優(yōu)化枫振。
vim ~/.bash_profile
執(zhí)行以上命令進入編輯界面按i進入編輯狀態(tài)輸入以下內(nèi)容(這個內(nèi)容大部分系統(tǒng)已經(jīng)寫好喻圃,注意檢查sdk的版本號位置),確認(rèn)無誤按esc 退出編輯狀態(tài)粪滤,按 :wq 進行保存斧拍。
alias rewriteoc='clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk'
source ~/.bash_profile
下次想轉(zhuǎn)化文件的時候直接cd到文件目錄下執(zhí)行即可。
rewriteoc xxx.m