├── .editorconfig ├── .eslintrc ├── .gitignore ├── .npmignore ├── Gemfile ├── LICENSE ├── Podfile.template ├── README.md ├── android ├── build.gradle ├── libs │ └── keyframes.jar └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── underscope │ └── keyframes │ ├── RNFacebookKeyframesPackage.java │ ├── RNFacebookKeyframesView.java │ └── RNFacebookKeyframesViewManager.java ├── demo └── KeyframesDemo │ ├── .babelrc │ ├── .buckconfig │ ├── .flowconfig │ ├── .gitattributes │ ├── .gitignore │ ├── .watchmanconfig │ ├── __tests__ │ ├── index.android.js │ └── index.ios.js │ ├── android │ ├── app │ │ ├── BUCK │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── keyframesdemo │ │ │ │ ├── MainActivity.java │ │ │ │ └── MainApplication.java │ │ │ └── res │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── keystores │ │ ├── BUCK │ │ └── debug.keystore.properties │ └── settings.gradle │ ├── index.android.js │ ├── index.ios.js │ ├── ios │ ├── KeyframesDemo.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── KeyframesDemo.xcscheme │ ├── KeyframesDemo.xcworkspace │ │ └── contents.xcworkspacedata │ ├── KeyframesDemo │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ └── LaunchScreen.xib │ │ ├── Images.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── Info.plist │ │ └── main.m │ ├── KeyframesDemoTests │ │ ├── Info.plist │ │ └── KeyframesDemoTests.m │ ├── Podfile │ └── Podfile.lock │ ├── package.json │ ├── src │ ├── App.js │ └── keyframes-logo.json │ └── yarn.lock ├── index.js ├── ios ├── RNFacebookKeyframes.xcodeproj │ └── project.pbxproj ├── RNKeyframesView.h ├── RNKeyframesView.m ├── RNKeyframesViewManager.h └── RNKeyframesViewManager.m └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.js] 4 | 5 | charset = utf-8 6 | indent_size = 2 7 | end_of_line = lf 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [Makefile] 13 | 14 | indent_size = 2 15 | indent_style = tab 16 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "ecmaFeatures": { 4 | "jsx": true, 5 | "modules": true 6 | }, 7 | "env": { 8 | "mocha": true, 9 | "browser": true, 10 | "node": true 11 | }, 12 | "globals": { 13 | "__DEV__": true, 14 | "Promise": true, 15 | }, 16 | "plugins": [ 17 | "babel", 18 | "react", 19 | "react-native" 20 | ], 21 | "rules": { 22 | "quotes": [ 2, "single" ], 23 | "semi": [ 2, "never" ], 24 | "no-cond-assign": 0, 25 | "camelcase": [ 2, { "properties": "never" } ], 26 | "curly": [ 2, "all" ], 27 | "no-eq-null": 2, 28 | "eqeqeq": 2, 29 | "no-eval": 0, 30 | "no-extend-native": 2, 31 | "block-scoped-var": 2, 32 | "indent": [ 2, 2, { "SwitchCase": 1 } ], 33 | "wrap-iife": [ 2, "any" ], 34 | "max-depth": [ 2, 3 ], 35 | "max-statements": [ 2, 30 ], 36 | "no-shadow": 2, 37 | "no-multi-spaces": ["error", { "exceptions": { "Property": true } }], 38 | "no-multiple-empty-lines": ["error", { "max": 1, "maxBOF": 0, "maxEOF": 0 }], 39 | "no-unused-vars": 2, 40 | "no-undef": 2, 41 | "no-underscore-dangle": ["error", { "allow": [ "__DEV__" ] }], 42 | "dot-notation": 0, 43 | "no-with": 2, 44 | "brace-style": 2, 45 | "no-mixed-spaces-and-tabs": 2, 46 | "one-var": [ 2, { "uninitialized": "always", "initialized": "never" } ], 47 | "quote-props": [ 2, "as-needed" ], 48 | "key-spacing": [ 2, { "beforeColon": false, "afterColon": true } ], 49 | "space-unary-ops": [ 2, { "nonwords": false, "overrides": {} } ], 50 | "space-before-function-paren": [ 2, "never" ], 51 | "space-in-parens": [ 2, "never" ], 52 | "no-trailing-spaces": 2, 53 | "new-cap": 2, 54 | "keyword-spacing": [ 2, {} ], 55 | "spaced-comment": [ 2, "always" ], 56 | "space-infix-ops": 2, 57 | "space-before-blocks": [ 2, "always" ], 58 | "comma-dangle": 0, 59 | "linebreak-style": [ 2, "unix" ], 60 | "no-mixed-requires": [0], 61 | "eol-last": [0], 62 | 63 | "generator-star-spacing": 1, 64 | "object-shorthand": 1, 65 | "arrow-parens": [2, "as-needed"], 66 | "babel/new-cap": 1, 67 | "babel/no-await-in-loop": 1, 68 | 69 | "react/jsx-uses-react": 2, 70 | "react/jsx-uses-vars": 2, 71 | "react/react-in-jsx-scope": 2, 72 | "react/prop-types": 2, 73 | 74 | "react-native/no-unused-styles": 2, 75 | "react-native/split-platform-components": 2, 76 | "react-native/no-inline-styles": 2, 77 | "react-native/no-color-literals": 2, 78 | } 79 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IJ 26 | # 27 | *.iml 28 | .idea 29 | .gradle 30 | local.properties 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | 37 | # BUCK 38 | buck-out/ 39 | \.buckd/ 40 | android/app/libs 41 | *.keystore 42 | 43 | # CocoaPods 44 | # 45 | # We recommend against adding the Pods directory to your .gitignore. However 46 | # you should judge for yourself, the pros and cons are mentioned at: 47 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 48 | # 49 | Pods/ 50 | 51 | # VS Code 52 | .vscode 53 | tsconfig.json 54 | jsconfig.json 55 | 56 | # TypeScript 57 | *.d.ts -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.yml 2 | demo/ 3 | *.framework 4 | android/build/ 5 | *.iml 6 | *.class 7 | 8 | Gemfile 9 | Gemfile.lock -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "cocoapods", "~> 1.0" 4 | gem "xcpretty" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Brent Vatne, Baris Sencan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Podfile.template: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | 3 | pod 'keyframes', :git => 'https://github.com/EddyVerbruggen/Keyframes.git', :commit => 'cb645d8722c2e9327c15dd973a2121644288b1c0' -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![Keyframes](https://github.com/facebookincubator/Keyframes/raw/master/docs/images/doc-logo.png) 3 | 4 | # react-native-facebook-keyframes 5 | 6 | A React Native wrapper for the [Facebook Keyframes library](https://github.com/facebookincubator/Keyframes). 7 | 8 | ## Getting started 9 | 10 | ```bash 11 | npm install react-native-facebook-keyframes --save 12 | 13 | react-native link react-native-facebook-keyframes 14 | ``` 15 | ### Steps for iOS only 16 | 17 | You must install `Facebook Keyframes` dependency using CocoaPods: 18 | 19 | 1. Install `cocoapods` in case you don't have already installed: 20 | 21 | ```bash 22 | sudo gem install cocoapods 23 | ``` 24 | 2. Go to `[your project's name]` ios folder (in this case `MyProject`): 25 | 26 | ```bash 27 | cd MyProject/ios 28 | ``` 29 | 3. Create a new `Podfile` file with the following contents: 30 | 31 | ```ruby 32 | target '{MyProject}' do 33 | pod 'Keyframes', :git => 'https://github.com/facebookincubator/Keyframes.git', :commit => '07ce61ee388360258777eb3342c87ba6128584d0' 34 | end 35 | ``` 36 | 3. Instal cocoapods dependencies and return to the project folder: 37 | 38 | ```bash 39 | pod install 40 | cd ../ 41 | ``` 42 | 43 | ## Usage 44 | 45 | 1. Create a new keyframes json file (you can find a sample [here](https://github.com/underscopeio/react-native-facebook-keyframes/blob/master/demo/KeyframesDemo/src/keyframes-logo.json)) 46 | 2. Include the library in your js file: 47 | 48 | ```JSX 49 | import KeyframesView from 'react-native-facebook-keyframes' 50 | ``` 51 | 52 | 3. Use the component: 53 | 54 | ```JSX 55 | 60 | ``` 61 | 62 | ## Running the demo project included in this project 63 | 64 | 1. Go to the `demo/KeyframesDemo` folder: 65 | 66 | ```bash 67 | cd demo/KeyframesDemo 68 | ``` 69 | 70 | 2. Install pod dependencies if running for iOS: 71 | 72 | ```bash 73 | cd ios 74 | pod install 75 | cd ../ 76 | ``` 77 | 78 | 3. Run the project: 79 | 80 | ```bash 81 | npm install 82 | react-native run-ios 83 | ``` 84 | 85 | ## Demo 86 | 87 | ![](http://i.giphy.com/3o7TKHhhyQo2w2Naw0.gif) ![](http://i.giphy.com/l0MYJJ0Cy6OMMnXCo.gif) 88 | 89 | --- 90 | **MIT Licensed** 91 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | apply plugin: 'com.android.library' 3 | 4 | android { 5 | compileSdkVersion 23 6 | buildToolsVersion "23.0.1" 7 | 8 | defaultConfig { 9 | minSdkVersion 16 10 | targetSdkVersion 22 11 | versionCode 1 12 | versionName "1.0" 13 | ndk { 14 | abiFilters "armeabi-v7a", "x86" 15 | } 16 | } 17 | lintOptions { 18 | warning 'InvalidPackage' 19 | } 20 | } 21 | 22 | dependencies { 23 | compile 'com.facebook.react:react-native:0.20.+' 24 | compile files('libs/keyframes.jar') 25 | } 26 | -------------------------------------------------------------------------------- /android/libs/keyframes.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nubescope/react-native-facebook-keyframes/e96d243a0d0655b894fda3a3233345d787ea7978/android/libs/keyframes.jar -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /android/src/main/java/com/underscope/keyframes/RNFacebookKeyframesPackage.java: -------------------------------------------------------------------------------- 1 | package com.underscope.keyframes; 2 | 3 | import java.util.Arrays; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | import com.facebook.react.ReactPackage; 8 | import com.facebook.react.bridge.NativeModule; 9 | import com.facebook.react.bridge.ReactApplicationContext; 10 | import com.facebook.react.uimanager.ViewManager; 11 | import com.facebook.react.bridge.JavaScriptModule; 12 | 13 | public class RNFacebookKeyframesPackage implements ReactPackage { 14 | @Override 15 | public List createNativeModules(ReactApplicationContext reactContext) { 16 | return Collections.emptyList(); 17 | } 18 | 19 | @Override 20 | public List> createJSModules() { 21 | return Collections.emptyList(); 22 | } 23 | 24 | @Override 25 | public List createViewManagers(ReactApplicationContext reactContext) { 26 | return Arrays.asList(new RNFacebookKeyframesViewManager()); 27 | } 28 | } -------------------------------------------------------------------------------- /android/src/main/java/com/underscope/keyframes/RNFacebookKeyframesView.java: -------------------------------------------------------------------------------- 1 | package com.underscope.keyframes; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | 6 | import com.facebook.keyframes.KeyframesDrawable; 7 | import com.facebook.keyframes.KeyframesDrawableBuilder; 8 | import com.facebook.keyframes.deserializers.KFImageDeserializer; 9 | import com.facebook.keyframes.model.KFImage; 10 | import com.facebook.react.bridge.ReactContext; 11 | import com.facebook.react.bridge.ReadableMap; 12 | 13 | import java.io.ByteArrayInputStream; 14 | import java.io.IOException; 15 | import java.io.InputStream; 16 | 17 | public class RNFacebookKeyframesView extends ImageView { 18 | private boolean mPaused = false; 19 | private KeyframesDrawable mKeyFramesDrawable; 20 | 21 | public RNFacebookKeyframesView(ReactContext reactContext) { 22 | super(reactContext); 23 | } 24 | 25 | public void setSrc(final ReadableMap src) { 26 | String descriptorString = src.toString() 27 | .replaceAll("^\\{ NativeMap: ", "") 28 | .replaceAll("\\}$", ""); 29 | 30 | InputStream stream = new ByteArrayInputStream(descriptorString.getBytes()); 31 | KFImage kfImage; 32 | 33 | try { 34 | kfImage = KFImageDeserializer.deserialize(stream); 35 | } catch (IOException e) { 36 | e.printStackTrace(); 37 | return; 38 | } 39 | setKFImage(kfImage); 40 | } 41 | 42 | public void setPausedModifier(final boolean paused) { 43 | mPaused = paused; 44 | 45 | if (mPaused) { 46 | this.mKeyFramesDrawable.stopAnimation(); 47 | } else { 48 | this.mKeyFramesDrawable.startAnimation(); 49 | } 50 | } 51 | 52 | public void seekTo(float seek) { 53 | this.mKeyFramesDrawable.setFrameProgress(seek); 54 | } 55 | 56 | private void setKFImage(KFImage kfImage) { 57 | this.mKeyFramesDrawable = new KeyframesDrawableBuilder().withImage(kfImage).build(); 58 | this.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 59 | this.setImageDrawable(this.mKeyFramesDrawable); 60 | this.setImageAlpha(0); 61 | this.mKeyFramesDrawable.startAnimation(); 62 | } 63 | } -------------------------------------------------------------------------------- /android/src/main/java/com/underscope/keyframes/RNFacebookKeyframesViewManager.java: -------------------------------------------------------------------------------- 1 | package com.underscope.keyframes; 2 | 3 | import com.facebook.react.bridge.ReadableMap; 4 | import com.facebook.react.uimanager.SimpleViewManager; 5 | import com.facebook.react.uimanager.ThemedReactContext; 6 | import com.facebook.react.uimanager.annotations.ReactProp; 7 | 8 | public class RNFacebookKeyframesViewManager extends SimpleViewManager { 9 | 10 | public static final String REACT_CLASS = "RNKeyframesView"; 11 | 12 | public static final String PROP_SRC = "src"; 13 | public static final String PROP_PAUSED = "paused"; 14 | public static final String PROP_SEEK = "seek"; 15 | 16 | @Override 17 | public String getName() { 18 | return REACT_CLASS; 19 | } 20 | 21 | @Override 22 | protected RNFacebookKeyframesView createViewInstance(ThemedReactContext themedReactContext) { 23 | return new RNFacebookKeyframesView(themedReactContext); 24 | } 25 | 26 | @ReactProp(name = PROP_SRC) 27 | public void setSrc(final RNFacebookKeyframesView keyframeView, ReadableMap src) { 28 | keyframeView.setSrc(src); 29 | } 30 | 31 | @ReactProp(name = PROP_PAUSED, defaultBoolean = false) 32 | public void setPaused(final RNFacebookKeyframesView keyframeView, final boolean paused) { 33 | keyframeView.setPausedModifier(paused); 34 | } 35 | 36 | @ReactProp(name = PROP_SEEK) 37 | public void setSeek(final RNFacebookKeyframesView keyframeView, final float seek) { 38 | keyframeView.seekTo(seek); 39 | } 40 | } -------------------------------------------------------------------------------- /demo/KeyframesDemo/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["react-native"] 3 | } -------------------------------------------------------------------------------- /demo/KeyframesDemo/.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore unexpected extra "@providesModule" 9 | .*/node_modules/.*/node_modules/fbjs/.* 10 | 11 | ; Ignore duplicate module providers 12 | ; For RN Apps installed via npm, "Libraries" folder is inside 13 | ; "node_modules/react-native" but in the source repo it is in the root 14 | .*/Libraries/react-native/React.js 15 | .*/Libraries/react-native/ReactNative.js 16 | 17 | [include] 18 | 19 | [libs] 20 | node_modules/react-native/Libraries/react-native/react-native-interface.js 21 | node_modules/react-native/flow 22 | flow/ 23 | 24 | [options] 25 | module.system=haste 26 | 27 | experimental.strict_type_args=true 28 | 29 | munge_underscores=true 30 | 31 | 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' 32 | 33 | suppress_type=$FlowIssue 34 | suppress_type=$FlowFixMe 35 | suppress_type=$FixMe 36 | 37 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 38 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 39 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 40 | 41 | unsafe.enable_getters_and_setters=true 42 | 43 | [version] 44 | ^0.36.0 45 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | android/app/libs 42 | *.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 50 | 51 | fastlane/report.xml 52 | fastlane/Preview.html 53 | fastlane/screenshots 54 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /demo/KeyframesDemo/__tests__/index.android.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import Index from '../index.android.js'; 4 | 5 | // Note: test renderer must be required after react-native. 6 | import renderer from 'react-test-renderer'; 7 | 8 | it('renders correctly', () => { 9 | const tree = renderer.create( 10 | 11 | ); 12 | }); 13 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/__tests__/index.ios.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import Index from '../index.ios.js'; 4 | 5 | // Note: test renderer must be required after react-native. 6 | import renderer from 'react-test-renderer'; 7 | 8 | it('renders correctly', () => { 9 | const tree = renderer.create( 10 | 11 | ); 12 | }); 13 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/BUCK: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # To learn about Buck see [Docs](https://buckbuild.com/). 4 | # To run your application with Buck: 5 | # - install Buck 6 | # - `npm start` - to start the packager 7 | # - `cd android` 8 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 9 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 10 | # - `buck install -r android/app` - compile, install and run application 11 | # 12 | 13 | lib_deps = [] 14 | for jarfile in glob(['libs/*.jar']): 15 | name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) 16 | lib_deps.append(':' + name) 17 | prebuilt_jar( 18 | name = name, 19 | binary_jar = jarfile, 20 | ) 21 | 22 | for aarfile in glob(['libs/*.aar']): 23 | name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) 24 | lib_deps.append(':' + name) 25 | android_prebuilt_aar( 26 | name = name, 27 | aar = aarfile, 28 | ) 29 | 30 | android_library( 31 | name = 'all-libs', 32 | exported_deps = lib_deps 33 | ) 34 | 35 | android_library( 36 | name = 'app-code', 37 | srcs = glob([ 38 | 'src/main/java/**/*.java', 39 | ]), 40 | deps = [ 41 | ':all-libs', 42 | ':build_config', 43 | ':res', 44 | ], 45 | ) 46 | 47 | android_build_config( 48 | name = 'build_config', 49 | package = 'com.keyframesdemo', 50 | ) 51 | 52 | android_resource( 53 | name = 'res', 54 | res = 'src/main/res', 55 | package = 'com.keyframesdemo', 56 | ) 57 | 58 | android_binary( 59 | name = 'app', 60 | package_type = 'debug', 61 | manifest = 'src/main/AndroidManifest.xml', 62 | keystore = '//android/keystores:debug', 63 | deps = [ 64 | ':app-code', 65 | ], 66 | ) 67 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | 3 | import com.android.build.OutputFile 4 | 5 | /** 6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 7 | * and bundleReleaseJsAndAssets). 8 | * These basically call `react-native bundle` with the correct arguments during the Android build 9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 10 | * bundle directly from the development server. Below you can see all the possible configurations 11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 12 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // whether to bundle JS and assets in debug mode 22 | * bundleInDebug: false, 23 | * 24 | * // whether to bundle JS and assets in release mode 25 | * bundleInRelease: true, 26 | * 27 | * // whether to bundle JS and assets in another build variant (if configured). 28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 29 | * // The configuration property can be in the following formats 30 | * // 'bundleIn${productFlavor}${buildType}' 31 | * // 'bundleIn${buildType}' 32 | * // bundleInFreeDebug: true, 33 | * // bundleInPaidRelease: true, 34 | * // bundleInBeta: true, 35 | * 36 | * // the root of your project, i.e. where "package.json" lives 37 | * root: "../../", 38 | * 39 | * // where to put the JS bundle asset in debug mode 40 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 41 | * 42 | * // where to put the JS bundle asset in release mode 43 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 44 | * 45 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 46 | * // require('./image.png')), in debug mode 47 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 48 | * 49 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 50 | * // require('./image.png')), in release mode 51 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 52 | * 53 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 54 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 55 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 56 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 57 | * // for example, you might want to remove it from here. 58 | * inputExcludes: ["android/**", "ios/**"], 59 | * 60 | * // override which node gets called and with what additional arguments 61 | * nodeExecutableAndArgs: ["node"] 62 | * 63 | * // supply additional arguments to the packager 64 | * extraPackagerArgs: [] 65 | * ] 66 | */ 67 | 68 | apply from: "../../node_modules/react-native/react.gradle" 69 | 70 | /** 71 | * Set this to true to create two separate APKs instead of one: 72 | * - An APK that only works on ARM devices 73 | * - An APK that only works on x86 devices 74 | * The advantage is the size of the APK is reduced by about 4MB. 75 | * Upload all the APKs to the Play Store and people will download 76 | * the correct one based on the CPU architecture of their device. 77 | */ 78 | def enableSeparateBuildPerCPUArchitecture = false 79 | 80 | /** 81 | * Run Proguard to shrink the Java bytecode in release builds. 82 | */ 83 | def enableProguardInReleaseBuilds = false 84 | 85 | android { 86 | compileSdkVersion 23 87 | buildToolsVersion "23.0.1" 88 | 89 | defaultConfig { 90 | applicationId "com.keyframesdemo" 91 | minSdkVersion 16 92 | targetSdkVersion 22 93 | versionCode 1 94 | versionName "1.0" 95 | ndk { 96 | abiFilters "armeabi-v7a", "x86" 97 | } 98 | } 99 | splits { 100 | abi { 101 | reset() 102 | enable enableSeparateBuildPerCPUArchitecture 103 | universalApk false // If true, also generate a universal APK 104 | include "armeabi-v7a", "x86" 105 | } 106 | } 107 | buildTypes { 108 | release { 109 | minifyEnabled enableProguardInReleaseBuilds 110 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 111 | } 112 | } 113 | // applicationVariants are e.g. debug, release 114 | applicationVariants.all { variant -> 115 | variant.outputs.each { output -> 116 | // For each separate APK per architecture, set a unique version code as described here: 117 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits 118 | def versionCodes = ["armeabi-v7a":1, "x86":2] 119 | def abi = output.getFilter(OutputFile.ABI) 120 | if (abi != null) { // null for the universal-debug, universal-release variants 121 | output.versionCodeOverride = 122 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 123 | } 124 | } 125 | } 126 | } 127 | 128 | dependencies { 129 | compile project(':react-native-facebook-keyframes') 130 | compile fileTree(dir: "libs", include: ["*.jar"]) 131 | compile "com.android.support:appcompat-v7:23.0.1" 132 | compile "com.facebook.react:react-native:+" // From node_modules 133 | } 134 | 135 | // Run this once to be able to run the application with BUCK 136 | // puts all compile dependencies into folder libs for BUCK to use 137 | task copyDownloadableDepsToLibs(type: Copy) { 138 | from configurations.compile 139 | into 'libs' 140 | } 141 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Disabling obfuscation is useful if you collect stack traces from production crashes 20 | # (unless you are using a system that supports de-obfuscate the stack traces). 21 | -dontobfuscate 22 | 23 | # React Native 24 | 25 | # Keep our interfaces so they can be used by other ProGuard rules. 26 | # See http://sourceforge.net/p/proguard/bugs/466/ 27 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 28 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 29 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 30 | 31 | # Do not strip any method/class that is annotated with @DoNotStrip 32 | -keep @com.facebook.proguard.annotations.DoNotStrip class * 33 | -keep @com.facebook.common.internal.DoNotStrip class * 34 | -keepclassmembers class * { 35 | @com.facebook.proguard.annotations.DoNotStrip *; 36 | @com.facebook.common.internal.DoNotStrip *; 37 | } 38 | 39 | -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 40 | void set*(***); 41 | *** get*(); 42 | } 43 | 44 | -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 45 | -keep class * extends com.facebook.react.bridge.NativeModule { *; } 46 | -keepclassmembers,includedescriptorclasses class * { native ; } 47 | -keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } 48 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } 49 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } 50 | 51 | -dontwarn com.facebook.react.** 52 | 53 | # okhttp 54 | 55 | -keepattributes Signature 56 | -keepattributes *Annotation* 57 | -keep class okhttp3.** { *; } 58 | -keep interface okhttp3.** { *; } 59 | -dontwarn okhttp3.** 60 | 61 | # okio 62 | 63 | -keep class sun.misc.Unsafe { *; } 64 | -dontwarn java.nio.file.* 65 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 66 | -dontwarn okio.** 67 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/java/com/keyframesdemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.keyframesdemo; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. 9 | * This is used to schedule rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "KeyframesDemo"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/java/com/keyframesdemo/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.keyframesdemo; 2 | 3 | import android.app.Application; 4 | 5 | import com.facebook.react.ReactApplication; 6 | import com.facebook.react.ReactNativeHost; 7 | import com.facebook.react.ReactPackage; 8 | import com.facebook.react.shell.MainReactPackage; 9 | import com.facebook.soloader.SoLoader; 10 | import com.underscope.keyframes.RNFacebookKeyframesPackage; 11 | 12 | import java.util.Arrays; 13 | import java.util.List; 14 | 15 | public class MainApplication extends Application implements ReactApplication { 16 | 17 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 18 | @Override 19 | protected boolean getUseDeveloperSupport() { 20 | return BuildConfig.DEBUG; 21 | } 22 | 23 | @Override 24 | protected List getPackages() { 25 | return Arrays.asList( 26 | new MainReactPackage(), 27 | new RNFacebookKeyframesPackage() 28 | ); 29 | } 30 | }; 31 | 32 | @Override 33 | public ReactNativeHost getReactNativeHost() { 34 | return mReactNativeHost; 35 | } 36 | 37 | @Override 38 | public void onCreate() { 39 | super.onCreate(); 40 | SoLoader.init(this, /* native exopackage */ false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nubescope/react-native-facebook-keyframes/e96d243a0d0655b894fda3a3233345d787ea7978/demo/KeyframesDemo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nubescope/react-native-facebook-keyframes/e96d243a0d0655b894fda3a3233345d787ea7978/demo/KeyframesDemo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nubescope/react-native-facebook-keyframes/e96d243a0d0655b894fda3a3233345d787ea7978/demo/KeyframesDemo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nubescope/react-native-facebook-keyframes/e96d243a0d0655b894fda3a3233345d787ea7978/demo/KeyframesDemo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | KeyframesDemo 3 | 4 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.3.1' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | mavenLocal() 18 | jcenter() 19 | maven { 20 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 21 | url "$rootDir/../node_modules/react-native/android" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useDeprecatedNdk=true 21 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nubescope/react-native-facebook-keyframes/e96d243a0d0655b894fda3a3233345d787ea7978/demo/KeyframesDemo/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip 6 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/keystores/BUCK: -------------------------------------------------------------------------------- 1 | keystore( 2 | name = 'debug', 3 | store = 'debug.keystore', 4 | properties = 'debug.keystore.properties', 5 | visibility = [ 6 | 'PUBLIC', 7 | ], 8 | ) 9 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/keystores/debug.keystore.properties: -------------------------------------------------------------------------------- 1 | key.store=debug.keystore 2 | key.alias=androiddebugkey 3 | key.store.password=android 4 | key.alias.password=android 5 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'KeyframesDemo' 2 | include ':react-native-facebook-keyframes' 3 | project(':react-native-facebook-keyframes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-facebook-keyframes/android') 4 | 5 | include ':app' 6 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/index.android.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native' 2 | import App from './src/App' 3 | 4 | AppRegistry.registerComponent('KeyframesDemo', () => App) 5 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/index.ios.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native' 2 | import App from './src/App' 3 | 4 | AppRegistry.registerComponent('KeyframesDemo', () => App) 5 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00E356F31AD99517003FC87E /* KeyframesDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* KeyframesDemoTests.m */; }; 11 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 12 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 13 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 14 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 15 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 16 | 3CD1715DF6ED7071414BE3BA /* libPods-KeyframesDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FFB87A7EB95AEDDA182F87C /* libPods-KeyframesDemo.a */; }; 17 | F0200B521E22FF6700CFE397 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 18 | F0200B541E22FF6700CFE397 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 19 | F0200B551E22FF6700CFE397 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 20 | F0200B571E22FF6700CFE397 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 21 | F0200B591E22FF6700CFE397 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 22 | F0200B5B1E22FF6700CFE397 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 23 | F0200B5D1E22FF6700CFE397 /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 24 | F0200B5F1E22FF6700CFE397 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 25 | F0200B601E22FF6700CFE397 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 26 | F0200B621E22FF6700CFE397 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 27 | F0200B651E22FF6700CFE397 /* libRNFacebookKeyframes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0289CD01DFB208D00D44C65 /* libRNFacebookKeyframes.a */; }; 28 | F0200B691E22FF6700CFE397 /* libKeyframes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0200B681E22FF6700CFE397 /* libKeyframes.a */; }; 29 | F0200B901E23014900CFE397 /* libcxxreact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0200B461E22FF4700CFE397 /* libcxxreact.a */; }; 30 | F0200B911E23014900CFE397 /* libjschelpers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0200B4A1E22FF4700CFE397 /* libjschelpers.a */; }; 31 | F0200B921E23014900CFE397 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 32 | F0200B931E23014900CFE397 /* libyoga.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0200B421E22FF4700CFE397 /* libyoga.a */; }; 33 | /* End PBXBuildFile section */ 34 | 35 | /* Begin PBXContainerItemProxy section */ 36 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 39 | proxyType = 2; 40 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 41 | remoteInfo = RCTActionSheet; 42 | }; 43 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 46 | proxyType = 2; 47 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 48 | remoteInfo = RCTGeolocation; 49 | }; 50 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 51 | isa = PBXContainerItemProxy; 52 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 53 | proxyType = 2; 54 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 55 | remoteInfo = RCTImage; 56 | }; 57 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 58 | isa = PBXContainerItemProxy; 59 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 60 | proxyType = 2; 61 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 62 | remoteInfo = RCTNetwork; 63 | }; 64 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 65 | isa = PBXContainerItemProxy; 66 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 67 | proxyType = 2; 68 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 69 | remoteInfo = RCTVibration; 70 | }; 71 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 72 | isa = PBXContainerItemProxy; 73 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 74 | proxyType = 1; 75 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 76 | remoteInfo = KeyframesDemo; 77 | }; 78 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 79 | isa = PBXContainerItemProxy; 80 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 81 | proxyType = 2; 82 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 83 | remoteInfo = RCTSettings; 84 | }; 85 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 86 | isa = PBXContainerItemProxy; 87 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 88 | proxyType = 2; 89 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 90 | remoteInfo = RCTWebSocket; 91 | }; 92 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 93 | isa = PBXContainerItemProxy; 94 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 95 | proxyType = 2; 96 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 97 | remoteInfo = React; 98 | }; 99 | 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 100 | isa = PBXContainerItemProxy; 101 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 102 | proxyType = 2; 103 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 104 | remoteInfo = RCTAnimation; 105 | }; 106 | 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 107 | isa = PBXContainerItemProxy; 108 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 109 | proxyType = 2; 110 | remoteGlobalIDString = 2D2A28201D9B03D100D4039D; 111 | remoteInfo = "RCTAnimation-tvOS"; 112 | }; 113 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 114 | isa = PBXContainerItemProxy; 115 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 116 | proxyType = 2; 117 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 118 | remoteInfo = RCTLinking; 119 | }; 120 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 121 | isa = PBXContainerItemProxy; 122 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 123 | proxyType = 2; 124 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 125 | remoteInfo = RCTText; 126 | }; 127 | F0200B411E22FF4700CFE397 /* PBXContainerItemProxy */ = { 128 | isa = PBXContainerItemProxy; 129 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 130 | proxyType = 2; 131 | remoteGlobalIDString = 3D3C059A1DE3340900C268FA; 132 | remoteInfo = yoga; 133 | }; 134 | F0200B431E22FF4700CFE397 /* PBXContainerItemProxy */ = { 135 | isa = PBXContainerItemProxy; 136 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 137 | proxyType = 2; 138 | remoteGlobalIDString = 3D3C06751DE3340C00C268FA; 139 | remoteInfo = "yoga-tvOS"; 140 | }; 141 | F0200B451E22FF4700CFE397 /* PBXContainerItemProxy */ = { 142 | isa = PBXContainerItemProxy; 143 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 144 | proxyType = 2; 145 | remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; 146 | remoteInfo = cxxreact; 147 | }; 148 | F0200B471E22FF4700CFE397 /* PBXContainerItemProxy */ = { 149 | isa = PBXContainerItemProxy; 150 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 151 | proxyType = 2; 152 | remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; 153 | remoteInfo = "cxxreact-tvOS"; 154 | }; 155 | F0200B491E22FF4700CFE397 /* PBXContainerItemProxy */ = { 156 | isa = PBXContainerItemProxy; 157 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 158 | proxyType = 2; 159 | remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; 160 | remoteInfo = jschelpers; 161 | }; 162 | F0200B4B1E22FF4700CFE397 /* PBXContainerItemProxy */ = { 163 | isa = PBXContainerItemProxy; 164 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 165 | proxyType = 2; 166 | remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; 167 | remoteInfo = "jschelpers-tvOS"; 168 | }; 169 | F0289CB31DFB208D00D44C65 /* PBXContainerItemProxy */ = { 170 | isa = PBXContainerItemProxy; 171 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 172 | proxyType = 2; 173 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; 174 | remoteInfo = "RCTImage-tvOS"; 175 | }; 176 | F0289CB71DFB208D00D44C65 /* PBXContainerItemProxy */ = { 177 | isa = PBXContainerItemProxy; 178 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 179 | proxyType = 2; 180 | remoteGlobalIDString = 2D2A28471D9B043800D4039D; 181 | remoteInfo = "RCTLinking-tvOS"; 182 | }; 183 | F0289CBB1DFB208D00D44C65 /* PBXContainerItemProxy */ = { 184 | isa = PBXContainerItemProxy; 185 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 186 | proxyType = 2; 187 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D; 188 | remoteInfo = "RCTNetwork-tvOS"; 189 | }; 190 | F0289CBF1DFB208D00D44C65 /* PBXContainerItemProxy */ = { 191 | isa = PBXContainerItemProxy; 192 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 193 | proxyType = 2; 194 | remoteGlobalIDString = 2D2A28611D9B046600D4039D; 195 | remoteInfo = "RCTSettings-tvOS"; 196 | }; 197 | F0289CC31DFB208D00D44C65 /* PBXContainerItemProxy */ = { 198 | isa = PBXContainerItemProxy; 199 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 200 | proxyType = 2; 201 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D; 202 | remoteInfo = "RCTText-tvOS"; 203 | }; 204 | F0289CC81DFB208D00D44C65 /* PBXContainerItemProxy */ = { 205 | isa = PBXContainerItemProxy; 206 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 207 | proxyType = 2; 208 | remoteGlobalIDString = 2D2A28881D9B049200D4039D; 209 | remoteInfo = "RCTWebSocket-tvOS"; 210 | }; 211 | F0289CCC1DFB208D00D44C65 /* PBXContainerItemProxy */ = { 212 | isa = PBXContainerItemProxy; 213 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 214 | proxyType = 2; 215 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D; 216 | remoteInfo = "React-tvOS"; 217 | }; 218 | F0289CCF1DFB208D00D44C65 /* PBXContainerItemProxy */ = { 219 | isa = PBXContainerItemProxy; 220 | containerPortal = CCA356CB84CF4DFFA9065AE3 /* RNFacebookKeyframes.xcodeproj */; 221 | proxyType = 2; 222 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 223 | remoteInfo = RNFacebookKeyframes; 224 | }; 225 | /* End PBXContainerItemProxy section */ 226 | 227 | /* Begin PBXFileReference section */ 228 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 229 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 230 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 231 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 232 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 233 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 234 | 00E356EE1AD99517003FC87E /* KeyframesDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeyframesDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 235 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 236 | 00E356F21AD99517003FC87E /* KeyframesDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeyframesDemoTests.m; sourceTree = ""; }; 237 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 238 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 239 | 13B07F961A680F5B00A75B9A /* KeyframesDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KeyframesDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 240 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = KeyframesDemo/AppDelegate.h; sourceTree = ""; }; 241 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = KeyframesDemo/AppDelegate.m; sourceTree = ""; }; 242 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 243 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = KeyframesDemo/Images.xcassets; sourceTree = ""; }; 244 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = KeyframesDemo/Info.plist; sourceTree = ""; }; 245 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = KeyframesDemo/main.m; sourceTree = ""; }; 246 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 247 | 31968AC5C18E8350178E2478 /* Pods-KeyframesDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KeyframesDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-KeyframesDemo/Pods-KeyframesDemo.debug.xcconfig"; sourceTree = ""; }; 248 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; 249 | 5FFB87A7EB95AEDDA182F87C /* libPods-KeyframesDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-KeyframesDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 250 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 251 | 7F37C1C9253FBDFC2F8CBAF4 /* Pods-KeyframesDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KeyframesDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-KeyframesDemo/Pods-KeyframesDemo.release.xcconfig"; sourceTree = ""; }; 252 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 253 | CCA356CB84CF4DFFA9065AE3 /* RNFacebookKeyframes.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFacebookKeyframes.xcodeproj; path = "../node_modules/react-native-facebook-keyframes/ios/RNFacebookKeyframes.xcodeproj"; sourceTree = ""; }; 254 | F0200B681E22FF6700CFE397 /* libKeyframes.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libKeyframes.a; path = "Pods/../build/Debug-iphoneos/Keyframes/libKeyframes.a"; sourceTree = ""; }; 255 | F0289D161DFB28B200D44C65 /* libkeyframes.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libkeyframes.a; path = "../../../../../../Library/Developer/Xcode/DerivedData/KeyframesDemo-fjyhlobovobnpzddcsymoozhawmi/Build/Products/Debug-iphoneos/keyframes/libkeyframes.a"; sourceTree = ""; }; 256 | /* End PBXFileReference section */ 257 | 258 | /* Begin PBXFrameworksBuildPhase section */ 259 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 260 | isa = PBXFrameworksBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 268 | isa = PBXFrameworksBuildPhase; 269 | buildActionMask = 2147483647; 270 | files = ( 271 | F0200B901E23014900CFE397 /* libcxxreact.a in Frameworks */, 272 | F0200B911E23014900CFE397 /* libjschelpers.a in Frameworks */, 273 | F0200B921E23014900CFE397 /* libReact.a in Frameworks */, 274 | F0200B931E23014900CFE397 /* libyoga.a in Frameworks */, 275 | F0200B691E22FF6700CFE397 /* libKeyframes.a in Frameworks */, 276 | F0200B521E22FF6700CFE397 /* libRCTActionSheet.a in Frameworks */, 277 | F0200B541E22FF6700CFE397 /* libRCTAnimation.a in Frameworks */, 278 | F0200B551E22FF6700CFE397 /* libRCTGeolocation.a in Frameworks */, 279 | F0200B571E22FF6700CFE397 /* libRCTImage.a in Frameworks */, 280 | F0200B591E22FF6700CFE397 /* libRCTLinking.a in Frameworks */, 281 | F0200B5B1E22FF6700CFE397 /* libRCTNetwork.a in Frameworks */, 282 | F0200B5D1E22FF6700CFE397 /* libRCTSettings.a in Frameworks */, 283 | F0200B5F1E22FF6700CFE397 /* libRCTText.a in Frameworks */, 284 | F0200B601E22FF6700CFE397 /* libRCTVibration.a in Frameworks */, 285 | F0200B621E22FF6700CFE397 /* libRCTWebSocket.a in Frameworks */, 286 | F0200B651E22FF6700CFE397 /* libRNFacebookKeyframes.a in Frameworks */, 287 | 3CD1715DF6ED7071414BE3BA /* libPods-KeyframesDemo.a in Frameworks */, 288 | ); 289 | runOnlyForDeploymentPostprocessing = 0; 290 | }; 291 | /* End PBXFrameworksBuildPhase section */ 292 | 293 | /* Begin PBXGroup section */ 294 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 295 | isa = PBXGroup; 296 | children = ( 297 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 298 | ); 299 | name = Products; 300 | sourceTree = ""; 301 | }; 302 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 303 | isa = PBXGroup; 304 | children = ( 305 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 306 | ); 307 | name = Products; 308 | sourceTree = ""; 309 | }; 310 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 311 | isa = PBXGroup; 312 | children = ( 313 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 314 | F0289CB41DFB208D00D44C65 /* libRCTImage-tvOS.a */, 315 | ); 316 | name = Products; 317 | sourceTree = ""; 318 | }; 319 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 320 | isa = PBXGroup; 321 | children = ( 322 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 323 | F0289CBC1DFB208D00D44C65 /* libRCTNetwork-tvOS.a */, 324 | ); 325 | name = Products; 326 | sourceTree = ""; 327 | }; 328 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 329 | isa = PBXGroup; 330 | children = ( 331 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 332 | ); 333 | name = Products; 334 | sourceTree = ""; 335 | }; 336 | 00E356EF1AD99517003FC87E /* KeyframesDemoTests */ = { 337 | isa = PBXGroup; 338 | children = ( 339 | 00E356F21AD99517003FC87E /* KeyframesDemoTests.m */, 340 | 00E356F01AD99517003FC87E /* Supporting Files */, 341 | ); 342 | path = KeyframesDemoTests; 343 | sourceTree = ""; 344 | }; 345 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 346 | isa = PBXGroup; 347 | children = ( 348 | 00E356F11AD99517003FC87E /* Info.plist */, 349 | ); 350 | name = "Supporting Files"; 351 | sourceTree = ""; 352 | }; 353 | 139105B71AF99BAD00B5F7CC /* Products */ = { 354 | isa = PBXGroup; 355 | children = ( 356 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 357 | F0289CC01DFB208D00D44C65 /* libRCTSettings-tvOS.a */, 358 | ); 359 | name = Products; 360 | sourceTree = ""; 361 | }; 362 | 139FDEE71B06529A00C62182 /* Products */ = { 363 | isa = PBXGroup; 364 | children = ( 365 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 366 | F0289CC91DFB208D00D44C65 /* libRCTWebSocket-tvOS.a */, 367 | ); 368 | name = Products; 369 | sourceTree = ""; 370 | }; 371 | 13B07FAE1A68108700A75B9A /* KeyframesDemo */ = { 372 | isa = PBXGroup; 373 | children = ( 374 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 375 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 376 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 377 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 378 | 13B07FB61A68108700A75B9A /* Info.plist */, 379 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 380 | 13B07FB71A68108700A75B9A /* main.m */, 381 | ); 382 | name = KeyframesDemo; 383 | sourceTree = ""; 384 | }; 385 | 146834001AC3E56700842450 /* Products */ = { 386 | isa = PBXGroup; 387 | children = ( 388 | 146834041AC3E56700842450 /* libReact.a */, 389 | F0289CCD1DFB208D00D44C65 /* libReact.a */, 390 | F0200B421E22FF4700CFE397 /* libyoga.a */, 391 | F0200B441E22FF4700CFE397 /* libyoga.a */, 392 | F0200B461E22FF4700CFE397 /* libcxxreact.a */, 393 | F0200B481E22FF4700CFE397 /* libcxxreact.a */, 394 | F0200B4A1E22FF4700CFE397 /* libjschelpers.a */, 395 | F0200B4C1E22FF4700CFE397 /* libjschelpers.a */, 396 | ); 397 | name = Products; 398 | sourceTree = ""; 399 | }; 400 | 5E91572E1DD0AC6500FF2AA8 /* Products */ = { 401 | isa = PBXGroup; 402 | children = ( 403 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, 404 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, 405 | ); 406 | name = Products; 407 | sourceTree = ""; 408 | }; 409 | 7827A93A5525E35C28544F57 /* Frameworks */ = { 410 | isa = PBXGroup; 411 | children = ( 412 | F0200B681E22FF6700CFE397 /* libKeyframes.a */, 413 | F0289D161DFB28B200D44C65 /* libkeyframes.a */, 414 | 5FFB87A7EB95AEDDA182F87C /* libPods-KeyframesDemo.a */, 415 | ); 416 | name = Frameworks; 417 | sourceTree = ""; 418 | }; 419 | 78C398B11ACF4ADC00677621 /* Products */ = { 420 | isa = PBXGroup; 421 | children = ( 422 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 423 | F0289CB81DFB208D00D44C65 /* libRCTLinking-tvOS.a */, 424 | ); 425 | name = Products; 426 | sourceTree = ""; 427 | }; 428 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 429 | isa = PBXGroup; 430 | children = ( 431 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, 432 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 433 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 434 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 435 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 436 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 437 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 438 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 439 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 440 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 441 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 442 | CCA356CB84CF4DFFA9065AE3 /* RNFacebookKeyframes.xcodeproj */, 443 | ); 444 | name = Libraries; 445 | sourceTree = ""; 446 | }; 447 | 832341B11AAA6A8300B99B32 /* Products */ = { 448 | isa = PBXGroup; 449 | children = ( 450 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 451 | F0289CC41DFB208D00D44C65 /* libRCTText-tvOS.a */, 452 | ); 453 | name = Products; 454 | sourceTree = ""; 455 | }; 456 | 83CBB9F61A601CBA00E9B192 = { 457 | isa = PBXGroup; 458 | children = ( 459 | 13B07FAE1A68108700A75B9A /* KeyframesDemo */, 460 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 461 | 00E356EF1AD99517003FC87E /* KeyframesDemoTests */, 462 | 83CBBA001A601CBA00E9B192 /* Products */, 463 | BBDA25D5B0BC34495E853E3C /* Pods */, 464 | 7827A93A5525E35C28544F57 /* Frameworks */, 465 | ); 466 | indentWidth = 2; 467 | sourceTree = ""; 468 | tabWidth = 2; 469 | }; 470 | 83CBBA001A601CBA00E9B192 /* Products */ = { 471 | isa = PBXGroup; 472 | children = ( 473 | 13B07F961A680F5B00A75B9A /* KeyframesDemo.app */, 474 | 00E356EE1AD99517003FC87E /* KeyframesDemoTests.xctest */, 475 | ); 476 | name = Products; 477 | sourceTree = ""; 478 | }; 479 | BBDA25D5B0BC34495E853E3C /* Pods */ = { 480 | isa = PBXGroup; 481 | children = ( 482 | 31968AC5C18E8350178E2478 /* Pods-KeyframesDemo.debug.xcconfig */, 483 | 7F37C1C9253FBDFC2F8CBAF4 /* Pods-KeyframesDemo.release.xcconfig */, 484 | ); 485 | name = Pods; 486 | sourceTree = ""; 487 | }; 488 | F0289CAB1DFB208D00D44C65 /* Products */ = { 489 | isa = PBXGroup; 490 | children = ( 491 | F0289CD01DFB208D00D44C65 /* libRNFacebookKeyframes.a */, 492 | ); 493 | name = Products; 494 | sourceTree = ""; 495 | }; 496 | /* End PBXGroup section */ 497 | 498 | /* Begin PBXNativeTarget section */ 499 | 00E356ED1AD99517003FC87E /* KeyframesDemoTests */ = { 500 | isa = PBXNativeTarget; 501 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "KeyframesDemoTests" */; 502 | buildPhases = ( 503 | 00E356EA1AD99517003FC87E /* Sources */, 504 | 00E356EB1AD99517003FC87E /* Frameworks */, 505 | 00E356EC1AD99517003FC87E /* Resources */, 506 | ); 507 | buildRules = ( 508 | ); 509 | dependencies = ( 510 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 511 | ); 512 | name = KeyframesDemoTests; 513 | productName = KeyframesDemoTests; 514 | productReference = 00E356EE1AD99517003FC87E /* KeyframesDemoTests.xctest */; 515 | productType = "com.apple.product-type.bundle.unit-test"; 516 | }; 517 | 13B07F861A680F5B00A75B9A /* KeyframesDemo */ = { 518 | isa = PBXNativeTarget; 519 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "KeyframesDemo" */; 520 | buildPhases = ( 521 | FF0B01CEDD7AAD1B9434EDFE /* [CP] Check Pods Manifest.lock */, 522 | 13B07F871A680F5B00A75B9A /* Sources */, 523 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 524 | 13B07F8E1A680F5B00A75B9A /* Resources */, 525 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 526 | C7926EE0873E51B65BD20EFD /* [CP] Embed Pods Frameworks */, 527 | FA00D39AA2E35F48A9245DE9 /* [CP] Copy Pods Resources */, 528 | ); 529 | buildRules = ( 530 | ); 531 | dependencies = ( 532 | ); 533 | name = KeyframesDemo; 534 | productName = "Hello World"; 535 | productReference = 13B07F961A680F5B00A75B9A /* KeyframesDemo.app */; 536 | productType = "com.apple.product-type.application"; 537 | }; 538 | /* End PBXNativeTarget section */ 539 | 540 | /* Begin PBXProject section */ 541 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 542 | isa = PBXProject; 543 | attributes = { 544 | LastUpgradeCheck = 610; 545 | ORGANIZATIONNAME = Facebook; 546 | TargetAttributes = { 547 | 00E356ED1AD99517003FC87E = { 548 | CreatedOnToolsVersion = 6.2; 549 | TestTargetID = 13B07F861A680F5B00A75B9A; 550 | }; 551 | }; 552 | }; 553 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "KeyframesDemo" */; 554 | compatibilityVersion = "Xcode 3.2"; 555 | developmentRegion = English; 556 | hasScannedForEncodings = 0; 557 | knownRegions = ( 558 | en, 559 | Base, 560 | ); 561 | mainGroup = 83CBB9F61A601CBA00E9B192; 562 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 563 | projectDirPath = ""; 564 | projectReferences = ( 565 | { 566 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 567 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 568 | }, 569 | { 570 | ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; 571 | ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 572 | }, 573 | { 574 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 575 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 576 | }, 577 | { 578 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 579 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 580 | }, 581 | { 582 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 583 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 584 | }, 585 | { 586 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 587 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 588 | }, 589 | { 590 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 591 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 592 | }, 593 | { 594 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 595 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 596 | }, 597 | { 598 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 599 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 600 | }, 601 | { 602 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 603 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 604 | }, 605 | { 606 | ProductGroup = 146834001AC3E56700842450 /* Products */; 607 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 608 | }, 609 | { 610 | ProductGroup = F0289CAB1DFB208D00D44C65 /* Products */; 611 | ProjectRef = CCA356CB84CF4DFFA9065AE3 /* RNFacebookKeyframes.xcodeproj */; 612 | }, 613 | ); 614 | projectRoot = ""; 615 | targets = ( 616 | 13B07F861A680F5B00A75B9A /* KeyframesDemo */, 617 | 00E356ED1AD99517003FC87E /* KeyframesDemoTests */, 618 | ); 619 | }; 620 | /* End PBXProject section */ 621 | 622 | /* Begin PBXReferenceProxy section */ 623 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 624 | isa = PBXReferenceProxy; 625 | fileType = archive.ar; 626 | path = libRCTActionSheet.a; 627 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 628 | sourceTree = BUILT_PRODUCTS_DIR; 629 | }; 630 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 631 | isa = PBXReferenceProxy; 632 | fileType = archive.ar; 633 | path = libRCTGeolocation.a; 634 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 635 | sourceTree = BUILT_PRODUCTS_DIR; 636 | }; 637 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 638 | isa = PBXReferenceProxy; 639 | fileType = archive.ar; 640 | path = libRCTImage.a; 641 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 642 | sourceTree = BUILT_PRODUCTS_DIR; 643 | }; 644 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 645 | isa = PBXReferenceProxy; 646 | fileType = archive.ar; 647 | path = libRCTNetwork.a; 648 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 649 | sourceTree = BUILT_PRODUCTS_DIR; 650 | }; 651 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 652 | isa = PBXReferenceProxy; 653 | fileType = archive.ar; 654 | path = libRCTVibration.a; 655 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 656 | sourceTree = BUILT_PRODUCTS_DIR; 657 | }; 658 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 659 | isa = PBXReferenceProxy; 660 | fileType = archive.ar; 661 | path = libRCTSettings.a; 662 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 663 | sourceTree = BUILT_PRODUCTS_DIR; 664 | }; 665 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 666 | isa = PBXReferenceProxy; 667 | fileType = archive.ar; 668 | path = libRCTWebSocket.a; 669 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 670 | sourceTree = BUILT_PRODUCTS_DIR; 671 | }; 672 | 146834041AC3E56700842450 /* libReact.a */ = { 673 | isa = PBXReferenceProxy; 674 | fileType = archive.ar; 675 | path = libReact.a; 676 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 677 | sourceTree = BUILT_PRODUCTS_DIR; 678 | }; 679 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { 680 | isa = PBXReferenceProxy; 681 | fileType = archive.ar; 682 | path = libRCTAnimation.a; 683 | remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 684 | sourceTree = BUILT_PRODUCTS_DIR; 685 | }; 686 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { 687 | isa = PBXReferenceProxy; 688 | fileType = archive.ar; 689 | path = "libRCTAnimation-tvOS.a"; 690 | remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 691 | sourceTree = BUILT_PRODUCTS_DIR; 692 | }; 693 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 694 | isa = PBXReferenceProxy; 695 | fileType = archive.ar; 696 | path = libRCTLinking.a; 697 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 698 | sourceTree = BUILT_PRODUCTS_DIR; 699 | }; 700 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 701 | isa = PBXReferenceProxy; 702 | fileType = archive.ar; 703 | path = libRCTText.a; 704 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 705 | sourceTree = BUILT_PRODUCTS_DIR; 706 | }; 707 | F0200B421E22FF4700CFE397 /* libyoga.a */ = { 708 | isa = PBXReferenceProxy; 709 | fileType = archive.ar; 710 | path = libyoga.a; 711 | remoteRef = F0200B411E22FF4700CFE397 /* PBXContainerItemProxy */; 712 | sourceTree = BUILT_PRODUCTS_DIR; 713 | }; 714 | F0200B441E22FF4700CFE397 /* libyoga.a */ = { 715 | isa = PBXReferenceProxy; 716 | fileType = archive.ar; 717 | path = libyoga.a; 718 | remoteRef = F0200B431E22FF4700CFE397 /* PBXContainerItemProxy */; 719 | sourceTree = BUILT_PRODUCTS_DIR; 720 | }; 721 | F0200B461E22FF4700CFE397 /* libcxxreact.a */ = { 722 | isa = PBXReferenceProxy; 723 | fileType = archive.ar; 724 | path = libcxxreact.a; 725 | remoteRef = F0200B451E22FF4700CFE397 /* PBXContainerItemProxy */; 726 | sourceTree = BUILT_PRODUCTS_DIR; 727 | }; 728 | F0200B481E22FF4700CFE397 /* libcxxreact.a */ = { 729 | isa = PBXReferenceProxy; 730 | fileType = archive.ar; 731 | path = libcxxreact.a; 732 | remoteRef = F0200B471E22FF4700CFE397 /* PBXContainerItemProxy */; 733 | sourceTree = BUILT_PRODUCTS_DIR; 734 | }; 735 | F0200B4A1E22FF4700CFE397 /* libjschelpers.a */ = { 736 | isa = PBXReferenceProxy; 737 | fileType = archive.ar; 738 | path = libjschelpers.a; 739 | remoteRef = F0200B491E22FF4700CFE397 /* PBXContainerItemProxy */; 740 | sourceTree = BUILT_PRODUCTS_DIR; 741 | }; 742 | F0200B4C1E22FF4700CFE397 /* libjschelpers.a */ = { 743 | isa = PBXReferenceProxy; 744 | fileType = archive.ar; 745 | path = libjschelpers.a; 746 | remoteRef = F0200B4B1E22FF4700CFE397 /* PBXContainerItemProxy */; 747 | sourceTree = BUILT_PRODUCTS_DIR; 748 | }; 749 | F0289CB41DFB208D00D44C65 /* libRCTImage-tvOS.a */ = { 750 | isa = PBXReferenceProxy; 751 | fileType = archive.ar; 752 | path = "libRCTImage-tvOS.a"; 753 | remoteRef = F0289CB31DFB208D00D44C65 /* PBXContainerItemProxy */; 754 | sourceTree = BUILT_PRODUCTS_DIR; 755 | }; 756 | F0289CB81DFB208D00D44C65 /* libRCTLinking-tvOS.a */ = { 757 | isa = PBXReferenceProxy; 758 | fileType = archive.ar; 759 | path = "libRCTLinking-tvOS.a"; 760 | remoteRef = F0289CB71DFB208D00D44C65 /* PBXContainerItemProxy */; 761 | sourceTree = BUILT_PRODUCTS_DIR; 762 | }; 763 | F0289CBC1DFB208D00D44C65 /* libRCTNetwork-tvOS.a */ = { 764 | isa = PBXReferenceProxy; 765 | fileType = archive.ar; 766 | path = "libRCTNetwork-tvOS.a"; 767 | remoteRef = F0289CBB1DFB208D00D44C65 /* PBXContainerItemProxy */; 768 | sourceTree = BUILT_PRODUCTS_DIR; 769 | }; 770 | F0289CC01DFB208D00D44C65 /* libRCTSettings-tvOS.a */ = { 771 | isa = PBXReferenceProxy; 772 | fileType = archive.ar; 773 | path = "libRCTSettings-tvOS.a"; 774 | remoteRef = F0289CBF1DFB208D00D44C65 /* PBXContainerItemProxy */; 775 | sourceTree = BUILT_PRODUCTS_DIR; 776 | }; 777 | F0289CC41DFB208D00D44C65 /* libRCTText-tvOS.a */ = { 778 | isa = PBXReferenceProxy; 779 | fileType = archive.ar; 780 | path = "libRCTText-tvOS.a"; 781 | remoteRef = F0289CC31DFB208D00D44C65 /* PBXContainerItemProxy */; 782 | sourceTree = BUILT_PRODUCTS_DIR; 783 | }; 784 | F0289CC91DFB208D00D44C65 /* libRCTWebSocket-tvOS.a */ = { 785 | isa = PBXReferenceProxy; 786 | fileType = archive.ar; 787 | path = "libRCTWebSocket-tvOS.a"; 788 | remoteRef = F0289CC81DFB208D00D44C65 /* PBXContainerItemProxy */; 789 | sourceTree = BUILT_PRODUCTS_DIR; 790 | }; 791 | F0289CCD1DFB208D00D44C65 /* libReact.a */ = { 792 | isa = PBXReferenceProxy; 793 | fileType = archive.ar; 794 | path = libReact.a; 795 | remoteRef = F0289CCC1DFB208D00D44C65 /* PBXContainerItemProxy */; 796 | sourceTree = BUILT_PRODUCTS_DIR; 797 | }; 798 | F0289CD01DFB208D00D44C65 /* libRNFacebookKeyframes.a */ = { 799 | isa = PBXReferenceProxy; 800 | fileType = archive.ar; 801 | path = libRNFacebookKeyframes.a; 802 | remoteRef = F0289CCF1DFB208D00D44C65 /* PBXContainerItemProxy */; 803 | sourceTree = BUILT_PRODUCTS_DIR; 804 | }; 805 | /* End PBXReferenceProxy section */ 806 | 807 | /* Begin PBXResourcesBuildPhase section */ 808 | 00E356EC1AD99517003FC87E /* Resources */ = { 809 | isa = PBXResourcesBuildPhase; 810 | buildActionMask = 2147483647; 811 | files = ( 812 | ); 813 | runOnlyForDeploymentPostprocessing = 0; 814 | }; 815 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 816 | isa = PBXResourcesBuildPhase; 817 | buildActionMask = 2147483647; 818 | files = ( 819 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 820 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 821 | ); 822 | runOnlyForDeploymentPostprocessing = 0; 823 | }; 824 | /* End PBXResourcesBuildPhase section */ 825 | 826 | /* Begin PBXShellScriptBuildPhase section */ 827 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 828 | isa = PBXShellScriptBuildPhase; 829 | buildActionMask = 2147483647; 830 | files = ( 831 | ); 832 | inputPaths = ( 833 | ); 834 | name = "Bundle React Native code and images"; 835 | outputPaths = ( 836 | ); 837 | runOnlyForDeploymentPostprocessing = 0; 838 | shellPath = /bin/sh; 839 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; 840 | }; 841 | C7926EE0873E51B65BD20EFD /* [CP] Embed Pods Frameworks */ = { 842 | isa = PBXShellScriptBuildPhase; 843 | buildActionMask = 2147483647; 844 | files = ( 845 | ); 846 | inputPaths = ( 847 | ); 848 | name = "[CP] Embed Pods Frameworks"; 849 | outputPaths = ( 850 | ); 851 | runOnlyForDeploymentPostprocessing = 0; 852 | shellPath = /bin/sh; 853 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KeyframesDemo/Pods-KeyframesDemo-frameworks.sh\"\n"; 854 | showEnvVarsInLog = 0; 855 | }; 856 | FA00D39AA2E35F48A9245DE9 /* [CP] Copy Pods Resources */ = { 857 | isa = PBXShellScriptBuildPhase; 858 | buildActionMask = 2147483647; 859 | files = ( 860 | ); 861 | inputPaths = ( 862 | ); 863 | name = "[CP] Copy Pods Resources"; 864 | outputPaths = ( 865 | ); 866 | runOnlyForDeploymentPostprocessing = 0; 867 | shellPath = /bin/sh; 868 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KeyframesDemo/Pods-KeyframesDemo-resources.sh\"\n"; 869 | showEnvVarsInLog = 0; 870 | }; 871 | FF0B01CEDD7AAD1B9434EDFE /* [CP] Check Pods Manifest.lock */ = { 872 | isa = PBXShellScriptBuildPhase; 873 | buildActionMask = 2147483647; 874 | files = ( 875 | ); 876 | inputPaths = ( 877 | ); 878 | name = "[CP] Check Pods Manifest.lock"; 879 | outputPaths = ( 880 | ); 881 | runOnlyForDeploymentPostprocessing = 0; 882 | shellPath = /bin/sh; 883 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 884 | showEnvVarsInLog = 0; 885 | }; 886 | /* End PBXShellScriptBuildPhase section */ 887 | 888 | /* Begin PBXSourcesBuildPhase section */ 889 | 00E356EA1AD99517003FC87E /* Sources */ = { 890 | isa = PBXSourcesBuildPhase; 891 | buildActionMask = 2147483647; 892 | files = ( 893 | 00E356F31AD99517003FC87E /* KeyframesDemoTests.m in Sources */, 894 | ); 895 | runOnlyForDeploymentPostprocessing = 0; 896 | }; 897 | 13B07F871A680F5B00A75B9A /* Sources */ = { 898 | isa = PBXSourcesBuildPhase; 899 | buildActionMask = 2147483647; 900 | files = ( 901 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 902 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 903 | ); 904 | runOnlyForDeploymentPostprocessing = 0; 905 | }; 906 | /* End PBXSourcesBuildPhase section */ 907 | 908 | /* Begin PBXTargetDependency section */ 909 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 910 | isa = PBXTargetDependency; 911 | target = 13B07F861A680F5B00A75B9A /* KeyframesDemo */; 912 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 913 | }; 914 | /* End PBXTargetDependency section */ 915 | 916 | /* Begin PBXVariantGroup section */ 917 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 918 | isa = PBXVariantGroup; 919 | children = ( 920 | 13B07FB21A68108700A75B9A /* Base */, 921 | ); 922 | name = LaunchScreen.xib; 923 | path = KeyframesDemo; 924 | sourceTree = ""; 925 | }; 926 | /* End PBXVariantGroup section */ 927 | 928 | /* Begin XCBuildConfiguration section */ 929 | 00E356F61AD99517003FC87E /* Debug */ = { 930 | isa = XCBuildConfiguration; 931 | buildSettings = { 932 | BUNDLE_LOADER = "$(TEST_HOST)"; 933 | GCC_PREPROCESSOR_DEFINITIONS = ( 934 | "DEBUG=1", 935 | "$(inherited)", 936 | ); 937 | INFOPLIST_FILE = KeyframesDemoTests/Info.plist; 938 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 939 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 940 | LIBRARY_SEARCH_PATHS = ( 941 | "$(inherited)", 942 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 943 | ); 944 | PRODUCT_NAME = "$(TARGET_NAME)"; 945 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeyframesDemo.app/KeyframesDemo"; 946 | }; 947 | name = Debug; 948 | }; 949 | 00E356F71AD99517003FC87E /* Release */ = { 950 | isa = XCBuildConfiguration; 951 | buildSettings = { 952 | BUNDLE_LOADER = "$(TEST_HOST)"; 953 | COPY_PHASE_STRIP = NO; 954 | INFOPLIST_FILE = KeyframesDemoTests/Info.plist; 955 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 956 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 957 | LIBRARY_SEARCH_PATHS = ( 958 | "$(inherited)", 959 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 960 | ); 961 | PRODUCT_NAME = "$(TARGET_NAME)"; 962 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeyframesDemo.app/KeyframesDemo"; 963 | }; 964 | name = Release; 965 | }; 966 | 13B07F941A680F5B00A75B9A /* Debug */ = { 967 | isa = XCBuildConfiguration; 968 | baseConfigurationReference = 31968AC5C18E8350178E2478 /* Pods-KeyframesDemo.debug.xcconfig */; 969 | buildSettings = { 970 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 971 | CURRENT_PROJECT_VERSION = 1; 972 | DEAD_CODE_STRIPPING = NO; 973 | INFOPLIST_FILE = KeyframesDemo/Info.plist; 974 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 975 | LIBRARY_SEARCH_PATHS = ( 976 | "$(inherited)", 977 | "$(PROJECT_DIR)/build/Debug-iphoneos/keyframes", 978 | "$(PROJECT_DIR)/build/Debug-iphoneos/Keyframes", 979 | ); 980 | OTHER_LDFLAGS = ( 981 | "$(inherited)", 982 | "-ObjC", 983 | "-lc++", 984 | ); 985 | PRODUCT_NAME = KeyframesDemo; 986 | VERSIONING_SYSTEM = "apple-generic"; 987 | }; 988 | name = Debug; 989 | }; 990 | 13B07F951A680F5B00A75B9A /* Release */ = { 991 | isa = XCBuildConfiguration; 992 | baseConfigurationReference = 7F37C1C9253FBDFC2F8CBAF4 /* Pods-KeyframesDemo.release.xcconfig */; 993 | buildSettings = { 994 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 995 | CURRENT_PROJECT_VERSION = 1; 996 | INFOPLIST_FILE = KeyframesDemo/Info.plist; 997 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 998 | LIBRARY_SEARCH_PATHS = ( 999 | "$(inherited)", 1000 | "$(PROJECT_DIR)/build/Debug-iphoneos/keyframes", 1001 | "$(PROJECT_DIR)/build/Debug-iphoneos/Keyframes", 1002 | ); 1003 | OTHER_LDFLAGS = ( 1004 | "$(inherited)", 1005 | "-ObjC", 1006 | "-lc++", 1007 | ); 1008 | PRODUCT_NAME = KeyframesDemo; 1009 | VERSIONING_SYSTEM = "apple-generic"; 1010 | }; 1011 | name = Release; 1012 | }; 1013 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 1014 | isa = XCBuildConfiguration; 1015 | buildSettings = { 1016 | ALWAYS_SEARCH_USER_PATHS = NO; 1017 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1018 | CLANG_CXX_LIBRARY = "libc++"; 1019 | CLANG_ENABLE_MODULES = YES; 1020 | CLANG_ENABLE_OBJC_ARC = YES; 1021 | CLANG_WARN_BOOL_CONVERSION = YES; 1022 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1023 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1024 | CLANG_WARN_EMPTY_BODY = YES; 1025 | CLANG_WARN_ENUM_CONVERSION = YES; 1026 | CLANG_WARN_INT_CONVERSION = YES; 1027 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1028 | CLANG_WARN_UNREACHABLE_CODE = YES; 1029 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1030 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1031 | COPY_PHASE_STRIP = NO; 1032 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1033 | GCC_C_LANGUAGE_STANDARD = gnu99; 1034 | GCC_DYNAMIC_NO_PIC = NO; 1035 | GCC_OPTIMIZATION_LEVEL = 0; 1036 | GCC_PREPROCESSOR_DEFINITIONS = ( 1037 | "DEBUG=1", 1038 | "$(inherited)", 1039 | ); 1040 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 1041 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1042 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1043 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1044 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1045 | GCC_WARN_UNUSED_FUNCTION = YES; 1046 | GCC_WARN_UNUSED_VARIABLE = YES; 1047 | HEADER_SEARCH_PATHS = ( 1048 | "$(inherited)", 1049 | "$(SRCROOT)/../node_modules/react-native/React/**", 1050 | "$(SRCROOT)/../node_modules/react-native/ReactCommon/**", 1051 | "$(SRCROOT)/../node_modules/react-native-facebook-keyframes/ios", 1052 | ); 1053 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 1054 | MTL_ENABLE_DEBUG_INFO = YES; 1055 | ONLY_ACTIVE_ARCH = YES; 1056 | SDKROOT = iphoneos; 1057 | }; 1058 | name = Debug; 1059 | }; 1060 | 83CBBA211A601CBA00E9B192 /* Release */ = { 1061 | isa = XCBuildConfiguration; 1062 | buildSettings = { 1063 | ALWAYS_SEARCH_USER_PATHS = NO; 1064 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1065 | CLANG_CXX_LIBRARY = "libc++"; 1066 | CLANG_ENABLE_MODULES = YES; 1067 | CLANG_ENABLE_OBJC_ARC = YES; 1068 | CLANG_WARN_BOOL_CONVERSION = YES; 1069 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1070 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1071 | CLANG_WARN_EMPTY_BODY = YES; 1072 | CLANG_WARN_ENUM_CONVERSION = YES; 1073 | CLANG_WARN_INT_CONVERSION = YES; 1074 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1075 | CLANG_WARN_UNREACHABLE_CODE = YES; 1076 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1077 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1078 | COPY_PHASE_STRIP = YES; 1079 | ENABLE_NS_ASSERTIONS = NO; 1080 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1081 | GCC_C_LANGUAGE_STANDARD = gnu99; 1082 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1083 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1084 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1085 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1086 | GCC_WARN_UNUSED_FUNCTION = YES; 1087 | GCC_WARN_UNUSED_VARIABLE = YES; 1088 | HEADER_SEARCH_PATHS = ( 1089 | "$(inherited)", 1090 | "$(SRCROOT)/../node_modules/react-native/React/**", 1091 | "$(SRCROOT)/../node_modules/react-native/ReactCommon/**", 1092 | "$(SRCROOT)/../node_modules/react-native-facebook-keyframes/ios", 1093 | ); 1094 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 1095 | MTL_ENABLE_DEBUG_INFO = NO; 1096 | SDKROOT = iphoneos; 1097 | VALIDATE_PRODUCT = YES; 1098 | }; 1099 | name = Release; 1100 | }; 1101 | /* End XCBuildConfiguration section */ 1102 | 1103 | /* Begin XCConfigurationList section */ 1104 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "KeyframesDemoTests" */ = { 1105 | isa = XCConfigurationList; 1106 | buildConfigurations = ( 1107 | 00E356F61AD99517003FC87E /* Debug */, 1108 | 00E356F71AD99517003FC87E /* Release */, 1109 | ); 1110 | defaultConfigurationIsVisible = 0; 1111 | defaultConfigurationName = Release; 1112 | }; 1113 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "KeyframesDemo" */ = { 1114 | isa = XCConfigurationList; 1115 | buildConfigurations = ( 1116 | 13B07F941A680F5B00A75B9A /* Debug */, 1117 | 13B07F951A680F5B00A75B9A /* Release */, 1118 | ); 1119 | defaultConfigurationIsVisible = 0; 1120 | defaultConfigurationName = Release; 1121 | }; 1122 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "KeyframesDemo" */ = { 1123 | isa = XCConfigurationList; 1124 | buildConfigurations = ( 1125 | 83CBBA201A601CBA00E9B192 /* Debug */, 1126 | 83CBBA211A601CBA00E9B192 /* Release */, 1127 | ); 1128 | defaultConfigurationIsVisible = 0; 1129 | defaultConfigurationName = Release; 1130 | }; 1131 | /* End XCConfigurationList section */ 1132 | }; 1133 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1134 | } 1135 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo.xcodeproj/xcshareddata/xcschemes/KeyframesDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 67 | 68 | 69 | 70 | 71 | 77 | 78 | 79 | 80 | 81 | 82 | 92 | 94 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 113 | 119 | 120 | 121 | 122 | 124 | 125 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import 13 | #import 14 | 15 | @implementation AppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | NSURL *jsCodeLocation; 20 | 21 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; 22 | 23 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 24 | moduleName:@"KeyframesDemo" 25 | initialProperties:nil 26 | launchOptions:launchOptions]; 27 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 28 | 29 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 30 | UIViewController *rootViewController = [UIViewController new]; 31 | rootViewController.view = rootView; 32 | self.window.rootViewController = rootViewController; 33 | [self.window makeKeyAndVisible]; 34 | return YES; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UIViewControllerBasedStatusBarAppearance 38 | 39 | NSLocationWhenInUseUsageDescription 40 | 41 | NSAppTransportSecurity 42 | 43 | 44 | NSExceptionDomains 45 | 46 | localhost 47 | 48 | NSExceptionAllowsInsecureHTTPLoads 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemo/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/KeyframesDemoTests/KeyframesDemoTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | #import 12 | 13 | #import 14 | #import 15 | 16 | #define TIMEOUT_SECONDS 600 17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 18 | 19 | @interface KeyframesDemoTests : XCTestCase 20 | 21 | @end 22 | 23 | @implementation KeyframesDemoTests 24 | 25 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 26 | { 27 | if (test(view)) { 28 | return YES; 29 | } 30 | for (UIView *subview in [view subviews]) { 31 | if ([self findSubviewInView:subview matching:test]) { 32 | return YES; 33 | } 34 | } 35 | return NO; 36 | } 37 | 38 | - (void)testRendersWelcomeScreen 39 | { 40 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 41 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 42 | BOOL foundElement = NO; 43 | 44 | __block NSString *redboxError = nil; 45 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 46 | if (level >= RCTLogLevelError) { 47 | redboxError = message; 48 | } 49 | }); 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | RCTSetLogFunction(RCTDefaultLogFunction); 64 | 65 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 66 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 67 | } 68 | 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/Podfile: -------------------------------------------------------------------------------- 1 | target 'KeyframesDemo' do 2 | pod 'Keyframes', :git => 'https://github.com/facebookincubator/Keyframes.git', :commit => '07ce61ee388360258777eb3342c87ba6128584d0' 3 | end 4 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Keyframes (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - Keyframes (from `https://github.com/facebookincubator/Keyframes.git`, commit `07ce61ee388360258777eb3342c87ba6128584d0`) 6 | 7 | EXTERNAL SOURCES: 8 | Keyframes: 9 | :commit: 07ce61ee388360258777eb3342c87ba6128584d0 10 | :git: https://github.com/facebookincubator/Keyframes.git 11 | 12 | CHECKOUT OPTIONS: 13 | Keyframes: 14 | :commit: 07ce61ee388360258777eb3342c87ba6128584d0 15 | :git: https://github.com/facebookincubator/Keyframes.git 16 | 17 | SPEC CHECKSUMS: 18 | Keyframes: 2048d8626d14ef726d1c5cffa0fa5c00f3d8f681 19 | 20 | PODFILE CHECKSUM: c206ba1fb20b38365d35f2a5064330ff255ca084 21 | 22 | COCOAPODS: 1.1.1 23 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "KeyframesDemo", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node node_modules/react-native/local-cli/cli.js start", 7 | "test": "jest" 8 | }, 9 | "dependencies": { 10 | "react": "15.4.2", 11 | "react-native": "0.40.0" 12 | }, 13 | "devDependencies": { 14 | "babel-jest": "17.0.2", 15 | "babel-preset-react-native": "1.9.0", 16 | "jest": "17.0.3", 17 | "react-test-renderer": "15.4.1", 18 | "react-native-facebook-keyframes": "file:../../" 19 | }, 20 | "jest": { 21 | "preset": "react-native" 22 | } 23 | } -------------------------------------------------------------------------------- /demo/KeyframesDemo/src/App.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { 3 | StyleSheet, 4 | Text, 5 | View, 6 | TouchableOpacity, 7 | Slider, 8 | } from 'react-native' 9 | 10 | import KeyframesView from 'react-native-facebook-keyframes' 11 | 12 | export default class KeyframesDemo extends Component { 13 | 14 | state = { 15 | seek: null, 16 | paused: true, 17 | } 18 | 19 | keyframesLogo = require('./keyframes-logo.json') 20 | 21 | handleStartButtonPress = () => { 22 | this.setState({ seek: 0.0 }, () => this.setState( { paused: false })) 23 | } 24 | 25 | handlePauseButtonPress = () => { 26 | this.setState({ paused: true }) 27 | } 28 | 29 | handleResumeButtonPress = () => { 30 | this.setState({ paused: false }) 31 | } 32 | 33 | handleSeekProgressValueChange = seek => { 34 | this.setState({ seek: seek / 100 }) 35 | } 36 | 37 | render() { 38 | return ( 39 | 40 | 41 | Keyframes Demo! 42 | 43 | 44 | 50 | 51 | 52 | 53 | Start 54 | 55 | 56 | 57 | Pause 58 | 59 | 60 | 61 | Resume 62 | 63 | 64 | 65 | 72 | {this.state.seek} 73 | 74 | ) 75 | } 76 | } 77 | const defaultBackgroundColor = '#F5FCFF' 78 | 79 | const styles = StyleSheet.create({ 80 | container: { 81 | flex: 1, 82 | justifyContent: 'space-around', 83 | alignItems: 'center', 84 | backgroundColor: defaultBackgroundColor, 85 | }, 86 | 87 | welcome: { 88 | fontSize: 30, 89 | textAlign: 'center', 90 | marginTop: 50, 91 | }, 92 | 93 | keyframesLogoView: { 94 | width: 200, 95 | height: 200 96 | }, 97 | 98 | buttonsContainer: { 99 | flexDirection: 'row' 100 | }, 101 | 102 | button: { 103 | borderWidth: 1, 104 | padding: 10, 105 | marginHorizontal: 5, 106 | }, 107 | 108 | slider: { 109 | width: 300, 110 | margin: 20, 111 | }, 112 | 113 | seekText: { 114 | height: 20, 115 | } 116 | }) 117 | -------------------------------------------------------------------------------- /demo/KeyframesDemo/src/keyframes-logo.json: -------------------------------------------------------------------------------- 1 | { 2 | "formatVersion": "1.0", 3 | "name": "KEYFRAMESLOGO", 4 | "key": 0, 5 | "frame_rate": 24, 6 | "animation_frame_count": 88, 7 | "canvas_size": [ 8 | 615, 9 | 615 10 | ], 11 | "features": [ 12 | { 13 | "name": "Circle", 14 | "feature_animations": [ 15 | { 16 | "property": "ANCHOR_POINT", 17 | "key_values": [ 18 | { 19 | "start_frame": 0, 20 | "data": [ 21 | 0, 22 | 0 23 | ] 24 | } 25 | ], 26 | "timing_curves": [] 27 | }, 28 | { 29 | "property": "X_POSITION", 30 | "key_values": [ 31 | { 32 | "start_frame": 0, 33 | "data": [ 34 | 307.5 35 | ] 36 | } 37 | ], 38 | "timing_curves": [] 39 | }, 40 | { 41 | "property": "Y_POSITION", 42 | "key_values": [ 43 | { 44 | "start_frame": 0, 45 | "data": [ 46 | 307.5 47 | ] 48 | } 49 | ], 50 | "timing_curves": [] 51 | } 52 | ], 53 | "key_frames": [ 54 | { 55 | "start_frame": 0, 56 | "data": [ 57 | "M-17.50,-298.50", 58 | "C-110.66,-292.50,-173.50,-253.63,-220.50,-202.50", 59 | "C-264.77,-154.33,-305.30,-80.56,-299.50,17.50", 60 | "C-289.96,178.88,-161.32,310.07,17.50,299.50", 61 | "C179.65,289.91,309.01,162.37,299.50,-16.50", 62 | "C294.71,-106.64,253.08,-173.75,203.50,-219.50", 63 | "C153.92,-265.25,78.36,-304.67,-17.50,-298.50" 64 | ] 65 | } 66 | ], 67 | "fill_color": "#ff4080ff" 68 | }, 69 | { 70 | "name": "| - 4", 71 | "animation_group": 1, 72 | "from_frame": 31, 73 | "feature_animations": [ 74 | { 75 | "property": "ANCHOR_POINT", 76 | "key_values": [ 77 | { 78 | "start_frame": 0, 79 | "data": [ 80 | 836.367980957031, 81 | 540.000122070312 82 | ] 83 | } 84 | ], 85 | "timing_curves": [] 86 | }, 87 | { 88 | "property": "X_POSITION", 89 | "key_values": [ 90 | { 91 | "start_frame": 31, 92 | "data": [ 93 | 42.5 94 | ] 95 | }, 96 | { 97 | "start_frame": 46, 98 | "data": [ 99 | -17.5 100 | ] 101 | } 102 | ], 103 | "timing_curves": [ 104 | [ 105 | [ 106 | 0.16666666667000002, 107 | 0.16666666667000002 108 | ], 109 | [ 110 | 0, 111 | 1 112 | ] 113 | ] 114 | ] 115 | }, 116 | { 117 | "property": "Y_POSITION", 118 | "key_values": [ 119 | { 120 | "start_frame": 31, 121 | "data": [ 122 | 12.4999389648438 123 | ] 124 | }, 125 | { 126 | "start_frame": 46, 127 | "data": [ 128 | 12.4999389648438 129 | ] 130 | } 131 | ], 132 | "timing_curves": [ 133 | [ 134 | [ 135 | 0.16666666667000002, 136 | 0.16666666667000002 137 | ], 138 | [ 139 | 0, 140 | 1 141 | ] 142 | ] 143 | ] 144 | } 145 | ], 146 | "stroke_line_cap": "butt", 147 | "key_frames": [ 148 | { 149 | "start_frame": 0, 150 | "data": [ 151 | "M836.44,695.44", 152 | "L836.44,384.67" 153 | ] 154 | } 155 | ], 156 | "stroke_color": "#ff1c56c8", 157 | "stroke_width": 90 158 | }, 159 | { 160 | "name": "| - 3", 161 | "animation_group": 1, 162 | "from_frame": 19, 163 | "to_frame": 31, 164 | "feature_animations": [ 165 | { 166 | "property": "ANCHOR_POINT", 167 | "key_values": [ 168 | { 169 | "start_frame": 0, 170 | "data": [ 171 | 951.182983398438, 172 | 540.000244140625 173 | ] 174 | } 175 | ], 176 | "timing_curves": [] 177 | }, 178 | { 179 | "property": "X_POSITION", 180 | "key_values": [ 181 | { 182 | "start_frame": 0, 183 | "data": [ 184 | 33.6829833984375 185 | ] 186 | } 187 | ], 188 | "timing_curves": [] 189 | }, 190 | { 191 | "property": "Y_POSITION", 192 | "key_values": [ 193 | { 194 | "start_frame": 0, 195 | "data": [ 196 | 12.5000610351562 197 | ] 198 | } 199 | ], 200 | "timing_curves": [] 201 | } 202 | ], 203 | "stroke_line_cap": "butt", 204 | "key_frames": [ 205 | { 206 | "start_frame": 19, 207 | "data": [ 208 | "M951.18,654.82", 209 | "L960.00,663.63", 210 | "L1083.63,540.00", 211 | "L960.00,416.37", 212 | "L954.18,422.18" 213 | ] 214 | }, 215 | { 216 | "start_frame": 31, 217 | "data": [ 218 | "M974.19,545.57", 219 | "L974.62,546.00", 220 | "L980.62,540.00", 221 | "L974.62,534.00", 222 | "L974.34,534.28" 223 | ] 224 | } 225 | ], 226 | "timing_curves": [ 227 | [ 228 | [ 229 | 0.5, 230 | 0 231 | ], 232 | [ 233 | 0.916666666665, 234 | 1 235 | ] 236 | ] 237 | ], 238 | "stroke_color": "#ff1c56c8", 239 | "stroke_width": 90 240 | }, 241 | { 242 | "name": "| - 2", 243 | "animation_group": 1, 244 | "from_frame": 10, 245 | "to_frame": 20, 246 | "feature_animations": [ 247 | { 248 | "property": "ANCHOR_POINT", 249 | "key_values": [ 250 | { 251 | "start_frame": 0, 252 | "data": [ 253 | 960, 254 | 540.000122070312 255 | ] 256 | } 257 | ], 258 | "timing_curves": [] 259 | }, 260 | { 261 | "property": "X_POSITION", 262 | "key_values": [ 263 | { 264 | "start_frame": 0, 265 | "data": [ 266 | 42.5 267 | ] 268 | } 269 | ], 270 | "timing_curves": [] 271 | }, 272 | { 273 | "property": "Y_POSITION", 274 | "key_values": [ 275 | { 276 | "start_frame": 0, 277 | "data": [ 278 | 12.4999389648438 279 | ] 280 | } 281 | ], 282 | "timing_curves": [] 283 | }, 284 | { 285 | "property": "SCALE", 286 | "key_values": [ 287 | { 288 | "start_frame": 0, 289 | "data": [ 290 | -100, 291 | 100 292 | ] 293 | } 294 | ], 295 | "timing_curves": [] 296 | } 297 | ], 298 | "stroke_line_cap": "butt", 299 | "key_frames": [ 300 | { 301 | "start_frame": 10, 302 | "data": [ 303 | "M836.58,704.95", 304 | "L836.52,540.60", 305 | "L836.45,374.68" 306 | ] 307 | }, 308 | { 309 | "start_frame": 16, 310 | "data": [ 311 | "M912.90,693.21", 312 | "L836.37,540.00", 313 | "L912.90,386.57" 314 | ] 315 | }, 316 | { 317 | "start_frame": 20, 318 | "data": [ 319 | "M991.53,695.12", 320 | "L836.31,540.00", 321 | "L991.82,384.99" 322 | ] 323 | } 324 | ], 325 | "timing_curves": [ 326 | [ 327 | [ 328 | 0, 329 | 0 330 | ], 331 | [ 332 | 0.5, 333 | 1 334 | ] 335 | ], 336 | [ 337 | [ 338 | 0.00005, 339 | 0 340 | ], 341 | [ 342 | 0.5, 343 | 1 344 | ] 345 | ] 346 | ], 347 | "stroke_color": "#ff1c56c8", 348 | "stroke_width": 90 349 | }, 350 | { 351 | "name": "| - 1", 352 | "animation_group": 1, 353 | "to_frame": 10, 354 | "feature_animations": [ 355 | { 356 | "property": "ANCHOR_POINT", 357 | "key_values": [ 358 | { 359 | "start_frame": 0, 360 | "data": [ 361 | 960, 362 | 540.000122070312 363 | ] 364 | } 365 | ], 366 | "timing_curves": [] 367 | }, 368 | { 369 | "property": "X_POSITION", 370 | "key_values": [ 371 | { 372 | "start_frame": 0, 373 | "data": [ 374 | 42.5 375 | ] 376 | } 377 | ], 378 | "timing_curves": [] 379 | }, 380 | { 381 | "property": "Y_POSITION", 382 | "key_values": [ 383 | { 384 | "start_frame": 0, 385 | "data": [ 386 | 12.4999389648438 387 | ] 388 | } 389 | ], 390 | "timing_curves": [] 391 | }, 392 | { 393 | "property": "SCALE", 394 | "key_values": [ 395 | { 396 | "start_frame": 0, 397 | "data": [ 398 | -100, 399 | 100 400 | ] 401 | } 402 | ], 403 | "timing_curves": [] 404 | } 405 | ], 406 | "stroke_line_cap": "butt", 407 | "key_frames": [ 408 | { 409 | "start_frame": 0, 410 | "data": [ 411 | "M836.63,704.80", 412 | "L836.51,374.53" 413 | ] 414 | } 415 | ], 416 | "stroke_color": "#ff1c56c8", 417 | "stroke_width": 90 418 | }, 419 | { 420 | "name": "< - 2", 421 | "animation_group": 1, 422 | "from_frame": 11, 423 | "feature_animations": [ 424 | { 425 | "property": "ANCHOR_POINT", 426 | "key_values": [ 427 | { 428 | "start_frame": 0, 429 | "data": [ 430 | 836.367980957031, 431 | 540.000122070312 432 | ] 433 | } 434 | ], 435 | "timing_curves": [] 436 | }, 437 | { 438 | "property": "X_POSITION", 439 | "key_values": [ 440 | { 441 | "start_frame": 19, 442 | "data": [ 443 | -88.1320190429688 444 | ] 445 | }, 446 | { 447 | "start_frame": 31, 448 | "data": [ 449 | -5.5 450 | ] 451 | } 452 | ], 453 | "timing_curves": [ 454 | [ 455 | [ 456 | 1, 457 | 0 458 | ], 459 | [ 460 | 0.8333333333299999, 461 | 0.8333333333299995 462 | ] 463 | ] 464 | ] 465 | }, 466 | { 467 | "property": "Y_POSITION", 468 | "key_values": [ 469 | { 470 | "start_frame": 19, 471 | "data": [ 472 | 12.4999389648438 473 | ] 474 | }, 475 | { 476 | "start_frame": 31, 477 | "data": [ 478 | 12.4999389648438 479 | ] 480 | } 481 | ], 482 | "timing_curves": [ 483 | [ 484 | [ 485 | 1, 486 | 0 487 | ], 488 | [ 489 | 0.8333333333299999, 490 | 0.8333333333299995 491 | ] 492 | ] 493 | ] 494 | } 495 | ], 496 | "stroke_line_cap": "butt", 497 | "key_frames": [ 498 | { 499 | "start_frame": 11, 500 | "data": [ 501 | "M836.38,704.87", 502 | "L836.37,540.00", 503 | "L836.37,374.53" 504 | ] 505 | }, 506 | { 507 | "start_frame": 16, 508 | "data": [ 509 | "M912.90,693.21", 510 | "L836.37,540.00", 511 | "L912.90,386.57" 512 | ] 513 | }, 514 | { 515 | "start_frame": 20, 516 | "data": [ 517 | "M960.00,663.63", 518 | "L836.37,540.00", 519 | "L960.00,416.37" 520 | ] 521 | }, 522 | { 523 | "start_frame": 31, 524 | "data": [ 525 | "M960.00,663.63", 526 | "L836.37,540.00", 527 | "L960.00,416.37" 528 | ] 529 | }, 530 | { 531 | "start_frame": 40, 532 | "data": [ 533 | "M977.14,673.79", 534 | "L843.35,540.00", 535 | "L977.14,406.21" 536 | ] 537 | }, 538 | { 539 | "start_frame": 51, 540 | "data": [ 541 | "M966.75,663.63", 542 | "L843.12,540.00", 543 | "L966.75,416.37" 544 | ] 545 | } 546 | ], 547 | "timing_curves": [ 548 | [ 549 | [ 550 | 0.5, 551 | 0 552 | ], 553 | [ 554 | 0.916666666665, 555 | 1 556 | ] 557 | ], 558 | [ 559 | [ 560 | 0.08333333333500001, 561 | 0 562 | ], 563 | [ 564 | 0.5, 565 | 1 566 | ] 567 | ], 568 | [ 569 | [ 570 | 0.5, 571 | 0 572 | ], 573 | [ 574 | 0.916666666665, 575 | 1 576 | ] 577 | ], 578 | [ 579 | [ 580 | 0.08333333333500001, 581 | 0 582 | ], 583 | [ 584 | 0.51, 585 | 1 586 | ] 587 | ], 588 | [ 589 | [ 590 | 0.49, 591 | 0 592 | ], 593 | [ 594 | 0.916666666665, 595 | 1 596 | ] 597 | ] 598 | ], 599 | "stroke_color": "#ffffffff", 600 | "stroke_width": 90 601 | }, 602 | { 603 | "name": "< - 1", 604 | "animation_group": 1, 605 | "to_frame": 11, 606 | "feature_animations": [ 607 | { 608 | "property": "ANCHOR_POINT", 609 | "key_values": [ 610 | { 611 | "start_frame": 0, 612 | "data": [ 613 | 836.367980957031, 614 | 540.000122070312 615 | ] 616 | } 617 | ], 618 | "timing_curves": [] 619 | }, 620 | { 621 | "property": "X_POSITION", 622 | "key_values": [ 623 | { 624 | "start_frame": 0, 625 | "data": [ 626 | -81.1320190429688 627 | ] 628 | } 629 | ], 630 | "timing_curves": [] 631 | }, 632 | { 633 | "property": "Y_POSITION", 634 | "key_values": [ 635 | { 636 | "start_frame": 0, 637 | "data": [ 638 | 12.4999389648438 639 | ] 640 | } 641 | ], 642 | "timing_curves": [] 643 | } 644 | ], 645 | "stroke_line_cap": "butt", 646 | "key_frames": [ 647 | { 648 | "start_frame": 0, 649 | "data": [ 650 | "M1086.48,704.87", 651 | "Q1086.46,583.67,1085.49,540.00", 652 | "Q1084.50,478.31,1084.49,374.03" 653 | ] 654 | }, 655 | { 656 | "start_frame": 7, 657 | "data": [ 658 | "M836.38,704.87", 659 | "Q838.77,583.67,959.76,540.00", 660 | "Q1082.77,478.31,1083.68,374.03" 661 | ] 662 | }, 663 | { 664 | "start_frame": 11, 665 | "data": [ 666 | "M836.16,705.07", 667 | "Q836.16,581.20,836.16,539.91", 668 | "Q836.16,498.61,836.15,374.74" 669 | ] 670 | } 671 | ], 672 | "timing_curves": [ 673 | [ 674 | [ 675 | 0.5, 676 | 0 677 | ], 678 | [ 679 | 0.916666666665, 680 | 1 681 | ] 682 | ], 683 | [ 684 | [ 685 | 0.08333333333500001, 686 | 0 687 | ], 688 | [ 689 | 1, 690 | 1 691 | ] 692 | ] 693 | ], 694 | "stroke_color": "#ffffffff", 695 | "stroke_width": 90 696 | } 697 | ], 698 | "animation_groups": [ 699 | { 700 | "group_id": 1, 701 | "group_name": "Parent 1", 702 | "animations": [ 703 | { 704 | "property": "ANCHOR_POINT", 705 | "key_values": [ 706 | { 707 | "start_frame": 0, 708 | "data": [ 709 | 12.5, 710 | 12.5 711 | ] 712 | } 713 | ], 714 | "timing_curves": [] 715 | }, 716 | { 717 | "property": "X_POSITION", 718 | "key_values": [ 719 | { 720 | "start_frame": 15, 721 | "data": [ 722 | 277.5 723 | ] 724 | }, 725 | { 726 | "start_frame": 56, 727 | "data": [ 728 | 284.5 729 | ] 730 | } 731 | ], 732 | "timing_curves": [ 733 | [ 734 | [ 735 | 0.16666666667000002, 736 | 0.16666666666999982 737 | ], 738 | [ 739 | 0.020000000000000018, 740 | 1 741 | ] 742 | ] 743 | ] 744 | }, 745 | { 746 | "property": "Y_POSITION", 747 | "key_values": [ 748 | { 749 | "start_frame": 15, 750 | "data": [ 751 | 307.500183105469 752 | ] 753 | }, 754 | { 755 | "start_frame": 56, 756 | "data": [ 757 | 307.500183105469 758 | ] 759 | } 760 | ], 761 | "timing_curves": [ 762 | [ 763 | [ 764 | 0.16666666667000002, 765 | 0.16666666666999982 766 | ], 767 | [ 768 | 0.020000000000000018, 769 | 1 770 | ] 771 | ] 772 | ] 773 | } 774 | ] 775 | } 776 | ] 777 | } 778 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import React, {Component, PropTypes} from 'react' 2 | import { View, requireNativeComponent } from 'react-native' 3 | 4 | export default class KeyframesView extends Component { 5 | render() { 6 | return ( 7 | 8 | ) 9 | } 10 | } 11 | 12 | KeyframesView.propTypes = { 13 | src: PropTypes.object, 14 | seek: PropTypes.number, 15 | paused: PropTypes.bool, 16 | ...View.propTypes, 17 | } 18 | 19 | const RNKeyframesView = requireNativeComponent('RNKeyframesView', KeyframesView) 20 | -------------------------------------------------------------------------------- /ios/RNFacebookKeyframes.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F04B493C1DF75227008C04D3 /* RNKeyframesView.m in Sources */ = {isa = PBXBuildFile; fileRef = F04B49391DF75227008C04D3 /* RNKeyframesView.m */; }; 11 | F04B493D1DF75227008C04D3 /* RNKeyframesViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F04B493B1DF75227008C04D3 /* RNKeyframesViewManager.m */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXCopyFilesBuildPhase section */ 15 | 58B511D91A9E6C8500147676 /* CopyFiles */ = { 16 | isa = PBXCopyFilesBuildPhase; 17 | buildActionMask = 2147483647; 18 | dstPath = "include/$(PRODUCT_NAME)"; 19 | dstSubfolderSpec = 16; 20 | files = ( 21 | ); 22 | runOnlyForDeploymentPostprocessing = 0; 23 | }; 24 | /* End PBXCopyFilesBuildPhase section */ 25 | 26 | /* Begin PBXFileReference section */ 27 | 134814201AA4EA6300B7C361 /* libRNFacebookKeyframes.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNFacebookKeyframes.a; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | F04B49381DF75227008C04D3 /* RNKeyframesView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNKeyframesView.h; sourceTree = ""; }; 29 | F04B49391DF75227008C04D3 /* RNKeyframesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNKeyframesView.m; sourceTree = ""; }; 30 | F04B493A1DF75227008C04D3 /* RNKeyframesViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNKeyframesViewManager.h; sourceTree = ""; }; 31 | F04B493B1DF75227008C04D3 /* RNKeyframesViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNKeyframesViewManager.m; sourceTree = ""; }; 32 | /* End PBXFileReference section */ 33 | 34 | /* Begin PBXFrameworksBuildPhase section */ 35 | 58B511D81A9E6C8500147676 /* Frameworks */ = { 36 | isa = PBXFrameworksBuildPhase; 37 | buildActionMask = 2147483647; 38 | files = ( 39 | ); 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXFrameworksBuildPhase section */ 43 | 44 | /* Begin PBXGroup section */ 45 | 134814211AA4EA7D00B7C361 /* Products */ = { 46 | isa = PBXGroup; 47 | children = ( 48 | 134814201AA4EA6300B7C361 /* libRNFacebookKeyframes.a */, 49 | ); 50 | name = Products; 51 | sourceTree = ""; 52 | }; 53 | 58B511D21A9E6C8500147676 = { 54 | isa = PBXGroup; 55 | children = ( 56 | F04B49381DF75227008C04D3 /* RNKeyframesView.h */, 57 | F04B49391DF75227008C04D3 /* RNKeyframesView.m */, 58 | F04B493A1DF75227008C04D3 /* RNKeyframesViewManager.h */, 59 | F04B493B1DF75227008C04D3 /* RNKeyframesViewManager.m */, 60 | 134814211AA4EA7D00B7C361 /* Products */, 61 | ); 62 | sourceTree = ""; 63 | }; 64 | /* End PBXGroup section */ 65 | 66 | /* Begin PBXNativeTarget section */ 67 | 58B511DA1A9E6C8500147676 /* RNFacebookKeyframes */ = { 68 | isa = PBXNativeTarget; 69 | buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNFacebookKeyframes" */; 70 | buildPhases = ( 71 | 58B511D71A9E6C8500147676 /* Sources */, 72 | 58B511D81A9E6C8500147676 /* Frameworks */, 73 | 58B511D91A9E6C8500147676 /* CopyFiles */, 74 | ); 75 | buildRules = ( 76 | ); 77 | dependencies = ( 78 | ); 79 | name = RNFacebookKeyframes; 80 | productName = RCTDataManager; 81 | productReference = 134814201AA4EA6300B7C361 /* libRNFacebookKeyframes.a */; 82 | productType = "com.apple.product-type.library.static"; 83 | }; 84 | /* End PBXNativeTarget section */ 85 | 86 | /* Begin PBXProject section */ 87 | 58B511D31A9E6C8500147676 /* Project object */ = { 88 | isa = PBXProject; 89 | attributes = { 90 | LastUpgradeCheck = 0610; 91 | ORGANIZATIONNAME = Facebook; 92 | TargetAttributes = { 93 | 58B511DA1A9E6C8500147676 = { 94 | CreatedOnToolsVersion = 6.1.1; 95 | }; 96 | }; 97 | }; 98 | buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNFacebookKeyframes" */; 99 | compatibilityVersion = "Xcode 3.2"; 100 | developmentRegion = English; 101 | hasScannedForEncodings = 0; 102 | knownRegions = ( 103 | en, 104 | ); 105 | mainGroup = 58B511D21A9E6C8500147676; 106 | productRefGroup = 58B511D21A9E6C8500147676; 107 | projectDirPath = ""; 108 | projectRoot = ""; 109 | targets = ( 110 | 58B511DA1A9E6C8500147676 /* RNFacebookKeyframes */, 111 | ); 112 | }; 113 | /* End PBXProject section */ 114 | 115 | /* Begin PBXSourcesBuildPhase section */ 116 | 58B511D71A9E6C8500147676 /* Sources */ = { 117 | isa = PBXSourcesBuildPhase; 118 | buildActionMask = 2147483647; 119 | files = ( 120 | F04B493D1DF75227008C04D3 /* RNKeyframesViewManager.m in Sources */, 121 | F04B493C1DF75227008C04D3 /* RNKeyframesView.m in Sources */, 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | /* End PBXSourcesBuildPhase section */ 126 | 127 | /* Begin XCBuildConfiguration section */ 128 | 58B511ED1A9E6C8500147676 /* Debug */ = { 129 | isa = XCBuildConfiguration; 130 | buildSettings = { 131 | ALWAYS_SEARCH_USER_PATHS = NO; 132 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 133 | CLANG_CXX_LIBRARY = "libc++"; 134 | CLANG_ENABLE_MODULES = YES; 135 | CLANG_ENABLE_OBJC_ARC = YES; 136 | CLANG_WARN_BOOL_CONVERSION = YES; 137 | CLANG_WARN_CONSTANT_CONVERSION = YES; 138 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 139 | CLANG_WARN_EMPTY_BODY = YES; 140 | CLANG_WARN_ENUM_CONVERSION = YES; 141 | CLANG_WARN_INT_CONVERSION = YES; 142 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 143 | CLANG_WARN_UNREACHABLE_CODE = YES; 144 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 145 | COPY_PHASE_STRIP = NO; 146 | ENABLE_STRICT_OBJC_MSGSEND = YES; 147 | GCC_C_LANGUAGE_STANDARD = gnu99; 148 | GCC_DYNAMIC_NO_PIC = NO; 149 | GCC_OPTIMIZATION_LEVEL = 0; 150 | GCC_PREPROCESSOR_DEFINITIONS = ( 151 | "DEBUG=1", 152 | "$(inherited)", 153 | ); 154 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 155 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 156 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 157 | GCC_WARN_UNDECLARED_SELECTOR = YES; 158 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 159 | GCC_WARN_UNUSED_FUNCTION = YES; 160 | GCC_WARN_UNUSED_VARIABLE = YES; 161 | HEADER_SEARCH_PATHS = ( 162 | "$(SRCROOT)/../node_modules/react-native/React/**", 163 | "$(SRCROOT)/../../react-native/React/**", 164 | "$(SRCROOT)/../demo/KeyframesDemo/node_modules/react-native/React/**", 165 | "${SRCROOT}/../../../ios/Pods/Headers/Public/**", 166 | "${SRCROOT}/../../../ios/Pods/Headers/Public/RNFacebookKeyframes/**", 167 | ); 168 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 169 | MTL_ENABLE_DEBUG_INFO = YES; 170 | ONLY_ACTIVE_ARCH = YES; 171 | SDKROOT = iphoneos; 172 | }; 173 | name = Debug; 174 | }; 175 | 58B511EE1A9E6C8500147676 /* Release */ = { 176 | isa = XCBuildConfiguration; 177 | buildSettings = { 178 | ALWAYS_SEARCH_USER_PATHS = NO; 179 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 180 | CLANG_CXX_LIBRARY = "libc++"; 181 | CLANG_ENABLE_MODULES = YES; 182 | CLANG_ENABLE_OBJC_ARC = YES; 183 | CLANG_WARN_BOOL_CONVERSION = YES; 184 | CLANG_WARN_CONSTANT_CONVERSION = YES; 185 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 186 | CLANG_WARN_EMPTY_BODY = YES; 187 | CLANG_WARN_ENUM_CONVERSION = YES; 188 | CLANG_WARN_INT_CONVERSION = YES; 189 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 190 | CLANG_WARN_UNREACHABLE_CODE = YES; 191 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 192 | COPY_PHASE_STRIP = YES; 193 | ENABLE_NS_ASSERTIONS = NO; 194 | ENABLE_STRICT_OBJC_MSGSEND = YES; 195 | GCC_C_LANGUAGE_STANDARD = gnu99; 196 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 197 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 198 | GCC_WARN_UNDECLARED_SELECTOR = YES; 199 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 200 | GCC_WARN_UNUSED_FUNCTION = YES; 201 | GCC_WARN_UNUSED_VARIABLE = YES; 202 | HEADER_SEARCH_PATHS = ( 203 | "$(SRCROOT)/../node_modules/react-native/React/**", 204 | "$(SRCROOT)/../../react-native/React/**", 205 | "$(SRCROOT)/../demo/KeyframesDemo/node_modules/react-native/React/**", 206 | "${SRCROOT}/../../../ios/Pods/Headers/Public/**", 207 | "${SRCROOT}/../../../ios/Pods/Headers/Public/RNFacebookKeyframes/**", 208 | ); 209 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 210 | MTL_ENABLE_DEBUG_INFO = NO; 211 | SDKROOT = iphoneos; 212 | VALIDATE_PRODUCT = YES; 213 | }; 214 | name = Release; 215 | }; 216 | 58B511F01A9E6C8500147676 /* Debug */ = { 217 | isa = XCBuildConfiguration; 218 | buildSettings = { 219 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 220 | OTHER_LDFLAGS = "-ObjC"; 221 | PRODUCT_NAME = RNFacebookKeyframes; 222 | SKIP_INSTALL = YES; 223 | }; 224 | name = Debug; 225 | }; 226 | 58B511F11A9E6C8500147676 /* Release */ = { 227 | isa = XCBuildConfiguration; 228 | buildSettings = { 229 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 230 | OTHER_LDFLAGS = "-ObjC"; 231 | PRODUCT_NAME = RNFacebookKeyframes; 232 | SKIP_INSTALL = YES; 233 | }; 234 | name = Release; 235 | }; 236 | /* End XCBuildConfiguration section */ 237 | 238 | /* Begin XCConfigurationList section */ 239 | 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNFacebookKeyframes" */ = { 240 | isa = XCConfigurationList; 241 | buildConfigurations = ( 242 | 58B511ED1A9E6C8500147676 /* Debug */, 243 | 58B511EE1A9E6C8500147676 /* Release */, 244 | ); 245 | defaultConfigurationIsVisible = 0; 246 | defaultConfigurationName = Release; 247 | }; 248 | 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNFacebookKeyframes" */ = { 249 | isa = XCConfigurationList; 250 | buildConfigurations = ( 251 | 58B511F01A9E6C8500147676 /* Debug */, 252 | 58B511F11A9E6C8500147676 /* Release */, 253 | ); 254 | defaultConfigurationIsVisible = 0; 255 | defaultConfigurationName = Release; 256 | }; 257 | /* End XCConfigurationList section */ 258 | }; 259 | rootObject = 58B511D31A9E6C8500147676 /* Project object */; 260 | } 261 | -------------------------------------------------------------------------------- /ios/RNKeyframesView.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | 5 | @interface RNKeyframesView : RCTView 6 | @property (nonatomic, copy) NSDictionary *src; 7 | @property (nonatomic, assign) BOOL *paused; 8 | @property (nonatomic, readonly) NSNumber *seek; 9 | @end 10 | -------------------------------------------------------------------------------- /ios/RNKeyframesView.m: -------------------------------------------------------------------------------- 1 | #import "RNKeyframesView.h" 2 | #import 3 | #import 4 | #import 5 | 6 | #import 7 | #import 8 | #import 9 | 10 | @implementation RNKeyframesView { 11 | KFVectorLayer *_vectorLayer; 12 | } 13 | 14 | - (KFVector *)loadVectorFromDictionary 15 | { 16 | static KFVector *vector; 17 | static dispatch_once_t onceToken; 18 | dispatch_once(&onceToken, ^{ 19 | vector = KFVectorFromDictionary(_src); 20 | }); 21 | 22 | return vector; 23 | } 24 | 25 | 26 | - (instancetype)init 27 | { 28 | self = [super init]; 29 | return self; 30 | } 31 | 32 | #pragma mark - React View Management 33 | 34 | 35 | - (void)insertReactSubview:(UIView *)view atIndex:(NSInteger)atIndex 36 | { 37 | RCTLogError(@"Keyframes cannot have any subviews"); 38 | return; 39 | } 40 | - (void)removeReactSubview:(UIView *)subview 41 | { 42 | RCTLogError(@"Keyframes cannot have any subviews"); 43 | return; 44 | } 45 | 46 | - (void)layoutSubviews 47 | { 48 | [super layoutSubviews]; 49 | 50 | KFVector *vector = [self loadVectorFromDictionary]; 51 | 52 | _vectorLayer = [KFVectorLayer new]; 53 | const CGFloat shortSide = MIN(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); 54 | const CGFloat longSide = MAX(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); 55 | _vectorLayer.frame = CGRectMake(shortSide / 4, longSide / 2 - shortSide / 4, shortSide / 2, shortSide / 2); 56 | _vectorLayer.faceModel = vector; 57 | [self.layer addSublayer:_vectorLayer]; 58 | } 59 | 60 | - (void)setSrc:(NSString *)src 61 | { 62 | if (![src isEqual:_src]) { 63 | _src = [src copy]; 64 | } 65 | } 66 | - (void)setPaused:(BOOL *)paused 67 | { 68 | if(paused != _paused) { 69 | _paused = paused; 70 | if(_paused) { 71 | [_vectorLayer pauseAnimation]; 72 | } else { 73 | [_vectorLayer resumeAnimation]; 74 | } 75 | } 76 | } 77 | 78 | - (void)setSeek:(NSNumber *)seek 79 | { 80 | if (![seek isEqual:_seek]) { 81 | _seek = seek; 82 | [_vectorLayer seekToProgress:[seek floatValue]]; 83 | } 84 | } 85 | 86 | @end 87 | -------------------------------------------------------------------------------- /ios/RNKeyframesViewManager.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface RNKeyframesViewManager : RCTViewManager 4 | 5 | @end 6 | -------------------------------------------------------------------------------- /ios/RNKeyframesViewManager.m: -------------------------------------------------------------------------------- 1 | #import "RNKeyframesViewManager.h" 2 | #import "RNKeyframesView.h" 3 | #import 4 | 5 | @implementation RNKeyframesViewManager 6 | 7 | RCT_EXPORT_MODULE(); 8 | 9 | @synthesize bridge = _bridge; 10 | 11 | - (UIView *)view 12 | { 13 | return [[RNKeyframesView alloc] init]; 14 | } 15 | 16 | RCT_EXPORT_VIEW_PROPERTY(src, NSDictionary); 17 | RCT_EXPORT_VIEW_PROPERTY(paused, BOOL); 18 | RCT_EXPORT_VIEW_PROPERTY(seek, NSNumber); 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-facebook-keyframes", 3 | "version": "1.0.1", 4 | "description": "A React Native wrapper for Facebook Keyframes library", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "lint": "eslint index.*.js src || (npm run lint-warning --silent && exit 1 &> /dev/null)" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/underscopeio/react-native-facebook-keyframes.git" 13 | }, 14 | "keywords": [ 15 | "react", 16 | "react-native", 17 | "facebook", 18 | "keyframes", 19 | "animations" 20 | ], 21 | "author": "Underscope", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/underscopeio/react-native-facebook-keyframes/issues" 25 | }, 26 | "peerDependencies": { 27 | "react": ">=15.3.1", 28 | "react-native": ">=0.40" 29 | }, 30 | "devDependencies": { 31 | "babel-eslint": "7.1.1", 32 | "eslint": "3.11.1", 33 | "eslint-plugin-babel": "4.0.0", 34 | "eslint-plugin-react": "6.8.0", 35 | "eslint-plugin-react-native": "2.2.0" 36 | }, 37 | "homepage": "https://github.com/underscopeio/react-native-facebook-keyframes#readme" 38 | } 39 | --------------------------------------------------------------------------------