2013-06-29 179 views
17

我最近從2.3.0升級到Cordova 2.9.0。遵循所有升級說明後,我能夠在模擬器中啓動應用程序。然而,在Xcode我看到以下錯誤:Cordova iOS插件未找到

ERROR: Plugin 'Device' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml. 
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["Device1776032119","Device","getDeviceInfo",[]] 
ERROR: Plugin 'NetworkStatus' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml. 
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["NetworkStatus1776032120","NetworkStatus","getConnectionInfo",[]] 
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","Logger","logLevel",["LOG","deviceready has not fired after 5 seconds."]] 
ERROR: Plugin 'Logger' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml. 
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","Logger","logLevel",["LOG","Channel not fired: onCordovaConnectionReady"]] 
ERROR: Plugin 'Logger' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml. 
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","Logger","logLevel",["LOG","Channel not fired: onCordovaInfoReady"]] 

這是我的config.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<widget> 
    <feature name="Geolocation"> 
     <param name="ios-package" value="CDVLocation" /> 
    </feature> 
    <feature name="Device"> 
     <param name="ios-package" value="CDVDevice" /> 
    </feature> 
    <feature name="Accelerometer"> 
     <param name="ios-package" value="CDVAccelerometer" /> 
    </feature> 
    <feature name="Compass"> 
     <param name="ios-package" value="CDVLocation" /> 
    </feature> 
    <feature name="Media"> 
     <param name="ios-package" value="CDVSound" /> 
    </feature> 
    <feature name="Camera"> 
     <param name="ios-package" value="CDVCamera" /> 
    </feature> 
    <feature name="Contacts"> 
     <param name="ios-package" value="CDVContacts" /> 
    </feature> 
    <feature name="File"> 
     <param name="ios-package" value="CDVFile" /> 
    </feature> 
    <feature name="NetworkStatus"> 
     <param name="ios-package" value="CDVConnection" /> 
    </feature> 
    <feature name="Notification"> 
     <param name="ios-package" value="CDVNotification" /> 
    </feature> 
    <feature name="FileTransfer"> 
     <param name="ios-package" value="CDVFileTransfer" /> 
    </feature> 
    <feature name="Capture"> 
     <param name="ios-package" value="CDVCapture" /> 
    </feature> 
    <feature name="Battery"> 
     <param name="ios-package" value="CDVBattery" /> 
    </feature> 
    <feature name="SplashScreen"> 
     <param name="ios-package" value="CDVSplashScreen" /> 
    </feature> 
    <feature name="Echo"> 
     <param name="ios-package" value="CDVEcho" /> 
    </feature> 
    <feature name="Globalization"> 
     <param name="ios-package" value="CDVGlobalization" /> 
    </feature> 
    <feature name="InAppBrowser"> 
     <param name="ios-package" value="CDVInAppBrowser" /> 
    </feature> 
    <feature name="Logger"> 
     <param name="ios-package" value="CDVLogger" /> 
    </feature> 
    <feature name="LocalStorage"> 
     <param name="ios-package" value="CDVLocalStorage" /> 
    </feature> 
    <plugins> 
    </plugins> 
    <preference name="KeyboardDisplayRequiresUserAction" value="true" /> 
    <preference name="SuppressesIncrementalRendering" value="false" /> 
    <preference name="UIWebViewBounce" value="true" /> 
    <preference name="TopActivityIndicator" value="gray" /> 
    <preference name="EnableLocation" value="false" /> 
    <preference name="EnableViewportScale" value="false" /> 
    <preference name="AutoHideSplashScreen" value="true" /> 
    <preference name="ShowSplashScreenSpinner" value="true" /> 
    <preference name="MediaPlaybackRequiresUserAction" value="false" /> 
    <preference name="AllowInlineMediaPlayback" value="false" /> 
    <preference name="OpenAllWhitelistURLsInWebView" value="false" /> 
    <preference name="BackupWebStorage" value="cloud" /> 
    <preference name="fullscreen" value="true" /> 
    <preference name="webviewbounce" value="true" /> 
    <access origin="*.googleapis.com"/> 
    <access origin="*.gstatic.com"/> 
    <access origin="*.s3.amazonaws.com"/> 
</widget> 

回答

4

我回去使用舊<plugin>格式。儘管它已被棄用,但它是唯一適用於我的方法。

<plugins> 
    <plugin name="Device" value="CDVDevice" /> 
    <plugin name="Logger" value="CDVLogger" /> 
    ... 
</plugins> 
+0

嘿,我總是發現每次使用新版本的Phonegap時都會設置一個新項目,並將我的文件複製回來。 – Jarrod

+0

我也是這樣做的,但不贊成的信息真的會讓我失望。太令人沮喪了。 – Calvin

+0

我做了同樣的工作,它的Facebook連接插件:

16

我有同樣的問題。我剛剛使用節點的包管理器下載了cordova 3.0命令行工具。然後,我使用終端工具創建我的項目,爲其添加平臺,並像這樣構建它。

cordova create myApp com.project.RobertW myApp 
cd myApp 
cordova platform add ios 
cordova platform add android 
cordova build 

之後,我在Xcode中看到了那些相同的錯誤,當我嘗試在模擬器中運行它時。在默認情況下,PhoneGap似乎並沒有在項目中包含任何插件,所以即使在你的配置文件中它們可能不會在插件文件夾中。您必須手動或通過命令行工具添加它們。我使用了命令行工具,因爲我認爲這很容易。

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git 
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git 
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git 
cordova build 

這樣做後,我再次在模擬器中運行myApp,一切正常。有在命令行工具一些很好的說明操作:

http://docs.phonegap.com/en/3.0.0/guide_cli_index.md.html#The%20Command-line%20Interface

我想認爲,如果PhoneGap的3.0需要記錄器,設備和網絡狀態,它會自動,但在我的情況下,它沒有包括那些插件不。希望這可以幫助。

編輯:在Xcode的iOS版本的config.xml中,您還需要進行此更改才能使Logger插件正常工作。以下是默認值。

<feature name="Console"> 
    <param name="ios-package" value="CDVLogger" /> 
</feature> 

更改上面這個

<feature name="Logger"> 
    <param name="ios-package" value="CDVLogger" /> 
</feature> 

現在所有控制檯的功能應該不會引發錯誤。

+2

大家好,我只是有與CDVDevice相同的問題。唯一可行的方法是創建一個新項目,重新添加插件(如圖所示),然後添加www文件夾中的現有代碼。然後它再次運作(耶)。 – Dominik

+0

我已經通過刪除ios平臺並重新添加它來解決了這個問題(當我更新了cordova 6.0.0 - > 6.1.1時出現了這個問題)。在創建新項目之前嘗試一下。 – Alexander

+0

它適用於我作爲我的console.log是我的一個空白屏幕的關鍵問題。謝謝,雨果 – user1802434

6

我與使用Phonegap 3.0.0的設備信息插件存在相同的問題。爲了解決這個問題,我只需卸載並重新安裝插件,然後重建我的項目。

phonegap local plugin remove org.apache.cordova.device 
phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git 
phonegap local build ios 
+0

使用科爾多瓦,卸載並重新安裝插件做了我的伎倆。 – rafaelbiten

2

自己碰到這個問題。發現通過CLI添加插件後,唯一的解決方案是運行cordova prepareprepare將必要的文件複製到platforms文件夾內的XCode項目。

我認爲這應該作爲build命令或plugin add命令的一部分完成,如果項目存在。也許這是一個錯誤,也許是故意的,但我找不到很多文檔。

Similar question with answers

30

對於未來的搜索者(像我一樣!),我有一個類似的問題試圖添加控制檯插件到我的項目。安裝插件後,我缺少的一步是確保插件(CDVlogger.m)的「目標成員資格」設置的源文件包含我的應用程序名稱。

+0

我很好奇可能導致插件文件沒有選中「目標成員」。我查看了其他擁有它的插件的plugin.xml文件,沒有什麼不同,我可以看到。 – inorganik

+0

我從相同的代碼構建了幾個應用程序,所以我在xcode項目中創建了多個目標。只有最初創建的默認目標文件在其成員資格中。所以我的科爾多瓦命令不知道他們。我承認我沒有深入瞭解配置。json或類似的東西,看看我是否有辦法在xcode項目中處理多個目標。但在xcode中手動添加它們是一個簡單的修復。 – Paul

+6

類似的工作對我來說:「在XCode中,轉到Build Phases - >打開Compiled Sources下拉菜單,點擊+並添加缺少的插件.m文件。」從http://stackoverflow.com/a/21148428/80254 – bjunix

1

我也有這個問題。我簡單地創建了自己的目錄(platforms/ios/appname/Plugins/org.apache.cordova.console),並將缺少的文件(CDVLLogger.h和CDVLLogger.m)複製到此目錄。然後編譯成功。

我使用科爾多瓦版本3.5

+0

你從哪裏得到這些文件? –

2

發生在我身上的PhoneGap的3.5和Xcode 6個

步驟:

phonegap plugin remove org.apache.cordova.camera 
phongap plugin add org.apache.cordova.camera 
phongap platform remove ios 
phongap build ios 

可能不是最好的解決方案 - 因爲你失去了你的Xcode設置 - 但它解決了這個問題。

2

在我的情況......該解決方案是添加這行代碼,我使用所有的插件。在我的config.xml

<feature name="Device"> 
    <param name="ios-package" value="CDVDevice" /> 
    <param name="onload" value="true" /> 
</feature> 

<feature name="FCMPlugin"> 
    <param name="ios-package" value="FCMPlugin" /> 
    <param name="onload" value="true" /> 
</feature> 

<feature name="StatusBar"> 
    <param name="ios-package" value="CDVStatusBar" /> 
    <param name="onload" value="true" /> 
</feature> 

<feature name="CDVLocation"> 
    <param name="ios-package" value="CDVLocation" /> 
    <param name="onload" value="true" /> 
</feature> 

<feature name="cordova.logger"> 
    <param name="ios-package" value="CDVLogger" /> 
    <param name="onload" value="true" /> 
</feature> 

<feature name="Logger"> 
    <param name="ios-package" value="CDVLogger" /> 
    <param name="onload" value="true" /> 
</feature> 

<feature name="Console"> 
    <param name="ios-package" value="CDVLogger" /> 
    <param name="onload" value="true" /> 
</feature> 


<feature name="SQLitePlugin"> 
    <param name="ios-package" value="SQLitePlugin" /> 
    <param name="onload" value="true" /> 
</feature> 

    <feature name="Keyboard"> 
    <param name="ios-package" value="IonicKeyboard" /> 
    <param name="onload" value="true" /> 
</feature> 
+1

此解決方案僅適用於我的案例。我有一些手動添加的插件,這解決了我的問題。謝謝! – olanchuy

0

如果您在使用離子然後試圖運行cordova run ios --device而不是得到這個錯誤ionic run ios --device它解決了我的問題。因爲該項目是一個離子1項目,我認爲離子cli v2正在搞亂。在更新Ionic cli之前,我沒有任何問題。

0

我有與SQLitePlugin非常相同的問題。我在這篇文章中嘗試了一些建議的解決方案,但他們中沒有一個完全爲我工作。然後我嘗試刪除平臺/ ios目錄(我正在爲iPhone開發),再次添加ios平臺(離子添加平臺ios)並重建項目。突然之間,一切都像魅力一樣。我不必創建一個新項目,也不必刪除插件。