Cordova/CDVViewController.h file not found 解决办法
最近把Xcode升级到7.1出现上述问题,可以运行app,但是在打包app提交到appstore的时候会报 Cordova/CDVViewController.h file not found
查了好久才找到原因,参考了http://stackoverflow.com/questions/33379291/cordova-app- failing-to-archive-with-xcode-7-1-cordova-cdvviewcontroller-h-file
解决方法:
Header Search Path 加入
"$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"
附上几个网址 :
Cordova 官网: http://cordova.apache.org/
框架引入: http://www.jianshu.com/p/656838ae92bc
交互原理: http://www.cnblogs.com/luoguoqiang1985/p/3574738.html
坑1.在使用 Cordova 时, 注意: 自己工程里面的 cordovaLib 和 Cordova.js 要是同一个版本,否则将会发生你意想不到的事情,比如可以调用支付宝客户端,却调不到网页版的支付宝.切记.
坑2.当引入了新的三方库的时候,运行工程并不会发现什么错误,但是在打包的时候,则会报错,说找不到库里的某个头文件,解决办法就是在 targets -> buildSettings -> Head Search Paths 里面添加下面一行代码:
"$ (OBJROOT)/UninstalledProducts/include”
坑3.当报错说 Object - C … xxxx.o 找不到时,往往是 .a 文件没有引入,引入相关的.a 文件就可以了.
坑4.当 h5 调用本地的插件里的支付方法时,本地开始调用支付宝SDK,但是会爆一个错误:
WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: -[__NSDictionaryM objectAtIndex:]: unrecognized selector sent to instance 0x7fab8b252b60
很显然,是把数组的方法,发送给了字典,通过打 断点调试的方法,进入 cordova 内部实现里面看 cordova 对参数的处理,发现 cordova 内部是用 数组来接收参数的,由于参数类型不对,当然会调不到支付宝并崩溃,解决办法是让后台把 JSON 数据放到数组里,当然别忘了通知安卓.
5.当 cordova框架正确引入并且正常工作时,会打印:
Apache Cordova native platform version x.x.x is starting.
坑6.当使用模拟器run的时候,会报如下错误:
LaunchServices: ERROR: There is no registered handler for URL scheme xxx
我检查了下 info.plist 文件里的配置是没有问题的,后来发现这句话的意思是 设备上没有安装支付宝的客户端,所以此时会走网页端.
坑7.今天出现了一个 bug , 就是触发事件的时候 iOS 这边会弹窗,而且连续弹好几次,如下图:
![](http://upload-images.jianshu.io/upload_images/965192-592d49b57b2e6a76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
后来发现服务器端也引入了 cordova.js 文件,而且和 native 使用的 cordova.js 不是同一个版本,改为了同一版本就 OK 了.而正常的情况下,考虑到还有安卓的存在,服务器端不应引入 js 文件,应该是在本地写入 cordova.js 到服务端,具体写入方法见本文第 9 条.
8.加载 H5页面的 WebViewController 必须继承于 CDVViewController ,如图:
![](http://upload-images.jianshu.io/upload_images/965192-f4c24f456f56d5bf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
9. 要在 webview 的代理方法 webViewDidFinishLoad 中 让服务端 读入 cordova.js 文件,而且 cordova.js 文件里面的注释要全部删除才能被读入,暂时还不知道要删除注释的原因 ,具体代码如图: