Capawesome February 2025 Update¶
The Capawesome February update is here! This update includes new features and improvements for Capawesome Cloud and our Plugins. Let's take a look at the most important changes.
Cloud¶
Advanced Filtering¶
We have added advanced filtering to the Capawesome Cloud Console. This feature allows you to filter your bundles by various criteria, such as ID, channel, artifact type, and artifact status, making it easier to manage your live updates.
Force Code Signing¶
You can now enforce code signing for all bundles in your app. This feature ensures that all bundles are signed with a private key before they are uploaded to the Capawesome Cloud, making sure that no unsigned bundles are distributed to your users. You can enable this feature in the settings of your app through the Capawesome Cloud Console.
Self-Hosting¶
Check out the new Self-Hosting guide to learn how to self-host your Live Updates. This feature allows you to host the bundles on your server instead of Capawesome Cloud. This can be useful if you have specific security requirements, or if you want to avoid being affected by bandwidth or storage limitations.
Plugins¶
Android Edge-to-Edge Support¶
We have published a new Android Edge-to-Edge Support plugin to support edge-to-edge display on Android. This has been a real problem for many users who have updated to Capacitor 7, as Android 15 enforces the edge-to-edge display. This causes the web view to be displayed behind the status bar and navigation bar, which can lead to layout issues. The plugin restores the previous behavior and ensures that the web view is displayed correctly.
Firebase¶
App Check¶
The Firebase App Check plugin now supports all available providers. For this, a new provider
option has been added to the initialize(...)
method.
import { FirebaseAppCheck } from '@capacitor-firebase/app-check';
import { ReCaptchaV3Provider } from '@capacitor-firebase/app-check';
const initialize = async () => {
await FirebaseAppCheck.initialize({
provider: new ReCaptchaV3Provider('myKey');
});
};
Crashlytics¶
Custom Keys And Values¶
The Firebase Crashlytics plugin now supports custom keys and values for the recordException(...)
method. This allows you to attach additional information to an exception, such as user-specific data or metadata, making it easier to debug and analyze non-fatal exceptions.
import { FirebaseCrashlytics } from '@capacitor-firebase/crashlytics';
const recordException = async () => {
await FirebaseCrashlytics.recordException({
message: 'My error message',
customKeysAndValues: [
{
key: 'customKey1',
value: 'customValue1',
type: 'string',
},
{
key: 'customKey2',
value: 123,
type: 'int',
}
],
});
};
Live Update¶
Code Signing for Self-Hosted Bundles¶
The Live Update plugin now supports code signing for self-hosted bundles. Code signing was previously only available for bundles hosted on Capawesome Cloud. With this update, you can now also host your bundles on your server and ensure that only signed bundles are installed on your users' devices.
import { LiveUpdate } from '@capawesome-team/capacitor-live-update';
const downloadLatestBundle = async () => {
// Fetch the latest bundle from Capawesome Cloud
const { bundleId, downloadUrl, signature } = await LiveUpdate.fetchLatestBundle();
// Download the bundle from your server
await LiveUpdate.downloadBundle({
bundleId,
signature,
url: downloadUrl,
});
};
ML Kit¶
Barcode Scanning¶
Auto Focus¶
The ML Kit Barcode Scanning plugin now also supports auto-focus on iOS. This feature enables the camera to focus automatically on the barcode, making it easier to scan barcodes from various distances. You don't need to take any action to activate this feature; it is enabled automatically when you initiate the barcode scanning process.
Web Support¶
The ML Kit Barcode Scanning plugin now also supports the web platform. You can use the plugin in your web app to scan barcodes directly from the browser thanks to the Barcode Detection API.
import { BarcodeScanner } from '@capacitor-mlkit/barcode-scanning';
const startScan = async () => {
// Add the `barcodeScanned` listener
const listener = await BarcodeScanner.addListener(
'barcodeScanned',
async result => {
console.log(result.barcode);
},
);
// Start the barcode scanner
await BarcodeScanner.startScan({
videoElement: document.getElementById('video'),
});
};
Speech Synthesis¶
New synthesizeToFile(...)
method¶
The Speech Synthesis plugin now supports the synthesizeToFile(...)
method. This method allows you to synthesize text to an audio file and save it to the device. The audio file can be played back or shared with other apps.
import { SpeechSynthesis } from '@capawesome-team/capacitor-speech-synthesis';
const synthesizeToFile = async () => {
// Add an utterance to the utterance queue to be synthesized to a file
const { path, utteranceId } = await SpeechSynthesis.synthesizeToFile({
language: 'en-US',
pitch: 1.0,
queueStrategy: QueueStrategy.Add,
rate: 1.0,
text: 'Hello, World!',
voiceId: 'com.apple.ttsbundle.Samantha-compact',
volume: 1.0,
});
// Wait for the utterance to finish
await new Promise(resolve => {
void SpeechSynthesis.addListener('end', event => {
if (event.utteranceId === utteranceId) {
resolve();
}
});
});
// Return the path to the synthesized audio file
return path;
};