iOS无法找到插件,Android很好

Mik*_*ike 22 xcode ios cordova

我正在Phonegap/Cordova中构建一个应用程序.App目前相当简单,但确实需要网络状态和地理位置插件才能工作.

到目前为止,我已经在Android上开发了应用程序(它只由几个基本的HTML页面和一些JS构成),它一直运行良好.

今天早上我决定确保一切顺利.绝对没有任何意外,事实并非如此.

所以...它似乎是插件的问题.XCode吐出以下内容:

CDVPlugin class CDVLocation (pluginName: Geolocation) does not exist.
2013-10-18 11:24:29.437 Eye Cab[589:907] ERROR: Plugin 'Geolocation' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2013-10-18 11:24:29.438 Eye Cab[589:907] -[CDVCommandQueue executePending] [Line 117] FAILED pluginJSON = [
  "Geolocation1841912763",
  "Geolocation",
  "getLocation",
  [
    false,
    0
  ]
]
Run Code Online (Sandbox Code Playgroud)

我想这意味着它无法加载Geolocation插件.我为网络连接插件得到了类似的东西.

下面是我在Phonegap项目中截断的config.xml:

<feature name="http://api.phonegap.com/1.0/device" />
<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature>
<feature name="NetworkStatus">
    <param name="ios-package" value="CDVConnection" />
</feature>
Run Code Online (Sandbox Code Playgroud)

我也尝试使用ID作为功能名称(例如org.apache.cordova.geolocation),但是遇到了同样的问题.实际上完全相同的错误.

一切都在Android中完美运行; 在模拟器中,在我的Mac上的Chrome和设备上.

我使用以下版本:

  • Phonegap 3.1.0-0.15.0
  • XCode 5.0
  • OSX 10.8.5
  • iOS 6.1.3(iPod Touch)
  • 适用于iOS 7的iOS模拟器

正确的文件位于项目的/ www/plugins /文件夹中:

  • org.apache.cordova.geolocation
    • 万维网
      • Coordinates.js
      • Position.js
      • PositionError.js
      • geolocation.js
  • org.apache.cordova.network信息
    • 万维网
      • Connection.js
      • network.js

对于能够帮助解决这个问题的人来说,这是一个兴高采烈 我已经拖过其他问题,但没有运气.

shi*_*11i 60

Mark的解决方案有效但不必要,会导致您丢失对XCode项目的自定义.

为我修好的是:

在XCode中,转到Build Phases - >打开Compiled Sources下拉列表.单击+并添加缺少的插件.m文件,该文件应该在您的插件目录中(但已从编译的源中丢失).

  • +1000如何在项目中拥有该文件,但XCode不会编译它超出我的范围. (7认同)

Mar*_*uce 30

对于未来的搜索者 - 对我有用的解决方案来自另一个堆栈溢出响应,在这里:https://stackoverflow.com/a/19501579/1245276

简而言之:1.删除./plugins/ios.json,2.然后删除./platforms/ios,3.然后运行cordova platform add ios 4.然后cordova build.删除ios.json有助于强制它重新编译插件,至少这是我理解的,它对我有用.

  • 删除`plugins/ios.json`是一个关键因素! (9认同)
  • 这有效地说'cordova platform remove ios; cordova平台添加ios;`? (4认同)
  • 当我的命令行工具是phonegap时,为什么我会在答案中看到cordova? (2认同)

Mik*_*ike 2

iOS 缺少插件文件本身(.m 和 .h 文件),必须通过调用cordova prepare或 来复制这些文件phonegap prepare。似乎没有很好的记录。

  • 对于未来的搜索者:这个解决方案对我不起作用,我不明白它是如何工作的 - `cordova prepare` 包含在 `cordova build` 中(`build` 是 `prepare` 和 `compile` 的简写)。请参阅我的答案,获取对我有用的链接。 (3认同)