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.
Files changed (29) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +6 -4
  3. package/lib/KenBurnsView.js +57 -35
  4. package/package.json +1 -4
  5. package/example/kenburns-example/App.js +0 -78
  6. package/example/kenburns-example/README.md +0 -20
  7. package/example/kenburns-example/app.json +0 -21
  8. package/example/kenburns-example/babel.config.js +0 -6
  9. package/example/kenburns-example/ios/.xcode.env +0 -11
  10. package/example/kenburns-example/ios/KenBurnsExample/AppDelegate.swift +0 -69
  11. package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png +0 -0
  12. package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/AppIcon.appiconset/Contents.json +0 -14
  13. package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/Contents.json +0 -6
  14. package/example/kenburns-example/ios/KenBurnsExample/Images.xcassets/SplashScreenBackground.colorset/Contents.json +0 -20
  15. package/example/kenburns-example/ios/KenBurnsExample/Info.plist +0 -76
  16. package/example/kenburns-example/ios/KenBurnsExample/KenBurnsExample-Bridging-Header.h +0 -3
  17. package/example/kenburns-example/ios/KenBurnsExample/KenBurnsExample.entitlements +0 -5
  18. package/example/kenburns-example/ios/KenBurnsExample/PrivacyInfo.xcprivacy +0 -48
  19. package/example/kenburns-example/ios/KenBurnsExample/SplashScreen.storyboard +0 -39
  20. package/example/kenburns-example/ios/KenBurnsExample/Supporting/Expo.plist +0 -12
  21. package/example/kenburns-example/ios/KenBurnsExample.xcodeproj/project.pbxproj +0 -544
  22. package/example/kenburns-example/ios/KenBurnsExample.xcodeproj/xcshareddata/xcschemes/KenBurnsExample.xcscheme +0 -88
  23. package/example/kenburns-example/ios/KenBurnsExample.xcworkspace/contents.xcworkspacedata +0 -10
  24. package/example/kenburns-example/ios/Podfile +0 -63
  25. package/example/kenburns-example/ios/Podfile.lock +0 -2195
  26. package/example/kenburns-example/ios/Podfile.properties.json +0 -4
  27. package/example/kenburns-example/metro.config.js +0 -20
  28. package/example/kenburns-example/package-lock.json +0 -7160
  29. 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
- Version: 5.1.1
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 example app runs on **Expo SDK 55** (React Native 0.83.2).
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/Example
41
+ ## Demo
40
42
 
41
43
  ![kenburns view demo](https://media.giphy.com/media/792gUTkm8Gic8AieQl/giphy.gif)
42
44
 
43
- Run the example app (Expo) from `example/kenburns-example`: `cd example/kenburns-example && npm install && npx expo start`.
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
 
@@ -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 start = useCallback(() => {
64
- stop();
65
- progress.setValue(randomRef.phase);
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
- animationRef.current = Animated.loop(
70
- Animated.sequence([
71
- Animated.timing(progress, {
72
- toValue: 1,
73
- duration: d,
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: [-panXAmount, panXAmount],
142
+ outputRange: [cycle.txFrom, cycle.txTo],
121
143
  });
122
144
 
123
145
  const translateY = progress.interpolate({
124
146
  inputRange: [0, 1],
125
- outputRange: [-panYAmount, panYAmount],
147
+ outputRange: [cycle.tyFrom, cycle.tyTo],
126
148
  });
127
149
 
128
150
  const scale = progress.interpolate({
129
151
  inputRange: [0, 1],
130
- outputRange: [zoomStart, zoomEnd],
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.1.1",
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,6 +0,0 @@
1
- module.exports = function (api) {
2
- api.cache(true);
3
- return {
4
- presets: ['babel-preset-expo'],
5
- };
6
- };
@@ -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
- }
@@ -1,14 +0,0 @@
1
- {
2
- "images": [
3
- {
4
- "filename": "App-Icon-1024x1024@1x.png",
5
- "idiom": "universal",
6
- "platform": "ios",
7
- "size": "1024x1024"
8
- }
9
- ],
10
- "info": {
11
- "version": 1,
12
- "author": "expo"
13
- }
14
- }
@@ -1,6 +0,0 @@
1
- {
2
- "info" : {
3
- "version" : 1,
4
- "author" : "expo"
5
- }
6
- }
@@ -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,3 +0,0 @@
1
- //
2
- // Use this file to import your target's public headers that you would like to expose to Swift.
3
- //
@@ -1,5 +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
- </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>