最近想把OC转成C++代码研究一下,就搜索了一下结果发现文章内容都差不多,直接拿来用始终报错。最后综合了一下找到了解决办法,现在记录一下,如果对你有帮助那就是再好不过了(记得给个赞👍👍👍)。
打开终端cd到你要转换文件(xxx.m)的目录下,执行以下代码:
cc -rewrite-objc xxx.m
运行结果:这是什么鬼?原来 'UIKit/UIKit.h' 识别不了,继续查吧。一搜果真好多文章啊来复制粘贴一下。
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxx.m
运行又报错?到底问题出在了哪里?
解决方法
仔细看了上面的命令发现有一个sdk的版本信息(也就是 xxxx/iPhoneSimulator.sdk xxx.m)应该是这个sdk的版本不对造成的。
查看sdk的版本
打开终端执行一下命令
xcodebuild -showsdks
运行结果:
我们清楚的看到是iOS 12.1 (这个根据你电脑里的版本确定的)。
输入正确的指令
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk xxx.m
执行完毕我们会在我们的文件目录里看到增加了一个.cpp的文件,这个就是我们最终转化成的C++代码。
优化写法
为了避免每次转化代码都需要写这么长,可以进一步优化。
vim ~/.bash_profile
执行以上命令进入编辑界面按i进入编辑状态输入以下内容(这个内容大部分系统已经写好,注意检查sdk的版本号位置),确认无误按esc 退出编辑状态,按 :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
下次想转化文件的时候直接cd到文件目录下执行即可。
rewriteoc xxx.m