react-native-kenburns-view 5.1.1 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +6 -4
- package/lib/KenBurnsView.js +57 -35
- package/package.json +1 -4
- package/example/kenburns-example/App.js +0 -78
- package/example/kenburns-example/README.md +0 -20
- package/example/kenburns-example/app.json +0 -21
- package/example/kenburns-example/babel.config.js +0 -6
- package/example/kenburns-example/ios/.xcode.env +0 -11
- package/example/kenburns-example/ios/KenBurnsExample/AppDelegate.swift +0 -69
- package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png +0 -0
- package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/AppIcon.appiconset/Contents.json +0 -14
- package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/Contents.json +0 -6
- package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/SplashScreenBackground.colorset/Contents.json +0 -20
- package/example/kenburns-example/ios/KenBurnsExample/Info.plist +0 -76
- package/example/kenburns-example/ios/KenBurnsExample/KenBurnsExample-Bridging-Header.h +0 -3
- package/example/kenburns-example/ios/KenBurnsExample/KenBurnsExample.entitlements +0 -5
- package/example/kenburns-example/ios/KenBurnsExample/PrivacyInfo.xcprivacy +0 -48
- package/example/kenburns-example/ios/KenBurnsExample/SplashScreen.storyboard +0 -39
- package/example/kenburns-example/ios/KenBurnsExample/Supporting/Expo.plist +0 -12
- package/example/kenburns-example/ios/KenBurnsExample.xcodeproj/project.pbxproj +0 -544
- package/example/kenburns-example/ios/KenBurnsExample.xcodeproj/xcshareddata/xcschemes/KenBurnsExample.xcscheme +0 -88
- package/example/kenburns-example/ios/KenBurnsExample.xcworkspace/contents.xcworkspacedata +0 -10
- package/example/kenburns-example/ios/Podfile +0 -63
- package/example/kenburns-example/ios/Podfile.lock +0 -2195
- package/example/kenburns-example/ios/Podfile.properties.json +0 -4
- package/example/kenburns-example/metro.config.js +0 -20
- package/example/kenburns-example/package-lock.json +0 -7160
- package/example/kenburns-example/package.json +0 -25
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Nimila Hiranya Samarasinghe
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
|
|
21
21
|
**Lightweight:** No native code or custom native modules. It uses only React Native’s built-in `Animated` API and core components, so it works with standard RN and Expo and adds minimal bundle size. Each instance uses randomized timing and pan direction so multiple images don’t move in lockstep.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
For the **React (web)** version of this effect, see [react-kenburns-view](https://github.com/nHiRanZ/react-kenburns-view).
|
|
24
|
+
|
|
25
|
+
Version: 5.3.0
|
|
24
26
|
|
|
25
27
|
## Supported React Native versions
|
|
26
28
|
|
|
@@ -29,18 +31,18 @@ This library uses only React Native’s built-in `Animated` API and core compone
|
|
|
29
31
|
- **Compatible with:** React Native **0.76+** (and earlier 0.7x / 0.6x in practice).
|
|
30
32
|
- **Tested with:** React Native **0.76.x** and **0.83.x** (Expo SDK 52 and 55) on iOS and Android.
|
|
31
33
|
|
|
32
|
-
If you use Expo, the
|
|
34
|
+
If you use Expo, the demo app runs on **Expo SDK 55** (React Native 0.83.2).
|
|
33
35
|
|
|
34
36
|
## Installation
|
|
35
37
|
```bash
|
|
36
38
|
$ npm i react-native-kenburns-view --save
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
## Demo
|
|
41
|
+
## Demo
|
|
40
42
|
|
|
41
43
|

|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
The interactive demo lives in [react-library-demos](https://github.com/nHiRanZ/react-library-demos) under [`react-native-kenburns-view/`](https://github.com/nHiRanZ/react-library-demos/tree/main/react-native-kenburns-view). See that folder's [README](https://github.com/nHiRanZ/react-library-demos/blob/main/react-native-kenburns-view/README.md) for setup (clone both repos as siblings, then `npm install` and `npm run dev`).
|
|
44
46
|
|
|
45
47
|
## Usage
|
|
46
48
|
|
package/lib/KenBurnsView.js
CHANGED
|
@@ -13,6 +13,7 @@ import React, {
|
|
|
13
13
|
useEffect,
|
|
14
14
|
useImperativeHandle,
|
|
15
15
|
useRef,
|
|
16
|
+
useState,
|
|
16
17
|
} from 'react';
|
|
17
18
|
import PropTypes from 'prop-types';
|
|
18
19
|
import {
|
|
@@ -26,6 +27,17 @@ import {
|
|
|
26
27
|
const DEFAULT_DURATION = 20000;
|
|
27
28
|
const FILL_SCALE = 1.15;
|
|
28
29
|
|
|
30
|
+
function getRandomCycle(zoomStart, zoomEnd, panXAmount, panYAmount) {
|
|
31
|
+
return {
|
|
32
|
+
scaleFrom: zoomStart + Math.random() * (zoomEnd - zoomStart),
|
|
33
|
+
scaleTo: zoomStart + Math.random() * (zoomEnd - zoomStart),
|
|
34
|
+
txFrom: -panXAmount + Math.random() * 2 * panXAmount,
|
|
35
|
+
txTo: -panXAmount + Math.random() * 2 * panXAmount,
|
|
36
|
+
tyFrom: -panYAmount + Math.random() * 2 * panYAmount,
|
|
37
|
+
tyTo: -panYAmount + Math.random() * 2 * panYAmount,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
29
41
|
const KenBurnsView = forwardRef((props, ref) => {
|
|
30
42
|
const {
|
|
31
43
|
imageWidth,
|
|
@@ -43,14 +55,24 @@ const KenBurnsView = forwardRef((props, ref) => {
|
|
|
43
55
|
...rest
|
|
44
56
|
} = props;
|
|
45
57
|
|
|
58
|
+
const w = imageWidth || 0;
|
|
59
|
+
const h = imageHeight || 0;
|
|
60
|
+
const panXAmount = w * panX;
|
|
61
|
+
const panYAmount = h * panY;
|
|
62
|
+
|
|
46
63
|
const progress = useRef(new Animated.Value(0)).current;
|
|
47
64
|
const animationRef = useRef(null);
|
|
65
|
+
const configRef = useRef({ zoomStart, zoomEnd, panXAmount, panYAmount });
|
|
66
|
+
configRef.current = { zoomStart, zoomEnd, panXAmount, panYAmount };
|
|
67
|
+
|
|
68
|
+
const [cycle, setCycle] = useState(() =>
|
|
69
|
+
getRandomCycle(zoomStart, zoomEnd, panXAmount, panYAmount),
|
|
70
|
+
);
|
|
71
|
+
const cycleRef = useRef(cycle);
|
|
72
|
+
cycleRef.current = cycle;
|
|
48
73
|
|
|
49
74
|
const randomRef = useRef({
|
|
50
|
-
phase: Math.random(),
|
|
51
75
|
durationFactor: 0.7 + Math.random() * 0.6,
|
|
52
|
-
panXSign: Math.random() > 0.5 ? 1 : -1,
|
|
53
|
-
panYSign: Math.random() > 0.5 ? 1 : -1,
|
|
54
76
|
}).current;
|
|
55
77
|
|
|
56
78
|
const stop = useCallback(() => {
|
|
@@ -60,32 +82,37 @@ const KenBurnsView = forwardRef((props, ref) => {
|
|
|
60
82
|
}
|
|
61
83
|
}, []);
|
|
62
84
|
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
85
|
+
const runNextCycle = useCallback(() => {
|
|
86
|
+
const { zoomStart: zs, zoomEnd: ze, panXAmount: pxa, panYAmount: pya } =
|
|
87
|
+
configRef.current;
|
|
88
|
+
const prev = cycleRef.current;
|
|
89
|
+
const nextTo = getRandomCycle(zs, ze, pxa, pya);
|
|
90
|
+
setCycle({
|
|
91
|
+
scaleFrom: prev.scaleTo,
|
|
92
|
+
scaleTo: nextTo.scaleTo,
|
|
93
|
+
txFrom: prev.txTo,
|
|
94
|
+
txTo: nextTo.txTo,
|
|
95
|
+
tyFrom: prev.tyTo,
|
|
96
|
+
tyTo: nextTo.tyTo,
|
|
97
|
+
});
|
|
98
|
+
progress.setValue(0);
|
|
67
99
|
const d = Math.round(duration * randomRef.durationFactor);
|
|
100
|
+
animationRef.current = Animated.timing(progress, {
|
|
101
|
+
toValue: 1,
|
|
102
|
+
duration: d,
|
|
103
|
+
easing: Easing.inOut(Easing.quad),
|
|
104
|
+
useNativeDriver: true,
|
|
105
|
+
});
|
|
106
|
+
animationRef.current.start(({ finished }) => {
|
|
107
|
+
if (finished) runNextCycle();
|
|
108
|
+
});
|
|
109
|
+
}, [duration, progress, randomRef.durationFactor]);
|
|
68
110
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
easing: Easing.inOut(Easing.quad),
|
|
75
|
-
useNativeDriver: true,
|
|
76
|
-
}),
|
|
77
|
-
Animated.timing(progress, {
|
|
78
|
-
toValue: 0,
|
|
79
|
-
duration: d,
|
|
80
|
-
easing: Easing.inOut(Easing.quad),
|
|
81
|
-
useNativeDriver: true,
|
|
82
|
-
}),
|
|
83
|
-
]),
|
|
84
|
-
{resetBeforeIteration: false},
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
animationRef.current.start();
|
|
88
|
-
}, [duration, progress, stop, randomRef]);
|
|
111
|
+
const start = useCallback(() => {
|
|
112
|
+
stop();
|
|
113
|
+
progress.setValue(0);
|
|
114
|
+
runNextCycle();
|
|
115
|
+
}, [progress, runNextCycle, stop]);
|
|
89
116
|
|
|
90
117
|
useImperativeHandle(
|
|
91
118
|
ref,
|
|
@@ -110,24 +137,19 @@ const KenBurnsView = forwardRef((props, ref) => {
|
|
|
110
137
|
};
|
|
111
138
|
}, [autoStart, start, stop]);
|
|
112
139
|
|
|
113
|
-
const w = imageWidth || 0;
|
|
114
|
-
const h = imageHeight || 0;
|
|
115
|
-
const panXAmount = w * panX * randomRef.panXSign;
|
|
116
|
-
const panYAmount = h * panY * randomRef.panYSign;
|
|
117
|
-
|
|
118
140
|
const translateX = progress.interpolate({
|
|
119
141
|
inputRange: [0, 1],
|
|
120
|
-
outputRange: [
|
|
142
|
+
outputRange: [cycle.txFrom, cycle.txTo],
|
|
121
143
|
});
|
|
122
144
|
|
|
123
145
|
const translateY = progress.interpolate({
|
|
124
146
|
inputRange: [0, 1],
|
|
125
|
-
outputRange: [
|
|
147
|
+
outputRange: [cycle.tyFrom, cycle.tyTo],
|
|
126
148
|
});
|
|
127
149
|
|
|
128
150
|
const scale = progress.interpolate({
|
|
129
151
|
inputRange: [0, 1],
|
|
130
|
-
outputRange: [
|
|
152
|
+
outputRange: [cycle.scaleFrom, cycle.scaleTo],
|
|
131
153
|
});
|
|
132
154
|
|
|
133
155
|
const innerSize = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-kenburns-view",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "KenBurns Image Effect for React Native",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -23,9 +23,6 @@
|
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"react-native": "*"
|
|
25
25
|
},
|
|
26
|
-
"directories": {
|
|
27
|
-
"example": "example"
|
|
28
|
-
},
|
|
29
26
|
"dependencies": {
|
|
30
27
|
"prop-types": "^15.8.1"
|
|
31
28
|
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Dimensions, ScrollView, StyleSheet, Text, View } from 'react-native';
|
|
3
|
-
import { StatusBar } from 'expo-status-bar';
|
|
4
|
-
import KenBurnsView from 'react-native-kenburns-view';
|
|
5
|
-
|
|
6
|
-
const { width } = Dimensions.get('window');
|
|
7
|
-
const CARD_HEIGHT = 220;
|
|
8
|
-
|
|
9
|
-
const IMAGES = [
|
|
10
|
-
{ uri: 'https://i.ibb.co/pjVgZTnf/image1.jpg' },
|
|
11
|
-
{ uri: 'https://i.ibb.co/39n0tghZ/image2.jpg' },
|
|
12
|
-
{ uri: 'https://i.ibb.co/YBcr2vHf/image3.jpg' },
|
|
13
|
-
];
|
|
14
|
-
const PLACEHOLDER = { uri: 'https://i.ibb.co/21NytpJN/placeholder.jpg' };
|
|
15
|
-
|
|
16
|
-
export default function App() {
|
|
17
|
-
return (
|
|
18
|
-
<View style={styles.container}>
|
|
19
|
-
<StatusBar style="light" />
|
|
20
|
-
<Text style={styles.title}>Ken Burns Effect</Text>
|
|
21
|
-
<Text style={styles.subtitle}>Zoom + pan</Text>
|
|
22
|
-
<ScrollView
|
|
23
|
-
style={styles.scroll}
|
|
24
|
-
contentContainerStyle={styles.scrollContent}
|
|
25
|
-
showsVerticalScrollIndicator={false}
|
|
26
|
-
>
|
|
27
|
-
{IMAGES.map((source, index) => (
|
|
28
|
-
<View key={index} style={styles.card}>
|
|
29
|
-
<KenBurnsView
|
|
30
|
-
imageWidth={width}
|
|
31
|
-
imageHeight={CARD_HEIGHT}
|
|
32
|
-
sourceUri={source}
|
|
33
|
-
placeholderSource={PLACEHOLDER}
|
|
34
|
-
duration={15000}
|
|
35
|
-
zoomStart={1}
|
|
36
|
-
zoomEnd={1.2}
|
|
37
|
-
panX={0.08}
|
|
38
|
-
panY={0.08}
|
|
39
|
-
/>
|
|
40
|
-
</View>
|
|
41
|
-
))}
|
|
42
|
-
</ScrollView>
|
|
43
|
-
</View>
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const styles = StyleSheet.create({
|
|
48
|
-
container: {
|
|
49
|
-
flex: 1,
|
|
50
|
-
backgroundColor: '#1a1a2e',
|
|
51
|
-
},
|
|
52
|
-
title: {
|
|
53
|
-
fontSize: 28,
|
|
54
|
-
fontWeight: '700',
|
|
55
|
-
color: '#eee',
|
|
56
|
-
textAlign: 'center',
|
|
57
|
-
marginTop: 60,
|
|
58
|
-
marginBottom: 4,
|
|
59
|
-
},
|
|
60
|
-
subtitle: {
|
|
61
|
-
fontSize: 16,
|
|
62
|
-
color: '#888',
|
|
63
|
-
textAlign: 'center',
|
|
64
|
-
marginBottom: 24,
|
|
65
|
-
},
|
|
66
|
-
scroll: {
|
|
67
|
-
flex: 1,
|
|
68
|
-
},
|
|
69
|
-
scrollContent: {
|
|
70
|
-
paddingBottom: 40,
|
|
71
|
-
},
|
|
72
|
-
card: {
|
|
73
|
-
width,
|
|
74
|
-
height: CARD_HEIGHT,
|
|
75
|
-
marginBottom: 16,
|
|
76
|
-
overflow: 'hidden',
|
|
77
|
-
},
|
|
78
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Ken Burns Example
|
|
2
|
-
|
|
3
|
-
Expo app that demonstrates `react-native-kenburns-view` with sample images (zoom + pan).
|
|
4
|
-
|
|
5
|
-
## Run
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
cd example/kenburns-example
|
|
9
|
-
npm install
|
|
10
|
-
npx expo start
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Then press `i` for iOS simulator or `a` for Android emulator, or scan the QR code with Expo Go.
|
|
14
|
-
|
|
15
|
-
If you see "Unable to resolve module" for the library, restart with a clean cache: `npx expo start --clear`.
|
|
16
|
-
|
|
17
|
-
## Notes
|
|
18
|
-
|
|
19
|
-
- The library is linked via `"react-native-kenburns-view": "file:../.."`.
|
|
20
|
-
- Sample images are loaded from remote URLs (see `App.js`).
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"expo": {
|
|
3
|
-
"name": "KenBurns Example",
|
|
4
|
-
"slug": "kenburns-example",
|
|
5
|
-
"version": "1.0.0",
|
|
6
|
-
"orientation": "portrait",
|
|
7
|
-
"userInterfaceStyle": "light",
|
|
8
|
-
"ios": {
|
|
9
|
-
"supportsTablet": true,
|
|
10
|
-
"bundleIdentifier": "com.anonymous.kenburns-example"
|
|
11
|
-
},
|
|
12
|
-
"android": {
|
|
13
|
-
"adaptiveIcon": {
|
|
14
|
-
"backgroundColor": "#1a1a2e"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"plugins": [
|
|
18
|
-
"expo-asset"
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# This `.xcode.env` file is versioned and is used to source the environment
|
|
2
|
-
# used when running script phases inside Xcode.
|
|
3
|
-
# To customize your local environment, you can create an `.xcode.env.local`
|
|
4
|
-
# file that is not versioned.
|
|
5
|
-
|
|
6
|
-
# NODE_BINARY variable contains the PATH to the node executable.
|
|
7
|
-
#
|
|
8
|
-
# Customize the NODE_BINARY variable here.
|
|
9
|
-
# For example, to use nvm with brew, add the following line
|
|
10
|
-
# . "$(brew --prefix nvm)/nvm.sh" --no-use
|
|
11
|
-
export NODE_BINARY=$(command -v node)
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
internal import Expo
|
|
2
|
-
import React
|
|
3
|
-
import ReactAppDependencyProvider
|
|
4
|
-
|
|
5
|
-
@main
|
|
6
|
-
class AppDelegate: ExpoAppDelegate {
|
|
7
|
-
var window: UIWindow?
|
|
8
|
-
|
|
9
|
-
var reactNativeDelegate: ExpoReactNativeFactoryDelegate?
|
|
10
|
-
var reactNativeFactory: RCTReactNativeFactory?
|
|
11
|
-
|
|
12
|
-
public override func application(
|
|
13
|
-
_ application: UIApplication,
|
|
14
|
-
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
|
|
15
|
-
) -> Bool {
|
|
16
|
-
let delegate = ReactNativeDelegate()
|
|
17
|
-
let factory = ExpoReactNativeFactory(delegate: delegate)
|
|
18
|
-
delegate.dependencyProvider = RCTAppDependencyProvider()
|
|
19
|
-
|
|
20
|
-
reactNativeDelegate = delegate
|
|
21
|
-
reactNativeFactory = factory
|
|
22
|
-
|
|
23
|
-
#if os(iOS) || os(tvOS)
|
|
24
|
-
window = UIWindow(frame: UIScreen.main.bounds)
|
|
25
|
-
factory.startReactNative(
|
|
26
|
-
withModuleName: "main",
|
|
27
|
-
in: window,
|
|
28
|
-
launchOptions: launchOptions)
|
|
29
|
-
#endif
|
|
30
|
-
|
|
31
|
-
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Linking API
|
|
35
|
-
public override func application(
|
|
36
|
-
_ app: UIApplication,
|
|
37
|
-
open url: URL,
|
|
38
|
-
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
|
|
39
|
-
) -> Bool {
|
|
40
|
-
return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Universal Links
|
|
44
|
-
public override func application(
|
|
45
|
-
_ application: UIApplication,
|
|
46
|
-
continue userActivity: NSUserActivity,
|
|
47
|
-
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
|
|
48
|
-
) -> Bool {
|
|
49
|
-
let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
|
|
50
|
-
return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {
|
|
55
|
-
// Extension point for config-plugins
|
|
56
|
-
|
|
57
|
-
override func sourceURL(for bridge: RCTBridge) -> URL? {
|
|
58
|
-
// needed to return the correct URL for expo-dev-client.
|
|
59
|
-
bridge.bundleURL ?? bundleURL()
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
override func bundleURL() -> URL? {
|
|
63
|
-
#if DEBUG
|
|
64
|
-
return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: ".expo/.virtual-metro-entry")
|
|
65
|
-
#else
|
|
66
|
-
return Bundle.main.url(forResource: "main", withExtension: "jsbundle")
|
|
67
|
-
#endif
|
|
68
|
-
}
|
|
69
|
-
}
|
|
Binary file
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"colors": [
|
|
3
|
-
{
|
|
4
|
-
"color": {
|
|
5
|
-
"components": {
|
|
6
|
-
"alpha": "1.000",
|
|
7
|
-
"blue": "1.00000000000000",
|
|
8
|
-
"green": "1.00000000000000",
|
|
9
|
-
"red": "1.00000000000000"
|
|
10
|
-
},
|
|
11
|
-
"color-space": "srgb"
|
|
12
|
-
},
|
|
13
|
-
"idiom": "universal"
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"info": {
|
|
17
|
-
"version": 1,
|
|
18
|
-
"author": "expo"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>CADisableMinimumFrameDurationOnPhone</key>
|
|
6
|
-
<true/>
|
|
7
|
-
<key>CFBundleDevelopmentRegion</key>
|
|
8
|
-
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
9
|
-
<key>CFBundleDisplayName</key>
|
|
10
|
-
<string>KenBurns Example</string>
|
|
11
|
-
<key>CFBundleExecutable</key>
|
|
12
|
-
<string>$(EXECUTABLE_NAME)</string>
|
|
13
|
-
<key>CFBundleIdentifier</key>
|
|
14
|
-
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
15
|
-
<key>CFBundleInfoDictionaryVersion</key>
|
|
16
|
-
<string>6.0</string>
|
|
17
|
-
<key>CFBundleName</key>
|
|
18
|
-
<string>$(PRODUCT_NAME)</string>
|
|
19
|
-
<key>CFBundlePackageType</key>
|
|
20
|
-
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
|
21
|
-
<key>CFBundleShortVersionString</key>
|
|
22
|
-
<string>1.0.0</string>
|
|
23
|
-
<key>CFBundleSignature</key>
|
|
24
|
-
<string>????</string>
|
|
25
|
-
<key>CFBundleURLTypes</key>
|
|
26
|
-
<array>
|
|
27
|
-
<dict>
|
|
28
|
-
<key>CFBundleURLSchemes</key>
|
|
29
|
-
<array>
|
|
30
|
-
<string>com.anonymous.kenburns-example</string>
|
|
31
|
-
</array>
|
|
32
|
-
</dict>
|
|
33
|
-
</array>
|
|
34
|
-
<key>CFBundleVersion</key>
|
|
35
|
-
<string>1</string>
|
|
36
|
-
<key>LSMinimumSystemVersion</key>
|
|
37
|
-
<string>12.0</string>
|
|
38
|
-
<key>LSRequiresIPhoneOS</key>
|
|
39
|
-
<true/>
|
|
40
|
-
<key>NSAppTransportSecurity</key>
|
|
41
|
-
<dict>
|
|
42
|
-
<key>NSAllowsArbitraryLoads</key>
|
|
43
|
-
<false/>
|
|
44
|
-
<key>NSAllowsLocalNetworking</key>
|
|
45
|
-
<true/>
|
|
46
|
-
</dict>
|
|
47
|
-
<key>RCTNewArchEnabled</key>
|
|
48
|
-
<true/>
|
|
49
|
-
<key>UILaunchStoryboardName</key>
|
|
50
|
-
<string>SplashScreen</string>
|
|
51
|
-
<key>UIRequiredDeviceCapabilities</key>
|
|
52
|
-
<array>
|
|
53
|
-
<string>arm64</string>
|
|
54
|
-
</array>
|
|
55
|
-
<key>UIRequiresFullScreen</key>
|
|
56
|
-
<false/>
|
|
57
|
-
<key>UIStatusBarStyle</key>
|
|
58
|
-
<string>UIStatusBarStyleDefault</string>
|
|
59
|
-
<key>UISupportedInterfaceOrientations</key>
|
|
60
|
-
<array>
|
|
61
|
-
<string>UIInterfaceOrientationPortrait</string>
|
|
62
|
-
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
|
63
|
-
</array>
|
|
64
|
-
<key>UISupportedInterfaceOrientations~ipad</key>
|
|
65
|
-
<array>
|
|
66
|
-
<string>UIInterfaceOrientationPortrait</string>
|
|
67
|
-
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
|
68
|
-
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
69
|
-
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
70
|
-
</array>
|
|
71
|
-
<key>UIUserInterfaceStyle</key>
|
|
72
|
-
<string>Light</string>
|
|
73
|
-
<key>UIViewControllerBasedStatusBarAppearance</key>
|
|
74
|
-
<false/>
|
|
75
|
-
</dict>
|
|
76
|
-
</plist>
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>NSPrivacyAccessedAPITypes</key>
|
|
6
|
-
<array>
|
|
7
|
-
<dict>
|
|
8
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
9
|
-
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
|
10
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
11
|
-
<array>
|
|
12
|
-
<string>CA92.1</string>
|
|
13
|
-
</array>
|
|
14
|
-
</dict>
|
|
15
|
-
<dict>
|
|
16
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
17
|
-
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
|
18
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
19
|
-
<array>
|
|
20
|
-
<string>0A2A.1</string>
|
|
21
|
-
<string>3B52.1</string>
|
|
22
|
-
<string>C617.1</string>
|
|
23
|
-
</array>
|
|
24
|
-
</dict>
|
|
25
|
-
<dict>
|
|
26
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
27
|
-
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
|
|
28
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
29
|
-
<array>
|
|
30
|
-
<string>E174.1</string>
|
|
31
|
-
<string>85F4.1</string>
|
|
32
|
-
</array>
|
|
33
|
-
</dict>
|
|
34
|
-
<dict>
|
|
35
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
36
|
-
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
|
37
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
38
|
-
<array>
|
|
39
|
-
<string>35F9.1</string>
|
|
40
|
-
</array>
|
|
41
|
-
</dict>
|
|
42
|
-
</array>
|
|
43
|
-
<key>NSPrivacyCollectedDataTypes</key>
|
|
44
|
-
<array/>
|
|
45
|
-
<key>NSPrivacyTracking</key>
|
|
46
|
-
<false/>
|
|
47
|
-
</dict>
|
|
48
|
-
</plist>
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="24093.7" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
|
|
3
|
-
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
|
4
|
-
<dependencies>
|
|
5
|
-
<deployment identifier="iOS"/>
|
|
6
|
-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="24053.1"/>
|
|
7
|
-
<capability name="Named colors" minToolsVersion="9.0"/>
|
|
8
|
-
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
|
9
|
-
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
|
10
|
-
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
11
|
-
</dependencies>
|
|
12
|
-
<scenes>
|
|
13
|
-
<scene sceneID="EXPO-SCENE-1">
|
|
14
|
-
<objects>
|
|
15
|
-
<viewController storyboardIdentifier="SplashScreenViewController" id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
|
|
16
|
-
<view key="view" userInteractionEnabled="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="EXPO-ContainerView" userLabel="ContainerView">
|
|
17
|
-
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
|
18
|
-
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
19
|
-
<subviews/>
|
|
20
|
-
<viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ"/>
|
|
21
|
-
<constraints>
|
|
22
|
-
<constraint firstItem="EXPO-SplashScreen" firstAttribute="centerY" secondItem="EXPO-ContainerView" secondAttribute="centerY" id="0VC-Wk-OaO"/>
|
|
23
|
-
<constraint firstItem="EXPO-SplashScreen" firstAttribute="centerX" secondItem="EXPO-ContainerView" secondAttribute="centerX" id="zR4-NK-mVN"/>
|
|
24
|
-
</constraints>
|
|
25
|
-
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
|
26
|
-
</view>
|
|
27
|
-
</viewController>
|
|
28
|
-
<placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
|
29
|
-
</objects>
|
|
30
|
-
<point key="canvasLocation" x="0.0" y="0.0"/>
|
|
31
|
-
</scene>
|
|
32
|
-
</scenes>
|
|
33
|
-
<resources>
|
|
34
|
-
<image name="SplashScreenLogo" width="100" height="90.333335876464844"/>
|
|
35
|
-
<systemColor name="systemBackgroundColor">
|
|
36
|
-
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
|
37
|
-
</systemColor>
|
|
38
|
-
</resources>
|
|
39
|
-
</document>
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>EXUpdatesCheckOnLaunch</key>
|
|
6
|
-
<string>ALWAYS</string>
|
|
7
|
-
<key>EXUpdatesEnabled</key>
|
|
8
|
-
<false/>
|
|
9
|
-
<key>EXUpdatesLaunchWaitMs</key>
|
|
10
|
-
<integer>0</integer>
|
|
11
|
-
</dict>
|
|
12
|
-
</plist>
|