commit
ff17b2a0d3
45 changed files with 2219 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
|
||||||
|
[android] |
||||||
|
target = Google Inc.:Google APIs:23 |
||||||
|
|
||||||
|
[maven_repositories] |
||||||
|
central = https://repo1.maven.org/maven2 |
@ -0,0 +1,58 @@ |
|||||||
|
[ignore] |
||||||
|
|
||||||
|
# We fork some components by platform. |
||||||
|
.*/*[.]android.js |
||||||
|
|
||||||
|
# Ignore templates with `@flow` in header |
||||||
|
.*/local-cli/generator.* |
||||||
|
|
||||||
|
# Ignore malformed json |
||||||
|
.*/node_modules/y18n/test/.*\.json |
||||||
|
|
||||||
|
# Ignore the website subdir |
||||||
|
<PROJECT_ROOT>/website/.* |
||||||
|
|
||||||
|
# Ignore BUCK generated dirs |
||||||
|
<PROJECT_ROOT>/\.buckd/ |
||||||
|
|
||||||
|
# Ignore unexpected extra @providesModule |
||||||
|
.*/node_modules/commoner/test/source/widget/share.js |
||||||
|
|
||||||
|
# Ignore duplicate module providers |
||||||
|
# For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root |
||||||
|
.*/Libraries/react-native/React.js |
||||||
|
.*/Libraries/react-native/ReactNative.js |
||||||
|
.*/node_modules/jest-runtime/build/__tests__/.* |
||||||
|
|
||||||
|
[include] |
||||||
|
|
||||||
|
[libs] |
||||||
|
node_modules/react-native/Libraries/react-native/react-native-interface.js |
||||||
|
node_modules/react-native/flow |
||||||
|
flow/ |
||||||
|
|
||||||
|
[options] |
||||||
|
module.system=haste |
||||||
|
|
||||||
|
esproposal.class_static_fields=enable |
||||||
|
esproposal.class_instance_fields=enable |
||||||
|
|
||||||
|
experimental.strict_type_args=true |
||||||
|
|
||||||
|
munge_underscores=true |
||||||
|
|
||||||
|
module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' |
||||||
|
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' |
||||||
|
|
||||||
|
suppress_type=$FlowIssue |
||||||
|
suppress_type=$FlowFixMe |
||||||
|
suppress_type=$FixMe |
||||||
|
|
||||||
|
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(30\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) |
||||||
|
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(30\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ |
||||||
|
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy |
||||||
|
|
||||||
|
unsafe.enable_getters_and_setters=true |
||||||
|
|
||||||
|
[version] |
||||||
|
^0.30.0 |
@ -0,0 +1,41 @@ |
|||||||
|
# OSX |
||||||
|
# |
||||||
|
.DS_Store |
||||||
|
|
||||||
|
# Xcode |
||||||
|
# |
||||||
|
build/ |
||||||
|
*.pbxuser |
||||||
|
!default.pbxuser |
||||||
|
*.mode1v3 |
||||||
|
!default.mode1v3 |
||||||
|
*.mode2v3 |
||||||
|
!default.mode2v3 |
||||||
|
*.perspectivev3 |
||||||
|
!default.perspectivev3 |
||||||
|
xcuserdata |
||||||
|
*.xccheckout |
||||||
|
*.moved-aside |
||||||
|
DerivedData |
||||||
|
*.hmap |
||||||
|
*.ipa |
||||||
|
*.xcuserstate |
||||||
|
project.xcworkspace |
||||||
|
|
||||||
|
# Android/IJ |
||||||
|
# |
||||||
|
*.iml |
||||||
|
.idea |
||||||
|
.gradle |
||||||
|
local.properties |
||||||
|
|
||||||
|
# node.js |
||||||
|
# |
||||||
|
node_modules/ |
||||||
|
npm-debug.log |
||||||
|
|
||||||
|
# BUCK |
||||||
|
buck-out/ |
||||||
|
\.buckd/ |
||||||
|
android/app/libs |
||||||
|
android/keystores/debug.keystore |
@ -0,0 +1 @@ |
|||||||
|
{} |
@ -0,0 +1,14 @@ |
|||||||
|
## Counter Example |
||||||
|
|
||||||
|
#### React-Native 0.32.0 & Redux 3.5.2 & React-Redux 4.4.5 |
||||||
|
|
||||||
|
This repo demonstrates the usage of latest React-Native with Redux. |
||||||
|
|
||||||
|
### Usage |
||||||
|
|
||||||
|
- you have to use `npm@3.x`, if you are using `npm@2.x` you might get into some weird scenarios. Please open an issue if you can't get it run on `npm@2.x`. also you can follow this [issue](https://github.com/rackt/react-redux/issues/236) for more info. |
||||||
|
- clone the project |
||||||
|
- go to `Counter` folder |
||||||
|
- run `npm install` |
||||||
|
|
||||||
|
Cheers, |
@ -0,0 +1,66 @@ |
|||||||
|
import re |
||||||
|
|
||||||
|
# To learn about Buck see [Docs](https://buckbuild.com/). |
||||||
|
# To run your application with Buck: |
||||||
|
# - install Buck |
||||||
|
# - `npm start` - to start the packager |
||||||
|
# - `cd android` |
||||||
|
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` |
||||||
|
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck |
||||||
|
# - `buck install -r android/app` - compile, install and run application |
||||||
|
# |
||||||
|
|
||||||
|
lib_deps = [] |
||||||
|
for jarfile in glob(['libs/*.jar']): |
||||||
|
name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) |
||||||
|
lib_deps.append(':' + name) |
||||||
|
prebuilt_jar( |
||||||
|
name = name, |
||||||
|
binary_jar = jarfile, |
||||||
|
) |
||||||
|
|
||||||
|
for aarfile in glob(['libs/*.aar']): |
||||||
|
name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) |
||||||
|
lib_deps.append(':' + name) |
||||||
|
android_prebuilt_aar( |
||||||
|
name = name, |
||||||
|
aar = aarfile, |
||||||
|
) |
||||||
|
|
||||||
|
android_library( |
||||||
|
name = 'all-libs', |
||||||
|
exported_deps = lib_deps |
||||||
|
) |
||||||
|
|
||||||
|
android_library( |
||||||
|
name = 'app-code', |
||||||
|
srcs = glob([ |
||||||
|
'src/main/java/**/*.java', |
||||||
|
]), |
||||||
|
deps = [ |
||||||
|
':all-libs', |
||||||
|
':build_config', |
||||||
|
':res', |
||||||
|
], |
||||||
|
) |
||||||
|
|
||||||
|
android_build_config( |
||||||
|
name = 'build_config', |
||||||
|
package = 'com.counter', |
||||||
|
) |
||||||
|
|
||||||
|
android_resource( |
||||||
|
name = 'res', |
||||||
|
res = 'src/main/res', |
||||||
|
package = 'com.counter', |
||||||
|
) |
||||||
|
|
||||||
|
android_binary( |
||||||
|
name = 'app', |
||||||
|
package_type = 'debug', |
||||||
|
manifest = 'src/main/AndroidManifest.xml', |
||||||
|
keystore = '//android/keystores:debug', |
||||||
|
deps = [ |
||||||
|
':app-code', |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,139 @@ |
|||||||
|
apply plugin: "com.android.application" |
||||||
|
|
||||||
|
import com.android.build.OutputFile |
||||||
|
|
||||||
|
/** |
||||||
|
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets |
||||||
|
* and bundleReleaseJsAndAssets). |
||||||
|
* These basically call `react-native bundle` with the correct arguments during the Android build |
||||||
|
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the |
||||||
|
* bundle directly from the development server. Below you can see all the possible configurations |
||||||
|
* and their defaults. If you decide to add a configuration block, make sure to add it before the |
||||||
|
* `apply from: "../../node_modules/react-native/react.gradle"` line. |
||||||
|
* |
||||||
|
* project.ext.react = [ |
||||||
|
* // the name of the generated asset file containing your JS bundle |
||||||
|
* bundleAssetName: "index.android.bundle", |
||||||
|
* |
||||||
|
* // the entry file for bundle generation |
||||||
|
* entryFile: "index.android.js", |
||||||
|
* |
||||||
|
* // whether to bundle JS and assets in debug mode |
||||||
|
* bundleInDebug: false, |
||||||
|
* |
||||||
|
* // whether to bundle JS and assets in release mode |
||||||
|
* bundleInRelease: true, |
||||||
|
* |
||||||
|
* // whether to bundle JS and assets in another build variant (if configured). |
||||||
|
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants |
||||||
|
* // The configuration property can be in the following formats |
||||||
|
* // 'bundleIn${productFlavor}${buildType}' |
||||||
|
* // 'bundleIn${buildType}' |
||||||
|
* // bundleInFreeDebug: true, |
||||||
|
* // bundleInPaidRelease: true, |
||||||
|
* // bundleInBeta: true, |
||||||
|
* |
||||||
|
* // the root of your project, i.e. where "package.json" lives |
||||||
|
* root: "../../", |
||||||
|
* |
||||||
|
* // where to put the JS bundle asset in debug mode |
||||||
|
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug", |
||||||
|
* |
||||||
|
* // where to put the JS bundle asset in release mode |
||||||
|
* jsBundleDirRelease: "$buildDir/intermediates/assets/release", |
||||||
|
* |
||||||
|
* // where to put drawable resources / React Native assets, e.g. the ones you use via |
||||||
|
* // require('./image.png')), in debug mode |
||||||
|
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", |
||||||
|
* |
||||||
|
* // where to put drawable resources / React Native assets, e.g. the ones you use via |
||||||
|
* // require('./image.png')), in release mode |
||||||
|
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release", |
||||||
|
* |
||||||
|
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means |
||||||
|
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to |
||||||
|
* // date; if you have any other folders that you want to ignore for performance reasons (gradle |
||||||
|
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ |
||||||
|
* // for example, you might want to remove it from here. |
||||||
|
* inputExcludes: ["android/**", "ios/**"], |
||||||
|
* |
||||||
|
* // override which node gets called and with what additional arguments |
||||||
|
* nodeExecutableAndArgs: ["node"] |
||||||
|
* |
||||||
|
* // supply additional arguments to the packager |
||||||
|
* extraPackagerArgs: [] |
||||||
|
* ] |
||||||
|
*/ |
||||||
|
|
||||||
|
apply from: "../../node_modules/react-native/react.gradle" |
||||||
|
|
||||||
|
/** |
||||||
|
* Set this to true to create two separate APKs instead of one: |
||||||
|
* - An APK that only works on ARM devices |
||||||
|
* - An APK that only works on x86 devices |
||||||
|
* The advantage is the size of the APK is reduced by about 4MB. |
||||||
|
* Upload all the APKs to the Play Store and people will download |
||||||
|
* the correct one based on the CPU architecture of their device. |
||||||
|
*/ |
||||||
|
def enableSeparateBuildPerCPUArchitecture = false |
||||||
|
|
||||||
|
/** |
||||||
|
* Run Proguard to shrink the Java bytecode in release builds. |
||||||
|
*/ |
||||||
|
def enableProguardInReleaseBuilds = false |
||||||
|
|
||||||
|
android { |
||||||
|
compileSdkVersion 23 |
||||||
|
buildToolsVersion "23.0.1" |
||||||
|
|
||||||
|
defaultConfig { |
||||||
|
applicationId "com.counter" |
||||||
|
minSdkVersion 16 |
||||||
|
targetSdkVersion 22 |
||||||
|
versionCode 1 |
||||||
|
versionName "1.0" |
||||||
|
ndk { |
||||||
|
abiFilters "armeabi-v7a", "x86" |
||||||
|
} |
||||||
|
} |
||||||
|
splits { |
||||||
|
abi { |
||||||
|
reset() |
||||||
|
enable enableSeparateBuildPerCPUArchitecture |
||||||
|
universalApk false // If true, also generate a universal APK |
||||||
|
include "armeabi-v7a", "x86" |
||||||
|
} |
||||||
|
} |
||||||
|
buildTypes { |
||||||
|
release { |
||||||
|
minifyEnabled enableProguardInReleaseBuilds |
||||||
|
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" |
||||||
|
} |
||||||
|
} |
||||||
|
// applicationVariants are e.g. debug, release |
||||||
|
applicationVariants.all { variant -> |
||||||
|
variant.outputs.each { output -> |
||||||
|
// For each separate APK per architecture, set a unique version code as described here: |
||||||
|
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits |
||||||
|
def versionCodes = ["armeabi-v7a":1, "x86":2] |
||||||
|
def abi = output.getFilter(OutputFile.ABI) |
||||||
|
if (abi != null) { // null for the universal-debug, universal-release variants |
||||||
|
output.versionCodeOverride = |
||||||
|
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
compile fileTree(dir: "libs", include: ["*.jar"]) |
||||||
|
compile "com.android.support:appcompat-v7:23.0.1" |
||||||
|
compile "com.facebook.react:react-native:+" // From node_modules |
||||||
|
} |
||||||
|
|
||||||
|
// Run this once to be able to run the application with BUCK |
||||||
|
// puts all compile dependencies into folder libs for BUCK to use |
||||||
|
task copyDownloadableDepsToLibs(type: Copy) { |
||||||
|
from configurations.compile |
||||||
|
into 'libs' |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
# Add project specific ProGuard rules here. |
||||||
|
# By default, the flags in this file are appended to flags specified |
||||||
|
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt |
||||||
|
# You can edit the include path and order by changing the proguardFiles |
||||||
|
# directive in build.gradle. |
||||||
|
# |
||||||
|
# For more details, see |
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html |
||||||
|
|
||||||
|
# Add any project specific keep options here: |
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following |
||||||
|
# and specify the fully qualified class name to the JavaScript interface |
||||||
|
# class: |
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
||||||
|
# public *; |
||||||
|
#} |
||||||
|
|
||||||
|
# Disabling obfuscation is useful if you collect stack traces from production crashes |
||||||
|
# (unless you are using a system that supports de-obfuscate the stack traces). |
||||||
|
-dontobfuscate |
||||||
|
|
||||||
|
# React Native |
||||||
|
|
||||||
|
# Keep our interfaces so they can be used by other ProGuard rules. |
||||||
|
# See http://sourceforge.net/p/proguard/bugs/466/ |
||||||
|
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip |
||||||
|
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters |
||||||
|
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip |
||||||
|
|
||||||
|
# Do not strip any method/class that is annotated with @DoNotStrip |
||||||
|
-keep @com.facebook.proguard.annotations.DoNotStrip class * |
||||||
|
-keep @com.facebook.common.internal.DoNotStrip class * |
||||||
|
-keepclassmembers class * { |
||||||
|
@com.facebook.proguard.annotations.DoNotStrip *; |
||||||
|
@com.facebook.common.internal.DoNotStrip *; |
||||||
|
} |
||||||
|
|
||||||
|
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { |
||||||
|
void set*(***); |
||||||
|
*** get*(); |
||||||
|
} |
||||||
|
|
||||||
|
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } |
||||||
|
-keep class * extends com.facebook.react.bridge.NativeModule { *; } |
||||||
|
-keepclassmembers,includedescriptorclasses class * { native <methods>; } |
||||||
|
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; } |
||||||
|
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; } |
||||||
|
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; } |
||||||
|
|
||||||
|
-dontwarn com.facebook.react.** |
||||||
|
|
||||||
|
# okhttp |
||||||
|
|
||||||
|
-keepattributes Signature |
||||||
|
-keepattributes *Annotation* |
||||||
|
-keep class okhttp3.** { *; } |
||||||
|
-keep interface okhttp3.** { *; } |
||||||
|
-dontwarn okhttp3.** |
||||||
|
|
||||||
|
# okio |
||||||
|
|
||||||
|
-keep class sun.misc.Unsafe { *; } |
||||||
|
-dontwarn java.nio.file.* |
||||||
|
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement |
||||||
|
-dontwarn okio.** |
@ -0,0 +1,97 @@ |
|||||||
|
import org.apache.tools.ant.taskdefs.condition.Os |
||||||
|
|
||||||
|
def config = project.hasProperty("react") ? project.react : []; |
||||||
|
|
||||||
|
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle" |
||||||
|
def entryFile = config.entryFile ?: "index.android.js" |
||||||
|
|
||||||
|
// because elvis operator |
||||||
|
def elvisFile(thing) { |
||||||
|
return thing ? file(thing) : null; |
||||||
|
} |
||||||
|
|
||||||
|
def reactRoot = elvisFile(config.root) ?: file("../../") |
||||||
|
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"] |
||||||
|
|
||||||
|
void runBefore(String dependentTaskName, Task task) { |
||||||
|
Task dependentTask = tasks.findByPath(dependentTaskName); |
||||||
|
if (dependentTask != null) { |
||||||
|
dependentTask.dependsOn task |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
gradle.projectsEvaluated { |
||||||
|
// Grab all build types and product flavors |
||||||
|
def buildTypes = android.buildTypes.collect { type -> type.name } |
||||||
|
def productFlavors = android.productFlavors.collect { flavor -> flavor.name } |
||||||
|
|
||||||
|
// When no product flavors defined, use empty |
||||||
|
if (!productFlavors) productFlavors.add('') |
||||||
|
|
||||||
|
productFlavors.each { productFlavorName -> |
||||||
|
buildTypes.each { buildTypeName -> |
||||||
|
// Create variant and target names |
||||||
|
def targetName = "${productFlavorName.capitalize()}${buildTypeName.capitalize()}" |
||||||
|
def targetPath = productFlavorName ? |
||||||
|
"${productFlavorName}/${buildTypeName}" : |
||||||
|
"${buildTypeName}" |
||||||
|
|
||||||
|
// React js bundle directories |
||||||
|
def jsBundleDirConfigName = "jsBundleDir${targetName}" |
||||||
|
def jsBundleDir = elvisFile(config."$jsBundleDirConfigName") ?: |
||||||
|
file("$buildDir/intermediates/assets/${targetPath}") |
||||||
|
|
||||||
|
def resourcesDirConfigName = "jsBundleDir${targetName}" |
||||||
|
def resourcesDir = elvisFile(config."${resourcesDirConfigName}") ?: |
||||||
|
file("$buildDir/intermediates/res/merged/${targetPath}") |
||||||
|
def jsBundleFile = file("$jsBundleDir/$bundleAssetName") |
||||||
|
|
||||||
|
// Bundle task name for variant |
||||||
|
def bundleJsAndAssetsTaskName = "bundle${targetName}JsAndAssets" |
||||||
|
|
||||||
|
def currentBundleTask = tasks.create( |
||||||
|
name: bundleJsAndAssetsTaskName, |
||||||
|
type: Exec) { |
||||||
|
group = "react" |
||||||
|
description = "bundle JS and assets for ${targetName}." |
||||||
|
|
||||||
|
// Create dirs if they are not there (e.g. the "clean" task just ran) |
||||||
|
doFirst { |
||||||
|
jsBundleDir.mkdirs() |
||||||
|
resourcesDir.mkdirs() |
||||||
|
} |
||||||
|
|
||||||
|
// Set up inputs and outputs so gradle can cache the result |
||||||
|
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes) |
||||||
|
outputs.dir jsBundleDir |
||||||
|
outputs.dir resourcesDir |
||||||
|
|
||||||
|
// Set up the call to the react-native cli |
||||||
|
workingDir reactRoot |
||||||
|
|
||||||
|
// Set up dev mode |
||||||
|
def devEnabled = !targetName.toLowerCase().contains("release") |
||||||
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) { |
||||||
|
commandLine "cmd", "/c", "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", |
||||||
|
"--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir |
||||||
|
} else { |
||||||
|
commandLine "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", |
||||||
|
"--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir |
||||||
|
} |
||||||
|
|
||||||
|
enabled config."bundleIn${targetName}" || |
||||||
|
config."bundleIn${buildTypeName.capitalize()}" ?: |
||||||
|
targetName.toLowerCase().contains("release") |
||||||
|
} |
||||||
|
|
||||||
|
// Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process |
||||||
|
currentBundleTask.dependsOn("merge${targetName}Resources") |
||||||
|
currentBundleTask.dependsOn("merge${targetName}Assets") |
||||||
|
|
||||||
|
runBefore("processArmeabi-v7a${targetName}Resources", currentBundleTask) |
||||||
|
runBefore("processX86${targetName}Resources", currentBundleTask) |
||||||
|
runBefore("processUniversal${targetName}Resources", currentBundleTask) |
||||||
|
runBefore("process${targetName}Resources", currentBundleTask) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
package="com.counter"> |
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" /> |
||||||
|
|
||||||
|
<application |
||||||
|
android:allowBackup="true" |
||||||
|
android:label="@string/app_name" |
||||||
|
android:icon="@mipmap/ic_launcher" |
||||||
|
android:theme="@style/AppTheme" |
||||||
|
android:name=".MainApplication"> |
||||||
|
<activity |
||||||
|
android:name=".MainActivity" |
||||||
|
android:label="@string/app_name" |
||||||
|
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> |
||||||
|
<intent-filter> |
||||||
|
<action android:name="android.intent.action.MAIN" /> |
||||||
|
<category android:name="android.intent.category.LAUNCHER" /> |
||||||
|
</intent-filter> |
||||||
|
</activity> |
||||||
|
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> |
||||||
|
</application> |
||||||
|
|
||||||
|
</manifest> |
@ -0,0 +1,15 @@ |
|||||||
|
package com.counter; |
||||||
|
|
||||||
|
import com.facebook.react.ReactActivity; |
||||||
|
|
||||||
|
public class MainActivity extends ReactActivity { |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the name of the main component registered from JavaScript. |
||||||
|
* This is used to schedule rendering of the component. |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected String getMainComponentName() { |
||||||
|
return "Counter"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.counter; |
||||||
|
|
||||||
|
import android.app.Application; |
||||||
|
import android.util.Log; |
||||||
|
|
||||||
|
import com.facebook.react.ReactApplication; |
||||||
|
import com.facebook.react.ReactInstanceManager; |
||||||
|
import com.facebook.react.ReactNativeHost; |
||||||
|
import com.facebook.react.ReactPackage; |
||||||
|
import com.facebook.react.shell.MainReactPackage; |
||||||
|
|
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class MainApplication extends Application implements ReactApplication { |
||||||
|
|
||||||
|
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { |
||||||
|
@Override |
||||||
|
protected boolean getUseDeveloperSupport() { |
||||||
|
return BuildConfig.DEBUG; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<ReactPackage> getPackages() { |
||||||
|
return Arrays.<ReactPackage>asList( |
||||||
|
new MainReactPackage() |
||||||
|
); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public ReactNativeHost getReactNativeHost() { |
||||||
|
return mReactNativeHost; |
||||||
|
} |
||||||
|
} |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 7.5 KiB |
@ -0,0 +1,3 @@ |
|||||||
|
<resources> |
||||||
|
<string name="app_name">Counter</string> |
||||||
|
</resources> |
@ -0,0 +1,8 @@ |
|||||||
|
<resources> |
||||||
|
|
||||||
|
<!-- Base application theme. --> |
||||||
|
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> |
||||||
|
<!-- Customize your theme here. --> |
||||||
|
</style> |
||||||
|
|
||||||
|
</resources> |
@ -0,0 +1,24 @@ |
|||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
||||||
|
|
||||||
|
buildscript { |
||||||
|
repositories { |
||||||
|
jcenter() |
||||||
|
} |
||||||
|
dependencies { |
||||||
|
classpath 'com.android.tools.build:gradle:1.3.1' |
||||||
|
|
||||||
|
// NOTE: Do not place your application dependencies here; they belong |
||||||
|
// in the individual module build.gradle files |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
allprojects { |
||||||
|
repositories { |
||||||
|
mavenLocal() |
||||||
|
jcenter() |
||||||
|
maven { |
||||||
|
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm |
||||||
|
url "$rootDir/../node_modules/react-native/android" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
# Project-wide Gradle settings. |
||||||
|
|
||||||
|
# IDE (e.g. Android Studio) users: |
||||||
|
# Gradle settings configured through the IDE *will override* |
||||||
|
# any settings specified in this file. |
||||||
|
|
||||||
|
# For more details on how to configure your build environment visit |
||||||
|
# http://www.gradle.org/docs/current/userguide/build_environment.html |
||||||
|
|
||||||
|
# Specifies the JVM arguments used for the daemon process. |
||||||
|
# The setting is particularly useful for tweaking memory settings. |
||||||
|
# Default value: -Xmx10248m -XX:MaxPermSize=256m |
||||||
|
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 |
||||||
|
|
||||||
|
# When configured, Gradle will run in incubating parallel mode. |
||||||
|
# This option should only be used with decoupled projects. More details, visit |
||||||
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects |
||||||
|
# org.gradle.parallel=true |
||||||
|
|
||||||
|
android.useDeprecatedNdk=true |
Binary file not shown.
@ -0,0 +1,6 @@ |
|||||||
|
#Wed Aug 24 16:23:50 IDT 2016 |
||||||
|
distributionBase=GRADLE_USER_HOME |
||||||
|
distributionPath=wrapper/dists |
||||||
|
zipStoreBase=GRADLE_USER_HOME |
||||||
|
zipStorePath=wrapper/dists |
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip |
@ -0,0 +1,164 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
############################################################################## |
||||||
|
## |
||||||
|
## Gradle start up script for UN*X |
||||||
|
## |
||||||
|
############################################################################## |
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
||||||
|
DEFAULT_JVM_OPTS="" |
||||||
|
|
||||||
|
APP_NAME="Gradle" |
||||||
|
APP_BASE_NAME=`basename "$0"` |
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value. |
||||||
|
MAX_FD="maximum" |
||||||
|
|
||||||
|
warn ( ) { |
||||||
|
echo "$*" |
||||||
|
} |
||||||
|
|
||||||
|
die ( ) { |
||||||
|
echo |
||||||
|
echo "$*" |
||||||
|
echo |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false'). |
||||||
|
cygwin=false |
||||||
|
msys=false |
||||||
|
darwin=false |
||||||
|
case "`uname`" in |
||||||
|
CYGWIN* ) |
||||||
|
cygwin=true |
||||||
|
;; |
||||||
|
Darwin* ) |
||||||
|
darwin=true |
||||||
|
;; |
||||||
|
MINGW* ) |
||||||
|
msys=true |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
# For Cygwin, ensure paths are in UNIX format before anything is touched. |
||||||
|
if $cygwin ; then |
||||||
|
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` |
||||||
|
fi |
||||||
|
|
||||||
|
# Attempt to set APP_HOME |
||||||
|
# Resolve links: $0 may be a link |
||||||
|
PRG="$0" |
||||||
|
# Need this for relative symlinks. |
||||||
|
while [ -h "$PRG" ] ; do |
||||||
|
ls=`ls -ld "$PRG"` |
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'` |
||||||
|
if expr "$link" : '/.*' > /dev/null; then |
||||||
|
PRG="$link" |
||||||
|
else |
||||||
|
PRG=`dirname "$PRG"`"/$link" |
||||||
|
fi |
||||||
|
done |
||||||
|
SAVED="`pwd`" |
||||||
|
cd "`dirname \"$PRG\"`/" >&- |
||||||
|
APP_HOME="`pwd -P`" |
||||||
|
cd "$SAVED" >&- |
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM. |
||||||
|
if [ -n "$JAVA_HOME" ] ; then |
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
||||||
|
# IBM's JDK on AIX uses strange locations for the executables |
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java" |
||||||
|
else |
||||||
|
JAVACMD="$JAVA_HOME/bin/java" |
||||||
|
fi |
||||||
|
if [ ! -x "$JAVACMD" ] ; then |
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the |
||||||
|
location of your Java installation." |
||||||
|
fi |
||||||
|
else |
||||||
|
JAVACMD="java" |
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the |
||||||
|
location of your Java installation." |
||||||
|
fi |
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can. |
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then |
||||||
|
MAX_FD_LIMIT=`ulimit -H -n` |
||||||
|
if [ $? -eq 0 ] ; then |
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then |
||||||
|
MAX_FD="$MAX_FD_LIMIT" |
||||||
|
fi |
||||||
|
ulimit -n $MAX_FD |
||||||
|
if [ $? -ne 0 ] ; then |
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD" |
||||||
|
fi |
||||||
|
else |
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock |
||||||
|
if $darwin; then |
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |
||||||
|
fi |
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java |
||||||
|
if $cygwin ; then |
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"` |
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath |
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` |
||||||
|
SEP="" |
||||||
|
for dir in $ROOTDIRSRAW ; do |
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir" |
||||||
|
SEP="|" |
||||||
|
done |
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))" |
||||||
|
# Add a user-defined pattern to the cygpath arguments |
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then |
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" |
||||||
|
fi |
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh |
||||||
|
i=0 |
||||||
|
for arg in "$@" ; do |
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` |
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option |
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition |
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` |
||||||
|
else |
||||||
|
eval `echo args$i`="\"$arg\"" |
||||||
|
fi |
||||||
|
i=$((i+1)) |
||||||
|
done |
||||||
|
case $i in |
||||||
|
(0) set -- ;; |
||||||
|
(1) set -- "$args0" ;; |
||||||
|
(2) set -- "$args0" "$args1" ;; |
||||||
|
(3) set -- "$args0" "$args1" "$args2" ;; |
||||||
|
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; |
||||||
|
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |
||||||
|
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |
||||||
|
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |
||||||
|
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |
||||||
|
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |
||||||
|
esac |
||||||
|
fi |
||||||
|
|
||||||
|
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules |
||||||
|
function splitJvmOpts() { |
||||||
|
JVM_OPTS=("$@") |
||||||
|
} |
||||||
|
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS |
||||||
|
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" |
||||||
|
|
||||||
|
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
@ -0,0 +1,90 @@ |
|||||||
|
@if "%DEBUG%" == "" @echo off |
||||||
|
@rem ########################################################################## |
||||||
|
@rem |
||||||
|
@rem Gradle startup script for Windows |
||||||
|
@rem |
||||||
|
@rem ########################################################################## |
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell |
||||||
|
if "%OS%"=="Windows_NT" setlocal |
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
||||||
|
set DEFAULT_JVM_OPTS= |
||||||
|
|
||||||
|
set DIRNAME=%~dp0 |
||||||
|
if "%DIRNAME%" == "" set DIRNAME=. |
||||||
|
set APP_BASE_NAME=%~n0 |
||||||
|
set APP_HOME=%DIRNAME% |
||||||
|
|
||||||
|
@rem Find java.exe |
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome |
||||||
|
|
||||||
|
set JAVA_EXE=java.exe |
||||||
|
%JAVA_EXE% -version >NUL 2>&1 |
||||||
|
if "%ERRORLEVEL%" == "0" goto init |
||||||
|
|
||||||
|
echo. |
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
||||||
|
echo. |
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the |
||||||
|
echo location of your Java installation. |
||||||
|
|
||||||
|
goto fail |
||||||
|
|
||||||
|
:findJavaFromJavaHome |
||||||
|
set JAVA_HOME=%JAVA_HOME:"=% |
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe |
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto init |
||||||
|
|
||||||
|
echo. |
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% |
||||||
|
echo. |
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the |
||||||
|
echo location of your Java installation. |
||||||
|
|
||||||
|
goto fail |
||||||
|
|
||||||
|
:init |
||||||
|
@rem Get command-line arguments, handling Windowz variants |
||||||
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args |
||||||
|
if "%@eval[2+2]" == "4" goto 4NT_args |
||||||
|
|
||||||
|
:win9xME_args |
||||||
|
@rem Slurp the command line arguments. |
||||||
|
set CMD_LINE_ARGS= |
||||||
|
set _SKIP=2 |
||||||
|
|
||||||
|
:win9xME_args_slurp |
||||||
|
if "x%~1" == "x" goto execute |
||||||
|
|
||||||
|
set CMD_LINE_ARGS=%* |
||||||
|
goto execute |
||||||
|
|
||||||
|
:4NT_args |
||||||
|
@rem Get arguments from the 4NT Shell from JP Software |
||||||
|
set CMD_LINE_ARGS=%$ |
||||||
|
|
||||||
|
:execute |
||||||
|
@rem Setup the command line |
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar |
||||||
|
|
||||||
|
@rem Execute Gradle |
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% |
||||||
|
|
||||||
|
:end |
||||||
|
@rem End local scope for the variables with windows NT shell |
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd |
||||||
|
|
||||||
|
:fail |
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of |
||||||
|
rem the _cmd.exe /c_ return code! |
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 |
||||||
|
exit /b 1 |
||||||
|
|
||||||
|
:mainEnd |
||||||
|
if "%OS%"=="Windows_NT" endlocal |
||||||
|
|
||||||
|
:omega |
@ -0,0 +1,3 @@ |
|||||||
|
rootProject.name = 'Counter' |
||||||
|
|
||||||
|
include ':app' |
@ -0,0 +1,2 @@ |
|||||||
|
export const INCREMENT = 'INCREMENT'; |
||||||
|
export const DECREMENT = 'DECREMENT'; |
@ -0,0 +1,13 @@ |
|||||||
|
import * as types from './actionTypes'; |
||||||
|
|
||||||
|
export function increment() { |
||||||
|
return { |
||||||
|
type: types.INCREMENT |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
export function decrement() { |
||||||
|
return { |
||||||
|
type: types.DECREMENT |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
import React, {Component} from 'react'; |
||||||
|
import {StyleSheet, View, Text, TouchableOpacity} from 'react-native'; |
||||||
|
|
||||||
|
const styles = StyleSheet.create({ |
||||||
|
button: { |
||||||
|
width: 100, |
||||||
|
height: 30, |
||||||
|
padding: 10, |
||||||
|
backgroundColor: 'lightgray', |
||||||
|
alignItems: 'center', |
||||||
|
justifyContent: 'center', |
||||||
|
margin: 3 |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
export default class Counter extends Component { |
||||||
|
constructor(props) { |
||||||
|
super(props); |
||||||
|
} |
||||||
|
|
||||||
|
render() { |
||||||
|
const { counter, increment, decrement } = this.props; |
||||||
|
|
||||||
|
return ( |
||||||
|
<View style={{flex: 1, alignItems: 'center', justifyContent: 'center' }}> |
||||||
|
<Text>{counter}</Text> |
||||||
|
<TouchableOpacity onPress={increment} style={styles.button}> |
||||||
|
<Text>up</Text> |
||||||
|
</TouchableOpacity> |
||||||
|
<TouchableOpacity onPress={decrement} style={styles.button}> |
||||||
|
<Text>down</Text> |
||||||
|
</TouchableOpacity> |
||||||
|
</View> |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
import React, {Component} from 'react'; |
||||||
|
import { createStore, applyMiddleware, combineReducers } from 'redux'; |
||||||
|
import { Provider } from 'react-redux'; |
||||||
|
import thunk from 'redux-thunk'; |
||||||
|
|
||||||
|
import * as reducers from '../reducers'; |
||||||
|
import CounterApp from './counterApp'; |
||||||
|
|
||||||
|
const createStoreWithMiddleware = applyMiddleware(thunk)(createStore); |
||||||
|
const reducer = combineReducers(reducers); |
||||||
|
const store = createStoreWithMiddleware(reducer); |
||||||
|
|
||||||
|
export default class App extends Component { |
||||||
|
render() { |
||||||
|
return ( |
||||||
|
<Provider store={store}> |
||||||
|
<CounterApp /> |
||||||
|
</Provider> |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
import React, {Component} from 'react'; |
||||||
|
import {bindActionCreators} from 'redux'; |
||||||
|
import Counter from '../components/counter'; |
||||||
|
import * as counterActions from '../actions/counterActions'; |
||||||
|
import { connect } from 'react-redux'; |
||||||
|
|
||||||
|
// @connect(state => ({
|
||||||
|
// state: state.counter
|
||||||
|
// }))
|
||||||
|
class CounterApp extends Component { |
||||||
|
constructor(props) { |
||||||
|
super(props); |
||||||
|
} |
||||||
|
|
||||||
|
render() { |
||||||
|
const { state, actions } = this.props; |
||||||
|
return ( |
||||||
|
<Counter |
||||||
|
counter={state.count} |
||||||
|
{...actions} /> |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export default connect(state => ({ |
||||||
|
state: state.counter |
||||||
|
}), |
||||||
|
(dispatch) => ({ |
||||||
|
actions: bindActionCreators(counterActions, dispatch) |
||||||
|
}) |
||||||
|
)(CounterApp); |
@ -0,0 +1,22 @@ |
|||||||
|
import * as types from '../actions/actionTypes'; |
||||||
|
|
||||||
|
const initialState = { |
||||||
|
count: 0 |
||||||
|
}; |
||||||
|
|
||||||
|
export default function counter(state = initialState, action = {}) { |
||||||
|
switch (action.type) { |
||||||
|
case types.INCREMENT: |
||||||
|
return { |
||||||
|
...state, |
||||||
|
count: state.count + 1 |
||||||
|
}; |
||||||
|
case types.DECREMENT: |
||||||
|
return { |
||||||
|
...state, |
||||||
|
count: state.count - 1 |
||||||
|
}; |
||||||
|
default: |
||||||
|
return state; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
import counter from './counter'; |
||||||
|
|
||||||
|
export { |
||||||
|
counter |
||||||
|
}; |
@ -0,0 +1,6 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
import React, { AppRegistry } from 'react-native'; |
||||||
|
import App from './app/containers/app'; |
||||||
|
|
||||||
|
AppRegistry.registerComponent('Counter', () => App); |
@ -0,0 +1,6 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
import React, { AppRegistry } from 'react-native'; |
||||||
|
import App from './app/containers/app'; |
||||||
|
|
||||||
|
AppRegistry.registerComponent('Counter', () => App); |
@ -0,0 +1,765 @@ |
|||||||
|
// !$*UTF8*$! |
||||||
|
{ |
||||||
|
archiveVersion = 1; |
||||||
|
classes = { |
||||||
|
}; |
||||||
|
objectVersion = 46; |
||||||
|
objects = { |
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */ |
||||||
|
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; |
||||||
|
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; |
||||||
|
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; |
||||||
|
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; |
||||||
|
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; |
||||||
|
00E356F31AD99517003FC87E /* CounterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* CounterTests.m */; }; |
||||||
|
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; |
||||||
|
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; |
||||||
|
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; |
||||||
|
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; |
||||||
|
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; |
||||||
|
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; |
||||||
|
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; |
||||||
|
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; |
||||||
|
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; |
||||||
|
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; |
||||||
|
/* End PBXBuildFile section */ |
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */ |
||||||
|
00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 134814201AA4EA6300B7C361; |
||||||
|
remoteInfo = RCTActionSheet; |
||||||
|
}; |
||||||
|
00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 134814201AA4EA6300B7C361; |
||||||
|
remoteInfo = RCTGeolocation; |
||||||
|
}; |
||||||
|
00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 58B5115D1A9E6B3D00147676; |
||||||
|
remoteInfo = RCTImage; |
||||||
|
}; |
||||||
|
00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 58B511DB1A9E6C8500147676; |
||||||
|
remoteInfo = RCTNetwork; |
||||||
|
}; |
||||||
|
00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; |
||||||
|
remoteInfo = RCTVibration; |
||||||
|
}; |
||||||
|
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; |
||||||
|
proxyType = 1; |
||||||
|
remoteGlobalIDString = 13B07F861A680F5B00A75B9A; |
||||||
|
remoteInfo = Counter; |
||||||
|
}; |
||||||
|
139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 134814201AA4EA6300B7C361; |
||||||
|
remoteInfo = RCTSettings; |
||||||
|
}; |
||||||
|
139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 3C86DF461ADF2C930047B81A; |
||||||
|
remoteInfo = RCTWebSocket; |
||||||
|
}; |
||||||
|
146834031AC3E56700842450 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; |
||||||
|
remoteInfo = React; |
||||||
|
}; |
||||||
|
78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 134814201AA4EA6300B7C361; |
||||||
|
remoteInfo = RCTLinking; |
||||||
|
}; |
||||||
|
832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; |
||||||
|
proxyType = 2; |
||||||
|
remoteGlobalIDString = 58B5119B1A9E6C1200147676; |
||||||
|
remoteInfo = RCTText; |
||||||
|
}; |
||||||
|
/* End PBXContainerItemProxy section */ |
||||||
|
|
||||||
|
/* Begin PBXFileReference section */ |
||||||
|
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = main.jsbundle; sourceTree = "<group>"; }; |
||||||
|
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = ../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = ../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = ../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = ../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = ../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
00E356EE1AD99517003FC87E /* CounterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CounterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||||
|
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
||||||
|
00E356F21AD99517003FC87E /* CounterTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CounterTests.m; sourceTree = "<group>"; }; |
||||||
|
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = ../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = ../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
13B07F961A680F5B00A75B9A /* Counter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Counter.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||||
|
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Counter/AppDelegate.h; sourceTree = "<group>"; }; |
||||||
|
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Counter/AppDelegate.m; sourceTree = "<group>"; }; |
||||||
|
13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; }; |
||||||
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Counter/Images.xcassets; sourceTree = "<group>"; }; |
||||||
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Counter/Info.plist; sourceTree = "<group>"; }; |
||||||
|
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Counter/main.m; sourceTree = "<group>"; }; |
||||||
|
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = ../node_modules/react-native/React/React.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = ../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = ../node_modules/react-native/Libraries/Text/RCTText.xcodeproj; sourceTree = "<group>"; }; |
||||||
|
/* End PBXFileReference section */ |
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */ |
||||||
|
00E356EB1AD99517003FC87E /* Frameworks */ = { |
||||||
|
isa = PBXFrameworksBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
13B07F8C1A680F5B00A75B9A /* Frameworks */ = { |
||||||
|
isa = PBXFrameworksBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
146834051AC3E58100842450 /* libReact.a in Frameworks */, |
||||||
|
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, |
||||||
|
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, |
||||||
|
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, |
||||||
|
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, |
||||||
|
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, |
||||||
|
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, |
||||||
|
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, |
||||||
|
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, |
||||||
|
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXFrameworksBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXGroup section */ |
||||||
|
00C302A81ABCB8CE00DB3ED1 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
00C302B61ABCB90400DB3ED1 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
00C302BC1ABCB91800DB3ED1 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
00C302D41ABCB9D200DB3ED1 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
00C302E01ABCB9EE00DB3ED1 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
00E356EF1AD99517003FC87E /* CounterTests */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00E356F21AD99517003FC87E /* CounterTests.m */, |
||||||
|
00E356F01AD99517003FC87E /* Supporting Files */, |
||||||
|
); |
||||||
|
path = CounterTests; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
00E356F01AD99517003FC87E /* Supporting Files */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
00E356F11AD99517003FC87E /* Info.plist */, |
||||||
|
); |
||||||
|
name = "Supporting Files"; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
139105B71AF99BAD00B5F7CC /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
139FDEE71B06529A00C62182 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
13B07FAE1A68108700A75B9A /* Counter */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
008F07F21AC5B25A0029DE68 /* main.jsbundle */, |
||||||
|
13B07FAF1A68108700A75B9A /* AppDelegate.h */, |
||||||
|
13B07FB01A68108700A75B9A /* AppDelegate.m */, |
||||||
|
13B07FB51A68108700A75B9A /* Images.xcassets */, |
||||||
|
13B07FB61A68108700A75B9A /* Info.plist */, |
||||||
|
13B07FB11A68108700A75B9A /* LaunchScreen.xib */, |
||||||
|
13B07FB71A68108700A75B9A /* main.m */, |
||||||
|
); |
||||||
|
name = Counter; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
146834001AC3E56700842450 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
146834041AC3E56700842450 /* libReact.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
78C398B11ACF4ADC00677621 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
78C398B91ACF4ADC00677621 /* libRCTLinking.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
832341AE1AAA6A7D00B99B32 /* Libraries */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
146833FF1AC3E56700842450 /* React.xcodeproj */, |
||||||
|
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, |
||||||
|
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, |
||||||
|
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, |
||||||
|
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, |
||||||
|
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, |
||||||
|
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, |
||||||
|
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, |
||||||
|
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, |
||||||
|
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, |
||||||
|
); |
||||||
|
name = Libraries; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
832341B11AAA6A8300B99B32 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
832341B51AAA6A8300B99B32 /* libRCTText.a */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
83CBB9F61A601CBA00E9B192 = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
13B07FAE1A68108700A75B9A /* Counter */, |
||||||
|
832341AE1AAA6A7D00B99B32 /* Libraries */, |
||||||
|
00E356EF1AD99517003FC87E /* CounterTests */, |
||||||
|
83CBBA001A601CBA00E9B192 /* Products */, |
||||||
|
); |
||||||
|
indentWidth = 2; |
||||||
|
sourceTree = "<group>"; |
||||||
|
tabWidth = 2; |
||||||
|
}; |
||||||
|
83CBBA001A601CBA00E9B192 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
13B07F961A680F5B00A75B9A /* Counter.app */, |
||||||
|
00E356EE1AD99517003FC87E /* CounterTests.xctest */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
/* End PBXGroup section */ |
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */ |
||||||
|
00E356ED1AD99517003FC87E /* CounterTests */ = { |
||||||
|
isa = PBXNativeTarget; |
||||||
|
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "CounterTests" */; |
||||||
|
buildPhases = ( |
||||||
|
00E356EA1AD99517003FC87E /* Sources */, |
||||||
|
00E356EB1AD99517003FC87E /* Frameworks */, |
||||||
|
00E356EC1AD99517003FC87E /* Resources */, |
||||||
|
); |
||||||
|
buildRules = ( |
||||||
|
); |
||||||
|
dependencies = ( |
||||||
|
00E356F51AD99517003FC87E /* PBXTargetDependency */, |
||||||
|
); |
||||||
|
name = CounterTests; |
||||||
|
productName = CounterTests; |
||||||
|
productReference = 00E356EE1AD99517003FC87E /* CounterTests.xctest */; |
||||||
|
productType = "com.apple.product-type.bundle.unit-test"; |
||||||
|
}; |
||||||
|
13B07F861A680F5B00A75B9A /* Counter */ = { |
||||||
|
isa = PBXNativeTarget; |
||||||
|
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Counter" */; |
||||||
|
buildPhases = ( |
||||||
|
13B07F871A680F5B00A75B9A /* Sources */, |
||||||
|
13B07F8C1A680F5B00A75B9A /* Frameworks */, |
||||||
|
13B07F8E1A680F5B00A75B9A /* Resources */, |
||||||
|
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, |
||||||
|
); |
||||||
|
buildRules = ( |
||||||
|
); |
||||||
|
dependencies = ( |
||||||
|
); |
||||||
|
name = Counter; |
||||||
|
productName = "Hello World"; |
||||||
|
productReference = 13B07F961A680F5B00A75B9A /* Counter.app */; |
||||||
|
productType = "com.apple.product-type.application"; |
||||||
|
}; |
||||||
|
/* End PBXNativeTarget section */ |
||||||
|
|
||||||
|
/* Begin PBXProject section */ |
||||||
|
83CBB9F71A601CBA00E9B192 /* Project object */ = { |
||||||
|
isa = PBXProject; |
||||||
|
attributes = { |
||||||
|
LastUpgradeCheck = 0610; |
||||||
|
ORGANIZATIONNAME = Facebook; |
||||||
|
TargetAttributes = { |
||||||
|
00E356ED1AD99517003FC87E = { |
||||||
|
CreatedOnToolsVersion = 6.2; |
||||||
|
TestTargetID = 13B07F861A680F5B00A75B9A; |
||||||
|
}; |
||||||
|
}; |
||||||
|
}; |
||||||
|
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Counter" */; |
||||||
|
compatibilityVersion = "Xcode 3.2"; |
||||||
|
developmentRegion = English; |
||||||
|
hasScannedForEncodings = 0; |
||||||
|
knownRegions = ( |
||||||
|
en, |
||||||
|
Base, |
||||||
|
); |
||||||
|
mainGroup = 83CBB9F61A601CBA00E9B192; |
||||||
|
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; |
||||||
|
projectDirPath = ""; |
||||||
|
projectReferences = ( |
||||||
|
{ |
||||||
|
ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; |
||||||
|
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; |
||||||
|
ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; |
||||||
|
ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; |
||||||
|
ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; |
||||||
|
ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; |
||||||
|
ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; |
||||||
|
ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; |
||||||
|
ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 139FDEE71B06529A00C62182 /* Products */; |
||||||
|
ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; |
||||||
|
}, |
||||||
|
{ |
||||||
|
ProductGroup = 146834001AC3E56700842450 /* Products */; |
||||||
|
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; |
||||||
|
}, |
||||||
|
); |
||||||
|
projectRoot = ""; |
||||||
|
targets = ( |
||||||
|
13B07F861A680F5B00A75B9A /* Counter */, |
||||||
|
00E356ED1AD99517003FC87E /* CounterTests */, |
||||||
|
); |
||||||
|
}; |
||||||
|
/* End PBXProject section */ |
||||||
|
|
||||||
|
/* Begin PBXReferenceProxy section */ |
||||||
|
00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTActionSheet.a; |
||||||
|
remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTGeolocation.a; |
||||||
|
remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTImage.a; |
||||||
|
remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTNetwork.a; |
||||||
|
remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTVibration.a; |
||||||
|
remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTSettings.a; |
||||||
|
remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTWebSocket.a; |
||||||
|
remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
146834041AC3E56700842450 /* libReact.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libReact.a; |
||||||
|
remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTLinking.a; |
||||||
|
remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
832341B51AAA6A8300B99B32 /* libRCTText.a */ = { |
||||||
|
isa = PBXReferenceProxy; |
||||||
|
fileType = archive.ar; |
||||||
|
path = libRCTText.a; |
||||||
|
remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; |
||||||
|
sourceTree = BUILT_PRODUCTS_DIR; |
||||||
|
}; |
||||||
|
/* End PBXReferenceProxy section */ |
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */ |
||||||
|
00E356EC1AD99517003FC87E /* Resources */ = { |
||||||
|
isa = PBXResourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
13B07F8E1A680F5B00A75B9A /* Resources */ = { |
||||||
|
isa = PBXResourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, |
||||||
|
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXResourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */ |
||||||
|
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { |
||||||
|
isa = PBXShellScriptBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
inputPaths = ( |
||||||
|
); |
||||||
|
name = "Bundle React Native code and images"; |
||||||
|
outputPaths = ( |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
shellPath = /bin/sh; |
||||||
|
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; |
||||||
|
showEnvVarsInLog = 1; |
||||||
|
}; |
||||||
|
/* End PBXShellScriptBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */ |
||||||
|
00E356EA1AD99517003FC87E /* Sources */ = { |
||||||
|
isa = PBXSourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
00E356F31AD99517003FC87E /* CounterTests.m in Sources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
13B07F871A680F5B00A75B9A /* Sources */ = { |
||||||
|
isa = PBXSourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, |
||||||
|
13B07FC11A68108700A75B9A /* main.m in Sources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXSourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */ |
||||||
|
00E356F51AD99517003FC87E /* PBXTargetDependency */ = { |
||||||
|
isa = PBXTargetDependency; |
||||||
|
target = 13B07F861A680F5B00A75B9A /* Counter */; |
||||||
|
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; |
||||||
|
}; |
||||||
|
/* End PBXTargetDependency section */ |
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */ |
||||||
|
13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { |
||||||
|
isa = PBXVariantGroup; |
||||||
|
children = ( |
||||||
|
13B07FB21A68108700A75B9A /* Base */, |
||||||
|
); |
||||||
|
name = LaunchScreen.xib; |
||||||
|
path = Counter; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
/* End PBXVariantGroup section */ |
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */ |
||||||
|
00E356F61AD99517003FC87E /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)"; |
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||||
|
"DEBUG=1", |
||||||
|
"$(inherited)", |
||||||
|
); |
||||||
|
INFOPLIST_FILE = CounterTests/Info.plist; |
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 8.2; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Counter.app/Counter"; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
00E356F71AD99517003FC87E /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)"; |
||||||
|
COPY_PHASE_STRIP = NO; |
||||||
|
INFOPLIST_FILE = CounterTests/Info.plist; |
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 8.2; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Counter.app/Counter"; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
13B07F941A680F5B00A75B9A /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
DEAD_CODE_STRIPPING = NO; |
||||||
|
HEADER_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, |
||||||
|
"$(SRCROOT)/../node_modules/react-native/React/**", |
||||||
|
); |
||||||
|
INFOPLIST_FILE = "Counter/Info.plist"; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; |
||||||
|
OTHER_LDFLAGS = ( |
||||||
|
"$(inherited)", |
||||||
|
"-ObjC", |
||||||
|
"-lc++", |
||||||
|
); |
||||||
|
PRODUCT_NAME = Counter; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
13B07F951A680F5B00A75B9A /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
HEADER_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, |
||||||
|
"$(SRCROOT)/../node_modules/react-native/React/**", |
||||||
|
); |
||||||
|
INFOPLIST_FILE = "Counter/Info.plist"; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; |
||||||
|
OTHER_LDFLAGS = ( |
||||||
|
"$(inherited)", |
||||||
|
"-ObjC", |
||||||
|
"-lc++", |
||||||
|
); |
||||||
|
PRODUCT_NAME = Counter; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
83CBBA201A601CBA00E9B192 /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO; |
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; |
||||||
|
CLANG_CXX_LIBRARY = "libc++"; |
||||||
|
CLANG_ENABLE_MODULES = YES; |
||||||
|
CLANG_ENABLE_OBJC_ARC = YES; |
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES; |
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||||
|
CLANG_WARN_EMPTY_BODY = YES; |
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES; |
||||||
|
CLANG_WARN_INT_CONVERSION = YES; |
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
||||||
|
COPY_PHASE_STRIP = NO; |
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99; |
||||||
|
GCC_DYNAMIC_NO_PIC = NO; |
||||||
|
GCC_OPTIMIZATION_LEVEL = 0; |
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||||
|
"DEBUG=1", |
||||||
|
"$(inherited)", |
||||||
|
); |
||||||
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO; |
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES; |
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES; |
||||||
|
HEADER_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, |
||||||
|
"$(SRCROOT)/../node_modules/react-native/React/**", |
||||||
|
); |
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 7.0; |
||||||
|
MTL_ENABLE_DEBUG_INFO = YES; |
||||||
|
ONLY_ACTIVE_ARCH = YES; |
||||||
|
SDKROOT = iphoneos; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
83CBBA211A601CBA00E9B192 /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO; |
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; |
||||||
|
CLANG_CXX_LIBRARY = "libc++"; |
||||||
|
CLANG_ENABLE_MODULES = YES; |
||||||
|
CLANG_ENABLE_OBJC_ARC = YES; |
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES; |
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||||
|
CLANG_WARN_EMPTY_BODY = YES; |
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES; |
||||||
|
CLANG_WARN_INT_CONVERSION = YES; |
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
||||||
|
COPY_PHASE_STRIP = YES; |
||||||
|
ENABLE_NS_ASSERTIONS = NO; |
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99; |
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES; |
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES; |
||||||
|
HEADER_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, |
||||||
|
"$(SRCROOT)/../node_modules/react-native/React/**", |
||||||
|
); |
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 7.0; |
||||||
|
MTL_ENABLE_DEBUG_INFO = NO; |
||||||
|
SDKROOT = iphoneos; |
||||||
|
VALIDATE_PRODUCT = YES; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
/* End XCBuildConfiguration section */ |
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */ |
||||||
|
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "CounterTests" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
00E356F61AD99517003FC87E /* Debug */, |
||||||
|
00E356F71AD99517003FC87E /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Counter" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
13B07F941A680F5B00A75B9A /* Debug */, |
||||||
|
13B07F951A680F5B00A75B9A /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Counter" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
83CBBA201A601CBA00E9B192 /* Debug */, |
||||||
|
83CBBA211A601CBA00E9B192 /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
/* End XCConfigurationList section */ |
||||||
|
}; |
||||||
|
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; |
||||||
|
} |
@ -0,0 +1,112 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Scheme |
||||||
|
LastUpgradeVersion = "0620" |
||||||
|
version = "1.3"> |
||||||
|
<BuildAction |
||||||
|
parallelizeBuildables = "YES" |
||||||
|
buildImplicitDependencies = "YES"> |
||||||
|
<BuildActionEntries> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "YES" |
||||||
|
buildForArchiving = "YES" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
||||||
|
BuildableName = "Counter.app" |
||||||
|
BlueprintName = "Counter" |
||||||
|
ReferencedContainer = "container:Counter.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "NO" |
||||||
|
buildForArchiving = "NO" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "00E356ED1AD99517003FC87E" |
||||||
|
BuildableName = "CounterTests.xctest" |
||||||
|
BlueprintName = "CounterTests" |
||||||
|
ReferencedContainer = "container:Counter.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
</BuildActionEntries> |
||||||
|
</BuildAction> |
||||||
|
<TestAction |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
<Testables> |
||||||
|
<TestableReference |
||||||
|
skipped = "NO"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "00E356ED1AD99517003FC87E" |
||||||
|
BuildableName = "CounterTests.xctest" |
||||||
|
BlueprintName = "CounterTests" |
||||||
|
ReferencedContainer = "container:Counter.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</TestableReference> |
||||||
|
</Testables> |
||||||
|
<MacroExpansion> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
||||||
|
BuildableName = "Counter.app" |
||||||
|
BlueprintName = "Counter" |
||||||
|
ReferencedContainer = "container:Counter.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</MacroExpansion> |
||||||
|
</TestAction> |
||||||
|
<LaunchAction |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
launchStyle = "0" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
buildConfiguration = "Debug" |
||||||
|
ignoresPersistentStateOnLaunch = "NO" |
||||||
|
debugDocumentVersioning = "YES" |
||||||
|
allowLocationSimulation = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
||||||
|
BuildableName = "Counter.app" |
||||||
|
BlueprintName = "Counter" |
||||||
|
ReferencedContainer = "container:Counter.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</LaunchAction> |
||||||
|
<ProfileAction |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
savedToolIdentifier = "" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
buildConfiguration = "Release" |
||||||
|
debugDocumentVersioning = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
||||||
|
BuildableName = "Counter.app" |
||||||
|
BlueprintName = "Counter" |
||||||
|
ReferencedContainer = "container:Counter.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
</ProfileAction> |
||||||
|
<AnalyzeAction |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
</AnalyzeAction> |
||||||
|
<ArchiveAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
revealArchiveInOrganizer = "YES"> |
||||||
|
</ArchiveAction> |
||||||
|
</Scheme> |
@ -0,0 +1,16 @@ |
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-present, Facebook, Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* This source code is licensed under the BSD-style license found in the |
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant |
||||||
|
* of patent rights can be found in the PATENTS file in the same directory. |
||||||
|
*/ |
||||||
|
|
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
|
||||||
|
@interface AppDelegate : UIResponder <UIApplicationDelegate> |
||||||
|
|
||||||
|
@property (nonatomic, strong) UIWindow *window; |
||||||
|
|
||||||
|
@end |
@ -0,0 +1,37 @@ |
|||||||
|
/** |
||||||
|
* Copyright (c) 2015-present, Facebook, Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* This source code is licensed under the BSD-style license found in the |
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant |
||||||
|
* of patent rights can be found in the PATENTS file in the same directory. |
||||||
|
*/ |
||||||
|
|
||||||
|
#import "AppDelegate.h" |
||||||
|
|
||||||
|
#import "RCTBundleURLProvider.h" |
||||||
|
#import "RCTRootView.h" |
||||||
|
|
||||||
|
@implementation AppDelegate |
||||||
|
|
||||||
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions |
||||||
|
{ |
||||||
|
NSURL *jsCodeLocation; |
||||||
|
|
||||||
|
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; |
||||||
|
|
||||||
|
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation |
||||||
|
moduleName:@"Counter" |
||||||
|
initialProperties:nil |
||||||
|
launchOptions:launchOptions]; |
||||||
|
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; |
||||||
|
|
||||||
|
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; |
||||||
|
UIViewController *rootViewController = [UIViewController new]; |
||||||
|
rootViewController.view = rootView; |
||||||
|
self.window.rootViewController = rootViewController; |
||||||
|
[self.window makeKeyAndVisible]; |
||||||
|
return YES; |
||||||
|
} |
||||||
|
|
||||||
|
@end |
@ -0,0 +1,42 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES"> |
||||||
|
<dependencies> |
||||||
|
<deployment identifier="iOS"/> |
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/> |
||||||
|
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> |
||||||
|
</dependencies> |
||||||
|
<objects> |
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
||||||
|
<view contentMode="scaleToFill" id="iN0-l3-epB"> |
||||||
|
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/> |
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
||||||
|
<subviews> |
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye"> |
||||||
|
<rect key="frame" x="20" y="439" width="441" height="21"/> |
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/> |
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> |
||||||
|
<nil key="highlightedColor"/> |
||||||
|
</label> |
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Counter" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX"> |
||||||
|
<rect key="frame" x="20" y="140" width="441" height="43"/> |
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/> |
||||||
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/> |
||||||
|
<nil key="highlightedColor"/> |
||||||
|
</label> |
||||||
|
</subviews> |
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |
||||||
|
<constraints> |
||||||
|
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/> |
||||||
|
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/> |
||||||
|
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/> |
||||||
|
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/> |
||||||
|
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/> |
||||||
|
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/> |
||||||
|
</constraints> |
||||||
|
<nil key="simulatedStatusBarMetrics"/> |
||||||
|
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
||||||
|
<point key="canvasLocation" x="548" y="455"/> |
||||||
|
</view> |
||||||
|
</objects> |
||||||
|
</document> |
@ -0,0 +1,38 @@ |
|||||||
|
{ |
||||||
|
"images" : [ |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "29x29", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "29x29", |
||||||
|
"scale" : "3x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "40x40", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "40x40", |
||||||
|
"scale" : "3x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "60x60", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "60x60", |
||||||
|
"scale" : "3x" |
||||||
|
} |
||||||
|
], |
||||||
|
"info" : { |
||||||
|
"version" : 1, |
||||||
|
"author" : "xcode" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>CFBundleDevelopmentRegion</key> |
||||||
|
<string>en</string> |
||||||
|
<key>CFBundleExecutable</key> |
||||||
|
<string>$(EXECUTABLE_NAME)</string> |
||||||
|
<key>CFBundleIdentifier</key> |
||||||
|
<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string> |
||||||
|
<key>CFBundleInfoDictionaryVersion</key> |
||||||
|
<string>6.0</string> |
||||||
|
<key>CFBundleName</key> |
||||||
|
<string>$(PRODUCT_NAME)</string> |
||||||
|
<key>CFBundlePackageType</key> |
||||||
|
<string>APPL</string> |
||||||
|
<key>CFBundleShortVersionString</key> |
||||||
|
<string>1.0</string> |
||||||
|
<key>CFBundleSignature</key> |
||||||
|
<string>????</string> |
||||||
|
<key>CFBundleVersion</key> |
||||||
|
<string>1</string> |
||||||
|
<key>LSRequiresIPhoneOS</key> |
||||||
|
<true/> |
||||||
|
<key>UILaunchStoryboardName</key> |
||||||
|
<string>LaunchScreen</string> |
||||||
|
<key>UIRequiredDeviceCapabilities</key> |
||||||
|
<array> |
||||||
|
<string>armv7</string> |
||||||
|
</array> |
||||||
|
<key>UISupportedInterfaceOrientations</key> |
||||||
|
<array> |
||||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||||
|
</array> |
||||||
|
<key>UIViewControllerBasedStatusBarAppearance</key> |
||||||
|
<false/> |
||||||
|
<key>NSLocationWhenInUseUsageDescription</key> |
||||||
|
<string></string> |
||||||
|
<key>NSAppTransportSecurity</key> |
||||||
|
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ --> |
||||||
|
<dict> |
||||||
|
<key>NSExceptionDomains</key> |
||||||
|
<dict> |
||||||
|
<key>localhost</key> |
||||||
|
<dict> |
||||||
|
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> |
||||||
|
<true/> |
||||||
|
</dict> |
||||||
|
</dict> |
||||||
|
</dict> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,18 @@ |
|||||||
|
/** |
||||||
|
* Copyright (c) 2015-present, Facebook, Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* This source code is licensed under the BSD-style license found in the |
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant |
||||||
|
* of patent rights can be found in the PATENTS file in the same directory. |
||||||
|
*/ |
||||||
|
|
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
|
||||||
|
#import "AppDelegate.h" |
||||||
|
|
||||||
|
int main(int argc, char * argv[]) { |
||||||
|
@autoreleasepool { |
||||||
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,70 @@ |
|||||||
|
/** |
||||||
|
* Copyright (c) 2015-present, Facebook, Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* This source code is licensed under the BSD-style license found in the |
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant |
||||||
|
* of patent rights can be found in the PATENTS file in the same directory. |
||||||
|
*/ |
||||||
|
|
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
#import <XCTest/XCTest.h> |
||||||
|
|
||||||
|
#import "RCTLog.h" |
||||||
|
#import "RCTRootView.h" |
||||||
|
|
||||||
|
#define TIMEOUT_SECONDS 600 |
||||||
|
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" |
||||||
|
|
||||||
|
@interface CounterTests : XCTestCase |
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
@implementation CounterTests |
||||||
|
|
||||||
|
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test |
||||||
|
{ |
||||||
|
if (test(view)) { |
||||||
|
return YES; |
||||||
|
} |
||||||
|
for (UIView *subview in [view subviews]) { |
||||||
|
if ([self findSubviewInView:subview matching:test]) { |
||||||
|
return YES; |
||||||
|
} |
||||||
|
} |
||||||
|
return NO; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)testRendersWelcomeScreen |
||||||
|
{ |
||||||
|
UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; |
||||||
|
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; |
||||||
|
BOOL foundElement = NO; |
||||||
|
|
||||||
|
__block NSString *redboxError = nil; |
||||||
|
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { |
||||||
|
if (level >= RCTLogLevelError) { |
||||||
|
redboxError = message; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { |
||||||
|
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; |
||||||
|
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; |
||||||
|
|
||||||
|
foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { |
||||||
|
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { |
||||||
|
return YES; |
||||||
|
} |
||||||
|
return NO; |
||||||
|
}]; |
||||||
|
} |
||||||
|
|
||||||
|
RCTSetLogFunction(RCTDefaultLogFunction); |
||||||
|
|
||||||
|
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); |
||||||
|
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@end |
@ -0,0 +1,24 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>CFBundleDevelopmentRegion</key> |
||||||
|
<string>en</string> |
||||||
|
<key>CFBundleExecutable</key> |
||||||
|
<string>$(EXECUTABLE_NAME)</string> |
||||||
|
<key>CFBundleIdentifier</key> |
||||||
|
<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string> |
||||||
|
<key>CFBundleInfoDictionaryVersion</key> |
||||||
|
<string>6.0</string> |
||||||
|
<key>CFBundleName</key> |
||||||
|
<string>$(PRODUCT_NAME)</string> |
||||||
|
<key>CFBundlePackageType</key> |
||||||
|
<string>BNDL</string> |
||||||
|
<key>CFBundleShortVersionString</key> |
||||||
|
<string>1.0</string> |
||||||
|
<key>CFBundleSignature</key> |
||||||
|
<string>????</string> |
||||||
|
<key>CFBundleVersion</key> |
||||||
|
<string>1</string> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,19 @@ |
|||||||
|
{ |
||||||
|
"name": "Counter", |
||||||
|
"version": "0.0.1", |
||||||
|
"private": true, |
||||||
|
"scripts": { |
||||||
|
"start": "react-native start", |
||||||
|
"setup_project": "npm run step1; npm run step2", |
||||||
|
"step1": "rm -rf node_modules/react-native/node_modules/react; rm -rf node_modules/react-native/node_modules/fbjs; rm -rf node_modules/react/node_modules/fbjs", |
||||||
|
"step2": "cd node_modules; find . -name .babelrc | grep -v packager | xargs rm" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"react": "15.3.2", |
||||||
|
"react-native": "0.34.0", |
||||||
|
"react-redux": "4.4.5", |
||||||
|
"redux": "3.5.2", |
||||||
|
"redux-actions": "0.11.0", |
||||||
|
"redux-thunk": "2.1.0" |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue