diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0c96cc6..01b9b300 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Build and Test +name: CI on: pull_request: types: [opened, synchronize, reopened] @@ -43,7 +43,7 @@ jobs: if: steps.verify-dev-changed-files.outputs.any_changed == 'true' uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '18' - name: Install npm dependencies if: steps.cache-node-modules.outputs.cache-hit != 'true' && steps.verify-dev-changed-files.outputs.any_changed == 'true' @@ -74,7 +74,8 @@ jobs: assets/** package.json !example/ios/** - + example/e2e/** + - uses: actions/cache@v3 name: Cache node_modules if: steps.verify-android-changed-files.outputs.any_changed == 'true' @@ -107,14 +108,14 @@ jobs: uses: actions/setup-node@v3 if: steps.verify-android-changed-files.outputs.any_changed == 'true' with: - node-version: '16' + node-version: '18' - name: Set up JDK uses: actions/setup-java@v3 if: steps.verify-android-changed-files.outputs.any_changed == 'true' with: distribution: 'zulu' - java-version: 11 + java-version: 17 - name: Install Gradle dependencies if: steps.cache-gradle.outputs.cache-hit != 'true' && steps.verify-android-changed-files.outputs.any_changed == 'true' @@ -143,7 +144,7 @@ jobs: name: app-release-${{ github.sha }}.apk path: ${{ github.workspace }}/example/android/app-release-${{ github.sha }}.apk - android-test: + android-api-level-test: runs-on: macos-latest needs: android-build name: Android Test @@ -165,6 +166,7 @@ jobs: assets/** package.json !example/ios/** + example/e2e/** - uses: actions/cache@v3 name: Cache node_modules @@ -199,14 +201,14 @@ jobs: uses: actions/setup-node@v3 if: steps.verify-android-changed-files.outputs.any_changed == 'true' with: - node-version: '16' + node-version: '18' - name: Set up JDK uses: actions/setup-java@v3 if: steps.verify-android-changed-files.outputs.any_changed == 'true' with: distribution: 'zulu' - java-version: 11 + java-version: 17 - name: Instrumentation Tests uses: reactivecircus/android-emulator-runner@v2 @@ -247,6 +249,7 @@ jobs: assets/** package.json !example/android/** + example/e2e/** - uses: actions/cache@v3 name: Cache node_modules @@ -282,7 +285,7 @@ jobs: if: steps.verify-iOS-changed-files.outputs.any_changed == 'true' uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '18' - name: Install Pods if: steps.cache-pods.outputs.cache-hit != 'true' && steps.verify-iOS-changed-files.outputs.any_changed == 'true' @@ -309,7 +312,7 @@ jobs: ci-complete: name: Complete CI - needs: [android-build, android-test, ios-build-test] + needs: [android-build, android-api-level-test, ios-build-test] if: ${{ always() }} runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index b4f56392..420a301a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ DerivedData *.ipa *.xcuserstate project.xcworkspace +.xcode.env.local # Android/IJ # @@ -72,3 +73,6 @@ android/keystores/debug.keystore lib/ docs/**/*.html + +# testing +/coverage diff --git a/CHANGELOG.md b/CHANGELOG.md index a93dd26a..9eb92b96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ +# [1.2.0](https://github.com/JimmyDaddy/react-native-image-marker/compare/v1.1.8...v1.2.0) (2023-12-21) + + +### Bug Fixes + +* fix [#164](https://github.com/JimmyDaddy/react-native-image-marker/issues/164) Build Failure on CI Due to CocoaPods 1.1.9 in iOS Project ([#165](https://github.com/JimmyDaddy/react-native-image-marker/issues/165)) ([532e8a4](https://github.com/JimmyDaddy/react-native-image-marker/commit/532e8a4d325fd1c30315eac0f1ab81fbf81c144f)) +* fix[#176](https://github.com/JimmyDaddy/react-native-image-marker/issues/176) Fresco 3.1.3 compatibility issues with RN 0.73.0, compileDebugKotlin FAILED ([2fd4fef](https://github.com/JimmyDaddy/react-native-image-marker/commit/2fd4feff34e3bf9ada3de0dbb6f9789facbd0500)) + + +### Features + +* use Coil instead of Fresco to load images on the Android platform ([4438127](https://github.com/JimmyDaddy/react-native-image-marker/commit/44381276fa2973782f839415f2b3e735d63f93fa)) + ## [1.1.11](https://github.com/JimmyDaddy/react-native-image-marker/compare/v1.1.8...v1.1.11) (2023-12-21) diff --git a/README.1.1.x.MD b/README.1.1.x.MD new file mode 100644 index 00000000..a6c8f471 --- /dev/null +++ b/README.1.1.x.MD @@ -0,0 +1,746 @@ +
+ + react native image marker Logo + +

react native image marker

+
Add text or icon watermarks to images
+
+
+ + [![npm version](https://img.shields.io/npm/v/react-native-image-marker.svg?logo=npm&style=for-the-badge&label=latest)](https://www.npmjs.com/package/react-native-image-marker) + [![npm](https://img.shields.io/npm/dm/react-native-image-marker?logo=npm&style=for-the-badge)](https://www.npmjs.com/package/react-native-image-marker) [![npm](https://img.shields.io/npm/dt/react-native-image-marker.svg?cacheSeconds=88660&logo=npm&label=total%20downloads&style=for-the-badge)](https://www.npmjs.com/package/react-native-image-marker) + [![stars](https://img.shields.io/github/stars/jimmydaddy/react-native-image-marker?logo=github&style=for-the-badge)](https://github.com/JimmyDaddy/react-native-image-marker) [![forks](https://img.shields.io/github/forks/jimmydaddy/react-native-image-marker?logo=github&style=for-the-badge)](https://github.com/JimmyDaddy/react-native-image-marker/fork) + [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?logo=github&style=for-the-badge)](https://github.com/JimmyDaddy/react-native-image-marker/pulls) ![license](https://img.shields.io/npm/l/react-native-image-marker?style=for-the-badge) + [![github](https://img.shields.io/badge/github-repo-blue?logo=github&style=for-the-badge)](https://github.com/JimmyDaddy/react-native-image-marker) + [![CI](https://github.com/JimmyDaddy/react-native-image-marker/actions/workflows/ci.yml/badge.svg)](https://github.com/JimmyDaddy/react-native-image-marker/actions/workflows/ci.yml) + ![platform-iOS](https://img.shields.io/badge/iOS-black?logo=Apple&style=for-the-badge) ![platform-Android](https://img.shields.io/badge/Android-black?logo=Android&style=for-the-badge) +
+ +
+ +--- +> * If this library is useful to you, please give me a 猸愶笍. 馃ぉ +> * If there is any bug, please submit an issue 馃悰, or create a pull request 馃. +> * If there is any problem about using this library, please contact me, or [open a QA discussion](https://github.com/JimmyDaddy/react-native-image-marker/discussions/categories/q-a). 馃 +--- + +## Features + +* [Add **multiple text** watermarks to images](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextMarkOptions.html#watermarkTexts) +* [Add **multiple icon** watermarks to images *(Android >= N, iOS >= iOS 13)*](https://jimmydaddy.github.io/react-native-image-marker/classes/Marker.html#markImage) +* [Support **rotating** background image and icon watermarks.](https://jimmydaddy.github.io/react-native-image-marker/interfaces/ImageOptions.html#rotate) +* [Support setting opacity for background image and icon watermarks.](https://jimmydaddy.github.io/react-native-image-marker/interfaces/ImageOptions.html#rotate) +* Support base64 format +* Flexible text style settings, including: + * [Rotating](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextStyle.html#rotate) + * [Text shadow](https://jimmydaddy.github.io/react-native-image-marker/interfaces/ShadowLayerStyle.html) + * Background color + * [Italic](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextStyle.html#italic) + * [Bold](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextStyle.html#bold) + * [Stroke](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextStyle.html#strikeThrough) + * [Text align](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextStyle.html#textAlign) + * [Padding](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextBackgroundStyle.html#padding) + * Relative position + * [Background border radius](https://jimmydaddy.github.io/react-native-image-marker/interfaces/TextBackgroundStyle.html#cornerRadius) +* Compatible with both Android and iOS + +## Sample + +

+ + +

+ +## Usage + +### Text background fit + +#### API + +[TextBackgroundType.none](https://jimmydaddy.github.io/react-native-image-marker/enums/TextBackgroundType.html#none) + +#### Sample + + + +#### Example + + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +const options = { + // background image + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkTexts: [{ + text: 'text marker \n multline text', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#ff00ff', + fontSize: 30, + fontName: 'Arial', + shadowStyle: { + dx: 10, + dy: 10, + radius: 10, + color: '#008F6D', + }, + textBackgroundStyle: { + padding: '10% 10%', + type: TextBackgroundType.none, + color: '#0FFF00', + }, + }, + }], + scale: 1, + quality: 100, + filename: 'test', + saveFormat: ImageFormat.png, +}; +Marker.markText(options); + +``` + +### Text background stretchX + +#### API + +[TextBackgroundType.stretchX](https://jimmydaddy.github.io/react-native-image-marker/enums/TextBackgroundType.html#stretchX) + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +const options = { + // background image + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkTexts: [{ + text: 'text marker \n multline text', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#FC0700', + fontSize: 30, + fontName: 'Arial', + shadowStyle: { + dx: 10, + dy: 10, + radius: 10, + color: '#008F6D', + }, + textBackgroundStyle: { + padding: '10% 10%', + type: TextBackgroundType.stretchX, + color: '#0FFF00', + }, + }, + }], + scale: 1, + quality: 100, + filename: 'test', + saveFormat: ImageFormat.png, +}; +Marker.markText(options); +``` + +### Text background stretchY + +#### API + +[TextBackgroundType.stretchY](https://jimmydaddy.github.io/react-native-image-marker/enums/TextBackgroundType.html#stretchY) + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +const options = { + // background image + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkTexts: [{ + text: 'text marker \n multline text', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#FC0700', + fontSize: 30, + fontName: 'Arial', + shadowStyle: { + dx: 10, + dy: 10, + radius: 10, + color: '#008F6D', + }, + textBackgroundStyle: { + padding: '10% 10%', + type: TextBackgroundType.stretchY, + color: '#0FFF00', + }, + }, + }], + scale: 1, + quality: 100, + filename: 'test', + saveFormat: ImageFormat.png, +}; +ImageMarker.markText(options); + +``` + +### Text background border radius + +#### API + +[TextBackgroundType.cornerRadius](https://jimmydaddy.github.io/react-native-image-marker/enums/TextBackgroundType.html#cornerRadius) + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position } from "react-native-image-marker" +路路路 +const options = { + // background image + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkTexts: [{ + text: 'text marker normal', + positionOptions: { + position: Position.center, + }, + style: { + color: '#FC0700', + fontSize: 30, + fontName: 'Arial', + shadowStyle: { + dx: 10, + dy: 10, + radius: 10, + color: '#008F6D', + }, + textBackgroundStyle: { + padding: '10%', + color: '#0fA', + cornerRadius: { + topLeft: { + x: '20%', + y: '50%', + }, + topRight: { + x: '20%', + y: '50%', + }, + }, + }, + }, + }], + scale: 1, + quality: 100, + filename: 'test', + saveFormat: ImageFormat.png, +}; +ImageMarker.markText(options); + +``` + +### Text with shadow + +#### API + +[ShadowLayerStyle](https://jimmydaddy.github.io/react-native-image-marker/interfaces/ShadowLayerStyle.html) + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +const options = { + // background image + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkTexts: [{ + text: 'text marker \n multline text', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#F4F50A', + fontSize: 30, + fontName: 'Arial', + shadowStyle: { + dx: 10, + dy: 10, + radius: 10, + color: '#6450B0', + }, + }, + }], + scale: 1, + quality: 100, + filename: 'test', + saveFormat: ImageFormat.png, +}; +Marker.markText(options); + +``` + +### Multiple text watermarks + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markText({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + waterMarkTexts: [{ + text: 'hello world \n 浣犲ソ', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#BB3B20', + fontSize: 30, + fontName: 'Arial', + textBackgroundStyle: { + padding: '10% 10%', + color: '#0FFF00', + }, + }, + }, { + text: 'text marker normal', + positionOptions: { + position: Position.topRight, + }, + style: { + color: '#6450B0', + fontSize: 30, + fontName: 'Arial', + textBackgroundStyle: { + padding: '10% 10%', + color: '#02FBBE', + }, + }, + }], +}) + +``` + +### Text rotation + +#### Sample + +

+ + + +

+ +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markText({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + rotate: 30, + }, + waterMarkTexts: [{ + text: 'hello world \n 浣犲ソ', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#FFFF00', + fontSize: 30, + fontName: 'Arial', + rotate: 30, + textBackgroundStyle: { + padding: '10% 10%', + color: '#02B96B', + }, + strikeThrough: true, + underline: true, + }, + }, { + text: 'text marker normal', + positionOptions: { + position: Position.center, + }, + style: { + color: '#FFFF00', + fontSize: 30, + fontName: 'Arial', + rotate: 30, + textBackgroundStyle: { + padding: '10% 10%', + color: '#0FFF00', + }, + strikeThrough: true, + underline: true, + }, + }], +}) + +``` + +### Icon watermarks + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markImage({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkImages: [{ + src: require('./images/watermark.png'), + position: { + position: Position.topLeft, + }, + }], +}) + +``` + +### Multiple icon watermarks + +> Note: ***require Android >= N, iOS >= iOS 13*** + +#### API + +[markImage](https://jimmydaddy.github.io/react-native-image-marker/classes/Marker.html#markImage) + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markImage({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkImages: [{ + src: require('./images/watermark.png'), + position: { + position: Position.topLeft, + }, + }, { + src: require('./images/watermark1.png'), + position: { + position: Position.topRight, + }, + }, { + src: require('./images/watermark2.png'), + position: { + position: Position.bottomCenter, + }, + }], +}) + +``` + +### Background rotation + +#### Sample + +

+ + +

+ +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markImage({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + rotate: 30, + }, + watermarkImages: [{ + src: require('./images/watermark.png'), + position: { + position: Position.topLeft, + }, + }], +}); + +Marker.markText({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + rotate: 30, + }, + watermarkTexts: [{ + text: 'hello world \n 浣犲ソ', + positionOptions: { + position: Position.topLeft, + }, + style: { + color: '#FFFF00', + fontSize: 30, + fontName: 'Arial', + rotate: 30, + textBackgroundStyle: { + padding: '10% 10%', + color: '#02B96B', + }, + shadowStyle: { + dx: 10, + dy: 10, + radius: 10, + color: '#008F6D', + }, + strikeThrough: true, + underline: true, + }, + }, { + text: 'hello world \n 浣犲ソ', + positionOptions: { + position: Position.center, + }, + style: { + color: '#FFFF00', + fontSize: 30, + fontName: 'Arial', + textBackgroundStyle: { + padding: '10% 10%', + color: '#0FFF00', + }, + strikeThrough: true, + underline: true, + }, + }], +}) + +``` + +### Icon rotation + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markImage({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkImages: [{ + src: require('./images/watermark.png'), + position: { + position: Position.topLeft, + }, + rotate: 30, + }], +}); +``` + +### Transparent background + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markImage({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + alpha: 0.5, + }, + watermarkImages: [{ + src: require('./images/watermark.png'), + position: { + position: Position.topLeft, + }, + }], +}); +``` + +### Transparent icon + +#### Sample + + + +#### Example + +```typescript +import Marker, { Position, TextBackgroundType } from "react-native-image-marker" +路路路 +Marker.markImage({ + backgroundImage: { + src: require('./images/test.jpg'), + scale: 1, + }, + watermarkImages: [{ + src: require('./images/watermark.png'), + position: { + position: Position.topLeft, + }, + alpha: 0.5, + }], +}); +``` + +## Compatibility + +| React Native Version | react-native-image-marker Version | +| ---------------------| --------------------------------- | +| < 0.60.0 | v0.5.2 or earlier | +| >= 0.60.0, ***iOS < 13, Android < N(API Level 24)*** | v1.0.x | +| 0.60.0 <= rn version < 0.73.0 | v1.1.x | +| >= 0.73.0, other cases | v1.2.0 or later | + +> ***Note: This table is only applicable to major versions of react-native-image-marker. Patch versions should be backwards compatible.*** + +## Installation + +* npm install react-native-image-marker --save +* link + * react-native link (RN version < 0.60.0) + * [auto link](https://github.com/react-native-community/cli/blob/main/docs/autolinking.md)(RN version > 0.60.0) + +> **RN version < 0.60.0 please use v0.5.2 or older** + +#### iOS Pod Install (RN version < 0.60.0) + +You can use `pod` instead of `link`. Add following lines in your `Podfile`: + +```ruby +pod 'RNImageMarker', :path => '../node_modules/react-native-image-marker' +``` + +## API + +* [the latest version](https://jimmydaddy.github.io/react-native-image-marker/classes/Marker.html) +* [v1.0.x](https://github.com/JimmyDaddy/react-native-image-marker/wiki/v1.0.x) +* If you are using a version lower than 1.0.0, please go to [v0.9.2](https://github.com/JimmyDaddy/react-native-image-marker/wiki/0.9.2) + +## Extra about Android decoding image + +This library use [Fresco](https://github.com/facebook/fresco) to decode image on Android. You can set your configuration through [Configure Fresco in React Native](https://medium.com/in-the-hudl/configure-fresco-in-react-native-28c2bc7dcc4d) + +* RN version < 0.60.0 use fresco v1.10.0 +* RN version >= 0.60.0 use fresco v2.0.0 + + +> [ref](https://github.com/facebook/react-native/blob/8cf9505bd27c5dade33b17cc177fa5ef1613dbcd/ReactAndroid/gradle.properties#L15) + +## Save image to file + +* If you want to save the new image result to the phone camera roll, just use the [CameraRoll-module from react-native](https://facebook.github.io/react-native/docs/cameraroll.html#savetocameraroll). +* If you want to save it to an arbitrary file path, use something like [react-native-fs](https://github.com/itinance/react-native-fs). +* For any more advanced needs, you can write your own (or find another) native module that would solve your use-case. + +## Contributors + +[@filipef101](https://github.com/filipef101) +[@mikaello](https://github.com/mikaello) +[@Peretz30](https://github.com/Peretz30) +[@gaoxiaosong](https://github.com/gaoxiaosong) +[@onka13](https://github.com/onka13) +[@OrangeFlavoredColdCoffee](https://github.com/OrangeFlavoredColdCoffee) + +## Examples + +[examples](https://github.com/JimmyDaddy/react-native-image-marker/tree/master/example) + +If you want to run the example locally, you can do the following: + +```bash + +git clone git@github.com:JimmyDaddy/react-native-image-marker.git + +cd ./react-native-image-marker + +# Android +# Open an android emulator or connect a real device at first +yarn example android + +# iOS +yarn example ios + +``` + +## Contributing + +See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow. + +## License + +[MIT](LICENSE) + +--- + +* If this library is useful to you, please give me a 猸愶笍. 馃ぉ +* If there is any bug, please submit an issue 馃悰, or create a pull request 馃. +* If there is any problem about using this library, please contact me, or [open a QA discussion](https://github.com/JimmyDaddy/react-native-image-marker/discussions/categories/q-a). 馃 + +Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob) diff --git a/README.MD b/README.MD index 0339623d..e8ed8867 100644 --- a/README.MD +++ b/README.MD @@ -101,7 +101,6 @@ const options = { quality: 100, filename: 'test', saveFormat: ImageFormat.png, - maxSize: 1000, }; Marker.markText(options); @@ -154,7 +153,6 @@ const options = { quality: 100, filename: 'test', saveFormat: ImageFormat.png, - maxSize: 1000, }; Marker.markText(options); ``` @@ -206,7 +204,6 @@ const options = { quality: 100, filename: 'test', saveFormat: ImageFormat.png, - maxSize: 1000, }; ImageMarker.markText(options); @@ -268,7 +265,6 @@ const options = { quality: 100, filename: 'test', saveFormat: ImageFormat.png, - maxSize: 1000, }; ImageMarker.markText(options); @@ -316,7 +312,6 @@ const options = { quality: 100, filename: 'test', saveFormat: ImageFormat.png, - maxSize: 1000, }; Marker.markText(options); @@ -661,7 +656,8 @@ Marker.markImage({ | ---------------------| --------------------------------- | | < 0.60.0 | v0.5.2 or earlier | | >= 0.60.0, ***iOS < 13, Android < N(API Level 24)*** | v1.0.x | -| >= 0.60.0, other cases | v1.1.0 or later | +| 0.60.0 <= rn version < 0.73.0 | v1.1.x | +| >= 0.73.0, other cases | v1.2.0 or later | > ***Note: This table is only applicable to major versions of react-native-image-marker. Patch versions should be backwards compatible.*** @@ -672,9 +668,7 @@ Marker.markImage({ * react-native link (RN version < 0.60.0) * [auto link](https://github.com/react-native-community/cli/blob/main/docs/autolinking.md)(RN version > 0.60.0) -> **RN version < 0.60.0 please use v0.5.2 or older** - -#### iOS Pod Install (RN version < 0.60.0) +### iOS Pod Install (RN version < 0.60.0) You can use `pod` instead of `link`. Add following lines in your `Podfile`: @@ -685,18 +679,10 @@ pod 'RNImageMarker', :path => '../node_modules/react-native-image-marker' ## API * [the latest version](https://jimmydaddy.github.io/react-native-image-marker/classes/Marker.html) -* [v1.0.x](https://jimmydaddy.github.io/react-native-image-marker/v1.0.x/classes/Marker.html) +* [v1.1.x](https://github.com/JimmyDaddy/react-native-image-marker/wiki/v1.1.x) +* [v1.0.x](https://github.com/JimmyDaddy/react-native-image-marker/wiki/v1.0.x) * If you are using a version lower than 1.0.0, please go to [v0.9.2](https://github.com/JimmyDaddy/react-native-image-marker/wiki/0.9.2) -## Extra about Android decoding image - -This library use [Fresco](https://github.com/facebook/fresco) to decode image on Android. You can set your configuration through [Configure Fresco in React Native](https://medium.com/in-the-hudl/configure-fresco-in-react-native-28c2bc7dcc4d) - -* RN version < 0.60.0 use fresco v1.10.0 -* RN version >= 0.60.0 use fresco v2.0.0 + - -> [ref](https://github.com/facebook/react-native/blob/8cf9505bd27c5dade33b17cc177fa5ef1613dbcd/ReactAndroid/gradle.properties#L15) - ## Save image to file * If you want to save the new image result to the phone camera roll, just use the [CameraRoll-module from react-native](https://facebook.github.io/react-native/docs/cameraroll.html#savetocameraroll). @@ -724,6 +710,9 @@ git clone git@github.com:JimmyDaddy/react-native-image-marker.git cd ./react-native-image-marker +# install dependencies +yarn + # Android # Open an android emulator or connect a real device at first yarn example android diff --git a/android/build.gradle b/android/build.gradle index 33460f17..2cc828f3 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,10 +5,16 @@ buildscript { mavenCentral() } - dependencies { - classpath "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.0" - classpath "com.android.tools.build:gradle:7.2.1" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + if (project == rootProject) { + repositories { + google() + mavenCentral() + } + } else { + dependencies { + classpath 'com.android.tools.build:gradle:7.2.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } } } @@ -76,6 +82,9 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' testImplementation "org.mockito:mockito-core:3.+" + implementation "io.coil-kt:coil:2.5.0" + implementation "io.coil-kt:coil-svg:2.5.0" + implementation "io.coil-kt:coil-gif:2.5.0" } if (isNewArchitectureEnabled()) { diff --git a/android/gradle.properties b/android/gradle.properties index e618a704..71bb918c 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,4 +1,4 @@ -ImageMarker_kotlinVersion=1.7.0 +ImageMarker_kotlinVersion=1.8.0 ImageMarker_minSdkVersion=24 ImageMarker_targetSdkVersion=31 ImageMarker_compileSdkVersion=31 diff --git a/android/src/main/java/com/jimmydaddy/imagemarker/ImageMarkerManager.kt b/android/src/main/java/com/jimmydaddy/imagemarker/ImageMarkerManager.kt index 22c13797..60295fe4 100644 --- a/android/src/main/java/com/jimmydaddy/imagemarker/ImageMarkerManager.kt +++ b/android/src/main/java/com/jimmydaddy/imagemarker/ImageMarkerManager.kt @@ -226,7 +226,7 @@ class ImageMarkerManager(private val context: ReactApplicationContext) : ReactCo Log.d(IMAGE_MARKER_TAG, "src: " + markOpts.backgroundImage.src.toString()) GlobalScope.launch(Dispatchers.Main) { try { - val bitmaps = ImageLoader(context, markOpts.maxSize).loadImages( + val bitmaps = MarkerImageLoader(context, markOpts.maxSize).loadImages( listOf( markOpts.backgroundImage, ) @@ -256,7 +256,7 @@ class ImageMarkerManager(private val context: ReactApplicationContext) : ReactCo val concatenatedArray = listOf( markOpts.backgroundImage, ).plus(markers) - val bitmaps = ImageLoader(context, markOpts.maxSize).loadImages( + val bitmaps = MarkerImageLoader(context, markOpts.maxSize).loadImages( concatenatedArray ) val bg = bitmaps[0] diff --git a/android/src/main/java/com/jimmydaddy/imagemarker/ImageLoader.kt b/android/src/main/java/com/jimmydaddy/imagemarker/MarkerImageLoader.kt similarity index 57% rename from android/src/main/java/com/jimmydaddy/imagemarker/ImageLoader.kt rename to android/src/main/java/com/jimmydaddy/imagemarker/MarkerImageLoader.kt index ec3747cb..372ea565 100644 --- a/android/src/main/java/com/jimmydaddy/imagemarker/ImageLoader.kt +++ b/android/src/main/java/com/jimmydaddy/imagemarker/MarkerImageLoader.kt @@ -5,77 +5,78 @@ import android.content.res.Resources import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Build +import android.os.Build.VERSION.SDK_INT import android.util.Log import androidx.annotation.RequiresApi -import com.facebook.common.references.CloseableReference -import com.facebook.datasource.DataSource -import com.facebook.drawee.backends.pipeline.Fresco -import com.facebook.imagepipeline.common.ResizeOptions -import com.facebook.imagepipeline.core.ImagePipelineConfig -import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber -import com.facebook.imagepipeline.image.CloseableImage -import com.facebook.imagepipeline.request.ImageRequest -import com.facebook.imagepipeline.request.ImageRequestBuilder +import androidx.core.graphics.drawable.toBitmap +import coil.ImageLoader +import coil.decode.GifDecoder +import coil.decode.ImageDecoderDecoder +import coil.decode.SvgDecoder +import coil.request.ImageRequest import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.modules.systeminfo.ReactNativeVersion import com.jimmydaddy.imagemarker.base.Constants.IMAGE_MARKER_TAG import com.jimmydaddy.imagemarker.base.ErrorCode import com.jimmydaddy.imagemarker.base.ImageOptions import com.jimmydaddy.imagemarker.base.MarkerError -import com.jimmydaddy.imagemarker.base.Utils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.withContext import java.util.concurrent.CompletableFuture -import java.util.concurrent.Executor -import java.util.concurrent.Executors -class ImageLoader(private val context: ReactApplicationContext, private val maxSize: Int) { +class MarkerImageLoader(private val context: ReactApplicationContext, private val maxSize: Int) { - init { - if (maxSize > 0) { - setMaxBitmapSize(maxSize) + private var imageLoader: ImageLoader = ImageLoader.Builder(context) + .components { + if (SDK_INT >= 28) { + add(ImageDecoderDecoder.Factory()) + } else { + add(GifDecoder.Factory()) + } + add(SvgDecoder.Factory()) } - } + .allowHardware(false) + .build() private val resources: Resources get() = context.resources @RequiresApi(Build.VERSION_CODES.N) suspend fun loadImages(images: List): List = withContext(Dispatchers.IO) { + val deferredList = images.map { img -> async { try { - val isFrescoImg = isFrescoImg(img.uri) - Log.d(IMAGE_MARKER_TAG, "isFrescoImg: " + isFrescoImg(img.uri)) - if (isFrescoImg) { + val isCoilImg = isCoilImg(img.uri) + Log.d(IMAGE_MARKER_TAG, "isCoilImg: $isCoilImg") + if (isCoilImg) { val future = CompletableFuture() - var imageRequest = ImageRequest.fromUri(img.uri) + var request = ImageRequest.Builder(context) + .data(img.uri) if (img.src != null && img.src.width > 0 && img.src.height > 0) { - val options: ResizeOptions? = ResizeOptions(img.src.width, img.src.height) - imageRequest = ImageRequestBuilder.fromRequest(imageRequest).setResizeOptions(options).build() + request = request.size(img.src.width, img.src.height) Log.d(IMAGE_MARKER_TAG, "src.width: " + img.src.width + " src.height: " + img.src.height) } - val dataSource = Fresco.getImagePipeline().fetchDecodedImage(imageRequest, null) - val executor: Executor = Executors.newSingleThreadExecutor() - dataSource.subscribe(object : BaseBitmapDataSubscriber() { - public override fun onNewResultImpl(bitmap: Bitmap?) { - if (bitmap != null) { - val bg = ImageProcess.scaleBitmap(bitmap, img.scale) - future.complete(bg) - } else { + imageLoader.enqueue(request.target ( + onStart = { _ -> + // Handle the placeholder drawable. + Log.d(IMAGE_MARKER_TAG, "start to load image: " + img.uri) + }, + onSuccess = { result -> + val bitmap = result.toBitmap() + val bg = ImageProcess.scaleBitmap(bitmap, img.scale) + if (bg == null) { future.completeExceptionally(MarkerError(ErrorCode.LOAD_IMAGE_FAILED, - "Can't retrieve the file from the src: " + img.uri)) + "Can't retrieve the file from the src: " + img.uri)) } - } - - override fun onFailureImpl(dataSource: DataSource>) { + future.complete(bg) + }, + onError = { _ -> future.completeExceptionally(MarkerError(ErrorCode.LOAD_IMAGE_FAILED, "Can't retrieve the file from the src: " + img.uri)) } - }, executor) + ).build()) return@async future.get() - } else { val resId = getDrawableResourceByName(img.uri) Log.d(IMAGE_MARKER_TAG, "resId: $resId") @@ -109,7 +110,7 @@ class ImageLoader(private val context: ReactApplicationContext, private val maxS deferredList.awaitAll() } - private fun isFrescoImg(uri: String?): Boolean { + private fun isCoilImg(uri: String?): Boolean { // val base64Pattern = // "^data:(image|img)/(bmp|jpg|png|tif|gif|pcx|tga|exif|fpx|svg|psd|cdr|pcd|dxf|ufo|eps|ai|raw|WMF|webp);base64,(([[A-Za-z0-9+/])*\\s\\S*)*" return uri!!.startsWith("http://") || uri.startsWith("https://") || uri.startsWith("file://") || uri.startsWith( @@ -126,19 +127,4 @@ class ImageLoader(private val context: ReactApplicationContext, private val maxS ) } - private fun setMaxBitmapSize(maxSize: Int) { - val major = Utils.getStringSafe("major", ReactNativeVersion.VERSION) - val minor = Utils.getStringSafe("minor", ReactNativeVersion.VERSION) - val patch = Utils.getStringSafe("patch", ReactNativeVersion.VERSION) - if (Integer.valueOf(major.toString()) >= 0 && Integer.valueOf(minor.toString()) >= 60 && Integer.valueOf( - patch.toString() - ) >= 0 - ) { - val config = - ImagePipelineConfig.newBuilder(context).experiment().setMaxBitmapSize(maxSize) - .build() - Fresco.initialize(context, config) - } - } - } diff --git a/android/src/main/java/com/jimmydaddy/imagemarker/base/WatermarkImageOptions.kt b/android/src/main/java/com/jimmydaddy/imagemarker/base/WatermarkImageOptions.kt index 430c4697..e92be4dd 100644 --- a/android/src/main/java/com/jimmydaddy/imagemarker/base/WatermarkImageOptions.kt +++ b/android/src/main/java/com/jimmydaddy/imagemarker/base/WatermarkImageOptions.kt @@ -10,11 +10,13 @@ data class WatermarkImageOptions(val options: ReadableMap?) { init { if (options != null) { - imageOption = options?.let { ImageOptions(it) }!! + imageOption = ImageOptions(options) val positionOptions = if (null != options.getMap("position")) options.getMap("position") else null - x = if (positionOptions!!.hasKey("X")) Utils.handleDynamicToString(positionOptions.getDynamic("X")) else null - y = if (positionOptions.hasKey("Y")) Utils.handleDynamicToString(positionOptions.getDynamic("Y")) else null + x = + if (positionOptions!!.hasKey("X")) Utils.handleDynamicToString(positionOptions.getDynamic("X")) else null + y = + if (positionOptions.hasKey("Y")) Utils.handleDynamicToString(positionOptions.getDynamic("Y")) else null positionEnum = if (null != positionOptions.getString("position")) PositionEnum.getPosition( positionOptions.getString("position") diff --git a/example/.eslintrc.js b/example/.eslintrc.js new file mode 100644 index 00000000..187894b6 --- /dev/null +++ b/example/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/example/Gemfile b/example/Gemfile index 1142b1b2..508efca4 100644 --- a/example/Gemfile +++ b/example/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '>= 2.6.10' - -gem 'cocoapods', '>= 1.11.3' +ruby ">= 2.6.10" +gem 'cocoapods', '~> 1.13' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/example/Gemfile.lock b/example/Gemfile.lock new file mode 100644 index 00000000..2335afd1 --- /dev/null +++ b/example/Gemfile.lock @@ -0,0 +1,99 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.6) + rexml + activesupport (7.0.8) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + claide (1.1.0) + cocoapods (1.14.3) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.14.3) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.14.3) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.2.2) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + ffi (1.16.3) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.8.3) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + json (2.7.1) + minitest (5.20.0) + molinillo (0.8.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + public_suffix (4.0.7) + rexml (3.2.6) + ruby-macho (2.5.1) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.23.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + +PLATFORMS + ruby + +DEPENDENCIES + activesupport (>= 6.1.7.3, < 7.1.0) + cocoapods (~> 1.13) + +RUBY VERSION + ruby 3.0.0p0 + +BUNDLED WITH + 2.4.14 diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 570595be..f7000abf 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,5 +1,8 @@ apply plugin: "com.android.application" apply plugin: "com.facebook.react" +apply plugin: 'kotlin-android' + +def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["kotlin_version"] import com.android.build.OutputFile @@ -158,22 +161,16 @@ dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0") - - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") - debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.squareup.okhttp3', module:'okhttp' - } - - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") + implementation("com.facebook.react:flipper-integration") if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") + implementation("com.facebook.react:hermes-android") } else { - implementation jscFlavor + implementation jscFlavor } testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml index 4b185bc1..fa3e4f9a 100644 --- a/example/android/app/src/debug/AndroidManifest.xml +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -8,6 +8,5 @@ android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning"> - diff --git a/example/android/app/src/debug/java/com/imagemarkerexample/ReactNativeFlipper.java b/example/android/app/src/debug/java/com/imagemarkerexample/ReactNativeFlipper.java deleted file mode 100644 index 3637801d..00000000 --- a/example/android/app/src/debug/java/com/imagemarkerexample/ReactNativeFlipper.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package com.imagemarkerexample; - -import android.content.Context; -import com.facebook.flipper.android.AndroidFlipperClient; -import com.facebook.flipper.android.utils.FlipperUtils; -import com.facebook.flipper.core.FlipperClient; -import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; -import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; -import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; -import com.facebook.flipper.plugins.inspector.DescriptorMapping; -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; -import com.facebook.react.ReactInstanceEventListener; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.modules.network.NetworkingModule; -import okhttp3.OkHttpClient; - -/** - * Class responsible of loading Flipper inside your React Native application. This is the debug - * flavor of it. Here you can add your own plugins and customize the Flipper setup. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - if (FlipperUtils.shouldEnableFlipper(context)) { - final FlipperClient client = AndroidFlipperClient.getInstance(context); - - client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); - client.addPlugin(new DatabasesFlipperPlugin(context)); - client.addPlugin(new SharedPreferencesFlipperPlugin(context)); - client.addPlugin(CrashReporterPlugin.getInstance()); - - NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); - NetworkingModule.setCustomClientBuilder( - new NetworkingModule.CustomClientBuilder() { - @Override - public void apply(OkHttpClient.Builder builder) { - builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); - } - }); - client.addPlugin(networkFlipperPlugin); - client.start(); - - // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized - // Hence we run if after all native modules have been initialized - ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); - if (reactContext == null) { - reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceEventListener() { - @Override - public void onReactContextInitialized(ReactContext reactContext) { - reactInstanceManager.removeReactInstanceEventListener(this); - reactContext.runOnNativeModulesQueueThread( - new Runnable() { - @Override - public void run() { - client.addPlugin(new FrescoFlipperPlugin()); - } - }); - } - }); - } else { - client.addPlugin(new FrescoFlipperPlugin()); - } - } - } -} diff --git a/example/android/app/src/main/java/com/imagemarkerexample/MainActivity.java b/example/android/app/src/main/java/com/imagemarkerexample/MainActivity.java deleted file mode 100644 index 80dd5017..00000000 --- a/example/android/app/src/main/java/com/imagemarkerexample/MainActivity.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.imagemarkerexample; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactActivityDelegate; -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; -import com.facebook.react.defaults.DefaultReactActivityDelegate; - -public class MainActivity extends ReactActivity { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "ImageMarkerExample"; - } - - /** - * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link - * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React - * (aka React 18) with two boolean flags. - */ - @Override - protected ReactActivityDelegate createReactActivityDelegate() { - return new DefaultReactActivityDelegate( - this, - getMainComponentName(), - // If you opted-in for the New Architecture, we enable the Fabric Renderer. - DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled - // If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18). - DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled - ); - } -} diff --git a/example/android/app/src/main/java/com/imagemarkerexample/MainActivity.kt b/example/android/app/src/main/java/com/imagemarkerexample/MainActivity.kt new file mode 100644 index 00000000..9fb8c873 --- /dev/null +++ b/example/android/app/src/main/java/com/imagemarkerexample/MainActivity.kt @@ -0,0 +1,22 @@ +package com.imagemarkerexample + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +class MainActivity : ReactActivity() { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "ImageMarkerExample" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate = + DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) +} diff --git a/example/android/app/src/main/java/com/imagemarkerexample/MainApplication.java b/example/android/app/src/main/java/com/imagemarkerexample/MainApplication.java deleted file mode 100644 index fd2aca69..00000000 --- a/example/android/app/src/main/java/com/imagemarkerexample/MainApplication.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.imagemarkerexample; - -import android.app.Application; -import com.facebook.react.PackageList; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; -import com.facebook.react.defaults.DefaultReactNativeHost; -import com.facebook.soloader.SoLoader; -import java.util.List; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = - new DefaultReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - - @Override - protected boolean isNewArchEnabled() { - return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - } - - @Override - protected Boolean isHermesEnabled() { - return BuildConfig.IS_HERMES_ENABLED; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - DefaultNewArchitectureEntryPoint.load(); - } - ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - } -} diff --git a/example/android/app/src/main/java/com/imagemarkerexample/MainApplication.kt b/example/android/app/src/main/java/com/imagemarkerexample/MainApplication.kt new file mode 100644 index 00000000..f9da2650 --- /dev/null +++ b/example/android/app/src/main/java/com/imagemarkerexample/MainApplication.kt @@ -0,0 +1,45 @@ +package com.imagemarkerexample + +import android.app.Application +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.flipper.ReactNativeFlipper +import com.facebook.soloader.SoLoader + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = + object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return PackageList(this).packages + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + + override val reactHost: ReactHost + get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, false) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) + } +} diff --git a/example/android/app/src/release/java/com/imagemarkerexample/ReactNativeFlipper.java b/example/android/app/src/release/java/com/imagemarkerexample/ReactNativeFlipper.java deleted file mode 100644 index 91f8e9e7..00000000 --- a/example/android/app/src/release/java/com/imagemarkerexample/ReactNativeFlipper.java +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package com.imagemarkerexample; - -import android.content.Context; -import com.facebook.react.ReactInstanceManager; - -/** - * Class responsible of loading Flipper inside your React Native application. This is the release - * flavor of it so it's empty as we don't want to load Flipper. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - // Do nothing as we don't want to initialize Flipper on Release. - } -} diff --git a/example/android/build.gradle b/example/android/build.gradle index 957cf0f0..f7e02686 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,14 +1,17 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext { - buildToolsVersion = "33.0.0" - minSdkVersion = 24 - compileSdkVersion = 33 - targetSdkVersion = 33 + def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["kotlin_version"] + + ext { + buildToolsVersion = "34.0.0" + minSdkVersion = 21 + compileSdkVersion = 34 + targetSdkVersion = 34 // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. - ndkVersion = "23.1.7779620" + ndkVersion = "25.1.8937393" + kotlinVersion = kotlin_version } repositories { google() @@ -20,7 +23,10 @@ buildscript { maven { url 'https://maven.fabric.io/public' } } dependencies { - classpath('com.android.tools.build:gradle:7.4.2') + classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") } } + +apply plugin: "com.facebook.react.rootproject" diff --git a/example/android/gradle.properties b/example/android/gradle.properties index e4af465e..9194f2da 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -24,9 +24,6 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true -# Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.125.0 - # Use this property to specify which architecture you want to build. # You can also override it from the CLI using # ./gradlew -PreactNativeArchitectures=x86_64 @@ -42,3 +39,5 @@ newArchEnabled=false # Use this property to enable or disable the Hermes JS engine. # If set to false, you will be using JSC instead. hermesEnabled=true + +kotlin_version=1.8.0 diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 8fad3f5a..d11cdd90 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/example/android/gradlew b/example/android/gradlew index 1b6c7873..0adc8e1a 100755 --- a/example/android/gradlew +++ b/example/android/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/example/android/settings.gradle b/example/android/settings.gradle index f2f9d8c2..df5352ac 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,4 +1,4 @@ rootProject.name = 'ImageMarkerExample' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' -includeBuild('../node_modules/react-native-gradle-plugin') +includeBuild('../node_modules/@react-native/gradle-plugin') \ No newline at end of file diff --git a/example/app.json b/example/app.json index c9b90212..7c07f71f 100644 --- a/example/app.json +++ b/example/app.json @@ -1,4 +1,4 @@ { "name": "ImageMarkerExample", "displayName": "ImageMarkerExample" -} \ No newline at end of file +} diff --git a/example/babel.config.js b/example/babel.config.js index adea77bd..d9addbba 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -2,7 +2,7 @@ const path = require('path'); const pak = require('../package.json'); module.exports = { - presets: ['module:metro-react-native-babel-preset'], + presets: ['module:@react-native/babel-preset'], plugins: [ [ 'module-resolver', diff --git a/example/ios/ImageMarkerExample.xcodeproj/project.pbxproj b/example/ios/ImageMarkerExample.xcodeproj/project.pbxproj index f3f815b1..1836cfd1 100644 --- a/example/ios/ImageMarkerExample.xcodeproj/project.pbxproj +++ b/example/ios/ImageMarkerExample.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 04B9FA14906B4CD913E9D498 /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F2EF2314753552DE3ED8A96 /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a */; }; 0C80B921A6F3F58F76C31292 /* libPods-ImageMarkerExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-ImageMarkerExample.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; @@ -34,13 +35,14 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ImageMarkerExample/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ImageMarkerExample/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ImageMarkerExample/main.m; sourceTree = ""; }; - 26EC0163490429FD1EA48765 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig"; path = "Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig"; sourceTree = ""; }; + 15E0FEF5E88EB5BA856E015A /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig"; path = "Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig"; sourceTree = ""; }; 3B4392A12AC88292D35C810B /* Pods-ImageMarkerExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageMarkerExample.debug.xcconfig"; path = "Target Support Files/Pods-ImageMarkerExample/Pods-ImageMarkerExample.debug.xcconfig"; sourceTree = ""; }; 5709B34CF0A7D63546082F79 /* Pods-ImageMarkerExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageMarkerExample.release.xcconfig"; path = "Target Support Files/Pods-ImageMarkerExample/Pods-ImageMarkerExample.release.xcconfig"; sourceTree = ""; }; 5AF9B3B6D62946E1E270EDB8 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig"; path = "Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig"; sourceTree = ""; }; 5DCACB8F33CDC322A6C60F78 /* libPods-ImageMarkerExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ImageMarkerExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 744A2F230C283E0D140F997B /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ImageMarkerExample-ImageMarkerExampleUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F2EF2314753552DE3ED8A96 /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ImageMarkerExample-ImageMarkerExampleUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ImageMarkerExample/LaunchScreen.storyboard; sourceTree = ""; }; + A0BC82937F23256F1BD51A72 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig"; path = "Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig"; sourceTree = ""; }; A119E9DE2B162437000C0527 /* ImageMarkerExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ImageMarkerExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; A119E9E02B162437000C0527 /* ImageMarkerExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageMarkerExampleUITests.swift; sourceTree = ""; }; A119E9E22B162437000C0527 /* ImageMarkerExampleUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageMarkerExampleUITestsLaunchTests.swift; sourceTree = ""; }; @@ -60,7 +62,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 552FE0025890E32E99AF119A /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a in Frameworks */, + 04B9FA14906B4CD913E9D498 /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -85,7 +87,7 @@ children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 5DCACB8F33CDC322A6C60F78 /* libPods-ImageMarkerExample.a */, - 744A2F230C283E0D140F997B /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a */, + 6F2EF2314753552DE3ED8A96 /* libPods-ImageMarkerExample-ImageMarkerExampleUITests.a */, ); name = Frameworks; sourceTree = ""; @@ -135,8 +137,8 @@ children = ( 3B4392A12AC88292D35C810B /* Pods-ImageMarkerExample.debug.xcconfig */, 5709B34CF0A7D63546082F79 /* Pods-ImageMarkerExample.release.xcconfig */, - 5AF9B3B6D62946E1E270EDB8 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig */, - 26EC0163490429FD1EA48765 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig */, + A0BC82937F23256F1BD51A72 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig */, + 15E0FEF5E88EB5BA856E015A /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -170,12 +172,12 @@ isa = PBXNativeTarget; buildConfigurationList = A119E9E62B162437000C0527 /* Build configuration list for PBXNativeTarget "ImageMarkerExampleUITests" */; buildPhases = ( - EBC9A7F715DF26D017D78006 /* [CP] Check Pods Manifest.lock */, + 8A6FE7CB4317D237B9322CDF /* [CP] Check Pods Manifest.lock */, A119E9DA2B162437000C0527 /* Sources */, A119E9DB2B162437000C0527 /* Frameworks */, A119E9DC2B162437000C0527 /* Resources */, - ACF99CEFF8F89F281A68F64E /* [CP] Embed Pods Frameworks */, - 00D2AD9DAE49776B6A95E7C2 /* [CP] Copy Pods Resources */, + C9CED8EA5C5BA86327575051 /* [CP] Embed Pods Frameworks */, + E45D13E06C1471BEA0DE67A1 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -294,21 +296,26 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample/Pods-ImageMarkerExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ACF99CEFF8F89F281A68F64E /* [CP] Embed Pods Frameworks */ = { + 8A6FE7CB4317D237B9322CDF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ImageMarkerExample-ImageMarkerExampleUITests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-frameworks.sh\"\n"; + 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"; showEnvVarsInLog = 0; }; C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { @@ -333,6 +340,23 @@ 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"; showEnvVarsInLog = 0; }; + C9CED8EA5C5BA86327575051 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -350,26 +374,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample/Pods-ImageMarkerExample-resources.sh\"\n"; showEnvVarsInLog = 0; }; - EBC9A7F715DF26D017D78006 /* [CP] Check Pods Manifest.lock */ = { + E45D13E06C1471BEA0DE67A1 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ImageMarkerExample-ImageMarkerExampleUITests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - 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"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ImageMarkerExample-ImageMarkerExampleUITests/Pods-ImageMarkerExample-ImageMarkerExampleUITests-resources.sh\"\n"; showEnvVarsInLog = 0; }; FD10A7F022414F080027D42C /* Start Packager */ = { @@ -480,7 +499,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -536,14 +555,21 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + OTHER_LDFLAGS = ( + "$(inherited)", + "-Wl", + "-ld_classic", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + USE_HERMES = true; }; name = Debug; }; @@ -552,7 +578,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -600,21 +626,28 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + OTHER_LDFLAGS = ( + "$(inherited)", + "-Wl", + "-ld_classic", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + USE_HERMES = true; VALIDATE_PRODUCT = YES; }; name = Release; }; A119E9E72B162437000C0527 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5AF9B3B6D62946E1E270EDB8 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig */; + baseConfigurationReference = A0BC82937F23256F1BD51A72 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -647,7 +680,7 @@ }; A119E9E82B162437000C0527 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 26EC0163490429FD1EA48765 /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig */; + baseConfigurationReference = 15E0FEF5E88EB5BA856E015A /* Pods-ImageMarkerExample-ImageMarkerExampleUITests.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; diff --git a/example/ios/ImageMarkerExample/AppDelegate.mm b/example/ios/ImageMarkerExample/AppDelegate.mm index 6805bca5..67868c46 100644 --- a/example/ios/ImageMarkerExample/AppDelegate.mm +++ b/example/ios/ImageMarkerExample/AppDelegate.mm @@ -15,6 +15,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ + return [self getBundleURL]; +} +- (NSURL *)getBundleURL { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; @@ -23,14 +27,4 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge #endif } -/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. -/// -/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html -/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). -/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`. -- (BOOL)concurrentRootEnabled -{ - return true; -} - @end diff --git a/example/ios/ImageMarkerExample/Info.plist b/example/ios/ImageMarkerExample/Info.plist index b3610519..fc03d6b9 100644 --- a/example/ios/ImageMarkerExample/Info.plist +++ b/example/ios/ImageMarkerExample/Info.plist @@ -2,10 +2,6 @@ - NSCameraUsageDescription - want to use - NSPhotoLibraryUsageDescription - want to use CFBundleDevelopmentRegion en CFBundleDisplayName @@ -30,17 +26,17 @@ NSAppTransportSecurity - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + NSCameraUsageDescription + want to use NSLocationWhenInUseUsageDescription - + + NSPhotoLibraryUsageDescription + want to use UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/example/ios/Podfile b/example/ios/Podfile index 875b165f..64a80f48 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,9 @@ -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip platform :ios, min_ios_version_supported prepare_react_native_project! @@ -24,16 +28,8 @@ end target 'ImageMarkerExample' do config = use_native_modules! - # Flags change depending on the env values. - flags = get_default_flags() - use_react_native!( :path => config[:reactNativePath], - # Hermes is now enabled by default. Disable by setting this flag to false. - # Upcoming versions of React Native may rely on get_default_flags(), but - # we make it explicit here to aid in the React Native upgrade process. - :hermes_enabled => flags[:hermes_enabled], - :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and @@ -49,12 +45,11 @@ target 'ImageMarkerExample' do end post_install do |installer| + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 react_native_post_install( installer, - # Set `mac_catalyst_enabled` to `true` in order to apply patches - # necessary for Mac Catalyst builds + config[:reactNativePath], :mac_catalyst_enabled => false ) - __apply_Xcode_12_5_M1_post_install_workaround(installer) end end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index c19eac21..a558fd88 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,18 +1,17 @@ PODS: - - boost (1.76.0) + - boost (1.83.0) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.71.11) - - FBReactNativeSpec (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.71.11) - - RCTTypeSafety (= 0.71.11) - - React-Core (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - Flipper (0.125.0): + - FBLazyVector (0.73.1) + - FBReactNativeSpec (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - RCTRequired (= 0.73.1) + - RCTTypeSafety (= 0.73.1) + - React-Core (= 0.73.1) + - React-jsi (= 0.73.1) + - ReactCommon/turbomodule/core (= 0.73.1) + - Flipper (0.201.0): - Flipper-Folly (~> 2.6) - - Flipper-RSocket (~> 1.4) - Flipper-Boost-iOSX (1.76.0.1.11) - Flipper-DoubleConversion (3.2.0.1) - Flipper-Fmt (7.1.7) @@ -25,97 +24,100 @@ PODS: - OpenSSL-Universal (= 1.1.1100) - Flipper-Glog (0.5.0.5) - Flipper-PeerTalk (0.0.4) - - Flipper-RSocket (1.4.3): - - Flipper-Folly (~> 2.6) - - FlipperKit (0.125.0): - - FlipperKit/Core (= 0.125.0) - - FlipperKit/Core (0.125.0): - - Flipper (~> 0.125.0) + - FlipperKit (0.201.0): + - FlipperKit/Core (= 0.201.0) + - FlipperKit/Core (0.201.0): + - Flipper (~> 0.201.0) - FlipperKit/CppBridge - FlipperKit/FBCxxFollyDynamicConvert - FlipperKit/FBDefines - FlipperKit/FKPortForwarding - SocketRocket (~> 0.6.0) - - FlipperKit/CppBridge (0.125.0): - - Flipper (~> 0.125.0) - - FlipperKit/FBCxxFollyDynamicConvert (0.125.0): + - FlipperKit/CppBridge (0.201.0): + - Flipper (~> 0.201.0) + - FlipperKit/FBCxxFollyDynamicConvert (0.201.0): - Flipper-Folly (~> 2.6) - - FlipperKit/FBDefines (0.125.0) - - FlipperKit/FKPortForwarding (0.125.0): + - FlipperKit/FBDefines (0.201.0) + - FlipperKit/FKPortForwarding (0.201.0): - CocoaAsyncSocket (~> 7.6) - Flipper-PeerTalk (~> 0.0.4) - - FlipperKit/FlipperKitHighlightOverlay (0.125.0) - - FlipperKit/FlipperKitLayoutHelpers (0.125.0): + - FlipperKit/FlipperKitHighlightOverlay (0.201.0) + - FlipperKit/FlipperKitLayoutHelpers (0.201.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutTextSearchable - - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0): + - FlipperKit/FlipperKitLayoutIOSDescriptors (0.201.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutHelpers - - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutPlugin (0.125.0): + - FlipperKit/FlipperKitLayoutPlugin (0.201.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutHelpers - FlipperKit/FlipperKitLayoutIOSDescriptors - FlipperKit/FlipperKitLayoutTextSearchable - - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0) - - FlipperKit/FlipperKitNetworkPlugin (0.125.0): + - FlipperKit/FlipperKitLayoutTextSearchable (0.201.0) + - FlipperKit/FlipperKitNetworkPlugin (0.201.0): - FlipperKit/Core - - FlipperKit/FlipperKitReactPlugin (0.125.0): + - FlipperKit/FlipperKitReactPlugin (0.201.0): - FlipperKit/Core - - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0): + - FlipperKit/FlipperKitUserDefaultsPlugin (0.201.0): - FlipperKit/Core - - FlipperKit/SKIOSNetworkPlugin (0.125.0): + - FlipperKit/SKIOSNetworkPlugin (0.201.0): - FlipperKit/Core - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) - - hermes-engine (0.71.11): - - hermes-engine/Pre-built (= 0.71.11) - - hermes-engine/Pre-built (0.71.11) + - hermes-engine (0.73.1): + - hermes-engine/Pre-built (= 0.73.1) + - hermes-engine/Pre-built (0.73.1) - libevent (2.1.12) - OpenSSL-Universal (1.1.1100) - - RCT-Folly (2021.07.22.00): + - RCT-Folly (2022.05.16.00): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - RCT-Folly/Default (= 2022.05.16.00) + - RCT-Folly/Default (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Default (= 2021.07.22.00) - - RCT-Folly/Default (2021.07.22.00): + - RCT-Folly/Fabric (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Futures (2021.07.22.00): + - RCT-Folly/Futures (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.71.11) - - RCTTypeSafety (0.71.11): - - FBLazyVector (= 0.71.11) - - RCTRequired (= 0.71.11) - - React-Core (= 0.71.11) - - React (0.71.11): - - React-Core (= 0.71.11) - - React-Core/DevSupport (= 0.71.11) - - React-Core/RCTWebSocket (= 0.71.11) - - React-RCTActionSheet (= 0.71.11) - - React-RCTAnimation (= 0.71.11) - - React-RCTBlob (= 0.71.11) - - React-RCTImage (= 0.71.11) - - React-RCTLinking (= 0.71.11) - - React-RCTNetwork (= 0.71.11) - - React-RCTSettings (= 0.71.11) - - React-RCTText (= 0.71.11) - - React-RCTVibration (= 0.71.11) - - React-callinvoker (0.71.11) - - React-Codegen (0.71.11): + - RCTRequired (0.73.1) + - RCTTypeSafety (0.73.1): + - FBLazyVector (= 0.73.1) + - RCTRequired (= 0.73.1) + - React-Core (= 0.73.1) + - React (0.73.1): + - React-Core (= 0.73.1) + - React-Core/DevSupport (= 0.73.1) + - React-Core/RCTWebSocket (= 0.73.1) + - React-RCTActionSheet (= 0.73.1) + - React-RCTAnimation (= 0.73.1) + - React-RCTBlob (= 0.73.1) + - React-RCTImage (= 0.73.1) + - React-RCTLinking (= 0.73.1) + - React-RCTNetwork (= 0.73.1) + - React-RCTSettings (= 0.73.1) + - React-RCTText (= 0.73.1) + - React-RCTVibration (= 0.73.1) + - React-callinvoker (0.73.1) + - React-Codegen (0.73.1): + - DoubleConversion - FBReactNativeSpec + - glog - hermes-engine - RCT-Folly - RCTRequired @@ -123,338 +125,1032 @@ PODS: - React-Core - React-jsi - React-jsiexecutor + - React-NativeModulesApple + - React-rncore - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.71.11): + - React-Core (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.11) - - React-cxxreact (= 0.71.11) + - RCT-Folly (= 2022.05.16.00) + - React-Core/Default (= 0.73.1) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/CoreModulesHeaders (0.71.11): + - React-Core/CoreModulesHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/Default (0.71.11): + - React-Core/Default (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.11) + - RCT-Folly (= 2022.05.16.00) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/DevSupport (0.71.11): + - React-Core/DevSupport (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.11) - - React-Core/RCTWebSocket (= 0.71.11) - - React-cxxreact (= 0.71.11) + - RCT-Folly (= 2022.05.16.00) + - React-Core/Default (= 0.73.1) + - React-Core/RCTWebSocket (= 0.73.1) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-jsinspector (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-jsinspector (= 0.73.1) + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.71.11): + - React-Core/RCTActionSheetHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTAnimationHeaders (0.71.11): + - React-Core/RCTAnimationHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTBlobHeaders (0.71.11): + - React-Core/RCTBlobHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTImageHeaders (0.71.11): + - React-Core/RCTImageHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTLinkingHeaders (0.71.11): + - React-Core/RCTLinkingHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTNetworkHeaders (0.71.11): + - React-Core/RCTNetworkHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTSettingsHeaders (0.71.11): + - React-Core/RCTSettingsHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTTextHeaders (0.71.11): + - React-Core/RCTTextHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTVibrationHeaders (0.71.11): + - React-Core/RCTVibrationHeaders (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.11) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTWebSocket (0.71.11): + - React-Core/RCTWebSocket (0.73.1): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.11) - - React-cxxreact (= 0.71.11) + - RCT-Folly (= 2022.05.16.00) + - React-Core/Default (= 0.73.1) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-CoreModules (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/CoreModulesHeaders (= 0.71.11) - - React-jsi (= 0.71.11) + - React-CoreModules (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety (= 0.73.1) + - React-Codegen + - React-Core/CoreModulesHeaders (= 0.73.1) + - React-jsi (= 0.73.1) + - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-cxxreact (0.71.11): - - boost (= 1.76.0) + - React-RCTImage (= 0.73.1) + - ReactCommon + - SocketRocket (= 0.6.1) + - React-cxxreact (0.73.1): + - boost (= 1.83.0) + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.1) + - React-debug (= 0.73.1) + - React-jsi (= 0.73.1) + - React-jsinspector (= 0.73.1) + - React-logger (= 0.73.1) + - React-perflogger (= 0.73.1) + - React-runtimeexecutor (= 0.73.1) + - React-debug (0.73.1) + - React-Fabric (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.73.1) + - React-Fabric/attributedstring (= 0.73.1) + - React-Fabric/componentregistry (= 0.73.1) + - React-Fabric/componentregistrynative (= 0.73.1) + - React-Fabric/components (= 0.73.1) + - React-Fabric/core (= 0.73.1) + - React-Fabric/imagemanager (= 0.73.1) + - React-Fabric/leakchecker (= 0.73.1) + - React-Fabric/mounting (= 0.73.1) + - React-Fabric/scheduler (= 0.73.1) + - React-Fabric/telemetry (= 0.73.1) + - React-Fabric/templateprocessor (= 0.73.1) + - React-Fabric/textlayoutmanager (= 0.73.1) + - React-Fabric/uimanager (= 0.73.1) + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/inputaccessory (= 0.73.1) + - React-Fabric/components/legacyviewmanagerinterop (= 0.73.1) + - React-Fabric/components/modal (= 0.73.1) + - React-Fabric/components/rncore (= 0.73.1) + - React-Fabric/components/root (= 0.73.1) + - React-Fabric/components/safeareaview (= 0.73.1) + - React-Fabric/components/scrollview (= 0.73.1) + - React-Fabric/components/text (= 0.73.1) + - React-Fabric/components/textinput (= 0.73.1) + - React-Fabric/components/unimplementedview (= 0.73.1) + - React-Fabric/components/view (= 0.73.1) + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/inputaccessory (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/modal (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/rncore (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.73.1): - DoubleConversion + - fmt (~> 6.2.1) - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.11) - - React-jsi (= 0.71.11) - - React-jsinspector (= 0.71.11) - - React-logger (= 0.71.11) - - React-perflogger (= 0.71.11) - - React-runtimeexecutor (= 0.71.11) - - React-hermes (0.71.11): + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/safeareaview (0.73.1): - DoubleConversion + - fmt (~> 6.2.1) - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.71.11) + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics - React-jsi - - React-jsiexecutor (= 0.71.11) - - React-jsinspector (= 0.71.11) - - React-perflogger (= 0.71.11) - - React-jsi (0.71.11): - - boost (= 1.76.0) + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/scrollview (0.73.1): - DoubleConversion + - fmt (~> 6.2.1) - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.71.11): + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/text (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/textinput (0.73.1): - DoubleConversion + - fmt (~> 6.2.1) - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.11) - - React-jsi (= 0.71.11) - - React-perflogger (= 0.71.11) - - React-jsinspector (0.71.11) - - React-logger (0.71.11): + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/unimplementedview (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/textlayoutmanager (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricImage (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired (= 0.73.1) + - RCTTypeSafety (= 0.73.1) + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.73.1) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-graphics (0.73.1): + - glog + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-Core/Default (= 0.73.1) + - React-utils + - React-hermes (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCT-Folly/Futures (= 2022.05.16.00) + - React-cxxreact (= 0.73.1) + - React-jsi + - React-jsiexecutor (= 0.73.1) + - React-jsinspector (= 0.73.1) + - React-perflogger (= 0.73.1) + - React-ImageManager (0.73.1): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.73.1): + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-debug + - React-jsi + - React-Mapbuffer + - React-jsi (0.73.1): + - boost (= 1.83.0) + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-jsiexecutor (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-cxxreact (= 0.73.1) + - React-jsi (= 0.73.1) + - React-perflogger (= 0.73.1) + - React-jsinspector (0.73.1) + - React-logger (0.73.1): + - glog + - React-Mapbuffer (0.73.1): + - glog + - React-debug - react-native-blob-util (0.19.6): - React-Core - - react-native-image-marker (1.1.10): + - react-native-image-marker (1.1.11): - React-Core - react-native-image-picker (5.7.0): - React-Core - - React-perflogger (0.71.11) - - React-RCTActionSheet (0.71.11): - - React-Core/RCTActionSheetHeaders (= 0.71.11) - - React-RCTAnimation (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTAnimationHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTAppDelegate (0.71.11): + - React-nativeconfig (0.73.1) + - React-NativeModulesApple (0.73.1): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.73.1) + - React-RCTActionSheet (0.73.1): + - React-Core/RCTActionSheetHeaders (= 0.73.1) + - React-RCTAnimation (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTAppDelegate (0.73.1): - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core - - ReactCommon/turbomodule/core - - React-RCTBlob (0.71.11): - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.11) - - React-Core/RCTBlobHeaders (= 0.71.11) - - React-Core/RCTWebSocket (= 0.71.11) - - React-jsi (= 0.71.11) - - React-RCTNetwork (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTImage (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTImageHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - React-RCTNetwork (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTLinking (0.71.11): - - React-Codegen (= 0.71.11) - - React-Core/RCTLinkingHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTNetwork (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTNetworkHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTSettings (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTSettingsHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTText (0.71.11): - - React-Core/RCTTextHeaders (= 0.71.11) - - React-RCTVibration (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.11) - - React-Core/RCTVibrationHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-runtimeexecutor (0.71.11): - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/bridging (0.71.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.11) - - React-Core (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-jsi (= 0.71.11) - - React-logger (= 0.71.11) - - React-perflogger (= 0.71.11) - - ReactCommon/turbomodule/core (0.71.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.11) - - React-Core (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-jsi (= 0.71.11) - - React-logger (= 0.71.11) - - React-perflogger (= 0.71.11) - - SocketRocket (0.6.0) + - React-CoreModules + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-runtimescheduler + - ReactCommon + - React-RCTBlob (0.73.1): + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-Codegen + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTFabric (0.73.1): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-graphics + - React-ImageManager + - React-jsi + - React-nativeconfig + - React-RCTImage + - React-RCTText + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.73.1): + - React-Codegen + - React-Core/RCTLinkingHeaders (= 0.73.1) + - React-jsi (= 0.73.1) + - React-NativeModulesApple + - ReactCommon + - ReactCommon/turbomodule/core (= 0.73.1) + - React-RCTNetwork (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTSettings (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTText (0.73.1): + - React-Core/RCTTextHeaders (= 0.73.1) + - Yoga + - React-RCTVibration (0.73.1): + - RCT-Folly (= 2022.05.16.00) + - React-Codegen + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-rendererdebug (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - RCT-Folly (= 2022.05.16.00) + - React-debug + - React-rncore (0.73.1) + - React-runtimeexecutor (0.73.1): + - React-jsi (= 0.73.1) + - React-runtimescheduler (0.73.1): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-jsi + - React-rendererdebug + - React-runtimeexecutor + - React-utils + - React-utils (0.73.1): + - glog + - RCT-Folly (= 2022.05.16.00) + - React-debug + - ReactCommon (0.73.1): + - React-logger (= 0.73.1) + - ReactCommon/turbomodule (= 0.73.1) + - ReactCommon/turbomodule (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.1) + - React-cxxreact (= 0.73.1) + - React-jsi (= 0.73.1) + - React-logger (= 0.73.1) + - React-perflogger (= 0.73.1) + - ReactCommon/turbomodule/bridging (= 0.73.1) + - ReactCommon/turbomodule/core (= 0.73.1) + - ReactCommon/turbomodule/bridging (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.1) + - React-cxxreact (= 0.73.1) + - React-jsi (= 0.73.1) + - React-logger (= 0.73.1) + - React-perflogger (= 0.73.1) + - ReactCommon/turbomodule/core (0.73.1): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.1) + - React-cxxreact (= 0.73.1) + - React-jsi (= 0.73.1) + - React-logger (= 0.73.1) + - React-perflogger (= 0.73.1) + - SocketRocket (0.6.1) - Yoga (1.14.0) - - YogaKit (1.18.1): - - Yoga (~> 1.14) DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - - Flipper (= 0.125.0) + - Flipper (= 0.201.0) - Flipper-Boost-iOSX (= 1.76.0.1.11) - Flipper-DoubleConversion (= 3.2.0.1) - Flipper-Fmt (= 7.1.7) - Flipper-Folly (= 2.6.10) - Flipper-Glog (= 0.5.0.5) - Flipper-PeerTalk (= 0.0.4) - - Flipper-RSocket (= 1.4.3) - - FlipperKit (= 0.125.0) - - FlipperKit/Core (= 0.125.0) - - FlipperKit/CppBridge (= 0.125.0) - - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0) - - FlipperKit/FBDefines (= 0.125.0) - - FlipperKit/FKPortForwarding (= 0.125.0) - - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0) - - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0) - - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0) - - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0) - - FlipperKit/FlipperKitReactPlugin (= 0.125.0) - - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) + - FlipperKit (= 0.201.0) + - FlipperKit/Core (= 0.201.0) + - FlipperKit/CppBridge (= 0.201.0) + - FlipperKit/FBCxxFollyDynamicConvert (= 0.201.0) + - FlipperKit/FBDefines (= 0.201.0) + - FlipperKit/FKPortForwarding (= 0.201.0) + - FlipperKit/FlipperKitHighlightOverlay (= 0.201.0) + - FlipperKit/FlipperKitLayoutPlugin (= 0.201.0) + - FlipperKit/FlipperKitLayoutTextSearchable (= 0.201.0) + - FlipperKit/FlipperKitNetworkPlugin (= 0.201.0) + - FlipperKit/FlipperKitReactPlugin (= 0.201.0) + - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.201.0) + - FlipperKit/SKIOSNetworkPlugin (= 0.201.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - libevent (~> 2.1.12) - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) @@ -465,26 +1161,40 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - react-native-blob-util (from `../node_modules/react-native-blob-util`) - react-native-image-marker (from `../..`) - react-native-image-picker (from `../node_modules/react-native-image-picker`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -498,13 +1208,11 @@ SPEC REPOS: - Flipper-Folly - Flipper-Glog - Flipper-PeerTalk - - Flipper-RSocket - FlipperKit - fmt - libevent - OpenSSL-Universal - SocketRocket - - YogaKit EXTERNAL SOURCES: boost: @@ -519,6 +1227,7 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2023-11-17-RNv0.73.0-21043a3fc062be445e56a2c10ecd8be028dd9cc5 RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -537,22 +1246,40 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" React-hermes: :path: "../node_modules/react-native/ReactCommon/hermes" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector" + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" React-logger: :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" react-native-blob-util: :path: "../node_modules/react-native-blob-util" react-native-image-marker: :path: "../.." react-native-image-picker: :path: "../node_modules/react-native-image-picker" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-RCTActionSheet: @@ -563,6 +1290,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/AppDelegate" React-RCTBlob: :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" React-RCTImage: :path: "../node_modules/react-native/Libraries/Image" React-RCTLinking: @@ -575,67 +1304,87 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" ReactCommon: :path: "../node_modules/react-native/ReactCommon" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 57d2868c099736d80fcd648bf211b4431e51a558 + boost: 26fad476bfa736552bbfa698a06cc530475c1505 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 - DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 - FBLazyVector: c511d4cd0210f416cb5c289bd5ae6b36d909b048 - FBReactNativeSpec: a911fb22def57aef1d74215e8b6b8761d25c1c54 - Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 + DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953 + FBLazyVector: 2296bacb2fa157a43991048b0a9d71c1c8b65083 + FBReactNativeSpec: df0ebe69acd14ce0be0269cf75b6e338a727259b + Flipper: c7a0093234c4bdd456e363f2f19b2e4b27652d44 Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 - Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541 - FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 + FlipperKit: 37525a5d056ef9b93d1578e04bc3ea1de940094f fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b - hermes-engine: 34c863b446d0135b85a6536fa5fd89f48196f848 + glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 + hermes-engine: 34df9d5034e90bd9bf1505e1ca198760373935af libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c - RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: f6187ec763637e6a57f5728dd9a3bdabc6d6b4e0 - RCTTypeSafety: a01aca2dd3b27fa422d5239252ad38e54e958750 - React: 741b4f5187e7a2137b69c88e65f940ba40600b4b - React-callinvoker: 72ba74b2d5d690c497631191ae6eeca0c043d9cf - React-Codegen: 8a7cda1633e4940de8a710f6bf5cae5dd673546e - React-Core: 72bb19702c465b6451a40501a2879532bec9acee - React-CoreModules: ffd19b082fc36b9b463fedf30955138b5426c053 - React-cxxreact: 8b3dd87e3b8ea96dd4ad5c7bac8f31f1cc3da97f - React-hermes: be95942c3f47fc032da1387360413f00dae0ea68 - React-jsi: 9978e2a64c2a4371b40e109f4ef30a33deaa9bcb - React-jsiexecutor: 18b5b33c5f2687a784a61bc8176611b73524ae77 - React-jsinspector: b6ed4cb3ffa27a041cd440300503dc512b761450 - React-logger: 186dd536128ae5924bc38ed70932c00aa740cd5b + RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 + RCTRequired: 6dda55e483f75d2b43781d8ad5bd7df276a50981 + RCTTypeSafety: df0f2632f4e89938b9b9f6152b5e6c66fc6e969e + React: 5373769b4a544945831d9c5d455212186d68f763 + React-callinvoker: 2c54fb73b27fdf9bd7772f36dcda23d76e0e7d14 + React-Codegen: 65b426d1c3185df0e1d901ff56a23d94e1974791 + React-Core: f0e1e99728ebdb785286b0c4c55f0f923a9d826f + React-CoreModules: 1ee65dbd93429c1c6ec3de069d75f5fde05db5d5 + React-cxxreact: dc0f1968914a6c7da62b1287c1eb84dd3ab0a7bb + React-debug: 52cced4b9e280d03825d687925898cf65bd8712d + React-Fabric: 1805f148aedab4bf31c48c8c3bae6045aeb75275 + React-FabricImage: ee5ee9abe4ab05043fdce515e46f396b025a5028 + React-graphics: a1652cbea6f779a1cf2692987d9c94efcd6e4497 + React-hermes: 12499684a1005213e7ed71a94467ef72cf24320c + React-ImageManager: 5e50ba59059ca7547c8968f936e4ae7a50ff7384 + React-jserrorhandler: 27154e650959506a4455384f3aea134eba62335b + React-jsi: b03ac7f7af1371e3e81e8ac894af4e46454dee79 + React-jsiexecutor: ae30693413a40b7c72f25da2e794997754a780bf + React-jsinspector: 369048694e39942063c5d08e9580b43e2edd379a + React-logger: e0c1e918d9588a9f39c9bc62d9d6bfe9ca238d9d + React-Mapbuffer: 9731a0a63ebaf8976014623c4d637744d7353a7c react-native-blob-util: d8fa1a7f726867907a8e43163fdd8b441d4489ea - react-native-image-marker: 4414050c15944297bc24b3a37a1070d951fb57a2 + react-native-image-marker: d58c3e046b75e3302fd4f365cd7c32051badfef2 react-native-image-picker: 3269f75c251cdcd61ab51b911dd30d6fff8c6169 - React-perflogger: e706562ab7eb8eb590aa83a224d26fa13963d7f2 - React-RCTActionSheet: 57d4bd98122f557479a3359ad5dad8e109e20c5a - React-RCTAnimation: ccf3ef00101ea74bda73a045d79a658b36728a60 - React-RCTAppDelegate: d0c28a35c65e9a0aef287ac0dafe1b71b1ac180c - React-RCTBlob: 1700b92ece4357af0a49719c9638185ad2902e95 - React-RCTImage: f2e4904566ccccaa4b704170fcc5ae144ca347bf - React-RCTLinking: 52a3740e3651e30aa11dff5a6debed7395dd8169 - React-RCTNetwork: ea0976f2b3ffc7877cd7784e351dc460adf87b12 - React-RCTSettings: ed5ac992b23e25c65c3cc31f11b5c940ae5e3e60 - React-RCTText: c9dfc6722621d56332b4f3a19ac38105e7504145 - React-RCTVibration: f09f08de63e4122deb32506e20ca4cae6e4e14c1 - React-runtimeexecutor: 4817d63dbc9d658f8dc0ec56bd9b83ce531129f0 - ReactCommon: 08723d2ed328c5cbcb0de168f231bc7bae7f8aa1 - SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - Yoga: f7decafdc5e8c125e6fa0da38a687e35238420fa - YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + React-nativeconfig: 37aecd26d64b79327c3f10e43b2e9a6c425e0a60 + React-NativeModulesApple: 9ca6d2eaa1dd5606588262195b46d0774bdec83a + React-perflogger: 5ffc4d6ccb74eaac7b8b2867e58a447232483d6d + React-RCTActionSheet: eca2174431ff2cc14b7fb847f92b89e081d27541 + React-RCTAnimation: a039b2416aa0a55e6fa7c8cd0a2e870bfffc4caa + React-RCTAppDelegate: be26c542774d36211b1562a9278c72f821887103 + React-RCTBlob: 0d4892d25e57fbbce13e221fff7e4c9567a2ace3 + React-RCTFabric: d11187cac1f4e0141738805f7011145c7786a369 + React-RCTImage: 5b70891cb2adb75bbdc5ad8e6cc56c48e95d90e5 + React-RCTLinking: 5fe4756ab016e9f200e93e771bd6e43ea05f8f50 + React-RCTNetwork: 877b4a85f71c63cf719574f187e3333c1e15a425 + React-RCTSettings: ae477a33a04389f5d42486004b09b04eeba64fd5 + React-RCTText: 08dd5d7173ed279d3468b333217afb22bb7948c3 + React-RCTVibration: 2f906cd58dfd44ff5e4ca4fc0edd8740dceda6be + React-rendererdebug: e3db5db14234d9ee46d2e58fff3b8652ee7da6bc + React-rncore: d1aa3c2f01b22a53bc10ff2775e6ddcd43fc71a2 + React-runtimeexecutor: d87e84455640dc5685e87563c2eaef90e5df8752 + React-runtimescheduler: 93a4c84e46a85c3fc9678abd4f6923b785226ea7 + React-utils: debda2c206770ee2785bdebb7f16d8db9f18838a + ReactCommon: ddb128564dcbfa0287d3d1a2d10f8c7457c971f6 + SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 + Yoga: 4f53dc50008d626fa679c7a1cb4bed898f8c0bde -PODFILE CHECKSUM: 4420d5a35a7e9d1bc71140c63c7e29db0be4fdf7 +PODFILE CHECKSUM: 8c3f9c33c24df0951c16c5461728b73f75674df3 COCOAPODS: 1.12.1 diff --git a/example/metro.config.js b/example/metro.config.js index b5c0064b..dfbe1774 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -2,6 +2,7 @@ const path = require('path'); const escape = require('escape-string-regexp'); const exclusionList = require('metro-config/src/defaults/exclusionList'); const pak = require('../package.json'); +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); const root = path.resolve(__dirname, '..'); @@ -9,7 +10,7 @@ const modules = Object.keys({ ...pak.peerDependencies, }); -module.exports = { +const config = { projectRoot: __dirname, watchFolders: [root], @@ -38,3 +39,5 @@ module.exports = { }), }, }; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/example/package.json b/example/package.json index d5eb7414..a7ced6a0 100644 --- a/example/package.json +++ b/example/package.json @@ -6,13 +6,14 @@ "android": "react-native run-android", "ios": "react-native run-ios", "start": "react-native start", - "pods": "pod-install --quiet" + "pods": "pod-install", + "m1-pods": "cd ios && arch -x86_64 pod install" }, "dependencies": { "@expo/react-native-action-sheet": "^4.0.1", "filesize": "^10.1.0", "react": "18.2.0", - "react-native": "0.71.11", + "react-native": "0.73.1", "react-native-blob-util": "^0.19.2", "react-native-image-picker": "^5.6.0", "react-native-reanimated-table": "^0.0.2", @@ -23,6 +24,12 @@ "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "babel-plugin-module-resolver": "^4.1.0", - "metro-react-native-babel-preset": "0.73.10" + "@react-native/typescript-config": "^0.73.1", + "@react-native/babel-preset": "^0.73.18", + "@react-native/eslint-config": "^0.73.1", + "@react-native/metro-config": "^0.73.2", + "@types/react": "^18.2.6", + "typescript": "5.0.4", + "prettier": "2.8.8" } } diff --git a/ios/RCTImageMarker/ImageMarker.swift b/ios/RCTImageMarker/ImageMarker.swift index 0e603376..b0d65501 100644 --- a/ios/RCTImageMarker/ImageMarker.swift +++ b/ios/RCTImageMarker/ImageMarker.swift @@ -116,7 +116,7 @@ public final class ImageMarker: NSObject, RCTBridgeModule { } } - func markerImgWithText(_ image: UIImage, _ opts: MarkTextOptions) -> UIImage? { + func markImgWithText(_ image: UIImage, _ opts: MarkTextOptions) -> UIImage? { var bg = image; let w = bg.size.width @@ -271,8 +271,8 @@ public final class ImageMarker: NSObject, RCTBridgeModule { return aimg } - func markeImage(with image: UIImage, waterImages: [UIImage], options: MarkImageOptions) -> UIImage? { - + func markImage(with image: UIImage, waterImages: [UIImage], options: MarkImageOptions) -> UIImage? { + var bg = image; let w = bg.size.width let h = bg.size.height @@ -388,12 +388,12 @@ public final class ImageMarker: NSObject, RCTBridgeModule { Task(priority: .userInitiated) { do { let images = try await loadImages(with: [(markOpts?.backgroundImage)!]) - let scaledImage = self.markerImgWithText(images[0], markOpts!) + let scaledImage = self.markImgWithText(images[0], markOpts!) let res = self.saveImageForMarker(scaledImage!, with: markOpts!) resolver(res) - print("Loaded images:", images) + print("Loaded images: \(images)") } catch { - print("Failed to load images:", error) + print("Failed to load images, error: \(error).") } } } @@ -408,12 +408,12 @@ public final class ImageMarker: NSObject, RCTBridgeModule { do { let waterImages = markOpts?.watermarkImages.map { $0.imageOption } var images = try await loadImages(with: [(markOpts?.backgroundImage)!] + waterImages!) - let scaledImage = self.markeImage(with: images.remove(at: 0), waterImages: images, options: markOpts!) + let scaledImage = self.markImage(with: images.remove(at: 0), waterImages: images, options: markOpts!) let res = self.saveImageForMarker(scaledImage!, with: markOpts!) resolver(res) - print("Loaded images:", images) + print("Loaded images: \(images), waterImages: \(String(describing: waterImages))") } catch { - print("Failed to load images:", error) + print("Failed to load images, error: \(error).") } } } diff --git a/package.json b/package.json index 381882b2..22dd9b12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-image-marker", - "version": "1.1.11", + "version": "1.2.0", "description": "Add text or icon watermark to your images", "main": "lib/commonjs/index", "module": "lib/module/index", @@ -34,6 +34,7 @@ "release": "release-it", "example": "yarn --cwd example", "bootstrap": "yarn example && yarn install && yarn example pods", + "bootstrap-m1": "yarn example && yarn install && yarn example m1-pods", "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build", "docs": "typedoc --excludePrivate --tsconfig tsconfig.doc.json" }, diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js index 17291894..c07a724f 100644 --- a/scripts/bootstrap.js +++ b/scripts/bootstrap.js @@ -22,8 +22,12 @@ if (process.cwd() !== root || args.length) { // In this case, forward the command to `yarn` result = child_process.spawnSync('yarn', args, options); } else { - // If `yarn` is run without arguments, perform bootstrap - result = child_process.spawnSync('yarn', ['bootstrap'], options); + if (os.platform() === 'darwin' && os.arch() === 'arm64') { + // If `yarn` is run without arguments, perform bootstrap + result = child_process.spawnSync('yarn', ['bootstrap-m1'], options); + } else { + result = child_process.spawnSync('yarn', ['bootstrap'], options); + } } process.exitCode = result.status; diff --git a/src/index.ts b/src/index.ts index 7127cc14..7d0cbc32 100644 --- a/src/index.ts +++ b/src/index.ts @@ -541,7 +541,6 @@ export interface TextOptions { * quality: 1, * filename: 'test', * saveFormat: ImageFormat.jpg, - * maxSize: 2048 */ export interface TextMarkOptions { /** @@ -617,6 +616,7 @@ export interface TextMarkOptions { */ saveFormat?: ImageFormat; /** + * @deprecated since 1.2.0 * @description max image size see #49 #42 * android only * **need RN version >= 0.60.0**, fresco `MaxBitmapSize` [`ImagePipelineConfig.Builder.experiment().setMaxBitmapSize()`](https://github.com/facebook/fresco/blob/08ca5f40cc0b60b4db16d15e45552cafeae39ccb/imagepipeline/src/main/java/com/facebook/imagepipeline/core/ImagePipelineExperiments.java#L282), see [#49](https://github.com/JimmyDaddy/react-native-image-marker/issues/49#issuecomment-535303838) @@ -719,7 +719,6 @@ export interface WatermarkImageOptions extends ImageOptions { * quality: 1, * filename: 'test', * saveFormat: ImageFormat.jpg, - * maxSize: 2048 * */ export interface ImageMarkOptions { @@ -783,6 +782,7 @@ export interface ImageMarkOptions { */ saveFormat?: ImageFormat; /** + * @deprecated since 1.2.0 * @description max image size see #49 #42 * android only * **need RN version >= 0.60.0**, fresco `MaxBitmapSize` [`ImagePipelineConfig.Builder.experiment().setMaxBitmapSize()`](https://github.com/facebook/fresco/blob/08ca5f40cc0b60b4db16d15e45552cafeae39ccb/imagepipeline/src/main/java/com/facebook/imagepipeline/core/ImagePipelineExperiments.java#L282), see [#49](https://github.com/JimmyDaddy/react-native-image-marker/issues/49#issuecomment-535303838) @@ -897,7 +897,6 @@ class Marker { * quality: 100, * filename: 'test', * saveFormat: ImageFormat.png, - * maxSize: 1000, * }; * ImageMarker.markText(options).then((res) => { * console.log(res); @@ -944,7 +943,6 @@ class Marker { * quality: 100, * filename: 'test', * saveFormat: ImageFormat.png, - * maxSize: 1000, * watermarkImages: [ * { * src: require('./images/logo.png'),