- Obfuscate code helps.
- JS Bundles - https://github.com/vesselsoft/metro-minify-obfuscator
- Android -
Proguard
/R8
- iOS - I dont know any that is open-source and works. Before deprecation,
BITCODE
was used. However there is a commercial one callediXGuard
. - JS are still easier to
decompile
/deobfuscate
thannative
, so ideally, if you can, the more you implement in thenative
side, the better. That's why one of the recommendations below is to use a single point of implementation, withRust
orC++
.
Jailbreak
/rooted
/emulator
checks, close app if detected.- https://github.com/react-native-device-info/react-native-device-info#isemulator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if (typeof String.prototype.parseFunction != 'function') { | |
String.prototype.parseFunction = function () { | |
var funcReg = /function *\(([^()]*)\)[ \n\t]*{(.*)}/gmi; | |
var match = funcReg.exec(this.replace(/\n/g, ' ')); | |
if(match) { | |
return new Function(match[1].split(','), match[2]); | |
} | |
return null; |
A commit should be a wrapper for related changes. For example, fixing two different bugs should produce two separate commits. Small commits make it easier for other developers to understand the changes and roll them back if something went wrong. With tools like the staging area and the ability to stage only parts of a file, Git makes it easy to create very granular commits.
Committing often keeps your commits small and, again, helps you commit only related changes. Moreover, it allows you to share your code more frequently with others. That way it‘s easier for everyone to integrate changes regularly and avoid having merge conflicts. Having large commits and sharing them infrequently, in contrast, makes it hard to solve conflicts.