为何“cordova build ios”无法更新Xcode项目?
我太懂这种头疼的情况了——明明改了插件的源码和plugin.xml,结果build的时候旧文件死缠着不放!别着急,这大概率是Cordova的平台缓存搞的鬼,咱们一步步来解决:
彻底重建iOS平台(最有效)
Cordova的platforms/ios目录里会缓存插件的原始文件,有时候clean命令清不干净。直接移除再重新添加平台,能彻底刷新所有文件:cordova platform remove ios cordova platform add ios这一步会完全重新生成iOS平台目录,严格按照你修改后的
plugin.xml来复制插件文件,旧文件肯定留不住。检查plugin.xml的配置是否真的正确
再仔细核对一下<platform name="ios">段的配置:确保所有旧的<source-file>标签都删掉了,新文件的路径和target-dir都写对了。举个正确的例子:<platform name="ios"> <!-- 所有旧的source-file已移除 --> <source-file src="src/ios/MyCustomClass.m" target-dir="Classes/Plugins/MyPluginID"/> <source-file src="src/ios/MyCustomClass.h" target-dir="Classes/Plugins/MyPluginID"/> </platform>别小看路径错误,有时候就是因为
target-dir不对,导致新文件没覆盖旧位置。手动清理平台目录的残留文件
如果重建平台还是不行,就手动去platforms/ios/[你的项目名]/Plugins/[你的插件ID]目录下,把所有旧文件删掉,再把你新的源码文件复制进去。之后执行:cordova prepare ios cordova build ios清理Xcode的衍生数据
Xcode本身也会缓存编译文件,有时候Cordova这边同步了,Xcode还抱着旧缓存不放。打开Xcode,依次点击Xcode > Preferences > Locations,找到Derived Data,点击旁边的箭头打开文件夹,删掉对应项目的文件夹,重启Xcode再编译试试。检查插件的钩子脚本
有些插件会在plugin.xml里配置<hook>钩子脚本(比如install或prepare阶段的脚本),如果这些脚本里有自动复制旧文件的逻辑,也会导致旧文件回来。去看看plugin.xml里的钩子配置,确保没有这类“帮倒忙”的脚本。
按照这些步骤走,应该就能彻底摆脱旧文件的困扰啦!
内容的提问来源于stack exchange,提问作者Stéphane de Luca

