This README provides step-by-step instructions for integrating and using the ByteHide React Native Shield Plugin for obfuscating your React Native project's source code.
Install the plugin as a development dependency in your project:
npm install @bytehide/react-native-shield --save-dev
You can create a standalone script to perform obfuscation manually.
-
Create a script file in the root of your project, e.g.,
obfuscate.js
, and add the following:
const shield = require('@bytehide/react-native-shield');
const distDir = './dist'; // Path to the dist directory
const projectToken = 'your_project_token'; // Project token
const replace = true; // Whether to replace the original files or save as new files
const excludePatterns = []; // Patterns to exclude from obfuscation
const obfuscatedExtension = '.obf'; // Extension for obfuscated files
shield
.obfuscate(distDir, projectToken, replace, excludePatterns, obfuscatedExtension)
.then(() => console.log('Obfuscation completed successfully!'))
.catch((err) => console.error('Error during obfuscation:', err));
-
Run the script manually when needed:
node obfuscate.js
Include the obfuscation step as a script in your project's package.json
:
-
Modify
package.json
:"scripts": { "obfuscate": "node obfuscate.js" }
-
Execute the obfuscation script:
npm run obfuscate
-
Add a custom task to
android/app/build.gradle
:task obfuscateJs(type: Exec) { commandLine "node", "${project.rootDir}/obfuscate.js" } preBuild.dependsOn obfuscateJs
-
Go to Build Phases > + Add Run Script Phase in Xcode.
-
Add the following script:
node "$SRCROOT/../obfuscate.js"
You can integrate the obfuscation step as a custom React Native CLI command.
- Add the following to
react-native.config.js
:
module.exports = {
commands: [
{
name: 'obfuscate',
func: () => {
const shield = require('@bytehide/react-native-shield');
const distDir = './dist'; // Path to the dist directory
const projectToken = process.env.BYTEHIDE_PROJECT_TOKEN || 'your_project_token';
if (projectToken === 'your_project_token') {
console.error('Project token is required. Please provide it as an argument or set the BYTEHIDE_PROJECT_TOKEN environment variable.');
process.exit(1);
}
// Optional parameters: replace, excludePatterns, obfuscatedExtension
const replace = false; // If true, the original files will be replaced with the obfuscated files
const excludePatterns = []; // Patterns to exclude from obfuscation
const obfuscatedExtension = '.obf'; // Extension for obfuscated files
shield
.obfuscate(distDir, projectToken, replace, excludePatterns, obfuscatedExtension)
.then(() => console.log('Obfuscation completed successfully!'))
.catch((err) => console.error('Error during obfuscation:', err));
},
},
],
};
-
Run the command:
npx react-native obfuscate
You can use the bin
command to obfuscate your project.
npx @bytehide/react-native-shield obfuscate --src ./dist --projectToken your_project_token --replace false --obfuscatedExtension .obf --exclude "*.test.js, *.spec.js"
This command will obfuscate the files in the ./dist
directory, excluding any files matching the patterns *.test.js
and *.spec.js
.
If --replace
is set to true
, the original files will be replaced with the obfuscated files, omitting the --obfuscatedExtension
parameter.
MIT
Happy coding but keep it safe with @bytehide/react-native-shield
! 🛡️