Get Release Notes from Electron autoUpdater - electron

I am using Electron autoUpdater to update my app, with a private Github repo being the source.
It updates the app fine, but I cannot seem to get my release notes. Are these the description that can be typed in Github after publishing the release? If thats not the case how do I include release notes in new releases?
I have tried getting release notes from:
//info.releaseNotes
autoUpdater.on('update-downloaded', (info) =>
//notes
autoUpdater.on('update-downloaded', (info, notes) =>
//info.releaseNotes
autoUpdater.on('update-available', (info) =>
//notes
autoUpdater.on('update-available', (info, notes) =>
All of these log as undefined.
Edit:
Electron builder does not provide the Github body so how do I add release notes?

Github body cannot be gotten as of now, so release notes will need to be added directly from the application.
Add release-notes.md to resources folder, and write notes there.
In electron file,
autoUpdater.on('update-downloaded', (info) => {
//Get release notes
info.releaseNotes
This works in windows for me.

Related

How to save file with Capacitor on iOS?

I have the following code (adapted from this tutorial) that I use for saving files from backend:
import { FilesystemDirectory, Plugins } from '#capacitor/core';
const { Filesystem } = Plugins;
await Filesystem.writeFile({
path: "filename.txt",
data: "base64 data",
directory: FilesystemDirectory.Documents,
});
This codes works fine on Android, even creates the Documents directory in the root of internal storage. Unfortunately, on iOS no file is created, no mater what directory I use (I've tested it with Documents, Data and ExternalStorage).
When I put this code block inside try..catch, nothing is thrown, so the operation is supposedly completed successfully, just no file is saved. Tested on one Android device and two iOS.
iOS doesn't allow accessing file storage directly. I made it work with Ionic-native's FileOpener like this:
import { FileOpener } from '#ionic-native/file-opener/ngx';
import { FilesystemDirectory, Plugins } from '#capacitor/core';
const { Filesystem } = Plugins;
const result = await Filesystem.writeFile({
path: "filename.txt",
data: "base64 data",
directory: FilesystemDirectory.Documents,
});
this.fileOpener.showOpenWithDialog(result.uri, 'application/json')
It opens a dialog where you can select where to save your file. It's a bit confusing as the function's description is "Opens with system modal to open file with an already installed app" but saving works with it as well.
You need to also install cordova-plugin-file-opener2 and put ionic FileOpener to providers in app.module.ts. If you are not using Cordova otherwise, you don't need to do Cordova setups, it works alongside Capacitor as a separate plugin. As far as I'm aware, Capacitor doesn't provide a solution for downloading in iOS.
I've encountered the same problem (while having capacitor 4.2.0 only) and solved it by adding the following permissions in my Info.plist:
<key>UIFileSharingEnabled</key>
<string>YES</string>
<key>LSSupportsOpeningDocumentsInPlace</key>
<string>YES</string>
After this, using directory Directory.Documents has made me visible a Documents directory with the name of the app under the Files App.
Hope it helps.

why is sqlite plugin not working with cordova app on ios

I am building a cordova app for android and iOS that stores user information in a local database. However, I am unable to open a database connection on iOS.
The app works perfectly on android, but when I run it on iOS I get an error saying that window.sqlite is undefined. I have been searching the internet, but I can't find a related issue. I am not sure if my code has been setup incorrectly, or if I am missing some configuration for iOS. The SQLite plugin I am using "cordova-sqlite-evplus-legacy-free 0.9.1", and the cordova iOS version is "5.0.1".
db = window.sqlitePlugin.openDatabase({
name: 'test.db',
location: 'default',
//iosDatabaseLocation: 'Library'
},
function(db) {
if (clean_database) dumpDatabase();
else buildSchemaVersions();
},
function(error) {
db_error = error;
alert('Open database ERROR: ' + error.message);
})
First of all: I would strongly advise against using a plugin for which the last update has been made more than 2 years ago, especially if it is for something as important as the database of your app. It is very likely that it has not been properly tested on current version of iOS. Why not use the more active plugin cordova-sqlite-storage? I have been using this plugin for years now without any issues whatsoever (iOS and Android).
For the question itself:
Did you make sure to make the openDatabase call after the deviceready event?
Was the plugin correctly added to the iOS platform? Please try removing it and adding it again and look out for any errors when it is added to the iOS platform.

How to debug Electron main process after packaging?

I have created an Electron App(say MyApp). I have used electron-packager to pack the App. I installed the app in my local machine and I can see MyApp in the start menu. When I click on the Icon It launches the app but I am not able to debug it.
I can see the devtool
Electron version : "^5.0.7"
Electron Packager: "^12.2.0"
OS: Windows
Thanks in advance
I think the best way debug your main process would be to do so during development, i have found the information here on the Electron docs to be very useful https://electronjs.org/docs/tutorial/debugging-main-process
Also my Code Editor of choice is VSCode so i was able to use this link
https://electronjs.org/docs/tutorial/debugging-main-process-vscode
Its also good practice to have a Crash Reporter setup, Electron has the default one https://electronjs.org/docs/api/crash-reporter which also work great, but you can add other third party libraries like Bugsnag, Sentry or Backtrace.io.
Default Electron Crash Reporter
const { crashReporter } = require('electron')
crashReporter.start({
productName: 'YourName',
companyName: 'YourCompany',
submitURL: 'https://your-domain.com/url-to-submit',
uploadToServer: true
})
Using Sentry "You need an account for this option"
//You need to call init in your main and every renderer process you spawn.
import * as Sentry from '#sentry/electron';
Sentry.init({dsn:'https://<your-key-here>#sentry.io/15...5'});

How to link to phone settings from react native app

I'm creating an react-native app and I want to show and warning to user if their IOS version is < 11.0.
That works fine. I have something as follows:
What I want is to go the phone settings if they click on Go to settings.
The code for that is as follows:
Linking.canOpenURL('app-settings:').then(supported => {
if (!supported) {
console.log('Can\'t handle settings url');
} else {
return Linking.openURL('app-settings:');
}
}).catch(err => console.error('An error occurred', err));
Thus I try to do it with Linking.openURL('app-settings:'). But the problem is that that goes to the settings of my app, but I want to go to the settings index page or even better to system upgrade setting.
I need it only for IOS.
Any idea how can I do that?
You can no longer do that. You could use the URL App-Prefs:, which does what you want, but that will cause your app to be rejected upon review, because it's considered non-public URL scheme.
The only URL allowed by Apple is the constant UIApplicationOpenSettingsURLString, which takes you to your app's setting, not general settings of the device.

Open Settings App from another App in iOS - React Native

I'm going through the docs in React Native and can only find navigating to external links from the app I am in.
I want to be able to navigate to the Settings app (more specifically to the privacy > location services page) but, can not seem to find the necessary information on it. There is the native iOS way of doing it which I am trying to replicate through React Native.
Is this possible?
I have tried the following to detect if there is a Settings URL. The console logs that the Settings url works however, it does not navigate to that page.
Update: thanks to #zvona I am now navigating to the settings page but not sure how to get to a specific deep link.
Linking.canOpenURL('app-settings:').then(supported => {
console.log(`Settings url works`)
Linking.openURL('app-settings:'
}).catch(error => {
console.log(`An error has occured: ${error}`)
})
You can access settings of the application with:
Linking.openURL('app-settings:');
But I don't know (yet) how to open a specific deep-link.
2021 update use:
Linking.openSettings();
otherwise your app will be rejected due use of non-public URL scheme
I successfully opened the settings by the code below, hope it's helpful :)
Linking.canOpenURL('app-settings:').then(supported => {
if (!supported) {
console.log('Can\'t handle settings url');
} else {
return Linking.openURL('app-settings:');
}
}).catch(err => console.error('An error occurred', err));
Reference: https://facebook.github.io/react-native//docs/linking.html
Since React Native version 0.59 this should be possible using openSettings();. This is described in the React Native Linking documentation. Although it did not work for me. When I tried quickly I saw a _reactNative.Linking.openSettings is not a function error message.
Linking.openSettings();
You can deep-link referencing the settings's index like so:
Linking.openURL('app-settings:{index}')
For example Linking.openURL('app-settings:{3}') would open the Bluetooth settings.
Linking.openURL('app-settings:1');
Adding an answer that worked for me and is easy to apply.
openSettings function in #react-native-community/react-native-permissions works for both iOS and Android.
Calling openSettings function will direct the user to the settings page of your app.
import { openSettings } from 'react-native-permissions';
openSettings();
You can import Linking from 'react-native' and then use Linking.openSettings() to trigger the call. This link explains it very concisely:
https://til.hashrocket.com/posts/eyegh79kqs-how-to-open-the-settings-app-in-reactnative-060
For example: to navigate under Settings/Bluetooth you have to use Linking.openURL('App-Prefs:Bluetooth');
For iOS 14 and ReactNative 16.13
You can use the most easiest way to open the app setting from react-native.
just,
import { Linking } from 'react-native';
and user below line anywhere you want open the app setting.
Linking.openSettings();
Old question, but this didn't work for me on Android and I found something that did. Hope this helps anyone looking for the same. :)
https://github.com/lunarmayor/react-native-open-settings
I don't have the ability to test it for iOS though.
Opens the platform specific settings for the given application.
You can handle your case using Linking from react-native. In my case, I accessed the touch id settings on IOS using:-
Linking.openURL('App-Prefs:PASSCODE');

Resources