Reputation: 1316
I'm starting to write a PhoneGap plugin for iOS, but I'm having trouble calling even a simple NSLog()
in my Objective C code through cordova.exec()
. With the recent release of PhoneGap 3.0 and the possibly confusing PhoneGap/Cordova naming, it's difficult to find resources online that provide any examples that are up-to-date or working.
Here is my barebones Objective C code:
// BLLog.h
#import <Cordova/CDV.h>
@interface BLLog : CDVPlugin
- (void)log:(CDVInvokedUrlCommand *)command;
@end
and
#import "BLLog.h"
@implementation BLLog
- (void)log:(CDVInvokedUrlCommand *)command
{
NSLog(@"Hey, it works!");
}
@end
My html/javascript is pretty much the same as the code generated from a phonegap create
with a few additions.
<html>
<head>
...
</head>
<body>
...
<script type="text/javascript" src="phonegap.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
document.addEventListener('deviceready', function () {
app.log();
}, false);
</script>
</body>
</html>
This code contains the cordova.exec()
:
var app = {
...
log: function () {
alert('log');
cordova.exec(function (){ console.log('success') }, function () { console.log('error') }, 'BLLog', 'log', []);
}
};
Here is my config.xml
:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.metaio.app" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>GapApp</name>
<description>
Hello World sample application that responds to the deviceready event.
</description>
<author email="[email protected]" href="http://phonegap.com">
PhoneGap Team
</author>
<feature name="http://api.phonegap.com/1.0/device" />
<preference name="permissions" value="none" />
<preference name="orientation" value="default" />
<preference name="target-device" value="universal" />
<preference name="fullscreen" value="true" />
<preference name="webviewbounce" value="true" />
<preference name="prerendered-icon" value="true" />
<preference name="stay-in-webview" value="false" />
<preference name="ios-statusbarstyle" value="black-opaque" />
<preference name="detect-data-types" value="true" />
<preference name="exit-on-suspend" value="false" />
<preference name="show-splash-screen-spinner" value="true" />
<preference name="auto-hide-splash-screen" value="true" />
<preference name="disable-cursor" value="false" />
<preference name="android-minSdkVersion" value="7" />
<preference name="android-installLocation" value="auto" />
<icon src="icon.png" />
<icon gap:density="ldpi" gap:platform="android" src="res/icon/android/icon-36-ldpi.png" />
<icon gap:density="mdpi" gap:platform="android" src="res/icon/android/icon-48-mdpi.png" />
<icon gap:density="hdpi" gap:platform="android" src="res/icon/android/icon-72-hdpi.png" />
<icon gap:density="xhdpi" gap:platform="android" src="res/icon/android/icon-96-xhdpi.png" />
<icon gap:platform="blackberry" src="res/icon/blackberry/icon-80.png" />
<icon gap:platform="blackberry" gap:state="hover" src="res/icon/blackberry/icon-80.png" />
<icon gap:platform="ios" height="57" src="res/icon/ios/icon-57.png" width="57" />
<icon gap:platform="ios" height="72" src="res/icon/ios/icon-72.png" width="72" />
<icon gap:platform="ios" height="114" src="res/icon/ios/icon-57-2x.png" width="114" />
<icon gap:platform="ios" height="144" src="res/icon/ios/icon-72-2x.png" width="144" />
<icon gap:platform="webos" src="res/icon/webos/icon-64.png" />
<icon gap:platform="winphone" src="res/icon/windows-phone/icon-48.png" />
<icon gap:platform="winphone" gap:role="background" src="res/icon/windows-phone/icon-173.png" />
<gap:splash gap:density="ldpi" gap:platform="android" src="res/screen/android/screen-ldpi-portrait.png" />
<gap:splash gap:density="mdpi" gap:platform="android" src="res/screen/android/screen-mdpi-portrait.png" />
<gap:splash gap:density="hdpi" gap:platform="android" src="res/screen/android/screen-hdpi-portrait.png" />
<gap:splash gap:density="xhdpi" gap:platform="android" src="res/screen/android/screen-xhdpi-portrait.png" />
<gap:splash gap:platform="blackberry" src="res/screen/blackberry/screen-225.png" />
<gap:splash gap:platform="ios" height="480" src="res/screen/ios/screen-iphone-portrait.png" width="320" />
<gap:splash gap:platform="ios" height="960" src="res/screen/ios/screen-iphone-portrait-2x.png" width="640" />
<gap:splash gap:platform="ios" height="1024" src="res/screen/ios/screen-ipad-portrait.png" width="768" />
<gap:splash gap:platform="ios" height="768" src="res/screen/ios/screen-ipad-landscape.png" width="1024" />
<gap:splash gap:platform="winphone" src="res/screen/windows-phone/screen-portrait.jpg" />
<feature name="BLLog" onload="true">
<param name="ios-package" value="BLLog" />
</feature>
<access origin="http://127.0.0.1*" />
</widget>
I also tried replacing the <feature>
tags with <plugin name="BLLog" value ="BLLog" \>
, but that didn't work either.
Finally, here is the XCode output:
2013-07-30 11:36:40.810 GapApp[407:907] ERROR: Plugin 'BLLog' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2013-07-30 11:36:40.812 GapApp[407:907] -[CDVCommandQueue executePending] [Line 116] FAILED pluginJSON = [
"BLLog870927167",
"BLLog",
"log",
[
]
]
Upvotes: 0
Views: 3083
Reputation: 26
I would suggest doing a search in github. Look at other plugins.
One thing that is confusing is they use the same names that xcode does. They maybe referencing the config.xml in the xcode project.
All of the plugins I saw on github were plugin.xml
https://github.com/sectore/phonegap3-native-ios-plugin?files=1
Take a look at this example. It may help.
Upvotes: 1
Reputation: 26
Is that your entire config.xml ?
I don't see declarations for PG Version or other required parameters.
I also thought it was suppose to be plugin.xml
<param name="ios-package" value="CDVLogger"/>
</feature>
</config-file>
<js-module src="www/console-via-logger.js" name="console">
<clobbers target="console" />
</js-module>
<js-module src="www/logger.js" name="logger">
<clobbers target="cordova.logger" />
</js-module>
<header-file src="src/ios/CDVLogger.h" />
<source-file src="src/ios/CDVLogger.m" />
</platform>
I am definitely not qualified to answer this. Just an observation.
Upvotes: 0