spacedrive/apps/mobile/scripts/withRiveAssets.js
Utku b638fc2177
[MOB-37, MOB-38, MOB-39] Preview for PDF, Text and Media files (#2098)
* version & microphonePermission text & eslint

* remove polyfill as hermes supports intl now

* why do we have solid on mobile?

* cleanup

* add solid back =_=

* pnpm lock

* we hate relative paths here

* android config

* open file logic

* visual tweaks

---------

Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
2024-02-21 13:26:05 +00:00

90 lines
2.9 KiB
JavaScript

/*
* If you add an asset you need to run `npx expo prebuild`
* If you rename or delete an asset you need to run `npx expo prebuild --clean` to delete them in your android and ios folder as well.
*/
const { withDangerousMod, withXcodeProject, IOSConfig } = require('@expo/config-plugins');
const fs = require('fs');
const path = require('path');
// Specify the source directory of your assets
const ASSET_SOURCE_DIR = 'assets/rive';
const IOS_GROUP_NAME = 'Rivassets';
const withRiveAssets = (config) => {
config = addAndroidResources(config);
config = addIOSResources(config);
return config;
};
// Code inspired by https://github.com/rive-app/rive-react-native/issues/185#issuecomment-1593396573
function addAndroidResources(config) {
return withDangerousMod(config, [
'android',
async (config) => {
// Get the path to the Android project directory
const projectRoot = config.modRequest.projectRoot;
// Get the path to the Android resources directory
const resDir = path.join(projectRoot, 'android', 'app', 'src', 'main', 'res');
// Create the 'raw' directory if it doesn't exist
const rawDir = path.join(resDir, 'raw');
fs.mkdirSync(rawDir, { recursive: true });
// Get the path to the assets directory
const assetSourcePath = path.join(projectRoot, ASSET_SOURCE_DIR);
// Retrieve all files in the assets directory
const assetFiles = fs.readdirSync(assetSourcePath);
// Move each asset file to the resources 'raw' directory
for (const assetFile of assetFiles) {
const srcAssetPath = path.join(assetSourcePath, assetFile);
const destAssetPath = path.join(rawDir, assetFile);
fs.copyFileSync(srcAssetPath, destAssetPath);
}
return config;
}
]);
}
// Code inspired by https://github.com/expo/expo/blob/61f8cf8d4b3cf5f8bf61f346476ebdb4aff40545/packages/expo-font/plugin/src/withFontsIos.ts
function addIOSResources(config) {
return withXcodeProject(config, async (config) => {
const project = config.modResults;
const platformProjectRoot = config.modRequest.platformProjectRoot;
// Create Assets group in project
IOSConfig.XcodeUtils.ensureGroupRecursively(project, IOS_GROUP_NAME);
// Get riv filepaths
const projectRoot = config.modRequest.projectRoot;
const assetSourcePath = path.join(projectRoot, ASSET_SOURCE_DIR);
const assetFiles = fs.readdirSync(assetSourcePath);
const assetFilesPaths = assetFiles.map((assetFile) => `${assetSourcePath}/${assetFile}`);
// Add assets to group
addIOSResourceFile(project, platformProjectRoot, assetFilesPaths);
return config;
});
function addIOSResourceFile(project, platformRoot, assetFilesPaths) {
for (const riveFile of assetFilesPaths) {
const riveFilePath = path.relative(platformRoot, riveFile);
IOSConfig.XcodeUtils.addResourceFileToGroup({
filepath: riveFilePath,
groupName: IOS_GROUP_NAME,
project,
isBuildFile: true,
verbose: true
});
}
}
}
module.exports = withRiveAssets;