【问题标题】:iOS unable to find plugins, Android fineiOS 找不到插件,Android 没问题
【发布时间】:2013-10-27 04:32:06
【问题描述】:

我正在 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
    • 万维网
      • Coordinates.js
      • Position.js
      • PositionError.js
      • geolocation.js
  • org.apache.cordova.network-信息
    • 万维网
      • Connection.js
      • network.js

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

【问题讨论】:

  • 这可能与此处讨论的已知 cordova 错误有关:issues.apache.org/jira/browse/CB-4971。简而言之,一旦准备好 ios 项目,显然并不总是可以添加插件。以下解决方案是迄今为止最好的。
  • 您也可以查看对我有用的solution

标签: ios xcode cordova


【解决方案1】:

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

为我解决的问题是:

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

【讨论】:

  • +1000 如何在项目中拥有该文件但 XCode 无法编译它,这超出了我的范围。
  • 如果iOS构建无法引入插件,Plugins目录下将没有.m文件。
  • 在我的情况下,我在重置项目后忘记运行cordova build ios
【解决方案2】:

对于未来的搜索者 - 对我有用的解决方案来自另一个堆栈溢出响应,这里: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 是一个关键因素!
  • 当我的命令行工具是 phonegap 时,为什么我总是在答案中看到 cordova?
  • 这实际上和cordova platform remove ios; cordova platform add ios; 不一样吗?
  • @commonpike 是的。无需手动删除./plugins/ios.json./platforms/ios/。只需运行cordova platform remove ios
【解决方案3】:

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

【讨论】:

  • 对于未来的搜索者:这个解决方案对我不起作用,我不明白它是如何工作的 - cordova prepare 包含在 cordova build 中(buildprepare 的简写和compile)。请参阅我的答案以获取对我有用的链接。
  • 只是补充一点,马克的回答对我有用,但这个没有。似乎为 ios 编译插件存在某种问题......
  • 很抱歉听到这个消息。这绝对对我有用,并且文档现在已经更新以包含cordova命令(cordova build包含cordova prepare)。我想有一些潜在的陷阱,而这些只是其中的两个。很高兴它为你排序
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多