14 |
15 | static char encodingTable[64] = {
16 | 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
17 | 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
18 | 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
19 | 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' };
20 |
21 | @implementation NSData (Base64)
22 |
23 | + (NSData *) dataWithBase64EncodedString:(NSString *) string {
24 | NSData *result = [[NSData alloc] initWithBase64EncodedString:string];
25 | return [result autorelease];
26 | }
27 |
28 | - (id) initWithBase64EncodedString:(NSString *) string {
29 | NSMutableData *mutableData = nil;
30 |
31 | if( string ) {
32 | unsigned long ixtext = 0;
33 | unsigned long lentext = 0;
34 | unsigned char ch = 0;
35 | unsigned char inbuf[3], outbuf[4];
36 | short i = 0, ixinbuf = 0;
37 | BOOL flignore = NO;
38 | BOOL flendtext = NO;
39 | NSData *base64Data = nil;
40 | const unsigned char *base64Bytes = nil;
41 |
42 | // Convert the string to ASCII data.
43 | base64Data = [string dataUsingEncoding:NSASCIIStringEncoding];
44 | base64Bytes = [base64Data bytes];
45 | mutableData = [NSMutableData dataWithCapacity:[base64Data length]];
46 | lentext = [base64Data length];
47 |
48 | while( YES ) {
49 | if( ixtext >= lentext ) break;
50 | ch = base64Bytes[ixtext++];
51 | flignore = NO;
52 |
53 | if( ( ch >= 'A' ) && ( ch <= 'Z' ) ) ch = ch - 'A';
54 | else if( ( ch >= 'a' ) && ( ch <= 'z' ) ) ch = ch - 'a' + 26;
55 | else if( ( ch >= '0' ) && ( ch <= '9' ) ) ch = ch - '0' + 52;
56 | else if( ch == '+' ) ch = 62;
57 | else if( ch == '=' ) flendtext = YES;
58 | else if( ch == '/' ) ch = 63;
59 | else flignore = YES;
60 |
61 | if( ! flignore ) {
62 | short ctcharsinbuf = 3;
63 | BOOL flbreak = NO;
64 |
65 | if( flendtext ) {
66 | if( ! ixinbuf ) break;
67 | if( ( ixinbuf == 1 ) || ( ixinbuf == 2 ) ) ctcharsinbuf = 1;
68 | else ctcharsinbuf = 2;
69 | ixinbuf = 3;
70 | flbreak = YES;
71 | }
72 |
73 | inbuf [ixinbuf++] = ch;
74 |
75 | if( ixinbuf == 4 ) {
76 | ixinbuf = 0;
77 | outbuf [0] = ( inbuf[0] << 2 ) | ( ( inbuf[1] & 0x30) >> 4 );
78 | outbuf [1] = ( ( inbuf[1] & 0x0F ) << 4 ) | ( ( inbuf[2] & 0x3C ) >> 2 );
79 | outbuf [2] = ( ( inbuf[2] & 0x03 ) << 6 ) | ( inbuf[3] & 0x3F );
80 |
81 | for( i = 0; i < ctcharsinbuf; i++ )
82 | [mutableData appendBytes:&outbuf[i] length:1];
83 | }
84 |
85 | if( flbreak ) break;
86 | }
87 | }
88 | }
89 |
90 | self = [self initWithData:mutableData];
91 | return self;
92 | }
93 |
94 | - (NSString *) base64EncodingWithLineLength:(unsigned int) lineLength {
95 | const unsigned char *bytes = [self bytes];
96 | NSMutableString *result = [NSMutableString stringWithCapacity:[self length]];
97 | unsigned long ixtext = 0;
98 | unsigned long lentext = [self length];
99 | long ctremaining = 0;
100 | unsigned char inbuf[3], outbuf[4];
101 | short i = 0;
102 | short charsonline = 0, ctcopy = 0;
103 | unsigned long ix = 0;
104 |
105 | while( YES ) {
106 | ctremaining = lentext - ixtext;
107 | if( ctremaining <= 0 ) break;
108 |
109 | for( i = 0; i < 3; i++ ) {
110 | ix = ixtext + i;
111 | if( ix < lentext ) inbuf[i] = bytes[ix];
112 | else inbuf [i] = 0;
113 | }
114 |
115 | outbuf [0] = (inbuf [0] & 0xFC) >> 2;
116 | outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4);
117 | outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6);
118 | outbuf [3] = inbuf [2] & 0x3F;
119 | ctcopy = 4;
120 |
121 | switch( ctremaining ) {
122 | case 1:
123 | ctcopy = 2;
124 | break;
125 | case 2:
126 | ctcopy = 3;
127 | break;
128 | }
129 |
130 | for( i = 0; i < ctcopy; i++ )
131 | [result appendFormat:@"%c", encodingTable[outbuf[i]]];
132 |
133 | for( i = ctcopy; i < 4; i++ )
134 | [result appendFormat:@"%c",'='];
135 |
136 | ixtext += 3;
137 | charsonline += 4;
138 |
139 | if( lineLength > 0 ) {
140 | if (charsonline >= lineLength) {
141 | charsonline = 0;
142 | [result appendString:@"\n"];
143 | }
144 | }
145 | }
146 |
147 | return result;
148 | }
149 |
150 | @end
--------------------------------------------------------------------------------
/example/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
77 |
83 |
84 |
85 |
86 |
87 |
88 |
94 |
96 |
102 |
103 |
104 |
105 |
107 |
108 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/example/example/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # For Cygwin, ensure paths are in UNIX format before anything is touched.
46 | if $cygwin ; then
47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
48 | fi
49 |
50 | # Attempt to set APP_HOME
51 | # Resolve links: $0 may be a link
52 | PRG="$0"
53 | # Need this for relative symlinks.
54 | while [ -h "$PRG" ] ; do
55 | ls=`ls -ld "$PRG"`
56 | link=`expr "$ls" : '.*-> \(.*\)$'`
57 | if expr "$link" : '/.*' > /dev/null; then
58 | PRG="$link"
59 | else
60 | PRG=`dirname "$PRG"`"/$link"
61 | fi
62 | done
63 | SAVED="`pwd`"
64 | cd "`dirname \"$PRG\"`/" >&-
65 | APP_HOME="`pwd -P`"
66 | cd "$SAVED" >&-
67 |
68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
69 |
70 | # Determine the Java command to use to start the JVM.
71 | if [ -n "$JAVA_HOME" ] ; then
72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
73 | # IBM's JDK on AIX uses strange locations for the executables
74 | JAVACMD="$JAVA_HOME/jre/sh/java"
75 | else
76 | JAVACMD="$JAVA_HOME/bin/java"
77 | fi
78 | if [ ! -x "$JAVACMD" ] ; then
79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
80 |
81 | Please set the JAVA_HOME variable in your environment to match the
82 | location of your Java installation."
83 | fi
84 | else
85 | JAVACMD="java"
86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
87 |
88 | Please set the JAVA_HOME variable in your environment to match the
89 | location of your Java installation."
90 | fi
91 |
92 | # Increase the maximum file descriptors if we can.
93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
94 | MAX_FD_LIMIT=`ulimit -H -n`
95 | if [ $? -eq 0 ] ; then
96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
97 | MAX_FD="$MAX_FD_LIMIT"
98 | fi
99 | ulimit -n $MAX_FD
100 | if [ $? -ne 0 ] ; then
101 | warn "Could not set maximum file descriptor limit: $MAX_FD"
102 | fi
103 | else
104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
105 | fi
106 | fi
107 |
108 | # For Darwin, add options to specify how the application appears in the dock
109 | if $darwin; then
110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
111 | fi
112 |
113 | # For Cygwin, switch paths to Windows format before running java
114 | if $cygwin ; then
115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158 | function splitJvmOpts() {
159 | JVM_OPTS=("$@")
160 | }
161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
163 |
164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
165 |
--------------------------------------------------------------------------------
/example/example/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 |
3 | import com.android.build.OutputFile
4 |
5 | /**
6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
7 | * and bundleReleaseJsAndAssets).
8 | * These basically call `react-native bundle` with the correct arguments during the Android build
9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
10 | * bundle directly from the development server. Below you can see all the possible configurations
11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the
12 | * `apply from: "../../node_modules/react-native/react.gradle"` line.
13 | *
14 | * project.ext.react = [
15 | * // the name of the generated asset file containing your JS bundle
16 | * bundleAssetName: "index.android.bundle",
17 | *
18 | * // the entry file for bundle generation
19 | * entryFile: "index.android.js",
20 | *
21 | * // whether to bundle JS and assets in debug mode
22 | * bundleInDebug: false,
23 | *
24 | * // whether to bundle JS and assets in release mode
25 | * bundleInRelease: true,
26 | *
27 | * // whether to bundle JS and assets in another build variant (if configured).
28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
29 | * // The configuration property can be in the following formats
30 | * // 'bundleIn${productFlavor}${buildType}'
31 | * // 'bundleIn${buildType}'
32 | * // bundleInFreeDebug: true,
33 | * // bundleInPaidRelease: true,
34 | * // bundleInBeta: true,
35 | *
36 | * // the root of your project, i.e. where "package.json" lives
37 | * root: "../../",
38 | *
39 | * // where to put the JS bundle asset in debug mode
40 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
41 | *
42 | * // where to put the JS bundle asset in release mode
43 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
44 | *
45 | * // where to put drawable resources / React Native assets, e.g. the ones you use via
46 | * // require('./image.png')), in debug mode
47 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
48 | *
49 | * // where to put drawable resources / React Native assets, e.g. the ones you use via
50 | * // require('./image.png')), in release mode
51 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
52 | *
53 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
54 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
55 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle
56 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
57 | * // for example, you might want to remove it from here.
58 | * inputExcludes: ["android/**", "ios/**"]
59 | * ]
60 | */
61 |
62 | apply from: "../../node_modules/react-native/react.gradle"
63 |
64 | /**
65 | * Set this to true to create two separate APKs instead of one:
66 | * - An APK that only works on ARM devices
67 | * - An APK that only works on x86 devices
68 | * The advantage is the size of the APK is reduced by about 4MB.
69 | * Upload all the APKs to the Play Store and people will download
70 | * the correct one based on the CPU architecture of their device.
71 | */
72 | def enableSeparateBuildPerCPUArchitecture = false
73 |
74 | /**
75 | * Run Proguard to shrink the Java bytecode in release builds.
76 | */
77 | def enableProguardInReleaseBuilds = false
78 |
79 | android {
80 | compileSdkVersion 23
81 | buildToolsVersion "23.0.1"
82 |
83 | defaultConfig {
84 | applicationId "com.example"
85 | minSdkVersion 16
86 | targetSdkVersion 22
87 | versionCode 1
88 | versionName "1.0"
89 | ndk {
90 | abiFilters "armeabi-v7a", "x86"
91 | }
92 | }
93 | splits {
94 | abi {
95 | reset()
96 | enable enableSeparateBuildPerCPUArchitecture
97 | universalApk false // If true, also generate a universal APK
98 | include "armeabi-v7a", "x86"
99 | }
100 | }
101 | buildTypes {
102 | release {
103 | minifyEnabled enableProguardInReleaseBuilds
104 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
105 | }
106 | }
107 | // applicationVariants are e.g. debug, release
108 | applicationVariants.all { variant ->
109 | variant.outputs.each { output ->
110 | // For each separate APK per architecture, set a unique version code as described here:
111 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
112 | def versionCodes = ["armeabi-v7a":1, "x86":2]
113 | def abi = output.getFilter(OutputFile.ABI)
114 | if (abi != null) { // null for the universal-debug, universal-release variants
115 | output.versionCodeOverride =
116 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
117 | }
118 | }
119 | }
120 | }
121 |
122 | dependencies {
123 | compile project(':react-native-aes-encryption')
124 | compile fileTree(dir: "libs", include: ["*.jar"])
125 | compile "com.android.support:appcompat-v7:23.0.1"
126 | compile "com.facebook.react:react-native:+" // From node_modules
127 | }
128 |
129 | // Run this once to be able to run the application with BUCK
130 | // puts all compile dependencies into folder libs for BUCK to use
131 | task copyDownloadableDepsToLibs(type: Copy) {
132 | from configurations.compile
133 | into 'libs'
134 | }
135 |
--------------------------------------------------------------------------------
/ios/ReactAES/CryptLib.m:
--------------------------------------------------------------------------------
1 | /*****************************************************************
2 | * CrossPlatform CryptLib
3 | *
4 | *
5 | * This cross platform CryptLib uses AES 256 for encryption. This library can
6 | * be used for encryptoion and de-cryption of string on iOS, Android and Windows
7 | * platform.
8 | * Features:
9 | * 1. 256 bit AES encryption
10 | * 2. Random IV generation.
11 | * 3. Provision for SHA256 hashing of key.
12 | *
13 | *
14 | * @since 1.0
15 | * @author navneet
16 | *****************************************************************/
17 | // How to use :
18 | // // 1. Encryption:
19 |
20 | // NSString * _secret = @"This the sample text has to be encrypted"; // this is the text that you want to encrypt.
21 |
22 | // NSString * _key = @"shared secret"; //secret key for encryption. To make encryption stronger, we will not use this key directly. We'll first hash the key next step and then use it.
23 |
24 | // key = [[StringEncryption alloc] sha256:key length:32]; //this is very important, 32 bytes = 256 bit
25 |
26 | // NSString * iv = [[[[StringEncryption alloc] generateRandomIV:11] base64EncodingWithLineLength:0] substringToIndex:16]; //Here we are generating random initialization vector (iv). Length of this vector = 16 bytes = 128 bits
27 |
28 | // Now that we have input text, hashed key and random IV, we are all set for encryption:
29 | // NSData * encryptedData = [[StringEncryption alloc] encrypt:[secret dataUsingEncoding:NSUTF8StringEncoding] key:key iv:iv];
30 |
31 | // NSLog(@"encrypted data:: %@", [encryptedData base64EncodingWithLineLength:0]); //print the encrypted text
32 | // Encryption = [plainText + secretKey + randomIV] = Cyphertext
33 |
34 | // // 2. Decryption
35 | // for decryption, you will have to use the same IV and key which was used for encryption.
36 |
37 | // encryptedData = [[StringEncryption alloc] decrypt:encryptedData key:key iv:iv];
38 | // NSString * decryptedText = [[NSString alloc] initWithData:encryptedData encoding:NSUTF8StringEncoding];
39 | // NSLog(@"decrypted data:: %@", decryptedText); //print the decrypted text
40 |
41 | // For base64EncodingWithLineLength refer - https://github.com/jdg/MGTwitterEngine/blob/master/NSData%2BBase64.m
42 |
43 |
44 | #import "CryptLib.h"
45 | #import "NSData+Base64.h"
46 |
47 |
48 | @implementation StringEncryption
49 |
50 | - (NSData *)encrypt:(NSData *)plainText key:(NSString *)key iv:(NSString *)iv {
51 | char keyPointer[kCCKeySizeAES256+2],// room for terminator (unused) ref: https://devforums.apple.com/message/876053#876053
52 | ivPointer[kCCBlockSizeAES128+2];
53 | BOOL patchNeeded;
54 | bzero(keyPointer, sizeof(keyPointer)); // fill with zeroes for padding
55 | //key = [[StringEncryption alloc] md5:key];
56 | patchNeeded= ([key length] > kCCKeySizeAES256+1);
57 | if(patchNeeded)
58 | {
59 | NSLog(@"Key length is longer %lu", (unsigned long)[[[StringEncryption alloc] md5:key] length]);
60 | key = [key substringToIndex:kCCKeySizeAES256]; // Ensure that the key isn't longer than what's needed (kCCKeySizeAES256)
61 | }
62 |
63 | //NSLog(@"md5 :%@", key);
64 | [key getCString:keyPointer maxLength:sizeof(keyPointer) encoding:NSUTF8StringEncoding];
65 | [iv getCString:ivPointer maxLength:sizeof(ivPointer) encoding:NSUTF8StringEncoding];
66 |
67 | if (patchNeeded) {
68 | keyPointer[0] = '\0'; // Previous iOS version than iOS7 set the first char to '\0' if the key was longer than kCCKeySizeAES256
69 | }
70 |
71 | NSUInteger dataLength = [plainText length];
72 |
73 | //see https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/CCryptorCreateFromData.3cc.html
74 | // For block ciphers, the output size will always be less than or equal to the input size plus the size of one block.
75 | size_t buffSize = dataLength + kCCBlockSizeAES128;
76 | void *buff = malloc(buffSize);
77 |
78 | size_t numBytesEncrypted = 0;
79 | //refer to http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-36064/CommonCrypto/CommonCryptor.h
80 | //for details on this function
81 | //Stateless, one-shot encrypt or decrypt operation.
82 | CCCryptorStatus status = CCCrypt(kCCEncrypt, /* kCCEncrypt, etc. */
83 | kCCAlgorithmAES128, /* kCCAlgorithmAES128, etc. */
84 | kCCOptionPKCS7Padding, /* kCCOptionPKCS7Padding, etc. */
85 | keyPointer, kCCKeySizeAES256, /* key and its length */
86 | ivPointer, /* initialization vector - use random IV everytime */
87 | [plainText bytes], [plainText length], /* input */
88 | buff, buffSize,/* data RETURNED here */
89 | &numBytesEncrypted);
90 | if (status == kCCSuccess) {
91 | return [NSData dataWithBytesNoCopy:buff length:numBytesEncrypted];
92 | }
93 |
94 | free(buff);
95 | return nil;
96 | }
97 |
98 |
99 | -(NSData *)decrypt:(NSData *)encryptedText key:(NSString *)key iv:(NSString *)iv {
100 | char keyPointer[kCCKeySizeAES256+2],// room for terminator (unused) ref: https://devforums.apple.com/message/876053#876053
101 | ivPointer[kCCBlockSizeAES128+2];
102 | BOOL patchNeeded;
103 |
104 | patchNeeded = ([key length] > kCCKeySizeAES256+1);
105 | if(patchNeeded)
106 | {
107 | NSLog(@"Key length is longer %lu", (unsigned long)[[[StringEncryption alloc] md5:key] length]);
108 | key = [key substringToIndex:kCCKeySizeAES256]; // Ensure that the key isn't longer than what's needed (kCCKeySizeAES256)
109 | }
110 |
111 | [key getCString:keyPointer maxLength:sizeof(keyPointer) encoding:NSUTF8StringEncoding];
112 | [iv getCString:ivPointer maxLength:sizeof(ivPointer) encoding:NSUTF8StringEncoding];
113 |
114 | if (patchNeeded) {
115 | keyPointer[0] = '\0'; // Previous iOS version than iOS7 set the first char to '\0' if the key was longer than kCCKeySizeAES256
116 | }
117 |
118 | NSUInteger dataLength = [encryptedText length];
119 |
120 | //see https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/CCryptorCreateFromData.3cc.html
121 | // For block ciphers, the output size will always be less than or equal to the input size plus the size of one block.
122 | size_t buffSize = dataLength + kCCBlockSizeAES128;
123 |
124 | void *buff = malloc(buffSize);
125 |
126 | size_t numBytesEncrypted = 0;
127 | //refer to http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-36064/CommonCrypto/CommonCryptor.h
128 | //for details on this function
129 | //Stateless, one-shot encrypt or decrypt operation.
130 | CCCryptorStatus status = CCCrypt(kCCDecrypt,/* kCCEncrypt, etc. */
131 | kCCAlgorithmAES128, /* kCCAlgorithmAES128, etc. */
132 | kCCOptionPKCS7Padding, /* kCCOptionPKCS7Padding, etc. */
133 | keyPointer, kCCKeySizeAES256,/* key and its length */
134 | ivPointer, /* initialization vector - use same IV which was used for decryption */
135 | [encryptedText bytes], [encryptedText length], //input
136 | buff, buffSize,//output
137 | &numBytesEncrypted);
138 | if (status == kCCSuccess) {
139 | return [NSData dataWithBytesNoCopy:buff length:numBytesEncrypted];
140 | }
141 |
142 | free(buff);
143 | return nil;
144 | }
145 |
146 | //this function is no longer used in encryption / decryption
147 | - (NSString *) md5:(NSString *) input
148 | {
149 | const char *cStr = [input UTF8String];
150 | unsigned char digest[16];
151 | CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
152 |
153 | NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
154 |
155 | for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
156 | [output appendFormat:@"%02x", digest[i]];
157 |
158 | return output;
159 |
160 | }
161 |
162 | //function to generate random string of given length.
163 | //random strings are used as IV
164 | - (NSData *)generateRandomIV:(size_t)length
165 | {
166 | NSMutableData *data = [NSMutableData dataWithLength:length];
167 |
168 | int output = SecRandomCopyBytes(kSecRandomDefault,
169 | length,
170 | data.mutableBytes);
171 | NSAssert(output == 0, @"error generating random bytes: %d",
172 | errno);
173 |
174 | return data;
175 | }
176 |
177 | /**
178 | * This function computes the SHA256 hash of input string
179 | * @param text input text whose SHA256 hash has to be computed
180 | * @param length length of the text to be returned
181 | * @return returns SHA256 hash of input text
182 | */
183 | - (NSString*) sha256:(NSString *)key length:(NSInteger) length{
184 | const char *s=[key cStringUsingEncoding:NSASCIIStringEncoding];
185 | NSData *keyData=[NSData dataWithBytes:s length:strlen(s)];
186 |
187 | uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};
188 | CC_SHA256(keyData.bytes, keyData.length, digest);
189 | NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
190 | NSString *hash=[out description];
191 | hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
192 | hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
193 | hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
194 |
195 | if(length > [hash length])
196 | {
197 | return hash;
198 | }
199 | else
200 | {
201 | return [hash substringToIndex:length];
202 | }
203 | }
204 |
205 | @end
206 |
--------------------------------------------------------------------------------
/android/src/main/java/fnd/reactaes/reactaes/CryptLib.java:
--------------------------------------------------------------------------------
1 | package fnd.reactaes.reactaes;
2 |
3 | import java.io.UnsupportedEncodingException;
4 | import java.security.InvalidAlgorithmParameterException;
5 | import java.security.InvalidKeyException;
6 | import java.security.MessageDigest;
7 | import java.security.NoSuchAlgorithmException;
8 | import javax.crypto.BadPaddingException;
9 | import javax.crypto.Cipher;
10 | import javax.crypto.IllegalBlockSizeException;
11 | import javax.crypto.NoSuchPaddingException;
12 | import javax.crypto.spec.IvParameterSpec;
13 | import javax.crypto.spec.SecretKeySpec;
14 | import java.security.SecureRandom;
15 | import android.util.Base64;
16 |
17 | /*****************************************************************
18 | * CrossPlatform CryptLib
19 | *
20 | *
21 | * This cross platform CryptLib uses AES 256 for encryption. This library can
22 | * be used for encryptoion and de-cryption of string on iOS, Android and Windows
23 | * platform.
24 | * Features:
25 | * 1. 256 bit AES encryption
26 | * 2. Random IV generation.
27 | * 3. Provision for SHA256 hashing of key.
28 | *
29 | *
30 | * @since 1.0
31 | * @author navneet
32 | *****************************************************************/
33 |
34 | public class CryptLib {
35 |
36 | /**
37 | * Encryption mode enumeration
38 | */
39 | private enum EncryptMode {
40 | ENCRYPT, DECRYPT;
41 | }
42 |
43 | // cipher to be used for encryption and decryption
44 | Cipher _cx;
45 |
46 | // encryption key and initialization vector
47 | byte[] _key, _iv;
48 |
49 | public CryptLib() throws NoSuchAlgorithmException, NoSuchPaddingException {
50 | // initialize the cipher with transformation AES/CBC/PKCS5Padding
51 | _cx = Cipher.getInstance("AES/CBC/PKCS5Padding");
52 | _key = new byte[32]; //256 bit key space
53 | _iv = new byte[16]; //128 bit IV
54 | }
55 |
56 | /**
57 | * Note: This function is no longer used.
58 | * This function generates md5 hash of the input string
59 | * @param inputString
60 | * @return md5 hash of the input string
61 | */
62 | public static final String md5(final String inputString) {
63 | final String MD5 = "MD5";
64 | try {
65 | // Create MD5 Hash
66 | MessageDigest digest = java.security.MessageDigest
67 | .getInstance(MD5);
68 | digest.update(inputString.getBytes());
69 | byte messageDigest[] = digest.digest();
70 |
71 | // Create Hex String
72 | StringBuilder hexString = new StringBuilder();
73 | for (byte aMessageDigest : messageDigest) {
74 | String h = Integer.toHexString(0xFF & aMessageDigest);
75 | while (h.length() < 2)
76 | h = "0" + h;
77 | hexString.append(h);
78 | }
79 | return hexString.toString();
80 |
81 | } catch (NoSuchAlgorithmException e) {
82 | e.printStackTrace();
83 | }
84 | return "";
85 | }
86 |
87 | /**
88 | *
89 | * @param _inputText
90 | * Text to be encrypted or decrypted
91 | * @param _encryptionKey
92 | * Encryption key to used for encryption / decryption
93 | * @param _mode
94 | * specify the mode encryption / decryption
95 | * @param _initVector
96 | * Initialization vector
97 | * @return encrypted or decrypted string based on the mode
98 | * @throws UnsupportedEncodingException
99 | * @throws InvalidKeyException
100 | * @throws InvalidAlgorithmParameterException
101 | * @throws IllegalBlockSizeException
102 | * @throws BadPaddingException
103 | */
104 | private String encryptDecrypt(String _inputText, String _encryptionKey,
105 | EncryptMode _mode, String _initVector) throws UnsupportedEncodingException,
106 | InvalidKeyException, InvalidAlgorithmParameterException,
107 | IllegalBlockSizeException, BadPaddingException {
108 | String _out = "";// output string
109 | //_encryptionKey = md5(_encryptionKey);
110 | //System.out.println("key="+_encryptionKey);
111 |
112 | int len = _encryptionKey.getBytes("UTF-8").length; // length of the key provided
113 |
114 | if (_encryptionKey.getBytes("UTF-8").length > _key.length)
115 | len = _key.length;
116 |
117 | int ivlen = _initVector.getBytes("UTF-8").length;
118 |
119 | if(_initVector.getBytes("UTF-8").length > _iv.length)
120 | ivlen = _iv.length;
121 |
122 | System.arraycopy(_encryptionKey.getBytes("UTF-8"), 0, _key, 0, len);
123 | System.arraycopy(_initVector.getBytes("UTF-8"), 0, _iv, 0, ivlen);
124 | //KeyGenerator _keyGen = KeyGenerator.getInstance("AES");
125 | //_keyGen.init(128);
126 |
127 | SecretKeySpec keySpec = new SecretKeySpec(_key, "AES"); // Create a new SecretKeySpec
128 | // for the
129 | // specified key
130 | // data and
131 | // algorithm
132 | // name.
133 |
134 | IvParameterSpec ivSpec = new IvParameterSpec(_iv); // Create a new
135 | // IvParameterSpec
136 | // instance with the
137 | // bytes from the
138 | // specified buffer
139 | // iv used as
140 | // initialization
141 | // vector.
142 |
143 | // encryption
144 | if (_mode.equals(EncryptMode.ENCRYPT)) {
145 | // Potentially insecure random numbers on Android 4.3 and older.
146 | // Read
147 | // https://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html
148 | // for more info.
149 | _cx.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);// Initialize this cipher instance
150 | byte[] results = _cx.doFinal(_inputText.getBytes("UTF-8")); // Finish
151 | // multi-part
152 | // transformation
153 | // (encryption)
154 | _out = Base64.encodeToString(results, Base64.DEFAULT); // ciphertext
155 | // output
156 | }
157 |
158 | // decryption
159 | if (_mode.equals(EncryptMode.DECRYPT)) {
160 | _cx.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);// Initialize this ipher instance
161 |
162 | byte[] decodedValue = Base64.decode(_inputText.getBytes(),
163 | Base64.DEFAULT);
164 | byte[] decryptedVal = _cx.doFinal(decodedValue); // Finish
165 | // multi-part
166 | // transformation
167 | // (decryption)
168 | _out = new String(decryptedVal);
169 | }
170 | System.out.println(_out);
171 | return _out; // return encrypted/decrypted string
172 | }
173 |
174 | /***
175 | * This function computes the SHA256 hash of input string
176 | * @param text input text whose SHA256 hash has to be computed
177 | * @param length length of the text to be returned
178 | * @return returns SHA256 hash of input text
179 | * @throws NoSuchAlgorithmException
180 | * @throws UnsupportedEncodingException
181 | */
182 | public static String SHA256 (String text, int length) throws NoSuchAlgorithmException, UnsupportedEncodingException {
183 |
184 | String resultStr;
185 | MessageDigest md = MessageDigest.getInstance("SHA-256");
186 |
187 | md.update(text.getBytes("UTF-8"));
188 | byte[] digest = md.digest();
189 |
190 | StringBuffer result = new StringBuffer();
191 | for (byte b : digest) {
192 | result.append(String.format("%02x", b)); //convert to hex
193 | }
194 | //return result.toString();
195 |
196 | if(length > result.toString().length())
197 | {
198 | resultStr = result.toString();
199 | }
200 | else
201 | {
202 | resultStr = result.toString().substring(0, length);
203 | }
204 |
205 | return resultStr;
206 |
207 | }
208 |
209 | /***
210 | * This function encrypts the plain text to cipher text using the key
211 | * provided. You'll have to use the same key for decryption
212 | *
213 | * @param _plainText
214 | * Plain text to be encrypted
215 | * @param _key
216 | * Encryption Key. You'll have to use the same key for decryption
217 | * @param _iv
218 | * initialization Vector
219 | * @return returns encrypted (cipher) text
220 | * @throws InvalidKeyException
221 | * @throws UnsupportedEncodingException
222 | * @throws InvalidAlgorithmParameterException
223 | * @throws IllegalBlockSizeException
224 | * @throws BadPaddingException
225 | */
226 |
227 | public String encrypt(String _plainText, String _key, String _iv)
228 | throws InvalidKeyException, UnsupportedEncodingException,
229 | InvalidAlgorithmParameterException, IllegalBlockSizeException,
230 | BadPaddingException {
231 | return encryptDecrypt(_plainText, _key, EncryptMode.ENCRYPT, _iv);
232 | }
233 |
234 | /***
235 | * This funtion decrypts the encrypted text to plain text using the key
236 | * provided. You'll have to use the same key which you used during
237 | * encryprtion
238 | *
239 | * @param _encryptedText
240 | * Encrypted/Cipher text to be decrypted
241 | * @param _key
242 | * Encryption key which you used during encryption
243 | * @param _iv
244 | * initialization Vector
245 | * @return encrypted value
246 | * @throws InvalidKeyException
247 | * @throws UnsupportedEncodingException
248 | * @throws InvalidAlgorithmParameterException
249 | * @throws IllegalBlockSizeException
250 | * @throws BadPaddingException
251 | */
252 | public String decrypt(String _encryptedText, String _key, String _iv)
253 | throws InvalidKeyException, UnsupportedEncodingException,
254 | InvalidAlgorithmParameterException, IllegalBlockSizeException,
255 | BadPaddingException {
256 | return encryptDecrypt(_encryptedText, _key, EncryptMode.DECRYPT, _iv);
257 | }
258 |
259 | /**
260 | * this function generates random string for given length
261 | * @param length
262 | * Desired length
263 | * * @return
264 | */
265 | public static String generateRandomIV(int length)
266 | {
267 | SecureRandom ranGen = new SecureRandom();
268 | byte[] aesKey = new byte[16];
269 | ranGen.nextBytes(aesKey);
270 | StringBuffer result = new StringBuffer();
271 | for (byte b : aesKey) {
272 | result.append(String.format("%02x", b)); //convert to hex
273 | }
274 | if(length> result.toString().length())
275 | {
276 | return result.toString();
277 | }
278 | else
279 | {
280 | return result.toString().substring(0, length);
281 | }
282 | }
283 | }
284 |
285 |
--------------------------------------------------------------------------------
/ios/ReactAES.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 5D717EA21D16140A001A8DC2 /* CryptLib.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D717E9F1D16140A001A8DC2 /* CryptLib.m */; };
11 | 5D717EA31D16140A001A8DC2 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D717EA11D16140A001A8DC2 /* NSData+Base64.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
12 | 5DFB84BA1D16024000338E67 /* ReactAES.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5DFB84B91D16024000338E67 /* ReactAES.h */; };
13 | 5DFB84BC1D16024000338E67 /* ReactAES.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DFB84BB1D16024000338E67 /* ReactAES.m */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXCopyFilesBuildPhase section */
17 | 5DFB84B41D16024000338E67 /* CopyFiles */ = {
18 | isa = PBXCopyFilesBuildPhase;
19 | buildActionMask = 2147483647;
20 | dstPath = "include/$(PRODUCT_NAME)";
21 | dstSubfolderSpec = 16;
22 | files = (
23 | 5DFB84BA1D16024000338E67 /* ReactAES.h in CopyFiles */,
24 | );
25 | runOnlyForDeploymentPostprocessing = 0;
26 | };
27 | /* End PBXCopyFilesBuildPhase section */
28 |
29 | /* Begin PBXFileReference section */
30 | 5D717E9E1D16140A001A8DC2 /* CryptLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptLib.h; sourceTree = ""; };
31 | 5D717E9F1D16140A001A8DC2 /* CryptLib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CryptLib.m; sourceTree = ""; };
32 | 5D717EA01D16140A001A8DC2 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = ""; };
33 | 5D717EA11D16140A001A8DC2 /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = ""; };
34 | 5DFB84B61D16024000338E67 /* libReactAES.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReactAES.a; sourceTree = BUILT_PRODUCTS_DIR; };
35 | 5DFB84B91D16024000338E67 /* ReactAES.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactAES.h; sourceTree = ""; };
36 | 5DFB84BB1D16024000338E67 /* ReactAES.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactAES.m; sourceTree = ""; };
37 | /* End PBXFileReference section */
38 |
39 | /* Begin PBXFrameworksBuildPhase section */
40 | 5DFB84B31D16024000338E67 /* Frameworks */ = {
41 | isa = PBXFrameworksBuildPhase;
42 | buildActionMask = 2147483647;
43 | files = (
44 | );
45 | runOnlyForDeploymentPostprocessing = 0;
46 | };
47 | /* End PBXFrameworksBuildPhase section */
48 |
49 | /* Begin PBXGroup section */
50 | 5DFB84AD1D16024000338E67 = {
51 | isa = PBXGroup;
52 | children = (
53 | 5DFB84B81D16024000338E67 /* ReactAES */,
54 | 5DFB84B71D16024000338E67 /* Products */,
55 | );
56 | sourceTree = "";
57 | };
58 | 5DFB84B71D16024000338E67 /* Products */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 5DFB84B61D16024000338E67 /* libReactAES.a */,
62 | );
63 | name = Products;
64 | sourceTree = "";
65 | };
66 | 5DFB84B81D16024000338E67 /* ReactAES */ = {
67 | isa = PBXGroup;
68 | children = (
69 | 5D717E9E1D16140A001A8DC2 /* CryptLib.h */,
70 | 5D717E9F1D16140A001A8DC2 /* CryptLib.m */,
71 | 5D717EA01D16140A001A8DC2 /* NSData+Base64.h */,
72 | 5D717EA11D16140A001A8DC2 /* NSData+Base64.m */,
73 | 5DFB84B91D16024000338E67 /* ReactAES.h */,
74 | 5DFB84BB1D16024000338E67 /* ReactAES.m */,
75 | );
76 | path = ReactAES;
77 | sourceTree = "";
78 | };
79 | /* End PBXGroup section */
80 |
81 | /* Begin PBXNativeTarget section */
82 | 5DFB84B51D16024000338E67 /* ReactAES */ = {
83 | isa = PBXNativeTarget;
84 | buildConfigurationList = 5DFB84BF1D16024000338E67 /* Build configuration list for PBXNativeTarget "ReactAES" */;
85 | buildPhases = (
86 | 5DFB84B21D16024000338E67 /* Sources */,
87 | 5DFB84B31D16024000338E67 /* Frameworks */,
88 | 5DFB84B41D16024000338E67 /* CopyFiles */,
89 | );
90 | buildRules = (
91 | );
92 | dependencies = (
93 | );
94 | name = ReactAES;
95 | productName = ReactAES;
96 | productReference = 5DFB84B61D16024000338E67 /* libReactAES.a */;
97 | productType = "com.apple.product-type.library.static";
98 | };
99 | /* End PBXNativeTarget section */
100 |
101 | /* Begin PBXProject section */
102 | 5DFB84AE1D16024000338E67 /* Project object */ = {
103 | isa = PBXProject;
104 | attributes = {
105 | LastUpgradeCheck = 0730;
106 | ORGANIZATIONNAME = fanday;
107 | TargetAttributes = {
108 | 5DFB84B51D16024000338E67 = {
109 | CreatedOnToolsVersion = 7.3.1;
110 | DevelopmentTeam = SE7SQ5SE29;
111 | };
112 | };
113 | };
114 | buildConfigurationList = 5DFB84B11D16024000338E67 /* Build configuration list for PBXProject "ReactAES" */;
115 | compatibilityVersion = "Xcode 3.2";
116 | developmentRegion = English;
117 | hasScannedForEncodings = 0;
118 | knownRegions = (
119 | en,
120 | );
121 | mainGroup = 5DFB84AD1D16024000338E67;
122 | productRefGroup = 5DFB84B71D16024000338E67 /* Products */;
123 | projectDirPath = "";
124 | projectRoot = "";
125 | targets = (
126 | 5DFB84B51D16024000338E67 /* ReactAES */,
127 | );
128 | };
129 | /* End PBXProject section */
130 |
131 | /* Begin PBXSourcesBuildPhase section */
132 | 5DFB84B21D16024000338E67 /* Sources */ = {
133 | isa = PBXSourcesBuildPhase;
134 | buildActionMask = 2147483647;
135 | files = (
136 | 5D717EA21D16140A001A8DC2 /* CryptLib.m in Sources */,
137 | 5DFB84BC1D16024000338E67 /* ReactAES.m in Sources */,
138 | 5D717EA31D16140A001A8DC2 /* NSData+Base64.m in Sources */,
139 | );
140 | runOnlyForDeploymentPostprocessing = 0;
141 | };
142 | /* End PBXSourcesBuildPhase section */
143 |
144 | /* Begin XCBuildConfiguration section */
145 | 5DFB84BD1D16024000338E67 /* Debug */ = {
146 | isa = XCBuildConfiguration;
147 | buildSettings = {
148 | ALWAYS_SEARCH_USER_PATHS = NO;
149 | CLANG_ANALYZER_NONNULL = YES;
150 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
151 | CLANG_CXX_LIBRARY = "libc++";
152 | CLANG_ENABLE_MODULES = YES;
153 | CLANG_ENABLE_OBJC_ARC = YES;
154 | CLANG_WARN_BOOL_CONVERSION = YES;
155 | CLANG_WARN_CONSTANT_CONVERSION = YES;
156 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
157 | CLANG_WARN_EMPTY_BODY = YES;
158 | CLANG_WARN_ENUM_CONVERSION = YES;
159 | CLANG_WARN_INT_CONVERSION = YES;
160 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
161 | CLANG_WARN_UNREACHABLE_CODE = YES;
162 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
163 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
164 | COPY_PHASE_STRIP = NO;
165 | DEBUG_INFORMATION_FORMAT = dwarf;
166 | ENABLE_STRICT_OBJC_MSGSEND = YES;
167 | ENABLE_TESTABILITY = YES;
168 | GCC_C_LANGUAGE_STANDARD = gnu99;
169 | GCC_DYNAMIC_NO_PIC = NO;
170 | GCC_NO_COMMON_BLOCKS = YES;
171 | GCC_OPTIMIZATION_LEVEL = 0;
172 | GCC_PREPROCESSOR_DEFINITIONS = (
173 | "DEBUG=1",
174 | "$(inherited)",
175 | );
176 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
177 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
178 | GCC_WARN_UNDECLARED_SELECTOR = YES;
179 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
180 | GCC_WARN_UNUSED_FUNCTION = YES;
181 | GCC_WARN_UNUSED_VARIABLE = YES;
182 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
183 | MTL_ENABLE_DEBUG_INFO = YES;
184 | ONLY_ACTIVE_ARCH = YES;
185 | SDKROOT = iphoneos;
186 | };
187 | name = Debug;
188 | };
189 | 5DFB84BE1D16024000338E67 /* Release */ = {
190 | isa = XCBuildConfiguration;
191 | buildSettings = {
192 | ALWAYS_SEARCH_USER_PATHS = NO;
193 | CLANG_ANALYZER_NONNULL = YES;
194 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
195 | CLANG_CXX_LIBRARY = "libc++";
196 | CLANG_ENABLE_MODULES = YES;
197 | CLANG_ENABLE_OBJC_ARC = YES;
198 | CLANG_WARN_BOOL_CONVERSION = YES;
199 | CLANG_WARN_CONSTANT_CONVERSION = YES;
200 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
201 | CLANG_WARN_EMPTY_BODY = YES;
202 | CLANG_WARN_ENUM_CONVERSION = YES;
203 | CLANG_WARN_INT_CONVERSION = YES;
204 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
205 | CLANG_WARN_UNREACHABLE_CODE = YES;
206 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
207 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
208 | COPY_PHASE_STRIP = NO;
209 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
210 | ENABLE_NS_ASSERTIONS = NO;
211 | ENABLE_STRICT_OBJC_MSGSEND = YES;
212 | GCC_C_LANGUAGE_STANDARD = gnu99;
213 | GCC_NO_COMMON_BLOCKS = YES;
214 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
215 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
216 | GCC_WARN_UNDECLARED_SELECTOR = YES;
217 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
218 | GCC_WARN_UNUSED_FUNCTION = YES;
219 | GCC_WARN_UNUSED_VARIABLE = YES;
220 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
221 | MTL_ENABLE_DEBUG_INFO = NO;
222 | SDKROOT = iphoneos;
223 | VALIDATE_PRODUCT = YES;
224 | };
225 | name = Release;
226 | };
227 | 5DFB84C01D16024000338E67 /* Debug */ = {
228 | isa = XCBuildConfiguration;
229 | buildSettings = {
230 | ALWAYS_SEARCH_USER_PATHS = NO;
231 | HEADER_SEARCH_PATHS = "$(SRCROOT)/../../react-native/React/**";
232 | OTHER_LDFLAGS = "-ObjC";
233 | PRODUCT_BUNDLE_IDENTIFIER = reactaes;
234 | PRODUCT_NAME = "$(TARGET_NAME)";
235 | SKIP_INSTALL = YES;
236 | USER_HEADER_SEARCH_PATHS = "";
237 | };
238 | name = Debug;
239 | };
240 | 5DFB84C11D16024000338E67 /* Release */ = {
241 | isa = XCBuildConfiguration;
242 | buildSettings = {
243 | ALWAYS_SEARCH_USER_PATHS = NO;
244 | HEADER_SEARCH_PATHS = "$(SRCROOT)/../../react-native/React/**";
245 | OTHER_LDFLAGS = "-ObjC";
246 | PRODUCT_BUNDLE_IDENTIFIER = reactaes;
247 | PRODUCT_NAME = "$(TARGET_NAME)";
248 | SKIP_INSTALL = YES;
249 | USER_HEADER_SEARCH_PATHS = "";
250 | };
251 | name = Release;
252 | };
253 | /* End XCBuildConfiguration section */
254 |
255 | /* Begin XCConfigurationList section */
256 | 5DFB84B11D16024000338E67 /* Build configuration list for PBXProject "ReactAES" */ = {
257 | isa = XCConfigurationList;
258 | buildConfigurations = (
259 | 5DFB84BD1D16024000338E67 /* Debug */,
260 | 5DFB84BE1D16024000338E67 /* Release */,
261 | );
262 | defaultConfigurationIsVisible = 0;
263 | defaultConfigurationName = Release;
264 | };
265 | 5DFB84BF1D16024000338E67 /* Build configuration list for PBXNativeTarget "ReactAES" */ = {
266 | isa = XCConfigurationList;
267 | buildConfigurations = (
268 | 5DFB84C01D16024000338E67 /* Debug */,
269 | 5DFB84C11D16024000338E67 /* Release */,
270 | );
271 | defaultConfigurationIsVisible = 0;
272 | defaultConfigurationName = Release;
273 | };
274 | /* End XCConfigurationList section */
275 | };
276 | rootObject = 5DFB84AE1D16024000338E67 /* Project object */;
277 | }
278 |
--------------------------------------------------------------------------------
/example/example/ios/example.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 | /* Begin PBXBuildFile section */
9 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
10 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
11 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
12 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
13 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
14 | 00E356F31AD99517003FC87E /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
15 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
16 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
17 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
18 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
19 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
20 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
21 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
22 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
23 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
24 | 3BD8304898AC488486ADBE5C /* libReactAES.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8101E822E4664783A5B560D6 /* libReactAES.a */; };
25 | /* End PBXBuildFile section */
26 |
27 | /* Begin PBXContainerItemProxy section */
28 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
29 | isa = PBXContainerItemProxy;
30 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
31 | proxyType = 2;
32 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
33 | remoteInfo = RCTActionSheet;
34 | };
35 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
36 | isa = PBXContainerItemProxy;
37 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
38 | proxyType = 2;
39 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
40 | remoteInfo = RCTGeolocation;
41 | };
42 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
43 | isa = PBXContainerItemProxy;
44 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
45 | proxyType = 2;
46 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
47 | remoteInfo = RCTImage;
48 | };
49 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
50 | isa = PBXContainerItemProxy;
51 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
52 | proxyType = 2;
53 | remoteGlobalIDString = 58B511DB1A9E6C8500147676;
54 | remoteInfo = RCTNetwork;
55 | };
56 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
57 | isa = PBXContainerItemProxy;
58 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
59 | proxyType = 2;
60 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
61 | remoteInfo = RCTVibration;
62 | };
63 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
64 | isa = PBXContainerItemProxy;
65 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
66 | proxyType = 1;
67 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
68 | remoteInfo = example;
69 | };
70 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
71 | isa = PBXContainerItemProxy;
72 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
73 | proxyType = 2;
74 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
75 | remoteInfo = RCTSettings;
76 | };
77 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
78 | isa = PBXContainerItemProxy;
79 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
80 | proxyType = 2;
81 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
82 | remoteInfo = RCTWebSocket;
83 | };
84 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
85 | isa = PBXContainerItemProxy;
86 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
87 | proxyType = 2;
88 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
89 | remoteInfo = React;
90 | };
91 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
92 | isa = PBXContainerItemProxy;
93 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
94 | proxyType = 2;
95 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
96 | remoteInfo = RCTLinking;
97 | };
98 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
99 | isa = PBXContainerItemProxy;
100 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
101 | proxyType = 2;
102 | remoteGlobalIDString = 58B5119B1A9E6C1200147676;
103 | remoteInfo = RCTText;
104 | };
105 | /* End PBXContainerItemProxy section */
106 |
107 | /* Begin PBXFileReference section */
108 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = main.jsbundle; sourceTree = ""; };
109 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = ../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj; sourceTree = ""; };
110 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = ../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj; sourceTree = ""; };
111 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = ../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj; sourceTree = ""; };
112 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = ../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj; sourceTree = ""; };
113 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = ../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj; sourceTree = ""; };
114 | 00E356EE1AD99517003FC87E /* exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
115 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
116 | 00E356F21AD99517003FC87E /* exampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampleTests.m; sourceTree = ""; };
117 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = ../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj; sourceTree = ""; };
118 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = ../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj; sourceTree = ""; };
119 | 13B07F961A680F5B00A75B9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };
120 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = example/AppDelegate.h; sourceTree = ""; };
121 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = example/AppDelegate.m; sourceTree = ""; };
122 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
123 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = example/Images.xcassets; sourceTree = ""; };
124 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = example/Info.plist; sourceTree = ""; };
125 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = example/main.m; sourceTree = ""; };
126 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = ../node_modules/react-native/React/React.xcodeproj; sourceTree = ""; };
127 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = ../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj; sourceTree = ""; };
128 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = ../node_modules/react-native/Libraries/Text/RCTText.xcodeproj; sourceTree = ""; };
129 | 6F7128C53B714C48A6EA126A /* ReactAES.xcodeproj */ = {isa = PBXFileReference; name = "ReactAES.xcodeproj"; path = "../node_modules/react-native-aes-encryption/ios/ReactAES.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
130 | 8101E822E4664783A5B560D6 /* libReactAES.a */ = {isa = PBXFileReference; name = "libReactAES.a"; path = "libReactAES.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
131 | /* End PBXFileReference section */
132 |
133 | /* Begin PBXFrameworksBuildPhase section */
134 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
135 | isa = PBXFrameworksBuildPhase;
136 | buildActionMask = 2147483647;
137 | files = (
138 | );
139 | runOnlyForDeploymentPostprocessing = 0;
140 | };
141 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
142 | isa = PBXFrameworksBuildPhase;
143 | buildActionMask = 2147483647;
144 | files = (
145 | 146834051AC3E58100842450 /* libReact.a in Frameworks */,
146 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
147 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
148 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
149 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
150 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
151 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
152 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
153 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
154 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
155 | 3BD8304898AC488486ADBE5C /* libReactAES.a in Frameworks */,
156 | );
157 | runOnlyForDeploymentPostprocessing = 0;
158 | };
159 | /* End PBXFrameworksBuildPhase section */
160 |
161 | /* Begin PBXGroup section */
162 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = {
163 | isa = PBXGroup;
164 | children = (
165 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
166 | );
167 | name = Products;
168 | sourceTree = "";
169 | };
170 | 00C302B61ABCB90400DB3ED1 /* Products */ = {
171 | isa = PBXGroup;
172 | children = (
173 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
174 | );
175 | name = Products;
176 | sourceTree = "";
177 | };
178 | 00C302BC1ABCB91800DB3ED1 /* Products */ = {
179 | isa = PBXGroup;
180 | children = (
181 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
182 | );
183 | name = Products;
184 | sourceTree = "";
185 | };
186 | 00C302D41ABCB9D200DB3ED1 /* Products */ = {
187 | isa = PBXGroup;
188 | children = (
189 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
190 | );
191 | name = Products;
192 | sourceTree = "";
193 | };
194 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = {
195 | isa = PBXGroup;
196 | children = (
197 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
198 | );
199 | name = Products;
200 | sourceTree = "";
201 | };
202 | 00E356EF1AD99517003FC87E /* exampleTests */ = {
203 | isa = PBXGroup;
204 | children = (
205 | 00E356F21AD99517003FC87E /* exampleTests.m */,
206 | 00E356F01AD99517003FC87E /* Supporting Files */,
207 | );
208 | path = exampleTests;
209 | sourceTree = "";
210 | };
211 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
212 | isa = PBXGroup;
213 | children = (
214 | 00E356F11AD99517003FC87E /* Info.plist */,
215 | );
216 | name = "Supporting Files";
217 | sourceTree = "";
218 | };
219 | 139105B71AF99BAD00B5F7CC /* Products */ = {
220 | isa = PBXGroup;
221 | children = (
222 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
223 | );
224 | name = Products;
225 | sourceTree = "";
226 | };
227 | 139FDEE71B06529A00C62182 /* Products */ = {
228 | isa = PBXGroup;
229 | children = (
230 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
231 | );
232 | name = Products;
233 | sourceTree = "";
234 | };
235 | 13B07FAE1A68108700A75B9A /* example */ = {
236 | isa = PBXGroup;
237 | children = (
238 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
239 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
240 | 13B07FB01A68108700A75B9A /* AppDelegate.m */,
241 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
242 | 13B07FB61A68108700A75B9A /* Info.plist */,
243 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
244 | 13B07FB71A68108700A75B9A /* main.m */,
245 | );
246 | name = example;
247 | sourceTree = "";
248 | };
249 | 146834001AC3E56700842450 /* Products */ = {
250 | isa = PBXGroup;
251 | children = (
252 | 146834041AC3E56700842450 /* libReact.a */,
253 | );
254 | name = Products;
255 | sourceTree = "";
256 | };
257 | 78C398B11ACF4ADC00677621 /* Products */ = {
258 | isa = PBXGroup;
259 | children = (
260 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
261 | );
262 | name = Products;
263 | sourceTree = "";
264 | };
265 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
266 | isa = PBXGroup;
267 | children = (
268 | 146833FF1AC3E56700842450 /* React.xcodeproj */,
269 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
270 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
271 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
272 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
273 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
274 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
275 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
276 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
277 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
278 | 6F7128C53B714C48A6EA126A /* ReactAES.xcodeproj */,
279 | );
280 | name = Libraries;
281 | sourceTree = "";
282 | };
283 | 832341B11AAA6A8300B99B32 /* Products */ = {
284 | isa = PBXGroup;
285 | children = (
286 | 832341B51AAA6A8300B99B32 /* libRCTText.a */,
287 | );
288 | name = Products;
289 | sourceTree = "";
290 | };
291 | 83CBB9F61A601CBA00E9B192 = {
292 | isa = PBXGroup;
293 | children = (
294 | 13B07FAE1A68108700A75B9A /* example */,
295 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
296 | 00E356EF1AD99517003FC87E /* exampleTests */,
297 | 83CBBA001A601CBA00E9B192 /* Products */,
298 | );
299 | indentWidth = 2;
300 | sourceTree = "";
301 | tabWidth = 2;
302 | };
303 | 83CBBA001A601CBA00E9B192 /* Products */ = {
304 | isa = PBXGroup;
305 | children = (
306 | 13B07F961A680F5B00A75B9A /* example.app */,
307 | 00E356EE1AD99517003FC87E /* exampleTests.xctest */,
308 | );
309 | name = Products;
310 | sourceTree = "";
311 | };
312 | /* End PBXGroup section */
313 |
314 | /* Begin PBXNativeTarget section */
315 | 00E356ED1AD99517003FC87E /* exampleTests */ = {
316 | isa = PBXNativeTarget;
317 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */;
318 | buildPhases = (
319 | 00E356EA1AD99517003FC87E /* Sources */,
320 | 00E356EB1AD99517003FC87E /* Frameworks */,
321 | 00E356EC1AD99517003FC87E /* Resources */,
322 | );
323 | buildRules = (
324 | );
325 | dependencies = (
326 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
327 | );
328 | name = exampleTests;
329 | productName = exampleTests;
330 | productReference = 00E356EE1AD99517003FC87E /* exampleTests.xctest */;
331 | productType = "com.apple.product-type.bundle.unit-test";
332 | };
333 | 13B07F861A680F5B00A75B9A /* example */ = {
334 | isa = PBXNativeTarget;
335 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */;
336 | buildPhases = (
337 | 13B07F871A680F5B00A75B9A /* Sources */,
338 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
339 | 13B07F8E1A680F5B00A75B9A /* Resources */,
340 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
341 | );
342 | buildRules = (
343 | );
344 | dependencies = (
345 | );
346 | name = example;
347 | productName = "Hello World";
348 | productReference = 13B07F961A680F5B00A75B9A /* example.app */;
349 | productType = "com.apple.product-type.application";
350 | };
351 | /* End PBXNativeTarget section */
352 |
353 | /* Begin PBXProject section */
354 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
355 | isa = PBXProject;
356 | attributes = {
357 | LastUpgradeCheck = 610;
358 | ORGANIZATIONNAME = Facebook;
359 | TargetAttributes = {
360 | 00E356ED1AD99517003FC87E = {
361 | CreatedOnToolsVersion = 6.2;
362 | TestTargetID = 13B07F861A680F5B00A75B9A;
363 | };
364 | };
365 | };
366 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */;
367 | compatibilityVersion = "Xcode 3.2";
368 | developmentRegion = English;
369 | hasScannedForEncodings = 0;
370 | knownRegions = (
371 | en,
372 | Base,
373 | );
374 | mainGroup = 83CBB9F61A601CBA00E9B192;
375 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
376 | projectDirPath = "";
377 | projectReferences = (
378 | {
379 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
380 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
381 | },
382 | {
383 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
384 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
385 | },
386 | {
387 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
388 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
389 | },
390 | {
391 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
392 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
393 | },
394 | {
395 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
396 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
397 | },
398 | {
399 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
400 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
401 | },
402 | {
403 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
404 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
405 | },
406 | {
407 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
408 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
409 | },
410 | {
411 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
412 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
413 | },
414 | {
415 | ProductGroup = 146834001AC3E56700842450 /* Products */;
416 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
417 | },
418 | );
419 | projectRoot = "";
420 | targets = (
421 | 13B07F861A680F5B00A75B9A /* example */,
422 | 00E356ED1AD99517003FC87E /* exampleTests */,
423 | );
424 | };
425 | /* End PBXProject section */
426 |
427 | /* Begin PBXReferenceProxy section */
428 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
429 | isa = PBXReferenceProxy;
430 | fileType = archive.ar;
431 | path = libRCTActionSheet.a;
432 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
433 | sourceTree = BUILT_PRODUCTS_DIR;
434 | };
435 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
436 | isa = PBXReferenceProxy;
437 | fileType = archive.ar;
438 | path = libRCTGeolocation.a;
439 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
440 | sourceTree = BUILT_PRODUCTS_DIR;
441 | };
442 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
443 | isa = PBXReferenceProxy;
444 | fileType = archive.ar;
445 | path = libRCTImage.a;
446 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
447 | sourceTree = BUILT_PRODUCTS_DIR;
448 | };
449 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
450 | isa = PBXReferenceProxy;
451 | fileType = archive.ar;
452 | path = libRCTNetwork.a;
453 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
454 | sourceTree = BUILT_PRODUCTS_DIR;
455 | };
456 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
457 | isa = PBXReferenceProxy;
458 | fileType = archive.ar;
459 | path = libRCTVibration.a;
460 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
461 | sourceTree = BUILT_PRODUCTS_DIR;
462 | };
463 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
464 | isa = PBXReferenceProxy;
465 | fileType = archive.ar;
466 | path = libRCTSettings.a;
467 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
468 | sourceTree = BUILT_PRODUCTS_DIR;
469 | };
470 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
471 | isa = PBXReferenceProxy;
472 | fileType = archive.ar;
473 | path = libRCTWebSocket.a;
474 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
475 | sourceTree = BUILT_PRODUCTS_DIR;
476 | };
477 | 146834041AC3E56700842450 /* libReact.a */ = {
478 | isa = PBXReferenceProxy;
479 | fileType = archive.ar;
480 | path = libReact.a;
481 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
482 | sourceTree = BUILT_PRODUCTS_DIR;
483 | };
484 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
485 | isa = PBXReferenceProxy;
486 | fileType = archive.ar;
487 | path = libRCTLinking.a;
488 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
489 | sourceTree = BUILT_PRODUCTS_DIR;
490 | };
491 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
492 | isa = PBXReferenceProxy;
493 | fileType = archive.ar;
494 | path = libRCTText.a;
495 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
496 | sourceTree = BUILT_PRODUCTS_DIR;
497 | };
498 | /* End PBXReferenceProxy section */
499 |
500 | /* Begin PBXResourcesBuildPhase section */
501 | 00E356EC1AD99517003FC87E /* Resources */ = {
502 | isa = PBXResourcesBuildPhase;
503 | buildActionMask = 2147483647;
504 | files = (
505 | );
506 | runOnlyForDeploymentPostprocessing = 0;
507 | };
508 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
509 | isa = PBXResourcesBuildPhase;
510 | buildActionMask = 2147483647;
511 | files = (
512 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
513 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
514 | );
515 | runOnlyForDeploymentPostprocessing = 0;
516 | };
517 | /* End PBXResourcesBuildPhase section */
518 |
519 | /* Begin PBXShellScriptBuildPhase section */
520 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
521 | isa = PBXShellScriptBuildPhase;
522 | buildActionMask = 2147483647;
523 | files = (
524 | );
525 | inputPaths = (
526 | );
527 | name = "Bundle React Native code and images";
528 | outputPaths = (
529 | );
530 | runOnlyForDeploymentPostprocessing = 0;
531 | shellPath = /bin/sh;
532 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh";
533 | showEnvVarsInLog = 1;
534 | };
535 | /* End PBXShellScriptBuildPhase section */
536 |
537 | /* Begin PBXSourcesBuildPhase section */
538 | 00E356EA1AD99517003FC87E /* Sources */ = {
539 | isa = PBXSourcesBuildPhase;
540 | buildActionMask = 2147483647;
541 | files = (
542 | 00E356F31AD99517003FC87E /* exampleTests.m in Sources */,
543 | );
544 | runOnlyForDeploymentPostprocessing = 0;
545 | };
546 | 13B07F871A680F5B00A75B9A /* Sources */ = {
547 | isa = PBXSourcesBuildPhase;
548 | buildActionMask = 2147483647;
549 | files = (
550 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
551 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
552 | );
553 | runOnlyForDeploymentPostprocessing = 0;
554 | };
555 | /* End PBXSourcesBuildPhase section */
556 |
557 | /* Begin PBXTargetDependency section */
558 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
559 | isa = PBXTargetDependency;
560 | target = 13B07F861A680F5B00A75B9A /* example */;
561 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
562 | };
563 | /* End PBXTargetDependency section */
564 |
565 | /* Begin PBXVariantGroup section */
566 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
567 | isa = PBXVariantGroup;
568 | children = (
569 | 13B07FB21A68108700A75B9A /* Base */,
570 | );
571 | name = LaunchScreen.xib;
572 | path = example;
573 | sourceTree = "";
574 | };
575 | /* End PBXVariantGroup section */
576 |
577 | /* Begin XCBuildConfiguration section */
578 | 00E356F61AD99517003FC87E /* Debug */ = {
579 | isa = XCBuildConfiguration;
580 | buildSettings = {
581 | BUNDLE_LOADER = "$(TEST_HOST)";
582 | GCC_PREPROCESSOR_DEFINITIONS = (
583 | "DEBUG=1",
584 | "$(inherited)",
585 | );
586 | INFOPLIST_FILE = exampleTests/Info.plist;
587 | IPHONEOS_DEPLOYMENT_TARGET = 8.2;
588 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
589 | PRODUCT_NAME = "$(TARGET_NAME)";
590 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example";
591 | LIBRARY_SEARCH_PATHS = (
592 | "$(inherited)",
593 | "\"$(SRCROOT)/$(TARGET_NAME)\"",
594 | );
595 | };
596 | name = Debug;
597 | };
598 | 00E356F71AD99517003FC87E /* Release */ = {
599 | isa = XCBuildConfiguration;
600 | buildSettings = {
601 | BUNDLE_LOADER = "$(TEST_HOST)";
602 | COPY_PHASE_STRIP = NO;
603 | INFOPLIST_FILE = exampleTests/Info.plist;
604 | IPHONEOS_DEPLOYMENT_TARGET = 8.2;
605 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
606 | PRODUCT_NAME = "$(TARGET_NAME)";
607 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example";
608 | LIBRARY_SEARCH_PATHS = (
609 | "$(inherited)",
610 | "\"$(SRCROOT)/$(TARGET_NAME)\"",
611 | );
612 | };
613 | name = Release;
614 | };
615 | 13B07F941A680F5B00A75B9A /* Debug */ = {
616 | isa = XCBuildConfiguration;
617 | buildSettings = {
618 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
619 | DEAD_CODE_STRIPPING = NO;
620 | HEADER_SEARCH_PATHS = (
621 | "$(inherited)",
622 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
623 | "$(SRCROOT)/../node_modules/react-native/React/**",
624 | "$(SRCROOT)/../node_modules/react-native-aes-encryption/ios/ReactAES",
625 | );
626 | INFOPLIST_FILE = "example/Info.plist";
627 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
628 | OTHER_LDFLAGS = (
629 | "-ObjC",
630 | "-lc++",
631 | );
632 | PRODUCT_NAME = example;
633 | };
634 | name = Debug;
635 | };
636 | 13B07F951A680F5B00A75B9A /* Release */ = {
637 | isa = XCBuildConfiguration;
638 | buildSettings = {
639 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
640 | HEADER_SEARCH_PATHS = (
641 | "$(inherited)",
642 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
643 | "$(SRCROOT)/../node_modules/react-native/React/**",
644 | "$(SRCROOT)/../node_modules/react-native-aes-encryption/ios/ReactAES",
645 | );
646 | INFOPLIST_FILE = "example/Info.plist";
647 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
648 | OTHER_LDFLAGS = (
649 | "-ObjC",
650 | "-lc++",
651 | );
652 | PRODUCT_NAME = example;
653 | };
654 | name = Release;
655 | };
656 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
657 | isa = XCBuildConfiguration;
658 | buildSettings = {
659 | ALWAYS_SEARCH_USER_PATHS = NO;
660 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
661 | CLANG_CXX_LIBRARY = "libc++";
662 | CLANG_ENABLE_MODULES = YES;
663 | CLANG_ENABLE_OBJC_ARC = YES;
664 | CLANG_WARN_BOOL_CONVERSION = YES;
665 | CLANG_WARN_CONSTANT_CONVERSION = YES;
666 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
667 | CLANG_WARN_EMPTY_BODY = YES;
668 | CLANG_WARN_ENUM_CONVERSION = YES;
669 | CLANG_WARN_INT_CONVERSION = YES;
670 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
671 | CLANG_WARN_UNREACHABLE_CODE = YES;
672 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
673 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
674 | COPY_PHASE_STRIP = NO;
675 | ENABLE_STRICT_OBJC_MSGSEND = YES;
676 | GCC_C_LANGUAGE_STANDARD = gnu99;
677 | GCC_DYNAMIC_NO_PIC = NO;
678 | GCC_OPTIMIZATION_LEVEL = 0;
679 | GCC_PREPROCESSOR_DEFINITIONS = (
680 | "DEBUG=1",
681 | "$(inherited)",
682 | );
683 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
684 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
685 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
686 | GCC_WARN_UNDECLARED_SELECTOR = YES;
687 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
688 | GCC_WARN_UNUSED_FUNCTION = YES;
689 | GCC_WARN_UNUSED_VARIABLE = YES;
690 | HEADER_SEARCH_PATHS = (
691 | "$(inherited)",
692 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
693 | "$(SRCROOT)/../node_modules/react-native/React/**",
694 | "$(SRCROOT)/../node_modules/react-native-aes-encryption/ios/ReactAES",
695 | );
696 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
697 | MTL_ENABLE_DEBUG_INFO = YES;
698 | ONLY_ACTIVE_ARCH = YES;
699 | SDKROOT = iphoneos;
700 | };
701 | name = Debug;
702 | };
703 | 83CBBA211A601CBA00E9B192 /* Release */ = {
704 | isa = XCBuildConfiguration;
705 | buildSettings = {
706 | ALWAYS_SEARCH_USER_PATHS = NO;
707 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
708 | CLANG_CXX_LIBRARY = "libc++";
709 | CLANG_ENABLE_MODULES = YES;
710 | CLANG_ENABLE_OBJC_ARC = YES;
711 | CLANG_WARN_BOOL_CONVERSION = YES;
712 | CLANG_WARN_CONSTANT_CONVERSION = YES;
713 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
714 | CLANG_WARN_EMPTY_BODY = YES;
715 | CLANG_WARN_ENUM_CONVERSION = YES;
716 | CLANG_WARN_INT_CONVERSION = YES;
717 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
718 | CLANG_WARN_UNREACHABLE_CODE = YES;
719 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
720 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
721 | COPY_PHASE_STRIP = YES;
722 | ENABLE_NS_ASSERTIONS = NO;
723 | ENABLE_STRICT_OBJC_MSGSEND = YES;
724 | GCC_C_LANGUAGE_STANDARD = gnu99;
725 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
726 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
727 | GCC_WARN_UNDECLARED_SELECTOR = YES;
728 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
729 | GCC_WARN_UNUSED_FUNCTION = YES;
730 | GCC_WARN_UNUSED_VARIABLE = YES;
731 | HEADER_SEARCH_PATHS = (
732 | "$(inherited)",
733 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
734 | "$(SRCROOT)/../node_modules/react-native/React/**",
735 | "$(SRCROOT)/../node_modules/react-native-aes-encryption/ios/ReactAES",
736 | );
737 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
738 | MTL_ENABLE_DEBUG_INFO = NO;
739 | SDKROOT = iphoneos;
740 | VALIDATE_PRODUCT = YES;
741 | };
742 | name = Release;
743 | };
744 | /* End XCBuildConfiguration section */
745 |
746 | /* Begin XCConfigurationList section */
747 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */ = {
748 | isa = XCConfigurationList;
749 | buildConfigurations = (
750 | 00E356F61AD99517003FC87E /* Debug */,
751 | 00E356F71AD99517003FC87E /* Release */,
752 | );
753 | defaultConfigurationIsVisible = 0;
754 | defaultConfigurationName = Release;
755 | };
756 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */ = {
757 | isa = XCConfigurationList;
758 | buildConfigurations = (
759 | 13B07F941A680F5B00A75B9A /* Debug */,
760 | 13B07F951A680F5B00A75B9A /* Release */,
761 | );
762 | defaultConfigurationIsVisible = 0;
763 | defaultConfigurationName = Release;
764 | };
765 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */ = {
766 | isa = XCConfigurationList;
767 | buildConfigurations = (
768 | 83CBBA201A601CBA00E9B192 /* Debug */,
769 | 83CBBA211A601CBA00E9B192 /* Release */,
770 | );
771 | defaultConfigurationIsVisible = 0;
772 | defaultConfigurationName = Release;
773 | };
774 | /* End XCConfigurationList section */
775 | };
776 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
777 | }
778 |
--------------------------------------------------------------------------------