├── .editorconfig
├── .gitattributes
├── .github
├── actions
│ └── setup
│ │ └── action.yml
└── workflows
│ └── ci.yml
├── .gitignore
├── .nvmrc
├── .watchmanconfig
├── .yarn
├── plugins
│ └── @yarnpkg
│ │ ├── plugin-interactive-tools.cjs
│ │ └── plugin-workspace-tools.cjs
└── releases
│ └── yarn-3.6.1.cjs
├── .yarnrc.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── android
├── build.gradle
├── gradle.properties
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── AndroidManifestNew.xml
│ └── java
│ └── com
│ └── threadeddownloader
│ ├── ThreadedDownloaderModule.java
│ └── ThreadedDownloaderPackage.java
├── babel.config.js
├── example
├── .bundle
│ └── config
├── .watchmanconfig
├── Gemfile
├── README.md
├── android
│ ├── app
│ │ ├── build.gradle
│ │ ├── debug.keystore
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── threadeddownloaderexample
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── MainApplication.kt
│ │ │ └── res
│ │ │ ├── drawable
│ │ │ └── rn_edit_text_material.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
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── app.json
├── babel.config.js
├── index.js
├── ios
│ ├── .xcode.env
│ ├── File.swift
│ ├── Podfile
│ ├── Podfile.lock
│ ├── ThreadedDownloaderExample-Bridging-Header.h
│ ├── ThreadedDownloaderExample.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── ThreadedDownloaderExample.xcscheme
│ ├── ThreadedDownloaderExample.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── ThreadedDownloaderExample
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.mm
│ │ ├── Images.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Info.plist
│ │ ├── LaunchScreen.storyboard
│ │ └── main.m
│ └── ThreadedDownloaderExampleTests
│ │ ├── Info.plist
│ │ └── ThreadedDownloaderExampleTests.m
├── jest.config.js
├── metro.config.js
├── package.json
├── react-native.config.js
└── src
│ └── App.tsx
├── ios
├── ThreadedDownloader.h
└── ThreadedDownloader.mm
├── lefthook.yml
├── package.json
├── react-native-threaded-downloader.podspec
├── src
├── __tests__
│ └── index.test.tsx
└── index.tsx
├── tsconfig.build.json
├── tsconfig.json
├── turbo.json
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 | [*]
8 |
9 | indent_style = space
10 | indent_size = 2
11 |
12 | end_of_line = lf
13 | charset = utf-8
14 | trim_trailing_whitespace = true
15 | insert_final_newline = true
16 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
2 | # specific for windows script files
3 | *.bat text eol=crlf
--------------------------------------------------------------------------------
/.github/actions/setup/action.yml:
--------------------------------------------------------------------------------
1 | name: Setup
2 | description: Setup Node.js and install dependencies
3 |
4 | runs:
5 | using: composite
6 | steps:
7 | - name: Setup Node.js
8 | uses: actions/setup-node@v3
9 | with:
10 | node-version-file: .nvmrc
11 |
12 | - name: Install dependencies
13 | run: yarn install --immutable
14 | shell: bash
15 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 | on:
3 | push:
4 | branches:
5 | - main
6 | pull_request:
7 | branches:
8 | - main
9 |
10 | jobs:
11 | lint:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Checkout
15 | uses: actions/checkout@v3
16 |
17 | - name: Setup
18 | uses: ./.github/actions/setup
19 |
20 | - name: Lint files
21 | run: yarn lint
22 |
23 | - name: Typecheck files
24 | run: yarn typecheck
25 |
26 | test:
27 | runs-on: ubuntu-latest
28 | steps:
29 | - name: Checkout
30 | uses: actions/checkout@v3
31 |
32 | - name: Setup
33 | uses: ./.github/actions/setup
34 |
35 | - name: Run unit tests
36 | run: yarn test --maxWorkers=2 --coverage
37 |
38 | build-library:
39 | runs-on: ubuntu-latest
40 | steps:
41 | - name: Checkout
42 | uses: actions/checkout@v3
43 |
44 | - name: Setup
45 | uses: ./.github/actions/setup
46 |
47 | - name: Build package
48 | run: yarn prepare
49 |
50 | build-android:
51 | runs-on: ubuntu-latest
52 | steps:
53 | - name: Checkout
54 | uses: actions/checkout@v3
55 |
56 | - name: Setup
57 | uses: ./.github/actions/setup
58 |
59 | - name: Install JDK
60 | uses: actions/setup-java@v3
61 | with:
62 | distribution: 'temurin'
63 | java-version: '17'
64 |
65 | - name: Finalize Android SDK
66 | run: |
67 | /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"
68 |
69 | - name: Build example for Android
70 | env:
71 | JAVA_OPTS: "-XX:MaxHeapSize=6g"
72 | run: |
73 | yarn run build:android
74 |
75 | build-ios:
76 | runs-on: macos-14
77 | steps:
78 | - name: Checkout
79 | uses: actions/checkout@v3
80 |
81 | - name: Setup
82 | uses: ./.github/actions/setup
83 |
84 | - name: Build example for iOS
85 | run: |
86 | cd example/ios
87 | pod install
88 | yarn run build:ios
89 | env:
90 | NO_FLIPPER: 1
91 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # XDE
6 | .expo/
7 |
8 | # VSCode
9 | .vscode/
10 | jsconfig.json
11 |
12 | # Xcode
13 | #
14 | build/
15 | *.pbxuser
16 | !default.pbxuser
17 | *.mode1v3
18 | !default.mode1v3
19 | *.mode2v3
20 | !default.mode2v3
21 | *.perspectivev3
22 | !default.perspectivev3
23 | xcuserdata
24 | *.xccheckout
25 | *.moved-aside
26 | DerivedData
27 | *.hmap
28 | *.ipa
29 | *.xcuserstate
30 | project.xcworkspace
31 |
32 | # Android/IJ
33 | #
34 | .classpath
35 | .cxx
36 | .gradle
37 | .idea
38 | .project
39 | .settings
40 | local.properties
41 | android.iml
42 |
43 | # Cocoapods
44 | #
45 | example/ios/Pods
46 | example/ios/.xcode.env.local
47 | example/ios/ThreadedDownloaderExample.xcworkspace/xcuserdata
48 |
49 |
50 | # Ruby
51 | example/vendor/
52 |
53 | # node.js
54 | #
55 | node_modules/
56 | npm-debug.log
57 | yarn-debug.log
58 | yarn-error.log
59 |
60 | # BUCK
61 | buck-out/
62 | \.buckd/
63 | android/app/libs
64 | android/keystores/debug.keystore
65 |
66 | # Yarn
67 | .yarn/*
68 | !.yarn/patches
69 | !.yarn/plugins
70 | !.yarn/releases
71 | !.yarn/sdks
72 | !.yarn/versions
73 |
74 | # Expo
75 | .expo/
76 |
77 | # Turborepo
78 | .turbo/
79 |
80 | # generated by bob
81 | lib/
82 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | v18
2 |
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 | nmHoistingLimits: workspaces
3 |
4 | plugins:
5 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
6 | spec: "@yarnpkg/plugin-interactive-tools"
7 | - path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
8 | spec: "@yarnpkg/plugin-workspace-tools"
9 |
10 | yarnPath: .yarn/releases/yarn-3.6.1.cjs
11 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | Contributions are always welcome, no matter how large or small!
4 |
5 | We want this community to be friendly and respectful to each other. Please follow it in all your interactions with the project.
6 |
7 | ## Development workflow
8 |
9 | This project is a monorepo managed using [Yarn workspaces](https://yarnpkg.com/features/workspaces). It contains the following packages:
10 |
11 | - The library package in the root directory.
12 | - An example app in the `example/` directory.
13 |
14 | To get started with the project, run `yarn` in the root directory to install the required dependencies for each package:
15 |
16 | ```sh
17 | yarn
18 | ```
19 |
20 | > Since the project relies on Yarn workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development.
21 |
22 | The [example app](/example/) demonstrates usage of the library. You need to run it to test any changes you make.
23 |
24 | It is configured to use the local version of the library, so any changes you make to the library's source code will be reflected in the example app. Changes to the library's JavaScript code will be reflected in the example app without a rebuild, but native code changes will require a rebuild of the example app.
25 |
26 | If you want to use Android Studio or XCode to edit the native code, you can open the `example/android` or `example/ios` directories respectively in those editors. To edit the Objective-C or Swift files, open `example/ios/ThreadedDownloaderExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > react-native-threaded-downloader`.
27 |
28 | To edit the Java or Kotlin files, open `example/android` in Android studio and find the source files at `react-native-threaded-downloader` under `Android`.
29 |
30 | You can use various commands from the root directory to work with the project.
31 |
32 | To start the packager:
33 |
34 | ```sh
35 | yarn example start
36 | ```
37 |
38 | To run the example app on Android:
39 |
40 | ```sh
41 | yarn example android
42 | ```
43 |
44 | To run the example app on iOS:
45 |
46 | ```sh
47 | yarn example ios
48 | ```
49 |
50 | Make sure your code passes TypeScript and ESLint. Run the following to verify:
51 |
52 | ```sh
53 | yarn typecheck
54 | yarn lint
55 | ```
56 |
57 | To fix formatting errors, run the following:
58 |
59 | ```sh
60 | yarn lint --fix
61 | ```
62 |
63 | Remember to add tests for your change if possible. Run the unit tests by:
64 |
65 | ```sh
66 | yarn test
67 | ```
68 |
69 | ### Commit message convention
70 |
71 | We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages:
72 |
73 | - `fix`: bug fixes, e.g. fix crash due to deprecated method.
74 | - `feat`: new features, e.g. add new method to the module.
75 | - `refactor`: code refactor, e.g. migrate from class components to hooks.
76 | - `docs`: changes into documentation, e.g. add usage example for the module..
77 | - `test`: adding or updating tests, e.g. add integration tests using detox.
78 | - `chore`: tooling changes, e.g. change CI config.
79 |
80 | Our pre-commit hooks verify that your commit message matches this format when committing.
81 |
82 | ### Linting and tests
83 |
84 | [ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/)
85 |
86 | We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing.
87 |
88 | Our pre-commit hooks verify that the linter and tests pass when committing.
89 |
90 | ### Publishing to npm
91 |
92 | We use [release-it](https://github.com/release-it/release-it) to make it easier to publish new versions. It handles common tasks like bumping version based on semver, creating tags and releases etc.
93 |
94 | To publish new versions, run the following:
95 |
96 | ```sh
97 | yarn release
98 | ```
99 |
100 | ### Scripts
101 |
102 | The `package.json` file contains various scripts for common tasks:
103 |
104 | - `yarn`: setup project by installing dependencies.
105 | - `yarn typecheck`: type-check files with TypeScript.
106 | - `yarn lint`: lint files with ESLint.
107 | - `yarn test`: run unit tests with Jest.
108 | - `yarn example start`: start the Metro server for the example app.
109 | - `yarn example android`: run the example app on Android.
110 | - `yarn example ios`: run the example app on iOS.
111 |
112 | ### Sending a pull request
113 |
114 | > **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github).
115 |
116 | When you're sending a pull request:
117 |
118 | - Prefer small pull requests focused on one change.
119 | - Verify that linters and tests are passing.
120 | - Review the documentation to make sure it looks good.
121 | - Follow the pull request template when opening a pull request.
122 | - For pull requests that change the API or implementation, discuss with maintainers first by opening an issue.
123 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 findhumane
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all
12 | copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 | SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-native-threaded-downloader
2 |
3 | Perform HTTP requests on separate native asynchronous threads and then call back to a promise.
4 |
5 | ## Installation
6 |
7 | ```sh
8 | npm install react-native-threaded-downloader
9 | ```
10 |
11 | ## Usage
12 |
13 | ```js
14 | import { performThreadedDownload } from 'react-native-threaded-downloader';
15 |
16 | // First argument is the URL and second argument is the timeout in seconds
17 | performThreadedDownload("https://example.com/", 60)
18 | .then((response) => console.log(response))
19 | .catch((e) => console.dir(e));
20 | ```
21 |
22 | See [the example](example/src/App.tsx) for details.
23 |
24 | ## How it works
25 |
26 | When `performThreadedDownload` is called:
27 |
28 | * [On iOS](ios/ThreadedDownloader.mm), a task is executed on a [dispatch queue](https://developer.apple.com/documentation/dispatch/1453030-dispatch_queue_create) of type `DISPATCH_QUEUE_CONCURRENT`.
29 | * [On Android](android/src/main/java/com/threadeddownloader/ThreadedDownloaderModule.java), a [`Runnable`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Runnable.html) is executed on a thread pool of up to 10 native threads.
30 |
31 | ## Contributing
32 |
33 | See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.
34 |
35 | ## License
36 |
37 | MIT
38 |
39 | ---
40 |
41 | Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
42 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 |
7 | dependencies {
8 | classpath "com.android.tools.build:gradle:7.2.1"
9 | }
10 | }
11 |
12 | def isNewArchitectureEnabled() {
13 | return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
14 | }
15 |
16 | apply plugin: "com.android.library"
17 |
18 | if (isNewArchitectureEnabled()) {
19 | apply plugin: "com.facebook.react"
20 | }
21 |
22 | def getExtOrDefault(name) {
23 | return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["ThreadedDownloader_" + name]
24 | }
25 |
26 | def getExtOrIntegerDefault(name) {
27 | return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["ThreadedDownloader_" + name]).toInteger()
28 | }
29 |
30 | def supportsNamespace() {
31 | def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
32 | def major = parsed[0].toInteger()
33 | def minor = parsed[1].toInteger()
34 |
35 | // Namespace support was added in 7.3.0
36 | return (major == 7 && minor >= 3) || major >= 8
37 | }
38 |
39 | android {
40 | if (supportsNamespace()) {
41 | namespace "com.threadeddownloader"
42 |
43 | sourceSets {
44 | main {
45 | manifest.srcFile "src/main/AndroidManifestNew.xml"
46 | }
47 | }
48 | }
49 |
50 | compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
51 |
52 | defaultConfig {
53 | minSdkVersion getExtOrIntegerDefault("minSdkVersion")
54 | targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
55 |
56 | }
57 |
58 | buildTypes {
59 | release {
60 | minifyEnabled false
61 | }
62 | }
63 |
64 | lintOptions {
65 | disable "GradleCompatible"
66 | }
67 |
68 | compileOptions {
69 | sourceCompatibility JavaVersion.VERSION_1_8
70 | targetCompatibility JavaVersion.VERSION_1_8
71 | }
72 | }
73 |
74 | repositories {
75 | mavenCentral()
76 | google()
77 | }
78 |
79 |
80 | dependencies {
81 | // For < 0.71, this will be from the local maven repo
82 | // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
83 | //noinspection GradleDynamicVersion
84 | implementation "com.facebook.react:react-native:+"
85 | }
86 |
87 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | ThreadedDownloader_kotlinVersion=1.7.0
2 | ThreadedDownloader_minSdkVersion=21
3 | ThreadedDownloader_targetSdkVersion=31
4 | ThreadedDownloader_compileSdkVersion=31
5 | ThreadedDownloader_ndkversion=21.4.7075529
6 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifestNew.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/android/src/main/java/com/threadeddownloader/ThreadedDownloaderModule.java:
--------------------------------------------------------------------------------
1 | package com.threadeddownloader;
2 |
3 | import androidx.annotation.NonNull;
4 |
5 | import com.facebook.react.bridge.Promise;
6 | import com.facebook.react.bridge.ReactApplicationContext;
7 | import com.facebook.react.bridge.ReactContextBaseJavaModule;
8 | import com.facebook.react.bridge.ReactMethod;
9 | import com.facebook.react.module.annotations.ReactModule;
10 |
11 | import java.io.BufferedReader;
12 | import java.io.InputStreamReader;
13 | import java.net.HttpURLConnection;
14 | import java.net.URL;
15 | import java.util.concurrent.ExecutorService;
16 | import java.util.concurrent.Executors;
17 | import java.util.concurrent.ThreadFactory;
18 | import java.util.concurrent.atomic.AtomicInteger;
19 |
20 | import android.util.Log;
21 |
22 | @ReactModule(name = ThreadedDownloaderModule.NAME)
23 | public class ThreadedDownloaderModule extends ReactContextBaseJavaModule {
24 | public static final String NAME = "ThreadedDownloader";
25 | private static final int DEFAULT_MAX_THREADS = 10;
26 | private static final String NEWLINE = System.lineSeparator();
27 |
28 | private ExecutorService executorService;
29 |
30 | public ThreadedDownloaderModule(ReactApplicationContext reactContext) {
31 | super(reactContext);
32 | }
33 |
34 | @Override
35 | @NonNull
36 | public String getName() {
37 | return NAME;
38 | }
39 |
40 | @ReactMethod
41 | public void performThreadedDownload(final String url, final double timeoutSeconds, Promise promise) {
42 | Log.d(NAME, "performThreadedDownload start; url: " + url);
43 |
44 | // https://developer.android.com/develop/background-work/background-tasks/asynchronous/java-threads
45 | synchronized (this) {
46 | if (executorService == null) {
47 | executorService = Executors.newFixedThreadPool(DEFAULT_MAX_THREADS, new ThreadFactory() {
48 | private AtomicInteger threadCount = new AtomicInteger(1);
49 |
50 | @Override
51 | public Thread newThread(Runnable r) {
52 | Thread thread = new Thread(r);
53 | thread.setDaemon(true);
54 | thread.setName(NAME + "-" + threadCount.getAndIncrement());
55 | return thread;
56 | }
57 | });
58 | }
59 | }
60 |
61 | DownloaderThread downloader = new DownloaderThread(url, timeoutSeconds, promise);
62 | executorService.execute(downloader);
63 | }
64 |
65 | class DownloaderThread implements Runnable {
66 | final String url;
67 | final double timeoutSeconds;
68 | final Promise promise;
69 |
70 | DownloaderThread(final String url, final double timeoutSeconds, final Promise promise) {
71 | this.url = url;
72 | this.timeoutSeconds = timeoutSeconds;
73 | this.promise = promise;
74 | }
75 |
76 | @Override
77 | public void run() {
78 | try {
79 | Log.d(NAME, "performThreadedDownload DownloaderThread start; url: " + url);
80 |
81 | URL urlObject = new URL(url);
82 | HttpURLConnection httpConnection = (HttpURLConnection)urlObject.openConnection();
83 |
84 | int timeoutMilliseconds = ((int)timeoutSeconds) * 1000;
85 | httpConnection.setConnectTimeout(timeoutMilliseconds);
86 | httpConnection.setReadTimeout(timeoutMilliseconds);
87 |
88 | Log.d(NAME, "performThreadedDownload DownloaderThread connection opened");
89 |
90 | httpConnection.setRequestMethod("GET");
91 | int responseCode = httpConnection.getResponseCode();
92 |
93 | Log.d(NAME, "performThreadedDownload DownloaderThread response code: " + responseCode);
94 |
95 | boolean isSuccessful = responseCode >= 100 && responseCode < 400;
96 | String response = null;
97 | try (InputStreamReader isr = new InputStreamReader(isSuccessful ? httpConnection.getInputStream() : httpConnection.getErrorStream())) {
98 | try (BufferedReader br = new BufferedReader(isr)) {
99 | StringBuffer responseBuffer = new StringBuffer();
100 | String inputLine;
101 | while ((inputLine = br.readLine()) != null) {
102 | responseBuffer.append(inputLine);
103 | responseBuffer.append(NEWLINE);
104 | }
105 | response = responseBuffer.toString();
106 | }
107 | }
108 |
109 | Log.d(NAME, "performThreadedDownload DownloaderThread finished reading response body");
110 |
111 | if (isSuccessful) {
112 | promise.resolve(response);
113 | } else {
114 | promise.reject(NAME + " Error", "Error " + responseCode + " -- " + response, new Error("Error " + responseCode));
115 | }
116 | } catch (Throwable t) {
117 | Log.e(NAME, "performThreadedDownload DownloaderThread failed", t);
118 | promise.reject(NAME + " Error", "Failed to download " + url + " -- " + t.getLocalizedMessage(), t);
119 | }
120 | }
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/android/src/main/java/com/threadeddownloader/ThreadedDownloaderPackage.java:
--------------------------------------------------------------------------------
1 | package com.threadeddownloader;
2 |
3 | import androidx.annotation.NonNull;
4 |
5 | import com.facebook.react.ReactPackage;
6 | import com.facebook.react.bridge.NativeModule;
7 | import com.facebook.react.bridge.ReactApplicationContext;
8 | import com.facebook.react.uimanager.ViewManager;
9 |
10 | import java.util.ArrayList;
11 | import java.util.Collections;
12 | import java.util.List;
13 |
14 | public class ThreadedDownloaderPackage implements ReactPackage {
15 | @NonNull
16 | @Override
17 | public List createNativeModules(@NonNull ReactApplicationContext reactContext) {
18 | List modules = new ArrayList<>();
19 | modules.add(new ThreadedDownloaderModule(reactContext));
20 | return modules;
21 | }
22 |
23 | @NonNull
24 | @Override
25 | public List createViewManagers(@NonNull ReactApplicationContext reactContext) {
26 | return Collections.emptyList();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['module:@react-native/babel-preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/example/.bundle/config:
--------------------------------------------------------------------------------
1 | BUNDLE_PATH: "vendor/bundle"
2 | BUNDLE_FORCE_RUBY_PLATFORM: 1
3 |
--------------------------------------------------------------------------------
/example/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/example/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 | # Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
7 | # bound in the template on Cocoapods with next React Native release.
8 | gem 'cocoapods', '>= 1.13', '< 1.15'
9 | gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
10 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli).
2 |
3 | # Getting Started
4 |
5 | >**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding.
6 |
7 | ## Step 1: Start the Metro Server
8 |
9 | First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native.
10 |
11 | To start Metro, run the following command from the _root_ of your React Native project:
12 |
13 | ```bash
14 | # using npm
15 | npm start
16 |
17 | # OR using Yarn
18 | yarn start
19 | ```
20 |
21 | ## Step 2: Start your Application
22 |
23 | Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app:
24 |
25 | ### For Android
26 |
27 | ```bash
28 | # using npm
29 | npm run android
30 |
31 | # OR using Yarn
32 | yarn android
33 | ```
34 |
35 | ### For iOS
36 |
37 | ```bash
38 | # using npm
39 | npm run ios
40 |
41 | # OR using Yarn
42 | yarn ios
43 | ```
44 |
45 | If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly.
46 |
47 | This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.
48 |
49 | ## Step 3: Modifying your App
50 |
51 | Now that you have successfully run the app, let's modify it.
52 |
53 | 1. Open `App.tsx` in your text editor of choice and edit some lines.
54 | 2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes!
55 |
56 | For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes!
57 |
58 | ## Congratulations! :tada:
59 |
60 | You've successfully run and modified your React Native App. :partying_face:
61 |
62 | ### Now what?
63 |
64 | - If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps).
65 | - If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started).
66 |
67 | # Troubleshooting
68 |
69 | If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page.
70 |
71 | # Learn More
72 |
73 | To learn more about React Native, take a look at the following resources:
74 |
75 | - [React Native Website](https://reactnative.dev) - learn more about React Native.
76 | - [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment.
77 | - [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**.
78 | - [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts.
79 | - [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native.
80 |
--------------------------------------------------------------------------------
/example/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 | apply plugin: "org.jetbrains.kotlin.android"
3 | apply plugin: "com.facebook.react"
4 |
5 | /**
6 | * This is the configuration block to customize your React Native Android app.
7 | * By default you don't need to apply any configuration, just uncomment the lines you need.
8 | */
9 | react {
10 | /* Folders */
11 | // The root of your project, i.e. where "package.json" lives. Default is '..'
12 | // root = file("../")
13 | // The folder where the react-native NPM package is. Default is ../node_modules/react-native
14 | // reactNativeDir = file("../node_modules/react-native")
15 | // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
16 | // codegenDir = file("../node_modules/@react-native/codegen")
17 | // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
18 | // cliFile = file("../node_modules/react-native/cli.js")
19 |
20 | /* Variants */
21 | // The list of variants to that are debuggable. For those we're going to
22 | // skip the bundling of the JS bundle and the assets. By default is just 'debug'.
23 | // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
24 | // debuggableVariants = ["liteDebug", "prodDebug"]
25 |
26 | /* Bundling */
27 | // A list containing the node command and its flags. Default is just 'node'.
28 | // nodeExecutableAndArgs = ["node"]
29 | //
30 | // The command to run when bundling. By default is 'bundle'
31 | // bundleCommand = "ram-bundle"
32 | //
33 | // The path to the CLI configuration file. Default is empty.
34 | // bundleConfig = file(../rn-cli.config.js)
35 | //
36 | // The name of the generated asset file containing your JS bundle
37 | // bundleAssetName = "MyApplication.android.bundle"
38 | //
39 | // The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
40 | // entryFile = file("../js/MyApplication.android.js")
41 | //
42 | // A list of extra flags to pass to the 'bundle' commands.
43 | // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
44 | // extraPackagerArgs = []
45 |
46 | /* Hermes Commands */
47 | // The hermes compiler command to run. By default it is 'hermesc'
48 | // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
49 | //
50 | // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
51 | // hermesFlags = ["-O", "-output-source-map"]
52 | }
53 |
54 | /**
55 | * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
56 | */
57 | def enableProguardInReleaseBuilds = false
58 |
59 | /**
60 | * The preferred build flavor of JavaScriptCore (JSC)
61 | *
62 | * For example, to use the international variant, you can use:
63 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
64 | *
65 | * The international variant includes ICU i18n library and necessary data
66 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
67 | * give correct results when using with locales other than en-US. Note that
68 | * this variant is about 6MiB larger per architecture than default.
69 | */
70 | def jscFlavor = 'org.webkit:android-jsc:+'
71 |
72 | android {
73 | ndkVersion rootProject.ext.ndkVersion
74 | buildToolsVersion rootProject.ext.buildToolsVersion
75 | compileSdk rootProject.ext.compileSdkVersion
76 |
77 | namespace "com.threadeddownloaderexample"
78 | defaultConfig {
79 | applicationId "com.threadeddownloaderexample"
80 | minSdkVersion rootProject.ext.minSdkVersion
81 | targetSdkVersion rootProject.ext.targetSdkVersion
82 | versionCode 1
83 | versionName "1.0"
84 | }
85 | signingConfigs {
86 | debug {
87 | storeFile file('debug.keystore')
88 | storePassword 'android'
89 | keyAlias 'androiddebugkey'
90 | keyPassword 'android'
91 | }
92 | }
93 | buildTypes {
94 | debug {
95 | signingConfig signingConfigs.debug
96 | }
97 | release {
98 | // Caution! In production, you need to generate your own keystore file.
99 | // see https://reactnative.dev/docs/signed-apk-android.
100 | signingConfig signingConfigs.debug
101 | minifyEnabled enableProguardInReleaseBuilds
102 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
103 | }
104 | }
105 | }
106 |
107 | dependencies {
108 | // The version of react-native is set by the React Native Gradle Plugin
109 | implementation("com.facebook.react:react-android")
110 | implementation("com.facebook.react:flipper-integration")
111 |
112 | if (hermesEnabled.toBoolean()) {
113 | implementation("com.facebook.react:hermes-android")
114 | } else {
115 | implementation jscFlavor
116 | }
117 | }
118 |
119 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
120 |
--------------------------------------------------------------------------------
/example/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/debug.keystore
--------------------------------------------------------------------------------
/example/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 |
--------------------------------------------------------------------------------
/example/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/example/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/example/android/app/src/main/java/com/threadeddownloaderexample/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.threadeddownloaderexample
2 |
3 | import com.facebook.react.ReactActivity
4 | import com.facebook.react.ReactActivityDelegate
5 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
6 | import com.facebook.react.defaults.DefaultReactActivityDelegate
7 |
8 | class MainActivity : 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 fun getMainComponentName(): String = "ThreadedDownloaderExample"
15 |
16 | /**
17 | * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
18 | * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
19 | */
20 | override fun createReactActivityDelegate(): ReactActivityDelegate =
21 | DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
22 | }
23 |
--------------------------------------------------------------------------------
/example/android/app/src/main/java/com/threadeddownloaderexample/MainApplication.kt:
--------------------------------------------------------------------------------
1 | package com.threadeddownloaderexample
2 |
3 | import android.app.Application
4 | import com.facebook.react.PackageList
5 | import com.facebook.react.ReactApplication
6 | import com.facebook.react.ReactHost
7 | import com.facebook.react.ReactNativeHost
8 | import com.facebook.react.ReactPackage
9 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
10 | import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
11 | import com.facebook.react.defaults.DefaultReactNativeHost
12 | import com.facebook.react.flipper.ReactNativeFlipper
13 | import com.facebook.soloader.SoLoader
14 |
15 | class MainApplication : Application(), ReactApplication {
16 |
17 | override val reactNativeHost: ReactNativeHost =
18 | object : DefaultReactNativeHost(this) {
19 | override fun getPackages(): List =
20 | PackageList(this).packages.apply {
21 | // Packages that cannot be autolinked yet can be added manually here, for example:
22 | // add(MyReactNativePackage())
23 | }
24 |
25 | override fun getJSMainModuleName(): String = "index"
26 |
27 | override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
28 |
29 | override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
30 | override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
31 | }
32 |
33 | override val reactHost: ReactHost
34 | get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
35 |
36 | override fun onCreate() {
37 | super.onCreate()
38 | SoLoader.init(this, false)
39 | if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
40 | // If you opted-in for the New Architecture, we load the native entry point for this app.
41 | load()
42 | }
43 | ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/drawable/rn_edit_text_material.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
21 |
22 |
23 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | ThreadedDownloaderExample
3 |
4 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/example/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext {
3 | buildToolsVersion = "34.0.0"
4 | minSdkVersion = 21
5 | compileSdkVersion = 34
6 | targetSdkVersion = 34
7 | ndkVersion = "25.1.8937393"
8 | kotlinVersion = "1.8.0"
9 | }
10 | repositories {
11 | google()
12 | mavenCentral()
13 | }
14 | dependencies {
15 | classpath("com.android.tools.build:gradle")
16 | classpath("com.facebook.react:react-native-gradle-plugin")
17 | classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
18 | }
19 | }
20 |
21 | apply plugin: "com.facebook.react.rootproject"
22 |
--------------------------------------------------------------------------------
/example/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 | # Use this property to specify which architecture you want to build.
28 | # You can also override it from the CLI using
29 | # ./gradlew -PreactNativeArchitectures=x86_64
30 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
31 |
32 | # Use this property to enable support to the new architecture.
33 | # This will allow you to use TurboModules and the Fabric render in
34 | # your application. You should enable this flag either if you want
35 | # to write custom TurboModules/Fabric components OR use libraries that
36 | # are providing them.
37 | newArchEnabled=false
38 |
39 | # Use this property to enable or disable the Hermes JS engine.
40 | # If set to false, you will be using JSC instead.
41 | hermesEnabled=true
42 |
--------------------------------------------------------------------------------
/example/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/findhumane/react-native-threaded-downloader/5b8eeeb33d4c864bec5c266f62a539bf76e6eb60/example/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/example/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/example/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/HEAD/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 | # This is normally unused
84 | # shellcheck disable=SC2034
85 | APP_BASE_NAME=${0##*/}
86 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
87 | APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
88 |
89 | # Use the maximum available, or set MAX_FD != -1 to use that value.
90 | MAX_FD=maximum
91 |
92 | warn () {
93 | echo "$*"
94 | } >&2
95 |
96 | die () {
97 | echo
98 | echo "$*"
99 | echo
100 | exit 1
101 | } >&2
102 |
103 | # OS specific support (must be 'true' or 'false').
104 | cygwin=false
105 | msys=false
106 | darwin=false
107 | nonstop=false
108 | case "$( uname )" in #(
109 | CYGWIN* ) cygwin=true ;; #(
110 | Darwin* ) darwin=true ;; #(
111 | MSYS* | MINGW* ) msys=true ;; #(
112 | NONSTOP* ) nonstop=true ;;
113 | esac
114 |
115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
116 |
117 |
118 | # Determine the Java command to use to start the JVM.
119 | if [ -n "$JAVA_HOME" ] ; then
120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
121 | # IBM's JDK on AIX uses strange locations for the executables
122 | JAVACMD=$JAVA_HOME/jre/sh/java
123 | else
124 | JAVACMD=$JAVA_HOME/bin/java
125 | fi
126 | if [ ! -x "$JAVACMD" ] ; then
127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
128 |
129 | Please set the JAVA_HOME variable in your environment to match the
130 | location of your Java installation."
131 | fi
132 | else
133 | JAVACMD=java
134 | if ! command -v java >/dev/null 2>&1
135 | then
136 | 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 | fi
142 |
143 | # Increase the maximum file descriptors if we can.
144 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
145 | case $MAX_FD in #(
146 | max*)
147 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
148 | # shellcheck disable=SC3045
149 | MAX_FD=$( ulimit -H -n ) ||
150 | warn "Could not query maximum file descriptor limit"
151 | esac
152 | case $MAX_FD in #(
153 | '' | soft) :;; #(
154 | *)
155 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
156 | # shellcheck disable=SC3045
157 | ulimit -n "$MAX_FD" ||
158 | warn "Could not set maximum file descriptor limit to $MAX_FD"
159 | esac
160 | fi
161 |
162 | # Collect all arguments for the java command, stacking in reverse order:
163 | # * args from the command line
164 | # * the main class name
165 | # * -classpath
166 | # * -D...appname settings
167 | # * --module-path (only if needed)
168 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
169 |
170 | # For Cygwin or MSYS, switch paths to Windows format before running java
171 | if "$cygwin" || "$msys" ; then
172 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
173 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
174 |
175 | JAVACMD=$( cygpath --unix "$JAVACMD" )
176 |
177 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
178 | for arg do
179 | if
180 | case $arg in #(
181 | -*) false ;; # don't mess with options #(
182 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
183 | [ -e "$t" ] ;; #(
184 | *) false ;;
185 | esac
186 | then
187 | arg=$( cygpath --path --ignore --mixed "$arg" )
188 | fi
189 | # Roll the args list around exactly as many times as the number of
190 | # args, so each arg winds up back in the position where it started, but
191 | # possibly modified.
192 | #
193 | # NB: a `for` loop captures its iteration list before it begins, so
194 | # changing the positional parameters here affects neither the number of
195 | # iterations, nor the values presented in `arg`.
196 | shift # remove old arg
197 | set -- "$@" "$arg" # push replacement arg
198 | done
199 | fi
200 |
201 |
202 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
203 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
204 |
205 | # Collect all arguments for the java command;
206 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
207 | # shell script including quotes and variable substitutions, so put them in
208 | # double quotes to make sure that they get re-expanded; and
209 | # * put everything else in single quotes, so that it's not re-expanded.
210 |
211 | set -- \
212 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
213 | -classpath "$CLASSPATH" \
214 | org.gradle.wrapper.GradleWrapperMain \
215 | "$@"
216 |
217 | # Stop when "xargs" is not available.
218 | if ! command -v xargs >/dev/null 2>&1
219 | then
220 | die "xargs is not available"
221 | fi
222 |
223 | # Use "xargs" to parse quoted args.
224 | #
225 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
226 | #
227 | # In Bash we could simply go:
228 | #
229 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
230 | # set -- "${ARGS[@]}" "$@"
231 | #
232 | # but POSIX shell has neither arrays nor command substitution, so instead we
233 | # post-process each arg (as a line of input to sed) to backslash-escape any
234 | # character that might be a shell metacharacter, then use eval to reverse
235 | # that process (while maintaining the separation between arguments), and wrap
236 | # the whole thing up as a single "set" statement.
237 | #
238 | # This will of course break if any of these variables contains a newline or
239 | # an unmatched quote.
240 | #
241 |
242 | eval "set -- $(
243 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
244 | xargs -n1 |
245 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
246 | tr '\n' ' '
247 | )" '"$@"'
248 |
249 | exec "$JAVACMD" "$@"
250 |
--------------------------------------------------------------------------------
/example/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 | @rem This is normally unused
30 | set APP_BASE_NAME=%~n0
31 | set APP_HOME=%DIRNAME%
32 |
33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
35 |
36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
38 |
39 | @rem Find java.exe
40 | if defined JAVA_HOME goto findJavaFromJavaHome
41 |
42 | set JAVA_EXE=java.exe
43 | %JAVA_EXE% -version >NUL 2>&1
44 | if %ERRORLEVEL% equ 0 goto execute
45 |
46 | echo.
47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48 | echo.
49 | echo Please set the JAVA_HOME variable in your environment to match the
50 | echo location of your Java installation.
51 |
52 | goto fail
53 |
54 | :findJavaFromJavaHome
55 | set JAVA_HOME=%JAVA_HOME:"=%
56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
57 |
58 | if exist "%JAVA_EXE%" goto execute
59 |
60 | echo.
61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62 | echo.
63 | echo Please set the JAVA_HOME variable in your environment to match the
64 | echo location of your Java installation.
65 |
66 | goto fail
67 |
68 | :execute
69 | @rem Setup the command line
70 |
71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
72 |
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if %ERRORLEVEL% equ 0 goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | set EXIT_CODE=%ERRORLEVEL%
85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
87 | exit /b %EXIT_CODE%
88 |
89 | :mainEnd
90 | if "%OS%"=="Windows_NT" endlocal
91 |
92 | :omega
93 |
--------------------------------------------------------------------------------
/example/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'ThreadedDownloaderExample'
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 |
--------------------------------------------------------------------------------
/example/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ThreadedDownloaderExample",
3 | "displayName": "ThreadedDownloaderExample"
4 | }
5 |
--------------------------------------------------------------------------------
/example/babel.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const pak = require('../package.json');
3 |
4 | module.exports = {
5 | presets: ['module:@react-native/babel-preset'],
6 | plugins: [
7 | [
8 | 'module-resolver',
9 | {
10 | extensions: ['.tsx', '.ts', '.js', '.json'],
11 | alias: {
12 | [pak.name]: path.join(__dirname, '..', pak.source),
13 | },
14 | },
15 | ],
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/example/index.js:
--------------------------------------------------------------------------------
1 | import { AppRegistry } from 'react-native';
2 | import App from './src/App';
3 | import { name as appName } from './app.json';
4 |
5 | AppRegistry.registerComponent(appName, () => App);
6 |
--------------------------------------------------------------------------------
/example/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 |
--------------------------------------------------------------------------------
/example/ios/File.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | // ThreadedDownloaderExample
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/example/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Resolve react_native_pods.rb with node to allow for hoisting
2 | require Pod::Executable.execute_command('node', ['-p',
3 | 'require.resolve(
4 | "react-native/scripts/react_native_pods.rb",
5 | {paths: [process.argv[1]]},
6 | )', __dir__]).strip
7 |
8 | platform :ios, min_ios_version_supported
9 | prepare_react_native_project!
10 |
11 | # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
12 | # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
13 | #
14 | # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
15 | # ```js
16 | # module.exports = {
17 | # dependencies: {
18 | # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
19 | # ```
20 | flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
21 |
22 | linkage = ENV['USE_FRAMEWORKS']
23 | if linkage != nil
24 | Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
25 | use_frameworks! :linkage => linkage.to_sym
26 | end
27 |
28 | target 'ThreadedDownloaderExample' do
29 | config = use_native_modules!
30 |
31 | use_react_native!(
32 | :path => config[:reactNativePath],
33 | # Enables Flipper.
34 | #
35 | # Note that if you have use_frameworks! enabled, Flipper will not work and
36 | # you should disable the next line.
37 | :flipper_configuration => flipper_config,
38 | # An absolute path to your application root.
39 | :app_path => "#{Pod::Config.instance.installation_root}/.."
40 | )
41 |
42 | target 'ThreadedDownloaderExampleTests' do
43 | inherit! :complete
44 | # Pods for testing
45 | end
46 |
47 | post_install do |installer|
48 | # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
49 | react_native_post_install(
50 | installer,
51 | config[:reactNativePath],
52 | :mac_catalyst_enabled => false
53 | )
54 | end
55 | end
56 |
--------------------------------------------------------------------------------
/example/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - boost (1.83.0)
3 | - CocoaAsyncSocket (7.6.5)
4 | - DoubleConversion (1.1.6)
5 | - FBLazyVector (0.73.6)
6 | - FBReactNativeSpec (0.73.6):
7 | - RCT-Folly (= 2022.05.16.00)
8 | - RCTRequired (= 0.73.6)
9 | - RCTTypeSafety (= 0.73.6)
10 | - React-Core (= 0.73.6)
11 | - React-jsi (= 0.73.6)
12 | - ReactCommon/turbomodule/core (= 0.73.6)
13 | - Flipper (0.201.0):
14 | - Flipper-Folly (~> 2.6)
15 | - Flipper-Boost-iOSX (1.76.0.1.11)
16 | - Flipper-DoubleConversion (3.2.0.1)
17 | - Flipper-Fmt (7.1.7)
18 | - Flipper-Folly (2.6.10):
19 | - Flipper-Boost-iOSX
20 | - Flipper-DoubleConversion
21 | - Flipper-Fmt (= 7.1.7)
22 | - Flipper-Glog
23 | - libevent (~> 2.1.12)
24 | - OpenSSL-Universal (= 1.1.1100)
25 | - Flipper-Glog (0.5.0.5)
26 | - Flipper-PeerTalk (0.0.4)
27 | - FlipperKit (0.201.0):
28 | - FlipperKit/Core (= 0.201.0)
29 | - FlipperKit/Core (0.201.0):
30 | - Flipper (~> 0.201.0)
31 | - FlipperKit/CppBridge
32 | - FlipperKit/FBCxxFollyDynamicConvert
33 | - FlipperKit/FBDefines
34 | - FlipperKit/FKPortForwarding
35 | - SocketRocket (~> 0.6.0)
36 | - FlipperKit/CppBridge (0.201.0):
37 | - Flipper (~> 0.201.0)
38 | - FlipperKit/FBCxxFollyDynamicConvert (0.201.0):
39 | - Flipper-Folly (~> 2.6)
40 | - FlipperKit/FBDefines (0.201.0)
41 | - FlipperKit/FKPortForwarding (0.201.0):
42 | - CocoaAsyncSocket (~> 7.6)
43 | - Flipper-PeerTalk (~> 0.0.4)
44 | - FlipperKit/FlipperKitHighlightOverlay (0.201.0)
45 | - FlipperKit/FlipperKitLayoutHelpers (0.201.0):
46 | - FlipperKit/Core
47 | - FlipperKit/FlipperKitHighlightOverlay
48 | - FlipperKit/FlipperKitLayoutTextSearchable
49 | - FlipperKit/FlipperKitLayoutIOSDescriptors (0.201.0):
50 | - FlipperKit/Core
51 | - FlipperKit/FlipperKitHighlightOverlay
52 | - FlipperKit/FlipperKitLayoutHelpers
53 | - FlipperKit/FlipperKitLayoutPlugin (0.201.0):
54 | - FlipperKit/Core
55 | - FlipperKit/FlipperKitHighlightOverlay
56 | - FlipperKit/FlipperKitLayoutHelpers
57 | - FlipperKit/FlipperKitLayoutIOSDescriptors
58 | - FlipperKit/FlipperKitLayoutTextSearchable
59 | - FlipperKit/FlipperKitLayoutTextSearchable (0.201.0)
60 | - FlipperKit/FlipperKitNetworkPlugin (0.201.0):
61 | - FlipperKit/Core
62 | - FlipperKit/FlipperKitReactPlugin (0.201.0):
63 | - FlipperKit/Core
64 | - FlipperKit/FlipperKitUserDefaultsPlugin (0.201.0):
65 | - FlipperKit/Core
66 | - FlipperKit/SKIOSNetworkPlugin (0.201.0):
67 | - FlipperKit/Core
68 | - FlipperKit/FlipperKitNetworkPlugin
69 | - fmt (6.2.1)
70 | - glog (0.3.5)
71 | - hermes-engine (0.73.6):
72 | - hermes-engine/Pre-built (= 0.73.6)
73 | - hermes-engine/Pre-built (0.73.6)
74 | - libevent (2.1.12)
75 | - OpenSSL-Universal (1.1.1100)
76 | - RCT-Folly (2022.05.16.00):
77 | - boost
78 | - DoubleConversion
79 | - fmt (~> 6.2.1)
80 | - glog
81 | - RCT-Folly/Default (= 2022.05.16.00)
82 | - RCT-Folly/Default (2022.05.16.00):
83 | - boost
84 | - DoubleConversion
85 | - fmt (~> 6.2.1)
86 | - glog
87 | - RCT-Folly/Fabric (2022.05.16.00):
88 | - boost
89 | - DoubleConversion
90 | - fmt (~> 6.2.1)
91 | - glog
92 | - RCT-Folly/Futures (2022.05.16.00):
93 | - boost
94 | - DoubleConversion
95 | - fmt (~> 6.2.1)
96 | - glog
97 | - libevent
98 | - RCTRequired (0.73.6)
99 | - RCTTypeSafety (0.73.6):
100 | - FBLazyVector (= 0.73.6)
101 | - RCTRequired (= 0.73.6)
102 | - React-Core (= 0.73.6)
103 | - React (0.73.6):
104 | - React-Core (= 0.73.6)
105 | - React-Core/DevSupport (= 0.73.6)
106 | - React-Core/RCTWebSocket (= 0.73.6)
107 | - React-RCTActionSheet (= 0.73.6)
108 | - React-RCTAnimation (= 0.73.6)
109 | - React-RCTBlob (= 0.73.6)
110 | - React-RCTImage (= 0.73.6)
111 | - React-RCTLinking (= 0.73.6)
112 | - React-RCTNetwork (= 0.73.6)
113 | - React-RCTSettings (= 0.73.6)
114 | - React-RCTText (= 0.73.6)
115 | - React-RCTVibration (= 0.73.6)
116 | - React-callinvoker (0.73.6)
117 | - React-Codegen (0.73.6):
118 | - DoubleConversion
119 | - FBReactNativeSpec
120 | - glog
121 | - hermes-engine
122 | - RCT-Folly
123 | - RCTRequired
124 | - RCTTypeSafety
125 | - React-Core
126 | - React-jsi
127 | - React-jsiexecutor
128 | - React-NativeModulesApple
129 | - React-rncore
130 | - ReactCommon/turbomodule/bridging
131 | - ReactCommon/turbomodule/core
132 | - React-Core (0.73.6):
133 | - glog
134 | - hermes-engine
135 | - RCT-Folly (= 2022.05.16.00)
136 | - React-Core/Default (= 0.73.6)
137 | - React-cxxreact
138 | - React-hermes
139 | - React-jsi
140 | - React-jsiexecutor
141 | - React-perflogger
142 | - React-runtimescheduler
143 | - React-utils
144 | - SocketRocket (= 0.6.1)
145 | - Yoga
146 | - React-Core/CoreModulesHeaders (0.73.6):
147 | - glog
148 | - hermes-engine
149 | - RCT-Folly (= 2022.05.16.00)
150 | - React-Core/Default
151 | - React-cxxreact
152 | - React-hermes
153 | - React-jsi
154 | - React-jsiexecutor
155 | - React-perflogger
156 | - React-runtimescheduler
157 | - React-utils
158 | - SocketRocket (= 0.6.1)
159 | - Yoga
160 | - React-Core/Default (0.73.6):
161 | - glog
162 | - hermes-engine
163 | - RCT-Folly (= 2022.05.16.00)
164 | - React-cxxreact
165 | - React-hermes
166 | - React-jsi
167 | - React-jsiexecutor
168 | - React-perflogger
169 | - React-runtimescheduler
170 | - React-utils
171 | - SocketRocket (= 0.6.1)
172 | - Yoga
173 | - React-Core/DevSupport (0.73.6):
174 | - glog
175 | - hermes-engine
176 | - RCT-Folly (= 2022.05.16.00)
177 | - React-Core/Default (= 0.73.6)
178 | - React-Core/RCTWebSocket (= 0.73.6)
179 | - React-cxxreact
180 | - React-hermes
181 | - React-jsi
182 | - React-jsiexecutor
183 | - React-jsinspector (= 0.73.6)
184 | - React-perflogger
185 | - React-runtimescheduler
186 | - React-utils
187 | - SocketRocket (= 0.6.1)
188 | - Yoga
189 | - React-Core/RCTActionSheetHeaders (0.73.6):
190 | - glog
191 | - hermes-engine
192 | - RCT-Folly (= 2022.05.16.00)
193 | - React-Core/Default
194 | - React-cxxreact
195 | - React-hermes
196 | - React-jsi
197 | - React-jsiexecutor
198 | - React-perflogger
199 | - React-runtimescheduler
200 | - React-utils
201 | - SocketRocket (= 0.6.1)
202 | - Yoga
203 | - React-Core/RCTAnimationHeaders (0.73.6):
204 | - glog
205 | - hermes-engine
206 | - RCT-Folly (= 2022.05.16.00)
207 | - React-Core/Default
208 | - React-cxxreact
209 | - React-hermes
210 | - React-jsi
211 | - React-jsiexecutor
212 | - React-perflogger
213 | - React-runtimescheduler
214 | - React-utils
215 | - SocketRocket (= 0.6.1)
216 | - Yoga
217 | - React-Core/RCTBlobHeaders (0.73.6):
218 | - glog
219 | - hermes-engine
220 | - RCT-Folly (= 2022.05.16.00)
221 | - React-Core/Default
222 | - React-cxxreact
223 | - React-hermes
224 | - React-jsi
225 | - React-jsiexecutor
226 | - React-perflogger
227 | - React-runtimescheduler
228 | - React-utils
229 | - SocketRocket (= 0.6.1)
230 | - Yoga
231 | - React-Core/RCTImageHeaders (0.73.6):
232 | - glog
233 | - hermes-engine
234 | - RCT-Folly (= 2022.05.16.00)
235 | - React-Core/Default
236 | - React-cxxreact
237 | - React-hermes
238 | - React-jsi
239 | - React-jsiexecutor
240 | - React-perflogger
241 | - React-runtimescheduler
242 | - React-utils
243 | - SocketRocket (= 0.6.1)
244 | - Yoga
245 | - React-Core/RCTLinkingHeaders (0.73.6):
246 | - glog
247 | - hermes-engine
248 | - RCT-Folly (= 2022.05.16.00)
249 | - React-Core/Default
250 | - React-cxxreact
251 | - React-hermes
252 | - React-jsi
253 | - React-jsiexecutor
254 | - React-perflogger
255 | - React-runtimescheduler
256 | - React-utils
257 | - SocketRocket (= 0.6.1)
258 | - Yoga
259 | - React-Core/RCTNetworkHeaders (0.73.6):
260 | - glog
261 | - hermes-engine
262 | - RCT-Folly (= 2022.05.16.00)
263 | - React-Core/Default
264 | - React-cxxreact
265 | - React-hermes
266 | - React-jsi
267 | - React-jsiexecutor
268 | - React-perflogger
269 | - React-runtimescheduler
270 | - React-utils
271 | - SocketRocket (= 0.6.1)
272 | - Yoga
273 | - React-Core/RCTSettingsHeaders (0.73.6):
274 | - glog
275 | - hermes-engine
276 | - RCT-Folly (= 2022.05.16.00)
277 | - React-Core/Default
278 | - React-cxxreact
279 | - React-hermes
280 | - React-jsi
281 | - React-jsiexecutor
282 | - React-perflogger
283 | - React-runtimescheduler
284 | - React-utils
285 | - SocketRocket (= 0.6.1)
286 | - Yoga
287 | - React-Core/RCTTextHeaders (0.73.6):
288 | - glog
289 | - hermes-engine
290 | - RCT-Folly (= 2022.05.16.00)
291 | - React-Core/Default
292 | - React-cxxreact
293 | - React-hermes
294 | - React-jsi
295 | - React-jsiexecutor
296 | - React-perflogger
297 | - React-runtimescheduler
298 | - React-utils
299 | - SocketRocket (= 0.6.1)
300 | - Yoga
301 | - React-Core/RCTVibrationHeaders (0.73.6):
302 | - glog
303 | - hermes-engine
304 | - RCT-Folly (= 2022.05.16.00)
305 | - React-Core/Default
306 | - React-cxxreact
307 | - React-hermes
308 | - React-jsi
309 | - React-jsiexecutor
310 | - React-perflogger
311 | - React-runtimescheduler
312 | - React-utils
313 | - SocketRocket (= 0.6.1)
314 | - Yoga
315 | - React-Core/RCTWebSocket (0.73.6):
316 | - glog
317 | - hermes-engine
318 | - RCT-Folly (= 2022.05.16.00)
319 | - React-Core/Default (= 0.73.6)
320 | - React-cxxreact
321 | - React-hermes
322 | - React-jsi
323 | - React-jsiexecutor
324 | - React-perflogger
325 | - React-runtimescheduler
326 | - React-utils
327 | - SocketRocket (= 0.6.1)
328 | - Yoga
329 | - React-CoreModules (0.73.6):
330 | - RCT-Folly (= 2022.05.16.00)
331 | - RCTTypeSafety (= 0.73.6)
332 | - React-Codegen
333 | - React-Core/CoreModulesHeaders (= 0.73.6)
334 | - React-jsi (= 0.73.6)
335 | - React-NativeModulesApple
336 | - React-RCTBlob
337 | - React-RCTImage (= 0.73.6)
338 | - ReactCommon
339 | - SocketRocket (= 0.6.1)
340 | - React-cxxreact (0.73.6):
341 | - boost (= 1.83.0)
342 | - DoubleConversion
343 | - fmt (~> 6.2.1)
344 | - glog
345 | - hermes-engine
346 | - RCT-Folly (= 2022.05.16.00)
347 | - React-callinvoker (= 0.73.6)
348 | - React-debug (= 0.73.6)
349 | - React-jsi (= 0.73.6)
350 | - React-jsinspector (= 0.73.6)
351 | - React-logger (= 0.73.6)
352 | - React-perflogger (= 0.73.6)
353 | - React-runtimeexecutor (= 0.73.6)
354 | - React-debug (0.73.6)
355 | - React-Fabric (0.73.6):
356 | - DoubleConversion
357 | - fmt (~> 6.2.1)
358 | - glog
359 | - hermes-engine
360 | - RCT-Folly/Fabric (= 2022.05.16.00)
361 | - RCTRequired
362 | - RCTTypeSafety
363 | - React-Core
364 | - React-cxxreact
365 | - React-debug
366 | - React-Fabric/animations (= 0.73.6)
367 | - React-Fabric/attributedstring (= 0.73.6)
368 | - React-Fabric/componentregistry (= 0.73.6)
369 | - React-Fabric/componentregistrynative (= 0.73.6)
370 | - React-Fabric/components (= 0.73.6)
371 | - React-Fabric/core (= 0.73.6)
372 | - React-Fabric/imagemanager (= 0.73.6)
373 | - React-Fabric/leakchecker (= 0.73.6)
374 | - React-Fabric/mounting (= 0.73.6)
375 | - React-Fabric/scheduler (= 0.73.6)
376 | - React-Fabric/telemetry (= 0.73.6)
377 | - React-Fabric/templateprocessor (= 0.73.6)
378 | - React-Fabric/textlayoutmanager (= 0.73.6)
379 | - React-Fabric/uimanager (= 0.73.6)
380 | - React-graphics
381 | - React-jsi
382 | - React-jsiexecutor
383 | - React-logger
384 | - React-rendererdebug
385 | - React-runtimescheduler
386 | - React-utils
387 | - ReactCommon/turbomodule/core
388 | - React-Fabric/animations (0.73.6):
389 | - DoubleConversion
390 | - fmt (~> 6.2.1)
391 | - glog
392 | - hermes-engine
393 | - RCT-Folly/Fabric (= 2022.05.16.00)
394 | - RCTRequired
395 | - RCTTypeSafety
396 | - React-Core
397 | - React-cxxreact
398 | - React-debug
399 | - React-graphics
400 | - React-jsi
401 | - React-jsiexecutor
402 | - React-logger
403 | - React-rendererdebug
404 | - React-runtimescheduler
405 | - React-utils
406 | - ReactCommon/turbomodule/core
407 | - React-Fabric/attributedstring (0.73.6):
408 | - DoubleConversion
409 | - fmt (~> 6.2.1)
410 | - glog
411 | - hermes-engine
412 | - RCT-Folly/Fabric (= 2022.05.16.00)
413 | - RCTRequired
414 | - RCTTypeSafety
415 | - React-Core
416 | - React-cxxreact
417 | - React-debug
418 | - React-graphics
419 | - React-jsi
420 | - React-jsiexecutor
421 | - React-logger
422 | - React-rendererdebug
423 | - React-runtimescheduler
424 | - React-utils
425 | - ReactCommon/turbomodule/core
426 | - React-Fabric/componentregistry (0.73.6):
427 | - DoubleConversion
428 | - fmt (~> 6.2.1)
429 | - glog
430 | - hermes-engine
431 | - RCT-Folly/Fabric (= 2022.05.16.00)
432 | - RCTRequired
433 | - RCTTypeSafety
434 | - React-Core
435 | - React-cxxreact
436 | - React-debug
437 | - React-graphics
438 | - React-jsi
439 | - React-jsiexecutor
440 | - React-logger
441 | - React-rendererdebug
442 | - React-runtimescheduler
443 | - React-utils
444 | - ReactCommon/turbomodule/core
445 | - React-Fabric/componentregistrynative (0.73.6):
446 | - DoubleConversion
447 | - fmt (~> 6.2.1)
448 | - glog
449 | - hermes-engine
450 | - RCT-Folly/Fabric (= 2022.05.16.00)
451 | - RCTRequired
452 | - RCTTypeSafety
453 | - React-Core
454 | - React-cxxreact
455 | - React-debug
456 | - React-graphics
457 | - React-jsi
458 | - React-jsiexecutor
459 | - React-logger
460 | - React-rendererdebug
461 | - React-runtimescheduler
462 | - React-utils
463 | - ReactCommon/turbomodule/core
464 | - React-Fabric/components (0.73.6):
465 | - DoubleConversion
466 | - fmt (~> 6.2.1)
467 | - glog
468 | - hermes-engine
469 | - RCT-Folly/Fabric (= 2022.05.16.00)
470 | - RCTRequired
471 | - RCTTypeSafety
472 | - React-Core
473 | - React-cxxreact
474 | - React-debug
475 | - React-Fabric/components/inputaccessory (= 0.73.6)
476 | - React-Fabric/components/legacyviewmanagerinterop (= 0.73.6)
477 | - React-Fabric/components/modal (= 0.73.6)
478 | - React-Fabric/components/rncore (= 0.73.6)
479 | - React-Fabric/components/root (= 0.73.6)
480 | - React-Fabric/components/safeareaview (= 0.73.6)
481 | - React-Fabric/components/scrollview (= 0.73.6)
482 | - React-Fabric/components/text (= 0.73.6)
483 | - React-Fabric/components/textinput (= 0.73.6)
484 | - React-Fabric/components/unimplementedview (= 0.73.6)
485 | - React-Fabric/components/view (= 0.73.6)
486 | - React-graphics
487 | - React-jsi
488 | - React-jsiexecutor
489 | - React-logger
490 | - React-rendererdebug
491 | - React-runtimescheduler
492 | - React-utils
493 | - ReactCommon/turbomodule/core
494 | - React-Fabric/components/inputaccessory (0.73.6):
495 | - DoubleConversion
496 | - fmt (~> 6.2.1)
497 | - glog
498 | - hermes-engine
499 | - RCT-Folly/Fabric (= 2022.05.16.00)
500 | - RCTRequired
501 | - RCTTypeSafety
502 | - React-Core
503 | - React-cxxreact
504 | - React-debug
505 | - React-graphics
506 | - React-jsi
507 | - React-jsiexecutor
508 | - React-logger
509 | - React-rendererdebug
510 | - React-runtimescheduler
511 | - React-utils
512 | - ReactCommon/turbomodule/core
513 | - React-Fabric/components/legacyviewmanagerinterop (0.73.6):
514 | - DoubleConversion
515 | - fmt (~> 6.2.1)
516 | - glog
517 | - hermes-engine
518 | - RCT-Folly/Fabric (= 2022.05.16.00)
519 | - RCTRequired
520 | - RCTTypeSafety
521 | - React-Core
522 | - React-cxxreact
523 | - React-debug
524 | - React-graphics
525 | - React-jsi
526 | - React-jsiexecutor
527 | - React-logger
528 | - React-rendererdebug
529 | - React-runtimescheduler
530 | - React-utils
531 | - ReactCommon/turbomodule/core
532 | - React-Fabric/components/modal (0.73.6):
533 | - DoubleConversion
534 | - fmt (~> 6.2.1)
535 | - glog
536 | - hermes-engine
537 | - RCT-Folly/Fabric (= 2022.05.16.00)
538 | - RCTRequired
539 | - RCTTypeSafety
540 | - React-Core
541 | - React-cxxreact
542 | - React-debug
543 | - React-graphics
544 | - React-jsi
545 | - React-jsiexecutor
546 | - React-logger
547 | - React-rendererdebug
548 | - React-runtimescheduler
549 | - React-utils
550 | - ReactCommon/turbomodule/core
551 | - React-Fabric/components/rncore (0.73.6):
552 | - DoubleConversion
553 | - fmt (~> 6.2.1)
554 | - glog
555 | - hermes-engine
556 | - RCT-Folly/Fabric (= 2022.05.16.00)
557 | - RCTRequired
558 | - RCTTypeSafety
559 | - React-Core
560 | - React-cxxreact
561 | - React-debug
562 | - React-graphics
563 | - React-jsi
564 | - React-jsiexecutor
565 | - React-logger
566 | - React-rendererdebug
567 | - React-runtimescheduler
568 | - React-utils
569 | - ReactCommon/turbomodule/core
570 | - React-Fabric/components/root (0.73.6):
571 | - DoubleConversion
572 | - fmt (~> 6.2.1)
573 | - glog
574 | - hermes-engine
575 | - RCT-Folly/Fabric (= 2022.05.16.00)
576 | - RCTRequired
577 | - RCTTypeSafety
578 | - React-Core
579 | - React-cxxreact
580 | - React-debug
581 | - React-graphics
582 | - React-jsi
583 | - React-jsiexecutor
584 | - React-logger
585 | - React-rendererdebug
586 | - React-runtimescheduler
587 | - React-utils
588 | - ReactCommon/turbomodule/core
589 | - React-Fabric/components/safeareaview (0.73.6):
590 | - DoubleConversion
591 | - fmt (~> 6.2.1)
592 | - glog
593 | - hermes-engine
594 | - RCT-Folly/Fabric (= 2022.05.16.00)
595 | - RCTRequired
596 | - RCTTypeSafety
597 | - React-Core
598 | - React-cxxreact
599 | - React-debug
600 | - React-graphics
601 | - React-jsi
602 | - React-jsiexecutor
603 | - React-logger
604 | - React-rendererdebug
605 | - React-runtimescheduler
606 | - React-utils
607 | - ReactCommon/turbomodule/core
608 | - React-Fabric/components/scrollview (0.73.6):
609 | - DoubleConversion
610 | - fmt (~> 6.2.1)
611 | - glog
612 | - hermes-engine
613 | - RCT-Folly/Fabric (= 2022.05.16.00)
614 | - RCTRequired
615 | - RCTTypeSafety
616 | - React-Core
617 | - React-cxxreact
618 | - React-debug
619 | - React-graphics
620 | - React-jsi
621 | - React-jsiexecutor
622 | - React-logger
623 | - React-rendererdebug
624 | - React-runtimescheduler
625 | - React-utils
626 | - ReactCommon/turbomodule/core
627 | - React-Fabric/components/text (0.73.6):
628 | - DoubleConversion
629 | - fmt (~> 6.2.1)
630 | - glog
631 | - hermes-engine
632 | - RCT-Folly/Fabric (= 2022.05.16.00)
633 | - RCTRequired
634 | - RCTTypeSafety
635 | - React-Core
636 | - React-cxxreact
637 | - React-debug
638 | - React-graphics
639 | - React-jsi
640 | - React-jsiexecutor
641 | - React-logger
642 | - React-rendererdebug
643 | - React-runtimescheduler
644 | - React-utils
645 | - ReactCommon/turbomodule/core
646 | - React-Fabric/components/textinput (0.73.6):
647 | - DoubleConversion
648 | - fmt (~> 6.2.1)
649 | - glog
650 | - hermes-engine
651 | - RCT-Folly/Fabric (= 2022.05.16.00)
652 | - RCTRequired
653 | - RCTTypeSafety
654 | - React-Core
655 | - React-cxxreact
656 | - React-debug
657 | - React-graphics
658 | - React-jsi
659 | - React-jsiexecutor
660 | - React-logger
661 | - React-rendererdebug
662 | - React-runtimescheduler
663 | - React-utils
664 | - ReactCommon/turbomodule/core
665 | - React-Fabric/components/unimplementedview (0.73.6):
666 | - DoubleConversion
667 | - fmt (~> 6.2.1)
668 | - glog
669 | - hermes-engine
670 | - RCT-Folly/Fabric (= 2022.05.16.00)
671 | - RCTRequired
672 | - RCTTypeSafety
673 | - React-Core
674 | - React-cxxreact
675 | - React-debug
676 | - React-graphics
677 | - React-jsi
678 | - React-jsiexecutor
679 | - React-logger
680 | - React-rendererdebug
681 | - React-runtimescheduler
682 | - React-utils
683 | - ReactCommon/turbomodule/core
684 | - React-Fabric/components/view (0.73.6):
685 | - DoubleConversion
686 | - fmt (~> 6.2.1)
687 | - glog
688 | - hermes-engine
689 | - RCT-Folly/Fabric (= 2022.05.16.00)
690 | - RCTRequired
691 | - RCTTypeSafety
692 | - React-Core
693 | - React-cxxreact
694 | - React-debug
695 | - React-graphics
696 | - React-jsi
697 | - React-jsiexecutor
698 | - React-logger
699 | - React-rendererdebug
700 | - React-runtimescheduler
701 | - React-utils
702 | - ReactCommon/turbomodule/core
703 | - Yoga
704 | - React-Fabric/core (0.73.6):
705 | - DoubleConversion
706 | - fmt (~> 6.2.1)
707 | - glog
708 | - hermes-engine
709 | - RCT-Folly/Fabric (= 2022.05.16.00)
710 | - RCTRequired
711 | - RCTTypeSafety
712 | - React-Core
713 | - React-cxxreact
714 | - React-debug
715 | - React-graphics
716 | - React-jsi
717 | - React-jsiexecutor
718 | - React-logger
719 | - React-rendererdebug
720 | - React-runtimescheduler
721 | - React-utils
722 | - ReactCommon/turbomodule/core
723 | - React-Fabric/imagemanager (0.73.6):
724 | - DoubleConversion
725 | - fmt (~> 6.2.1)
726 | - glog
727 | - hermes-engine
728 | - RCT-Folly/Fabric (= 2022.05.16.00)
729 | - RCTRequired
730 | - RCTTypeSafety
731 | - React-Core
732 | - React-cxxreact
733 | - React-debug
734 | - React-graphics
735 | - React-jsi
736 | - React-jsiexecutor
737 | - React-logger
738 | - React-rendererdebug
739 | - React-runtimescheduler
740 | - React-utils
741 | - ReactCommon/turbomodule/core
742 | - React-Fabric/leakchecker (0.73.6):
743 | - DoubleConversion
744 | - fmt (~> 6.2.1)
745 | - glog
746 | - hermes-engine
747 | - RCT-Folly/Fabric (= 2022.05.16.00)
748 | - RCTRequired
749 | - RCTTypeSafety
750 | - React-Core
751 | - React-cxxreact
752 | - React-debug
753 | - React-graphics
754 | - React-jsi
755 | - React-jsiexecutor
756 | - React-logger
757 | - React-rendererdebug
758 | - React-runtimescheduler
759 | - React-utils
760 | - ReactCommon/turbomodule/core
761 | - React-Fabric/mounting (0.73.6):
762 | - DoubleConversion
763 | - fmt (~> 6.2.1)
764 | - glog
765 | - hermes-engine
766 | - RCT-Folly/Fabric (= 2022.05.16.00)
767 | - RCTRequired
768 | - RCTTypeSafety
769 | - React-Core
770 | - React-cxxreact
771 | - React-debug
772 | - React-graphics
773 | - React-jsi
774 | - React-jsiexecutor
775 | - React-logger
776 | - React-rendererdebug
777 | - React-runtimescheduler
778 | - React-utils
779 | - ReactCommon/turbomodule/core
780 | - React-Fabric/scheduler (0.73.6):
781 | - DoubleConversion
782 | - fmt (~> 6.2.1)
783 | - glog
784 | - hermes-engine
785 | - RCT-Folly/Fabric (= 2022.05.16.00)
786 | - RCTRequired
787 | - RCTTypeSafety
788 | - React-Core
789 | - React-cxxreact
790 | - React-debug
791 | - React-graphics
792 | - React-jsi
793 | - React-jsiexecutor
794 | - React-logger
795 | - React-rendererdebug
796 | - React-runtimescheduler
797 | - React-utils
798 | - ReactCommon/turbomodule/core
799 | - React-Fabric/telemetry (0.73.6):
800 | - DoubleConversion
801 | - fmt (~> 6.2.1)
802 | - glog
803 | - hermes-engine
804 | - RCT-Folly/Fabric (= 2022.05.16.00)
805 | - RCTRequired
806 | - RCTTypeSafety
807 | - React-Core
808 | - React-cxxreact
809 | - React-debug
810 | - React-graphics
811 | - React-jsi
812 | - React-jsiexecutor
813 | - React-logger
814 | - React-rendererdebug
815 | - React-runtimescheduler
816 | - React-utils
817 | - ReactCommon/turbomodule/core
818 | - React-Fabric/templateprocessor (0.73.6):
819 | - DoubleConversion
820 | - fmt (~> 6.2.1)
821 | - glog
822 | - hermes-engine
823 | - RCT-Folly/Fabric (= 2022.05.16.00)
824 | - RCTRequired
825 | - RCTTypeSafety
826 | - React-Core
827 | - React-cxxreact
828 | - React-debug
829 | - React-graphics
830 | - React-jsi
831 | - React-jsiexecutor
832 | - React-logger
833 | - React-rendererdebug
834 | - React-runtimescheduler
835 | - React-utils
836 | - ReactCommon/turbomodule/core
837 | - React-Fabric/textlayoutmanager (0.73.6):
838 | - DoubleConversion
839 | - fmt (~> 6.2.1)
840 | - glog
841 | - hermes-engine
842 | - RCT-Folly/Fabric (= 2022.05.16.00)
843 | - RCTRequired
844 | - RCTTypeSafety
845 | - React-Core
846 | - React-cxxreact
847 | - React-debug
848 | - React-Fabric/uimanager
849 | - React-graphics
850 | - React-jsi
851 | - React-jsiexecutor
852 | - React-logger
853 | - React-rendererdebug
854 | - React-runtimescheduler
855 | - React-utils
856 | - ReactCommon/turbomodule/core
857 | - React-Fabric/uimanager (0.73.6):
858 | - DoubleConversion
859 | - fmt (~> 6.2.1)
860 | - glog
861 | - hermes-engine
862 | - RCT-Folly/Fabric (= 2022.05.16.00)
863 | - RCTRequired
864 | - RCTTypeSafety
865 | - React-Core
866 | - React-cxxreact
867 | - React-debug
868 | - React-graphics
869 | - React-jsi
870 | - React-jsiexecutor
871 | - React-logger
872 | - React-rendererdebug
873 | - React-runtimescheduler
874 | - React-utils
875 | - ReactCommon/turbomodule/core
876 | - React-FabricImage (0.73.6):
877 | - DoubleConversion
878 | - fmt (~> 6.2.1)
879 | - glog
880 | - hermes-engine
881 | - RCT-Folly/Fabric (= 2022.05.16.00)
882 | - RCTRequired (= 0.73.6)
883 | - RCTTypeSafety (= 0.73.6)
884 | - React-Fabric
885 | - React-graphics
886 | - React-ImageManager
887 | - React-jsi
888 | - React-jsiexecutor (= 0.73.6)
889 | - React-logger
890 | - React-rendererdebug
891 | - React-utils
892 | - ReactCommon
893 | - Yoga
894 | - React-graphics (0.73.6):
895 | - glog
896 | - RCT-Folly/Fabric (= 2022.05.16.00)
897 | - React-Core/Default (= 0.73.6)
898 | - React-utils
899 | - React-hermes (0.73.6):
900 | - DoubleConversion
901 | - fmt (~> 6.2.1)
902 | - glog
903 | - hermes-engine
904 | - RCT-Folly (= 2022.05.16.00)
905 | - RCT-Folly/Futures (= 2022.05.16.00)
906 | - React-cxxreact (= 0.73.6)
907 | - React-jsi
908 | - React-jsiexecutor (= 0.73.6)
909 | - React-jsinspector (= 0.73.6)
910 | - React-perflogger (= 0.73.6)
911 | - React-ImageManager (0.73.6):
912 | - glog
913 | - RCT-Folly/Fabric
914 | - React-Core/Default
915 | - React-debug
916 | - React-Fabric
917 | - React-graphics
918 | - React-rendererdebug
919 | - React-utils
920 | - React-jserrorhandler (0.73.6):
921 | - RCT-Folly/Fabric (= 2022.05.16.00)
922 | - React-debug
923 | - React-jsi
924 | - React-Mapbuffer
925 | - React-jsi (0.73.6):
926 | - boost (= 1.83.0)
927 | - DoubleConversion
928 | - fmt (~> 6.2.1)
929 | - glog
930 | - hermes-engine
931 | - RCT-Folly (= 2022.05.16.00)
932 | - React-jsiexecutor (0.73.6):
933 | - DoubleConversion
934 | - fmt (~> 6.2.1)
935 | - glog
936 | - hermes-engine
937 | - RCT-Folly (= 2022.05.16.00)
938 | - React-cxxreact (= 0.73.6)
939 | - React-jsi (= 0.73.6)
940 | - React-perflogger (= 0.73.6)
941 | - React-jsinspector (0.73.6)
942 | - React-logger (0.73.6):
943 | - glog
944 | - React-Mapbuffer (0.73.6):
945 | - glog
946 | - React-debug
947 | - react-native-threaded-downloader (0.1.0):
948 | - glog
949 | - RCT-Folly (= 2022.05.16.00)
950 | - React-Core
951 | - React-nativeconfig (0.73.6)
952 | - React-NativeModulesApple (0.73.6):
953 | - glog
954 | - hermes-engine
955 | - React-callinvoker
956 | - React-Core
957 | - React-cxxreact
958 | - React-jsi
959 | - React-runtimeexecutor
960 | - ReactCommon/turbomodule/bridging
961 | - ReactCommon/turbomodule/core
962 | - React-perflogger (0.73.6)
963 | - React-RCTActionSheet (0.73.6):
964 | - React-Core/RCTActionSheetHeaders (= 0.73.6)
965 | - React-RCTAnimation (0.73.6):
966 | - RCT-Folly (= 2022.05.16.00)
967 | - RCTTypeSafety
968 | - React-Codegen
969 | - React-Core/RCTAnimationHeaders
970 | - React-jsi
971 | - React-NativeModulesApple
972 | - ReactCommon
973 | - React-RCTAppDelegate (0.73.6):
974 | - RCT-Folly
975 | - RCTRequired
976 | - RCTTypeSafety
977 | - React-Core
978 | - React-CoreModules
979 | - React-hermes
980 | - React-nativeconfig
981 | - React-NativeModulesApple
982 | - React-RCTFabric
983 | - React-RCTImage
984 | - React-RCTNetwork
985 | - React-runtimescheduler
986 | - ReactCommon
987 | - React-RCTBlob (0.73.6):
988 | - hermes-engine
989 | - RCT-Folly (= 2022.05.16.00)
990 | - React-Codegen
991 | - React-Core/RCTBlobHeaders
992 | - React-Core/RCTWebSocket
993 | - React-jsi
994 | - React-NativeModulesApple
995 | - React-RCTNetwork
996 | - ReactCommon
997 | - React-RCTFabric (0.73.6):
998 | - glog
999 | - hermes-engine
1000 | - RCT-Folly/Fabric (= 2022.05.16.00)
1001 | - React-Core
1002 | - React-debug
1003 | - React-Fabric
1004 | - React-FabricImage
1005 | - React-graphics
1006 | - React-ImageManager
1007 | - React-jsi
1008 | - React-nativeconfig
1009 | - React-RCTImage
1010 | - React-RCTText
1011 | - React-rendererdebug
1012 | - React-runtimescheduler
1013 | - React-utils
1014 | - Yoga
1015 | - React-RCTImage (0.73.6):
1016 | - RCT-Folly (= 2022.05.16.00)
1017 | - RCTTypeSafety
1018 | - React-Codegen
1019 | - React-Core/RCTImageHeaders
1020 | - React-jsi
1021 | - React-NativeModulesApple
1022 | - React-RCTNetwork
1023 | - ReactCommon
1024 | - React-RCTLinking (0.73.6):
1025 | - React-Codegen
1026 | - React-Core/RCTLinkingHeaders (= 0.73.6)
1027 | - React-jsi (= 0.73.6)
1028 | - React-NativeModulesApple
1029 | - ReactCommon
1030 | - ReactCommon/turbomodule/core (= 0.73.6)
1031 | - React-RCTNetwork (0.73.6):
1032 | - RCT-Folly (= 2022.05.16.00)
1033 | - RCTTypeSafety
1034 | - React-Codegen
1035 | - React-Core/RCTNetworkHeaders
1036 | - React-jsi
1037 | - React-NativeModulesApple
1038 | - ReactCommon
1039 | - React-RCTSettings (0.73.6):
1040 | - RCT-Folly (= 2022.05.16.00)
1041 | - RCTTypeSafety
1042 | - React-Codegen
1043 | - React-Core/RCTSettingsHeaders
1044 | - React-jsi
1045 | - React-NativeModulesApple
1046 | - ReactCommon
1047 | - React-RCTText (0.73.6):
1048 | - React-Core/RCTTextHeaders (= 0.73.6)
1049 | - Yoga
1050 | - React-RCTVibration (0.73.6):
1051 | - RCT-Folly (= 2022.05.16.00)
1052 | - React-Codegen
1053 | - React-Core/RCTVibrationHeaders
1054 | - React-jsi
1055 | - React-NativeModulesApple
1056 | - ReactCommon
1057 | - React-rendererdebug (0.73.6):
1058 | - DoubleConversion
1059 | - fmt (~> 6.2.1)
1060 | - RCT-Folly (= 2022.05.16.00)
1061 | - React-debug
1062 | - React-rncore (0.73.6)
1063 | - React-runtimeexecutor (0.73.6):
1064 | - React-jsi (= 0.73.6)
1065 | - React-runtimescheduler (0.73.6):
1066 | - glog
1067 | - hermes-engine
1068 | - RCT-Folly (= 2022.05.16.00)
1069 | - React-callinvoker
1070 | - React-cxxreact
1071 | - React-debug
1072 | - React-jsi
1073 | - React-rendererdebug
1074 | - React-runtimeexecutor
1075 | - React-utils
1076 | - React-utils (0.73.6):
1077 | - glog
1078 | - RCT-Folly (= 2022.05.16.00)
1079 | - React-debug
1080 | - ReactCommon (0.73.6):
1081 | - React-logger (= 0.73.6)
1082 | - ReactCommon/turbomodule (= 0.73.6)
1083 | - ReactCommon/turbomodule (0.73.6):
1084 | - DoubleConversion
1085 | - fmt (~> 6.2.1)
1086 | - glog
1087 | - hermes-engine
1088 | - RCT-Folly (= 2022.05.16.00)
1089 | - React-callinvoker (= 0.73.6)
1090 | - React-cxxreact (= 0.73.6)
1091 | - React-jsi (= 0.73.6)
1092 | - React-logger (= 0.73.6)
1093 | - React-perflogger (= 0.73.6)
1094 | - ReactCommon/turbomodule/bridging (= 0.73.6)
1095 | - ReactCommon/turbomodule/core (= 0.73.6)
1096 | - ReactCommon/turbomodule/bridging (0.73.6):
1097 | - DoubleConversion
1098 | - fmt (~> 6.2.1)
1099 | - glog
1100 | - hermes-engine
1101 | - RCT-Folly (= 2022.05.16.00)
1102 | - React-callinvoker (= 0.73.6)
1103 | - React-cxxreact (= 0.73.6)
1104 | - React-jsi (= 0.73.6)
1105 | - React-logger (= 0.73.6)
1106 | - React-perflogger (= 0.73.6)
1107 | - ReactCommon/turbomodule/core (0.73.6):
1108 | - DoubleConversion
1109 | - fmt (~> 6.2.1)
1110 | - glog
1111 | - hermes-engine
1112 | - RCT-Folly (= 2022.05.16.00)
1113 | - React-callinvoker (= 0.73.6)
1114 | - React-cxxreact (= 0.73.6)
1115 | - React-jsi (= 0.73.6)
1116 | - React-logger (= 0.73.6)
1117 | - React-perflogger (= 0.73.6)
1118 | - SocketRocket (0.6.1)
1119 | - Yoga (1.14.0)
1120 |
1121 | DEPENDENCIES:
1122 | - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
1123 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
1124 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
1125 | - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
1126 | - Flipper (= 0.201.0)
1127 | - Flipper-Boost-iOSX (= 1.76.0.1.11)
1128 | - Flipper-DoubleConversion (= 3.2.0.1)
1129 | - Flipper-Fmt (= 7.1.7)
1130 | - Flipper-Folly (= 2.6.10)
1131 | - Flipper-Glog (= 0.5.0.5)
1132 | - Flipper-PeerTalk (= 0.0.4)
1133 | - FlipperKit (= 0.201.0)
1134 | - FlipperKit/Core (= 0.201.0)
1135 | - FlipperKit/CppBridge (= 0.201.0)
1136 | - FlipperKit/FBCxxFollyDynamicConvert (= 0.201.0)
1137 | - FlipperKit/FBDefines (= 0.201.0)
1138 | - FlipperKit/FKPortForwarding (= 0.201.0)
1139 | - FlipperKit/FlipperKitHighlightOverlay (= 0.201.0)
1140 | - FlipperKit/FlipperKitLayoutPlugin (= 0.201.0)
1141 | - FlipperKit/FlipperKitLayoutTextSearchable (= 0.201.0)
1142 | - FlipperKit/FlipperKitNetworkPlugin (= 0.201.0)
1143 | - FlipperKit/FlipperKitReactPlugin (= 0.201.0)
1144 | - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.201.0)
1145 | - FlipperKit/SKIOSNetworkPlugin (= 0.201.0)
1146 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
1147 | - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
1148 | - libevent (~> 2.1.12)
1149 | - OpenSSL-Universal (= 1.1.1100)
1150 | - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
1151 | - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
1152 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
1153 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
1154 | - React (from `../node_modules/react-native/`)
1155 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
1156 | - React-Codegen (from `build/generated/ios`)
1157 | - React-Core (from `../node_modules/react-native/`)
1158 | - React-Core/DevSupport (from `../node_modules/react-native/`)
1159 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
1160 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
1161 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
1162 | - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
1163 | - React-Fabric (from `../node_modules/react-native/ReactCommon`)
1164 | - React-FabricImage (from `../node_modules/react-native/ReactCommon`)
1165 | - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`)
1166 | - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
1167 | - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`)
1168 | - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`)
1169 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
1170 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
1171 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`)
1172 | - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
1173 | - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
1174 | - react-native-threaded-downloader (from `../..`)
1175 | - React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
1176 | - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
1177 | - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
1178 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
1179 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
1180 | - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
1181 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
1182 | - React-RCTFabric (from `../node_modules/react-native/React`)
1183 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
1184 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
1185 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
1186 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
1187 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
1188 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
1189 | - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`)
1190 | - React-rncore (from `../node_modules/react-native/ReactCommon`)
1191 | - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
1192 | - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
1193 | - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
1194 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
1195 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
1196 |
1197 | SPEC REPOS:
1198 | trunk:
1199 | - CocoaAsyncSocket
1200 | - Flipper
1201 | - Flipper-Boost-iOSX
1202 | - Flipper-DoubleConversion
1203 | - Flipper-Fmt
1204 | - Flipper-Folly
1205 | - Flipper-Glog
1206 | - Flipper-PeerTalk
1207 | - FlipperKit
1208 | - fmt
1209 | - libevent
1210 | - OpenSSL-Universal
1211 | - SocketRocket
1212 |
1213 | EXTERNAL SOURCES:
1214 | boost:
1215 | :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
1216 | DoubleConversion:
1217 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
1218 | FBLazyVector:
1219 | :path: "../node_modules/react-native/Libraries/FBLazyVector"
1220 | FBReactNativeSpec:
1221 | :path: "../node_modules/react-native/React/FBReactNativeSpec"
1222 | glog:
1223 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
1224 | hermes-engine:
1225 | :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
1226 | :tag: hermes-2024-02-20-RNv0.73.5-18f99ace4213052c5e7cdbcd39ee9766cd5df7e4
1227 | RCT-Folly:
1228 | :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
1229 | RCTRequired:
1230 | :path: "../node_modules/react-native/Libraries/RCTRequired"
1231 | RCTTypeSafety:
1232 | :path: "../node_modules/react-native/Libraries/TypeSafety"
1233 | React:
1234 | :path: "../node_modules/react-native/"
1235 | React-callinvoker:
1236 | :path: "../node_modules/react-native/ReactCommon/callinvoker"
1237 | React-Codegen:
1238 | :path: build/generated/ios
1239 | React-Core:
1240 | :path: "../node_modules/react-native/"
1241 | React-CoreModules:
1242 | :path: "../node_modules/react-native/React/CoreModules"
1243 | React-cxxreact:
1244 | :path: "../node_modules/react-native/ReactCommon/cxxreact"
1245 | React-debug:
1246 | :path: "../node_modules/react-native/ReactCommon/react/debug"
1247 | React-Fabric:
1248 | :path: "../node_modules/react-native/ReactCommon"
1249 | React-FabricImage:
1250 | :path: "../node_modules/react-native/ReactCommon"
1251 | React-graphics:
1252 | :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics"
1253 | React-hermes:
1254 | :path: "../node_modules/react-native/ReactCommon/hermes"
1255 | React-ImageManager:
1256 | :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios"
1257 | React-jserrorhandler:
1258 | :path: "../node_modules/react-native/ReactCommon/jserrorhandler"
1259 | React-jsi:
1260 | :path: "../node_modules/react-native/ReactCommon/jsi"
1261 | React-jsiexecutor:
1262 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
1263 | React-jsinspector:
1264 | :path: "../node_modules/react-native/ReactCommon/jsinspector-modern"
1265 | React-logger:
1266 | :path: "../node_modules/react-native/ReactCommon/logger"
1267 | React-Mapbuffer:
1268 | :path: "../node_modules/react-native/ReactCommon"
1269 | react-native-threaded-downloader:
1270 | :path: "../.."
1271 | React-nativeconfig:
1272 | :path: "../node_modules/react-native/ReactCommon"
1273 | React-NativeModulesApple:
1274 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
1275 | React-perflogger:
1276 | :path: "../node_modules/react-native/ReactCommon/reactperflogger"
1277 | React-RCTActionSheet:
1278 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
1279 | React-RCTAnimation:
1280 | :path: "../node_modules/react-native/Libraries/NativeAnimation"
1281 | React-RCTAppDelegate:
1282 | :path: "../node_modules/react-native/Libraries/AppDelegate"
1283 | React-RCTBlob:
1284 | :path: "../node_modules/react-native/Libraries/Blob"
1285 | React-RCTFabric:
1286 | :path: "../node_modules/react-native/React"
1287 | React-RCTImage:
1288 | :path: "../node_modules/react-native/Libraries/Image"
1289 | React-RCTLinking:
1290 | :path: "../node_modules/react-native/Libraries/LinkingIOS"
1291 | React-RCTNetwork:
1292 | :path: "../node_modules/react-native/Libraries/Network"
1293 | React-RCTSettings:
1294 | :path: "../node_modules/react-native/Libraries/Settings"
1295 | React-RCTText:
1296 | :path: "../node_modules/react-native/Libraries/Text"
1297 | React-RCTVibration:
1298 | :path: "../node_modules/react-native/Libraries/Vibration"
1299 | React-rendererdebug:
1300 | :path: "../node_modules/react-native/ReactCommon/react/renderer/debug"
1301 | React-rncore:
1302 | :path: "../node_modules/react-native/ReactCommon"
1303 | React-runtimeexecutor:
1304 | :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
1305 | React-runtimescheduler:
1306 | :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
1307 | React-utils:
1308 | :path: "../node_modules/react-native/ReactCommon/react/utils"
1309 | ReactCommon:
1310 | :path: "../node_modules/react-native/ReactCommon"
1311 | Yoga:
1312 | :path: "../node_modules/react-native/ReactCommon/yoga"
1313 |
1314 | SPEC CHECKSUMS:
1315 | boost: d3f49c53809116a5d38da093a8aa78bf551aed09
1316 | CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
1317 | DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953
1318 | FBLazyVector: f64d1e2ea739b4d8f7e4740cde18089cd97fe864
1319 | FBReactNativeSpec: 9f2b8b243131565335437dba74923a8d3015e780
1320 | Flipper: c7a0093234c4bdd456e363f2f19b2e4b27652d44
1321 | Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
1322 | Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
1323 | Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
1324 | Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
1325 | Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
1326 | Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
1327 | FlipperKit: 37525a5d056ef9b93d1578e04bc3ea1de940094f
1328 | fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
1329 | glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
1330 | hermes-engine: 9cecf9953a681df7556b8cc9c74905de8f3293c0
1331 | libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
1332 | OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
1333 | RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0
1334 | RCTRequired: ca1d7414aba0b27efcfa2ccd37637edb1ab77d96
1335 | RCTTypeSafety: 678e344fb976ff98343ca61dc62e151f3a042292
1336 | React: e296bcebb489deaad87326067204eb74145934ab
1337 | React-callinvoker: d0b7015973fa6ccb592bb0363f6bc2164238ab8c
1338 | React-Codegen: f034a5de6f28e15e8d95d171df17e581d5309268
1339 | React-Core: 44c936d0ab879e9c32e5381bd7596a677c59c974
1340 | React-CoreModules: 558228e12cddb9ca00ff7937894cc5104a21be6b
1341 | React-cxxreact: 1fcf565012c203655b3638f35aa03c13c2ed7e9e
1342 | React-debug: d444db402065cca460d9c5b072caab802a04f729
1343 | React-Fabric: 7d11905695e42f8bdaedddcf294959b43b290ab8
1344 | React-FabricImage: 6e06a512d2fb5f55669c721578736785d915d4f5
1345 | React-graphics: 5500206f7c9a481456365403c9fcf1638de108b7
1346 | React-hermes: 783023e43af9d6be4fbaeeb96b5beee00649a5f7
1347 | React-ImageManager: df193215ff3cf1a8dad297e554c89c632e42436c
1348 | React-jserrorhandler: a4d0f541c5852cf031db2f82f51de90be55b1334
1349 | React-jsi: ae102ccb38d2e4d0f512b7074d0c9b4e1851f402
1350 | React-jsiexecutor: bd12ec75873d3ef0a755c11f878f2c420430f5a9
1351 | React-jsinspector: 85583ef014ce53d731a98c66a0e24496f7a83066
1352 | React-logger: 3eb80a977f0d9669468ef641a5e1fabbc50a09ec
1353 | React-Mapbuffer: 84ea43c6c6232049135b1550b8c60b2faac19fab
1354 | react-native-threaded-downloader: 2c36120038f87806a3084c54d89e7aa3324023e9
1355 | React-nativeconfig: b4d4e9901d4cabb57be63053fd2aa6086eb3c85f
1356 | React-NativeModulesApple: cd26e56d56350e123da0c1e3e4c76cb58a05e1ee
1357 | React-perflogger: 5f49905de275bac07ac7ea7f575a70611fa988f2
1358 | React-RCTActionSheet: 37edf35aeb8e4f30e76c82aab61f12d1b75c04ec
1359 | React-RCTAnimation: a69de7f3daa8462743094f4736c455e844ea63f7
1360 | React-RCTAppDelegate: 51fb96b554a6acd0cd7818acecd5aa5ca2f3ab9f
1361 | React-RCTBlob: d91771caebf2d015005d750cd1dc2b433ad07c99
1362 | React-RCTFabric: c5b9451d1f2b546119b7a0353226a8a26247d4a9
1363 | React-RCTImage: a0bfe87b6908c7b76bd7d74520f40660bd0ad881
1364 | React-RCTLinking: 5f10be1647952cceddfa1970fdb374087582fc34
1365 | React-RCTNetwork: a0bc3dd45a2dc7c879c80cebb6f9707b2c8bbed6
1366 | React-RCTSettings: 28c202b68afa59afb4067510f2c69c5a530fb9e3
1367 | React-RCTText: 4119d9e53ca5db9502b916e1b146e99798986d21
1368 | React-RCTVibration: 55bd7c48487eb9a2562f2bd3fdc833274f5b0636
1369 | React-rendererdebug: 5fa97ba664806cee4700e95aec42dff1b6f8ea36
1370 | React-rncore: b0a8e1d14dabb7115c7a5b4ec8b9b74d1727d382
1371 | React-runtimeexecutor: bb328dbe2865f3a550df0240df8e2d8c3aaa4c57
1372 | React-runtimescheduler: 9636eee762c699ca7c85751a359101797e4c8b3b
1373 | React-utils: d16c1d2251c088ad817996621947d0ac8167b46c
1374 | ReactCommon: 2aa35648354bd4c4665b9a5084a7d37097b89c10
1375 | SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
1376 | Yoga: 805bf71192903b20fc14babe48080582fee65a80
1377 |
1378 | PODFILE CHECKSUM: 5c2c1f4a891c0c76c83df279d8f14f5f1efa9ede
1379 |
1380 | COCOAPODS: 1.15.2
1381 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 00E356F31AD99517003FC87E /* ThreadedDownloaderExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ThreadedDownloaderExampleTests.m */; };
11 | 0C80B921A6F3F58F76C31292 /* libPods-ThreadedDownloaderExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-ThreadedDownloaderExample.a */; };
12 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
14 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
15 | 7699B88040F8A987B510C191 /* libPods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.a */; };
16 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXContainerItemProxy section */
20 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
21 | isa = PBXContainerItemProxy;
22 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
23 | proxyType = 1;
24 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
25 | remoteInfo = ThreadedDownloaderExample;
26 | };
27 | /* End PBXContainerItemProxy section */
28 |
29 | /* Begin PBXFileReference section */
30 | 00E356EE1AD99517003FC87E /* ThreadedDownloaderExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ThreadedDownloaderExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
31 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
32 | 00E356F21AD99517003FC87E /* ThreadedDownloaderExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ThreadedDownloaderExampleTests.m; sourceTree = ""; };
33 | 13B07F961A680F5B00A75B9A /* ThreadedDownloaderExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ThreadedDownloaderExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
34 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ThreadedDownloaderExample/AppDelegate.h; sourceTree = ""; };
35 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = ThreadedDownloaderExample/AppDelegate.mm; sourceTree = ""; };
36 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ThreadedDownloaderExample/Images.xcassets; sourceTree = ""; };
37 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ThreadedDownloaderExample/Info.plist; sourceTree = ""; };
38 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ThreadedDownloaderExample/main.m; sourceTree = ""; };
39 | 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
40 | 3B4392A12AC88292D35C810B /* Pods-ThreadedDownloaderExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ThreadedDownloaderExample.debug.xcconfig"; path = "Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample.debug.xcconfig"; sourceTree = ""; };
41 | 5709B34CF0A7D63546082F79 /* Pods-ThreadedDownloaderExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ThreadedDownloaderExample.release.xcconfig"; path = "Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample.release.xcconfig"; sourceTree = ""; };
42 | 5B7EB9410499542E8C5724F5 /* Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.debug.xcconfig"; sourceTree = ""; };
43 | 5DCACB8F33CDC322A6C60F78 /* libPods-ThreadedDownloaderExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ThreadedDownloaderExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
44 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ThreadedDownloaderExample/LaunchScreen.storyboard; sourceTree = ""; };
45 | 89C6BE57DB24E9ADA2F236DE /* Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.release.xcconfig"; path = "Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.release.xcconfig"; sourceTree = ""; };
46 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
47 | /* End PBXFileReference section */
48 |
49 | /* Begin PBXFrameworksBuildPhase section */
50 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
51 | isa = PBXFrameworksBuildPhase;
52 | buildActionMask = 2147483647;
53 | files = (
54 | 7699B88040F8A987B510C191 /* libPods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.a in Frameworks */,
55 | );
56 | runOnlyForDeploymentPostprocessing = 0;
57 | };
58 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
59 | isa = PBXFrameworksBuildPhase;
60 | buildActionMask = 2147483647;
61 | files = (
62 | 0C80B921A6F3F58F76C31292 /* libPods-ThreadedDownloaderExample.a in Frameworks */,
63 | );
64 | runOnlyForDeploymentPostprocessing = 0;
65 | };
66 | /* End PBXFrameworksBuildPhase section */
67 |
68 | /* Begin PBXGroup section */
69 | 00E356EF1AD99517003FC87E /* ThreadedDownloaderExampleTests */ = {
70 | isa = PBXGroup;
71 | children = (
72 | 00E356F21AD99517003FC87E /* ThreadedDownloaderExampleTests.m */,
73 | 00E356F01AD99517003FC87E /* Supporting Files */,
74 | );
75 | path = ThreadedDownloaderExampleTests;
76 | sourceTree = "";
77 | };
78 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 00E356F11AD99517003FC87E /* Info.plist */,
82 | );
83 | name = "Supporting Files";
84 | sourceTree = "";
85 | };
86 | 13B07FAE1A68108700A75B9A /* ThreadedDownloaderExample */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
90 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
91 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
92 | 13B07FB61A68108700A75B9A /* Info.plist */,
93 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
94 | 13B07FB71A68108700A75B9A /* main.m */,
95 | );
96 | name = ThreadedDownloaderExample;
97 | sourceTree = "";
98 | };
99 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
100 | isa = PBXGroup;
101 | children = (
102 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
103 | 5DCACB8F33CDC322A6C60F78 /* libPods-ThreadedDownloaderExample.a */,
104 | 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.a */,
105 | );
106 | name = Frameworks;
107 | sourceTree = "";
108 | };
109 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
110 | isa = PBXGroup;
111 | children = (
112 | );
113 | name = Libraries;
114 | sourceTree = "";
115 | };
116 | 83CBB9F61A601CBA00E9B192 = {
117 | isa = PBXGroup;
118 | children = (
119 | 13B07FAE1A68108700A75B9A /* ThreadedDownloaderExample */,
120 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
121 | 00E356EF1AD99517003FC87E /* ThreadedDownloaderExampleTests */,
122 | 83CBBA001A601CBA00E9B192 /* Products */,
123 | 2D16E6871FA4F8E400B85C8A /* Frameworks */,
124 | BBD78D7AC51CEA395F1C20DB /* Pods */,
125 | );
126 | indentWidth = 2;
127 | sourceTree = "";
128 | tabWidth = 2;
129 | usesTabs = 0;
130 | };
131 | 83CBBA001A601CBA00E9B192 /* Products */ = {
132 | isa = PBXGroup;
133 | children = (
134 | 13B07F961A680F5B00A75B9A /* ThreadedDownloaderExample.app */,
135 | 00E356EE1AD99517003FC87E /* ThreadedDownloaderExampleTests.xctest */,
136 | );
137 | name = Products;
138 | sourceTree = "";
139 | };
140 | BBD78D7AC51CEA395F1C20DB /* Pods */ = {
141 | isa = PBXGroup;
142 | children = (
143 | 3B4392A12AC88292D35C810B /* Pods-ThreadedDownloaderExample.debug.xcconfig */,
144 | 5709B34CF0A7D63546082F79 /* Pods-ThreadedDownloaderExample.release.xcconfig */,
145 | 5B7EB9410499542E8C5724F5 /* Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.debug.xcconfig */,
146 | 89C6BE57DB24E9ADA2F236DE /* Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.release.xcconfig */,
147 | );
148 | path = Pods;
149 | sourceTree = "";
150 | };
151 | /* End PBXGroup section */
152 |
153 | /* Begin PBXNativeTarget section */
154 | 00E356ED1AD99517003FC87E /* ThreadedDownloaderExampleTests */ = {
155 | isa = PBXNativeTarget;
156 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ThreadedDownloaderExampleTests" */;
157 | buildPhases = (
158 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
159 | 00E356EA1AD99517003FC87E /* Sources */,
160 | 00E356EB1AD99517003FC87E /* Frameworks */,
161 | 00E356EC1AD99517003FC87E /* Resources */,
162 | C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
163 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
164 | );
165 | buildRules = (
166 | );
167 | dependencies = (
168 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
169 | );
170 | name = ThreadedDownloaderExampleTests;
171 | productName = ThreadedDownloaderExampleTests;
172 | productReference = 00E356EE1AD99517003FC87E /* ThreadedDownloaderExampleTests.xctest */;
173 | productType = "com.apple.product-type.bundle.unit-test";
174 | };
175 | 13B07F861A680F5B00A75B9A /* ThreadedDownloaderExample */ = {
176 | isa = PBXNativeTarget;
177 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ThreadedDownloaderExample" */;
178 | buildPhases = (
179 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
180 | 13B07F871A680F5B00A75B9A /* Sources */,
181 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
182 | 13B07F8E1A680F5B00A75B9A /* Resources */,
183 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
184 | 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
185 | E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
186 | );
187 | buildRules = (
188 | );
189 | dependencies = (
190 | );
191 | name = ThreadedDownloaderExample;
192 | productName = ThreadedDownloaderExample;
193 | productReference = 13B07F961A680F5B00A75B9A /* ThreadedDownloaderExample.app */;
194 | productType = "com.apple.product-type.application";
195 | };
196 | /* End PBXNativeTarget section */
197 |
198 | /* Begin PBXProject section */
199 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
200 | isa = PBXProject;
201 | attributes = {
202 | LastUpgradeCheck = 1210;
203 | TargetAttributes = {
204 | 00E356ED1AD99517003FC87E = {
205 | CreatedOnToolsVersion = 6.2;
206 | TestTargetID = 13B07F861A680F5B00A75B9A;
207 | };
208 | 13B07F861A680F5B00A75B9A = {
209 | LastSwiftMigration = 1120;
210 | };
211 | };
212 | };
213 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ThreadedDownloaderExample" */;
214 | compatibilityVersion = "Xcode 12.0";
215 | developmentRegion = en;
216 | hasScannedForEncodings = 0;
217 | knownRegions = (
218 | en,
219 | Base,
220 | );
221 | mainGroup = 83CBB9F61A601CBA00E9B192;
222 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
223 | projectDirPath = "";
224 | projectRoot = "";
225 | targets = (
226 | 13B07F861A680F5B00A75B9A /* ThreadedDownloaderExample */,
227 | 00E356ED1AD99517003FC87E /* ThreadedDownloaderExampleTests */,
228 | );
229 | };
230 | /* End PBXProject section */
231 |
232 | /* Begin PBXResourcesBuildPhase section */
233 | 00E356EC1AD99517003FC87E /* Resources */ = {
234 | isa = PBXResourcesBuildPhase;
235 | buildActionMask = 2147483647;
236 | files = (
237 | );
238 | runOnlyForDeploymentPostprocessing = 0;
239 | };
240 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
241 | isa = PBXResourcesBuildPhase;
242 | buildActionMask = 2147483647;
243 | files = (
244 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
245 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
246 | );
247 | runOnlyForDeploymentPostprocessing = 0;
248 | };
249 | /* End PBXResourcesBuildPhase section */
250 |
251 | /* Begin PBXShellScriptBuildPhase section */
252 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
253 | isa = PBXShellScriptBuildPhase;
254 | buildActionMask = 2147483647;
255 | files = (
256 | );
257 | inputPaths = (
258 | "$(SRCROOT)/.xcode.env.local",
259 | "$(SRCROOT)/.xcode.env",
260 | );
261 | name = "Bundle React Native code and images";
262 | outputPaths = (
263 | );
264 | runOnlyForDeploymentPostprocessing = 0;
265 | shellPath = /bin/sh;
266 | 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";
267 | };
268 | 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
269 | isa = PBXShellScriptBuildPhase;
270 | buildActionMask = 2147483647;
271 | files = (
272 | );
273 | inputFileListPaths = (
274 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample-frameworks-${CONFIGURATION}-input-files.xcfilelist",
275 | );
276 | name = "[CP] Embed Pods Frameworks";
277 | outputFileListPaths = (
278 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample-frameworks-${CONFIGURATION}-output-files.xcfilelist",
279 | );
280 | runOnlyForDeploymentPostprocessing = 0;
281 | shellPath = /bin/sh;
282 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample-frameworks.sh\"\n";
283 | showEnvVarsInLog = 0;
284 | };
285 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
286 | isa = PBXShellScriptBuildPhase;
287 | buildActionMask = 2147483647;
288 | files = (
289 | );
290 | inputFileListPaths = (
291 | );
292 | inputPaths = (
293 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
294 | "${PODS_ROOT}/Manifest.lock",
295 | );
296 | name = "[CP] Check Pods Manifest.lock";
297 | outputFileListPaths = (
298 | );
299 | outputPaths = (
300 | "$(DERIVED_FILE_DIR)/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-checkManifestLockResult.txt",
301 | );
302 | runOnlyForDeploymentPostprocessing = 0;
303 | shellPath = /bin/sh;
304 | 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";
305 | showEnvVarsInLog = 0;
306 | };
307 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
308 | isa = PBXShellScriptBuildPhase;
309 | buildActionMask = 2147483647;
310 | files = (
311 | );
312 | inputFileListPaths = (
313 | );
314 | inputPaths = (
315 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
316 | "${PODS_ROOT}/Manifest.lock",
317 | );
318 | name = "[CP] Check Pods Manifest.lock";
319 | outputFileListPaths = (
320 | );
321 | outputPaths = (
322 | "$(DERIVED_FILE_DIR)/Pods-ThreadedDownloaderExample-checkManifestLockResult.txt",
323 | );
324 | runOnlyForDeploymentPostprocessing = 0;
325 | shellPath = /bin/sh;
326 | 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";
327 | showEnvVarsInLog = 0;
328 | };
329 | C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
330 | isa = PBXShellScriptBuildPhase;
331 | buildActionMask = 2147483647;
332 | files = (
333 | );
334 | inputFileListPaths = (
335 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
336 | );
337 | name = "[CP] Embed Pods Frameworks";
338 | outputFileListPaths = (
339 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
340 | );
341 | runOnlyForDeploymentPostprocessing = 0;
342 | shellPath = /bin/sh;
343 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-frameworks.sh\"\n";
344 | showEnvVarsInLog = 0;
345 | };
346 | E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
347 | isa = PBXShellScriptBuildPhase;
348 | buildActionMask = 2147483647;
349 | files = (
350 | );
351 | inputFileListPaths = (
352 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample-resources-${CONFIGURATION}-input-files.xcfilelist",
353 | );
354 | name = "[CP] Copy Pods Resources";
355 | outputFileListPaths = (
356 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample-resources-${CONFIGURATION}-output-files.xcfilelist",
357 | );
358 | runOnlyForDeploymentPostprocessing = 0;
359 | shellPath = /bin/sh;
360 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample/Pods-ThreadedDownloaderExample-resources.sh\"\n";
361 | showEnvVarsInLog = 0;
362 | };
363 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
364 | isa = PBXShellScriptBuildPhase;
365 | buildActionMask = 2147483647;
366 | files = (
367 | );
368 | inputFileListPaths = (
369 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-resources-${CONFIGURATION}-input-files.xcfilelist",
370 | );
371 | name = "[CP] Copy Pods Resources";
372 | outputFileListPaths = (
373 | "${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-resources-${CONFIGURATION}-output-files.xcfilelist",
374 | );
375 | runOnlyForDeploymentPostprocessing = 0;
376 | shellPath = /bin/sh;
377 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests/Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests-resources.sh\"\n";
378 | showEnvVarsInLog = 0;
379 | };
380 | /* End PBXShellScriptBuildPhase section */
381 |
382 | /* Begin PBXSourcesBuildPhase section */
383 | 00E356EA1AD99517003FC87E /* Sources */ = {
384 | isa = PBXSourcesBuildPhase;
385 | buildActionMask = 2147483647;
386 | files = (
387 | 00E356F31AD99517003FC87E /* ThreadedDownloaderExampleTests.m in Sources */,
388 | );
389 | runOnlyForDeploymentPostprocessing = 0;
390 | };
391 | 13B07F871A680F5B00A75B9A /* Sources */ = {
392 | isa = PBXSourcesBuildPhase;
393 | buildActionMask = 2147483647;
394 | files = (
395 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
396 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
397 | );
398 | runOnlyForDeploymentPostprocessing = 0;
399 | };
400 | /* End PBXSourcesBuildPhase section */
401 |
402 | /* Begin PBXTargetDependency section */
403 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
404 | isa = PBXTargetDependency;
405 | target = 13B07F861A680F5B00A75B9A /* ThreadedDownloaderExample */;
406 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
407 | };
408 | /* End PBXTargetDependency section */
409 |
410 | /* Begin XCBuildConfiguration section */
411 | 00E356F61AD99517003FC87E /* Debug */ = {
412 | isa = XCBuildConfiguration;
413 | baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.debug.xcconfig */;
414 | buildSettings = {
415 | BUNDLE_LOADER = "$(TEST_HOST)";
416 | GCC_PREPROCESSOR_DEFINITIONS = (
417 | "DEBUG=1",
418 | "$(inherited)",
419 | );
420 | INFOPLIST_FILE = ThreadedDownloaderExampleTests/Info.plist;
421 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
422 | LD_RUNPATH_SEARCH_PATHS = (
423 | "$(inherited)",
424 | "@executable_path/Frameworks",
425 | "@loader_path/Frameworks",
426 | );
427 | OTHER_LDFLAGS = (
428 | "-ObjC",
429 | "-lc++",
430 | "$(inherited)",
431 | );
432 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
433 | PRODUCT_NAME = "$(TARGET_NAME)";
434 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ThreadedDownloaderExample.app/ThreadedDownloaderExample";
435 | };
436 | name = Debug;
437 | };
438 | 00E356F71AD99517003FC87E /* Release */ = {
439 | isa = XCBuildConfiguration;
440 | baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-ThreadedDownloaderExample-ThreadedDownloaderExampleTests.release.xcconfig */;
441 | buildSettings = {
442 | BUNDLE_LOADER = "$(TEST_HOST)";
443 | COPY_PHASE_STRIP = NO;
444 | INFOPLIST_FILE = ThreadedDownloaderExampleTests/Info.plist;
445 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
446 | LD_RUNPATH_SEARCH_PATHS = (
447 | "$(inherited)",
448 | "@executable_path/Frameworks",
449 | "@loader_path/Frameworks",
450 | );
451 | OTHER_LDFLAGS = (
452 | "-ObjC",
453 | "-lc++",
454 | "$(inherited)",
455 | );
456 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
457 | PRODUCT_NAME = "$(TARGET_NAME)";
458 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ThreadedDownloaderExample.app/ThreadedDownloaderExample";
459 | };
460 | name = Release;
461 | };
462 | 13B07F941A680F5B00A75B9A /* Debug */ = {
463 | isa = XCBuildConfiguration;
464 | baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-ThreadedDownloaderExample.debug.xcconfig */;
465 | buildSettings = {
466 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
467 | CLANG_ENABLE_MODULES = YES;
468 | CURRENT_PROJECT_VERSION = 1;
469 | ENABLE_BITCODE = NO;
470 | INFOPLIST_FILE = ThreadedDownloaderExample/Info.plist;
471 | LD_RUNPATH_SEARCH_PATHS = (
472 | "$(inherited)",
473 | "@executable_path/Frameworks",
474 | );
475 | MARKETING_VERSION = 1.0;
476 | OTHER_LDFLAGS = (
477 | "$(inherited)",
478 | "-ObjC",
479 | "-lc++",
480 | );
481 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
482 | PRODUCT_NAME = ThreadedDownloaderExample;
483 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
484 | SWIFT_VERSION = 5.0;
485 | VERSIONING_SYSTEM = "apple-generic";
486 | };
487 | name = Debug;
488 | };
489 | 13B07F951A680F5B00A75B9A /* Release */ = {
490 | isa = XCBuildConfiguration;
491 | baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-ThreadedDownloaderExample.release.xcconfig */;
492 | buildSettings = {
493 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
494 | CLANG_ENABLE_MODULES = YES;
495 | CURRENT_PROJECT_VERSION = 1;
496 | INFOPLIST_FILE = ThreadedDownloaderExample/Info.plist;
497 | LD_RUNPATH_SEARCH_PATHS = (
498 | "$(inherited)",
499 | "@executable_path/Frameworks",
500 | );
501 | MARKETING_VERSION = 1.0;
502 | OTHER_LDFLAGS = (
503 | "$(inherited)",
504 | "-ObjC",
505 | "-lc++",
506 | );
507 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
508 | PRODUCT_NAME = ThreadedDownloaderExample;
509 | SWIFT_VERSION = 5.0;
510 | VERSIONING_SYSTEM = "apple-generic";
511 | };
512 | name = Release;
513 | };
514 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
515 | isa = XCBuildConfiguration;
516 | buildSettings = {
517 | ALWAYS_SEARCH_USER_PATHS = NO;
518 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
519 | CLANG_CXX_LANGUAGE_STANDARD = "c++20";
520 | CLANG_CXX_LIBRARY = "libc++";
521 | CLANG_ENABLE_MODULES = YES;
522 | CLANG_ENABLE_OBJC_ARC = YES;
523 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
524 | CLANG_WARN_BOOL_CONVERSION = YES;
525 | CLANG_WARN_COMMA = YES;
526 | CLANG_WARN_CONSTANT_CONVERSION = YES;
527 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
528 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
529 | CLANG_WARN_EMPTY_BODY = YES;
530 | CLANG_WARN_ENUM_CONVERSION = YES;
531 | CLANG_WARN_INFINITE_RECURSION = YES;
532 | CLANG_WARN_INT_CONVERSION = YES;
533 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
534 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
535 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
536 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
537 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
538 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
539 | CLANG_WARN_STRICT_PROTOTYPES = YES;
540 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
541 | CLANG_WARN_UNREACHABLE_CODE = YES;
542 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
543 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
544 | COPY_PHASE_STRIP = NO;
545 | ENABLE_STRICT_OBJC_MSGSEND = YES;
546 | ENABLE_TESTABILITY = YES;
547 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
548 | GCC_C_LANGUAGE_STANDARD = gnu99;
549 | GCC_DYNAMIC_NO_PIC = NO;
550 | GCC_NO_COMMON_BLOCKS = YES;
551 | GCC_OPTIMIZATION_LEVEL = 0;
552 | GCC_PREPROCESSOR_DEFINITIONS = (
553 | "DEBUG=1",
554 | "$(inherited)",
555 | );
556 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
557 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
558 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
559 | GCC_WARN_UNDECLARED_SELECTOR = YES;
560 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
561 | GCC_WARN_UNUSED_FUNCTION = YES;
562 | GCC_WARN_UNUSED_VARIABLE = YES;
563 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
564 | LD_RUNPATH_SEARCH_PATHS = (
565 | /usr/lib/swift,
566 | "$(inherited)",
567 | );
568 | LIBRARY_SEARCH_PATHS = (
569 | "\"$(SDKROOT)/usr/lib/swift\"",
570 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
571 | "\"$(inherited)\"",
572 | );
573 | MTL_ENABLE_DEBUG_INFO = YES;
574 | ONLY_ACTIVE_ARCH = YES;
575 | OTHER_CFLAGS = "$(inherited)";
576 | OTHER_CPLUSPLUSFLAGS = (
577 | "$(OTHER_CFLAGS)",
578 | "-DFOLLY_NO_CONFIG",
579 | "-DFOLLY_MOBILE=1",
580 | "-DFOLLY_USE_LIBCPP=1",
581 | "-DFOLLY_CFG_NO_COROUTINES=1",
582 | );
583 | OTHER_LDFLAGS = (
584 | "$(inherited)",
585 | " ",
586 | );
587 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
588 | SDKROOT = iphoneos;
589 | USE_HERMES = true;
590 | };
591 | name = Debug;
592 | };
593 | 83CBBA211A601CBA00E9B192 /* Release */ = {
594 | isa = XCBuildConfiguration;
595 | buildSettings = {
596 | ALWAYS_SEARCH_USER_PATHS = NO;
597 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
598 | CLANG_CXX_LANGUAGE_STANDARD = "c++20";
599 | CLANG_CXX_LIBRARY = "libc++";
600 | CLANG_ENABLE_MODULES = YES;
601 | CLANG_ENABLE_OBJC_ARC = YES;
602 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
603 | CLANG_WARN_BOOL_CONVERSION = YES;
604 | CLANG_WARN_COMMA = YES;
605 | CLANG_WARN_CONSTANT_CONVERSION = YES;
606 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
607 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
608 | CLANG_WARN_EMPTY_BODY = YES;
609 | CLANG_WARN_ENUM_CONVERSION = YES;
610 | CLANG_WARN_INFINITE_RECURSION = YES;
611 | CLANG_WARN_INT_CONVERSION = YES;
612 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
613 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
614 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
615 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
616 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
617 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
618 | CLANG_WARN_STRICT_PROTOTYPES = YES;
619 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
620 | CLANG_WARN_UNREACHABLE_CODE = YES;
621 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
622 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
623 | COPY_PHASE_STRIP = YES;
624 | ENABLE_NS_ASSERTIONS = NO;
625 | ENABLE_STRICT_OBJC_MSGSEND = YES;
626 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
627 | GCC_C_LANGUAGE_STANDARD = gnu99;
628 | GCC_NO_COMMON_BLOCKS = YES;
629 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
630 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
631 | GCC_WARN_UNDECLARED_SELECTOR = YES;
632 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
633 | GCC_WARN_UNUSED_FUNCTION = YES;
634 | GCC_WARN_UNUSED_VARIABLE = YES;
635 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
636 | LD_RUNPATH_SEARCH_PATHS = (
637 | /usr/lib/swift,
638 | "$(inherited)",
639 | );
640 | LIBRARY_SEARCH_PATHS = (
641 | "\"$(SDKROOT)/usr/lib/swift\"",
642 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
643 | "\"$(inherited)\"",
644 | );
645 | MTL_ENABLE_DEBUG_INFO = NO;
646 | OTHER_CFLAGS = "$(inherited)";
647 | OTHER_CPLUSPLUSFLAGS = (
648 | "$(OTHER_CFLAGS)",
649 | "-DFOLLY_NO_CONFIG",
650 | "-DFOLLY_MOBILE=1",
651 | "-DFOLLY_USE_LIBCPP=1",
652 | "-DFOLLY_CFG_NO_COROUTINES=1",
653 | );
654 | OTHER_LDFLAGS = (
655 | "$(inherited)",
656 | " ",
657 | );
658 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
659 | SDKROOT = iphoneos;
660 | USE_HERMES = true;
661 | VALIDATE_PRODUCT = YES;
662 | };
663 | name = Release;
664 | };
665 | /* End XCBuildConfiguration section */
666 |
667 | /* Begin XCConfigurationList section */
668 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ThreadedDownloaderExampleTests" */ = {
669 | isa = XCConfigurationList;
670 | buildConfigurations = (
671 | 00E356F61AD99517003FC87E /* Debug */,
672 | 00E356F71AD99517003FC87E /* Release */,
673 | );
674 | defaultConfigurationIsVisible = 0;
675 | defaultConfigurationName = Release;
676 | };
677 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ThreadedDownloaderExample" */ = {
678 | isa = XCConfigurationList;
679 | buildConfigurations = (
680 | 13B07F941A680F5B00A75B9A /* Debug */,
681 | 13B07F951A680F5B00A75B9A /* Release */,
682 | );
683 | defaultConfigurationIsVisible = 0;
684 | defaultConfigurationName = Release;
685 | };
686 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ThreadedDownloaderExample" */ = {
687 | isa = XCConfigurationList;
688 | buildConfigurations = (
689 | 83CBBA201A601CBA00E9B192 /* Debug */,
690 | 83CBBA211A601CBA00E9B192 /* Release */,
691 | );
692 | defaultConfigurationIsVisible = 0;
693 | defaultConfigurationName = Release;
694 | };
695 | /* End XCConfigurationList section */
696 | };
697 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
698 | }
699 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample.xcodeproj/xcshareddata/xcschemes/ThreadedDownloaderExample.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 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : RCTAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/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 = @"ThreadedDownloaderExample";
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 | return [self getBundleURL];
20 | }
21 |
22 | - (NSURL *)getBundleURL
23 | {
24 | #if DEBUG
25 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
26 | #else
27 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
28 | #endif
29 | }
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/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 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ThreadedDownloaderExample
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 |
30 | NSAllowsArbitraryLoads
31 |
32 | NSAllowsLocalNetworking
33 |
34 |
35 | NSLocationWhenInUseUsageDescription
36 |
37 | UILaunchStoryboardName
38 | LaunchScreen
39 | UIRequiredDeviceCapabilities
40 |
41 | armv7
42 |
43 | UISupportedInterfaceOrientations
44 |
45 | UIInterfaceOrientationPortrait
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 | UIViewControllerBasedStatusBarAppearance
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/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 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExample/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 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExampleTests/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 |
--------------------------------------------------------------------------------
/example/ios/ThreadedDownloaderExampleTests/ThreadedDownloaderExampleTests.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 ThreadedDownloaderExampleTests : XCTestCase
11 |
12 | @end
13 |
14 | @implementation ThreadedDownloaderExampleTests
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 |
--------------------------------------------------------------------------------
/example/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: 'react-native',
3 | };
4 |
--------------------------------------------------------------------------------
/example/metro.config.js:
--------------------------------------------------------------------------------
1 | const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
2 | const path = require('path');
3 | const escape = require('escape-string-regexp');
4 | const exclusionList = require('metro-config/src/defaults/exclusionList');
5 | const pak = require('../package.json');
6 |
7 | const root = path.resolve(__dirname, '..');
8 | const modules = Object.keys({ ...pak.peerDependencies });
9 |
10 | /**
11 | * Metro configuration
12 | * https://facebook.github.io/metro/docs/configuration
13 | *
14 | * @type {import('metro-config').MetroConfig}
15 | */
16 | const config = {
17 | watchFolders: [root],
18 |
19 | // We need to make sure that only one version is loaded for peerDependencies
20 | // So we block them at the root, and alias them to the versions in example's node_modules
21 | resolver: {
22 | blacklistRE: exclusionList(modules.map((m) => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`))),
23 |
24 | extraNodeModules: modules.reduce((acc, name) => {
25 | acc[name] = path.join(__dirname, 'node_modules', name);
26 | return acc;
27 | }, {}),
28 | },
29 |
30 | transformer: {
31 | getTransformOptions: async () => ({
32 | transform: {
33 | experimentalImportSupport: false,
34 | inlineRequires: true,
35 | },
36 | }),
37 | },
38 | };
39 |
40 | module.exports = mergeConfig(getDefaultConfig(__dirname), config);
41 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-native-threaded-downloader-example",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "android": "react-native run-android",
7 | "ios": "react-native run-ios",
8 | "start": "react-native start",
9 | "build:android": "cd android && ./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a",
10 | "build:ios": "cd ios && xcodebuild -workspace ThreadedDownloaderExample.xcworkspace -scheme ThreadedDownloaderExample -configuration Debug -sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO"
11 | },
12 | "dependencies": {
13 | "react": "18.2.0",
14 | "react-native": "0.73.6"
15 | },
16 | "devDependencies": {
17 | "@babel/core": "^7.20.0",
18 | "@babel/preset-env": "^7.20.0",
19 | "@babel/runtime": "^7.20.0",
20 | "@react-native/babel-preset": "0.73.21",
21 | "@react-native/metro-config": "0.73.5",
22 | "@react-native/typescript-config": "0.73.1",
23 | "babel-plugin-module-resolver": "^5.0.0"
24 | },
25 | "engines": {
26 | "node": ">=18"
27 | },
28 | "prettier": {
29 | "printWidth": 120
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/example/react-native.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const pak = require('../package.json');
3 |
4 | module.exports = {
5 | dependencies: {
6 | [pak.name]: {
7 | root: path.join(__dirname, '..'),
8 | },
9 | },
10 | };
11 |
--------------------------------------------------------------------------------
/example/src/App.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | import { Button, SafeAreaView, ScrollView, StyleSheet, TextInput, View, Text } from 'react-native';
4 | import { performThreadedDownload } from 'react-native-threaded-downloader';
5 |
6 | const BUTTON_TEXT = 'Perform HTTP GET';
7 | const TIMEOUT_SECONDS = 60;
8 |
9 | function processError(e: any) {
10 | let result = e.toString();
11 | result = result.replace(/Error: /g, '');
12 | return 'Error: ' + result;
13 | }
14 |
15 | export default function App() {
16 | const [url, setUrl] = React.useState('https://example.com/');
17 | const [timeoutSeconds, setTimeoutSeconds] = React.useState();
18 | const [output, setOutput] = React.useState("Enter a URL above and press '" + BUTTON_TEXT + "'");
19 |
20 | function onSubmit() {
21 | setOutput('Executing ' + url + ' with a timeout of ' + timeoutSeconds + ' seconds...');
22 |
23 | performThreadedDownload(url, timeoutSeconds ?? TIMEOUT_SECONDS)
24 | .then((response) => setOutput(response))
25 | .catch((e) => setOutput(processError(e)));
26 | }
27 |
28 | return (
29 |
30 |
42 | setTimeoutSeconds(parseFloat(val))}
45 | value={timeoutSeconds?.toString()}
46 | placeholder="Timeout (seconds)"
47 | clearButtonMode="always"
48 | inputMode="decimal"
49 | autoCapitalize="none"
50 | keyboardType="numeric"
51 | autoCorrect={false}
52 | />
53 |
54 |
55 |
56 |
57 | {output}
58 |
59 |
60 | );
61 | }
62 |
63 | const styles = StyleSheet.create({
64 | container: {
65 | flex: 1,
66 | alignItems: 'center',
67 | justifyContent: 'center',
68 | },
69 | input: {
70 | height: 40,
71 | marginVertical: 10,
72 | borderWidth: 1,
73 | padding: 10,
74 | width: '75%',
75 | },
76 | outputContainer: {
77 | borderWidth: 1,
78 | padding: 10,
79 | width: '90%',
80 | },
81 | buttonWrapper: {
82 | marginVertical: 10,
83 | },
84 | });
85 |
--------------------------------------------------------------------------------
/ios/ThreadedDownloader.h:
--------------------------------------------------------------------------------
1 |
2 | #ifdef RCT_NEW_ARCH_ENABLED
3 | #import "RNThreadedDownloaderSpec.h"
4 |
5 | @interface ThreadedDownloader : NSObject
6 | #else
7 | #import
8 |
9 | @interface ThreadedDownloader : NSObject
10 | #endif
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/ios/ThreadedDownloader.mm:
--------------------------------------------------------------------------------
1 | #import "ThreadedDownloader.h"
2 | #import
3 |
4 | @implementation ThreadedDownloader
5 | RCT_EXPORT_MODULE()
6 |
7 | RCT_EXPORT_METHOD(performThreadedDownload:(NSString *)url
8 | timeoutSeconds:(double)timeoutSeconds
9 | resolver:(RCTPromiseResolveBlock)resolve
10 | rejecter:(RCTPromiseRejectBlock)reject)
11 | {
12 | RCTLogInfo(@"ThreadedDownloader performThreadedDownload call with %@", url);
13 |
14 | dispatch_queue_t queue = dispatch_queue_create("tndm_queue", DISPATCH_QUEUE_CONCURRENT);
15 |
16 | dispatch_async(queue, ^{
17 | RCTLogInfo(@"ThreadedDownloader performThreadedDownload dispatched in new thread");
18 |
19 | NSURL *urlObj = [NSURL URLWithString:url];
20 | //NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
21 | //NSURLSession *session = [NSURLSession sessionWithConfiguration: sessionConfig delegate: self delegateQueue: [NSOperationQueue mainQueue]];
22 | NSURLSession *session = [NSURLSession sharedSession];
23 | NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:urlObj cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:timeoutSeconds];
24 |
25 | // if ([@"POST" isEqualToString:httpMethod]) {
26 | // [request setHTTPMethod:@"POST"];
27 | // }
28 | // [request setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
29 | // [requestBody setHTTPBody:[NSData dataWithBytes: [parameters UTF8String]length:strlen([parameters UTF8String])]];
30 |
31 | NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
32 | if (error == nil) {
33 | NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
34 | RCTLogInfo(@"ThreadedDownloader performThreadedDownload received response %ld", (long)httpResponse.statusCode);
35 | if (httpResponse.statusCode >= 100 && httpResponse.statusCode < 400) {
36 | NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
37 | resolve(responseString);
38 | } else {
39 | NSString *errorString = [NSString stringWithFormat:@"Error: %ld", (long)httpResponse.statusCode];
40 | reject(@"error_response", errorString, nil);
41 | }
42 | } else {
43 | RCTLogInfo(@"ThreadedDownloader performThreadedDownload error: %@", error);
44 | NSString *errorString = [NSString stringWithFormat:@"Error: %@", error];
45 | reject(@"download_failure", errorString, nil);
46 | }
47 | }];
48 |
49 | [task resume];
50 |
51 | });
52 | }
53 |
54 | @end
55 |
--------------------------------------------------------------------------------
/lefthook.yml:
--------------------------------------------------------------------------------
1 | pre-commit:
2 | parallel: true
3 | commands:
4 | lint:
5 | glob: "*.{js,ts,jsx,tsx}"
6 | run: npx eslint {staged_files}
7 | types:
8 | glob: "*.{js,ts, jsx, tsx}"
9 | run: npx tsc --noEmit
10 | commit-msg:
11 | parallel: true
12 | commands:
13 | commitlint:
14 | run: npx commitlint --edit
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-native-threaded-downloader",
3 | "version": "0.2.0",
4 | "description": "Perform HTTP requests on separate native asynchronous threads and then call back to a promise",
5 | "main": "lib/commonjs/index",
6 | "module": "lib/module/index",
7 | "types": "lib/typescript/src/index.d.ts",
8 | "react-native": "src/index",
9 | "source": "src/index",
10 | "files": [
11 | "src",
12 | "lib",
13 | "android",
14 | "ios",
15 | "cpp",
16 | "*.podspec",
17 | "!ios/build",
18 | "!android/build",
19 | "!android/gradle",
20 | "!android/gradlew",
21 | "!android/gradlew.bat",
22 | "!android/local.properties",
23 | "!**/__tests__",
24 | "!**/__fixtures__",
25 | "!**/__mocks__",
26 | "!**/.*"
27 | ],
28 | "scripts": {
29 | "example": "yarn workspace react-native-threaded-downloader-example",
30 | "test": "jest",
31 | "typecheck": "tsc --noEmit",
32 | "lint": "eslint \"**/*.{js,ts,tsx}\"",
33 | "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
34 | "prepare": "bob build",
35 | "release": "release-it"
36 | },
37 | "keywords": [
38 | "react-native",
39 | "ios",
40 | "android"
41 | ],
42 | "repository": {
43 | "type": "git",
44 | "url": "git+https://github.com/findhumane/react-native-threaded-downloader.git"
45 | },
46 | "author": "findhumane (https://github.com/findhumane)",
47 | "license": "MIT",
48 | "bugs": {
49 | "url": "https://github.com/findhumane/react-native-threaded-downloader/issues"
50 | },
51 | "homepage": "https://github.com/findhumane/react-native-threaded-downloader#readme",
52 | "publishConfig": {
53 | "registry": "https://registry.npmjs.org/"
54 | },
55 | "devDependencies": {
56 | "@commitlint/config-conventional": "^17.0.2",
57 | "@evilmartians/lefthook": "^1.5.0",
58 | "@react-native/eslint-config": "^0.73.1",
59 | "@release-it/conventional-changelog": "^5.0.0",
60 | "@types/jest": "^29.5.5",
61 | "@types/react": "^18.2.44",
62 | "commitlint": "^17.0.2",
63 | "del-cli": "^5.1.0",
64 | "eslint": "^8.51.0",
65 | "eslint-config-prettier": "^9.0.0",
66 | "eslint-plugin-prettier": "^5.0.1",
67 | "jest": "^29.7.0",
68 | "prettier": "^3.0.3",
69 | "react": "18.2.0",
70 | "react-native": "0.73.6",
71 | "react-native-builder-bob": "^0.23.2",
72 | "release-it": "^15.0.0",
73 | "turbo": "^1.10.7",
74 | "typescript": "^5.2.2"
75 | },
76 | "resolutions": {
77 | "@types/react": "^18.2.44"
78 | },
79 | "peerDependencies": {
80 | "react": "*",
81 | "react-native": "*"
82 | },
83 | "workspaces": [
84 | "example"
85 | ],
86 | "packageManager": "yarn@3.6.1",
87 | "jest": {
88 | "preset": "react-native",
89 | "modulePathIgnorePatterns": [
90 | "/example/node_modules",
91 | "/lib/"
92 | ]
93 | },
94 | "commitlint": {
95 | "extends": [
96 | "@commitlint/config-conventional"
97 | ]
98 | },
99 | "release-it": {
100 | "git": {
101 | "commitMessage": "chore: release ${version}",
102 | "tagName": "v${version}"
103 | },
104 | "npm": {
105 | "publish": true
106 | },
107 | "github": {
108 | "release": true
109 | },
110 | "plugins": {
111 | "@release-it/conventional-changelog": {
112 | "preset": "angular"
113 | }
114 | }
115 | },
116 | "eslintConfig": {
117 | "root": true,
118 | "extends": [
119 | "@react-native",
120 | "prettier"
121 | ],
122 | "rules": {
123 | "prettier/prettier": [
124 | "error",
125 | {
126 | "quoteProps": "consistent",
127 | "singleQuote": true,
128 | "tabWidth": 2,
129 | "trailingComma": "es5",
130 | "useTabs": false,
131 | "printWidth": 120
132 | }
133 | ]
134 | }
135 | },
136 | "eslintIgnore": [
137 | "node_modules/",
138 | "lib/"
139 | ],
140 | "prettier": {
141 | "quoteProps": "consistent",
142 | "singleQuote": true,
143 | "tabWidth": 2,
144 | "trailingComma": "es5",
145 | "useTabs": false,
146 | "printWidth": 120
147 | },
148 | "react-native-builder-bob": {
149 | "source": "src",
150 | "output": "lib",
151 | "targets": [
152 | "commonjs",
153 | "module",
154 | [
155 | "typescript",
156 | {
157 | "project": "tsconfig.build.json"
158 | }
159 | ]
160 | ]
161 | }
162 | }
163 |
--------------------------------------------------------------------------------
/react-native-threaded-downloader.podspec:
--------------------------------------------------------------------------------
1 | require "json"
2 |
3 | package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4 | folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
5 |
6 | Pod::Spec.new do |s|
7 | s.name = "react-native-threaded-downloader"
8 | s.version = package["version"]
9 | s.summary = package["description"]
10 | s.homepage = package["homepage"]
11 | s.license = package["license"]
12 | s.authors = package["author"]
13 |
14 | s.platforms = { :ios => min_ios_version_supported }
15 | s.source = { :git => "https://github.com/findhumane/react-native-threaded-downloader.git", :tag => "#{s.version}" }
16 |
17 | s.source_files = "ios/**/*.{h,m,mm}"
18 |
19 | # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
20 | # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
21 | if respond_to?(:install_modules_dependencies, true)
22 | install_modules_dependencies(s)
23 | else
24 | s.dependency "React-Core"
25 |
26 | # Don't install the dependencies when we run `pod install` in the old architecture.
27 | if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
28 | s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
29 | s.pod_target_xcconfig = {
30 | "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
31 | "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
32 | "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
33 | }
34 | s.dependency "React-Codegen"
35 | s.dependency "RCT-Folly"
36 | s.dependency "RCTRequired"
37 | s.dependency "RCTTypeSafety"
38 | s.dependency "ReactCommon/turbomodule/core"
39 | end
40 | end
41 | end
42 |
--------------------------------------------------------------------------------
/src/__tests__/index.test.tsx:
--------------------------------------------------------------------------------
1 | it.todo('write a test');
2 |
--------------------------------------------------------------------------------
/src/index.tsx:
--------------------------------------------------------------------------------
1 | import { NativeModules, Platform } from 'react-native';
2 |
3 | const LINKING_ERROR =
4 | `The package 'react-native-threaded-downloader' doesn't seem to be linked. Make sure: \n\n` +
5 | Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
6 | '- You rebuilt the app after installing the package\n' +
7 | '- You are not using Expo Go\n';
8 |
9 | const ThreadedDownloader = NativeModules.ThreadedDownloader
10 | ? NativeModules.ThreadedDownloader
11 | : new Proxy(
12 | {},
13 | {
14 | get() {
15 | throw new Error(LINKING_ERROR);
16 | },
17 | }
18 | );
19 |
20 | export function performThreadedDownload(url: string, timeoutSeconds: Number): Promise {
21 | return ThreadedDownloader.performThreadedDownload(url, timeoutSeconds);
22 | }
23 |
--------------------------------------------------------------------------------
/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig",
3 | "exclude": ["example"]
4 | }
5 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "rootDir": ".",
4 | "paths": {
5 | "react-native-threaded-downloader": ["./src/index"]
6 | },
7 | "allowUnreachableCode": false,
8 | "allowUnusedLabels": false,
9 | "esModuleInterop": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "jsx": "react",
12 | "lib": ["esnext"],
13 | "module": "esnext",
14 | "moduleResolution": "node",
15 | "noFallthroughCasesInSwitch": true,
16 | "noImplicitReturns": true,
17 | "noImplicitUseStrict": false,
18 | "noStrictGenericChecks": false,
19 | "noUncheckedIndexedAccess": true,
20 | "noUnusedLocals": true,
21 | "noUnusedParameters": true,
22 | "resolveJsonModule": true,
23 | "skipLibCheck": true,
24 | "strict": true,
25 | "target": "esnext",
26 | "verbatimModuleSyntax": true
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://turbo.build/schema.json",
3 | "pipeline": {
4 | "build:android": {
5 | "inputs": [
6 | "package.json",
7 | "android",
8 | "!android/build",
9 | "src/*.ts",
10 | "src/*.tsx",
11 | "example/package.json",
12 | "example/android",
13 | "!example/android/.gradle",
14 | "!example/android/build",
15 | "!example/android/app/build"
16 | ],
17 | "outputs": []
18 | },
19 | "build:ios": {
20 | "inputs": [
21 | "package.json",
22 | "*.podspec",
23 | "ios",
24 | "src/*.ts",
25 | "src/*.tsx",
26 | "example/package.json",
27 | "example/ios",
28 | "!example/ios/build",
29 | "!example/ios/Pods"
30 | ],
31 | "outputs": []
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------