Ship google-services.json with ionic package builds - ios

Since I do not have Mac and iPhone, the only option for me is to use Ionic Cloud to build my native binaries. However, first I wanted to play with it and see how will it work with android builds.
My application uses https://github.com/fechanique/cordova-plugin-fcm
So I can build application with ionic cordova build android and run it on my emulator without any problems. However if I execute ionic package build android and then ionic package info I get message that my build FAILED.
Examine this failure with ionic package BUILD_ID I get this message:
Error: cordova-plugin-fcm: You have installed platform android but file 'google-services.json' was not found in your Cordova project root folder.
So, looks like that my google-services.json does not get uploaded to the cloud. So searching I find few posts of people that had same problem but none of them provided me with solution. I also found this:
https://cordova.apache.org/docs/en/latest/config_ref/index.html#resource-file
So I have tried to tell to ionic to include this google-services.json file with package like this:
<?xml version='1.0' encoding='utf-8'?>
<widget id="me.citybeep.partnerapp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<!-- ... -->
<platform name="android">
<!-- ... -->
<resource-file src="google-services.json" target="platforms/android/google-services.json" />
</platform>
<!-- ... -->
<engine name="android" spec="^6.2.3" />
<plugin name="cordova-plugin-device" spec="^1.1.4" />
<plugin name="cordova-plugin-fcm" spec="^2.1.2" />
<plugin name="cordova-plugin-splashscreen" spec="^4.0.3" />
<plugin name="cordova-plugin-statusbar" spec="^2.2.2" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.1" />
<plugin name="cordova-sqlite-storage" spec="^2.0.4" />
<plugin name="de.appplant.cordova.plugin.local-notification" spec="^0.8.5" />
<plugin name="ionic-plugin-keyboard" spec="^2.2.1" />
</widget>
And also tried this:
<resource-file src="google-services.json" target="google-services.json" />
But we no success, however now I get another message:
Adding android project...
Creating Cordova project for the Android platform:
Path: platforms/android
Package: me.citybeep.partnerapp
Name: City_Beep_Partner
Activity: MainActivity
Android target: android-25
Subproject Path: CordovaLib
Android project created with cordova-android#6.2.3
Error: Source path does not exist: google-services.json
I think this error is just that google-services.json did not get uploaded.
I am really dependent now on this plugin and using Ionic Push notifications is not an options at the moment...
So is there any way to tell ionic to include this google-services.json file when uploading to the cloud (and also .plist file). And I repeat, it is not problem with google-services.json file or my firebase project as everything works fine while performing build on my machine.

i tried several solutions, but the only one worked for me was specifying src and target with relative path of the google-services.json.
In your case change
<resource-file src="google-services.json" target="platforms/android/google-services.json" />
to
<resource-file src="platforms/android/google-services.json" target="platforms/android/google-services.json" />
this should work.

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>

Phonegap Build: cordova-plugin-contacts not loading

I am facing issues with my contacts plugin for last few days. While building application using PGB the contacts plugin is getting listed under plugin tab. But, while doing chrome inspect for my App, it is not getting loaded under android_assets/www/plugins folder. Due to which while trying to create object ContactFindOptions() under deviceready() ,I am facing Uncaught ReferenceError. Can someone please help. I have tested this on Android 5.1.1 and 6.0.1
Below are the screenshots.
PGB Plugins tab
Chrome Inspect Error and folder structure
config.xml
<!-- Core plugins -->
<plugin name="cordova-plugin-contacts" source="npm" />
<plugin name="cordova-plugin-calendar" source="npm" />
<plugin name="cordova-plugin-device" source="npm" />
<plugin name="cordova-plugin-globalization" source="npm" />
<plugin name="cordova-plugin-dialogs" source="npm" />
<plugin name="phonegap-plugin-push" spec="1.4.5" source="npm">
<param name="SENDER_ID" value=“##########” />
</plugin>
Got the solution.
The error is shown in the PGB log. Here, the latest version of cordova-plugin-contacts (3.0.1) is not compatible with PGB version (cli-6.5.0 Android 6.1.2), so need to downgrade the plugin.
spec="2.3.1" of cordova-plugin-contacts is compatible with cli-6.5.o of PGB.

Custom Cordova iOS plugin

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

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