소스 검색

make scalesPageToFit to true by default on android; update demo to show supporting raw text

iou90 7 년 전
부모
커밋
8fc54f87fe
4개의 변경된 파일298개의 추가작업 그리고 211개의 파일을 삭제
  1. 254
    204
      autoHeightWebView/index.android.js
  2. 1
    1
      demo/explorer.js
  3. 42
    5
      demo/ios/demo.xcodeproj/project.pbxproj
  4. 1
    1
      demo/yarn.lock

+ 254
- 204
autoHeightWebView/index.android.js 파일 보기

@@ -1,257 +1,307 @@
1
-'use strict'
1
+"use strict";
2 2
 
3
-import React, { PureComponent } from 'react';
3
+import React, { PureComponent } from "react";
4 4
 
5 5
 import {
6
-    findNodeHandle,
7
-    requireNativeComponent,
8
-    Animated,
9
-    DeviceEventEmitter,
10
-    Dimensions,
11
-    StyleSheet,
12
-    Platform,
13
-    UIManager,
14
-    View,
15
-    ViewPropTypes,
16
-    WebView
17
-} from 'react-native';
6
+  findNodeHandle,
7
+  requireNativeComponent,
8
+  Animated,
9
+  DeviceEventEmitter,
10
+  Dimensions,
11
+  StyleSheet,
12
+  Platform,
13
+  UIManager,
14
+  View,
15
+  ViewPropTypes,
16
+  WebView
17
+} from "react-native";
18 18
 
19
-import PropTypes from 'prop-types';
19
+import PropTypes from "prop-types";
20 20
 
21
-import Immutable from 'immutable';
21
+import Immutable from "immutable";
22 22
 
23
-const RCTAutoHeightWebView = requireNativeComponent('RCTAutoHeightWebView', AutoHeightWebView, { nativeOnly: { messagingEnabled: PropTypes.bool } });
23
+const RCTAutoHeightWebView = requireNativeComponent(
24
+  "RCTAutoHeightWebView",
25
+  AutoHeightWebView,
26
+  { nativeOnly: { messagingEnabled: PropTypes.bool } }
27
+);
24 28
 
25 29
 export default class AutoHeightWebView extends PureComponent {
26
-    static propTypes = {
27
-        source: WebView.propTypes.source,
28
-        onHeightUpdated: PropTypes.func,
29
-        customScript: PropTypes.string,
30
-        enableAnimation: PropTypes.bool,
31
-        // if set to true may cause some layout issues (smaller font size)
32
-        scalesPageToFit: PropTypes.bool,
33
-        // only works on enable animation
34
-        animationDuration: PropTypes.number,
35
-        // offset of rn webview margin
36
-        heightOffset: PropTypes.number,
37
-        // baseUrl not work in android 4.3 or below version
38
-        enableBaseUrl: PropTypes.bool,
39
-        style: ViewPropTypes.style,
40
-        // works if set enableBaseUrl to true; add web/files... to android/app/src/assets/
41
-        files: PropTypes.arrayOf(PropTypes.shape({
42
-            href: PropTypes.string,
43
-            type: PropTypes.string,
44
-            rel: PropTypes.string
45
-        }))
46
-    }
30
+  static propTypes = {
31
+    source: WebView.propTypes.source,
32
+    onHeightUpdated: PropTypes.func,
33
+    customScript: PropTypes.string,
34
+    enableAnimation: PropTypes.bool,
35
+    // if set to false may cause some layout issues (width of container will be than width of screen)
36
+    scalesPageToFit: PropTypes.bool,
37
+    // only works on enable animation
38
+    animationDuration: PropTypes.number,
39
+    // offset of rn webview margin
40
+    heightOffset: PropTypes.number,
41
+    // baseUrl not work in android 4.3 or below version
42
+    enableBaseUrl: PropTypes.bool,
43
+    style: ViewPropTypes.style,
44
+    // works if set enableBaseUrl to true; add web/files... to android/app/src/assets/
45
+    files: PropTypes.arrayOf(
46
+      PropTypes.shape({
47
+        href: PropTypes.string,
48
+        type: PropTypes.string,
49
+        rel: PropTypes.string
50
+      })
51
+    )
52
+  };
47 53
 
48
-    static defaultProps = {
49
-        scalesPageToFit: false,
50
-        enableBaseUrl: false,
51
-        enableAnimation: true,
52
-        animationDuration: 555,
53
-        heightOffset: 20
54
-    }
54
+  static defaultProps = {
55
+    scalesPageToFit: true,
56
+    enableBaseUrl: false,
57
+    enableAnimation: true,
58
+    animationDuration: 555,
59
+    heightOffset: 20
60
+  };
55 61
 
56
-    constructor(props) {
57
-        super(props);
58
-        this.onMessage = this.onMessage.bind(this);
59
-        if (this.props.enableAnimation) {
60
-            this.opacityAnimatedValue = new Animated.Value(0);
61
-        }
62
-        if (IsBelowKitKat) {
63
-            this.listenWebViewBridgeMessage = this.listenWebViewBridgeMessage.bind(this);
64
-        }
65
-        const initialScript = props.files ? this.appendFilesToHead(props.files, BaseScript) : BaseScript;
66
-        this.state = {
67
-            isChangingSource: false,
68
-            height: 0,
69
-            heightOffset: 0,
70
-            script: initialScript
71
-        };
62
+  constructor(props) {
63
+    super(props);
64
+    this.onMessage = this.onMessage.bind(this);
65
+    if (this.props.enableAnimation) {
66
+      this.opacityAnimatedValue = new Animated.Value(0);
72 67
     }
73
-
74
-    componentWillMount() {
75
-        if (IsBelowKitKat) {
76
-            DeviceEventEmitter.addListener("webViewBridgeMessage", this.listenWebViewBridgeMessage);
77
-        }
68
+    if (IsBelowKitKat) {
69
+      this.listenWebViewBridgeMessage = this.listenWebViewBridgeMessage.bind(
70
+        this
71
+      );
78 72
     }
73
+    const initialScript = props.files
74
+      ? this.appendFilesToHead(props.files, BaseScript)
75
+      : BaseScript;
76
+    this.state = {
77
+      isChangingSource: false,
78
+      height: 0,
79
+      heightOffset: 0,
80
+      script: initialScript
81
+    };
82
+  }
79 83
 
80
-    componentDidMount() {
81
-        this.startInterval();
84
+  componentWillMount() {
85
+    if (IsBelowKitKat) {
86
+      DeviceEventEmitter.addListener(
87
+        "webViewBridgeMessage",
88
+        this.listenWebViewBridgeMessage
89
+      );
82 90
     }
91
+  }
83 92
 
84
-    componentWillReceiveProps(nextProps) {
85
-        // injectedJavaScript only works when webview reload (source changed)
86
-        if (Immutable.is(Immutable.fromJS(this.props.source), Immutable.fromJS(nextProps.source))) {
87
-            return;
88
-        }
89
-        else {
90
-            this.setState({
91
-                isChangingSource: true,
92
-                height: 0,
93
-                heightOffset: 0
94
-            }, () => {
95
-                this.startInterval();
96
-                this.setState({ isChangingSource: false });
97
-            });
98
-        }
99
-        let currentScript = BaseScript;
100
-        if (nextProps.files) {
101
-            currentScript = this.appendFilesToHead(nextProps.files, BaseScript);
102
-        }
103
-        this.setState({ script: currentScript });
104
-    }
93
+  componentDidMount() {
94
+    this.startInterval();
95
+  }
105 96
 
106
-    componentWillUnmount() {
107
-        this.stopInterval();
108
-        if (IsBelowKitKat) {
109
-            DeviceEventEmitter.removeListener("webViewBridgeMessage", this.listenWebViewBridgeMessage);
97
+  componentWillReceiveProps(nextProps) {
98
+    // injectedJavaScript only works when webview reload (source changed)
99
+    if (
100
+      Immutable.is(
101
+        Immutable.fromJS(this.props.source),
102
+        Immutable.fromJS(nextProps.source)
103
+      )
104
+    ) {
105
+      return;
106
+    } else {
107
+      this.setState(
108
+        {
109
+          isChangingSource: true,
110
+          height: 0,
111
+          heightOffset: 0
112
+        },
113
+        () => {
114
+          this.startInterval();
115
+          this.setState({ isChangingSource: false });
110 116
         }
117
+      );
111 118
     }
112
-
113
-    // below kitkat
114
-    listenWebViewBridgeMessage(body) {
115
-        this.onMessage(body.message);
119
+    let currentScript = BaseScript;
120
+    if (nextProps.files) {
121
+      currentScript = this.appendFilesToHead(nextProps.files, BaseScript);
116 122
     }
123
+    this.setState({ script: currentScript });
124
+  }
117 125
 
118
-    // below kitkat
119
-    sendToWebView(message) {
120
-        UIManager.dispatchViewManagerCommand(
121
-            findNodeHandle(this.webview),
122
-            UIManager.RCTAutoHeightWebView.Commands.sendToWebView,
123
-            [String(message)]
124
-        );
126
+  componentWillUnmount() {
127
+    this.stopInterval();
128
+    if (IsBelowKitKat) {
129
+      DeviceEventEmitter.removeListener(
130
+        "webViewBridgeMessage",
131
+        this.listenWebViewBridgeMessage
132
+      );
125 133
     }
134
+  }
126 135
 
127
-    postMessage(data) {
128
-        UIManager.dispatchViewManagerCommand(
129
-            findNodeHandle(this.webview),
130
-            UIManager.RCTAutoHeightWebView.Commands.postMessage,
131
-            [String(data)]
132
-        );
133
-    };
136
+  // below kitkat
137
+  listenWebViewBridgeMessage(body) {
138
+    this.onMessage(body.message);
139
+  }
134 140
 
135
-    startInterval() {
136
-        this.finishInterval = false;
137
-        this.interval = setInterval(() => {
138
-            if (!this.finishInterval) {
139
-                IsBelowKitKat ? this.sendToWebView('getBodyHeight') : this.postMessage('getBodyHeight');
140
-            }
141
-        }, 205);
142
-    }
141
+  // below kitkat
142
+  sendToWebView(message) {
143
+    UIManager.dispatchViewManagerCommand(
144
+      findNodeHandle(this.webview),
145
+      UIManager.RCTAutoHeightWebView.Commands.sendToWebView,
146
+      [String(message)]
147
+    );
148
+  }
143 149
 
144
-    stopInterval() {
145
-        this.finishInterval = true;
146
-        clearInterval(this.interval);
147
-    }
150
+  postMessage(data) {
151
+    UIManager.dispatchViewManagerCommand(
152
+      findNodeHandle(this.webview),
153
+      UIManager.RCTAutoHeightWebView.Commands.postMessage,
154
+      [String(data)]
155
+    );
156
+  }
148 157
 
149
-    onHeightUpdated(height) {
150
-        if (this.props.onHeightUpdated) {
151
-            this.props.onHeightUpdated(height);
152
-        }
158
+  startInterval() {
159
+    this.finishInterval = false;
160
+    this.interval = setInterval(() => {
161
+      if (!this.finishInterval) {
162
+        IsBelowKitKat
163
+          ? this.sendToWebView("getBodyHeight")
164
+          : this.postMessage("getBodyHeight");
165
+      }
166
+    }, 205);
167
+  }
168
+
169
+  stopInterval() {
170
+    this.finishInterval = true;
171
+    clearInterval(this.interval);
172
+  }
173
+
174
+  onHeightUpdated(height) {
175
+    if (this.props.onHeightUpdated) {
176
+      this.props.onHeightUpdated(height);
153 177
     }
178
+  }
154 179
 
155
-    onMessage(e) {
156
-        const height = parseInt(IsBelowKitKat ? e.nativeEvent.message : e.nativeEvent.data);
157
-        if (height) {
158
-            if (this.props.enableAnimation) {
159
-                this.opacityAnimatedValue.setValue(0);
160
-            }
161
-            this.stopInterval();
162
-            this.setState({
163
-                heightOffset: this.props.heightOffset,
164
-                height
165
-            }, () => {
166
-                if (this.props.enableAnimation) {
167
-                    Animated.timing(this.opacityAnimatedValue, {
168
-                        toValue: 1,
169
-                        duration: this.props.animationDuration
170
-                    }).start(() => this.onHeightUpdated(height));
171
-                }
172
-                else {
173
-                    this.onHeightUpdated(height);
174
-                }
175
-            });
180
+  onMessage(e) {
181
+    const height = parseInt(
182
+      IsBelowKitKat ? e.nativeEvent.message : e.nativeEvent.data
183
+    );
184
+    if (height) {
185
+      if (this.props.enableAnimation) {
186
+        this.opacityAnimatedValue.setValue(0);
187
+      }
188
+      this.stopInterval();
189
+      this.setState(
190
+        {
191
+          heightOffset: this.props.heightOffset,
192
+          height
193
+        },
194
+        () => {
195
+          if (this.props.enableAnimation) {
196
+            Animated.timing(this.opacityAnimatedValue, {
197
+              toValue: 1,
198
+              duration: this.props.animationDuration
199
+            }).start(() => this.onHeightUpdated(height));
200
+          } else {
201
+            this.onHeightUpdated(height);
202
+          }
176 203
         }
204
+      );
177 205
     }
206
+  }
178 207
 
179
-    appendFilesToHead(files, script) {
180
-        if (!files) {
181
-            return script;
182
-        }
183
-        for (let file of files) {
184
-            script =
185
-                `
208
+  appendFilesToHead(files, script) {
209
+    if (!files) {
210
+      return script;
211
+    }
212
+    for (let file of files) {
213
+      script =
214
+        `
186 215
                 var link  = document.createElement('link');
187
-                link.rel  = '` + file.rel + `';
188
-                link.type = '` + file.type + `';
189
-                link.href = '` + file.href + `';
216
+                link.rel  = '` +
217
+        file.rel +
218
+        `';
219
+                link.type = '` +
220
+        file.type +
221
+        `';
222
+                link.href = '` +
223
+        file.href +
224
+        `';
190 225
                 document.head.appendChild(link);
191
-                `+ script;
192
-        }
193
-        return script;
226
+                ` +
227
+        script;
194 228
     }
229
+    return script;
230
+  }
195 231
 
196
-    render() {
197
-        const { height, script, isChangingSource, heightOffset } = this.state;
198
-        const { scalesPageToFit, enableAnimation, source, customScript, style, enableBaseUrl } = this.props;
199
-        let webViewSource = source;
200
-        if (enableBaseUrl) {
201
-            webViewSource = Object.assign({}, source, { baseUrl: 'file:///android_asset/web/' });
202
-        }
203
-        return (
204
-            <Animated.View style={[Styles.container, {
205
-                opacity: enableAnimation ? this.opacityAnimatedValue : 1,
206
-                height: height + heightOffset,
207
-            }, style]}>
208
-                {
209
-                    isChangingSource ? null :
210
-                        <RCTAutoHeightWebView
211
-                            ref={webview => this.webview = webview}
212
-                            style={Styles.webView}
213
-                            javaScriptEnabled={true}
214
-                            injectedJavaScript={script + customScript}
215
-                            scalesPageToFit={scalesPageToFit}
216
-                            source={webViewSource}
217
-                            onMessage={this.onMessage}
218
-                            messagingEnabled={true}
219
-                            // below kitkat
220
-                            onChange={this.onMessage} />
221
-                }
222
-            </Animated.View>
223
-        );
232
+  render() {
233
+    const { height, script, isChangingSource, heightOffset } = this.state;
234
+    const {
235
+      scalesPageToFit,
236
+      enableAnimation,
237
+      source,
238
+      customScript,
239
+      style,
240
+      enableBaseUrl
241
+    } = this.props;
242
+    let webViewSource = source;
243
+    if (enableBaseUrl) {
244
+      webViewSource = Object.assign({}, source, {
245
+        baseUrl: "file:///android_asset/web/"
246
+      });
224 247
     }
248
+    return (
249
+      <Animated.View
250
+        style={[
251
+          Styles.container,
252
+          {
253
+            opacity: enableAnimation ? this.opacityAnimatedValue : 1,
254
+            height: height + heightOffset
255
+          },
256
+          style
257
+        ]}
258
+      >
259
+        {isChangingSource ? null : (
260
+          <RCTAutoHeightWebView
261
+            ref={webview => (this.webview = webview)}
262
+            style={Styles.webView}
263
+            javaScriptEnabled={true}
264
+            injectedJavaScript={script + customScript}
265
+            scalesPageToFit={scalesPageToFit}
266
+            source={webViewSource}
267
+            onMessage={this.onMessage}
268
+            messagingEnabled={true}
269
+            // below kitkat
270
+            onChange={this.onMessage}
271
+          />
272
+        )}
273
+      </Animated.View>
274
+    );
275
+  }
225 276
 }
226 277
 
227
-const ScreenWidth = Dimensions.get('window').width;
278
+const ScreenWidth = Dimensions.get("window").width;
228 279
 
229 280
 const IsBelowKitKat = Platform.Version < 19;
230 281
 
231 282
 const Styles = StyleSheet.create({
232
-    container: {
233
-        width: ScreenWidth,
234
-        backgroundColor: 'transparent'
235
-    },
236
-    webView: {
237
-        flex: 1,
238
-        backgroundColor: 'transparent'
239
-    }
283
+  container: {
284
+    width: ScreenWidth,
285
+    backgroundColor: "transparent"
286
+  },
287
+  webView: {
288
+    flex: 1,
289
+    backgroundColor: "transparent"
290
+  }
240 291
 });
241 292
 
242
-const BaseScript =
243
-    IsBelowKitKat ?
244
-        `
293
+const BaseScript = IsBelowKitKat
294
+  ? `
245 295
     ; (function () {
246 296
         AutoHeightWebView.onMessage = function (message) {
247 297
             AutoHeightWebView.send(String(document.body.offsetHeight));
248 298
         };
249 299
     } ()); 
250
-    ` :
251
-        `
300
+    `
301
+  : `
252 302
     ; (function () {
253 303
         document.addEventListener('message', function (e) {
254 304
             window.postMessage(String(document.body.offsetHeight));
255 305
         });
256 306
     } ()); 
257
-    `;
307
+    `;

+ 1
- 1
demo/explorer.js 파일 보기

@@ -18,7 +18,7 @@ export default class Explorer extends Component {
18 18
     constructor(props) {
19 19
         super(props);
20 20
         this.html0 = `<p style="font-weight: 400;font-style: normal;font-size: 21px;line-height: 1.58;letter-spacing: -.003em;">Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. <span style="background-color: transparent !important;background-image: linear-gradient(to bottom, rgba(146, 249, 190, 1), rgba(146, 249, 190, 1));">If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.</span></p>`;
21
-        this.html1 = `<p>Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. <span>If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.</span></p>`;
21
+        this.html1 = `Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.`;
22 22
         this.script0 = '';
23 23
         this.script1 = `document.body.style.background = 'cornflowerblue';`;
24 24
         this.changeSource = this.changeSource.bind(this);

+ 42
- 5
demo/ios/demo.xcodeproj/project.pbxproj 파일 보기

@@ -25,7 +25,7 @@
25 25
 		2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
26 26
 		2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
27 27
 		2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
28
-		2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */; };
28
+		2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
29 29
 		2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; };
30 30
 		2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; };
31 31
 		2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; };
@@ -109,6 +109,20 @@
109 109
 			remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
110 110
 			remoteInfo = "demo-tvOS";
111 111
 		};
112
+		374FFF7E1F59B02A00B97131 /* PBXContainerItemProxy */ = {
113
+			isa = PBXContainerItemProxy;
114
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
115
+			proxyType = 2;
116
+			remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7;
117
+			remoteInfo = "third-party";
118
+		};
119
+		374FFF801F59B02A00B97131 /* PBXContainerItemProxy */ = {
120
+			isa = PBXContainerItemProxy;
121
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
122
+			proxyType = 2;
123
+			remoteGlobalIDString = 139D7E881E25C6D100323FB7;
124
+			remoteInfo = "double-conversion";
125
+		};
112 126
 		3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
113 127
 			isa = PBXContainerItemProxy;
114 128
 			containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
@@ -289,7 +303,7 @@
289 303
 			buildActionMask = 2147483647;
290 304
 			files = (
291 305
 				2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */,
292
-				2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */,
306
+				2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */,
293 307
 				2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */,
294 308
 				2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */,
295 309
 				2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */,
@@ -411,6 +425,8 @@
411 425
 				3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
412 426
 				3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
413 427
 				3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
428
+				374FFF7F1F59B02A00B97131 /* libthird-party.a */,
429
+				374FFF811F59B02A00B97131 /* libdouble-conversion.a */,
414 430
 			);
415 431
 			name = Products;
416 432
 			sourceTree = "<group>";
@@ -419,7 +435,7 @@
419 435
 			isa = PBXGroup;
420 436
 			children = (
421 437
 				5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
422
-				5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */,
438
+				5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */,
423 439
 			);
424 440
 			name = Products;
425 441
 			sourceTree = "<group>";
@@ -571,6 +587,9 @@
571 587
 						CreatedOnToolsVersion = 6.2;
572 588
 						TestTargetID = 13B07F861A680F5B00A75B9A;
573 589
 					};
590
+					13B07F861A680F5B00A75B9A = {
591
+						ProvisioningStyle = Manual;
592
+					};
574 593
 					2D02E47A1E0B4A5D006451C7 = {
575 594
 						CreatedOnToolsVersion = 8.2.1;
576 595
 						ProvisioningStyle = Automatic;
@@ -706,6 +725,20 @@
706 725
 			remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
707 726
 			sourceTree = BUILT_PRODUCTS_DIR;
708 727
 		};
728
+		374FFF7F1F59B02A00B97131 /* libthird-party.a */ = {
729
+			isa = PBXReferenceProxy;
730
+			fileType = archive.ar;
731
+			path = "libthird-party.a";
732
+			remoteRef = 374FFF7E1F59B02A00B97131 /* PBXContainerItemProxy */;
733
+			sourceTree = BUILT_PRODUCTS_DIR;
734
+		};
735
+		374FFF811F59B02A00B97131 /* libdouble-conversion.a */ = {
736
+			isa = PBXReferenceProxy;
737
+			fileType = archive.ar;
738
+			path = "libdouble-conversion.a";
739
+			remoteRef = 374FFF801F59B02A00B97131 /* PBXContainerItemProxy */;
740
+			sourceTree = BUILT_PRODUCTS_DIR;
741
+		};
709 742
 		3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
710 743
 			isa = PBXReferenceProxy;
711 744
 			fileType = archive.ar;
@@ -804,10 +837,10 @@
804 837
 			remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
805 838
 			sourceTree = BUILT_PRODUCTS_DIR;
806 839
 		};
807
-		5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = {
840
+		5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
808 841
 			isa = PBXReferenceProxy;
809 842
 			fileType = archive.ar;
810
-			path = "libRCTAnimation-tvOS.a";
843
+			path = libRCTAnimation.a;
811 844
 			remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
812 845
 			sourceTree = BUILT_PRODUCTS_DIR;
813 846
 		};
@@ -998,6 +1031,7 @@
998 1031
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
999 1032
 				CURRENT_PROJECT_VERSION = 1;
1000 1033
 				DEAD_CODE_STRIPPING = NO;
1034
+				DEVELOPMENT_TEAM = "";
1001 1035
 				INFOPLIST_FILE = demo/Info.plist;
1002 1036
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1003 1037
 				OTHER_LDFLAGS = (
@@ -1006,6 +1040,7 @@
1006 1040
 					"-lc++",
1007 1041
 				);
1008 1042
 				PRODUCT_NAME = demo;
1043
+				PROVISIONING_PROFILE_SPECIFIER = "";
1009 1044
 				VERSIONING_SYSTEM = "apple-generic";
1010 1045
 			};
1011 1046
 			name = Debug;
@@ -1015,6 +1050,7 @@
1015 1050
 			buildSettings = {
1016 1051
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1017 1052
 				CURRENT_PROJECT_VERSION = 1;
1053
+				DEVELOPMENT_TEAM = "";
1018 1054
 				INFOPLIST_FILE = demo/Info.plist;
1019 1055
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1020 1056
 				OTHER_LDFLAGS = (
@@ -1023,6 +1059,7 @@
1023 1059
 					"-lc++",
1024 1060
 				);
1025 1061
 				PRODUCT_NAME = demo;
1062
+				PROVISIONING_PROFILE_SPECIFIER = "";
1026 1063
 				VERSIONING_SYSTEM = "apple-generic";
1027 1064
 			};
1028 1065
 			name = Release;

+ 1
- 1
demo/yarn.lock 파일 보기

@@ -1739,7 +1739,7 @@ image-size@^0.3.5:
1739 1739
 
1740 1740
 immutable@^3.8.1:
1741 1741
   version "3.8.1"
1742
-  resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
1742
+  resolved "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
1743 1743
 
1744 1744
 imurmurhash@^0.1.4:
1745 1745
   version "0.1.4"