Custom Cordova iOS plugin - ios

I'm new in developing with cordova and would like to add a custom written iOS plugin from file system. I use cordova version 4.3.0 with iOS version 3.8.0.
When trying to add the plugin with " $ cordova plugin add ../my_plugin_dir" I get the following error:
Error during processing of action! Attempting to revert...
Failed to install 'at.researchstudio.knowledgepulse.reminder':Error: Uh oh!
".../plugins/at.researchstudio.knowledgepulse.reminder/src/ios/Kpreminder.m" not found!
But the m-source file is in this folder!!! What am I doing wrong??
Plugin-Structure:
at.researchstudio.knowledgepulse.reminder/
plugin.xml
src/
ios/
Kpreminder.h
Kpreminder.m
www/
reminder.js
The plugin.xml looks like the following
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="at.researchstudio.knowledgepulse.reminder" version="0.0.1">
<name>Kpreminder</name>
<description>Reminder Functionalities for KP</description>
<keywords>KnowledgePulse reminder</keywords>
<js-module src="www/reminder.js" name="reminder">
<clobbers target="reminder" />
</js-module>
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="Kpreminder">
<param name="ios-package" value="Kpreminder"/>
</feature>
</config-file>
<header-file src="src/ios/Kpreminder.h" />
<source-file src="src/ios/Kpreminder.m" />
</platform>
</plugin>

I think you may put you plugin in 'plugins'folder,put into other folder
like $project_folder/myplugins/at.researchstudio.knowledgepulse.reminder
then install it

Related

How to properly reference an iOS 3rd party framework in Ionic/Cordova build so it doesn't throw dyld: Library not loaded: #rpath error

I have an Ionic5 (cli 6.3.0)/Cordova 9.0.3 (cordova-lib#9.0.2) project that uses plugins.
I am attempting to create a custom plugin for a 3rd party framework.
I know the skeleton of the plugin is correct since I created it with Plugman and before adding the framework I could build/run and get feedback that "coolMethod" had been run from Objective-C file.
Even after adding the framework, I can get the plugin to install correctly with ionic cordova plugin add ./packages/cordova-plugin-my-custom-stuff
I can get Ionic/Cordova to build the iOS project successfully with ionic cordova build ios
But when I try to run the iOS emulator from either Ionic command line ionic cordova run ios or from auto-generated xCode project, I get
dyld: Library not loaded: #rpath/MyThirdPartySDK.framework/MyThirdPartySDK
Referenced from: /Users/myUser/Library/Developer/CoreSimulator/Devices/C9E28EFF-B017-4F5E-
BA89-5200AE5D64EA/data/Containers/Bundle/Application/775C8394-B014-4B01-89CA-
1D462FD54F4A/MyName Mobile-UAT.app/MyName Mobile-UAT
Reason: image not found
The structure of the project (condensed for clarity) is like so:
MyProject
-node_modules
-packages
-cordova-plugin-my-custom-stuff
-src
-ios
MyCustomStuff.m
-MyThirdPartySDK.framework
-Headers
MobileAPI.h
MyThirdPartySDK.h
-Modules
module.modulemap
MyThirdPartySDK
-www
cordova-plugin-my-custom-stuff.js
package.json
plugin.xml
The plugin.xml ios section looks like:
<platform name="ios">
<config-file parent="/*" target="config.xml">
<feature name="MyCustomStuff">
<param name="ios-package" value="MyCustomStuff"/>
</feature>
</config-file>
<source-file src="src/ios/MyCustomStuff.m"/>
<source-file src="src/ios/MyCustomStuffSDK.framework" framework="true"/>
<header-file src="src/ios/MyCustomStuffSDK.framework/Headers/MobileAPI.h" target-dir="MyCustomStuff" />
</platform>
I am looking for a solution that resides within the plugin.xml configuration or some other ionic /cordovaproject configuration. I would like to avoid editing the xCode project as this is all generated "automagically" by the ionic/cordova command line.
Finally figured it out.
<platform name="ios">
<config-file parent="/*" target="config.xml">
<feature name="MyCustomPlugin">
<param name="ios-package" value="MyCustomPlugin"/>
</feature>
</config-file>
<source-file src="src/ios/MyCustomPlugin.m"/>
<source-file src="src/ios/MyCustomPlugin.framework" target-dir="lib" framework="true" />
<framework src="src/ios/MyCustomPlugin.framework" embed="true" custom="true" />
<header-file src="src/ios/MyCustomPlugin.framework/Headers/MobileAPI.h" target-dir="MyCustomPlugin" />
</platform>

File Not Found Bridging Header Ionic Cordova

I have an Ionic Cordova application with a custom plugin and when running I am getting this error:
/Users/brendanwinter/Desktop/ionic/platforms/ios/MyApp/Bridging-Header.h:31:9: error: 'ProjectSDK/ProjectSDK.h' file not found
#import <ProjectSDK/ProjectSDK.h>
^
<unknown>:0: error: failed to import bridging header '/Users/brendanwinter/Desktop/ionic/platforms/ios/MyApp/Bridging-Header.h'
It seems the error is here:
error: 'ProjectSDK/ProjectSDK.h' file not found
#import <ProjectSDK/ProjectSDK.h>
I am using
cordova-plugin-swift-support plugin
ProjectSDK-Bridging-Header.h file in plugin folder contains:
#import <ProjectSDK/ProjectSDK.h>
plugin.xml contains
<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-projectsdkplugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<name>ProjectSDKPlugin</name>
<js-module name="ProjectSDKPlugin" src="www/ProjectSDKPlugin.js">
<clobbers target="projectsdk" />
</js-module>
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="ProjectSDK">
<param name="ios-package" value="ProjectSDK" />
</feature>
</config-file>
<framework src="src/ios/ProjectSDK.framework" custom="true" />
<header-file src="src/ios/ProjectSDK-Bridging-Header.h" />
<source-file src="src/ios/ProjectSDK.swift" />
</platform>
</plugin>
It runs using Xcode but when running ionic cordova run ios it gives the error above.
What directory does the Bridging Header pull from?
I have tried putting the framework at the same level as Bridging-Header, and ProjectSDK-Bridging-Header, but does not work.
Thank you!

Cordova iOS Cross origin requests are only supported for HTTP

I'm building an iOS app and recently upgraded cordova-ios to 4.1.0 and started using: cordova-plugin-wkwebview-engine.
The problem is that now I get the error message Cross origin requests are only supported for HTTP while trying to load dependencies, so the app won't start.
It's trying to load systemjs dependencies over file://, but I included in my config.js.
I have no clue how to fix this. Does anyone have experience with this bevaviour?
cordova version: 6.1,0
cordova ios version: 4.1.0
related config.xml bit:
<access origin="*" />
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine" />
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
Install this one plugin (cordova-ios 6+)
cordova plugin add https://github.com/globules-io/cordova-plugin-ios-xhr
then set
<preference name="AllowUntrustedCerts" value="true" />
<preference name="InterceptRemoteRequests" value="all" />
<preference name="allowFileAccessFromFileURLs" value="true" />
<preference name="allowUniversalAccessFromFileURLs" value="true" />
Install the following plugins:
cordova plugin add cordova-plugin-wkwebview-engine
cordova plugin add cordova-plugin-wkwebview-file-xhr
cordova plugin add https://github.com/TheMattRay/cordova-plugin-wkwebviewxhrfix
Add to config.xml:
<platform name="ios">
...
<preference name="WKWebViewOnly" value="true"/>
...
</platform>
For Cordova iOS 6+ just need to install the following plugin.
cordova plugin add https://github.com/AraHovakimyan/cordova-plugin-wkwebviewxhrfix
This plugin does not depend on any other additional plugins and does not require additional permissions.
I had the same issue with my cordova project (actually Ionic v1) and I fix it with the following command:
cordova plugin add https://github.com/apache/cordova-plugins.git#wkwebview-engine-localhost
This will install a webserver that runs locally and the error should be gone after that. After you run that command, just run:
cordova prepare ios
or remove all plugins and reinstall:
rm -rf plugins/
cordova platform add ios
Make sure you have this in your config.xml:
<access origin="*" />
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine" />
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
If you work with cordova-ios ^6.0.0. you need only to modify your config.xml file:
<platform name="ios">
...
<preference name="scheme" value="app" />
<preference name="hostname" value="localhost" />
...
</platform>
No need to install any additional plugins.
See Cordova iOS 6.0.0 Released for more info.
I had the same issue with my ionic v1 Cordova project. For me the solution was to migrate to capacitor, like this:
Start a New Ionic v1 project (% ionic start Bienchen blank --type ionic1)
Answer "yes" when the cli asked if to integrate "capacitor".
Checkout my Sources to the www-folder of the new Ionic v1 project
Build the project with capacitor (% ionic capacitor build iOS)
Keep in mind the the Cordova config.xml than is not longer used, instead configure in Xcode Project.

Xcode PhoneGap navigator.connection Undefined

Trying to port my PhoneGap javascript code into Xcode for debugging in iOS.
Using Cordova-3.0.0.
When I call:
navigator.connection.type
I am getting an 'undefined' for navigator.connection.
Did I not include the network connection plugin correctly in my config.xml, or is something else amiss? Yes, I included the correct cordova.js file specifically for iOS. Yes, deviceready has been fired.
Update: I am currently only running this on the iOS emulator.
My config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.app.test" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Hello Cordova</name>
<description>
Description
</description>
<author email="dev#callback.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<access origin="*" />
<preference name="fullscreen" value="true" />
<preference name="webviewbounce" value="true" />
<plugins>
<plugin name="NetworkStatus" value="CDVConnection" />
</plugins>
</widget>
Thank you for your help!
Been doing my research on this one, and finally came up with the solution.
Apparently PhoneGap (Adobe) recently updated their documentation, and filled in a lot of the holes I was running into for Phonegap 3.0.0
1) To do this using the command-line interface, you have to have git installed to be able to run those commands. Get git here.
2) They added to the Connection plugin documentation to use the following command-line interface commands to add the plugin to the project:
$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
$ cordova plugin rm org.apache.cordova.core.network-information
3) They updated the declaration in the config.xml file to the following (for iOS):
<feature name="NetworkStatus">
<param name="ios-package" value="CDVConnection" />
</feature>
If you simply want to know if you are connected or not try using navigator.onLine in your js instead. Works for me on IOS 8 & Android 2.3 and doesn't require any plugins

"PushPlugin not found" using Cordova 2.5 for iOS

I am using PushPlugin https://github.com/phonegap-build/PushPlugin and Cordova 2.5 for an iOS applicaiton.
In my Plugins folder I have these files:
Appdelegate+notification.h
Appdelegate+notification.m
PushPlugin.h
PushPlugin.m
In config.xml I have included the plugin like this:
<plugin name="PushPlugin" value="PushPlugin" />
I have also PushNotification.js in my www folder and included that in index.html.
When I run the application and execute the line in my push.js file:
pushNotification.register(this.tokenHandler,this.errorHandler, {"badge":"true","sound":"true","alert":"true","ecb":app.onNotificationAPN"});
Then I get this error:
Error: Plugin 'PushPlugin' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml
Is PushPlugin compatible with Cordova 2.5?
I had this same issue when trying to get the pushplugin to work. I got it working by putting this block of code inside the config.xml (not the one in the www folder, but the one in the project folder)
<!-- ios -->
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="PushPlugin">
<param name="ios-package" value="PushPlugin"/>
</feature>
</config-file>
<source-file src="src/ios/AppDelegate+notification.m" />
<source-file src="src/ios/PushPlugin.m" />
<header-file src="src/ios/AppDelegate+notification.h" />
<header-file src="src/ios/PushPlugin.h" />
</platform>
If you download the sample project from git, there's a file called plugin.xml that has a bunch of stuff that needs to be added to the xml (I think).
Hope that helps.

Resources