mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-14 11:14:08 +00:00
103 lines
3.1 KiB
JavaScript
103 lines
3.1 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;
|