├── .bundle
    └── config
├── .eslintrc.js
├── .gitignore
├── .node-version
├── .prettierrc.js
├── .watchmanconfig
├── App.tsx
├── Gemfile
├── Gemfile.lock
├── README.md
├── __tests__
    └── App-test.tsx
├── android
    ├── app
    │   ├── build.gradle
    │   ├── debug.keystore
    │   ├── proguard-rules.pro
    │   └── src
    │   │   ├── debug
    │   │       ├── AndroidManifest.xml
    │   │       └── java
    │   │       │   └── com
    │   │       │       └── rnwidget
    │   │       │           └── ReactNativeFlipper.java
    │   │   ├── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── java
    │   │       │   └── com
    │   │       │   │   └── rnwidget
    │   │       │   │       ├── MainActivity.java
    │   │       │   │       ├── MainApplication.java
    │   │       │   │       ├── SharedStorage.java
    │   │       │   │       ├── SharedStoragePackager.java
    │   │       │   │       └── StreakWidget.java
    │   │       └── res
    │   │       │   ├── drawable-nodpi
    │   │       │       ├── duo.png
    │   │       │       ├── example_appwidget_preview.png
    │   │       │       ├── streak.png
    │   │       │       └── widget_preview.png
    │   │       │   ├── drawable-v21
    │   │       │       ├── app_widget_background.xml
    │   │       │       └── app_widget_inner_view_background.xml
    │   │       │   ├── drawable
    │   │       │       ├── rn_edit_text_material.xml
    │   │       │       └── widget_canvas.xml
    │   │       │   ├── layout
    │   │       │       └── streak_widget.xml
    │   │       │   ├── mipmap-hdpi
    │   │       │       ├── ic_launcher.png
    │   │       │       └── ic_launcher_round.png
    │   │       │   ├── mipmap-mdpi
    │   │       │       ├── ic_launcher.png
    │   │       │       └── ic_launcher_round.png
    │   │       │   ├── mipmap-xhdpi
    │   │       │       ├── ic_launcher.png
    │   │       │       └── ic_launcher_round.png
    │   │       │   ├── mipmap-xxhdpi
    │   │       │       ├── ic_launcher.png
    │   │       │       └── ic_launcher_round.png
    │   │       │   ├── mipmap-xxxhdpi
    │   │       │       ├── ic_launcher.png
    │   │       │       └── ic_launcher_round.png
    │   │       │   ├── values-night-v31
    │   │       │       └── themes.xml
    │   │       │   ├── values-night
    │   │       │       └── colors.xml
    │   │       │   ├── values-v21
    │   │       │       └── styles.xml
    │   │       │   ├── values-v31
    │   │       │       ├── styles.xml
    │   │       │       └── themes.xml
    │   │       │   ├── values
    │   │       │       ├── attrs.xml
    │   │       │       ├── colors.xml
    │   │       │       ├── dimens.xml
    │   │       │       ├── strings.xml
    │   │       │       ├── styles.xml
    │   │       │       └── themes.xml
    │   │       │   └── xml
    │   │       │       └── streak_widget_info.xml
    │   │   └── release
    │   │       └── java
    │   │           └── com
    │   │               └── rnwidget
    │   │                   └── ReactNativeFlipper.java
    ├── build.gradle
    ├── gradle.properties
    ├── gradle
    │   └── wrapper
    │   │   ├── gradle-wrapper.jar
    │   │   └── gradle-wrapper.properties
    ├── gradlew
    ├── gradlew.bat
    └── settings.gradle
├── android_run.sh
├── app.json
├── art
    └── output.gif
├── babel.config.js
├── index.js
├── ios
    ├── .xcode.env
    ├── Podfile
    ├── Podfile.lock
    ├── RNWidget.xcodeproj
    │   ├── project.pbxproj
    │   └── xcshareddata
    │   │   └── xcschemes
    │   │       └── RNWidget.xcscheme
    ├── RNWidget.xcworkspace
    │   ├── contents.xcworkspacedata
    │   └── xcshareddata
    │   │   └── IDEWorkspaceChecks.plist
    ├── RNWidget
    │   ├── AppDelegate.h
    │   ├── AppDelegate.mm
    │   ├── Images.xcassets
    │   │   ├── AppIcon.appiconset
    │   │   │   └── Contents.json
    │   │   └── Contents.json
    │   ├── Info.plist
    │   ├── LaunchScreen.storyboard
    │   ├── RNWidget.entitlements
    │   └── main.m
    ├── RNWidgetDemo
    │   ├── Assets.xcassets
    │   │   ├── AccentColor.colorset
    │   │   │   └── Contents.json
    │   │   ├── AppIcon.appiconset
    │   │   │   └── Contents.json
    │   │   ├── Contents.json
    │   │   └── WidgetBackground.colorset
    │   │   │   └── Contents.json
    │   ├── Info.plist
    │   ├── RNWidgetDemo.intentdefinition
    │   ├── RNWidgetDemo.swift
    │   ├── Timeline Providers
    │   │   ├── Entries
    │   │   │   └── StreakEntry.swift
    │   │   └── StreakTimelineProvider.swift
    │   ├── Views
    │   │   └── StreakWidgetEntryView.swift
    │   └── Widgets
    │   │   └── StreakWidget.swift
    ├── RNWidgetTests
    │   ├── Info.plist
    │   └── RNWidgetTests.m
    └── StreakWidget
    │   ├── Assets.xcassets
    │       ├── AccentColor.colorset
    │       │   └── Contents.json
    │       ├── AppIcon.appiconset
    │       │   └── Contents.json
    │       ├── Contents.json
    │       ├── WidgetBackground.colorset
    │       │   └── Contents.json
    │       ├── duo.imageset
    │       │   ├── Contents.json
    │       │   ├── duo-1.png
    │       │   ├── duo-2.png
    │       │   └── duo.png
    │       └── streak.imageset
    │       │   ├── Contents.json
    │       │   ├── streak-1.png
    │       │   ├── streak-2.png
    │       │   └── streak.png
    │   ├── Info.plist
    │   ├── StreakWidget.entitlements
    │   ├── StreakWidget.intentdefinition
    │   └── StreakWidget.swift
├── iphone_run.sh
├── metro.config.js
├── package-lock.json
├── package.json
├── podinstall.sh
├── src
    ├── App.js
    └── assets
    │   ├── bea.png
    │   ├── triangle.png
    │   └── triangle_.png
├── tsconfig.json
└── yarn.lock
/.bundle/config:
--------------------------------------------------------------------------------
1 | BUNDLE_PATH: "vendor/bundle"
2 | BUNDLE_FORCE_RUBY_PLATFORM: 1
3 | 
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   root: true,
3 |   extends: '@react-native-community',
4 | };
5 | 
--------------------------------------------------------------------------------
/.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 | ios/.xcode.env.local
24 | 
25 | # Android/IntelliJ
26 | #
27 | build/
28 | .idea
29 | .gradle
30 | local.properties
31 | *.iml
32 | *.hprof
33 | .cxx/
34 | *.keystore
35 | !debug.keystore
36 | 
37 | # node.js
38 | #
39 | node_modules/
40 | npm-debug.log
41 | yarn-error.log
42 | 
43 | # fastlane
44 | #
45 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
46 | # screenshots whenever they are needed.
47 | # For more information about the recommended setup visit:
48 | # https://docs.fastlane.tools/best-practices/source-control/
49 | 
50 | **/fastlane/report.xml
51 | **/fastlane/Preview.html
52 | **/fastlane/screenshots
53 | **/fastlane/test_output
54 | 
55 | # Bundle artifact
56 | *.jsbundle
57 | 
58 | # Ruby / CocoaPods
59 | /ios/Pods/
60 | /vendor/bundle/
61 | 
62 | # Temporary files created by Metro to check the health of the file watcher
63 | .metro-health-check*
64 | 
--------------------------------------------------------------------------------
/.node-version:
--------------------------------------------------------------------------------
1 | 18
2 | 
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   arrowParens: 'avoid',
3 |   bracketSameLine: true,
4 |   bracketSpacing: false,
5 |   singleQuote: true,
6 |   trailingComma: 'all',
7 | };
8 | 
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/App.tsx:
--------------------------------------------------------------------------------
 1 | import React, {useState} from 'react';
 2 | import {View, TextInput, StyleSheet, NativeModules} from 'react-native';
 3 | import SharedGroupPreferences from 'react-native-shared-group-preferences';
 4 | 
 5 | const group = 'group.streak';
 6 | 
 7 | const SharedStorage = NativeModules.SharedStorage;
 8 | 
 9 | const App = () => {
10 |   const [text, setText] = useState('');
11 |   const widgetData = {
12 |     text,
13 |   };
14 | 
15 |   const handleSubmit = async () => {
16 |     try {
17 |       // iOS
18 |       await SharedGroupPreferences.setItem('widgetKey', widgetData, group);
19 |     } catch (error) {
20 |       console.log({error});
21 |     }
22 |     const value = `${text} days`;
23 |     // Android
24 |     SharedStorage.set(JSON.stringify({text: value}));
25 |   };
26 | 
27 |   return (
28 |     
29 |        setText(newText)}
32 |         value={text}
33 |         returnKeyType="send"
34 |         onEndEditing={handleSubmit}
35 |         placeholder="Enter the text to display..."
36 |       />
37 |     
38 |   );
39 | };
40 | 
41 | export default App;
42 | 
43 | const styles = StyleSheet.create({
44 |   container: {
45 |     marginTop: '50%',
46 |     paddingHorizontal: 24,
47 |   },
48 |   input: {
49 |     width: '100%',
50 |     borderBottomWidth: 1,
51 |     fontSize: 20,
52 |     minHeight: 40,
53 |   },
54 | });
55 | 
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 | 
3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
4 | ruby '>= 2.6.10'
5 | 
6 | gem 'cocoapods', '>= 1.11.3'
7 | 
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
 1 | GEM
 2 |   remote: https://rubygems.org/
 3 |   specs:
 4 |     CFPropertyList (3.0.6)
 5 |       rexml
 6 |     activesupport (7.0.4.3)
 7 |       concurrent-ruby (~> 1.0, >= 1.0.2)
 8 |       i18n (>= 1.6, < 2)
 9 |       minitest (>= 5.1)
10 |       tzinfo (~> 2.0)
11 |     addressable (2.8.4)
12 |       public_suffix (>= 2.0.2, < 6.0)
13 |     algoliasearch (1.27.5)
14 |       httpclient (~> 2.8, >= 2.8.3)
15 |       json (>= 1.5.1)
16 |     atomos (0.1.3)
17 |     claide (1.1.0)
18 |     cocoapods (1.12.1)
19 |       addressable (~> 2.8)
20 |       claide (>= 1.0.2, < 2.0)
21 |       cocoapods-core (= 1.12.1)
22 |       cocoapods-deintegrate (>= 1.0.3, < 2.0)
23 |       cocoapods-downloader (>= 1.6.0, < 2.0)
24 |       cocoapods-plugins (>= 1.0.0, < 2.0)
25 |       cocoapods-search (>= 1.0.0, < 2.0)
26 |       cocoapods-trunk (>= 1.6.0, < 2.0)
27 |       cocoapods-try (>= 1.1.0, < 2.0)
28 |       colored2 (~> 3.1)
29 |       escape (~> 0.0.4)
30 |       fourflusher (>= 2.3.0, < 3.0)
31 |       gh_inspector (~> 1.0)
32 |       molinillo (~> 0.8.0)
33 |       nap (~> 1.0)
34 |       ruby-macho (>= 2.3.0, < 3.0)
35 |       xcodeproj (>= 1.21.0, < 2.0)
36 |     cocoapods-core (1.12.1)
37 |       activesupport (>= 5.0, < 8)
38 |       addressable (~> 2.8)
39 |       algoliasearch (~> 1.0)
40 |       concurrent-ruby (~> 1.1)
41 |       fuzzy_match (~> 2.0.4)
42 |       nap (~> 1.0)
43 |       netrc (~> 0.11)
44 |       public_suffix (~> 4.0)
45 |       typhoeus (~> 1.0)
46 |     cocoapods-deintegrate (1.0.5)
47 |     cocoapods-downloader (1.6.3)
48 |     cocoapods-plugins (1.0.0)
49 |       nap
50 |     cocoapods-search (1.0.1)
51 |     cocoapods-trunk (1.6.0)
52 |       nap (>= 0.8, < 2.0)
53 |       netrc (~> 0.11)
54 |     cocoapods-try (1.2.0)
55 |     colored2 (3.1.2)
56 |     concurrent-ruby (1.2.2)
57 |     escape (0.0.4)
58 |     ethon (0.16.0)
59 |       ffi (>= 1.15.0)
60 |     ffi (1.15.5)
61 |     fourflusher (2.3.1)
62 |     fuzzy_match (2.0.4)
63 |     gh_inspector (1.1.3)
64 |     httpclient (2.8.3)
65 |     i18n (1.13.0)
66 |       concurrent-ruby (~> 1.0)
67 |     json (2.6.3)
68 |     minitest (5.18.0)
69 |     molinillo (0.8.0)
70 |     nanaimo (0.3.0)
71 |     nap (1.1.0)
72 |     netrc (0.11.0)
73 |     public_suffix (4.0.7)
74 |     rexml (3.2.5)
75 |     ruby-macho (2.5.1)
76 |     typhoeus (1.4.0)
77 |       ethon (>= 0.9.0)
78 |     tzinfo (2.0.6)
79 |       concurrent-ruby (~> 1.0)
80 |     xcodeproj (1.22.0)
81 |       CFPropertyList (>= 2.3.3, < 4.0)
82 |       atomos (~> 0.1.3)
83 |       claide (>= 1.0.2, < 2.0)
84 |       colored2 (~> 3.1)
85 |       nanaimo (~> 0.3.0)
86 |       rexml (~> 3.2.4)
87 | 
88 | PLATFORMS
89 |   ruby
90 | 
91 | DEPENDENCIES
92 |   cocoapods (>= 1.11.3)
93 | 
94 | RUBY VERSION
95 |    ruby 2.7.5p203
96 | 
97 | BUNDLED WITH
98 |    2.1.4
99 | 
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | ## About
 4 | 
 5 | This project was created for the tutorial [React Native: Ultimate Guide to Create a Home Screen Widget for iOS and Android](https://medium.com/gitconnected/react-native-ultimate-guide-to-create-a-home-screen-widget-for-ios-and-android-83708dc1844c). This doesn't include the explanation of the project and how it should be configured. To see the complete solution, you can go to [this git repository](https://github.com/Rushit013/RNWidget.git).
 6 | 
 7 | ## Quick start
 8 | 
 9 | You can start by cloning this repository
10 | 
11 | - Clone this repository `git clone https://github.com/Rushit013/RNWidget.git`
12 | - Go to your project's root folder and run `npm install`.
13 | - If you are using Xcode 12.5 or higher got to /ios and execute `pod install --`repo-update`
14 | - Run `npm run ios` or `npm run android` to start your application!
15 | 
16 | (Using yarn: `yarn ios` or `yarn android`)
17 | 
18 | ## Output
19 | 
20 | https://github.com/Rushit013/RNWidget/assets/60570262/4163859a-38e8-4d1a-9365-80e017029ff4
21 | 
22 | ---
23 | 
24 | ## Give a Star ⭐
25 | 
26 | If you like this project then give it a **Github** star by pressing the **Star** button ⭐
27 | 
28 | ---
29 | 
30 | #### Note: 
31 | I'm currently looking for good **Freelance** and **Contract-based** work **remotely (worldwide)**. So, if you have a good opportunity that matches my skills experience then you can contact me on my **[Linkedin](https://www.linkedin.com/in/rushitjivani)** or my email id **rushitjivani1999@gmail.com** 🙌
32 | 
33 | ---
34 | 
35 | ## Author 👨💻
36 | 
37 | - **Rushit Jivani** - **[Linkedin](https://www.linkedin.com/in/rushitjivani)**, **[Medium](https://medium.com/@rushitjivani)**, **[Github](https://github.com/Rushit013)**, **[Portfolio](https://rushitjivani.netlify.app/)**  
38 | 
--------------------------------------------------------------------------------
/__tests__/App-test.tsx:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @format
 3 |  */
 4 | 
 5 | import 'react-native';
 6 | import React from 'react';
 7 | import App from '../App';
 8 | 
 9 | // Note: test renderer must be required after react-native.
10 | import renderer from 'react-test-renderer';
11 | 
12 | it('renders correctly', () => {
13 |   renderer.create();
14 | });
15 | 
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
  1 | apply plugin: "com.android.application"
  2 | apply plugin: "com.facebook.react"
  3 | 
  4 | import com.android.build.OutputFile
  5 | 
  6 | /**
  7 |  * This is the configuration block to customize your React Native Android app.
  8 |  * By default you don't need to apply any configuration, just uncomment the lines you need.
  9 |  */
 10 | react {
 11 |     /* Folders */
 12 |     //   The root of your project, i.e. where "package.json" lives. Default is '..'
 13 |     // root = file("../")
 14 |     //   The folder where the react-native NPM package is. Default is ../node_modules/react-native
 15 |     // reactNativeDir = file("../node_modules/react-native")
 16 |     //   The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
 17 |     // codegenDir = file("../node_modules/react-native-codegen")
 18 |     //   The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
 19 |     // cliFile = file("../node_modules/react-native/cli.js")
 20 | 
 21 |     /* Variants */
 22 |     //   The list of variants to that are debuggable. For those we're going to
 23 |     //   skip the bundling of the JS bundle and the assets. By default is just 'debug'.
 24 |     //   If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
 25 |     // debuggableVariants = ["liteDebug", "prodDebug"]
 26 | 
 27 |     /* Bundling */
 28 |     //   A list containing the node command and its flags. Default is just 'node'.
 29 |     // nodeExecutableAndArgs = ["node"]
 30 |     //
 31 |     //   The command to run when bundling. By default is 'bundle'
 32 |     // bundleCommand = "ram-bundle"
 33 |     //
 34 |     //   The path to the CLI configuration file. Default is empty.
 35 |     // bundleConfig = file(../rn-cli.config.js)
 36 |     //
 37 |     //   The name of the generated asset file containing your JS bundle
 38 |     // bundleAssetName = "MyApplication.android.bundle"
 39 |     //
 40 |     //   The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
 41 |     // entryFile = file("../js/MyApplication.android.js")
 42 |     //
 43 |     //   A list of extra flags to pass to the 'bundle' commands.
 44 |     //   See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
 45 |     // extraPackagerArgs = []
 46 | 
 47 |     /* Hermes Commands */
 48 |     //   The hermes compiler command to run. By default it is 'hermesc'
 49 |     // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
 50 |     //
 51 |     //   The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
 52 |     // hermesFlags = ["-O", "-output-source-map"]
 53 | }
 54 | 
 55 | /**
 56 |  * Set this to true to create four separate APKs instead of one,
 57 |  * one for each native architecture. This is useful if you don't
 58 |  * use App Bundles (https://developer.android.com/guide/app-bundle/)
 59 |  * and want to have separate APKs to upload to the Play Store.
 60 |  */
 61 | def enableSeparateBuildPerCPUArchitecture = false
 62 | 
 63 | /**
 64 |  * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
 65 |  */
 66 | def enableProguardInReleaseBuilds = false
 67 | 
 68 | /**
 69 |  * The preferred build flavor of JavaScriptCore (JSC)
 70 |  *
 71 |  * For example, to use the international variant, you can use:
 72 |  * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
 73 |  *
 74 |  * The international variant includes ICU i18n library and necessary data
 75 |  * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
 76 |  * give correct results when using with locales other than en-US. Note that
 77 |  * this variant is about 6MiB larger per architecture than default.
 78 |  */
 79 | def jscFlavor = 'org.webkit:android-jsc:+'
 80 | 
 81 | /**
 82 |  * Private function to get the list of Native Architectures you want to build.
 83 |  * This reads the value from reactNativeArchitectures in your gradle.properties
 84 |  * file and works together with the --active-arch-only flag of react-native run-android.
 85 |  */
 86 | def reactNativeArchitectures() {
 87 |     def value = project.getProperties().get("reactNativeArchitectures")
 88 |     return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
 89 | }
 90 | 
 91 | android {
 92 |     ndkVersion rootProject.ext.ndkVersion
 93 | 
 94 |     compileSdkVersion rootProject.ext.compileSdkVersion
 95 | 
 96 |     namespace "com.rnwidget"
 97 |     defaultConfig {
 98 |         applicationId "com.rnwidget"
 99 |         minSdkVersion rootProject.ext.minSdkVersion
100 |         targetSdkVersion rootProject.ext.targetSdkVersion
101 |         versionCode 1
102 |         versionName "1.0"
103 |     }
104 | 
105 |     splits {
106 |         abi {
107 |             reset()
108 |             enable enableSeparateBuildPerCPUArchitecture
109 |             universalApk false  // If true, also generate a universal APK
110 |             include (*reactNativeArchitectures())
111 |         }
112 |     }
113 |     signingConfigs {
114 |         debug {
115 |             storeFile file('debug.keystore')
116 |             storePassword 'android'
117 |             keyAlias 'androiddebugkey'
118 |             keyPassword 'android'
119 |         }
120 |     }
121 |     buildTypes {
122 |         debug {
123 |             signingConfig signingConfigs.debug
124 |         }
125 |         release {
126 |             // Caution! In production, you need to generate your own keystore file.
127 |             // see https://reactnative.dev/docs/signed-apk-android.
128 |             signingConfig signingConfigs.debug
129 |             minifyEnabled enableProguardInReleaseBuilds
130 |             proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
131 |         }
132 |     }
133 |     buildFeatures {
134 |         viewBinding true
135 |     }
136 | 
137 |     // applicationVariants are e.g. debug, release
138 |     applicationVariants.all { variant ->
139 |         variant.outputs.each { output ->
140 |             // For each separate APK per architecture, set a unique version code as described here:
141 |             // https://developer.android.com/studio/build/configure-apk-splits.html
142 |             // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
143 |             def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
144 |             def abi = output.getFilter(OutputFile.ABI)
145 |             if (abi != null) {  // null for the universal-debug, universal-release variants
146 |                 output.versionCodeOverride =
147 |                         defaultConfig.versionCode * 1000 + versionCodes.get(abi)
148 |             }
149 | 
150 |         }
151 |     }
152 | }
153 | 
154 | dependencies {
155 |     // The version of react-native is set by the React Native Gradle Plugin
156 |     implementation("com.facebook.react:react-android")
157 | 
158 |     implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
159 | 
160 |     debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
161 |     debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
162 |         exclude group:'com.squareup.okhttp3', module:'okhttp'
163 |     }
164 | 
165 |     debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
166 |     if (hermesEnabled.toBoolean()) {
167 |         implementation("com.facebook.react:hermes-android")
168 |     } else {
169 |         implementation jscFlavor
170 |     }
171 | }
172 | 
173 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
174 | 
--------------------------------------------------------------------------------
/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/debug.keystore
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # By default, the flags in this file are appended to flags specified
 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
 4 | # You can edit the include path and order by changing the proguardFiles
 5 | # directive in build.gradle.
 6 | #
 7 | # For more details, see
 8 | #   http://developer.android.com/guide/developing/tools/proguard.html
 9 | 
10 | # Add any project specific keep options here:
11 | 
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 4 | 
 5 |     
 6 | 
 7 |     
11 |         
12 |     
13 | 
14 | 
--------------------------------------------------------------------------------
/android/app/src/debug/java/com/rnwidget/ReactNativeFlipper.java:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * Copyright (c) Meta Platforms, Inc. and affiliates.
 3 |  *
 4 |  * 
This source code is licensed under the MIT license found in the LICENSE file in the root
 5 |  * directory of this source tree.
 6 |  */
 7 | package com.rnwidget;
 8 | 
 9 | import android.content.Context;
10 | import com.facebook.flipper.android.AndroidFlipperClient;
11 | import com.facebook.flipper.android.utils.FlipperUtils;
12 | import com.facebook.flipper.core.FlipperClient;
13 | import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
14 | import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
15 | import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
16 | import com.facebook.flipper.plugins.inspector.DescriptorMapping;
17 | import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
18 | import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
19 | import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
20 | import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
21 | import com.facebook.react.ReactInstanceEventListener;
22 | import com.facebook.react.ReactInstanceManager;
23 | import com.facebook.react.bridge.ReactContext;
24 | import com.facebook.react.modules.network.NetworkingModule;
25 | import okhttp3.OkHttpClient;
26 | 
27 | /**
28 |  * Class responsible of loading Flipper inside your React Native application. This is the debug
29 |  * flavor of it. Here you can add your own plugins and customize the Flipper setup.
30 |  */
31 | public class ReactNativeFlipper {
32 |   public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
33 |     if (FlipperUtils.shouldEnableFlipper(context)) {
34 |       final FlipperClient client = AndroidFlipperClient.getInstance(context);
35 | 
36 |       client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
37 |       client.addPlugin(new DatabasesFlipperPlugin(context));
38 |       client.addPlugin(new SharedPreferencesFlipperPlugin(context));
39 |       client.addPlugin(CrashReporterPlugin.getInstance());
40 | 
41 |       NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
42 |       NetworkingModule.setCustomClientBuilder(
43 |           new NetworkingModule.CustomClientBuilder() {
44 |             @Override
45 |             public void apply(OkHttpClient.Builder builder) {
46 |               builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
47 |             }
48 |           });
49 |       client.addPlugin(networkFlipperPlugin);
50 |       client.start();
51 | 
52 |       // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
53 |       // Hence we run if after all native modules have been initialized
54 |       ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
55 |       if (reactContext == null) {
56 |         reactInstanceManager.addReactInstanceEventListener(
57 |             new ReactInstanceEventListener() {
58 |               @Override
59 |               public void onReactContextInitialized(ReactContext reactContext) {
60 |                 reactInstanceManager.removeReactInstanceEventListener(this);
61 |                 reactContext.runOnNativeModulesQueueThread(
62 |                     new Runnable() {
63 |                       @Override
64 |                       public void run() {
65 |                         client.addPlugin(new FrescoFlipperPlugin());
66 |                       }
67 |                     });
68 |               }
69 |             });
70 |       } else {
71 |         client.addPlugin(new FrescoFlipperPlugin());
72 |       }
73 |     }
74 |   }
75 | }
76 | 
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 |     
 5 | 
 6 |     
13 |         
16 |             
17 |                 
18 |             
19 | 
20 |             
23 |         
24 | 
25 |         
32 |             
33 |                 
34 | 
35 |                 
36 |             
37 |         
38 |     
39 | 
40 | 
--------------------------------------------------------------------------------
/android/app/src/main/java/com/rnwidget/MainActivity.java:
--------------------------------------------------------------------------------
 1 | package com.rnwidget;
 2 | 
 3 | import com.facebook.react.ReactActivity;
 4 | import com.facebook.react.ReactActivityDelegate;
 5 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
 6 | import com.facebook.react.defaults.DefaultReactActivityDelegate;
 7 | 
 8 | public class MainActivity extends ReactActivity {
 9 | 
10 |   /**
11 |    * Returns the name of the main component registered from JavaScript. This is used to schedule
12 |    * rendering of the component.
13 |    */
14 |   @Override
15 |   protected String getMainComponentName() {
16 |     return "RNWidget";
17 |   }
18 | 
19 |   /**
20 |    * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
21 |    * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
22 |    * (aka React 18) with two boolean flags.
23 |    */
24 |   @Override
25 |   protected ReactActivityDelegate createReactActivityDelegate() {
26 |     return new DefaultReactActivityDelegate(
27 |         this,
28 |         getMainComponentName(),
29 |         // If you opted-in for the New Architecture, we enable the Fabric Renderer.
30 |         DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled
31 |         // If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18).
32 |         DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled
33 |         );
34 |   }
35 | }
36 | 
--------------------------------------------------------------------------------
/android/app/src/main/java/com/rnwidget/MainApplication.java:
--------------------------------------------------------------------------------
 1 | package com.rnwidget;
 2 | 
 3 | import android.app.Application;
 4 | import com.facebook.react.PackageList;
 5 | import com.facebook.react.ReactApplication;
 6 | import com.facebook.react.ReactNativeHost;
 7 | import com.facebook.react.ReactPackage;
 8 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
 9 | import com.facebook.react.defaults.DefaultReactNativeHost;
10 | import com.facebook.soloader.SoLoader;
11 | import java.util.List;
12 | 
13 | public class MainApplication extends Application implements ReactApplication {
14 | 
15 |   private final ReactNativeHost mReactNativeHost =
16 |       new DefaultReactNativeHost(this) {
17 |         @Override
18 |         public boolean getUseDeveloperSupport() {
19 |           return BuildConfig.DEBUG;
20 |         }
21 | 
22 |         @Override
23 |         protected List getPackages() {
24 |           @SuppressWarnings("UnnecessaryLocalVariable")
25 |           List packages = new PackageList(this).getPackages();
26 |           // Packages that cannot be autolinked yet can be added manually here, for example:
27 |           // packages.add(new MyReactNativePackage());
28 |           packages.add(new SharedStoragePackager());
29 |           return packages;
30 |         }
31 | 
32 |         @Override
33 |         protected String getJSMainModuleName() {
34 |           return "index";
35 |         }
36 | 
37 |         @Override
38 |         protected boolean isNewArchEnabled() {
39 |           return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
40 |         }
41 | 
42 |         @Override
43 |         protected Boolean isHermesEnabled() {
44 |           return BuildConfig.IS_HERMES_ENABLED;
45 |         }
46 |       };
47 | 
48 |   @Override
49 |   public ReactNativeHost getReactNativeHost() {
50 |     return mReactNativeHost;
51 |   }
52 | 
53 |   @Override
54 |   public void onCreate() {
55 |     super.onCreate();
56 |     SoLoader.init(this, /* native exopackage */ false);
57 |     if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
58 |       // If you opted-in for the New Architecture, we load the native entry point for this app.
59 |       DefaultNewArchitectureEntryPoint.load();
60 |     }
61 |     ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
62 |   }
63 | }
64 | 
--------------------------------------------------------------------------------
/android/app/src/main/java/com/rnwidget/SharedStorage.java:
--------------------------------------------------------------------------------
 1 | package com.rnwidget;
 2 | 
 3 | import com.facebook.react.bridge.NativeModule;
 4 | import com.facebook.react.bridge.ReactApplicationContext;
 5 | import com.facebook.react.bridge.ReactContext;
 6 | import com.facebook.react.bridge.ReactContextBaseJavaModule;
 7 | import com.facebook.react.bridge.ReactMethod;
 8 | 
 9 | import android.app.Activity;
10 | import android.appwidget.AppWidgetManager;
11 | import android.content.ComponentName;
12 | import android.content.Context;
13 | import android.content.Intent;
14 | import android.content.SharedPreferences;
15 | import android.util.Log;
16 | 
17 | public class SharedStorage extends ReactContextBaseJavaModule {
18 | 	ReactApplicationContext context;
19 | 
20 | 	public SharedStorage(ReactApplicationContext reactContext) {
21 | 		super(reactContext);
22 | 		context = reactContext;
23 | 	}
24 | 
25 | 	@Override
26 | 	public String getName() {
27 | 		return "SharedStorage";
28 | 	}
29 | 
30 | 	@ReactMethod
31 | 	public void set(String message) {
32 | 		SharedPreferences.Editor editor = context.getSharedPreferences("DATA", Context.MODE_PRIVATE).edit();
33 | 		editor.putString("appData", message);
34 | 		editor.commit();
35 | 
36 | 		Intent intent = new Intent(getCurrentActivity().getApplicationContext(), StreakWidget.class);
37 | 		intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
38 | 		int[] ids = AppWidgetManager.getInstance(getCurrentActivity().getApplicationContext()).getAppWidgetIds(new ComponentName(getCurrentActivity().getApplicationContext(), StreakWidget.class));
39 | 		intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
40 | 		getCurrentActivity().getApplicationContext().sendBroadcast(intent);
41 | 
42 | 	}
43 | }
--------------------------------------------------------------------------------
/android/app/src/main/java/com/rnwidget/SharedStoragePackager.java:
--------------------------------------------------------------------------------
 1 | package com.rnwidget;
 2 | 
 3 | import com.facebook.react.ReactPackage;
 4 | import com.facebook.react.bridge.JavaScriptModule;
 5 | import com.facebook.react.bridge.NativeModule;
 6 | import com.facebook.react.bridge.ReactApplicationContext;
 7 | import com.facebook.react.uimanager.ViewManager;
 8 | 
 9 | import java.util.ArrayList;
10 | import java.util.Collections;
11 | import java.util.List;
12 | 
13 | public class SharedStoragePackager implements ReactPackage {
14 | 
15 | 	@Override
16 | 	public List createViewManagers(ReactApplicationContext reactContext) {
17 | 		return Collections.emptyList();
18 | 	}
19 | 
20 | 	@Override
21 | 	public List createNativeModules(ReactApplicationContext reactContext) {
22 | 		List modules = new ArrayList<>();
23 | 
24 | 		modules.add(new SharedStorage(reactContext));
25 | 
26 | 		return modules;
27 | 	}
28 | 
29 | }
--------------------------------------------------------------------------------
/android/app/src/main/java/com/rnwidget/StreakWidget.java:
--------------------------------------------------------------------------------
 1 | package com.rnwidget;
 2 | 
 3 | import android.appwidget.AppWidgetManager;
 4 | import android.appwidget.AppWidgetProvider;
 5 | import android.content.Context;
 6 | import android.widget.RemoteViews;
 7 | import android.content.SharedPreferences;
 8 | 
 9 | import org.json.JSONException;
10 | import org.json.JSONObject;
11 | 
12 | /**
13 |  * Implementation of App Widget functionality.
14 |  */
15 | public class StreakWidget extends AppWidgetProvider {
16 | 
17 |     static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
18 |                                 int appWidgetId) {
19 | 
20 |         try {
21 |             SharedPreferences sharedPref = context.getSharedPreferences("DATA", Context.MODE_PRIVATE);
22 |             String appString = sharedPref.getString("appData", "{\"text\":'no data'}");
23 |             JSONObject appData = new JSONObject(appString);
24 |             RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.streak_widget);
25 |             views.setTextViewText(R.id.appwidget_text, appData.getString("text"));
26 |             appWidgetManager.updateAppWidget(appWidgetId, views);
27 |         }catch (JSONException e) {
28 |             e.printStackTrace();
29 |         }
30 |     }
31 | 
32 |     @Override
33 |     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
34 |         // There may be multiple widgets active, so update all of them
35 |         for (int appWidgetId : appWidgetIds) {
36 |             updateAppWidget(context, appWidgetManager, appWidgetId);
37 |         }
38 |     }
39 | 
40 |     @Override
41 |     public void onEnabled(Context context) {
42 |         // Enter relevant functionality for when the first widget is created
43 |     }
44 | 
45 |     @Override
46 |     public void onDisabled(Context context) {
47 |         // Enter relevant functionality for when the last widget is disabled
48 |     }
49 | }
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-nodpi/duo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/drawable-nodpi/duo.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-nodpi/example_appwidget_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/drawable-nodpi/example_appwidget_preview.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-nodpi/streak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/drawable-nodpi/streak.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-nodpi/widget_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/drawable-nodpi/widget_preview.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/app_widget_background.xml:
--------------------------------------------------------------------------------
 1 | 
 5 | 
 7 | 
 8 |     
 9 |     
10 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/app_widget_inner_view_background.xml:
--------------------------------------------------------------------------------
 1 | 
 5 | 
 7 | 
 8 |     
 9 |     
10 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/rn_edit_text_material.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
16 | 
21 | 
22 |     
23 |         
32 |         33 |
34 |     
35 | 
36 | 
37 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/widget_canvas.xml:
--------------------------------------------------------------------------------
 1 | 
 2 |     
 7 |     
 8 | 
 9 |     
14 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/streak_widget.xml:
--------------------------------------------------------------------------------
 1 | 
12 | 
13 |     
20 | 
21 |         
26 | 
27 |         
39 | 
40 |     
41 | 
42 |     
51 | 
52 |     
59 | 
60 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night-v31/themes.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
 6 |     
10 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 | 
2 |     #FFE1F5FE
3 |     #FF81D4FA
4 |     #FF039BE5
5 |     #FF01579B
6 |     #141e24
7 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
 8 | 
 9 |     
14 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values-v31/styles.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
 9 | 
10 |     
16 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values-v31/themes.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
 7 |     
11 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 | 
2 |     
3 |         
4 |         
5 |         
6 |     
7 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | 
2 |     #FFE1F5FE
3 |     #FF81D4FA
4 |     #FF039BE5
5 |     #FF01579B
6 |     #FFFFFF
7 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 |     
 8 |     0dp
 9 | 
10 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | 
2 |     RNWidget
3 |     EXAMPLE
4 |     Add widget
5 |     This is an app widget description
6 | 
7 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
 4 |     
 8 | 
 9 |     
13 | 
14 |     
18 | 
19 | 
20 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
12 | 
13 |     
17 | 
--------------------------------------------------------------------------------
/android/app/src/main/res/xml/streak_widget_info.xml:
--------------------------------------------------------------------------------
 1 | 
 2 | 
--------------------------------------------------------------------------------
/android/app/src/release/java/com/rnwidget/ReactNativeFlipper.java:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * Copyright (c) Meta Platforms, Inc. and affiliates.
 3 |  *
 4 |  *
This source code is licensed under the MIT license found in the LICENSE file in the root
 5 |  * directory of this source tree.
 6 |  */
 7 | package com.rnwidget;
 8 | 
 9 | import android.content.Context;
10 | import com.facebook.react.ReactInstanceManager;
11 | 
12 | /**
13 |  * Class responsible of loading Flipper inside your React Native application. This is the release
14 |  * flavor of it so it's empty as we don't want to load Flipper.
15 |  */
16 | public class ReactNativeFlipper {
17 |   public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
18 |     // Do nothing as we don't want to initialize Flipper on Release.
19 |   }
20 | }
21 | 
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
 2 | 
 3 | buildscript {
 4 |     ext {
 5 |         buildToolsVersion = "31.0.0"
 6 |         minSdkVersion = 21
 7 |         compileSdkVersion = 31
 8 |         targetSdkVersion = 31
 9 | 
10 |         // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
11 |         ndkVersion = "23.1.7779620"
12 |     }
13 |     repositories {
14 |         google()
15 |         mavenCentral()
16 |     }
17 |     dependencies {
18 |         classpath("com.android.tools.build:gradle:7.2.1")
19 |         classpath("com.facebook.react:react-native-gradle-plugin")
20 |     }
21 | }
22 | 
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
 1 | # Project-wide Gradle settings.
 2 | 
 3 | # IDE (e.g. Android Studio) users:
 4 | # Gradle settings configured through the IDE *will override*
 5 | # any settings specified in this file.
 6 | 
 7 | # For more details on how to configure your build environment visit
 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
 9 | 
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
13 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
14 | 
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 | 
20 | # AndroidX package structure to make it clearer which packages are bundled with the
21 | # Android operating system, and which are packaged with your app's APK
22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
23 | android.useAndroidX=true
24 | # Automatically convert third-party libraries to use AndroidX
25 | android.enableJetifier=true
26 | 
27 | # Version of flipper SDK to use with React Native
28 | FLIPPER_VERSION=0.125.0
29 | 
30 | # Use this property to specify which architecture you want to build.
31 | # You can also override it from the CLI using
32 | # ./gradlew  -PreactNativeArchitectures=x86_64
33 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
34 | 
35 | # Use this property to enable support to the new architecture.
36 | # This will allow you to use TurboModules and the Fabric render in
37 | # your application. You should enable this flag either if you want
38 | # to write custom TurboModules/Fabric components OR use libraries that
39 | # are providing them.
40 | newArchEnabled=false
41 | 
42 | # Use this property to enable or disable the Hermes JS engine.
43 | # If set to false, you will be using JSC instead.
44 | hermesEnabled=true
45 | 
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | 
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
  1 | #!/bin/sh
  2 | 
  3 | #
  4 | # Copyright © 2015-2021 the original authors.
  5 | #
  6 | # Licensed under the Apache License, Version 2.0 (the "License");
  7 | # you may not use this file except in compliance with the License.
  8 | # You may obtain a copy of the License at
  9 | #
 10 | #      https://www.apache.org/licenses/LICENSE-2.0
 11 | #
 12 | # Unless required by applicable law or agreed to in writing, software
 13 | # distributed under the License is distributed on an "AS IS" BASIS,
 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15 | # See the License for the specific language governing permissions and
 16 | # limitations under the License.
 17 | #
 18 | 
 19 | ##############################################################################
 20 | #
 21 | #   Gradle start up script for POSIX generated by Gradle.
 22 | #
 23 | #   Important for running:
 24 | #
 25 | #   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
 26 | #       noncompliant, but you have some other compliant shell such as ksh or
 27 | #       bash, then to run this script, type that shell name before the whole
 28 | #       command line, like:
 29 | #
 30 | #           ksh Gradle
 31 | #
 32 | #       Busybox and similar reduced shells will NOT work, because this script
 33 | #       requires all of these POSIX shell features:
 34 | #         * functions;
 35 | #         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
 36 | #           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
 37 | #         * compound commands having a testable exit status, especially «case»;
 38 | #         * various built-in commands including «command», «set», and «ulimit».
 39 | #
 40 | #   Important for patching:
 41 | #
 42 | #   (2) This script targets any POSIX shell, so it avoids extensions provided
 43 | #       by Bash, Ksh, etc; in particular arrays are avoided.
 44 | #
 45 | #       The "traditional" practice of packing multiple parameters into a
 46 | #       space-separated string is a well documented source of bugs and security
 47 | #       problems, so this is (mostly) avoided, by progressively accumulating
 48 | #       options in "$@", and eventually passing that to Java.
 49 | #
 50 | #       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
 51 | #       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
 52 | #       see the in-line comments for details.
 53 | #
 54 | #       There are tweaks for specific operating systems such as AIX, CygWin,
 55 | #       Darwin, MinGW, and NonStop.
 56 | #
 57 | #   (3) This script is generated from the Groovy template
 58 | #       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 59 | #       within the Gradle project.
 60 | #
 61 | #       You can find Gradle at https://github.com/gradle/gradle/.
 62 | #
 63 | ##############################################################################
 64 | 
 65 | # Attempt to set APP_HOME
 66 | 
 67 | # Resolve links: $0 may be a link
 68 | app_path=$0
 69 | 
 70 | # Need this for daisy-chained symlinks.
 71 | while
 72 |     APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
 73 |     [ -h "$app_path" ]
 74 | do
 75 |     ls=$( ls -ld "$app_path" )
 76 |     link=${ls#*' -> '}
 77 |     case $link in             #(
 78 |       /*)   app_path=$link ;; #(
 79 |       *)    app_path=$APP_HOME$link ;;
 80 |     esac
 81 | done
 82 | 
 83 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 84 | 
 85 | APP_NAME="Gradle"
 86 | APP_BASE_NAME=${0##*/}
 87 | 
 88 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 89 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 90 | 
 91 | # Use the maximum available, or set MAX_FD != -1 to use that value.
 92 | MAX_FD=maximum
 93 | 
 94 | warn () {
 95 |     echo "$*"
 96 | } >&2
 97 | 
 98 | die () {
 99 |     echo
100 |     echo "$*"
101 |     echo
102 |     exit 1
103 | } >&2
104 | 
105 | # OS specific support (must be 'true' or 'false').
106 | cygwin=false
107 | msys=false
108 | darwin=false
109 | nonstop=false
110 | case "$( uname )" in                #(
111 |   CYGWIN* )         cygwin=true  ;; #(
112 |   Darwin* )         darwin=true  ;; #(
113 |   MSYS* | MINGW* )  msys=true    ;; #(
114 |   NONSTOP* )        nonstop=true ;;
115 | esac
116 | 
117 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
118 | 
119 | 
120 | # Determine the Java command to use to start the JVM.
121 | if [ -n "$JAVA_HOME" ] ; then
122 |     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
123 |         # IBM's JDK on AIX uses strange locations for the executables
124 |         JAVACMD=$JAVA_HOME/jre/sh/java
125 |     else
126 |         JAVACMD=$JAVA_HOME/bin/java
127 |     fi
128 |     if [ ! -x "$JAVACMD" ] ; then
129 |         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
130 | 
131 | Please set the JAVA_HOME variable in your environment to match the
132 | location of your Java installation."
133 |     fi
134 | else
135 |     JAVACMD=java
136 |     which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137 | 
138 | Please set the JAVA_HOME variable in your environment to match the
139 | location of your Java installation."
140 | fi
141 | 
142 | # Increase the maximum file descriptors if we can.
143 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
144 |     case $MAX_FD in #(
145 |       max*)
146 |         MAX_FD=$( ulimit -H -n ) ||
147 |             warn "Could not query maximum file descriptor limit"
148 |     esac
149 |     case $MAX_FD in  #(
150 |       '' | soft) :;; #(
151 |       *)
152 |         ulimit -n "$MAX_FD" ||
153 |             warn "Could not set maximum file descriptor limit to $MAX_FD"
154 |     esac
155 | fi
156 | 
157 | # Collect all arguments for the java command, stacking in reverse order:
158 | #   * args from the command line
159 | #   * the main class name
160 | #   * -classpath
161 | #   * -D...appname settings
162 | #   * --module-path (only if needed)
163 | #   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
164 | 
165 | # For Cygwin or MSYS, switch paths to Windows format before running java
166 | if "$cygwin" || "$msys" ; then
167 |     APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
168 |     CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
169 | 
170 |     JAVACMD=$( cygpath --unix "$JAVACMD" )
171 | 
172 |     # Now convert the arguments - kludge to limit ourselves to /bin/sh
173 |     for arg do
174 |         if
175 |             case $arg in                                #(
176 |               -*)   false ;;                            # don't mess with options #(
177 |               /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
178 |                     [ -e "$t" ] ;;                      #(
179 |               *)    false ;;
180 |             esac
181 |         then
182 |             arg=$( cygpath --path --ignore --mixed "$arg" )
183 |         fi
184 |         # Roll the args list around exactly as many times as the number of
185 |         # args, so each arg winds up back in the position where it started, but
186 |         # possibly modified.
187 |         #
188 |         # NB: a `for` loop captures its iteration list before it begins, so
189 |         # changing the positional parameters here affects neither the number of
190 |         # iterations, nor the values presented in `arg`.
191 |         shift                   # remove old arg
192 |         set -- "$@" "$arg"      # push replacement arg
193 |     done
194 | fi
195 | 
196 | # Collect all arguments for the java command;
197 | #   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
198 | #     shell script including quotes and variable substitutions, so put them in
199 | #     double quotes to make sure that they get re-expanded; and
200 | #   * put everything else in single quotes, so that it's not re-expanded.
201 | 
202 | set -- \
203 |         "-Dorg.gradle.appname=$APP_BASE_NAME" \
204 |         -classpath "$CLASSPATH" \
205 |         org.gradle.wrapper.GradleWrapperMain \
206 |         "$@"
207 | 
208 | # Use "xargs" to parse quoted args.
209 | #
210 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
211 | #
212 | # In Bash we could simply go:
213 | #
214 | #   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
215 | #   set -- "${ARGS[@]}" "$@"
216 | #
217 | # but POSIX shell has neither arrays nor command substitution, so instead we
218 | # post-process each arg (as a line of input to sed) to backslash-escape any
219 | # character that might be a shell metacharacter, then use eval to reverse
220 | # that process (while maintaining the separation between arguments), and wrap
221 | # the whole thing up as a single "set" statement.
222 | #
223 | # This will of course break if any of these variables contains a newline or
224 | # an unmatched quote.
225 | #
226 | 
227 | eval "set -- $(
228 |         printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
229 |         xargs -n1 |
230 |         sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
231 |         tr '\n' ' '
232 |     )" '"$@"'
233 | 
234 | exec "$JAVACMD" "$@"
235 | 
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
 1 | @rem
 2 | @rem Copyright 2015 the original author or authors.
 3 | @rem
 4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
 5 | @rem you may not use this file except in compliance with the License.
 6 | @rem You may obtain a copy of the License at
 7 | @rem
 8 | @rem      https://www.apache.org/licenses/LICENSE-2.0
 9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | 
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem  Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 | 
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 | 
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 | 
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 | 
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 | 
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 | 
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 | 
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 | 
51 | goto fail
52 | 
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 | 
57 | if exist "%JAVA_EXE%" goto execute
58 | 
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 | 
65 | goto fail
66 | 
67 | :execute
68 | @rem Setup the command line
69 | 
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 | 
72 | 
73 | @rem Execute Gradle
74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75 | 
76 | :end
77 | @rem End local scope for the variables with windows NT shell
78 | if "%ERRORLEVEL%"=="0" goto mainEnd
79 | 
80 | :fail
81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82 | rem the _cmd.exe /c_ return code!
83 | if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84 | exit /b 1
85 | 
86 | :mainEnd
87 | if "%OS%"=="Windows_NT" endlocal
88 | 
89 | :omega
90 | 
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'RNWidget'
2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 | include ':app'
4 | includeBuild('../node_modules/react-native-gradle-plugin')
5 | 
--------------------------------------------------------------------------------
/android_run.sh:
--------------------------------------------------------------------------------
1 | reset
2 | export ANDROID_HOME=/Users/mac/Library/Android/sdk
3 | export PATH=$PATH:$ANDROID_HOME/emulator
4 | export PATH=$PATH:$ANDROID_HOME/tools
5 | export PATH=$PATH:$ANDROID_HOME/tools/bin
6 | export PATH=$PATH:$ANDROID_HOME/platform-tools
7 | adb devices
8 | npx react-native run-android
9 | 
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 |   "name": "RNWidget",
3 |   "displayName": "RNWidget"
4 | }
--------------------------------------------------------------------------------
/art/output.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/art/output.gif
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   presets: ['module:metro-react-native-babel-preset'],
3 | };
4 | 
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @format
 3 |  */
 4 | 
 5 | import {AppRegistry} from 'react-native';
 6 | import App from './src/App';
 7 | import {name as appName} from './app.json';
 8 | 
 9 | AppRegistry.registerComponent(appName, () => App);
10 | 
--------------------------------------------------------------------------------
/ios/.xcode.env:
--------------------------------------------------------------------------------
 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)
12 | 
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
 1 | require_relative '../node_modules/react-native/scripts/react_native_pods'
 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
 3 | 
 4 | platform :ios, min_ios_version_supported
 5 | prepare_react_native_project!
 6 | 
 7 | # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
 8 | # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
 9 | #
10 | # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
11 | # ```js
12 | # module.exports = {
13 | #   dependencies: {
14 | #     ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
15 | # ```
16 | flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
17 | 
18 | linkage = ENV['USE_FRAMEWORKS']
19 | if linkage != nil
20 |   Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
21 |   use_frameworks! :linkage => linkage.to_sym
22 | end
23 | 
24 | target 'RNWidget' do
25 |   config = use_native_modules!
26 | 
27 |   # Flags change depending on the env values.
28 |   flags = get_default_flags()
29 | 
30 |   use_react_native!(
31 |     :path => config[:reactNativePath],
32 |     # Hermes is now enabled by default. Disable by setting this flag to false.
33 |     # Upcoming versions of React Native may rely on get_default_flags(), but
34 |     # we make it explicit here to aid in the React Native upgrade process.
35 |     :hermes_enabled => flags[:hermes_enabled],
36 |     :fabric_enabled => flags[:fabric_enabled],
37 |     # Enables Flipper.
38 |     #
39 |     # Note that if you have use_frameworks! enabled, Flipper will not work and
40 |     # you should disable the next line.
41 |     :flipper_configuration => flipper_config,
42 |     # An absolute path to your application root.
43 |     :app_path => "#{Pod::Config.instance.installation_root}/.."
44 |   )
45 | 
46 |   target 'RNWidgetTests' do
47 |     inherit! :complete
48 |     # Pods for testing
49 |   end
50 | 
51 |   post_install do |installer|
52 |     react_native_post_install(
53 |       installer,
54 |       # Set `mac_catalyst_enabled` to `true` in order to apply patches
55 |       # necessary for Mac Catalyst builds
56 |       :mac_catalyst_enabled => false
57 |     )
58 |     __apply_Xcode_12_5_M1_post_install_workaround(installer)
59 |   end
60 | end
61 | 
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
  1 | PODS:
  2 |   - boost (1.76.0)
  3 |   - CocoaAsyncSocket (7.6.5)
  4 |   - DoubleConversion (1.1.6)
  5 |   - FBLazyVector (0.71.7)
  6 |   - FBReactNativeSpec (0.71.7):
  7 |     - RCT-Folly (= 2021.07.22.00)
  8 |     - RCTRequired (= 0.71.7)
  9 |     - RCTTypeSafety (= 0.71.7)
 10 |     - React-Core (= 0.71.7)
 11 |     - React-jsi (= 0.71.7)
 12 |     - ReactCommon/turbomodule/core (= 0.71.7)
 13 |   - Flipper (0.125.0):
 14 |     - Flipper-Folly (~> 2.6)
 15 |     - Flipper-RSocket (~> 1.4)
 16 |   - Flipper-Boost-iOSX (1.76.0.1.11)
 17 |   - Flipper-DoubleConversion (3.2.0.1)
 18 |   - Flipper-Fmt (7.1.7)
 19 |   - Flipper-Folly (2.6.10):
 20 |     - Flipper-Boost-iOSX
 21 |     - Flipper-DoubleConversion
 22 |     - Flipper-Fmt (= 7.1.7)
 23 |     - Flipper-Glog
 24 |     - libevent (~> 2.1.12)
 25 |     - OpenSSL-Universal (= 1.1.1100)
 26 |   - Flipper-Glog (0.5.0.5)
 27 |   - Flipper-PeerTalk (0.0.4)
 28 |   - Flipper-RSocket (1.4.3):
 29 |     - Flipper-Folly (~> 2.6)
 30 |   - FlipperKit (0.125.0):
 31 |     - FlipperKit/Core (= 0.125.0)
 32 |   - FlipperKit/Core (0.125.0):
 33 |     - Flipper (~> 0.125.0)
 34 |     - FlipperKit/CppBridge
 35 |     - FlipperKit/FBCxxFollyDynamicConvert
 36 |     - FlipperKit/FBDefines
 37 |     - FlipperKit/FKPortForwarding
 38 |     - SocketRocket (~> 0.6.0)
 39 |   - FlipperKit/CppBridge (0.125.0):
 40 |     - Flipper (~> 0.125.0)
 41 |   - FlipperKit/FBCxxFollyDynamicConvert (0.125.0):
 42 |     - Flipper-Folly (~> 2.6)
 43 |   - FlipperKit/FBDefines (0.125.0)
 44 |   - FlipperKit/FKPortForwarding (0.125.0):
 45 |     - CocoaAsyncSocket (~> 7.6)
 46 |     - Flipper-PeerTalk (~> 0.0.4)
 47 |   - FlipperKit/FlipperKitHighlightOverlay (0.125.0)
 48 |   - FlipperKit/FlipperKitLayoutHelpers (0.125.0):
 49 |     - FlipperKit/Core
 50 |     - FlipperKit/FlipperKitHighlightOverlay
 51 |     - FlipperKit/FlipperKitLayoutTextSearchable
 52 |   - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0):
 53 |     - FlipperKit/Core
 54 |     - FlipperKit/FlipperKitHighlightOverlay
 55 |     - FlipperKit/FlipperKitLayoutHelpers
 56 |     - YogaKit (~> 1.18)
 57 |   - FlipperKit/FlipperKitLayoutPlugin (0.125.0):
 58 |     - FlipperKit/Core
 59 |     - FlipperKit/FlipperKitHighlightOverlay
 60 |     - FlipperKit/FlipperKitLayoutHelpers
 61 |     - FlipperKit/FlipperKitLayoutIOSDescriptors
 62 |     - FlipperKit/FlipperKitLayoutTextSearchable
 63 |     - YogaKit (~> 1.18)
 64 |   - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0)
 65 |   - FlipperKit/FlipperKitNetworkPlugin (0.125.0):
 66 |     - FlipperKit/Core
 67 |   - FlipperKit/FlipperKitReactPlugin (0.125.0):
 68 |     - FlipperKit/Core
 69 |   - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0):
 70 |     - FlipperKit/Core
 71 |   - FlipperKit/SKIOSNetworkPlugin (0.125.0):
 72 |     - FlipperKit/Core
 73 |     - FlipperKit/FlipperKitNetworkPlugin
 74 |   - fmt (6.2.1)
 75 |   - glog (0.3.5)
 76 |   - hermes-engine (0.71.7):
 77 |     - hermes-engine/Pre-built (= 0.71.7)
 78 |   - hermes-engine/Pre-built (0.71.7)
 79 |   - libevent (2.1.12)
 80 |   - OpenSSL-Universal (1.1.1100)
 81 |   - RCT-Folly (2021.07.22.00):
 82 |     - boost
 83 |     - DoubleConversion
 84 |     - fmt (~> 6.2.1)
 85 |     - glog
 86 |     - RCT-Folly/Default (= 2021.07.22.00)
 87 |   - RCT-Folly/Default (2021.07.22.00):
 88 |     - boost
 89 |     - DoubleConversion
 90 |     - fmt (~> 6.2.1)
 91 |     - glog
 92 |   - RCT-Folly/Futures (2021.07.22.00):
 93 |     - boost
 94 |     - DoubleConversion
 95 |     - fmt (~> 6.2.1)
 96 |     - glog
 97 |     - libevent
 98 |   - RCTRequired (0.71.7)
 99 |   - RCTTypeSafety (0.71.7):
100 |     - FBLazyVector (= 0.71.7)
101 |     - RCTRequired (= 0.71.7)
102 |     - React-Core (= 0.71.7)
103 |   - React (0.71.7):
104 |     - React-Core (= 0.71.7)
105 |     - React-Core/DevSupport (= 0.71.7)
106 |     - React-Core/RCTWebSocket (= 0.71.7)
107 |     - React-RCTActionSheet (= 0.71.7)
108 |     - React-RCTAnimation (= 0.71.7)
109 |     - React-RCTBlob (= 0.71.7)
110 |     - React-RCTImage (= 0.71.7)
111 |     - React-RCTLinking (= 0.71.7)
112 |     - React-RCTNetwork (= 0.71.7)
113 |     - React-RCTSettings (= 0.71.7)
114 |     - React-RCTText (= 0.71.7)
115 |     - React-RCTVibration (= 0.71.7)
116 |   - React-callinvoker (0.71.7)
117 |   - React-Codegen (0.71.7):
118 |     - FBReactNativeSpec
119 |     - hermes-engine
120 |     - RCT-Folly
121 |     - RCTRequired
122 |     - RCTTypeSafety
123 |     - React-Core
124 |     - React-jsi
125 |     - React-jsiexecutor
126 |     - ReactCommon/turbomodule/bridging
127 |     - ReactCommon/turbomodule/core
128 |   - React-Core (0.71.7):
129 |     - glog
130 |     - hermes-engine
131 |     - RCT-Folly (= 2021.07.22.00)
132 |     - React-Core/Default (= 0.71.7)
133 |     - React-cxxreact (= 0.71.7)
134 |     - React-hermes
135 |     - React-jsi (= 0.71.7)
136 |     - React-jsiexecutor (= 0.71.7)
137 |     - React-perflogger (= 0.71.7)
138 |     - Yoga
139 |   - React-Core/CoreModulesHeaders (0.71.7):
140 |     - glog
141 |     - hermes-engine
142 |     - RCT-Folly (= 2021.07.22.00)
143 |     - React-Core/Default
144 |     - React-cxxreact (= 0.71.7)
145 |     - React-hermes
146 |     - React-jsi (= 0.71.7)
147 |     - React-jsiexecutor (= 0.71.7)
148 |     - React-perflogger (= 0.71.7)
149 |     - Yoga
150 |   - React-Core/Default (0.71.7):
151 |     - glog
152 |     - hermes-engine
153 |     - RCT-Folly (= 2021.07.22.00)
154 |     - React-cxxreact (= 0.71.7)
155 |     - React-hermes
156 |     - React-jsi (= 0.71.7)
157 |     - React-jsiexecutor (= 0.71.7)
158 |     - React-perflogger (= 0.71.7)
159 |     - Yoga
160 |   - React-Core/DevSupport (0.71.7):
161 |     - glog
162 |     - hermes-engine
163 |     - RCT-Folly (= 2021.07.22.00)
164 |     - React-Core/Default (= 0.71.7)
165 |     - React-Core/RCTWebSocket (= 0.71.7)
166 |     - React-cxxreact (= 0.71.7)
167 |     - React-hermes
168 |     - React-jsi (= 0.71.7)
169 |     - React-jsiexecutor (= 0.71.7)
170 |     - React-jsinspector (= 0.71.7)
171 |     - React-perflogger (= 0.71.7)
172 |     - Yoga
173 |   - React-Core/RCTActionSheetHeaders (0.71.7):
174 |     - glog
175 |     - hermes-engine
176 |     - RCT-Folly (= 2021.07.22.00)
177 |     - React-Core/Default
178 |     - React-cxxreact (= 0.71.7)
179 |     - React-hermes
180 |     - React-jsi (= 0.71.7)
181 |     - React-jsiexecutor (= 0.71.7)
182 |     - React-perflogger (= 0.71.7)
183 |     - Yoga
184 |   - React-Core/RCTAnimationHeaders (0.71.7):
185 |     - glog
186 |     - hermes-engine
187 |     - RCT-Folly (= 2021.07.22.00)
188 |     - React-Core/Default
189 |     - React-cxxreact (= 0.71.7)
190 |     - React-hermes
191 |     - React-jsi (= 0.71.7)
192 |     - React-jsiexecutor (= 0.71.7)
193 |     - React-perflogger (= 0.71.7)
194 |     - Yoga
195 |   - React-Core/RCTBlobHeaders (0.71.7):
196 |     - glog
197 |     - hermes-engine
198 |     - RCT-Folly (= 2021.07.22.00)
199 |     - React-Core/Default
200 |     - React-cxxreact (= 0.71.7)
201 |     - React-hermes
202 |     - React-jsi (= 0.71.7)
203 |     - React-jsiexecutor (= 0.71.7)
204 |     - React-perflogger (= 0.71.7)
205 |     - Yoga
206 |   - React-Core/RCTImageHeaders (0.71.7):
207 |     - glog
208 |     - hermes-engine
209 |     - RCT-Folly (= 2021.07.22.00)
210 |     - React-Core/Default
211 |     - React-cxxreact (= 0.71.7)
212 |     - React-hermes
213 |     - React-jsi (= 0.71.7)
214 |     - React-jsiexecutor (= 0.71.7)
215 |     - React-perflogger (= 0.71.7)
216 |     - Yoga
217 |   - React-Core/RCTLinkingHeaders (0.71.7):
218 |     - glog
219 |     - hermes-engine
220 |     - RCT-Folly (= 2021.07.22.00)
221 |     - React-Core/Default
222 |     - React-cxxreact (= 0.71.7)
223 |     - React-hermes
224 |     - React-jsi (= 0.71.7)
225 |     - React-jsiexecutor (= 0.71.7)
226 |     - React-perflogger (= 0.71.7)
227 |     - Yoga
228 |   - React-Core/RCTNetworkHeaders (0.71.7):
229 |     - glog
230 |     - hermes-engine
231 |     - RCT-Folly (= 2021.07.22.00)
232 |     - React-Core/Default
233 |     - React-cxxreact (= 0.71.7)
234 |     - React-hermes
235 |     - React-jsi (= 0.71.7)
236 |     - React-jsiexecutor (= 0.71.7)
237 |     - React-perflogger (= 0.71.7)
238 |     - Yoga
239 |   - React-Core/RCTSettingsHeaders (0.71.7):
240 |     - glog
241 |     - hermes-engine
242 |     - RCT-Folly (= 2021.07.22.00)
243 |     - React-Core/Default
244 |     - React-cxxreact (= 0.71.7)
245 |     - React-hermes
246 |     - React-jsi (= 0.71.7)
247 |     - React-jsiexecutor (= 0.71.7)
248 |     - React-perflogger (= 0.71.7)
249 |     - Yoga
250 |   - React-Core/RCTTextHeaders (0.71.7):
251 |     - glog
252 |     - hermes-engine
253 |     - RCT-Folly (= 2021.07.22.00)
254 |     - React-Core/Default
255 |     - React-cxxreact (= 0.71.7)
256 |     - React-hermes
257 |     - React-jsi (= 0.71.7)
258 |     - React-jsiexecutor (= 0.71.7)
259 |     - React-perflogger (= 0.71.7)
260 |     - Yoga
261 |   - React-Core/RCTVibrationHeaders (0.71.7):
262 |     - glog
263 |     - hermes-engine
264 |     - RCT-Folly (= 2021.07.22.00)
265 |     - React-Core/Default
266 |     - React-cxxreact (= 0.71.7)
267 |     - React-hermes
268 |     - React-jsi (= 0.71.7)
269 |     - React-jsiexecutor (= 0.71.7)
270 |     - React-perflogger (= 0.71.7)
271 |     - Yoga
272 |   - React-Core/RCTWebSocket (0.71.7):
273 |     - glog
274 |     - hermes-engine
275 |     - RCT-Folly (= 2021.07.22.00)
276 |     - React-Core/Default (= 0.71.7)
277 |     - React-cxxreact (= 0.71.7)
278 |     - React-hermes
279 |     - React-jsi (= 0.71.7)
280 |     - React-jsiexecutor (= 0.71.7)
281 |     - React-perflogger (= 0.71.7)
282 |     - Yoga
283 |   - React-CoreModules (0.71.7):
284 |     - RCT-Folly (= 2021.07.22.00)
285 |     - RCTTypeSafety (= 0.71.7)
286 |     - React-Codegen (= 0.71.7)
287 |     - React-Core/CoreModulesHeaders (= 0.71.7)
288 |     - React-jsi (= 0.71.7)
289 |     - React-RCTBlob
290 |     - React-RCTImage (= 0.71.7)
291 |     - ReactCommon/turbomodule/core (= 0.71.7)
292 |   - React-cxxreact (0.71.7):
293 |     - boost (= 1.76.0)
294 |     - DoubleConversion
295 |     - glog
296 |     - hermes-engine
297 |     - RCT-Folly (= 2021.07.22.00)
298 |     - React-callinvoker (= 0.71.7)
299 |     - React-jsi (= 0.71.7)
300 |     - React-jsinspector (= 0.71.7)
301 |     - React-logger (= 0.71.7)
302 |     - React-perflogger (= 0.71.7)
303 |     - React-runtimeexecutor (= 0.71.7)
304 |   - React-hermes (0.71.7):
305 |     - DoubleConversion
306 |     - glog
307 |     - hermes-engine
308 |     - RCT-Folly (= 2021.07.22.00)
309 |     - RCT-Folly/Futures (= 2021.07.22.00)
310 |     - React-cxxreact (= 0.71.7)
311 |     - React-jsi
312 |     - React-jsiexecutor (= 0.71.7)
313 |     - React-jsinspector (= 0.71.7)
314 |     - React-perflogger (= 0.71.7)
315 |   - React-jsi (0.71.7):
316 |     - boost (= 1.76.0)
317 |     - DoubleConversion
318 |     - glog
319 |     - hermes-engine
320 |     - RCT-Folly (= 2021.07.22.00)
321 |   - React-jsiexecutor (0.71.7):
322 |     - DoubleConversion
323 |     - glog
324 |     - hermes-engine
325 |     - RCT-Folly (= 2021.07.22.00)
326 |     - React-cxxreact (= 0.71.7)
327 |     - React-jsi (= 0.71.7)
328 |     - React-perflogger (= 0.71.7)
329 |   - React-jsinspector (0.71.7)
330 |   - React-logger (0.71.7):
331 |     - glog
332 |   - React-perflogger (0.71.7)
333 |   - React-RCTActionSheet (0.71.7):
334 |     - React-Core/RCTActionSheetHeaders (= 0.71.7)
335 |   - React-RCTAnimation (0.71.7):
336 |     - RCT-Folly (= 2021.07.22.00)
337 |     - RCTTypeSafety (= 0.71.7)
338 |     - React-Codegen (= 0.71.7)
339 |     - React-Core/RCTAnimationHeaders (= 0.71.7)
340 |     - React-jsi (= 0.71.7)
341 |     - ReactCommon/turbomodule/core (= 0.71.7)
342 |   - React-RCTAppDelegate (0.71.7):
343 |     - RCT-Folly
344 |     - RCTRequired
345 |     - RCTTypeSafety
346 |     - React-Core
347 |     - ReactCommon/turbomodule/core
348 |   - React-RCTBlob (0.71.7):
349 |     - hermes-engine
350 |     - RCT-Folly (= 2021.07.22.00)
351 |     - React-Codegen (= 0.71.7)
352 |     - React-Core/RCTBlobHeaders (= 0.71.7)
353 |     - React-Core/RCTWebSocket (= 0.71.7)
354 |     - React-jsi (= 0.71.7)
355 |     - React-RCTNetwork (= 0.71.7)
356 |     - ReactCommon/turbomodule/core (= 0.71.7)
357 |   - React-RCTImage (0.71.7):
358 |     - RCT-Folly (= 2021.07.22.00)
359 |     - RCTTypeSafety (= 0.71.7)
360 |     - React-Codegen (= 0.71.7)
361 |     - React-Core/RCTImageHeaders (= 0.71.7)
362 |     - React-jsi (= 0.71.7)
363 |     - React-RCTNetwork (= 0.71.7)
364 |     - ReactCommon/turbomodule/core (= 0.71.7)
365 |   - React-RCTLinking (0.71.7):
366 |     - React-Codegen (= 0.71.7)
367 |     - React-Core/RCTLinkingHeaders (= 0.71.7)
368 |     - React-jsi (= 0.71.7)
369 |     - ReactCommon/turbomodule/core (= 0.71.7)
370 |   - React-RCTNetwork (0.71.7):
371 |     - RCT-Folly (= 2021.07.22.00)
372 |     - RCTTypeSafety (= 0.71.7)
373 |     - React-Codegen (= 0.71.7)
374 |     - React-Core/RCTNetworkHeaders (= 0.71.7)
375 |     - React-jsi (= 0.71.7)
376 |     - ReactCommon/turbomodule/core (= 0.71.7)
377 |   - React-RCTSettings (0.71.7):
378 |     - RCT-Folly (= 2021.07.22.00)
379 |     - RCTTypeSafety (= 0.71.7)
380 |     - React-Codegen (= 0.71.7)
381 |     - React-Core/RCTSettingsHeaders (= 0.71.7)
382 |     - React-jsi (= 0.71.7)
383 |     - ReactCommon/turbomodule/core (= 0.71.7)
384 |   - React-RCTText (0.71.7):
385 |     - React-Core/RCTTextHeaders (= 0.71.7)
386 |   - React-RCTVibration (0.71.7):
387 |     - RCT-Folly (= 2021.07.22.00)
388 |     - React-Codegen (= 0.71.7)
389 |     - React-Core/RCTVibrationHeaders (= 0.71.7)
390 |     - React-jsi (= 0.71.7)
391 |     - ReactCommon/turbomodule/core (= 0.71.7)
392 |   - React-runtimeexecutor (0.71.7):
393 |     - React-jsi (= 0.71.7)
394 |   - ReactCommon/turbomodule/bridging (0.71.7):
395 |     - DoubleConversion
396 |     - glog
397 |     - hermes-engine
398 |     - RCT-Folly (= 2021.07.22.00)
399 |     - React-callinvoker (= 0.71.7)
400 |     - React-Core (= 0.71.7)
401 |     - React-cxxreact (= 0.71.7)
402 |     - React-jsi (= 0.71.7)
403 |     - React-logger (= 0.71.7)
404 |     - React-perflogger (= 0.71.7)
405 |   - ReactCommon/turbomodule/core (0.71.7):
406 |     - DoubleConversion
407 |     - glog
408 |     - hermes-engine
409 |     - RCT-Folly (= 2021.07.22.00)
410 |     - React-callinvoker (= 0.71.7)
411 |     - React-Core (= 0.71.7)
412 |     - React-cxxreact (= 0.71.7)
413 |     - React-jsi (= 0.71.7)
414 |     - React-logger (= 0.71.7)
415 |     - React-perflogger (= 0.71.7)
416 |   - RNReactNativeSharedGroupPreferences (1.1.23):
417 |     - React-Core
418 |   - SocketRocket (0.6.0)
419 |   - Yoga (1.14.0)
420 |   - YogaKit (1.18.1):
421 |     - Yoga (~> 1.14)
422 | 
423 | DEPENDENCIES:
424 |   - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
425 |   - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
426 |   - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
427 |   - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
428 |   - Flipper (= 0.125.0)
429 |   - Flipper-Boost-iOSX (= 1.76.0.1.11)
430 |   - Flipper-DoubleConversion (= 3.2.0.1)
431 |   - Flipper-Fmt (= 7.1.7)
432 |   - Flipper-Folly (= 2.6.10)
433 |   - Flipper-Glog (= 0.5.0.5)
434 |   - Flipper-PeerTalk (= 0.0.4)
435 |   - Flipper-RSocket (= 1.4.3)
436 |   - FlipperKit (= 0.125.0)
437 |   - FlipperKit/Core (= 0.125.0)
438 |   - FlipperKit/CppBridge (= 0.125.0)
439 |   - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0)
440 |   - FlipperKit/FBDefines (= 0.125.0)
441 |   - FlipperKit/FKPortForwarding (= 0.125.0)
442 |   - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0)
443 |   - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0)
444 |   - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0)
445 |   - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0)
446 |   - FlipperKit/FlipperKitReactPlugin (= 0.125.0)
447 |   - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
448 |   - FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
449 |   - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
450 |   - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
451 |   - libevent (~> 2.1.12)
452 |   - OpenSSL-Universal (= 1.1.1100)
453 |   - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
454 |   - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
455 |   - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
456 |   - React (from `../node_modules/react-native/`)
457 |   - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
458 |   - React-Codegen (from `build/generated/ios`)
459 |   - React-Core (from `../node_modules/react-native/`)
460 |   - React-Core/DevSupport (from `../node_modules/react-native/`)
461 |   - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
462 |   - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
463 |   - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
464 |   - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
465 |   - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
466 |   - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
467 |   - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
468 |   - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
469 |   - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
470 |   - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
471 |   - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
472 |   - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
473 |   - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
474 |   - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
475 |   - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
476 |   - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
477 |   - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
478 |   - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
479 |   - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
480 |   - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
481 |   - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
482 |   - RNReactNativeSharedGroupPreferences (from `../node_modules/react-native-shared-group-preferences`)
483 |   - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
484 | 
485 | SPEC REPOS:
486 |   trunk:
487 |     - CocoaAsyncSocket
488 |     - Flipper
489 |     - Flipper-Boost-iOSX
490 |     - Flipper-DoubleConversion
491 |     - Flipper-Fmt
492 |     - Flipper-Folly
493 |     - Flipper-Glog
494 |     - Flipper-PeerTalk
495 |     - Flipper-RSocket
496 |     - FlipperKit
497 |     - fmt
498 |     - libevent
499 |     - OpenSSL-Universal
500 |     - SocketRocket
501 |     - YogaKit
502 | 
503 | EXTERNAL SOURCES:
504 |   boost:
505 |     :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
506 |   DoubleConversion:
507 |     :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
508 |   FBLazyVector:
509 |     :path: "../node_modules/react-native/Libraries/FBLazyVector"
510 |   FBReactNativeSpec:
511 |     :path: "../node_modules/react-native/React/FBReactNativeSpec"
512 |   glog:
513 |     :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
514 |   hermes-engine:
515 |     :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
516 |   RCT-Folly:
517 |     :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
518 |   RCTRequired:
519 |     :path: "../node_modules/react-native/Libraries/RCTRequired"
520 |   RCTTypeSafety:
521 |     :path: "../node_modules/react-native/Libraries/TypeSafety"
522 |   React:
523 |     :path: "../node_modules/react-native/"
524 |   React-callinvoker:
525 |     :path: "../node_modules/react-native/ReactCommon/callinvoker"
526 |   React-Codegen:
527 |     :path: build/generated/ios
528 |   React-Core:
529 |     :path: "../node_modules/react-native/"
530 |   React-CoreModules:
531 |     :path: "../node_modules/react-native/React/CoreModules"
532 |   React-cxxreact:
533 |     :path: "../node_modules/react-native/ReactCommon/cxxreact"
534 |   React-hermes:
535 |     :path: "../node_modules/react-native/ReactCommon/hermes"
536 |   React-jsi:
537 |     :path: "../node_modules/react-native/ReactCommon/jsi"
538 |   React-jsiexecutor:
539 |     :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
540 |   React-jsinspector:
541 |     :path: "../node_modules/react-native/ReactCommon/jsinspector"
542 |   React-logger:
543 |     :path: "../node_modules/react-native/ReactCommon/logger"
544 |   React-perflogger:
545 |     :path: "../node_modules/react-native/ReactCommon/reactperflogger"
546 |   React-RCTActionSheet:
547 |     :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
548 |   React-RCTAnimation:
549 |     :path: "../node_modules/react-native/Libraries/NativeAnimation"
550 |   React-RCTAppDelegate:
551 |     :path: "../node_modules/react-native/Libraries/AppDelegate"
552 |   React-RCTBlob:
553 |     :path: "../node_modules/react-native/Libraries/Blob"
554 |   React-RCTImage:
555 |     :path: "../node_modules/react-native/Libraries/Image"
556 |   React-RCTLinking:
557 |     :path: "../node_modules/react-native/Libraries/LinkingIOS"
558 |   React-RCTNetwork:
559 |     :path: "../node_modules/react-native/Libraries/Network"
560 |   React-RCTSettings:
561 |     :path: "../node_modules/react-native/Libraries/Settings"
562 |   React-RCTText:
563 |     :path: "../node_modules/react-native/Libraries/Text"
564 |   React-RCTVibration:
565 |     :path: "../node_modules/react-native/Libraries/Vibration"
566 |   React-runtimeexecutor:
567 |     :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
568 |   ReactCommon:
569 |     :path: "../node_modules/react-native/ReactCommon"
570 |   RNReactNativeSharedGroupPreferences:
571 |     :path: "../node_modules/react-native-shared-group-preferences"
572 |   Yoga:
573 |     :path: "../node_modules/react-native/ReactCommon/yoga"
574 | 
575 | SPEC CHECKSUMS:
576 |   boost: 57d2868c099736d80fcd648bf211b4431e51a558
577 |   CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
578 |   DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
579 |   FBLazyVector: a89a0525bc7ca174675045c2b492b5280d5a2470
580 |   FBReactNativeSpec: 7714e6bc1e9ea23df6c4cb42f0b2fd9c6a3a559c
581 |   Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
582 |   Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
583 |   Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
584 |   Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
585 |   Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
586 |   Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
587 |   Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
588 |   Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
589 |   FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
590 |   fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
591 |   glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
592 |   hermes-engine: 4438d2b8bf8bebaba1b1ac0451160bab59e491f8
593 |   libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
594 |   OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
595 |   RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
596 |   RCTRequired: 5a4a30ac20c86eeadd6844a9328f78d4168cf9b2
597 |   RCTTypeSafety: 279fc5861a89f0f37db3a585f27f971485b4b734
598 |   React: 88307a9be3bd0e71a6822271cf28b84a587fb97f
599 |   React-callinvoker: 35fb980c454104ebe82f0afb9826830089248e08
600 |   React-Codegen: a8dbde3b7476d5c19437d2adb9e8ea1b426b9595
601 |   React-Core: 385cb6fa78762c6409ff39faeb0dd9ad664b6e84
602 |   React-CoreModules: c2b7db313b04d9b71954ffd55d0c2e46bc40e9fb
603 |   React-cxxreact: 845fefb889132e5d004ff818f7a599e32c52e7d6
604 |   React-hermes: 86135f35e1dd2dfccfb97afe96d0c06f6a3970c4
605 |   React-jsi: 39c116aa6c3d6f3d9874eff6998a670b47882a28
606 |   React-jsiexecutor: eaa5f71eb8f6861cf0e57f1a0f52aeb020d9e18e
607 |   React-jsinspector: 9885f6f94d231b95a739ef7bb50536fb87ce7539
608 |   React-logger: 3f8ebad1be1bf3299d1ab6d7f971802d7395c7ef
609 |   React-perflogger: 2d505bbe298e3b7bacdd9e542b15535be07220f6
610 |   React-RCTActionSheet: 0e96e4560bd733c9b37efbf68f5b1a47615892fb
611 |   React-RCTAnimation: fd138e26f120371c87e406745a27535e2c8a04ef
612 |   React-RCTAppDelegate: 4a9fd1230a98dc3d4382f8a934dc9f50834d8335
613 |   React-RCTBlob: 38a7185f06a0ce8153a023e63b406a28d67b955d
614 |   React-RCTImage: 92b0966e7c1cadda889e961c474397ad5180e194
615 |   React-RCTLinking: b80f8d0c6e94c54294b0048def51f57eaa9a27af
616 |   React-RCTNetwork: 491b0c65ac22edbd6695d12d084b4943103b009b
617 |   React-RCTSettings: 97af3e8abe0023349ec015910df3bda1a0380117
618 |   React-RCTText: 33c85753bd714d527d2ae538dc56ec24c6783d84
619 |   React-RCTVibration: 08f132cad9896458776f37c112e71d60aef1c6ae
620 |   React-runtimeexecutor: c5c89f8f543842dd864b63ded1b0bbb9c9445328
621 |   ReactCommon: dbfbe2f7f3c5ce4ce44f43f2fd0d5950d1eb67c5
622 |   RNReactNativeSharedGroupPreferences: 87273d4a362530ec4f10a116f000225e40438ec1
623 |   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
624 |   Yoga: d56980c8914db0b51692f55533409e844b66133c
625 |   YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
626 | 
627 | PODFILE CHECKSUM: ba5297897c6d394ab00583dbce14dc27acbbe9ae
628 | 
629 | COCOAPODS: 1.11.3
630 | 
--------------------------------------------------------------------------------
/ios/RNWidget.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
  1 | // !$*UTF8*$!
  2 | {
  3 | 	archiveVersion = 1;
  4 | 	classes = {
  5 | 	};
  6 | 	objectVersion = 54;
  7 | 	objects = {
  8 | 
  9 | /* Begin PBXBuildFile section */
 10 | 		00E356F31AD99517003FC87E /* RNWidgetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNWidgetTests.m */; };
 11 | 		04495A1229FBCB5F0075ECFC /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04A8A86629FB92A500127E04 /* WidgetKit.framework */; };
 12 | 		04495A1329FBCB5F0075ECFC /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04A8A86829FB92A500127E04 /* SwiftUI.framework */; };
 13 | 		04495A1629FBCB5F0075ECFC /* StreakWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04495A1529FBCB5F0075ECFC /* StreakWidget.swift */; };
 14 | 		04495A1929FBCB600075ECFC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04495A1829FBCB600075ECFC /* Assets.xcassets */; };
 15 | 		04495A1B29FBCB600075ECFC /* StreakWidget.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 04495A1729FBCB5F0075ECFC /* StreakWidget.intentdefinition */; };
 16 | 		04495A1C29FBCB600075ECFC /* StreakWidget.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 04495A1729FBCB5F0075ECFC /* StreakWidget.intentdefinition */; };
 17 | 		04495A1F29FBCB600075ECFC /* StreakWidgetExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 04495A1129FBCB5F0075ECFC /* StreakWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 18 | 		0C80B921A6F3F58F76C31292 /* libPods-RNWidget.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-RNWidget.a */; };
 19 | 		13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
 20 | 		13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
 21 | 		13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
 22 | 		7699B88040F8A987B510C191 /* libPods-RNWidget-RNWidgetTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-RNWidget-RNWidgetTests.a */; };
 23 | 		81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
 24 | /* End PBXBuildFile section */
 25 | 
 26 | /* Begin PBXContainerItemProxy section */
 27 | 		00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
 28 | 			isa = PBXContainerItemProxy;
 29 | 			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
 30 | 			proxyType = 1;
 31 | 			remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
 32 | 			remoteInfo = RNWidget;
 33 | 		};
 34 | 		04495A1D29FBCB600075ECFC /* PBXContainerItemProxy */ = {
 35 | 			isa = PBXContainerItemProxy;
 36 | 			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
 37 | 			proxyType = 1;
 38 | 			remoteGlobalIDString = 04495A1029FBCB5F0075ECFC;
 39 | 			remoteInfo = StreakWidgetExtension;
 40 | 		};
 41 | /* End PBXContainerItemProxy section */
 42 | 
 43 | /* Begin PBXCopyFilesBuildPhase section */
 44 | 		04A8A87629FB92A600127E04 /* Embed App Extensions */ = {
 45 | 			isa = PBXCopyFilesBuildPhase;
 46 | 			buildActionMask = 2147483647;
 47 | 			dstPath = "";
 48 | 			dstSubfolderSpec = 13;
 49 | 			files = (
 50 | 				04495A1F29FBCB600075ECFC /* StreakWidgetExtension.appex in Embed App Extensions */,
 51 | 			);
 52 | 			name = "Embed App Extensions";
 53 | 			runOnlyForDeploymentPostprocessing = 0;
 54 | 		};
 55 | /* End PBXCopyFilesBuildPhase section */
 56 | 
 57 | /* Begin PBXFileReference section */
 58 | 		00E356EE1AD99517003FC87E /* RNWidgetTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNWidgetTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 59 | 		00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
 60 | 		00E356F21AD99517003FC87E /* RNWidgetTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNWidgetTests.m; sourceTree = ""; };
 61 | 		04495A1129FBCB5F0075ECFC /* StreakWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = StreakWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 62 | 		04495A1529FBCB5F0075ECFC /* StreakWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreakWidget.swift; sourceTree = ""; };
 63 | 		04495A1729FBCB5F0075ECFC /* StreakWidget.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = StreakWidget.intentdefinition; sourceTree = ""; };
 64 | 		04495A1829FBCB600075ECFC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
 65 | 		04495A1A29FBCB600075ECFC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
 66 | 		04495A2329FBCBEC0075ECFC /* RNWidget.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RNWidget.entitlements; path = RNWidget/RNWidget.entitlements; sourceTree = ""; };
 67 | 		04A8A86629FB92A500127E04 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
 68 | 		04A8A86829FB92A500127E04 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
 69 | 		13B07F961A680F5B00A75B9A /* RNWidget.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RNWidget.app; sourceTree = BUILT_PRODUCTS_DIR; };
 70 | 		13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RNWidget/AppDelegate.h; sourceTree = ""; };
 71 | 		13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = RNWidget/AppDelegate.mm; sourceTree = ""; };
 72 | 		13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RNWidget/Images.xcassets; sourceTree = ""; };
 73 | 		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNWidget/Info.plist; sourceTree = ""; };
 74 | 		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RNWidget/main.m; sourceTree = ""; };
 75 | 		19F6CBCC0A4E27FBF8BF4A61 /* libPods-RNWidget-RNWidgetTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNWidget-RNWidgetTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 76 | 		3B4392A12AC88292D35C810B /* Pods-RNWidget.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWidget.debug.xcconfig"; path = "Target Support Files/Pods-RNWidget/Pods-RNWidget.debug.xcconfig"; sourceTree = ""; };
 77 | 		5709B34CF0A7D63546082F79 /* Pods-RNWidget.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWidget.release.xcconfig"; path = "Target Support Files/Pods-RNWidget/Pods-RNWidget.release.xcconfig"; sourceTree = ""; };
 78 | 		5B7EB9410499542E8C5724F5 /* Pods-RNWidget-RNWidgetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWidget-RNWidgetTests.debug.xcconfig"; path = "Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests.debug.xcconfig"; sourceTree = ""; };
 79 | 		5DCACB8F33CDC322A6C60F78 /* libPods-RNWidget.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNWidget.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 80 | 		81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = RNWidget/LaunchScreen.storyboard; sourceTree = ""; };
 81 | 		89C6BE57DB24E9ADA2F236DE /* Pods-RNWidget-RNWidgetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWidget-RNWidgetTests.release.xcconfig"; path = "Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests.release.xcconfig"; sourceTree = ""; };
 82 | 		ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
 83 | /* End PBXFileReference section */
 84 | 
 85 | /* Begin PBXFrameworksBuildPhase section */
 86 | 		00E356EB1AD99517003FC87E /* Frameworks */ = {
 87 | 			isa = PBXFrameworksBuildPhase;
 88 | 			buildActionMask = 2147483647;
 89 | 			files = (
 90 | 				7699B88040F8A987B510C191 /* libPods-RNWidget-RNWidgetTests.a in Frameworks */,
 91 | 			);
 92 | 			runOnlyForDeploymentPostprocessing = 0;
 93 | 		};
 94 | 		04495A0E29FBCB5F0075ECFC /* Frameworks */ = {
 95 | 			isa = PBXFrameworksBuildPhase;
 96 | 			buildActionMask = 2147483647;
 97 | 			files = (
 98 | 				04495A1329FBCB5F0075ECFC /* SwiftUI.framework in Frameworks */,
 99 | 				04495A1229FBCB5F0075ECFC /* WidgetKit.framework in Frameworks */,
100 | 			);
101 | 			runOnlyForDeploymentPostprocessing = 0;
102 | 		};
103 | 		13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
104 | 			isa = PBXFrameworksBuildPhase;
105 | 			buildActionMask = 2147483647;
106 | 			files = (
107 | 				0C80B921A6F3F58F76C31292 /* libPods-RNWidget.a in Frameworks */,
108 | 			);
109 | 			runOnlyForDeploymentPostprocessing = 0;
110 | 		};
111 | /* End PBXFrameworksBuildPhase section */
112 | 
113 | /* Begin PBXGroup section */
114 | 		00E356EF1AD99517003FC87E /* RNWidgetTests */ = {
115 | 			isa = PBXGroup;
116 | 			children = (
117 | 				00E356F21AD99517003FC87E /* RNWidgetTests.m */,
118 | 				00E356F01AD99517003FC87E /* Supporting Files */,
119 | 			);
120 | 			path = RNWidgetTests;
121 | 			sourceTree = "";
122 | 		};
123 | 		00E356F01AD99517003FC87E /* Supporting Files */ = {
124 | 			isa = PBXGroup;
125 | 			children = (
126 | 				00E356F11AD99517003FC87E /* Info.plist */,
127 | 			);
128 | 			name = "Supporting Files";
129 | 			sourceTree = "";
130 | 		};
131 | 		04495A1429FBCB5F0075ECFC /* StreakWidget */ = {
132 | 			isa = PBXGroup;
133 | 			children = (
134 | 				04495A1529FBCB5F0075ECFC /* StreakWidget.swift */,
135 | 				04495A1729FBCB5F0075ECFC /* StreakWidget.intentdefinition */,
136 | 				04495A1829FBCB600075ECFC /* Assets.xcassets */,
137 | 				04495A1A29FBCB600075ECFC /* Info.plist */,
138 | 			);
139 | 			path = StreakWidget;
140 | 			sourceTree = "";
141 | 		};
142 | 		13B07FAE1A68108700A75B9A /* RNWidget */ = {
143 | 			isa = PBXGroup;
144 | 			children = (
145 | 				04495A2329FBCBEC0075ECFC /* RNWidget.entitlements */,
146 | 				13B07FAF1A68108700A75B9A /* AppDelegate.h */,
147 | 				13B07FB01A68108700A75B9A /* AppDelegate.mm */,
148 | 				13B07FB51A68108700A75B9A /* Images.xcassets */,
149 | 				13B07FB61A68108700A75B9A /* Info.plist */,
150 | 				81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
151 | 				13B07FB71A68108700A75B9A /* main.m */,
152 | 			);
153 | 			name = RNWidget;
154 | 			sourceTree = "";
155 | 		};
156 | 		2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
157 | 			isa = PBXGroup;
158 | 			children = (
159 | 				ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
160 | 				5DCACB8F33CDC322A6C60F78 /* libPods-RNWidget.a */,
161 | 				19F6CBCC0A4E27FBF8BF4A61 /* libPods-RNWidget-RNWidgetTests.a */,
162 | 				04A8A86629FB92A500127E04 /* WidgetKit.framework */,
163 | 				04A8A86829FB92A500127E04 /* SwiftUI.framework */,
164 | 			);
165 | 			name = Frameworks;
166 | 			sourceTree = "";
167 | 		};
168 | 		832341AE1AAA6A7D00B99B32 /* Libraries */ = {
169 | 			isa = PBXGroup;
170 | 			children = (
171 | 			);
172 | 			name = Libraries;
173 | 			sourceTree = "";
174 | 		};
175 | 		83CBB9F61A601CBA00E9B192 = {
176 | 			isa = PBXGroup;
177 | 			children = (
178 | 				13B07FAE1A68108700A75B9A /* RNWidget */,
179 | 				832341AE1AAA6A7D00B99B32 /* Libraries */,
180 | 				00E356EF1AD99517003FC87E /* RNWidgetTests */,
181 | 				04495A1429FBCB5F0075ECFC /* StreakWidget */,
182 | 				83CBBA001A601CBA00E9B192 /* Products */,
183 | 				2D16E6871FA4F8E400B85C8A /* Frameworks */,
184 | 				BBD78D7AC51CEA395F1C20DB /* Pods */,
185 | 			);
186 | 			indentWidth = 2;
187 | 			sourceTree = "";
188 | 			tabWidth = 2;
189 | 			usesTabs = 0;
190 | 		};
191 | 		83CBBA001A601CBA00E9B192 /* Products */ = {
192 | 			isa = PBXGroup;
193 | 			children = (
194 | 				13B07F961A680F5B00A75B9A /* RNWidget.app */,
195 | 				00E356EE1AD99517003FC87E /* RNWidgetTests.xctest */,
196 | 				04495A1129FBCB5F0075ECFC /* StreakWidgetExtension.appex */,
197 | 			);
198 | 			name = Products;
199 | 			sourceTree = "";
200 | 		};
201 | 		BBD78D7AC51CEA395F1C20DB /* Pods */ = {
202 | 			isa = PBXGroup;
203 | 			children = (
204 | 				3B4392A12AC88292D35C810B /* Pods-RNWidget.debug.xcconfig */,
205 | 				5709B34CF0A7D63546082F79 /* Pods-RNWidget.release.xcconfig */,
206 | 				5B7EB9410499542E8C5724F5 /* Pods-RNWidget-RNWidgetTests.debug.xcconfig */,
207 | 				89C6BE57DB24E9ADA2F236DE /* Pods-RNWidget-RNWidgetTests.release.xcconfig */,
208 | 			);
209 | 			path = Pods;
210 | 			sourceTree = "";
211 | 		};
212 | /* End PBXGroup section */
213 | 
214 | /* Begin PBXNativeTarget section */
215 | 		00E356ED1AD99517003FC87E /* RNWidgetTests */ = {
216 | 			isa = PBXNativeTarget;
217 | 			buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNWidgetTests" */;
218 | 			buildPhases = (
219 | 				A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
220 | 				00E356EA1AD99517003FC87E /* Sources */,
221 | 				00E356EB1AD99517003FC87E /* Frameworks */,
222 | 				00E356EC1AD99517003FC87E /* Resources */,
223 | 				C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
224 | 				F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
225 | 			);
226 | 			buildRules = (
227 | 			);
228 | 			dependencies = (
229 | 				00E356F51AD99517003FC87E /* PBXTargetDependency */,
230 | 			);
231 | 			name = RNWidgetTests;
232 | 			productName = RNWidgetTests;
233 | 			productReference = 00E356EE1AD99517003FC87E /* RNWidgetTests.xctest */;
234 | 			productType = "com.apple.product-type.bundle.unit-test";
235 | 		};
236 | 		04495A1029FBCB5F0075ECFC /* StreakWidgetExtension */ = {
237 | 			isa = PBXNativeTarget;
238 | 			buildConfigurationList = 04495A2229FBCB600075ECFC /* Build configuration list for PBXNativeTarget "StreakWidgetExtension" */;
239 | 			buildPhases = (
240 | 				04495A0D29FBCB5F0075ECFC /* Sources */,
241 | 				04495A0E29FBCB5F0075ECFC /* Frameworks */,
242 | 				04495A0F29FBCB5F0075ECFC /* Resources */,
243 | 			);
244 | 			buildRules = (
245 | 			);
246 | 			dependencies = (
247 | 			);
248 | 			name = StreakWidgetExtension;
249 | 			productName = StreakWidgetExtension;
250 | 			productReference = 04495A1129FBCB5F0075ECFC /* StreakWidgetExtension.appex */;
251 | 			productType = "com.apple.product-type.app-extension";
252 | 		};
253 | 		13B07F861A680F5B00A75B9A /* RNWidget */ = {
254 | 			isa = PBXNativeTarget;
255 | 			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNWidget" */;
256 | 			buildPhases = (
257 | 				C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
258 | 				FD10A7F022414F080027D42C /* Start Packager */,
259 | 				13B07F871A680F5B00A75B9A /* Sources */,
260 | 				13B07F8C1A680F5B00A75B9A /* Frameworks */,
261 | 				13B07F8E1A680F5B00A75B9A /* Resources */,
262 | 				00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
263 | 				00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
264 | 				E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
265 | 				04A8A87629FB92A600127E04 /* Embed App Extensions */,
266 | 			);
267 | 			buildRules = (
268 | 			);
269 | 			dependencies = (
270 | 				04495A1E29FBCB600075ECFC /* PBXTargetDependency */,
271 | 			);
272 | 			name = RNWidget;
273 | 			productName = RNWidget;
274 | 			productReference = 13B07F961A680F5B00A75B9A /* RNWidget.app */;
275 | 			productType = "com.apple.product-type.application";
276 | 		};
277 | /* End PBXNativeTarget section */
278 | 
279 | /* Begin PBXProject section */
280 | 		83CBB9F71A601CBA00E9B192 /* Project object */ = {
281 | 			isa = PBXProject;
282 | 			attributes = {
283 | 				LastSwiftUpdateCheck = 1320;
284 | 				LastUpgradeCheck = 1210;
285 | 				TargetAttributes = {
286 | 					00E356ED1AD99517003FC87E = {
287 | 						CreatedOnToolsVersion = 6.2;
288 | 						TestTargetID = 13B07F861A680F5B00A75B9A;
289 | 					};
290 | 					04495A1029FBCB5F0075ECFC = {
291 | 						CreatedOnToolsVersion = 13.2.1;
292 | 					};
293 | 					13B07F861A680F5B00A75B9A = {
294 | 						LastSwiftMigration = 1320;
295 | 					};
296 | 				};
297 | 			};
298 | 			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNWidget" */;
299 | 			compatibilityVersion = "Xcode 12.0";
300 | 			developmentRegion = en;
301 | 			hasScannedForEncodings = 0;
302 | 			knownRegions = (
303 | 				en,
304 | 				Base,
305 | 			);
306 | 			mainGroup = 83CBB9F61A601CBA00E9B192;
307 | 			productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
308 | 			projectDirPath = "";
309 | 			projectRoot = "";
310 | 			targets = (
311 | 				13B07F861A680F5B00A75B9A /* RNWidget */,
312 | 				00E356ED1AD99517003FC87E /* RNWidgetTests */,
313 | 				04495A1029FBCB5F0075ECFC /* StreakWidgetExtension */,
314 | 			);
315 | 		};
316 | /* End PBXProject section */
317 | 
318 | /* Begin PBXResourcesBuildPhase section */
319 | 		00E356EC1AD99517003FC87E /* Resources */ = {
320 | 			isa = PBXResourcesBuildPhase;
321 | 			buildActionMask = 2147483647;
322 | 			files = (
323 | 			);
324 | 			runOnlyForDeploymentPostprocessing = 0;
325 | 		};
326 | 		04495A0F29FBCB5F0075ECFC /* Resources */ = {
327 | 			isa = PBXResourcesBuildPhase;
328 | 			buildActionMask = 2147483647;
329 | 			files = (
330 | 				04495A1929FBCB600075ECFC /* Assets.xcassets in Resources */,
331 | 			);
332 | 			runOnlyForDeploymentPostprocessing = 0;
333 | 		};
334 | 		13B07F8E1A680F5B00A75B9A /* Resources */ = {
335 | 			isa = PBXResourcesBuildPhase;
336 | 			buildActionMask = 2147483647;
337 | 			files = (
338 | 				81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
339 | 				13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
340 | 			);
341 | 			runOnlyForDeploymentPostprocessing = 0;
342 | 		};
343 | /* End PBXResourcesBuildPhase section */
344 | 
345 | /* Begin PBXShellScriptBuildPhase section */
346 | 		00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
347 | 			isa = PBXShellScriptBuildPhase;
348 | 			buildActionMask = 2147483647;
349 | 			files = (
350 | 			);
351 | 			inputPaths = (
352 | 				"$(SRCROOT)/.xcode.env.local",
353 | 				"$(SRCROOT)/.xcode.env",
354 | 			);
355 | 			name = "Bundle React Native code and images";
356 | 			outputPaths = (
357 | 			);
358 | 			runOnlyForDeploymentPostprocessing = 0;
359 | 			shellPath = /bin/sh;
360 | 			shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
361 | 		};
362 | 		00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
363 | 			isa = PBXShellScriptBuildPhase;
364 | 			buildActionMask = 2147483647;
365 | 			files = (
366 | 			);
367 | 			inputFileListPaths = (
368 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget/Pods-RNWidget-frameworks-${CONFIGURATION}-input-files.xcfilelist",
369 | 			);
370 | 			name = "[CP] Embed Pods Frameworks";
371 | 			outputFileListPaths = (
372 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget/Pods-RNWidget-frameworks-${CONFIGURATION}-output-files.xcfilelist",
373 | 			);
374 | 			runOnlyForDeploymentPostprocessing = 0;
375 | 			shellPath = /bin/sh;
376 | 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNWidget/Pods-RNWidget-frameworks.sh\"\n";
377 | 			showEnvVarsInLog = 0;
378 | 		};
379 | 		A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
380 | 			isa = PBXShellScriptBuildPhase;
381 | 			buildActionMask = 2147483647;
382 | 			files = (
383 | 			);
384 | 			inputFileListPaths = (
385 | 			);
386 | 			inputPaths = (
387 | 				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
388 | 				"${PODS_ROOT}/Manifest.lock",
389 | 			);
390 | 			name = "[CP] Check Pods Manifest.lock";
391 | 			outputFileListPaths = (
392 | 			);
393 | 			outputPaths = (
394 | 				"$(DERIVED_FILE_DIR)/Pods-RNWidget-RNWidgetTests-checkManifestLockResult.txt",
395 | 			);
396 | 			runOnlyForDeploymentPostprocessing = 0;
397 | 			shellPath = /bin/sh;
398 | 			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
399 | 			showEnvVarsInLog = 0;
400 | 		};
401 | 		C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
402 | 			isa = PBXShellScriptBuildPhase;
403 | 			buildActionMask = 2147483647;
404 | 			files = (
405 | 			);
406 | 			inputFileListPaths = (
407 | 			);
408 | 			inputPaths = (
409 | 				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
410 | 				"${PODS_ROOT}/Manifest.lock",
411 | 			);
412 | 			name = "[CP] Check Pods Manifest.lock";
413 | 			outputFileListPaths = (
414 | 			);
415 | 			outputPaths = (
416 | 				"$(DERIVED_FILE_DIR)/Pods-RNWidget-checkManifestLockResult.txt",
417 | 			);
418 | 			runOnlyForDeploymentPostprocessing = 0;
419 | 			shellPath = /bin/sh;
420 | 			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
421 | 			showEnvVarsInLog = 0;
422 | 		};
423 | 		C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
424 | 			isa = PBXShellScriptBuildPhase;
425 | 			buildActionMask = 2147483647;
426 | 			files = (
427 | 			);
428 | 			inputFileListPaths = (
429 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
430 | 			);
431 | 			name = "[CP] Embed Pods Frameworks";
432 | 			outputFileListPaths = (
433 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
434 | 			);
435 | 			runOnlyForDeploymentPostprocessing = 0;
436 | 			shellPath = /bin/sh;
437 | 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests-frameworks.sh\"\n";
438 | 			showEnvVarsInLog = 0;
439 | 		};
440 | 		E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
441 | 			isa = PBXShellScriptBuildPhase;
442 | 			buildActionMask = 2147483647;
443 | 			files = (
444 | 			);
445 | 			inputFileListPaths = (
446 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget/Pods-RNWidget-resources-${CONFIGURATION}-input-files.xcfilelist",
447 | 			);
448 | 			name = "[CP] Copy Pods Resources";
449 | 			outputFileListPaths = (
450 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget/Pods-RNWidget-resources-${CONFIGURATION}-output-files.xcfilelist",
451 | 			);
452 | 			runOnlyForDeploymentPostprocessing = 0;
453 | 			shellPath = /bin/sh;
454 | 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNWidget/Pods-RNWidget-resources.sh\"\n";
455 | 			showEnvVarsInLog = 0;
456 | 		};
457 | 		F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
458 | 			isa = PBXShellScriptBuildPhase;
459 | 			buildActionMask = 2147483647;
460 | 			files = (
461 | 			);
462 | 			inputFileListPaths = (
463 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests-resources-${CONFIGURATION}-input-files.xcfilelist",
464 | 			);
465 | 			name = "[CP] Copy Pods Resources";
466 | 			outputFileListPaths = (
467 | 				"${PODS_ROOT}/Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests-resources-${CONFIGURATION}-output-files.xcfilelist",
468 | 			);
469 | 			runOnlyForDeploymentPostprocessing = 0;
470 | 			shellPath = /bin/sh;
471 | 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNWidget-RNWidgetTests/Pods-RNWidget-RNWidgetTests-resources.sh\"\n";
472 | 			showEnvVarsInLog = 0;
473 | 		};
474 | 		FD10A7F022414F080027D42C /* Start Packager */ = {
475 | 			isa = PBXShellScriptBuildPhase;
476 | 			buildActionMask = 2147483647;
477 | 			files = (
478 | 			);
479 | 			inputFileListPaths = (
480 | 			);
481 | 			inputPaths = (
482 | 			);
483 | 			name = "Start Packager";
484 | 			outputFileListPaths = (
485 | 			);
486 | 			outputPaths = (
487 | 			);
488 | 			runOnlyForDeploymentPostprocessing = 0;
489 | 			shellPath = /bin/sh;
490 | 			shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n  if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n    if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n      echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n      exit 2\n    fi\n  else\n    open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n  fi\nfi\n";
491 | 			showEnvVarsInLog = 0;
492 | 		};
493 | /* End PBXShellScriptBuildPhase section */
494 | 
495 | /* Begin PBXSourcesBuildPhase section */
496 | 		00E356EA1AD99517003FC87E /* Sources */ = {
497 | 			isa = PBXSourcesBuildPhase;
498 | 			buildActionMask = 2147483647;
499 | 			files = (
500 | 				00E356F31AD99517003FC87E /* RNWidgetTests.m in Sources */,
501 | 			);
502 | 			runOnlyForDeploymentPostprocessing = 0;
503 | 		};
504 | 		04495A0D29FBCB5F0075ECFC /* Sources */ = {
505 | 			isa = PBXSourcesBuildPhase;
506 | 			buildActionMask = 2147483647;
507 | 			files = (
508 | 				04495A1B29FBCB600075ECFC /* StreakWidget.intentdefinition in Sources */,
509 | 				04495A1629FBCB5F0075ECFC /* StreakWidget.swift in Sources */,
510 | 			);
511 | 			runOnlyForDeploymentPostprocessing = 0;
512 | 		};
513 | 		13B07F871A680F5B00A75B9A /* Sources */ = {
514 | 			isa = PBXSourcesBuildPhase;
515 | 			buildActionMask = 2147483647;
516 | 			files = (
517 | 				13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
518 | 				04495A1C29FBCB600075ECFC /* StreakWidget.intentdefinition in Sources */,
519 | 				13B07FC11A68108700A75B9A /* main.m in Sources */,
520 | 			);
521 | 			runOnlyForDeploymentPostprocessing = 0;
522 | 		};
523 | /* End PBXSourcesBuildPhase section */
524 | 
525 | /* Begin PBXTargetDependency section */
526 | 		00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
527 | 			isa = PBXTargetDependency;
528 | 			target = 13B07F861A680F5B00A75B9A /* RNWidget */;
529 | 			targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
530 | 		};
531 | 		04495A1E29FBCB600075ECFC /* PBXTargetDependency */ = {
532 | 			isa = PBXTargetDependency;
533 | 			target = 04495A1029FBCB5F0075ECFC /* StreakWidgetExtension */;
534 | 			targetProxy = 04495A1D29FBCB600075ECFC /* PBXContainerItemProxy */;
535 | 		};
536 | /* End PBXTargetDependency section */
537 | 
538 | /* Begin XCBuildConfiguration section */
539 | 		00E356F61AD99517003FC87E /* Debug */ = {
540 | 			isa = XCBuildConfiguration;
541 | 			baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-RNWidget-RNWidgetTests.debug.xcconfig */;
542 | 			buildSettings = {
543 | 				BUNDLE_LOADER = "$(TEST_HOST)";
544 | 				GCC_PREPROCESSOR_DEFINITIONS = (
545 | 					"DEBUG=1",
546 | 					"$(inherited)",
547 | 				);
548 | 				INFOPLIST_FILE = RNWidgetTests/Info.plist;
549 | 				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
550 | 				LD_RUNPATH_SEARCH_PATHS = (
551 | 					"$(inherited)",
552 | 					"@executable_path/Frameworks",
553 | 					"@loader_path/Frameworks",
554 | 				);
555 | 				OTHER_LDFLAGS = (
556 | 					"-ObjC",
557 | 					"-lc++",
558 | 					"$(inherited)",
559 | 				);
560 | 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
561 | 				PRODUCT_NAME = "$(TARGET_NAME)";
562 | 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNWidget.app/RNWidget";
563 | 			};
564 | 			name = Debug;
565 | 		};
566 | 		00E356F71AD99517003FC87E /* Release */ = {
567 | 			isa = XCBuildConfiguration;
568 | 			baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-RNWidget-RNWidgetTests.release.xcconfig */;
569 | 			buildSettings = {
570 | 				BUNDLE_LOADER = "$(TEST_HOST)";
571 | 				COPY_PHASE_STRIP = NO;
572 | 				INFOPLIST_FILE = RNWidgetTests/Info.plist;
573 | 				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
574 | 				LD_RUNPATH_SEARCH_PATHS = (
575 | 					"$(inherited)",
576 | 					"@executable_path/Frameworks",
577 | 					"@loader_path/Frameworks",
578 | 				);
579 | 				OTHER_LDFLAGS = (
580 | 					"-ObjC",
581 | 					"-lc++",
582 | 					"$(inherited)",
583 | 				);
584 | 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
585 | 				PRODUCT_NAME = "$(TARGET_NAME)";
586 | 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNWidget.app/RNWidget";
587 | 			};
588 | 			name = Release;
589 | 		};
590 | 		04495A2029FBCB600075ECFC /* Debug */ = {
591 | 			isa = XCBuildConfiguration;
592 | 			buildSettings = {
593 | 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
594 | 				ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
595 | 				CLANG_ANALYZER_NONNULL = YES;
596 | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
597 | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
598 | 				CLANG_ENABLE_OBJC_WEAK = YES;
599 | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
600 | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
601 | 				CODE_SIGN_STYLE = Automatic;
602 | 				CURRENT_PROJECT_VERSION = 1;
603 | 				DEBUG_INFORMATION_FORMAT = dwarf;
604 | 				GCC_C_LANGUAGE_STANDARD = gnu11;
605 | 				GENERATE_INFOPLIST_FILE = YES;
606 | 				INFOPLIST_FILE = StreakWidget/Info.plist;
607 | 				INFOPLIST_KEY_CFBundleDisplayName = StreakWidget;
608 | 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
609 | 				IPHONEOS_DEPLOYMENT_TARGET = 15.2;
610 | 				LD_RUNPATH_SEARCH_PATHS = (
611 | 					"$(inherited)",
612 | 					"@executable_path/Frameworks",
613 | 					"@executable_path/../../Frameworks",
614 | 				);
615 | 				MARKETING_VERSION = 1.0;
616 | 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
617 | 				MTL_FAST_MATH = YES;
618 | 				PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.example.RNWidget.StreakWidget;
619 | 				PRODUCT_NAME = "$(TARGET_NAME)";
620 | 				SKIP_INSTALL = YES;
621 | 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
622 | 				SWIFT_EMIT_LOC_STRINGS = YES;
623 | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
624 | 				SWIFT_VERSION = 5.0;
625 | 				TARGETED_DEVICE_FAMILY = "1,2";
626 | 			};
627 | 			name = Debug;
628 | 		};
629 | 		04495A2129FBCB600075ECFC /* Release */ = {
630 | 			isa = XCBuildConfiguration;
631 | 			buildSettings = {
632 | 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
633 | 				ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
634 | 				CLANG_ANALYZER_NONNULL = YES;
635 | 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
636 | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
637 | 				CLANG_ENABLE_OBJC_WEAK = YES;
638 | 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
639 | 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
640 | 				CODE_SIGN_STYLE = Automatic;
641 | 				COPY_PHASE_STRIP = NO;
642 | 				CURRENT_PROJECT_VERSION = 1;
643 | 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
644 | 				GCC_C_LANGUAGE_STANDARD = gnu11;
645 | 				GENERATE_INFOPLIST_FILE = YES;
646 | 				INFOPLIST_FILE = StreakWidget/Info.plist;
647 | 				INFOPLIST_KEY_CFBundleDisplayName = StreakWidget;
648 | 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
649 | 				IPHONEOS_DEPLOYMENT_TARGET = 15.2;
650 | 				LD_RUNPATH_SEARCH_PATHS = (
651 | 					"$(inherited)",
652 | 					"@executable_path/Frameworks",
653 | 					"@executable_path/../../Frameworks",
654 | 				);
655 | 				MARKETING_VERSION = 1.0;
656 | 				MTL_FAST_MATH = YES;
657 | 				PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.example.RNWidget.StreakWidget;
658 | 				PRODUCT_NAME = "$(TARGET_NAME)";
659 | 				SKIP_INSTALL = YES;
660 | 				SWIFT_COMPILATION_MODE = wholemodule;
661 | 				SWIFT_EMIT_LOC_STRINGS = YES;
662 | 				SWIFT_OPTIMIZATION_LEVEL = "-O";
663 | 				SWIFT_VERSION = 5.0;
664 | 				TARGETED_DEVICE_FAMILY = "1,2";
665 | 			};
666 | 			name = Release;
667 | 		};
668 | 		13B07F941A680F5B00A75B9A /* Debug */ = {
669 | 			isa = XCBuildConfiguration;
670 | 			baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-RNWidget.debug.xcconfig */;
671 | 			buildSettings = {
672 | 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
673 | 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
674 | 				CLANG_ENABLE_MODULES = YES;
675 | 				CODE_SIGN_ENTITLEMENTS = RNWidget/RNWidget.entitlements;
676 | 				CODE_SIGN_IDENTITY = "Apple Development";
677 | 				CODE_SIGN_STYLE = Automatic;
678 | 				CURRENT_PROJECT_VERSION = 1;
679 | 				DEVELOPMENT_TEAM = "";
680 | 				ENABLE_BITCODE = NO;
681 | 				INFOPLIST_FILE = RNWidget/Info.plist;
682 | 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
683 | 				LD_RUNPATH_SEARCH_PATHS = (
684 | 					"$(inherited)",
685 | 					"@executable_path/Frameworks",
686 | 				);
687 | 				MARKETING_VERSION = 1.0;
688 | 				OTHER_LDFLAGS = (
689 | 					"$(inherited)",
690 | 					"-ObjC",
691 | 					"-lc++",
692 | 				);
693 | 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
694 | 				PRODUCT_NAME = RNWidget;
695 | 				PROVISIONING_PROFILE_SPECIFIER = "";
696 | 				SWIFT_OBJC_BRIDGING_HEADER = "RNWidgetDemo/Widgets/Entries/RNWidget-Bridging-Header.h";
697 | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
698 | 				SWIFT_VERSION = 5.0;
699 | 				VERSIONING_SYSTEM = "apple-generic";
700 | 			};
701 | 			name = Debug;
702 | 		};
703 | 		13B07F951A680F5B00A75B9A /* Release */ = {
704 | 			isa = XCBuildConfiguration;
705 | 			baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-RNWidget.release.xcconfig */;
706 | 			buildSettings = {
707 | 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
708 | 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
709 | 				CLANG_ENABLE_MODULES = YES;
710 | 				CODE_SIGN_ENTITLEMENTS = RNWidget/RNWidget.entitlements;
711 | 				CODE_SIGN_IDENTITY = "Apple Development";
712 | 				CODE_SIGN_STYLE = Automatic;
713 | 				CURRENT_PROJECT_VERSION = 1;
714 | 				DEVELOPMENT_TEAM = "";
715 | 				INFOPLIST_FILE = RNWidget/Info.plist;
716 | 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
717 | 				LD_RUNPATH_SEARCH_PATHS = (
718 | 					"$(inherited)",
719 | 					"@executable_path/Frameworks",
720 | 				);
721 | 				MARKETING_VERSION = 1.0;
722 | 				OTHER_LDFLAGS = (
723 | 					"$(inherited)",
724 | 					"-ObjC",
725 | 					"-lc++",
726 | 				);
727 | 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
728 | 				PRODUCT_NAME = RNWidget;
729 | 				PROVISIONING_PROFILE_SPECIFIER = "";
730 | 				SWIFT_OBJC_BRIDGING_HEADER = "RNWidgetDemo/Widgets/Entries/RNWidget-Bridging-Header.h";
731 | 				SWIFT_VERSION = 5.0;
732 | 				VERSIONING_SYSTEM = "apple-generic";
733 | 			};
734 | 			name = Release;
735 | 		};
736 | 		83CBBA201A601CBA00E9B192 /* Debug */ = {
737 | 			isa = XCBuildConfiguration;
738 | 			buildSettings = {
739 | 				ALWAYS_SEARCH_USER_PATHS = NO;
740 | 				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
741 | 				CLANG_CXX_LANGUAGE_STANDARD = "c++17";
742 | 				CLANG_CXX_LIBRARY = "libc++";
743 | 				CLANG_ENABLE_MODULES = YES;
744 | 				CLANG_ENABLE_OBJC_ARC = YES;
745 | 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
746 | 				CLANG_WARN_BOOL_CONVERSION = YES;
747 | 				CLANG_WARN_COMMA = YES;
748 | 				CLANG_WARN_CONSTANT_CONVERSION = YES;
749 | 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
750 | 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
751 | 				CLANG_WARN_EMPTY_BODY = YES;
752 | 				CLANG_WARN_ENUM_CONVERSION = YES;
753 | 				CLANG_WARN_INFINITE_RECURSION = YES;
754 | 				CLANG_WARN_INT_CONVERSION = YES;
755 | 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
756 | 				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
757 | 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
758 | 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
759 | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
760 | 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
761 | 				CLANG_WARN_STRICT_PROTOTYPES = YES;
762 | 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
763 | 				CLANG_WARN_UNREACHABLE_CODE = YES;
764 | 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
765 | 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
766 | 				COPY_PHASE_STRIP = NO;
767 | 				ENABLE_STRICT_OBJC_MSGSEND = YES;
768 | 				ENABLE_TESTABILITY = YES;
769 | 				"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
770 | 				GCC_C_LANGUAGE_STANDARD = gnu99;
771 | 				GCC_DYNAMIC_NO_PIC = NO;
772 | 				GCC_NO_COMMON_BLOCKS = YES;
773 | 				GCC_OPTIMIZATION_LEVEL = 0;
774 | 				GCC_PREPROCESSOR_DEFINITIONS = (
775 | 					"DEBUG=1",
776 | 					"$(inherited)",
777 | 				);
778 | 				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
779 | 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
780 | 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
781 | 				GCC_WARN_UNDECLARED_SELECTOR = YES;
782 | 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
783 | 				GCC_WARN_UNUSED_FUNCTION = YES;
784 | 				GCC_WARN_UNUSED_VARIABLE = YES;
785 | 				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
786 | 				LD_RUNPATH_SEARCH_PATHS = (
787 | 					/usr/lib/swift,
788 | 					"$(inherited)",
789 | 				);
790 | 				LIBRARY_SEARCH_PATHS = (
791 | 					"\"$(SDKROOT)/usr/lib/swift\"",
792 | 					"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
793 | 					"\"$(inherited)\"",
794 | 				);
795 | 				MTL_ENABLE_DEBUG_INFO = YES;
796 | 				ONLY_ACTIVE_ARCH = YES;
797 | 				OTHER_CPLUSPLUSFLAGS = (
798 | 					"$(OTHER_CFLAGS)",
799 | 					"-DFOLLY_NO_CONFIG",
800 | 					"-DFOLLY_MOBILE=1",
801 | 					"-DFOLLY_USE_LIBCPP=1",
802 | 				);
803 | 				REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
804 | 				SDKROOT = iphoneos;
805 | 			};
806 | 			name = Debug;
807 | 		};
808 | 		83CBBA211A601CBA00E9B192 /* Release */ = {
809 | 			isa = XCBuildConfiguration;
810 | 			buildSettings = {
811 | 				ALWAYS_SEARCH_USER_PATHS = NO;
812 | 				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
813 | 				CLANG_CXX_LANGUAGE_STANDARD = "c++17";
814 | 				CLANG_CXX_LIBRARY = "libc++";
815 | 				CLANG_ENABLE_MODULES = YES;
816 | 				CLANG_ENABLE_OBJC_ARC = YES;
817 | 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
818 | 				CLANG_WARN_BOOL_CONVERSION = YES;
819 | 				CLANG_WARN_COMMA = YES;
820 | 				CLANG_WARN_CONSTANT_CONVERSION = YES;
821 | 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
822 | 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
823 | 				CLANG_WARN_EMPTY_BODY = YES;
824 | 				CLANG_WARN_ENUM_CONVERSION = YES;
825 | 				CLANG_WARN_INFINITE_RECURSION = YES;
826 | 				CLANG_WARN_INT_CONVERSION = YES;
827 | 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
828 | 				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
829 | 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
830 | 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
831 | 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
832 | 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
833 | 				CLANG_WARN_STRICT_PROTOTYPES = YES;
834 | 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
835 | 				CLANG_WARN_UNREACHABLE_CODE = YES;
836 | 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
837 | 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
838 | 				COPY_PHASE_STRIP = YES;
839 | 				ENABLE_NS_ASSERTIONS = NO;
840 | 				ENABLE_STRICT_OBJC_MSGSEND = YES;
841 | 				"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
842 | 				GCC_C_LANGUAGE_STANDARD = gnu99;
843 | 				GCC_NO_COMMON_BLOCKS = YES;
844 | 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
845 | 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
846 | 				GCC_WARN_UNDECLARED_SELECTOR = YES;
847 | 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
848 | 				GCC_WARN_UNUSED_FUNCTION = YES;
849 | 				GCC_WARN_UNUSED_VARIABLE = YES;
850 | 				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
851 | 				LD_RUNPATH_SEARCH_PATHS = (
852 | 					/usr/lib/swift,
853 | 					"$(inherited)",
854 | 				);
855 | 				LIBRARY_SEARCH_PATHS = (
856 | 					"\"$(SDKROOT)/usr/lib/swift\"",
857 | 					"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
858 | 					"\"$(inherited)\"",
859 | 				);
860 | 				MTL_ENABLE_DEBUG_INFO = NO;
861 | 				OTHER_CPLUSPLUSFLAGS = (
862 | 					"$(OTHER_CFLAGS)",
863 | 					"-DFOLLY_NO_CONFIG",
864 | 					"-DFOLLY_MOBILE=1",
865 | 					"-DFOLLY_USE_LIBCPP=1",
866 | 				);
867 | 				REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
868 | 				SDKROOT = iphoneos;
869 | 				VALIDATE_PRODUCT = YES;
870 | 			};
871 | 			name = Release;
872 | 		};
873 | /* End XCBuildConfiguration section */
874 | 
875 | /* Begin XCConfigurationList section */
876 | 		00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNWidgetTests" */ = {
877 | 			isa = XCConfigurationList;
878 | 			buildConfigurations = (
879 | 				00E356F61AD99517003FC87E /* Debug */,
880 | 				00E356F71AD99517003FC87E /* Release */,
881 | 			);
882 | 			defaultConfigurationIsVisible = 0;
883 | 			defaultConfigurationName = Release;
884 | 		};
885 | 		04495A2229FBCB600075ECFC /* Build configuration list for PBXNativeTarget "StreakWidgetExtension" */ = {
886 | 			isa = XCConfigurationList;
887 | 			buildConfigurations = (
888 | 				04495A2029FBCB600075ECFC /* Debug */,
889 | 				04495A2129FBCB600075ECFC /* Release */,
890 | 			);
891 | 			defaultConfigurationIsVisible = 0;
892 | 			defaultConfigurationName = Release;
893 | 		};
894 | 		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNWidget" */ = {
895 | 			isa = XCConfigurationList;
896 | 			buildConfigurations = (
897 | 				13B07F941A680F5B00A75B9A /* Debug */,
898 | 				13B07F951A680F5B00A75B9A /* Release */,
899 | 			);
900 | 			defaultConfigurationIsVisible = 0;
901 | 			defaultConfigurationName = Release;
902 | 		};
903 | 		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNWidget" */ = {
904 | 			isa = XCConfigurationList;
905 | 			buildConfigurations = (
906 | 				83CBBA201A601CBA00E9B192 /* Debug */,
907 | 				83CBBA211A601CBA00E9B192 /* Release */,
908 | 			);
909 | 			defaultConfigurationIsVisible = 0;
910 | 			defaultConfigurationName = Release;
911 | 		};
912 | /* End XCConfigurationList section */
913 | 	};
914 | 	rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
915 | }
916 | 
--------------------------------------------------------------------------------
/ios/RNWidget.xcodeproj/xcshareddata/xcschemes/RNWidget.xcscheme:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 5 |    
 8 |       
 9 |          
15 |             
21 |             
22 |          
23 |       
24 |    
25 |    
30 |       
31 |          
33 |             
39 |             
40 |          
41 |       
42 |    
43 |    
53 |       
55 |          
61 |          
62 |       
63 |    
64 |    
70 |       
72 |          
78 |          
79 |       
80 |    
81 |    
83 |    
84 |    
87 |    
88 | 
89 | 
--------------------------------------------------------------------------------
/ios/RNWidget.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 4 |    
 6 |    
 7 |    
 9 |    
10 | 
11 | 
--------------------------------------------------------------------------------
/ios/RNWidget.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 | 
2 | 
3 | 
4 | 
5 | 	IDEDidComputeMac32BitWarning
6 | 	
7 | 
8 | 
9 | 
--------------------------------------------------------------------------------
/ios/RNWidget/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import 
2 | #import 
3 | 
4 | @interface AppDelegate : RCTAppDelegate
5 | 
6 | @end
7 | 
--------------------------------------------------------------------------------
/ios/RNWidget/AppDelegate.mm:
--------------------------------------------------------------------------------
 1 | #import "AppDelegate.h"
 2 | 
 3 | #import 
 4 | 
 5 | @implementation AppDelegate
 6 | 
 7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 8 | {
 9 |   self.moduleName = @"RNWidget";
10 |   // You can add your custom initial props in the dictionary below.
11 |   // They will be passed down to the ViewController used by React Native.
12 |   self.initialProps = @{};
13 | 
14 |   return [super application:application didFinishLaunchingWithOptions:launchOptions];
15 | }
16 | 
17 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
18 | {
19 | #if DEBUG
20 |   return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
21 | #else
22 |   return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
23 | #endif
24 | }
25 | 
26 | /// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
27 | ///
28 | /// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
29 | /// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
30 | /// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`.
31 | - (BOOL)concurrentRootEnabled
32 | {
33 |   return true;
34 | }
35 | 
36 | @end
37 | 
--------------------------------------------------------------------------------
/ios/RNWidget/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "images" : [
 3 |     {
 4 |       "idiom" : "iphone",
 5 |       "scale" : "2x",
 6 |       "size" : "20x20"
 7 |     },
 8 |     {
 9 |       "idiom" : "iphone",
10 |       "scale" : "3x",
11 |       "size" : "20x20"
12 |     },
13 |     {
14 |       "idiom" : "iphone",
15 |       "scale" : "2x",
16 |       "size" : "29x29"
17 |     },
18 |     {
19 |       "idiom" : "iphone",
20 |       "scale" : "3x",
21 |       "size" : "29x29"
22 |     },
23 |     {
24 |       "idiom" : "iphone",
25 |       "scale" : "2x",
26 |       "size" : "40x40"
27 |     },
28 |     {
29 |       "idiom" : "iphone",
30 |       "scale" : "3x",
31 |       "size" : "40x40"
32 |     },
33 |     {
34 |       "idiom" : "iphone",
35 |       "scale" : "2x",
36 |       "size" : "60x60"
37 |     },
38 |     {
39 |       "idiom" : "iphone",
40 |       "scale" : "3x",
41 |       "size" : "60x60"
42 |     },
43 |     {
44 |       "idiom" : "ios-marketing",
45 |       "scale" : "1x",
46 |       "size" : "1024x1024"
47 |     }
48 |   ],
49 |   "info" : {
50 |     "author" : "xcode",
51 |     "version" : 1
52 |   }
53 | }
54 | 
--------------------------------------------------------------------------------
/ios/RNWidget/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 |   "info" : {
3 |     "author" : "xcode",
4 |     "version" : 1
5 |   }
6 | }
7 | 
--------------------------------------------------------------------------------
/ios/RNWidget/Info.plist:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	CFBundleDevelopmentRegion
 6 | 	en
 7 | 	CFBundleDisplayName
 8 | 	RNWidget
 9 | 	CFBundleExecutable
10 | 	$(EXECUTABLE_NAME)
11 | 	CFBundleIdentifier
12 | 	$(PRODUCT_BUNDLE_IDENTIFIER)
13 | 	CFBundleInfoDictionaryVersion
14 | 	6.0
15 | 	CFBundleName
16 | 	$(PRODUCT_NAME)
17 | 	CFBundlePackageType
18 | 	APPL
19 | 	CFBundleShortVersionString
20 | 	$(MARKETING_VERSION)
21 | 	CFBundleSignature
22 | 	????
23 | 	CFBundleVersion
24 | 	$(CURRENT_PROJECT_VERSION)
25 | 	LSRequiresIPhoneOS
26 | 	
27 | 	NSAppTransportSecurity
28 | 	
29 | 		NSExceptionDomains
30 | 		
31 | 			localhost
32 | 			
33 | 				NSExceptionAllowsInsecureHTTPLoads
34 | 				
35 | 			
36 | 		
37 | 	
38 | 	NSLocationWhenInUseUsageDescription
39 | 	
40 | 	UILaunchStoryboardName
41 | 	LaunchScreen
42 | 	UIRequiredDeviceCapabilities
43 | 	
44 | 		armv7
45 | 	
46 | 	UISupportedInterfaceOrientations
47 | 	
48 | 		UIInterfaceOrientationPortrait
49 | 		UIInterfaceOrientationLandscapeLeft
50 | 		UIInterfaceOrientationLandscapeRight
51 | 	
52 | 	UIViewControllerBasedStatusBarAppearance
53 | 	
54 | 
55 | 
56 | 
--------------------------------------------------------------------------------
/ios/RNWidget/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |     
 4 |     
 5 |         
 6 |         
 7 |         
 8 |         
 9 |     
10 |     
11 |         
12 |         
13 |             
14 |                 
15 |                     
16 |                         
17 |                         
18 |                         
19 |                             
24 |                             
29 |                         
30 |                         
31 |                         
32 |                             
33 |                             
34 |                             
35 |                             
36 |                             
37 |                             
38 |                         
39 |                         
40 |                     
41 |                 
42 |                 
43 |             
44 |             
45 |         
46 |     
47 | 
48 | 
--------------------------------------------------------------------------------
/ios/RNWidget/RNWidget.entitlements:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	com.apple.security.application-groups
 6 | 	
 7 | 		group.com.rnwidget.streak
 8 | 	
 9 | 
10 | 
11 | 
--------------------------------------------------------------------------------
/ios/RNWidget/main.m:
--------------------------------------------------------------------------------
 1 | #import 
 2 | 
 3 | #import "AppDelegate.h"
 4 | 
 5 | int main(int argc, char *argv[])
 6 | {
 7 |   @autoreleasepool {
 8 |     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
 9 |   }
10 | }
11 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "colors" : [
 3 |     {
 4 |       "idiom" : "universal"
 5 |     }
 6 |   ],
 7 |   "info" : {
 8 |     "author" : "xcode",
 9 |     "version" : 1
10 |   }
11 | }
12 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "images" : [
 3 |     {
 4 |       "idiom" : "iphone",
 5 |       "scale" : "2x",
 6 |       "size" : "20x20"
 7 |     },
 8 |     {
 9 |       "idiom" : "iphone",
10 |       "scale" : "3x",
11 |       "size" : "20x20"
12 |     },
13 |     {
14 |       "idiom" : "iphone",
15 |       "scale" : "2x",
16 |       "size" : "29x29"
17 |     },
18 |     {
19 |       "idiom" : "iphone",
20 |       "scale" : "3x",
21 |       "size" : "29x29"
22 |     },
23 |     {
24 |       "idiom" : "iphone",
25 |       "scale" : "2x",
26 |       "size" : "40x40"
27 |     },
28 |     {
29 |       "idiom" : "iphone",
30 |       "scale" : "3x",
31 |       "size" : "40x40"
32 |     },
33 |     {
34 |       "idiom" : "iphone",
35 |       "scale" : "2x",
36 |       "size" : "60x60"
37 |     },
38 |     {
39 |       "idiom" : "iphone",
40 |       "scale" : "3x",
41 |       "size" : "60x60"
42 |     },
43 |     {
44 |       "idiom" : "ipad",
45 |       "scale" : "1x",
46 |       "size" : "20x20"
47 |     },
48 |     {
49 |       "idiom" : "ipad",
50 |       "scale" : "2x",
51 |       "size" : "20x20"
52 |     },
53 |     {
54 |       "idiom" : "ipad",
55 |       "scale" : "1x",
56 |       "size" : "29x29"
57 |     },
58 |     {
59 |       "idiom" : "ipad",
60 |       "scale" : "2x",
61 |       "size" : "29x29"
62 |     },
63 |     {
64 |       "idiom" : "ipad",
65 |       "scale" : "1x",
66 |       "size" : "40x40"
67 |     },
68 |     {
69 |       "idiom" : "ipad",
70 |       "scale" : "2x",
71 |       "size" : "40x40"
72 |     },
73 |     {
74 |       "idiom" : "ipad",
75 |       "scale" : "1x",
76 |       "size" : "76x76"
77 |     },
78 |     {
79 |       "idiom" : "ipad",
80 |       "scale" : "2x",
81 |       "size" : "76x76"
82 |     },
83 |     {
84 |       "idiom" : "ipad",
85 |       "scale" : "2x",
86 |       "size" : "83.5x83.5"
87 |     },
88 |     {
89 |       "idiom" : "ios-marketing",
90 |       "scale" : "1x",
91 |       "size" : "1024x1024"
92 |     }
93 |   ],
94 |   "info" : {
95 |     "author" : "xcode",
96 |     "version" : 1
97 |   }
98 | }
99 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 |   "info" : {
3 |     "author" : "xcode",
4 |     "version" : 1
5 |   }
6 | }
7 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Assets.xcassets/WidgetBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "colors" : [
 3 |     {
 4 |       "idiom" : "universal"
 5 |     }
 6 |   ],
 7 |   "info" : {
 8 |     "author" : "xcode",
 9 |     "version" : 1
10 |   }
11 | }
12 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Info.plist:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	NSExtension
 6 | 	
 7 | 		NSExtensionPointIdentifier
 8 | 		com.apple.widgetkit-extension
 9 | 	
10 | 
11 | 
12 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/RNWidgetDemo.intentdefinition:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	INEnums
 6 | 	
 7 | 	INIntentDefinitionModelVersion
 8 | 	1.2
 9 | 	INIntentDefinitionNamespace
10 | 	88xZPY
11 | 	INIntentDefinitionSystemVersion
12 | 	20A294
13 | 	INIntentDefinitionToolsBuildVersion
14 | 	12A6144
15 | 	INIntentDefinitionToolsVersion
16 | 	12.0
17 | 	INIntents
18 | 	
19 | 		
20 | 			INIntentCategory
21 | 			information
22 | 			INIntentDescriptionID
23 | 			tVvJ9c
24 | 			INIntentEligibleForWidgets
25 | 			
26 | 			INIntentIneligibleForSuggestions
27 | 			
28 | 			INIntentName
29 | 			Configuration
30 | 			INIntentResponse
31 | 			
32 | 				INIntentResponseCodes
33 | 				
34 | 					
35 | 						INIntentResponseCodeName
36 | 						success
37 | 						INIntentResponseCodeSuccess
38 | 						
39 | 					
40 | 					
41 | 						INIntentResponseCodeName
42 | 						failure
43 | 					
44 | 				
45 | 			
46 | 			INIntentTitle
47 | 			Configuration
48 | 			INIntentTitleID
49 | 			gpCwrM
50 | 			INIntentType
51 | 			Custom
52 | 			INIntentVerb
53 | 			View
54 | 		
55 | 	
56 | 	INTypes
57 | 	
58 | 
59 | 
60 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/RNWidgetDemo.swift:
--------------------------------------------------------------------------------
 1 | //
 2 | //  RNWidgetDemo.swift
 3 | //  RNWidgetDemo
 4 | //
 5 | //  Created by MAC on 28/04/23.
 6 | //
 7 | 
 8 | import WidgetKit
 9 | import SwiftUI
10 | import Intents
11 | 
12 | struct Provider: IntentTimelineProvider {
13 |      func placeholder(in context: Context) -> Entry {
14 |         Entry(configuration: ConfigurationIntent(), date: Date(), startDate: nil)
15 |     }
16 | 
17 |     func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Entry) -> ()) {
18 |         let entry = Entry(configuration: context.isPreview ? ConfigurationIntent() : configuration, date: Date(), startDate: nil)
19 |         completion(entry)
20 |     }
21 | 
22 |   func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> ()) {
23 |       var entries: [Entry] = []
24 | 
25 |         // Generate a timeline consisting of five entries an hour apart, starting from the current date.
26 |         let currentDate = Date()
27 |         for hourOffset in 0 ..< 5 {
28 |             let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
29 |             let entry = Entry(configuration: configuration, date: Date(), startDate: entryDate)
30 |             entries.append(entry)
31 |         }
32 | 
33 |         let timeline = Timeline(entries: entries, policy: .atEnd)
34 |         completion(timeline)
35 |     }
36 | }
37 | 
38 | struct Entry: TimelineEntry {
39 |     let configuration: ConfigurationIntent
40 |     let date: Date
41 | 
42 |     let startDate: Date?
43 | }
44 | 
45 | struct RNWidgetDemoEntryView : View {
46 |     var entry: Provider.Entry
47 | 
48 |     var body: some View {
49 |        HStack {
50 |             VStack(alignment: .leading, spacing: 15) {
51 |                 Image("duo")
52 |                     .resizable()
53 |                     .aspectRatio(contentMode: .fit)
54 |                     .frame(width: 40, height: 40)
55 |                 Spacer()
56 |                 Text("RIDE")
57 |                     .foregroundColor(Color(red: 115 / 255, green: 85 / 255, blue: 7 / 255))
58 |                     .font(Font.system(size: 16, weight: .bold, design: .rounded))
59 |                     .padding([.top, .bottom], 15)
60 |                     .frame(maxWidth: .infinity)
61 |                     .background(Color(red: 248 / 255, green: 220 / 255, blue: 150 / 255))
62 |                     .cornerRadius(16)
63 |             }
64 |         }
65 |         .frame(maxWidth: .infinity, maxHeight: .infinity)
66 |         .padding(15)
67 |         .background(Color(red: 251 / 255, green: 236 / 255, blue: 197 / 255))
68 |     }
69 | }
70 | 
71 | @main
72 | struct RNWidgetDemo: Widget {
73 |     let kind: String = "RNWidgetDemo"
74 | 
75 |     var body: some WidgetConfiguration {
76 |         IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in
77 |             RNWidgetDemoEntryView(entry: entry)
78 |         }
79 |         .configurationDisplayName("My Widget")
80 |         .description("This is an example widget.")
81 |         .supportedFamilies([.systemSmall, .systemMedium])
82 |     }
83 | }
84 | 
85 | struct RNWidgetDemo_Previews: PreviewProvider {
86 |     static var previews: some View {
87 |         RNWidgetDemoEntryView(entry: Entry(date: Date(), configuration: ConfigurationIntent()))
88 |             .previewContext(WidgetPreviewContext(family: .systemSmall))
89 |     }
90 | }
91 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Timeline Providers/Entries/StreakEntry.swift:
--------------------------------------------------------------------------------
 1 | //
 2 | //  StreakEntry.swift
 3 | //  RNWidget
 4 | //
 5 | //  Created by MAC on 28/04/23.
 6 | //
 7 | 
 8 | import Foundation
 9 | import WidgetKit
10 | 
11 | struct StreakEntry: TimelineEntry {
12 | 
13 |     let configuration: ConfigurationIntent
14 |     let date: Date
15 | 
16 |     let startDate: Date?
17 | }
18 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Timeline Providers/StreakTimelineProvider.swift:
--------------------------------------------------------------------------------
 1 | //
 2 | //  StreakTimelineProvider.swift
 3 | //  RNWidget
 4 | //
 5 | //  Created by MAC on 28/04/23.
 6 | //
 7 | 
 8 | import Foundation
 9 | import WidgetKit
10 | 
11 | struct StreakTimelineProvider: IntentTimelineProvider {
12 |     
13 |     typealias Entry = StreakEntry
14 |     
15 |     func placeholder(in context: Context) -> Entry {
16 |         Entry(configuration: ConfigurationIntent(), date: Date(), startDate: nil)
17 |     }
18 | 
19 |     func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Entry) -> ()) {
20 |         let entry = Entry(configuration: context.isPreview ? ConfigurationIntent() : configuration, date: Date(), startDate: nil)
21 |         completion(entry)
22 |     }
23 | 
24 |   func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> ()) {
25 |       var entries: [Entry] = []
26 | 
27 |         // Generate a timeline consisting of five entries an hour apart, starting from the current date.
28 |         let currentDate = Date()
29 |         for hourOffset in 0 ..< 5 {
30 |             let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
31 |             let entry = Entry(configuration: configuration, date: Date(), startDate: entryDate)
32 |             entries.append(entry)
33 |         }
34 | 
35 |         let timeline = Timeline(entries: entries, policy: .atEnd)
36 |         completion(timeline)
37 |     }
38 | 
39 | }
40 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Views/StreakWidgetEntryView.swift:
--------------------------------------------------------------------------------
 1 | //
 2 | //  StreakWidgetEntryView.swift
 3 | //  RNWidget
 4 | //
 5 | //  Created by MAC on 28/04/23.
 6 | //
 7 | 
 8 | import Foundation
 9 | import SwiftUI
10 | 
11 | struct StreakWidgetEntryView: View {
12 |     
13 |     @Environment(\.widgetFamily) var family
14 |     
15 |     var entry: StreakTimelineProvider.Entry
16 |   
17 |   var body: some View {
18 |    return emptyRideView
19 |   }
20 |     
21 |     var emptyRideView: some View {
22 |         HStack {
23 |             VStack(alignment: .leading, spacing: 15) {
24 |                 Image("scooter-yellow")
25 |                     .resizable()
26 |                     .aspectRatio(contentMode: .fit)
27 |                     .frame(width: 40, height: 40)
28 |                 Spacer()
29 |                 Text("RIDE")
30 |                     .foregroundColor(Color(red: 115 / 255, green: 85 / 255, blue: 7 / 255))
31 |                     .font(Font.system(size: 16, weight: .bold, design: .rounded))
32 |                     .padding([.top, .bottom], 15)
33 |                     .frame(maxWidth: .infinity)
34 |                     .background(Color(red: 248 / 255, green: 220 / 255, blue: 150 / 255))
35 |                     .cornerRadius(16)
36 |             }
37 |         }
38 |         .frame(maxWidth: .infinity, maxHeight: .infinity)
39 |         .padding(15)
40 |         .background(Color(red: 251 / 255, green: 236 / 255, blue: 197 / 255))
41 |     }
42 |     
43 |     func getBatteryStatusColor(_ charge: Int) -> Color {
44 |         if charge >= 90 {
45 |             return Color.green.opacity(0.7)
46 |         }
47 |         if charge < 90, charge >= 30 {
48 |             return Color.yellow
49 |         }
50 |         return Color.red.opacity(0.7)
51 |     }
52 | 
53 | }
54 | 
--------------------------------------------------------------------------------
/ios/RNWidgetDemo/Widgets/StreakWidget.swift:
--------------------------------------------------------------------------------
 1 | //
 2 | //  StreakWidget.swift
 3 | //  RNWidget
 4 | //
 5 | //  Created by MAC on 28/04/23.
 6 | //
 7 | 
 8 | import Foundation
 9 | import SwiftUI
10 | import WidgetKit
11 | 
12 | struct StreakWidget: Widget {
13 | 
14 |     let kind: String = "StreakWidget"
15 | 
16 |     var body: some WidgetConfiguration {
17 |         IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: StreakTimelineProvider()) { entry in
18 |             StreakWidgetEntryView(entry: entry)
19 |         }
20 |         .configurationDisplayName("Streak Widget")
21 |         .description("This is an example widget.")
22 |         .supportedFamilies([.systemSmall, .systemMedium])
23 |     }
24 | 
25 | }
26 | 
--------------------------------------------------------------------------------
/ios/RNWidgetTests/Info.plist:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	CFBundleDevelopmentRegion
 6 | 	en
 7 | 	CFBundleExecutable
 8 | 	$(EXECUTABLE_NAME)
 9 | 	CFBundleIdentifier
10 | 	$(PRODUCT_BUNDLE_IDENTIFIER)
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 | 
--------------------------------------------------------------------------------
/ios/RNWidgetTests/RNWidgetTests.m:
--------------------------------------------------------------------------------
 1 | #import 
 2 | #import 
 3 | 
 4 | #import 
 5 | #import 
 6 | 
 7 | #define TIMEOUT_SECONDS 600
 8 | #define TEXT_TO_LOOK_FOR @"Welcome to React"
 9 | 
10 | @interface RNWidgetTests : XCTestCase
11 | 
12 | @end
13 | 
14 | @implementation RNWidgetTests
15 | 
16 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
17 | {
18 |   if (test(view)) {
19 |     return YES;
20 |   }
21 |   for (UIView *subview in [view subviews]) {
22 |     if ([self findSubviewInView:subview matching:test]) {
23 |       return YES;
24 |     }
25 |   }
26 |   return NO;
27 | }
28 | 
29 | - (void)testRendersWelcomeScreen
30 | {
31 |   UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
32 |   NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
33 |   BOOL foundElement = NO;
34 | 
35 |   __block NSString *redboxError = nil;
36 | #ifdef DEBUG
37 |   RCTSetLogFunction(
38 |       ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
39 |         if (level >= RCTLogLevelError) {
40 |           redboxError = message;
41 |         }
42 |       });
43 | #endif
44 | 
45 |   while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
46 |     [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
47 |     [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
48 | 
49 |     foundElement = [self findSubviewInView:vc.view
50 |                                   matching:^BOOL(UIView *view) {
51 |                                     if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
52 |                                       return YES;
53 |                                     }
54 |                                     return NO;
55 |                                   }];
56 |   }
57 | 
58 | #ifdef DEBUG
59 |   RCTSetLogFunction(RCTDefaultLogFunction);
60 | #endif
61 | 
62 |   XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
63 |   XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
64 | }
65 | 
66 | @end
67 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "colors" : [
 3 |     {
 4 |       "idiom" : "universal"
 5 |     }
 6 |   ],
 7 |   "info" : {
 8 |     "author" : "xcode",
 9 |     "version" : 1
10 |   }
11 | }
12 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "images" : [
 3 |     {
 4 |       "idiom" : "iphone",
 5 |       "scale" : "2x",
 6 |       "size" : "20x20"
 7 |     },
 8 |     {
 9 |       "idiom" : "iphone",
10 |       "scale" : "3x",
11 |       "size" : "20x20"
12 |     },
13 |     {
14 |       "idiom" : "iphone",
15 |       "scale" : "2x",
16 |       "size" : "29x29"
17 |     },
18 |     {
19 |       "idiom" : "iphone",
20 |       "scale" : "3x",
21 |       "size" : "29x29"
22 |     },
23 |     {
24 |       "idiom" : "iphone",
25 |       "scale" : "2x",
26 |       "size" : "40x40"
27 |     },
28 |     {
29 |       "idiom" : "iphone",
30 |       "scale" : "3x",
31 |       "size" : "40x40"
32 |     },
33 |     {
34 |       "idiom" : "iphone",
35 |       "scale" : "2x",
36 |       "size" : "60x60"
37 |     },
38 |     {
39 |       "idiom" : "iphone",
40 |       "scale" : "3x",
41 |       "size" : "60x60"
42 |     },
43 |     {
44 |       "idiom" : "ipad",
45 |       "scale" : "1x",
46 |       "size" : "20x20"
47 |     },
48 |     {
49 |       "idiom" : "ipad",
50 |       "scale" : "2x",
51 |       "size" : "20x20"
52 |     },
53 |     {
54 |       "idiom" : "ipad",
55 |       "scale" : "1x",
56 |       "size" : "29x29"
57 |     },
58 |     {
59 |       "idiom" : "ipad",
60 |       "scale" : "2x",
61 |       "size" : "29x29"
62 |     },
63 |     {
64 |       "idiom" : "ipad",
65 |       "scale" : "1x",
66 |       "size" : "40x40"
67 |     },
68 |     {
69 |       "idiom" : "ipad",
70 |       "scale" : "2x",
71 |       "size" : "40x40"
72 |     },
73 |     {
74 |       "idiom" : "ipad",
75 |       "scale" : "1x",
76 |       "size" : "76x76"
77 |     },
78 |     {
79 |       "idiom" : "ipad",
80 |       "scale" : "2x",
81 |       "size" : "76x76"
82 |     },
83 |     {
84 |       "idiom" : "ipad",
85 |       "scale" : "2x",
86 |       "size" : "83.5x83.5"
87 |     },
88 |     {
89 |       "idiom" : "ios-marketing",
90 |       "scale" : "1x",
91 |       "size" : "1024x1024"
92 |     }
93 |   ],
94 |   "info" : {
95 |     "author" : "xcode",
96 |     "version" : 1
97 |   }
98 | }
99 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 |   "info" : {
3 |     "author" : "xcode",
4 |     "version" : 1
5 |   }
6 | }
7 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "colors" : [
 3 |     {
 4 |       "idiom" : "universal"
 5 |     }
 6 |   ],
 7 |   "info" : {
 8 |     "author" : "xcode",
 9 |     "version" : 1
10 |   }
11 | }
12 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/duo.imageset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "images" : [
 3 |     {
 4 |       "filename" : "duo.png",
 5 |       "idiom" : "universal",
 6 |       "scale" : "1x"
 7 |     },
 8 |     {
 9 |       "filename" : "duo-1.png",
10 |       "idiom" : "universal",
11 |       "scale" : "2x"
12 |     },
13 |     {
14 |       "filename" : "duo-2.png",
15 |       "idiom" : "universal",
16 |       "scale" : "3x"
17 |     }
18 |   ],
19 |   "info" : {
20 |     "author" : "xcode",
21 |     "version" : 1
22 |   }
23 | }
24 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/duo.imageset/duo-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/ios/StreakWidget/Assets.xcassets/duo.imageset/duo-1.png
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/duo.imageset/duo-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/ios/StreakWidget/Assets.xcassets/duo.imageset/duo-2.png
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/duo.imageset/duo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/ios/StreakWidget/Assets.xcassets/duo.imageset/duo.png
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/streak.imageset/Contents.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "images" : [
 3 |     {
 4 |       "filename" : "streak.png",
 5 |       "idiom" : "universal",
 6 |       "scale" : "1x"
 7 |     },
 8 |     {
 9 |       "filename" : "streak-1.png",
10 |       "idiom" : "universal",
11 |       "scale" : "2x"
12 |     },
13 |     {
14 |       "filename" : "streak-2.png",
15 |       "idiom" : "universal",
16 |       "scale" : "3x"
17 |     }
18 |   ],
19 |   "info" : {
20 |     "author" : "xcode",
21 |     "version" : 1
22 |   }
23 | }
24 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/streak.imageset/streak-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/ios/StreakWidget/Assets.xcassets/streak.imageset/streak-1.png
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/streak.imageset/streak-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/ios/StreakWidget/Assets.xcassets/streak.imageset/streak-2.png
--------------------------------------------------------------------------------
/ios/StreakWidget/Assets.xcassets/streak.imageset/streak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/ios/StreakWidget/Assets.xcassets/streak.imageset/streak.png
--------------------------------------------------------------------------------
/ios/StreakWidget/Info.plist:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	NSExtension
 6 | 	
 7 | 		NSExtensionPointIdentifier
 8 | 		com.apple.widgetkit-extension
 9 | 	
10 | 
11 | 
12 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/StreakWidget.entitlements:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	com.apple.security.application-groups
 6 | 	
 7 | 		group.com.rnwidget.streak
 8 | 	
 9 | 
10 | 
11 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/StreakWidget.intentdefinition:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 
 5 | 	INEnums
 6 | 	
 7 | 	INIntentDefinitionModelVersion
 8 | 	1.2
 9 | 	INIntentDefinitionNamespace
10 | 	88xZPY
11 | 	INIntentDefinitionSystemVersion
12 | 	20A294
13 | 	INIntentDefinitionToolsBuildVersion
14 | 	12A6144
15 | 	INIntentDefinitionToolsVersion
16 | 	12.0
17 | 	INIntents
18 | 	
19 | 		
20 | 			INIntentCategory
21 | 			information
22 | 			INIntentDescriptionID
23 | 			tVvJ9c
24 | 			INIntentEligibleForWidgets
25 | 			
26 | 			INIntentIneligibleForSuggestions
27 | 			
28 | 			INIntentName
29 | 			Configuration
30 | 			INIntentResponse
31 | 			
32 | 				INIntentResponseCodes
33 | 				
34 | 					
35 | 						INIntentResponseCodeName
36 | 						success
37 | 						INIntentResponseCodeSuccess
38 | 						
39 | 					
40 | 					
41 | 						INIntentResponseCodeName
42 | 						failure
43 | 					
44 | 				
45 | 			
46 | 			INIntentTitle
47 | 			Configuration
48 | 			INIntentTitleID
49 | 			gpCwrM
50 | 			INIntentType
51 | 			Custom
52 | 			INIntentVerb
53 | 			View
54 | 		
55 | 	
56 | 	INTypes
57 | 	
58 | 
59 | 
60 | 
--------------------------------------------------------------------------------
/ios/StreakWidget/StreakWidget.swift:
--------------------------------------------------------------------------------
  1 | //
  2 | //  StreakWidget.swift
  3 | //  StreakWidget
  4 | //
  5 | //  Created by MAC on 28/04/23.
  6 | //
  7 | 
  8 | import WidgetKit
  9 | import SwiftUI
 10 | import Intents
 11 | 
 12 | struct WidgetData: Decodable {
 13 |    var text: String
 14 | }
 15 | 
 16 | struct Provider: IntentTimelineProvider {
 17 |    func placeholder(in context: Context) -> SimpleEntry {
 18 |       SimpleEntry(date: Date(), configuration: ConfigurationIntent(), text: "Placeholder")
 19 |   }
 20 |   
 21 |   func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) {
 22 |       let entry = SimpleEntry(date: Date(), configuration: configuration, text: "Data goes here")
 23 |       completion(entry)
 24 |   }
 25 |   
 26 |    func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> Void) {
 27 |       let userDefaults = UserDefaults.init(suiteName: "group.streak")
 28 |       if userDefaults != nil {
 29 |         let entryDate = Date()
 30 |         if let savedData = userDefaults!.value(forKey: "widgetKey") as? String {
 31 |             let decoder = JSONDecoder()
 32 |             let data = savedData.data(using: .utf8)
 33 |             if let parsedData = try? decoder.decode(WidgetData.self, from: data!) {
 34 |                 let nextRefresh = Calendar.current.date(byAdding: .minute, value: 5, to: entryDate)!
 35 |                 let entry = SimpleEntry(date: nextRefresh, configuration: configuration, text: parsedData.text)
 36 |                 let timeline = Timeline(entries: [entry], policy: .atEnd)
 37 |                 completion(timeline)
 38 |             } else {
 39 |                 print("Could not parse data")
 40 |             }
 41 |         } else {
 42 |             let nextRefresh = Calendar.current.date(byAdding: .minute, value: 5, to: entryDate)!
 43 |             let entry = SimpleEntry(date: nextRefresh, configuration: configuration, text: "No data set")
 44 |             let timeline = Timeline(entries: [entry], policy: .atEnd)
 45 |             completion(timeline)
 46 |         }
 47 |       }
 48 |   }
 49 | }
 50 | 
 51 | struct SimpleEntry: TimelineEntry {
 52 |    let date: Date
 53 |       let configuration: ConfigurationIntent
 54 |       let text: String
 55 | }
 56 | 
 57 | struct StreakWidgetEntryView : View {
 58 |   var entry: Provider.Entry
 59 |   
 60 |   var body: some View {
 61 |     HStack {
 62 |       VStack(alignment: .leading, spacing: 0) {
 63 |         HStack(alignment: .center) {
 64 |           Image("streak")
 65 |             .resizable()
 66 |             .aspectRatio(contentMode: .fit)
 67 |             .frame(width: 37, height: 37)
 68 |           Text(entry.text)
 69 |             .foregroundColor(Color(red: 1.00, green: 0.59, blue: 0.00))
 70 |             .font(Font.system(size: 21, weight: .bold, design: .rounded))
 71 |             .padding(.leading, -8.0)
 72 |         }
 73 |         .padding(.top, 10.0)
 74 |         .frame(maxWidth: .infinity)
 75 |         Text("Way to go!")
 76 |           .foregroundColor(Color(red: 0.69, green: 0.69, blue: 0.69))
 77 |           .font(Font.system(size: 14))
 78 |           .frame(maxWidth: .infinity)
 79 |         Image("duo")
 80 |           .renderingMode(.original)
 81 |           .resizable()
 82 |           .aspectRatio(contentMode: .fit)
 83 |           .frame(maxWidth: .infinity)
 84 |         
 85 |       }
 86 |     }
 87 |     .frame(maxWidth: .infinity, maxHeight: .infinity)
 88 |   }
 89 | }
 90 | 
 91 | @main
 92 | struct StreakWidget: Widget {
 93 |   let kind: String = "StreakWidget"
 94 |   
 95 |   var body: some WidgetConfiguration {
 96 |     IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in
 97 |       StreakWidgetEntryView(entry: entry)
 98 |     }
 99 |     .configurationDisplayName("My Widget")
100 |     .description("This is an example widget.")
101 |   }
102 | }
103 | 
104 | struct StreakWidget_Previews: PreviewProvider {
105 |   static var previews: some View {
106 |     StreakWidgetEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent(), text: "Widget preview"))
107 |       .previewContext(WidgetPreviewContext(family: .systemSmall))
108 |   }
109 | }
110 | 
--------------------------------------------------------------------------------
/iphone_run.sh:
--------------------------------------------------------------------------------
 1 | reset
 2 | 
 3 | # xcrun simctl list devices 
 4 | # above command is used to list all the available iOS devices
 5 | 
 6 | # npx react-native run-ios
 7 | # npx react-native run-ios --simulator="iPhone 8"
 8 | # npx react-native run-ios --simulator="iPhone 8 Plus"
 9 | # npx react-native run-ios --simulator="iPhone 11 Pro Max"
10 | npx react-native run-ios --simulator="iPhone 13 Pro Max"
11 | # npx react-native run-ios --simulator="iPhone 11"
12 | # npx react-native run-ios --simulator="iPhone 11 Pro"
13 | # npx react-native run-ios --device "Mac1's iPhone"
14 | 
15 | #  npx react-native run-ios --simulator="iPad Pro (9.7-inch)"
16 | # npx react-native run-ios --simulator="iPad Pro (11-inch)"
17 | # npx react-native run-ios --simulator="iPad Pro (12.9-inch) (3rd generation)"
--------------------------------------------------------------------------------
/metro.config.js:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * Metro configuration for React Native
 3 |  * https://github.com/facebook/react-native
 4 |  *
 5 |  * @format
 6 |  */
 7 | 
 8 | module.exports = {
 9 |   transformer: {
10 |     getTransformOptions: async () => ({
11 |       transform: {
12 |         experimentalImportSupport: false,
13 |         inlineRequires: true,
14 |       },
15 |     }),
16 |   },
17 | };
18 | 
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "RNWidget",
 3 |   "version": "0.0.1",
 4 |   "private": true,
 5 |   "scripts": {
 6 |     "android": "react-native run-android",
 7 |     "ios": "react-native run-ios",
 8 |     "lint": "eslint .",
 9 |     "start": "react-native start",
10 |     "test": "jest"
11 |   },
12 |   "dependencies": {
13 |     "react": "18.2.0",
14 |     "react-native": "0.71.7",
15 |     "react-native-keyboard-aware-scroll-view": "^0.9.5",
16 |     "react-native-really-awesome-button": "^2.0.4",
17 |     "react-native-shared-group-preferences": "^1.1.23"
18 |   },
19 |   "devDependencies": {
20 |     "@babel/core": "^7.20.0",
21 |     "@babel/preset-env": "^7.20.0",
22 |     "@babel/runtime": "^7.20.0",
23 |     "@react-native-community/eslint-config": "^3.2.0",
24 |     "@tsconfig/react-native": "^2.0.2",
25 |     "@types/jest": "^29.2.1",
26 |     "@types/react": "^18.0.24",
27 |     "@types/react-test-renderer": "^18.0.0",
28 |     "babel-jest": "^29.2.1",
29 |     "eslint": "^8.19.0",
30 |     "jest": "^29.2.1",
31 |     "metro-react-native-babel-preset": "0.73.9",
32 |     "prettier": "^2.4.1",
33 |     "react-test-renderer": "18.2.0",
34 |     "typescript": "4.8.4"
35 |   },
36 |   "jest": {
37 |     "preset": "react-native"
38 |   }
39 | }
40 | 
--------------------------------------------------------------------------------
/podinstall.sh:
--------------------------------------------------------------------------------
1 | reset
2 | cd ios && pod install && cd ../
3 | 
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
  1 | import React, {useState} from 'react';
  2 | import {
  3 |   View,
  4 |   TextInput,
  5 |   StyleSheet,
  6 |   NativeModules,
  7 |   SafeAreaView,
  8 |   Text,
  9 |   Image,
 10 |   ScrollView,
 11 |   KeyboardAvoidingView,
 12 |   Platform,
 13 |   ToastAndroid,
 14 | } from 'react-native';
 15 | import SharedGroupPreferences from 'react-native-shared-group-preferences';
 16 | import AwesomeButton from 'react-native-really-awesome-button';
 17 | import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
 18 | 
 19 | const group = 'group.streak';
 20 | 
 21 | const SharedStorage = NativeModules.SharedStorage;
 22 | 
 23 | const App = () => {
 24 |   const [text, setText] = useState('');
 25 |   const widgetData = {
 26 |     text,
 27 |   };
 28 | 
 29 |   const handleSubmit = async () => {
 30 |     try {
 31 |       // iOS
 32 |       await SharedGroupPreferences.setItem('widgetKey', widgetData, group);
 33 |     } catch (error) {
 34 |       console.log({error});
 35 |     }
 36 |     const value = `${text} days`;
 37 |     // Android
 38 |     SharedStorage.set(JSON.stringify({text: value}));
 39 |     ToastAndroid.show('Change value successfully!', ToastAndroid.SHORT);
 40 |   };
 41 | 
 42 |   return (
 43 |     
 44 |       
 48 |         
 49 |           Change Widget Value
 50 |           
 51 |             
 52 |               
 53 |                 
 54 |                   Enter the value that you want to display on your home widget
 55 |                 
 56 |               
 57 |               
 58 |               
 62 |             
 63 | 
 64 |              setText(newText)}
 67 |               value={text}
 68 |               keyboardType="decimal-pad"
 69 |               placeholder="Enter the text to display..."
 70 |             />
 71 | 
 72 |             
 80 |               Submit
 81 |             
 82 |           
 83 |         
 84 |       
 85 |     
 86 |   );
 87 | };
 88 | 
 89 | export default App;
 90 | 
 91 | const styles = StyleSheet.create({
 92 |   safeAreaContainer: {
 93 |     flex: 1,
 94 |     width: '100%',
 95 |     backgroundColor: '#fafaf3',
 96 |   },
 97 |   container: {
 98 |     flex: 1,
 99 |     width: '100%',
100 |     padding: 12,
101 |   },
102 |   heading: {
103 |     fontSize: 24,
104 |     color: '#979995',
105 |     textAlign: 'center',
106 |   },
107 |   input: {
108 |     width: '100%',
109 |     // fontSize: 20,
110 |     minHeight: 50,
111 |     borderWidth: 1,
112 |     borderColor: '#c6c6c6',
113 |     borderRadius: 8,
114 |     padding: 12,
115 |   },
116 |   bodyContainer: {
117 |     flex: 1,
118 |     margin: 18,
119 |   },
120 |   instructionContainer: {
121 |     margin: 25,
122 |     paddingHorizontal: 20,
123 |     paddingTop: 30,
124 |     borderWidth: 1,
125 |     borderRadius: 12,
126 |     backgroundColor: '#ecedeb',
127 |     borderColor: '#bebfbd',
128 |     marginBottom: 35,
129 |   },
130 |   avatarImg: {
131 |     height: 180,
132 |     width: 180,
133 |     resizeMode: 'contain',
134 |     alignSelf: 'flex-end',
135 |   },
136 |   thoughtContainer: {
137 |     minHeight: 50,
138 |     borderRadius: 12,
139 |     borderWidth: 1,
140 |     padding: 12,
141 |     backgroundColor: '#ffffff',
142 |     borderColor: '#c6c6c6',
143 |   },
144 |   thoughtPointer: {
145 |     width: 0,
146 |     height: 0,
147 |     borderStyle: 'solid',
148 |     overflow: 'hidden',
149 |     borderTopWidth: 12,
150 |     borderRightWidth: 10,
151 |     borderBottomWidth: 0,
152 |     borderLeftWidth: 10,
153 |     borderTopColor: 'blue',
154 |     borderRightColor: 'transparent',
155 |     borderBottomColor: 'transparent',
156 |     borderLeftColor: 'transparent',
157 |     marginTop: -1,
158 |     marginLeft: '50%',
159 |   },
160 |   thoughtTitle: {
161 |     fontSize: 14,
162 |   },
163 |   actionButton: {
164 |     marginTop: 40,
165 |   },
166 | });
167 | 
--------------------------------------------------------------------------------
/src/assets/bea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/src/assets/bea.png
--------------------------------------------------------------------------------
/src/assets/triangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/src/assets/triangle.png
--------------------------------------------------------------------------------
/src/assets/triangle_.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Rushit013/RNWidget/6baa81fbf3609c515cbc0c692dc54a19229ec8cb/src/assets/triangle_.png
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 |   "extends": "@tsconfig/react-native/tsconfig.json"
3 | }
4 | 
--------------------------------------------------------------------------------