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