22

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

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

今天早上我决定确保 iOS 一切正常。一点也不奇怪,事实并非如此。

所以......这似乎是插件的问题。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
  ]
]

我想这意味着它无法加载 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>

我也尝试使用 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
    • 万维网
      • 坐标.js
      • 位置.js
      • PositionError.js
      • 地理位置.js
  • org.apache.cordova.network-信息
    • 万维网
      • 连接.js
      • 网络.js

对于任何可以帮助解决此问题的人来说,这是一个兴高采烈的拥抱。我已经浏览了其他问题,但没有运气。

4

4 回答 4

60

Mark 的解决方案有效但没有必要,并且会导致您失去对 XCode 项目的自定义。

为我解决的问题是:

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

于 2014-01-15T21:18:08.717 回答
30

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

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

于 2013-10-30T16:46:41.877 回答
2

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

于 2013-10-18T15:15:11.930 回答
0

在我的情况下,我也无法在插件目录中找到 Plugin_name.m 文件,因此我在构建阶段手动添加了 Plugin_name.m 文件(您可以在 plugin->src->ios 文件夹中找到 Plugin_name.m 文件)和然后从 ios.json 文件(位于 cordova-builds 文件夹中)复制插件的功能名称并将其添加到 config.xml 文件中(删除反斜杠)。插件可以正常工作。

注意:- 您可能必须在 plugin_name.m 文件中包含的构建阶段添加所有文件。

于 2016-01-27T04:52:00.973 回答