2013-10-18 77 views
22

我在Phonegap/Cordova中構建應用程序。應用程序目前相當簡單,但確實需要網絡狀態和地理位置插件才能正常工作。iOS無法找到插件,Android很好

我在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文件:

​​

我已經使用的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的觸摸)
  • 適用於iOS 7的iOS模擬器

正確的文件位於/ www/plugins /文件夾中項目:

  • org.apache.cordova.geolocation
    • WWW
      • Coordinates.js
      • Position.js
      • PositionError.js
      • geolocation.js
  • org.apache.cordova.network信息
    • WWW
      • Connection.js
      • network.js

的人誰可以幫助興高采烈擁抱這個。我已經瀏覽了其他問題,但沒有運氣。

+0

這可能與此處討論的已知cordova錯誤有關:https://issues.apache.org/jira/browse/CB-4971。總之,插件可以顯然不是總是在ios項目準備好之後添加的。以下解決方案是最好的方案。 – commonpike

+0

您也可以查看[解決方案](http://stackoverflow.com/questions/32668747/visual-studio-tools-for-apache-cordova-ios-remotebuild-omitting-plugins-fo/35057129#35057129)爲了我。 – Lentyai

回答

2

iOS缺少插件文件本身(.m和.h文件),必須通過調用cordova preparephonegap prepare來複制。似乎沒有很好的記錄。

+3

對於未來的搜索者:這個解決方案對我不起作用,我不明白它是如何工作的 - 'cordova prepare'包含在'cordova build'中('build'是'prepare'和'compile'的縮寫) 。查看我的答案,瞭解爲我工作的鏈接。 –

+0

只是爲了補充一點,馬克的答案適用於我,但這不是。編譯ios的插件似乎存在一些問題...... – CSilivestru

+0

很抱歉聽到這個消息。這絕對適用於我,現在文檔已更新爲包含cordova命令(cordova build合併cordova prepare)。儘管如此,我想有一些潛在的缺陷,而這些只是其中的兩個。很高興爲您排序 – Mike

28

對於未來搜索 - 爲我工作的解決方案從另一個堆棧溢出反應過來,在這裏:https://stackoverflow.com/a/19501579/1245276

簡而言之: 1.刪除./plugins/ios.json, 2.然後刪除./平臺/ ios, 3.然後運行cordova platform add ios 4.然後cordova build。 刪除ios.json有助於強制它重新編譯插件,至少這就是我所瞭解的和它爲我工作的。

+9

刪除'plugins/ios.json'是一個關鍵因素! –

+2

當我的命令行工具是phonegap時,爲什麼我會在答案中看到cordova? – Asaf

+4

這不是有效地說'cordova平臺刪除ios;科爾多瓦平臺添加ios;'? – commonpike

60

馬克的解決方案的工作原理,但沒有必要,並會導致您失去自定義XCode項目。

什麼固定對我來說是:

在Xcode中,轉到構建階段 - >打開編譯來源下拉。單擊+並添加應該在插件目錄中(但從編譯源丟失)的缺失插件.m文件。

+7

+1000如何在項目中擁有該文件,但XCode無法編譯該文件超出了我的想象。 –

+1

如果iOS構建不能引入插件,則Plugins目錄下不會有.m文件。 – Blaise

+0

在我的情況下,我忘了在重置項目後運行'cordova build ios' – Zorgatone

0

在我的情況下,我無法在plugins目錄中找到Plugin_name.m文件,所以我在構建階段手動添加了Plugin_name.m文件(您可以在plugin-> src->中找到Plugin_name.m文件) ios文件夾),然後從ios.json文件(它存在於cordova-builds文件夾中)複製插件的功能名稱,並將其添加到config.xml文件(刪除反斜槓)。 插件將正常工作。

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