├── GSAPDemo
├── .flowconfig
├── .gitignore
├── .npmignore
├── GSAPDemo.js
├── GSAPDemo.xcodeproj
│ ├── project.pbxproj
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── GSAPDemo.xcscheme
├── GSAPDemoTests
│ ├── GSAPDemoTests.m
│ └── Info.plist
├── iOS
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Base.lproj
│ │ └── LaunchScreen.xib
│ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── react.imageset
│ │ │ ├── Contents.json
│ │ │ ├── react-1.png
│ │ │ ├── react-2.png
│ │ │ └── react.png
│ ├── Info.plist
│ ├── main.jsbundle
│ └── main.m
├── index.ios.js
└── package.json
├── README.md
└── gif
└── react-native-gsap.gif
/GSAPDemo/.flowconfig:
--------------------------------------------------------------------------------
1 | [ignore]
2 |
3 | # We fork some components by platform.
4 | .*/*.web.js
5 | .*/*.android.js
6 |
7 | # Some modules have their own node_modules with overlap
8 | .*/node_modules/node-haste/.*
9 |
10 | # Ignore react-tools where there are overlaps, but don't ignore anything that
11 | # react-native relies on
12 | .*/node_modules/react-tools/src/vendor/core/ExecutionEnvironment.js
13 | .*/node_modules/react-tools/src/browser/eventPlugins/ResponderEventPlugin.js
14 | .*/node_modules/react-tools/src/browser/ui/React.js
15 | .*/node_modules/react-tools/src/core/ReactInstanceHandles.js
16 | .*/node_modules/react-tools/src/event/EventPropagators.js
17 |
18 | # Ignore commoner tests
19 | .*/node_modules/react-tools/node_modules/commoner/test/.*
20 |
21 | # See https://github.com/facebook/flow/issues/442
22 | .*/react-tools/node_modules/commoner/lib/reader.js
23 |
24 | # Ignore jest
25 | .*/react-native/node_modules/jest-cli/.*
26 |
27 | [include]
28 |
29 | [libs]
30 | node_modules/react-native/Libraries/react-native/react-native-interface.js
31 |
32 | [options]
33 | module.system=haste
34 |
35 | [version]
36 | 0.11.0
37 |
--------------------------------------------------------------------------------
/GSAPDemo/.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 | # node.js
26 | #
27 | node_modules/
28 | npm-debug.log
29 |
--------------------------------------------------------------------------------
/GSAPDemo/.npmignore:
--------------------------------------------------------------------------------
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 |
24 | # node.js
25 | #
26 | node_modules/
27 | npm-debug.log
28 |
--------------------------------------------------------------------------------
/GSAPDemo/GSAPDemo.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var React = require('react-native');
4 | var {
5 | AppRegistry,
6 | StyleSheet,
7 | Text,
8 | Image,
9 | View,
10 | } = React;
11 |
12 |
13 | var TweenableImage = React.createClass({
14 |
15 | getInitialState: function() {
16 | return {
17 | top: 150,
18 | left: 20,
19 | opacity: 0,
20 | rotation: 0
21 | };
22 | },
23 |
24 | getTween: function(property, finalValue, duration, options) {
25 | if (!options) {
26 | options = {};
27 | }
28 | var finalState = {};
29 | finalState[property] = finalValue;
30 | return TweenMax.to(this, duration, Object.assign({}, { state: finalState }, options));
31 | },
32 |
33 | render: function() {
34 | var animatableStyles = {
35 | top: this.state.top,
36 | left: this.state.left,
37 | opacity: this.state.opacity,
38 | transform: [{
39 | rotate: `${this.state.rotation}deg`
40 | }]
41 | };
42 |
43 | return (
44 |
45 |
46 |
47 | );
48 | }
49 | });
50 |
51 | var GSAPDemo = React.createClass({
52 |
53 | componentDidMount: function() {
54 | setTimeout(() => {
55 | this.startAnimation();
56 | }, 500);
57 | },
58 |
59 | startAnimation: function() {
60 |
61 | var timeline = new TimelineMax({
62 | repeat: -1
63 | });
64 |
65 | timeline.add(this.refs.image1.getTween('opacity', 1, 3));
66 |
67 | timeline.add(this.refs.image1.getTween('top', '+=100', 2.5, { easing: Power4.easeIn }));
68 |
69 | timeline.add(this.refs.image1.getTween('opacity', .5, 1));
70 |
71 | timeline.add(this.refs.image1.getTween('left', '+=75', .5, { easing: Expo.easeInOut }));
72 |
73 | timeline.add(this.refs.image1.getTween('rotation', 360, 1, { easing: Power2.easeInOut }));
74 |
75 | timeline.add(this.refs.image1.getTween('left', '+=75', .5, { easing: Expo.easeInOut }));
76 |
77 | timeline.add(this.refs.image1.getTween('top', '-=100', 2.5, { easing: Expo.easeInOut }));
78 |
79 | timeline.add([
80 | this.refs.image1.getTween('left', '-=150', 1.5, { easing: Expo.easeInOut }),
81 | this.refs.image1.getTween('opacity', 0, 1.5, { easing: Expo.easeInOut })
82 | ], '+=0', 'start');
83 | },
84 |
85 | render: function() {
86 | return (
87 |
88 |
89 |
90 | );
91 | }
92 | });
93 |
94 | var styles = StyleSheet.create({
95 | container: {
96 | flex: 1,
97 | justifyContent: 'center',
98 | alignItems: 'center',
99 | backgroundColor: '#F5FCFF'
100 | }
101 | });
102 |
103 | module.exports = GSAPDemo;
104 |
--------------------------------------------------------------------------------
/GSAPDemo/GSAPDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */ = {isa = PBXBuildFile; fileRef = 008F07F21AC5B25A0029DE68 /* main.jsbundle */; };
11 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
12 | 00C302E61ABCBA2D00DB3ED1 /* libRCTAdSupport.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */; };
13 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
14 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
15 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
16 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
17 | 00E356F31AD99517003FC87E /* GSAPDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* GSAPDemoTests.m */; };
18 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
19 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
20 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
21 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
22 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
23 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
24 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
25 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
26 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
27 | /* End PBXBuildFile section */
28 |
29 | /* Begin PBXContainerItemProxy section */
30 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
31 | isa = PBXContainerItemProxy;
32 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
33 | proxyType = 2;
34 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
35 | remoteInfo = RCTActionSheet;
36 | };
37 | 00C302B31ABCB8E700DB3ED1 /* PBXContainerItemProxy */ = {
38 | isa = PBXContainerItemProxy;
39 | containerPortal = 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */;
40 | proxyType = 2;
41 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
42 | remoteInfo = RCTAdSupport;
43 | };
44 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
45 | isa = PBXContainerItemProxy;
46 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
47 | proxyType = 2;
48 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
49 | remoteInfo = RCTGeolocation;
50 | };
51 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
52 | isa = PBXContainerItemProxy;
53 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
54 | proxyType = 2;
55 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
56 | remoteInfo = RCTImage;
57 | };
58 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
59 | isa = PBXContainerItemProxy;
60 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
61 | proxyType = 2;
62 | remoteGlobalIDString = 58B511DB1A9E6C8500147676;
63 | remoteInfo = RCTNetwork;
64 | };
65 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
66 | isa = PBXContainerItemProxy;
67 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
68 | proxyType = 2;
69 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
70 | remoteInfo = RCTVibration;
71 | };
72 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
73 | isa = PBXContainerItemProxy;
74 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
75 | proxyType = 1;
76 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
77 | remoteInfo = GSAPDemo;
78 | };
79 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
80 | isa = PBXContainerItemProxy;
81 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
82 | proxyType = 2;
83 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
84 | remoteInfo = RCTSettings;
85 | };
86 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
87 | isa = PBXContainerItemProxy;
88 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
89 | proxyType = 2;
90 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
91 | remoteInfo = RCTWebSocket;
92 | };
93 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
94 | isa = PBXContainerItemProxy;
95 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
96 | proxyType = 2;
97 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
98 | remoteInfo = React;
99 | };
100 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
101 | isa = PBXContainerItemProxy;
102 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
103 | proxyType = 2;
104 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
105 | remoteInfo = RCTLinking;
106 | };
107 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
108 | isa = PBXContainerItemProxy;
109 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
110 | proxyType = 2;
111 | remoteGlobalIDString = 58B5119B1A9E6C1200147676;
112 | remoteInfo = RCTText;
113 | };
114 | /* End PBXContainerItemProxy section */
115 |
116 | /* Begin PBXFileReference section */
117 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = iOS/main.jsbundle; sourceTree = ""; };
118 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj; sourceTree = ""; };
119 | 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAdSupport.xcodeproj; path = node_modules/react-native/Libraries/AdSupport/RCTAdSupport.xcodeproj; sourceTree = ""; };
120 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj; sourceTree = ""; };
121 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = node_modules/react-native/Libraries/Image/RCTImage.xcodeproj; sourceTree = ""; };
122 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj; sourceTree = ""; };
123 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj; sourceTree = ""; };
124 | 00E356EE1AD99517003FC87E /* GSAPDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GSAPDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
125 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
126 | 00E356F21AD99517003FC87E /* GSAPDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GSAPDemoTests.m; sourceTree = ""; };
127 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj; sourceTree = ""; };
128 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj; sourceTree = ""; };
129 | 13B07F961A680F5B00A75B9A /* GSAPDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GSAPDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
130 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = iOS/AppDelegate.h; sourceTree = ""; };
131 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = iOS/AppDelegate.m; sourceTree = ""; };
132 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
133 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOS/Images.xcassets; sourceTree = ""; };
134 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iOS/Info.plist; sourceTree = ""; };
135 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iOS/main.m; sourceTree = ""; };
136 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = node_modules/react-native/React/React.xcodeproj; sourceTree = ""; };
137 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj; sourceTree = ""; };
138 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = node_modules/react-native/Libraries/Text/RCTText.xcodeproj; sourceTree = ""; };
139 | /* End PBXFileReference section */
140 |
141 | /* Begin PBXFrameworksBuildPhase section */
142 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
143 | isa = PBXFrameworksBuildPhase;
144 | buildActionMask = 2147483647;
145 | files = (
146 | );
147 | runOnlyForDeploymentPostprocessing = 0;
148 | };
149 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
150 | isa = PBXFrameworksBuildPhase;
151 | buildActionMask = 2147483647;
152 | files = (
153 | 146834051AC3E58100842450 /* libReact.a in Frameworks */,
154 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
155 | 00C302E61ABCBA2D00DB3ED1 /* libRCTAdSupport.a in Frameworks */,
156 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
157 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
158 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
159 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
160 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
161 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
162 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
163 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
164 | );
165 | runOnlyForDeploymentPostprocessing = 0;
166 | };
167 | /* End PBXFrameworksBuildPhase section */
168 |
169 | /* Begin PBXGroup section */
170 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = {
171 | isa = PBXGroup;
172 | children = (
173 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
174 | );
175 | name = Products;
176 | sourceTree = "";
177 | };
178 | 00C302B01ABCB8E700DB3ED1 /* Products */ = {
179 | isa = PBXGroup;
180 | children = (
181 | 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */,
182 | );
183 | name = Products;
184 | sourceTree = "";
185 | };
186 | 00C302B61ABCB90400DB3ED1 /* Products */ = {
187 | isa = PBXGroup;
188 | children = (
189 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
190 | );
191 | name = Products;
192 | sourceTree = "";
193 | };
194 | 00C302BC1ABCB91800DB3ED1 /* Products */ = {
195 | isa = PBXGroup;
196 | children = (
197 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
198 | );
199 | name = Products;
200 | sourceTree = "";
201 | };
202 | 00C302D41ABCB9D200DB3ED1 /* Products */ = {
203 | isa = PBXGroup;
204 | children = (
205 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
206 | );
207 | name = Products;
208 | sourceTree = "";
209 | };
210 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = {
211 | isa = PBXGroup;
212 | children = (
213 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
214 | );
215 | name = Products;
216 | sourceTree = "";
217 | };
218 | 00E356EF1AD99517003FC87E /* GSAPDemoTests */ = {
219 | isa = PBXGroup;
220 | children = (
221 | 00E356F21AD99517003FC87E /* GSAPDemoTests.m */,
222 | 00E356F01AD99517003FC87E /* Supporting Files */,
223 | );
224 | path = GSAPDemoTests;
225 | sourceTree = "";
226 | };
227 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
228 | isa = PBXGroup;
229 | children = (
230 | 00E356F11AD99517003FC87E /* Info.plist */,
231 | );
232 | name = "Supporting Files";
233 | sourceTree = "";
234 | };
235 | 139105B71AF99BAD00B5F7CC /* Products */ = {
236 | isa = PBXGroup;
237 | children = (
238 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
239 | );
240 | name = Products;
241 | sourceTree = "";
242 | };
243 | 139FDEE71B06529A00C62182 /* Products */ = {
244 | isa = PBXGroup;
245 | children = (
246 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
247 | );
248 | name = Products;
249 | sourceTree = "";
250 | };
251 | 13B07FAE1A68108700A75B9A /* GSAPDemo */ = {
252 | isa = PBXGroup;
253 | children = (
254 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
255 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
256 | 13B07FB01A68108700A75B9A /* AppDelegate.m */,
257 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
258 | 13B07FB61A68108700A75B9A /* Info.plist */,
259 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
260 | 13B07FB71A68108700A75B9A /* main.m */,
261 | );
262 | name = GSAPDemo;
263 | sourceTree = "";
264 | };
265 | 146834001AC3E56700842450 /* Products */ = {
266 | isa = PBXGroup;
267 | children = (
268 | 146834041AC3E56700842450 /* libReact.a */,
269 | );
270 | name = Products;
271 | sourceTree = "";
272 | };
273 | 78C398B11ACF4ADC00677621 /* Products */ = {
274 | isa = PBXGroup;
275 | children = (
276 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
277 | );
278 | name = Products;
279 | sourceTree = "";
280 | };
281 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
282 | isa = PBXGroup;
283 | children = (
284 | 146833FF1AC3E56700842450 /* React.xcodeproj */,
285 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
286 | 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */,
287 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
288 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
289 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
290 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
291 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
292 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
293 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
294 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
295 | );
296 | name = Libraries;
297 | sourceTree = "";
298 | };
299 | 832341B11AAA6A8300B99B32 /* Products */ = {
300 | isa = PBXGroup;
301 | children = (
302 | 832341B51AAA6A8300B99B32 /* libRCTText.a */,
303 | );
304 | name = Products;
305 | sourceTree = "";
306 | };
307 | 83CBB9F61A601CBA00E9B192 = {
308 | isa = PBXGroup;
309 | children = (
310 | 13B07FAE1A68108700A75B9A /* GSAPDemo */,
311 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
312 | 00E356EF1AD99517003FC87E /* GSAPDemoTests */,
313 | 83CBBA001A601CBA00E9B192 /* Products */,
314 | );
315 | indentWidth = 2;
316 | sourceTree = "";
317 | tabWidth = 2;
318 | };
319 | 83CBBA001A601CBA00E9B192 /* Products */ = {
320 | isa = PBXGroup;
321 | children = (
322 | 13B07F961A680F5B00A75B9A /* GSAPDemo.app */,
323 | 00E356EE1AD99517003FC87E /* GSAPDemoTests.xctest */,
324 | );
325 | name = Products;
326 | sourceTree = "";
327 | };
328 | /* End PBXGroup section */
329 |
330 | /* Begin PBXNativeTarget section */
331 | 00E356ED1AD99517003FC87E /* GSAPDemoTests */ = {
332 | isa = PBXNativeTarget;
333 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "GSAPDemoTests" */;
334 | buildPhases = (
335 | 00E356EA1AD99517003FC87E /* Sources */,
336 | 00E356EB1AD99517003FC87E /* Frameworks */,
337 | 00E356EC1AD99517003FC87E /* Resources */,
338 | );
339 | buildRules = (
340 | );
341 | dependencies = (
342 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
343 | );
344 | name = GSAPDemoTests;
345 | productName = GSAPDemoTests;
346 | productReference = 00E356EE1AD99517003FC87E /* GSAPDemoTests.xctest */;
347 | productType = "com.apple.product-type.bundle.unit-test";
348 | };
349 | 13B07F861A680F5B00A75B9A /* GSAPDemo */ = {
350 | isa = PBXNativeTarget;
351 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "GSAPDemo" */;
352 | buildPhases = (
353 | 13B07F871A680F5B00A75B9A /* Sources */,
354 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
355 | 13B07F8E1A680F5B00A75B9A /* Resources */,
356 | );
357 | buildRules = (
358 | );
359 | dependencies = (
360 | );
361 | name = GSAPDemo;
362 | productName = "Hello World";
363 | productReference = 13B07F961A680F5B00A75B9A /* GSAPDemo.app */;
364 | productType = "com.apple.product-type.application";
365 | };
366 | /* End PBXNativeTarget section */
367 |
368 | /* Begin PBXProject section */
369 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
370 | isa = PBXProject;
371 | attributes = {
372 | LastUpgradeCheck = 0610;
373 | ORGANIZATIONNAME = Facebook;
374 | TargetAttributes = {
375 | 00E356ED1AD99517003FC87E = {
376 | CreatedOnToolsVersion = 6.2;
377 | TestTargetID = 13B07F861A680F5B00A75B9A;
378 | };
379 | };
380 | };
381 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "GSAPDemo" */;
382 | compatibilityVersion = "Xcode 3.2";
383 | developmentRegion = English;
384 | hasScannedForEncodings = 0;
385 | knownRegions = (
386 | en,
387 | Base,
388 | );
389 | mainGroup = 83CBB9F61A601CBA00E9B192;
390 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
391 | projectDirPath = "";
392 | projectReferences = (
393 | {
394 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
395 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
396 | },
397 | {
398 | ProductGroup = 00C302B01ABCB8E700DB3ED1 /* Products */;
399 | ProjectRef = 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */;
400 | },
401 | {
402 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
403 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
404 | },
405 | {
406 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
407 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
408 | },
409 | {
410 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
411 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
412 | },
413 | {
414 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
415 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
416 | },
417 | {
418 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
419 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
420 | },
421 | {
422 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
423 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
424 | },
425 | {
426 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
427 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
428 | },
429 | {
430 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
431 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
432 | },
433 | {
434 | ProductGroup = 146834001AC3E56700842450 /* Products */;
435 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
436 | },
437 | );
438 | projectRoot = "";
439 | targets = (
440 | 13B07F861A680F5B00A75B9A /* GSAPDemo */,
441 | 00E356ED1AD99517003FC87E /* GSAPDemoTests */,
442 | );
443 | };
444 | /* End PBXProject section */
445 |
446 | /* Begin PBXReferenceProxy section */
447 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
448 | isa = PBXReferenceProxy;
449 | fileType = archive.ar;
450 | path = libRCTActionSheet.a;
451 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
452 | sourceTree = BUILT_PRODUCTS_DIR;
453 | };
454 | 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */ = {
455 | isa = PBXReferenceProxy;
456 | fileType = archive.ar;
457 | path = libRCTAdSupport.a;
458 | remoteRef = 00C302B31ABCB8E700DB3ED1 /* PBXContainerItemProxy */;
459 | sourceTree = BUILT_PRODUCTS_DIR;
460 | };
461 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
462 | isa = PBXReferenceProxy;
463 | fileType = archive.ar;
464 | path = libRCTGeolocation.a;
465 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
466 | sourceTree = BUILT_PRODUCTS_DIR;
467 | };
468 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
469 | isa = PBXReferenceProxy;
470 | fileType = archive.ar;
471 | path = libRCTImage.a;
472 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
473 | sourceTree = BUILT_PRODUCTS_DIR;
474 | };
475 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
476 | isa = PBXReferenceProxy;
477 | fileType = archive.ar;
478 | path = libRCTNetwork.a;
479 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
480 | sourceTree = BUILT_PRODUCTS_DIR;
481 | };
482 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
483 | isa = PBXReferenceProxy;
484 | fileType = archive.ar;
485 | path = libRCTVibration.a;
486 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
487 | sourceTree = BUILT_PRODUCTS_DIR;
488 | };
489 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
490 | isa = PBXReferenceProxy;
491 | fileType = archive.ar;
492 | path = libRCTSettings.a;
493 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
494 | sourceTree = BUILT_PRODUCTS_DIR;
495 | };
496 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
497 | isa = PBXReferenceProxy;
498 | fileType = archive.ar;
499 | path = libRCTWebSocket.a;
500 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
501 | sourceTree = BUILT_PRODUCTS_DIR;
502 | };
503 | 146834041AC3E56700842450 /* libReact.a */ = {
504 | isa = PBXReferenceProxy;
505 | fileType = archive.ar;
506 | path = libReact.a;
507 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
508 | sourceTree = BUILT_PRODUCTS_DIR;
509 | };
510 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
511 | isa = PBXReferenceProxy;
512 | fileType = archive.ar;
513 | path = libRCTLinking.a;
514 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
515 | sourceTree = BUILT_PRODUCTS_DIR;
516 | };
517 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
518 | isa = PBXReferenceProxy;
519 | fileType = archive.ar;
520 | path = libRCTText.a;
521 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
522 | sourceTree = BUILT_PRODUCTS_DIR;
523 | };
524 | /* End PBXReferenceProxy section */
525 |
526 | /* Begin PBXResourcesBuildPhase section */
527 | 00E356EC1AD99517003FC87E /* Resources */ = {
528 | isa = PBXResourcesBuildPhase;
529 | buildActionMask = 2147483647;
530 | files = (
531 | );
532 | runOnlyForDeploymentPostprocessing = 0;
533 | };
534 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
535 | isa = PBXResourcesBuildPhase;
536 | buildActionMask = 2147483647;
537 | files = (
538 | 008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */,
539 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
540 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
541 | );
542 | runOnlyForDeploymentPostprocessing = 0;
543 | };
544 | /* End PBXResourcesBuildPhase section */
545 |
546 | /* Begin PBXSourcesBuildPhase section */
547 | 00E356EA1AD99517003FC87E /* Sources */ = {
548 | isa = PBXSourcesBuildPhase;
549 | buildActionMask = 2147483647;
550 | files = (
551 | 00E356F31AD99517003FC87E /* GSAPDemoTests.m in Sources */,
552 | );
553 | runOnlyForDeploymentPostprocessing = 0;
554 | };
555 | 13B07F871A680F5B00A75B9A /* Sources */ = {
556 | isa = PBXSourcesBuildPhase;
557 | buildActionMask = 2147483647;
558 | files = (
559 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
560 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
561 | );
562 | runOnlyForDeploymentPostprocessing = 0;
563 | };
564 | /* End PBXSourcesBuildPhase section */
565 |
566 | /* Begin PBXTargetDependency section */
567 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
568 | isa = PBXTargetDependency;
569 | target = 13B07F861A680F5B00A75B9A /* GSAPDemo */;
570 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
571 | };
572 | /* End PBXTargetDependency section */
573 |
574 | /* Begin PBXVariantGroup section */
575 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
576 | isa = PBXVariantGroup;
577 | children = (
578 | 13B07FB21A68108700A75B9A /* Base */,
579 | );
580 | name = LaunchScreen.xib;
581 | path = iOS;
582 | sourceTree = "";
583 | };
584 | /* End PBXVariantGroup section */
585 |
586 | /* Begin XCBuildConfiguration section */
587 | 00E356F61AD99517003FC87E /* Debug */ = {
588 | isa = XCBuildConfiguration;
589 | buildSettings = {
590 | BUNDLE_LOADER = "$(TEST_HOST)";
591 | FRAMEWORK_SEARCH_PATHS = (
592 | "$(SDKROOT)/Developer/Library/Frameworks",
593 | "$(inherited)",
594 | );
595 | GCC_PREPROCESSOR_DEFINITIONS = (
596 | "DEBUG=1",
597 | "$(inherited)",
598 | );
599 | INFOPLIST_FILE = GSAPDemoTests/Info.plist;
600 | IPHONEOS_DEPLOYMENT_TARGET = 8.2;
601 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
602 | PRODUCT_NAME = "$(TARGET_NAME)";
603 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GSAPDemo.app/GSAPDemo";
604 | };
605 | name = Debug;
606 | };
607 | 00E356F71AD99517003FC87E /* Release */ = {
608 | isa = XCBuildConfiguration;
609 | buildSettings = {
610 | BUNDLE_LOADER = "$(TEST_HOST)";
611 | COPY_PHASE_STRIP = NO;
612 | FRAMEWORK_SEARCH_PATHS = (
613 | "$(SDKROOT)/Developer/Library/Frameworks",
614 | "$(inherited)",
615 | );
616 | INFOPLIST_FILE = GSAPDemoTests/Info.plist;
617 | IPHONEOS_DEPLOYMENT_TARGET = 8.2;
618 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
619 | PRODUCT_NAME = "$(TARGET_NAME)";
620 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GSAPDemo.app/GSAPDemo";
621 | };
622 | name = Release;
623 | };
624 | 13B07F941A680F5B00A75B9A /* Debug */ = {
625 | isa = XCBuildConfiguration;
626 | buildSettings = {
627 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
628 | HEADER_SEARCH_PATHS = (
629 | "$(inherited)",
630 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
631 | "$(SRCROOT)/node_modules/react-native/React/**",
632 | );
633 | INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
634 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
635 | OTHER_LDFLAGS = "-ObjC";
636 | PRODUCT_NAME = GSAPDemo;
637 | };
638 | name = Debug;
639 | };
640 | 13B07F951A680F5B00A75B9A /* Release */ = {
641 | isa = XCBuildConfiguration;
642 | buildSettings = {
643 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
644 | HEADER_SEARCH_PATHS = (
645 | "$(inherited)",
646 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
647 | "$(SRCROOT)/node_modules/react-native/React/**",
648 | );
649 | INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
650 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
651 | OTHER_LDFLAGS = "-ObjC";
652 | PRODUCT_NAME = GSAPDemo;
653 | };
654 | name = Release;
655 | };
656 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
657 | isa = XCBuildConfiguration;
658 | buildSettings = {
659 | ALWAYS_SEARCH_USER_PATHS = NO;
660 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
661 | CLANG_CXX_LIBRARY = "libc++";
662 | CLANG_ENABLE_MODULES = YES;
663 | CLANG_ENABLE_OBJC_ARC = YES;
664 | CLANG_WARN_BOOL_CONVERSION = YES;
665 | CLANG_WARN_CONSTANT_CONVERSION = YES;
666 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
667 | CLANG_WARN_EMPTY_BODY = YES;
668 | CLANG_WARN_ENUM_CONVERSION = YES;
669 | CLANG_WARN_INT_CONVERSION = YES;
670 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
671 | CLANG_WARN_UNREACHABLE_CODE = YES;
672 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
673 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
674 | COPY_PHASE_STRIP = NO;
675 | ENABLE_STRICT_OBJC_MSGSEND = YES;
676 | GCC_C_LANGUAGE_STANDARD = gnu99;
677 | GCC_DYNAMIC_NO_PIC = NO;
678 | GCC_OPTIMIZATION_LEVEL = 0;
679 | GCC_PREPROCESSOR_DEFINITIONS = (
680 | "DEBUG=1",
681 | "$(inherited)",
682 | );
683 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
684 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
685 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
686 | GCC_WARN_UNDECLARED_SELECTOR = YES;
687 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
688 | GCC_WARN_UNUSED_FUNCTION = YES;
689 | GCC_WARN_UNUSED_VARIABLE = YES;
690 | HEADER_SEARCH_PATHS = (
691 | "$(inherited)",
692 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
693 | "$(SRCROOT)/node_modules/react-native/React/**",
694 | );
695 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
696 | MTL_ENABLE_DEBUG_INFO = YES;
697 | ONLY_ACTIVE_ARCH = YES;
698 | SDKROOT = iphoneos;
699 | };
700 | name = Debug;
701 | };
702 | 83CBBA211A601CBA00E9B192 /* Release */ = {
703 | isa = XCBuildConfiguration;
704 | buildSettings = {
705 | ALWAYS_SEARCH_USER_PATHS = NO;
706 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
707 | CLANG_CXX_LIBRARY = "libc++";
708 | CLANG_ENABLE_MODULES = YES;
709 | CLANG_ENABLE_OBJC_ARC = YES;
710 | CLANG_WARN_BOOL_CONVERSION = YES;
711 | CLANG_WARN_CONSTANT_CONVERSION = YES;
712 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
713 | CLANG_WARN_EMPTY_BODY = YES;
714 | CLANG_WARN_ENUM_CONVERSION = YES;
715 | CLANG_WARN_INT_CONVERSION = YES;
716 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
717 | CLANG_WARN_UNREACHABLE_CODE = YES;
718 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
719 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
720 | COPY_PHASE_STRIP = YES;
721 | ENABLE_NS_ASSERTIONS = NO;
722 | ENABLE_STRICT_OBJC_MSGSEND = YES;
723 | GCC_C_LANGUAGE_STANDARD = gnu99;
724 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
725 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
726 | GCC_WARN_UNDECLARED_SELECTOR = YES;
727 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
728 | GCC_WARN_UNUSED_FUNCTION = YES;
729 | GCC_WARN_UNUSED_VARIABLE = YES;
730 | HEADER_SEARCH_PATHS = (
731 | "$(inherited)",
732 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
733 | "$(SRCROOT)/node_modules/react-native/React/**",
734 | );
735 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
736 | MTL_ENABLE_DEBUG_INFO = NO;
737 | SDKROOT = iphoneos;
738 | VALIDATE_PRODUCT = YES;
739 | };
740 | name = Release;
741 | };
742 | /* End XCBuildConfiguration section */
743 |
744 | /* Begin XCConfigurationList section */
745 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "GSAPDemoTests" */ = {
746 | isa = XCConfigurationList;
747 | buildConfigurations = (
748 | 00E356F61AD99517003FC87E /* Debug */,
749 | 00E356F71AD99517003FC87E /* Release */,
750 | );
751 | defaultConfigurationIsVisible = 0;
752 | defaultConfigurationName = Release;
753 | };
754 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "GSAPDemo" */ = {
755 | isa = XCConfigurationList;
756 | buildConfigurations = (
757 | 13B07F941A680F5B00A75B9A /* Debug */,
758 | 13B07F951A680F5B00A75B9A /* Release */,
759 | );
760 | defaultConfigurationIsVisible = 0;
761 | defaultConfigurationName = Release;
762 | };
763 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "GSAPDemo" */ = {
764 | isa = XCConfigurationList;
765 | buildConfigurations = (
766 | 83CBBA201A601CBA00E9B192 /* Debug */,
767 | 83CBBA211A601CBA00E9B192 /* Release */,
768 | );
769 | defaultConfigurationIsVisible = 0;
770 | defaultConfigurationName = Release;
771 | };
772 | /* End XCConfigurationList section */
773 | };
774 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
775 | }
776 |
--------------------------------------------------------------------------------
/GSAPDemo/GSAPDemo.xcodeproj/xcshareddata/xcschemes/GSAPDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
77 |
83 |
84 |
85 |
86 |
87 |
88 |
94 |
96 |
102 |
103 |
104 |
105 |
107 |
108 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/GSAPDemo/GSAPDemoTests/GSAPDemoTests.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 "RCTAssert.h"
14 | #import "RCTRedBox.h"
15 | #import "RCTRootView.h"
16 |
17 | #define TIMEOUT_SECONDS 240
18 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
19 |
20 | @interface GSAPDemoTests : XCTestCase
21 |
22 | @end
23 |
24 | @implementation GSAPDemoTests
25 |
26 |
27 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
28 | {
29 | if (test(view)) {
30 | return YES;
31 | }
32 | for (UIView *subview in [view subviews]) {
33 | if ([self findSubviewInView:subview matching:test]) {
34 | return YES;
35 | }
36 | }
37 | return NO;
38 | }
39 |
40 | - (void)testRendersWelcomeScreen {
41 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
42 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
43 | BOOL foundElement = NO;
44 | NSString *redboxError = nil;
45 |
46 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
47 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
48 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
49 |
50 | redboxError = [[RCTRedBox sharedInstance] currentErrorMessage];
51 |
52 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
53 | if ([view respondsToSelector:@selector(attributedText)]) {
54 | NSString *text = [(id)view attributedText].string;
55 | if ([text isEqualToString:TEXT_TO_LOOK_FOR]) {
56 | return YES;
57 | }
58 | }
59 | return NO;
60 | }];
61 | }
62 |
63 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
64 | XCTAssertTrue(foundElement, @"Cound't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
65 | }
66 |
67 |
68 | @end
69 |
--------------------------------------------------------------------------------
/GSAPDemo/GSAPDemoTests/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 |
--------------------------------------------------------------------------------
/GSAPDemo/iOS/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 |
--------------------------------------------------------------------------------
/GSAPDemo/iOS/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 "RCTRootView.h"
13 |
14 | @implementation AppDelegate
15 |
16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
17 | {
18 | NSURL *jsCodeLocation;
19 |
20 | /**
21 | * Loading JavaScript code - uncomment the one you want.
22 | *
23 | * OPTION 1
24 | * Load from development server. Start the server from the repository root:
25 | *
26 | * $ npm start
27 | *
28 | * To run on device, change `localhost` to the IP address of your computer
29 | * (you can get this by typing `ifconfig` into the terminal and selecting the
30 | * `inet` value under `en0:`) and make sure your computer and iOS device are
31 | * on the same Wi-Fi network.
32 | */
33 |
34 | jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle"];
35 |
36 | /**
37 | * OPTION 2
38 | * Load from pre-bundled file on disk. To re-generate the static bundle
39 | * from the root of your project directory, run
40 | *
41 | * $ react-native bundle --minify
42 | *
43 | * see http://facebook.github.io/react-native/docs/runningondevice.html
44 | */
45 |
46 | // jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
47 |
48 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
49 | moduleName:@"GSAPDemo"
50 | launchOptions:launchOptions];
51 |
52 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
53 | UIViewController *rootViewController = [[UIViewController alloc] init];
54 | rootViewController.view = rootView;
55 | self.window.rootViewController = rootViewController;
56 | [self.window makeKeyAndVisible];
57 | return YES;
58 | }
59 |
60 | @end
61 |
--------------------------------------------------------------------------------
/GSAPDemo/iOS/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 |
--------------------------------------------------------------------------------
/GSAPDemo/iOS/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 | }
--------------------------------------------------------------------------------
/GSAPDemo/iOS/Images.xcassets/react.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "react-2.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "react.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "react-1.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/GSAPDemo/iOS/Images.xcassets/react.imageset/react-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/react-native-gsap-demo/217039d54bc94c91bf08aa406dfbed6dc7cbe560/GSAPDemo/iOS/Images.xcassets/react.imageset/react-1.png
--------------------------------------------------------------------------------
/GSAPDemo/iOS/Images.xcassets/react.imageset/react-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/react-native-gsap-demo/217039d54bc94c91bf08aa406dfbed6dc7cbe560/GSAPDemo/iOS/Images.xcassets/react.imageset/react-2.png
--------------------------------------------------------------------------------
/GSAPDemo/iOS/Images.xcassets/react.imageset/react.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/react-native-gsap-demo/217039d54bc94c91bf08aa406dfbed6dc7cbe560/GSAPDemo/iOS/Images.xcassets/react.imageset/react.png
--------------------------------------------------------------------------------
/GSAPDemo/iOS/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 |
42 |
43 |
--------------------------------------------------------------------------------
/GSAPDemo/iOS/main.jsbundle:
--------------------------------------------------------------------------------
1 | // Offline JS
2 | // To re-generate the offline bundle, run this from the root of your project:
3 | //
4 | // $ react-native bundle --minify
5 | //
6 | // See http://facebook.github.io/react-native/docs/runningondevice.html for more details.
7 |
8 | throw new Error('Offline JS file is empty. See iOS/main.jsbundle for instructions');
9 |
--------------------------------------------------------------------------------
/GSAPDemo/iOS/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 |
--------------------------------------------------------------------------------
/GSAPDemo/index.ios.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Sample React Native App
3 | * https://github.com/facebook/react-native
4 | */
5 | 'use strict';
6 |
7 | var React = require('react-native');
8 |
9 | require('gsap');
10 | require('gsap-react-plugin');
11 |
12 | var GSAPDemo = require('./GSAPDemo');
13 |
14 | React.AppRegistry.registerComponent('GSAPDemo', () => GSAPDemo);
15 |
--------------------------------------------------------------------------------
/GSAPDemo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "GSAPDemo",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "start": "node_modules/react-native/packager/packager.sh"
7 | },
8 | "dependencies": {
9 | "gsap": "git://github.com/skevy/GreenSock-JS.git#node-compat",
10 | "gsap-react-plugin": "^1.0.2",
11 | "react-native": "^0.4.4"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | GSAP on React Native!
2 | =====================
3 |
4 | This is a demo showing basic usage of GSAP's TweenMax and TimelineMax in React Native by simply tweening state using HZDG's awesome [gsap-react-plugin](https://github.com/hzdg/gsap-react-plugin).
5 |
6 | 
7 |
8 | A few notes:
9 |
10 | - This uses my fork of GreenSock-JS (https://github.com/skevy/GreenSock-JS/tree/node-compat), in order to play nice with the fact that React Native doesn't have "document" defined.
11 | - `gsap-react-plugin` handles tweening the state, while React Native itself has already polyfilled `requestAnimationFrame` (which uses React Native's optimized RCTTimer)
12 |
13 | ### Future Work
14 |
15 | This is not the end-all-be-all of React Native animation, and has not been extensively tested more than just a few proof's of concept and with simple animations.
16 |
17 | Looking to the future of using GSAP with React Native, a plugin could be written to directly tween using React Native's `setNativeProps`, which would avoid a full render pass, as @sahrens recommends [here](https://github.com/facebook/react-native/issues/46#issuecomment-73266078).
18 |
--------------------------------------------------------------------------------
/gif/react-native-gsap.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/react-native-gsap-demo/217039d54bc94c91bf08aa406dfbed6dc7cbe560/gif/react-native-gsap.gif
--------------------------------------------------------------------------------