diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 60290989..edf2356c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,6 +100,7 @@ jobs: uses: expo/expo-github-action@v7 with: expo-version: latest + eas-version: latest token: ${{ secrets.EXPO_TOKEN }} - name: -- Step 5 -- Install node dependencies run: yarn install @@ -120,3 +121,6 @@ jobs: GH_PAT_GET_RELEASE: ${{ secrets.GITHUB_TOKEN }} FL_GITHUB_RELEASE_API_BEARER: ${{ secrets.GITHUB_TOKEN }} run: yarn app:build release + - name: -- Step 8 -- Publish expo update + run: eas update --auto + diff --git a/.gitignore b/.gitignore index 2173fcc9..8cc92055 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ DerivedData *.ipa *.xcuserstate project.xcworkspace +ios/.xcode.env.local # Android/IntelliJ # diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..5e6575f2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "javascript.inlayHints.functionLikeReturnTypes.enabled": false +} \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index ec69c7a9..cc816cde 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,20 +17,20 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.598.0) - aws-sdk-core (3.131.1) + aws-partitions (1.618.0) + aws-sdk-core (3.132.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.57.0) + aws-sdk-kms (1.58.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) aws-sdk-s3 (1.114.0) aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.0) + aws-sigv4 (1.5.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) claide (1.1.0) @@ -81,13 +81,13 @@ GEM rake (>= 12.0.0, < 14.0.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.6) + dotenv (2.8.1) emoji_regex (3.2.3) escape (0.0.4) ethon (0.15.0) ffi (>= 1.15.0) - excon (0.92.3) - faraday (1.10.0) + excon (0.92.4) + faraday (1.10.1) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -116,7 +116,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.206.2) + fastlane (2.209.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -156,16 +156,16 @@ GEM xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-json (1.1.0) - fastlane-plugin-sentry (1.12.0) + fastlane-plugin-sentry (1.12.2) fastlane-plugin-versioning_android (0.1.0) fastlane-plugin-yarn (1.2) ffi (1.15.5) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.21.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-core (0.5.0) + google-apis-androidpublisher_v3 (0.25.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-core (0.7.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -174,27 +174,27 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.10.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-playcustomapp_v1 (0.7.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-storage_v1 (0.14.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-iamcredentials_v1 (0.13.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-playcustomapp_v1 (0.10.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-storage_v1 (0.17.0) + google-apis-core (>= 0.7, < 2.a) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) google-cloud-errors (1.2.0) - google-cloud-storage (1.36.2) + google-cloud-storage (1.38.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.17.0) google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.1.3) + googleauth (1.2.0) faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) memoist (~> 0.16) @@ -237,9 +237,9 @@ GEM ruby2_keywords (0.0.5) rubyzip (2.3.2) security (0.1.3) - signet (0.16.1) + signet (0.17.0) addressable (~> 2.8) - faraday (>= 0.17.5, < 3.0) + faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simctl (1.6.8) @@ -264,7 +264,7 @@ GEM unicode-display_width (1.8.0) webrick (1.7.0) word_wrap (1.0.0) - xcodeproj (1.21.0) + xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -290,4 +290,4 @@ DEPENDENCIES fastlane-plugin-yarn BUNDLED WITH - 2.2.17 + 2.3.20 diff --git a/android/app/build.gradle b/android/app/build.gradle index 31495c9f..2f36faa6 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: "com.android.application" import com.android.build.OutputFile -import org.apache.tools.ant.taskdefs.condition.Os /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets @@ -157,16 +156,12 @@ android { "PROJECT_BUILD_DIR=$buildDir", "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build" + "NODE_MODULES_DIR=$rootDir/../node_modules" cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" cppFlags "-std=c++17" // Make sure this target name is the same you specify inside the // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. targets "tooot_appmodules" - // Fix for windows limit on number of character in file paths and in command lines - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - arguments "NDK_OUT=${rootProject.projectDir.getParent()}\\.cxx", - "NDK_APP_SHORT_COMMANDS=true" - } } } if (!enableSeparateBuildPerCPUArchitecture) { @@ -176,7 +171,7 @@ android { } } manifestPlaceholders = [ - expoSDK: project.hasProperty('expoSDK') ? project.property('expoSDK') : "", + runtimeVersion: project.hasProperty('runtimeVersion') ? project.property('runtimeVersion') : "", releaseChannel: project.hasProperty('releaseChannel') ? project.property('releaseChannel') : "default" ] } @@ -311,8 +306,10 @@ dependencies { } if (enableHermes) { - debugImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute().text.trim(), "../android/hermes-debug.aar")) - releaseImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute().text.trim(), "../android/hermes-release.aar")) + //noinspection GradleDynamicVersion + implementation("com.facebook.react:hermes-engine:+") { // From node_modules + exclude group:'com.facebook.fbjni' + } } else { implementation jscFlavor } @@ -325,7 +322,11 @@ if (isNewArchitectureEnabled()) { configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("com.facebook.react:react-native")) - .using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source") + .using(project(":ReactAndroid")) + .because("On New Architecture we're building React Native from source") + substitute(module("com.facebook.react:hermes-engine")) + .using(project(":ReactAndroid:hermes-engine")) + .because("On New Architecture we're building Hermes from source") } } } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f8d6647f..043124d8 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -13,11 +13,11 @@ - - + + - + diff --git a/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java b/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java index 69944bb8..ba646dfe 100644 --- a/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java +++ b/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java @@ -24,7 +24,8 @@ public class MainActivity extends ReactActivity { /** * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and - * you can specify the rendered you wish to use (Fabric or the older renderer). + * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer + * (Paper). */ @Override protected ReactActivityDelegate createReactActivityDelegate() { @@ -41,5 +42,12 @@ public class MainActivity extends ReactActivity { reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); return reactRootView; } + + @Override + protected boolean isConcurrentRootEnabled() { + // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). + // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } } } diff --git a/android/build.gradle b/android/build.gradle index e3bef1df..ddb4bc57 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -28,9 +28,9 @@ buildscript { } dependencies { classpath 'com.google.gms:google-services:4.3.3' - classpath("com.android.tools.build:gradle:7.0.4") + classpath("com.android.tools.build:gradle:7.1.1") classpath("com.facebook.react:react-native-gradle-plugin") - classpath("de.undercouch:gradle-download-task:4.1.2") + classpath("de.undercouch:gradle-download-task:5.0.1") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/settings.gradle b/android/settings.gradle index 715df6f2..1e5efc0c 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -12,4 +12,6 @@ includeBuild('../node_modules/react-native-gradle-plugin') if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { include(":ReactAndroid") project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid') + include(":ReactAndroid:hermes-engine") + project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine') } diff --git a/app.config.ts b/app.config.ts index 5a8c343b..53adc405 100644 --- a/app.config.ts +++ b/app.config.ts @@ -5,6 +5,10 @@ import 'dotenv/config' const toootVersion = `${versions.major}.${versions.minor}.${versions.patch}` export default (): ExpoConfig => ({ + updates: { + url: "https://u.expo.dev/3288313f-3ff0-496a-a5a9-d8985e7cad5f" + }, + runtimeVersion: `${versions.major}.${versions.minor}`, name: 'tooot', description: 'tooot for Mastodon', slug: 'tooot', diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 14fa228c..66b5c9ad 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -31,8 +31,8 @@ private_lane :build_ios do IPA_FILE = "#{BUILD_DIRECTORY}/tooot.ipa" DSYM_FILE = "#{BUILD_DIRECTORY}/tooot.app.dSYM.zip" - set_info_plist_value( path: EXPO_PLIST, key: "EXUpdatesSDKVersion", value: VERSIONS[:expo] ) - set_info_plist_value( path: EXPO_PLIST, key: "EXUpdatesReleaseChannel", value: RELEASE_CHANNEL ) + set_info_plist_value( path: EXPO_PLIST, key: "EXUpdatesRuntimeVersion", value: VERSION ) + set_info_plist_value( path: EXPO_PLIST, key: "EXUpdatesReleaseChannel", value: ENVIRONMENT ) setup_ci set_info_plist_value( path: INFO_PLIST, key: "CFBundleShortVersionString", value: VERSION ) @@ -97,8 +97,8 @@ private_lane :build_android do print_command: true, print_command_output: true, properties: { - "expoSDK" => VERSIONS[:expo], - "releaseChannel" => RELEASE_CHANNEL, + "runtimeVersion" => VERSION, + "releaseChannel" => ENVIRONMENT, "android.injected.signing.store.file" => "#{File.expand_path('..', Dir.pwd)}/android/tooot.jks", "android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PASSWORD"], "android.injected.signing.key.alias" => ENV["ANDROID_KEYSTORE_ALIAS"], @@ -136,8 +136,8 @@ private_lane :build_android_apk do print_command: true, print_command_output: true, properties: { - "expoSDK" => VERSIONS[:expo], - "releaseChannel" => RELEASE_CHANNEL, + "runtimeVersion" => VERSION, + "releaseChannel" => ENVIRONMENT, "android.injected.signing.store.file" => "#{File.expand_path('..', Dir.pwd)}/android/tooot.jks", "android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PASSWORD"], "android.injected.signing.key.alias" => ENV["ANDROID_KEYSTORE_ALIAS"], @@ -185,6 +185,5 @@ lane :release do upload_assets: ["#{File.expand_path('..', Dir.pwd)}/tooot-#{GITHUB_RELEASE}.apk"] ) end - yarn( package_path: "./package.json", flags: "release", command: RELEASE_CHANNEL ) rocket end diff --git a/index.js b/index.js index 5c94d2cb..40a9d636 100644 --- a/index.js +++ b/index.js @@ -1,8 +1,8 @@ -import { registerRootComponent } from 'expo'; +import { registerRootComponent } from 'expo' -import App from '@root/App'; +import App from '@root/App' // registerRootComponent calls AppRegistry.registerComponent('main', () => App); // It also ensures that whether you load the app in the Expo client or in a native build, // the environment is set up appropriately -registerRootComponent(App); +registerRootComponent(App) diff --git a/ios/.xcode.env b/ios/.xcode.env new file mode 100644 index 00000000..9d643e97 --- /dev/null +++ b/ios/.xcode.env @@ -0,0 +1,10 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile index fff36772..8aa6f59a 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -2,22 +2,16 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules") -platform :ios, '12.0' +platform :ios, '12.4' install! 'cocoapods', :deterministic_uuids => false +production = ENV["PRODUCTION"] == "1" + require 'json' podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {} target 'tooot' do use_expo_modules! - post_integrate do |installer| - begin - expo_patch_react_imports!(installer) - rescue => e - Pod::UI.warn e - end - end - config = use_native_modules! # Flags change depending on the env values. @@ -25,32 +19,40 @@ target 'tooot' do use_react_native!( :path => config[:reactNativePath], + :production => production, :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes', :fabric_enabled => flags[:fabric_enabled], + :flipper_configuration => FlipperConfiguration.disabled, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) - # Enables Flipper. - # - # Note that if you have use_frameworks! enabled, Flipper will not work and - # you should disable the next line. - # use_flipper!() - post_install do |installer| react_native_post_install(installer) + __apply_Xcode_12_5_M1_post_install_workaround(installer) + # For share extension installer.pods_project.targets.each do |target| target.build_configurations.each do |config| - config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' + config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'No' end end end + + post_integrate do |installer| + begin + expo_patch_react_imports!(installer) + rescue => e + Pod::UI.warn e + end + end end target 'ShareExtension' do use_react_native!( - :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes' + :production => production, + :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes', + :flipper_configuration => FlipperConfiguration.disabled ) pod 'RNShareMenu', :path => '../node_modules/react-native-share-menu' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b00f4cf7..ec26e984 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2,72 +2,64 @@ PODS: - ASN1Decoder (1.8.0) - boost (1.76.0) - DoubleConversion (1.1.6) - - EASClient (0.2.1): + - EASClient (0.3.0): - ExpoModulesCore - - EXApplication (4.1.0): + - EXApplication (4.2.2): - ExpoModulesCore - - EXAV (11.2.3): + - EXAV (12.0.4): - ExpoModulesCore - React-runtimeexecutor - ReactCommon - - EXConstants (13.1.1): + - EXConstants (13.2.3): - ExpoModulesCore - - EXDevice (4.2.0): + - EXDevice (4.3.0): - ExpoModulesCore - - EXErrorRecovery (3.1.0): + - EXErrorRecovery (3.2.0): - ExpoModulesCore - - EXFileSystem (14.0.0): + - EXFileSystem (14.1.0): - ExpoModulesCore - - EXFirebaseAnalytics (7.0.0): + - EXFirebaseAnalytics (7.1.1): - EXFirebaseCore - ExpoModulesCore - Firebase/Core (= 8.14.0) - - EXFirebaseCore (5.0.0): + - EXFirebaseCore (5.1.1): - ExpoModulesCore - Firebase/Core (= 8.14.0) - - EXFont (10.1.0): + - EXFont (10.2.0): - ExpoModulesCore - - EXImageLoader (3.2.0): - - ExpoModulesCore - - React-Core - EXJSONUtils (0.3.0) - - EXManifests (0.3.0): + - EXManifests (0.3.1): - EXJSONUtils - - EXNotifications (0.15.2): + - EXNotifications (0.16.1): - ExpoModulesCore - - Expo (45.0.5): + - Expo (46.0.7): - ExpoModulesCore - - ExpoCrypto (10.2.0): + - ExpoCrypto (11.0.0): - ExpoModulesCore - - ExpoHaptics (11.2.0): + - ExpoHaptics (11.3.0): - ExpoModulesCore - - ExpoImageManipulator (10.3.1): - - EXImageLoader + - ExpoKeepAwake (10.2.0): - ExpoModulesCore - - ExpoImagePicker (13.1.1): + - ExpoLocalization (13.1.0): - ExpoModulesCore - - ExpoKeepAwake (10.1.1): - - ExpoModulesCore - - ExpoLocalization (13.0.0): - - ExpoModulesCore - - ExpoModulesCore (0.9.2): + - ExpoModulesCore (0.11.3): - React-Core - ReactCommon/turbomodule/core - - ExpoRandom (12.2.0): + - ExpoRandom (12.3.0): - ExpoModulesCore - - ExpoWebBrowser (10.2.1): + - ExpoWebBrowser (11.0.0): - ExpoModulesCore - - EXScreenCapture (4.2.0): + - EXScreenCapture (4.3.0): - ExpoModulesCore - - EXSecureStore (11.2.0): + - EXSecureStore (11.3.0): - ExpoModulesCore - - EXSplashScreen (0.15.1): + - EXSplashScreen (0.16.1): - ExpoModulesCore - React-Core - - EXStoreReview (5.2.0): + - EXStoreReview (5.3.0): - ExpoModulesCore - EXStructuredHeaders (2.2.1) - - EXUpdates (0.13.2): + - EXUpdates (0.14.4): - ASN1Decoder (~> 1.8) - EASClient - EXManifests @@ -75,17 +67,17 @@ PODS: - EXStructuredHeaders - EXUpdatesInterface - React-Core - - EXUpdatesInterface (0.6.0) - - EXVideoThumbnails (6.3.0): + - EXUpdatesInterface (0.7.0) + - EXVideoThumbnails (6.4.0): - ExpoModulesCore - - FBLazyVector (0.68.2) - - FBReactNativeSpec (0.68.2): + - FBLazyVector (0.69.4) + - FBReactNativeSpec (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.2) - - RCTTypeSafety (= 0.68.2) - - React-Core (= 0.68.2) - - React-jsi (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) + - RCTRequired (= 0.69.4) + - RCTTypeSafety (= 0.69.4) + - React-Core (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) - Firebase/Core (8.14.0): - Firebase/CoreOnly - FirebaseAnalytics (~> 8.14.0) @@ -145,7 +137,7 @@ PODS: - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - nanopb (~> 2.30908.0) - - GoogleDataTransport (9.1.4): + - GoogleDataTransport (9.2.0): - GoogleUtilities/Environment (~> 7.7) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) @@ -168,23 +160,23 @@ PODS: - GoogleUtilities/Logger - GoogleUtilities/UserDefaults (7.7.0): - GoogleUtilities/Logger - - hermes-engine (0.11.0) + - hermes-engine (0.69.4) - libevent (2.1.12) - - libwebp (1.2.1): - - libwebp/demux (= 1.2.1) - - libwebp/mux (= 1.2.1) - - libwebp/webp (= 1.2.1) - - libwebp/demux (1.2.1): + - libwebp (1.2.3): + - libwebp/demux (= 1.2.3) + - libwebp/mux (= 1.2.3) + - libwebp/webp (= 1.2.3) + - libwebp/demux (1.2.3): - libwebp/webp - - libwebp/mux (1.2.1): + - libwebp/mux (1.2.3): - libwebp/demux - - libwebp/webp (1.2.1) + - libwebp/webp (1.2.3) - nanopb (2.30908.0): - nanopb/decode (= 2.30908.0) - nanopb/encode (= 2.30908.0) - nanopb/decode (2.30908.0) - nanopb/encode (2.30908.0) - - PromisesObjC (2.1.0) + - PromisesObjC (2.1.1) - RCT-Folly (2021.06.28.00-v2): - boost - DoubleConversion @@ -202,228 +194,232 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.68.2) - - RCTTypeSafety (0.68.2): - - FBLazyVector (= 0.68.2) + - RCTRequired (0.69.4) + - RCTTypeSafety (0.69.4): + - FBLazyVector (= 0.69.4) + - RCTRequired (= 0.69.4) + - React-Core (= 0.69.4) + - React (0.69.4): + - React-Core (= 0.69.4) + - React-Core/DevSupport (= 0.69.4) + - React-Core/RCTWebSocket (= 0.69.4) + - React-RCTActionSheet (= 0.69.4) + - React-RCTAnimation (= 0.69.4) + - React-RCTBlob (= 0.69.4) + - React-RCTImage (= 0.69.4) + - React-RCTLinking (= 0.69.4) + - React-RCTNetwork (= 0.69.4) + - React-RCTSettings (= 0.69.4) + - React-RCTText (= 0.69.4) + - React-RCTVibration (= 0.69.4) + - React-bridging (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.2) - - React-Core (= 0.68.2) - - React (0.68.2): - - React-Core (= 0.68.2) - - React-Core/DevSupport (= 0.68.2) - - React-Core/RCTWebSocket (= 0.68.2) - - React-RCTActionSheet (= 0.68.2) - - React-RCTAnimation (= 0.68.2) - - React-RCTBlob (= 0.68.2) - - React-RCTImage (= 0.68.2) - - React-RCTLinking (= 0.68.2) - - React-RCTNetwork (= 0.68.2) - - React-RCTSettings (= 0.68.2) - - React-RCTText (= 0.68.2) - - React-RCTVibration (= 0.68.2) - - React-callinvoker (0.68.2) - - React-Codegen (0.68.2): - - FBReactNativeSpec (= 0.68.2) + - React-jsi (= 0.69.4) + - React-callinvoker (0.69.4) + - React-Codegen (0.69.4): + - FBReactNativeSpec (= 0.69.4) - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.2) - - RCTTypeSafety (= 0.68.2) - - React-Core (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-Core (0.68.2): + - RCTRequired (= 0.69.4) + - RCTTypeSafety (= 0.69.4) + - React-Core (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-Core (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-Core/Default (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/CoreModulesHeaders (0.68.2): + - React-Core/CoreModulesHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/Default (0.68.2): + - React-Core/Default (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/DevSupport (0.68.2): + - React-Core/DevSupport (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.2) - - React-Core/RCTWebSocket (= 0.68.2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-jsinspector (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-Core/Default (= 0.69.4) + - React-Core/RCTWebSocket (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-jsinspector (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTActionSheetHeaders (0.68.2): + - React-Core/RCTActionSheetHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTAnimationHeaders (0.68.2): + - React-Core/RCTAnimationHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTBlobHeaders (0.68.2): + - React-Core/RCTBlobHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTImageHeaders (0.68.2): + - React-Core/RCTImageHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTLinkingHeaders (0.68.2): + - React-Core/RCTLinkingHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTNetworkHeaders (0.68.2): + - React-Core/RCTNetworkHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTSettingsHeaders (0.68.2): + - React-Core/RCTSettingsHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTTextHeaders (0.68.2): + - React-Core/RCTTextHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTVibrationHeaders (0.68.2): + - React-Core/RCTVibrationHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTWebSocket (0.68.2): + - React-Core/RCTWebSocket (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-perflogger (= 0.68.2) + - React-Core/Default (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-CoreModules (0.68.2): + - React-CoreModules (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.2) - - React-Codegen (= 0.68.2) - - React-Core/CoreModulesHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - React-RCTImage (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-cxxreact (0.68.2): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/CoreModulesHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - React-RCTImage (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-cxxreact (0.69.4): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsinspector (= 0.68.2) - - React-logger (= 0.68.2) - - React-perflogger (= 0.68.2) - - React-runtimeexecutor (= 0.68.2) - - React-hermes (0.68.2): + - React-callinvoker (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsinspector (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - React-runtimeexecutor (= 0.69.4) + - React-hermes (0.69.4): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.06.28.00-v2) - RCT-Folly/Futures (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-jsiexecutor (= 0.68.2) - - React-jsinspector (= 0.68.2) - - React-perflogger (= 0.68.2) - - React-jsi (0.68.2): + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-jsinspector (= 0.69.4) + - React-perflogger (= 0.69.4) + - React-jsi (0.69.4): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.68.2) - - React-jsi/Default (0.68.2): + - React-jsi/Default (= 0.69.4) + - React-jsi/Default (0.69.4): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.68.2): + - React-jsiexecutor (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-perflogger (= 0.68.2) - - React-jsinspector (0.68.2) - - React-logger (0.68.2): + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-perflogger (= 0.69.4) + - React-jsinspector (0.69.4) + - React-logger (0.69.4): - glog - - react-native-blur (0.8.0): - - React + - react-native-blur (4.2.0): + - React-Core - react-native-blurhash (1.1.10): - React-Core - react-native-cameraroll (4.1.2): - React-Core - react-native-context-menu-view (1.5.4): - React + - react-native-image-picker (4.8.5): + - React-Core - react-native-language-detection (0.1.0): - React - - react-native-netinfo (9.0.0): + - react-native-netinfo (9.3.0): - React-Core - - react-native-pager-view (5.4.11): + - react-native-pager-view (5.4.25): - React-Core - - react-native-paste-input (0.4.2): + - react-native-paste-input (0.5.0): - React-Core - Swime (= 3.0.6) - react-native-safe-area-context (4.3.1): @@ -434,118 +430,114 @@ PODS: - ReactCommon/turbomodule/core - react-native-segmented-control (2.2.2): - React-Core - - React-perflogger (0.68.2) - - React-RCTActionSheet (0.68.2): - - React-Core/RCTActionSheetHeaders (= 0.68.2) - - React-RCTAnimation (0.68.2): + - React-perflogger (0.69.4) + - React-RCTActionSheet (0.69.4): + - React-Core/RCTActionSheetHeaders (= 0.69.4) + - React-RCTAnimation (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.2) - - React-Codegen (= 0.68.2) - - React-Core/RCTAnimationHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-RCTBlob (0.68.2): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTAnimationHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTBlob (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.2) - - React-Core/RCTBlobHeaders (= 0.68.2) - - React-Core/RCTWebSocket (= 0.68.2) - - React-jsi (= 0.68.2) - - React-RCTNetwork (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-RCTImage (0.68.2): + - React-Codegen (= 0.69.4) + - React-Core/RCTBlobHeaders (= 0.69.4) + - React-Core/RCTWebSocket (= 0.69.4) + - React-jsi (= 0.69.4) + - React-RCTNetwork (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTImage (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.2) - - React-Codegen (= 0.68.2) - - React-Core/RCTImageHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - React-RCTNetwork (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-RCTLinking (0.68.2): - - React-Codegen (= 0.68.2) - - React-Core/RCTLinkingHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-RCTNetwork (0.68.2): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTImageHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - React-RCTNetwork (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTLinking (0.69.4): + - React-Codegen (= 0.69.4) + - React-Core/RCTLinkingHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTNetwork (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.2) - - React-Codegen (= 0.68.2) - - React-Core/RCTNetworkHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-RCTSettings (0.68.2): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTNetworkHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTSettings (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.2) - - React-Codegen (= 0.68.2) - - React-Core/RCTSettingsHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-RCTText (0.68.2): - - React-Core/RCTTextHeaders (= 0.68.2) - - React-RCTVibration (0.68.2): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTSettingsHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTText (0.69.4): + - React-Core/RCTTextHeaders (= 0.69.4) + - React-RCTVibration (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.2) - - React-Core/RCTVibrationHeaders (= 0.68.2) - - React-jsi (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - React-runtimeexecutor (0.68.2): - - React-jsi (= 0.68.2) - - ReactCommon (0.68.2): - - React-logger (= 0.68.2) - - ReactCommon/react_debug_core (= 0.68.2) - - ReactCommon/turbomodule (= 0.68.2) - - ReactCommon/react_debug_core (0.68.2): - - React-logger (= 0.68.2) - - ReactCommon/turbomodule (0.68.2): + - React-Codegen (= 0.69.4) + - React-Core/RCTVibrationHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-runtimeexecutor (0.69.4): + - React-jsi (= 0.69.4) + - ReactCommon (0.69.4): + - React-logger (= 0.69.4) + - ReactCommon/react_debug_core (= 0.69.4) + - ReactCommon/turbomodule (= 0.69.4) + - ReactCommon/react_debug_core (0.69.4): + - React-logger (= 0.69.4) + - ReactCommon/turbomodule (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.2) - - React-Core (= 0.68.2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-logger (= 0.68.2) - - React-perflogger (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - ReactCommon/turbomodule/samples (= 0.68.2) - - ReactCommon/turbomodule/core (0.68.2): + - React-bridging (= 0.69.4) + - React-callinvoker (= 0.69.4) + - React-Core (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - ReactCommon/turbomodule/samples (= 0.69.4) + - ReactCommon/turbomodule/core (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.2) - - React-Core (= 0.68.2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-logger (= 0.68.2) - - React-perflogger (= 0.68.2) - - ReactCommon/turbomodule/samples (0.68.2): + - React-bridging (= 0.69.4) + - React-callinvoker (= 0.69.4) + - React-Core (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - ReactCommon/turbomodule/samples (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.2) - - React-Core (= 0.68.2) - - React-cxxreact (= 0.68.2) - - React-jsi (= 0.68.2) - - React-logger (= 0.68.2) - - React-perflogger (= 0.68.2) - - ReactCommon/turbomodule/core (= 0.68.2) - - RNCAsyncStorage (1.17.6): + - React-bridging (= 0.69.4) + - React-callinvoker (= 0.69.4) + - React-Core (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - RNCAsyncStorage (1.17.9): + - React-Core + - RNCClipboard (1.10.0): - React-Core - RNFastImage (8.5.11): - React-Core - - SDWebImage (~> 5.12.5) - - SDWebImageWebPCoder (~> 0.8.4) - - RNGestureHandler (2.4.2): + - SDWebImage (~> 5.13.2) + - SDWebImageWebPCoder (~> 0.9.0) + - RNGestureHandler (2.5.0): - React-Core - - RNImageCropPicker (0.37.3): - - React-Core - - React-RCTImage - - RNImageCropPicker/QBImagePickerController (= 0.37.3) - - TOCropViewController - - RNImageCropPicker/QBImagePickerController (0.37.3): - - React-Core - - React-RCTImage - - TOCropViewController - - RNReanimated (2.8.0): + - RNReanimated (2.9.1): - DoubleConversion - FBLazyVector - FBReactNativeSpec @@ -572,27 +564,26 @@ PODS: - React-RCTText - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.13.1): + - RNScreens (3.15.0): - React-Core - React-RCTImage - - RNSentry (3.4.3): + - RNSentry (4.2.3): - React-Core - - Sentry (= 7.11.0) - - RNShareMenu (5.0.5): + - Sentry (= 7.23.0) + - RNShareMenu (6.0.0): - React - - RNSVG (12.3.0): + - RNSVG (12.4.4): - React-Core - - SDWebImage (5.12.5): - - SDWebImage/Core (= 5.12.5) - - SDWebImage/Core (5.12.5) - - SDWebImageWebPCoder (0.8.4): + - SDWebImage (5.13.2): + - SDWebImage/Core (= 5.13.2) + - SDWebImage/Core (5.13.2) + - SDWebImageWebPCoder (0.9.0): - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.10) - - Sentry (7.11.0): - - Sentry/Core (= 7.11.0) - - Sentry/Core (7.11.0) + - SDWebImage/Core (~> 5.13) + - Sentry (7.23.0): + - Sentry/Core (= 7.23.0) + - Sentry/Core (7.23.0) - Swime (3.0.6) - - TOCropViewController (2.6.1) - Yoga (1.14.0) DEPENDENCIES: @@ -608,15 +599,12 @@ DEPENDENCIES: - EXFirebaseAnalytics (from `../node_modules/expo-firebase-analytics/ios`) - EXFirebaseCore (from `../node_modules/expo-firebase-core/ios`) - EXFont (from `../node_modules/expo-font/ios`) - - EXImageLoader (from `../node_modules/expo-image-loader/ios`) - EXJSONUtils (from `../node_modules/expo-json-utils/ios`) - EXManifests (from `../node_modules/expo-manifests/ios`) - EXNotifications (from `../node_modules/expo-notifications/ios`) - - Expo (from `../node_modules/expo/ios`) + - Expo (from `../node_modules/expo`) - ExpoCrypto (from `../node_modules/expo-crypto/ios`) - ExpoHaptics (from `../node_modules/expo-haptics/ios`) - - ExpoImageManipulator (from `../node_modules/expo-image-manipulator/ios`) - - ExpoImagePicker (from `../node_modules/expo-image-picker/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoLocalization (from `../node_modules/expo-localization/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core/ios`) @@ -633,16 +621,16 @@ DEPENDENCIES: - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (~> 0.11.0) + - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) - libevent (~> 2.1.12) - RCT-Folly (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/`) + - React-bridging (from `../node_modules/react-native/ReactCommon`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) - - React-Core/DevSupport (from `../node_modules/react-native/`) - 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`) @@ -655,6 +643,7 @@ DEPENDENCIES: - react-native-blurhash (from `../node_modules/react-native-blurhash`) - "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)" - react-native-context-menu-view (from `../node_modules/react-native-context-menu-view`) + - react-native-image-picker (from `../node_modules/react-native-image-picker`) - react-native-language-detection (from `../node_modules/react-native-language-detection`) - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - react-native-pager-view (from `../node_modules/react-native-pager-view`) @@ -674,9 +663,9 @@ DEPENDENCIES: - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" + - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - RNFastImage (from `../node_modules/react-native-fast-image`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - - RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`) - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - "RNSentry (from `../node_modules/@sentry/react-native`)" @@ -696,7 +685,6 @@ SPEC REPOS: - GoogleAppMeasurement - GoogleDataTransport - GoogleUtilities - - hermes-engine - libevent - libwebp - nanopb @@ -705,7 +693,6 @@ SPEC REPOS: - SDWebImageWebPCoder - Sentry - Swime - - TOCropViewController EXTERNAL SOURCES: boost: @@ -732,8 +719,6 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-firebase-core/ios" EXFont: :path: "../node_modules/expo-font/ios" - EXImageLoader: - :path: "../node_modules/expo-image-loader/ios" EXJSONUtils: :path: "../node_modules/expo-json-utils/ios" EXManifests: @@ -741,15 +726,11 @@ EXTERNAL SOURCES: EXNotifications: :path: "../node_modules/expo-notifications/ios" Expo: - :path: "../node_modules/expo/ios" + :path: "../node_modules/expo" ExpoCrypto: :path: "../node_modules/expo-crypto/ios" ExpoHaptics: :path: "../node_modules/expo-haptics/ios" - ExpoImageManipulator: - :path: "../node_modules/expo-image-manipulator/ios" - ExpoImagePicker: - :path: "../node_modules/expo-image-picker/ios" ExpoKeepAwake: :path: "../node_modules/expo-keep-awake/ios" ExpoLocalization: @@ -782,6 +763,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -790,6 +773,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/TypeSafety" React: :path: "../node_modules/react-native/" + React-bridging: + :path: "../node_modules/react-native/ReactCommon" React-callinvoker: :path: "../node_modules/react-native/ReactCommon/callinvoker" React-Codegen: @@ -818,6 +803,8 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-community/cameraroll" react-native-context-menu-view: :path: "../node_modules/react-native-context-menu-view" + react-native-image-picker: + :path: "../node_modules/react-native-image-picker" react-native-language-detection: :path: "../node_modules/react-native-language-detection" react-native-netinfo: @@ -856,12 +843,12 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" RNCAsyncStorage: :path: "../node_modules/@react-native-async-storage/async-storage" + RNCClipboard: + :path: "../node_modules/@react-native-clipboard/clipboard" RNFastImage: :path: "../node_modules/react-native-fast-image" RNGestureHandler: :path: "../node_modules/react-native-gesture-handler" - RNImageCropPicker: - :path: "../node_modules/react-native-image-crop-picker" RNReanimated: :path: "../node_modules/react-native-reanimated" RNScreens: @@ -878,108 +865,106 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: ASN1Decoder: 6110fdeacfdb41559b1481457a1645be716610aa boost: a7c83b31436843459a1961bfd74b96033dc77234 - DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - EASClient: 93565f4d024559b75eac62bc7d50acaa354614f6 - EXApplication: d6562af1204162e0ac46d341a7d4e5dc720b33de - EXAV: 88f61c5af8415715b7ee51f084c1020235b85c56 - EXConstants: fdbe52259365b6a6faaa5e99a3b82cfa6bc2eb61 - EXDevice: 0115b360059ccd32c1701744e374e3259ffbdd3c - EXErrorRecovery: 3ce46e5d42e53c0371ff048a7f0cbc959968ef4a - EXFileSystem: 2aa2d9289f84bca9532b9ccbd81504fa31eb1ded - EXFirebaseAnalytics: aeefc63f92277313c3ee86da6a7ecf892f345ed1 - EXFirebaseCore: bdfa87df74fa1b74a6b38957561456aabad28a4f - EXFont: 04235cc22e6fef86028feb67db452978dc6f240f - EXImageLoader: b88e053d760f85a82405b1db2de4abf11978fc9f + DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 + EASClient: a2581835cf9b97d0defd5d630fc6eb1bf77045e7 + EXApplication: e418d737a036e788510f2c4ad6c10a7d54d18586 + EXAV: 596506c9bee54ad52f2f3b625cdaeb9d9f2dd6b7 + EXConstants: 75c40827af38bd6bfcf69f880a5b45037eeff9c9 + EXDevice: 7647ca9b1fd8b269dfd896a7643d659343358054 + EXErrorRecovery: 74d71ee59f6814315457b09d68e86aa95cc7d05d + EXFileSystem: 927e0a8885aa9c49e50fc38eaba2c2389f2f1019 + EXFirebaseAnalytics: 15c5f2d5bae6668ecb1104f98b2b74a2d9fd3740 + EXFirebaseCore: 9ee5a9691a8480f0fbaeb7f3cd135f256d436fdf + EXFont: a5d80bd9b3452b2d5abbce2487da89b0150e6487 EXJSONUtils: 2a74b8f40f1523cc3f92af99c91aa78201737a77 - EXManifests: 0c6134b7b6f3236a93a778c3f44ba1cfb3f9fa3d - EXNotifications: ea9fc56d27d1fee229489c5d8f452c7f367c237e - Expo: b9fff0a1eac0f424fc68ea49b4347fb308e52e17 - ExpoCrypto: d0d0f3e20875dc450b4ec88f0fb608da5c2c6c17 - ExpoHaptics: ad58ec96a25e57579c14a47c7d71f0de0de8656a - ExpoImageManipulator: b55580bbc7b10099c7707949903e7176a8542ee8 - ExpoImagePicker: d9d6b4f29db437fc7796f13cee5f133f5b4b5f7c - ExpoKeepAwake: c0c494b442ecd8122974c13b93ccfb57bd408e88 - ExpoLocalization: 8f619bb6eec64575cd5220bfabbd7b4e2d6f33f8 - ExpoModulesCore: e4278a668e8c13c0269ed8b8a4200989deea2973 - ExpoRandom: 14df0976aa363a71a730ceb7655250f3047c0e42 - ExpoWebBrowser: 4b5f9633e5f169dc948587cb6d26d2d1d1406187 - EXScreenCapture: cbee2204f313038a1819d31ad99a31e15f8e0f59 - EXSecureStore: aaae919d83aec2faf031e99398807edac0313285 - EXSplashScreen: 34f460788db8d682883871708dddbfac72095bb7 - EXStoreReview: e61fbd500624ee7363ab134ee247cff380a8b254 + EXManifests: b38dc61303f5eede990b4c8ecbfac32f82160e65 + EXNotifications: 9a2aa201deb19dfe1dbe0e370eeb2922de0d2422 + Expo: 8cb51419dfec611e6125e09384669eb71d3c4c6d + ExpoCrypto: e534314db0e1a17ae12b5140d529bd0c5efcbc6a + ExpoHaptics: efe9e68e9dfe0d15c183c0c70a25f3874124ab9e + ExpoKeepAwake: 0e8f18142e71bbf2c7f6aa66ebed249ba1420320 + ExpoLocalization: 63204f4b9d4f653469d266332ceaa6c6ac8a305d + ExpoModulesCore: 8303cc952788be09fc6eab62815d257016ae6dec + ExpoRandom: f9f1faa299a40733867f344d6b7bfa2d1f4ab04d + ExpoWebBrowser: 5804ac42a8269d0e534bc4461993005f72535649 + EXScreenCapture: 23de056fdb02edd1fb8f147b0fd198c6d5cada3d + EXSecureStore: ac4b3c89dd5810528074d9422d5fed5a9e684467 + EXSplashScreen: 31ab6df6d23e97e074d1330224741979943f1d82 + EXStoreReview: cbb6b2202bb6f831cd3234d9d8b995cec0eb32f2 EXStructuredHeaders: 5d86829469399370a9fc7cb1e4391b09de87681d - EXUpdates: 08d69031f9ed1e918d50f041fa505fe67d6b4809 - EXUpdatesInterface: 0b101ace1dbfa0f64260a5df31c71d03c66cca54 - EXVideoThumbnails: 19e055dc3245b53c536da9e0ef9c618fd2118297 - FBLazyVector: a7a655862f6b09625d11c772296b01cd5164b648 - FBReactNativeSpec: 81ce99032d5b586fddd6a38d450f8595f7e04be4 + EXUpdates: 784c8c593f6649d0640e81cede66613703e3c267 + EXUpdatesInterface: 2bbc11815dfa2ec3fc02e5534c7592c6b42b5327 + EXVideoThumbnails: 486533e1a66c9859f9b9e3b2e1f9f0b275515b48 + FBLazyVector: c71b8c429a8af2aff1013934a7152e9d9d0c937d + FBReactNativeSpec: cb0df4f0084281b394f76bb9b4d1d9540f35963f Firebase: 7e8fe528c161b9271d365217a74c16aaf834578e FirebaseAnalytics: 2fc3876e2eb347673ad2f35e249ae7b15d6c88f5 FirebaseCore: b84a44ee7ba999e0f9f76d198a9c7f60a797b848 FirebaseCoreDiagnostics: 92e07a649aeb66352b319d43bdd2ee3942af84cb FirebaseInstallations: 40bd9054049b2eae9a2c38ef1c3dd213df3605cd fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 476ee3e89abb49e07f822b48323c51c57124b572 + glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a GoogleAppMeasurement: 71156240babd3cc6ced03e0d54816f01a880c730 - GoogleDataTransport: 5fffe35792f8b96ec8d6775f5eccd83c998d5a3b + GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 - hermes-engine: 84e3af1ea01dd7351ac5d8689cbbea1f9903ffc3 + hermes-engine: 761a544537e62df2a37189389b9d2654dc1f75af libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc + libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 - PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72 - RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 - RCTRequired: 3e917ea5377751094f38145fdece525aa90545a0 - RCTTypeSafety: c43c072a4bd60feb49a9570b0517892b4305c45e - React: 176dd882de001854ced260fad41bb68a31aa4bd0 - React-callinvoker: c2864d1818d6e64928d2faf774a3800dfc38fe1f - React-Codegen: 98b6f97f0a7abf7d67e4ce435c77c05b7a95cf05 - React-Core: fdaa2916b1c893f39f02cff0476d1fb0cab1e352 - React-CoreModules: fd8705b80699ec36c2cdd635c2ce9d874b9cfdfc - React-cxxreact: 1832d971f7b0cb2c7b943dc0ec962762c90c906e - React-hermes: 14e0ea3ce4b44bb3ac7663d96d0e3e28857f7b62 - React-jsi: 72af715135abe8c3f0dcf3b2548b71d048b69a7e - React-jsiexecutor: b7b553412f2ec768fe6c8f27cd6bafdb9d8719e6 - React-jsinspector: c5989c77cb89ae6a69561095a61cce56a44ae8e8 - React-logger: a0833912d93b36b791b7a521672d8ee89107aff1 - react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c + PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb + RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a + RCTRequired: bd9d2ab0fda10171fcbcf9ba61a7df4dc15a28f4 + RCTTypeSafety: e44e139bf6ec8042db396201834fc2372f6a21cd + React: 482cd1ba23c471be1aed3800180be2427418d7be + React-bridging: c2ea4fed6fe4ed27c12fd71e88b5d5d3da107fde + React-callinvoker: d4d1f98163fb5e35545e910415ef6c04796bb188 + React-Codegen: ff35fb9c7f6ec2ed34fb6de2e1099d88dfb25f2f + React-Core: 4d3443a45b67c71d74d7243ddde9569d1e4f4fad + React-CoreModules: 70be25399366b5632ab18ecf6fe444a8165a7bea + React-cxxreact: 822d3794fc0bf206f4691592f90e086dd4f92228 + React-hermes: 7f67b8363288258c3b0cd4aef5975cb7f0b9549a + React-jsi: ffa51cbc9a78cc156cf61f79ed52ecb76dc6013b + React-jsiexecutor: a27badbbdbc0ff781813370736a2d1c7261181d4 + React-jsinspector: 8a3d3f5dcd23a91e8c80b1bf0e96902cd1dca999 + React-logger: 1088859f145b8f6dd0d3ed051a647ef0e3e80fad + react-native-blur: 3e9c8e8e9f7d17fa1b94e1a0ae9fd816675f5382 react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7 react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866 react-native-context-menu-view: b0beca02aad4bd9f9d7d932bf437e0a03baa69ef + react-native-image-picker: cd420f97f6ed6ff74fc4686d27dbcfdbd051db91 react-native-language-detection: 0e43195ad014974f1b7a31b64820eff34a243f2d - react-native-netinfo: 5b664b2945a8f02102b296f0f812bddd6827ed9c - react-native-pager-view: 7f00d63688f7df9fad86dfb0154814419cc5eb8d - react-native-paste-input: efbf0b08fa1673f0e3131da6ea01678c1bb8003e + react-native-netinfo: 129bd99f607a2dc5bb096168f3e5c150fd1f1c95 + react-native-pager-view: da490aa1f902c9a5aeecf0909cc975ad0e92e53e + react-native-paste-input: 3037f113267c367e863790bcfd57cdb3ace3cad6 react-native-safe-area-context: 6c12e3859b6f27b25de4fee8201cfb858432d8de react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097 - React-perflogger: a18b4f0bd933b8b24ecf9f3c54f9bf65180f3fe6 - React-RCTActionSheet: 547fe42fdb4b6089598d79f8e1d855d7c23e2162 - React-RCTAnimation: bc9440a1c37b06ae9ebbb532d244f607805c6034 - React-RCTBlob: a1295c8e183756d7ef30ba6e8f8144dfe8a19215 - React-RCTImage: a30d1ee09b1334067fbb6f30789aae2d7ac150c9 - React-RCTLinking: ffc6d5b88d1cb9aca13c54c2ec6507fbf07f2ac4 - React-RCTNetwork: f807a2facab6cf5cf36d592e634611de9cf12d81 - React-RCTSettings: 861806819226ed8332e6a8f90df2951a34bb3e7f - React-RCTText: f3fb464cc41a50fc7a1aba4deeb76a9ad8282cb9 - React-RCTVibration: 79040b92bfa9c3c2d2cb4f57e981164ec7ab9374 - React-runtimeexecutor: b960b687d2dfef0d3761fbb187e01812ebab8b23 - ReactCommon: 095366164a276d91ea704ce53cb03825c487a3f2 - RNCAsyncStorage: 466b9df1a14bccda91da86e0b7d9a345d78e1673 - RNFastImage: 945abf54742505d790d9024d230c69b1e866bc88 - RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f - RNImageCropPicker: 44e2807bc410741f35d4c45b6586aedfe3da39d2 - RNReanimated: 64573e25e078ae6bec03b891586d50b9ec284393 - RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19 - RNSentry: 85f6525b5fe8d2ada065858026b338605b3c09da - RNShareMenu: c69282e50ac439737a86949a55c7b023b90027c8 - RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8 - SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e - SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815 - Sentry: 0c5cd63d714187b4a39c331c1f0eb04ba7868341 + React-perflogger: cb386fd44c97ec7f8199c04c12b22066b0f2e1e0 + React-RCTActionSheet: f803a85e46cf5b4066c2ac5e122447f918e9c6e5 + React-RCTAnimation: 19c80fa950ccce7f4db76a2a7f2cf79baae07fc7 + React-RCTBlob: f36ab97e2d515c36df14a1571e50056be80413d5 + React-RCTImage: 2c8f0a329a116248e82f8972ffe806e47c6d1cfa + React-RCTLinking: 670f0223075aff33be3b89714f1da4f5343fc4af + React-RCTNetwork: 09385b73f4ff1f46bd5d749540fb33f69a7e5908 + React-RCTSettings: 33b12d3ac7a1f2eba069ec7bd1b84345263b3bbe + React-RCTText: a1a3ea902403bd9ae4cf6f7960551dc1d25711b5 + React-RCTVibration: 9adb4a3cbb598d1bbd46a05256f445e4b8c70603 + React-runtimeexecutor: 61ee22a8cdf8b6bb2a7fb7b4ba2cc763e5285196 + ReactCommon: 8f67bd7e0a6afade0f20718f859dc8c2275f2e83 + RNCAsyncStorage: b2489b49e38c85e10ed45a888d13a2a4c7b32ea1 + RNCClipboard: f1736c75ab85b627a4d57587edb4b60999c4dd80 + RNFastImage: 8e9b5b9e6df94d2e359c0a75a4745ad1311506fd + RNGestureHandler: bad495418bcbd3ab47017a38d93d290ebd406f50 + RNReanimated: 2cf7451318bb9cc430abeec8d67693f9cf4e039c + RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 + RNSentry: 6798624706227656d942849d593f89c8ca3bdde5 + RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3 + RNSVG: ecd661f380a07ba690c9c5929c475a44f432d674 + SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866 + SDWebImageWebPCoder: 3dc350894112feab5375cfba9ce0986544a66a69 + Sentry: a0d4563fa4ddacba31fdcc35daaa8573d87224d6 Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b - TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 - Yoga: 99652481fcd320aefa4a7ef90095b95acd181952 + Yoga: ff994563b2fd98c982ca58e8cd9db2cdaf4dda74 -PODFILE CHECKSUM: d6d20fa7c51228cebc309aed987ed7d8f4274844 +PODFILE CHECKSUM: 1bdd264ade2cc3cb3c6ac518ee1cb89d04e7a9ac COCOAPODS: 1.11.3 diff --git a/ios/tooot.xcodeproj/project.pbxproj b/ios/tooot.xcodeproj/project.pbxproj index d4f2fab3..7bca145e 100644 --- a/ios/tooot.xcodeproj/project.pbxproj +++ b/ios/tooot.xcodeproj/project.pbxproj @@ -72,7 +72,7 @@ AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = tooot/SplashScreen.storyboard; sourceTree = ""; }; B96B72E5384D44A7B240B27E /* GoogleService-Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "tooot/GoogleService-Info.plist"; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; - DF8133F098604A10B0D94952 /* boop.mp3 */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = boop.mp3; path = tooot/boop.mp3; sourceTree = ""; }; + DF8133F098604A10B0D94952 /* boop.mp3 */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = boop.mp3; path = tooot/boop.mp3; sourceTree = ""; }; E613A80A28282A01003C97D6 /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = tooot/AppDelegate.mm; sourceTree = ""; }; E633A420281EAEAB000E540F /* ShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; E633A427281EAEAB000E540F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -333,13 +333,15 @@ files = ( ); inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", ); name = "Bundle React Native code and images"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n../node_modules/expo-constants/scripts/get-app-config-ios.sh\n"; + shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -390,17 +392,13 @@ "${PODS_ROOT}/Target Support Files/Pods-tooot/Pods-tooot-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -524,7 +522,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-tooot.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = tooot/tooot.entitlements; @@ -533,13 +530,12 @@ CURRENT_PROJECT_VERSION = 2102022230; DEVELOPMENT_TEAM = 8EGBLQ2MA6; ENABLE_BITCODE = NO; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "FB_SONARKIT_ENABLED=1", ); INFOPLIST_FILE = tooot/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -564,7 +560,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-tooot.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = tooot/tooot.entitlements; @@ -572,9 +567,8 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 2102022230; DEVELOPMENT_TEAM = 8EGBLQ2MA6; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; INFOPLIST_FILE = tooot/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -599,7 +593,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -644,15 +638,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; - LIBRARY_SEARCH_PATHS = ( - "$(SDKROOT)/usr/lib/swift", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); + LIBRARY_SEARCH_PATHS = "\"\""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -662,7 +653,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -700,14 +691,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; - LIBRARY_SEARCH_PATHS = ( - "$(SDKROOT)/usr/lib/swift", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); + LIBRARY_SEARCH_PATHS = "\"\""; MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = NO; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; @@ -736,7 +725,7 @@ INFOPLIST_FILE = ShareExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = ShareExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; MARKETING_VERSION = 1.0; @@ -781,7 +770,7 @@ INFOPLIST_FILE = ShareExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = ShareExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; MARKETING_VERSION = 1.0; diff --git a/ios/tooot/AppDelegate.mm b/ios/tooot/AppDelegate.mm index b099d8b1..50f14335 100644 --- a/ios/tooot/AppDelegate.mm +++ b/ios/tooot/AppDelegate.mm @@ -19,6 +19,8 @@ #import +static NSString *const kRNConcurrentRoot = @"concurrentRoot"; + @interface AppDelegate () { RCTTurboModuleManager *_turboModuleManager; RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; @@ -46,6 +48,9 @@ UIView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil]; + // NSDictionary *initProps = [self prepareInitialProps]; + // UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"tooot", initProps); + if (@available(iOS 13.0, *)) { rootView.backgroundColor = [UIColor colorNamed:@"SplashScreenBackgroundColor"]; } else { @@ -61,6 +66,25 @@ return YES; } +/// 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` feture is enabled. Otherwise, it returns `false`. +- (BOOL)concurrentRootEnabled +{ + // Switch this bool to turn on and off the concurrent root + return false; +} +- (NSDictionary *)prepareInitialProps +{ + NSMutableDictionary *initProps = [NSMutableDictionary new]; +#ifdef RCT_NEW_ARCH_ENABLED + initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); +#endif + return initProps; +} + - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG diff --git a/ios/tooot/Supporting/Expo.plist b/ios/tooot/Supporting/Expo.plist index ab06f3de..8c6922ef 100644 --- a/ios/tooot/Supporting/Expo.plist +++ b/ios/tooot/Supporting/Expo.plist @@ -9,10 +9,10 @@ EXUpdatesLaunchWaitMs 0 EXUpdatesReleaseChannel - 0-development - EXUpdatesSDKVersion + development + EXUpdatesRuntimeVersion 0 EXUpdatesURL - https://exp.host/@xmflsct/tooot + https://u.expo.dev/3288313f-3ff0-496a-a5a9-d8985e7cad5f \ No newline at end of file diff --git a/package.json b/package.json index 7a36b871..b207fb2d 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,9 @@ { "name": "tooot", "versions": { - "native": "220603", "major": 4, - "minor": 1, - "patch": 6, - "expo": "45.0.0" + "minor": 2, + "patch": 0 }, "description": "tooot app for Mastodon", "author": "xmflsct ", @@ -20,138 +18,110 @@ "iphone": "react-native run-ios", "ipad": "react-native run-ios --simulator 'iPad mini (6th generation)'", "app:build": "bundle exec fastlane", - "release": "scripts/release.sh", "clean": "react-native-clean-project", "postinstall": "patch-package" }, "dependencies": { - "@expo/react-native-action-sheet": "3.13.0", - "@formatjs/intl-datetimeformat": "^6.0.2", + "@expo/react-native-action-sheet": "^3.13.0", + "@formatjs/intl-datetimeformat": "^6.0.3", "@formatjs/intl-getcanonicallocales": "^2.0.2", - "@formatjs/intl-locale": "^3.0.2", - "@formatjs/intl-numberformat": "^8.0.2", - "@formatjs/intl-pluralrules": "^5.0.2", - "@formatjs/intl-relativetimeformat": "^11.0.2", - "@mattermost/react-native-paste-input": "^0.4.2", - "@neverdull-agency/expo-unlimited-secure-store": "1.0.10", - "@react-native-async-storage/async-storage": "1.17.6", - "@react-native-community/blur": "3.6.0", - "@react-native-community/cameraroll": "4.1.2", - "@react-native-community/netinfo": "9.0.0", - "@react-native-community/segmented-control": "2.2.2", - "@react-navigation/bottom-tabs": "6.3.1", - "@react-navigation/native": "6.0.10", - "@react-navigation/native-stack": "6.6.2", - "@react-navigation/stack": "6.2.1", - "@reduxjs/toolkit": "1.8.2", - "@sentry/react-native": "3.4.3", - "@sharcoux/slider": "6.0.3", - "axios": "0.27.2", - "expo": "45.0.5", - "expo-auth-session": "3.6.1", - "expo-av": "11.2.3", - "expo-constants": "^13.1.1", - "expo-crypto": "10.2.0", - "expo-device": "4.2.0", - "expo-file-system": "14.0.0", - "expo-firebase-analytics": "7.0.0", - "expo-haptics": "11.2.0", - "expo-image-manipulator": "^10.3.1", - "expo-image-picker": "13.1.1", - "expo-linking": "3.1.0", - "expo-localization": "13.0.0", - "expo-notifications": "0.15.2", - "expo-random": "12.2.0", - "expo-screen-capture": "4.2.0", - "expo-secure-store": "11.2.0", - "expo-splash-screen": "0.15.1", - "expo-store-review": "5.2.0", - "expo-updates": "0.13.2", - "expo-video-thumbnails": "6.3.0", - "expo-web-browser": "10.2.1", - "i18next": "21.8.8", - "li": "1.3.0", - "lodash": "4.17.21", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-i18next": "11.17.0", - "react-intl": "^6.0.4", - "react-native": "0.68.2", - "react-native-animated-spinkit": "1.5.2", + "@formatjs/intl-locale": "^3.0.3", + "@formatjs/intl-numberformat": "^8.0.4", + "@formatjs/intl-pluralrules": "^5.0.3", + "@formatjs/intl-relativetimeformat": "^11.0.3", + "@mattermost/react-native-paste-input": "^0.5.0", + "@neverdull-agency/expo-unlimited-secure-store": "^1.0.10", + "@react-native-async-storage/async-storage": "^1.17.9", + "@react-native-clipboard/clipboard": "^1.10.0", + "@react-native-community/blur": "^4.2.0", + "@react-native-community/cameraroll": "^4.1.2", + "@react-native-community/netinfo": "^9.3.0", + "@react-native-community/segmented-control": "^2.2.2", + "@react-navigation/bottom-tabs": "^6.3.2", + "@react-navigation/native": "^6.0.11", + "@react-navigation/native-stack": "^6.7.0", + "@react-navigation/stack": "^6.2.2", + "@reduxjs/toolkit": "^1.8.4", + "@sentry/react-native": "^4.2.2", + "@sharcoux/slider": "^6.0.3", + "axios": "^0.27.2", + "expo": "^46.0.7", + "expo-auth-session": "^3.7.1", + "expo-av": "^12.0.4", + "expo-constants": "^13.2.3", + "expo-crypto": "^11.0.0", + "expo-device": "^4.3.0", + "expo-file-system": "^14.1.0", + "expo-firebase-analytics": "^7.1.1", + "expo-haptics": "^11.3.0", + "expo-linking": "^3.2.2", + "expo-localization": "^13.1.0", + "expo-notifications": "^0.16.1", + "expo-random": "^12.3.0", + "expo-screen-capture": "^4.3.0", + "expo-secure-store": "^11.3.0", + "expo-splash-screen": "^0.16.1", + "expo-store-review": "^5.3.0", + "expo-updates": "^0.14.4", + "expo-video-thumbnails": "^6.4.0", + "expo-web-browser": "^11.0.0", + "i18next": "^21.9.0", + "li": "^1.3.0", + "lodash": "^4.17.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^11.18.3", + "react-intl": "^6.0.5", + "react-native": "^0.69.4", + "react-native-animated-spinkit": "^1.5.2", "react-native-base64": "^0.2.1", - "react-native-blurhash": "1.1.10", + "react-native-blurhash": "^1.1.10", "react-native-context-menu-view": "xmflsct/react-native-context-menu-view", - "react-native-fast-image": "8.5.11", - "react-native-feather": "1.1.2", - "react-native-flash-message": "0.2.1", - "react-native-gesture-handler": "2.4.2", - "react-native-htmlview": "0.16.0", - "react-native-image-crop-picker": "^0.37.3", + "react-native-fast-image": "^8.5.11", + "react-native-feather": "^1.1.2", + "react-native-flash-message": "^0.3.1", + "react-native-gesture-handler": "^2.5.0", + "react-native-htmlview": "^0.16.0", + "react-native-image-picker": "^4.8.5", "react-native-language-detection": "^0.1.0", - "react-native-pager-view": "5.4.11", - "react-native-reanimated": "2.8.0", - "react-native-safe-area-context": "4.3.1", - "react-native-screens": "3.13.1", - "react-native-share-menu": "^5.0.5", - "react-native-svg": "12.3.0", - "react-native-swipe-list-view": "3.2.9", - "react-native-tab-view": "3.1.1", - "react-query": "3.39.1", - "react-redux": "8.0.2", - "redux-persist": "6.0.0", - "rn-placeholder": "3.0.3", - "sentry-expo": "4.2.0", - "tslib": "2.4.0", - "valid-url": "1.0.9" + "react-native-pager-view": "^5.4.25", + "react-native-reanimated": "^2.9.1", + "react-native-safe-area-context": "^4.3.1", + "react-native-screens": "^3.15.0", + "react-native-share-menu": "^6.0.0", + "react-native-svg": "^12.4.4", + "react-native-swipe-list-view": "^3.2.9", + "react-native-tab-view": "^3.1.1", + "react-query": "^3.39.2", + "react-redux": "^8.0.2", + "redux-persist": "^6.0.0", + "rn-placeholder": "^3.0.3", + "sentry-expo": "^5.0.2", + "tslib": "^2.4.0", + "valid-url": "^1.0.9" }, "devDependencies": { - "@babel/core": "7.18.2", - "@babel/plugin-proposal-optional-chaining": "7.17.12", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "7.17.12", - "@expo/config": "6.0.24", - "@types/lodash": "4.14.182", - "@types/react": "17.0.43", - "@types/react-dom": "17.0.14", - "@types/react-native": "0.67.8", + "@babel/core": "^7.18.10", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@expo/config": "^7.0.1", + "@types/lodash": "^4.14.182", + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@types/react-native": "^0.69.5", "@types/react-native-base64": "^0.2.0", "@types/react-native-share-menu": "^5.0.2", - "@types/react-timeago": "4.1.3", - "@types/valid-url": "1.0.3", - "@welldone-software/why-did-you-render": "7.0.1", - "babel-plugin-module-resolver": "4.1.0", - "babel-plugin-transform-remove-console": "6.9.4", - "chalk": "4.1.2", - "dotenv": "16.0.1", - "patch-package": "6.4.7", - "postinstall-postinstall": "2.1.0", - "react-native-clean-project": "4.0.1", - "typescript": "4.7.3" - }, - "resolutions": { - "@types/react": "17.0.43", - "@types/react-dom": "17.0.14" - }, - "expo": { - "autolinking": { - "ios": { - "exclude": [ - "expo-application", - "expo-font", - "expo-keep-awake" - ] - }, - "android": { - "exclude": [ - "expo-application", - "expo-firebase-analytics", - "expo-firebase-core", - "expo-font", - "expo-keep-awake", - "expo-store-review", - "react-native-reanimated" - ] - } - } + "@types/react-timeago": "^4.1.3", + "@types/valid-url": "^1.0.3", + "@welldone-software/why-did-you-render": "^7.0.1", + "babel-plugin-module-resolver": "^4.1.0", + "babel-plugin-transform-remove-console": "^6.9.4", + "chalk": "^4.1.2", + "dotenv": "^16.0.1", + "patch-package": "^6.4.7", + "postinstall-postinstall": "^2.1.0", + "react-native-clean-project": "^4.0.1", + "typescript": "^4.7.4" } } \ No newline at end of file diff --git a/patches/expo-modules-core+0.11.3.patch b/patches/expo-modules-core+0.11.3.patch new file mode 100644 index 00000000..73d83135 --- /dev/null +++ b/patches/expo-modules-core+0.11.3.patch @@ -0,0 +1,27 @@ +diff --git a/node_modules/expo-modules-core/android/build.gradle b/node_modules/expo-modules-core/android/build.gradle +index a57c367..13b4427 100644 +--- a/node_modules/expo-modules-core/android/build.gradle ++++ b/node_modules/expo-modules-core/android/build.gradle +@@ -422,18 +422,16 @@ task prepareFolly(dependsOn: [downloadFolly], type: Copy) { + } + // END FOLLy + +-task prepareHermes() { ++task prepareHermes(dependsOn: createNativeDepsDirectories, type: Copy) { + if (!FOR_HERMES) { + return + } + + def soFiles = zipTree(HERMES_AAR).matching({ it.include "**/*.so" }) + +- copy { +- from soFiles +- from "$REACT_NATIVE_DIR/ReactAndroid/src/main/jni/first-party/hermes/Android.mk" +- into "$thirdPartyNdkDir/hermes" +- } ++ from soFiles ++ from "$REACT_NATIVE_DIR/ReactAndroid/src/main/jni/first-party/hermes/Android.mk" ++ into "$thirdPartyNdkDir/hermes" + } + + task prepareThirdPartyNdkHeaders(dependsOn: [prepareBoost, prepareDoubleConversion, prepareFolly, prepareHermes]) {} diff --git a/patches/react-native-fast-image+8.5.11.patch b/patches/react-native-fast-image+8.5.11.patch index 1c11bf6d..a2347146 100644 --- a/patches/react-native-fast-image+8.5.11.patch +++ b/patches/react-native-fast-image+8.5.11.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/react-native-fast-image/RNFastImage.podspec b/node_modules/react-native-fast-image/RNFastImage.podspec -index db0fada..54d8d5b 100644 +index db0fada..9379119 100644 --- a/node_modules/react-native-fast-image/RNFastImage.podspec +++ b/node_modules/react-native-fast-image/RNFastImage.podspec @@ -16,6 +16,6 @@ Pod::Spec.new do |s| @@ -7,8 +7,9 @@ index db0fada..54d8d5b 100644 s.dependency 'React-Core' - s.dependency 'SDWebImage', '~> 5.11.1' -+ s.dependency 'SDWebImage', '~> 5.12.5' - s.dependency 'SDWebImageWebPCoder', '~> 0.8.4' +- s.dependency 'SDWebImageWebPCoder', '~> 0.8.4' ++ s.dependency 'SDWebImage', '~> 5.13.2' ++ s.dependency 'SDWebImageWebPCoder', '~> 0.9.0' end diff --git a/node_modules/react-native-fast-image/android/build.gradle b/node_modules/react-native-fast-image/android/build.gradle index 5b21cd5..19d82f8 100644 diff --git a/patches/react-native-htmlview+0.16.0.patch b/patches/react-native-htmlview+0.16.0.patch new file mode 100644 index 00000000..7e8380ea --- /dev/null +++ b/patches/react-native-htmlview+0.16.0.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native-htmlview/HTMLView.js b/node_modules/react-native-htmlview/HTMLView.js +index 43f8b7e..728112b 100644 +--- a/node_modules/react-native-htmlview/HTMLView.js ++++ b/node_modules/react-native-htmlview/HTMLView.js +@@ -1,7 +1,7 @@ + import React, {PureComponent} from 'react'; + import PropTypes from 'prop-types'; + import htmlToElement from './htmlToElement'; +-import {Linking, Platform, StyleSheet, View, ViewPropTypes} from 'react-native'; ++import {Linking, Platform, StyleSheet, View} from 'react-native'; + + const boldStyle = {fontWeight: 'bold'}; + const italicStyle = {fontStyle: 'italic'}; +@@ -146,7 +146,7 @@ HtmlView.propTypes = { + renderNode: PropTypes.func, + RootComponent: PropTypes.func, + rootComponentProps: PropTypes.object, +- style: ViewPropTypes.style, ++ style: PropTypes.any, + stylesheet: PropTypes.object, + TextComponent: PropTypes.func, + textComponentProps: PropTypes.object, diff --git a/patches/react-native-share-menu+5.0.5.patch b/patches/react-native-share-menu+5.0.5.patch deleted file mode 100644 index f8e40599..00000000 --- a/patches/react-native-share-menu+5.0.5.patch +++ /dev/null @@ -1,501 +0,0 @@ -diff --git a/node_modules/react-native-share-menu/ios/Constants.swift b/node_modules/react-native-share-menu/ios/Constants.swift -index 2811008..08385b7 100644 ---- a/node_modules/react-native-share-menu/ios/Constants.swift -+++ b/node_modules/react-native-share-menu/ios/Constants.swift -@@ -23,7 +23,7 @@ public let COULD_NOT_PARSE_IMG_ERROR = "Couldn't parse image" - public let COULD_NOT_SAVE_FILE_ERROR = "Couldn't save file on disk" - public let NO_EXTENSION_CONTEXT_ERROR = "No extension context attached" - public let NO_DELEGATE_ERROR = "No ReactShareViewDelegate attached" --public let COULD_NOT_FIND_ITEM_ERROR = "Couldn't find item attached to this share" -+public let COULD_NOT_FIND_ITEMS_ERROR = "Couldn't find items attached to this share" - - // MARK: Keys - -diff --git a/node_modules/react-native-share-menu/ios/Modules/ShareMenu.swift b/node_modules/react-native-share-menu/ios/Modules/ShareMenu.swift -index 6c4922a..74badda 100644 ---- a/node_modules/react-native-share-menu/ios/Modules/ShareMenu.swift -+++ b/node_modules/react-native-share-menu/ios/Modules/ShareMenu.swift -@@ -9,7 +9,7 @@ class ShareMenu: RCTEventEmitter { - } - } - -- var sharedData: [String:String]? -+ var sharedData: [[String:String]?]? - - static var initialShare: (UIApplication, URL, [UIApplication.OpenURLOptionsKey : Any])? - -@@ -91,7 +91,7 @@ class ShareMenu: RCTEventEmitter { - - let extraData = userDefaults.object(forKey: USER_DEFAULTS_EXTRA_DATA_KEY) as? [String:Any] - -- if let data = userDefaults.object(forKey: USER_DEFAULTS_KEY) as? [String:String] { -+ if let data = userDefaults.object(forKey: USER_DEFAULTS_KEY) as? [[String:String]] { - sharedData = data - dispatchEvent(with: data, and: extraData) - userDefaults.removeObject(forKey: USER_DEFAULTS_KEY) -@@ -100,25 +100,22 @@ class ShareMenu: RCTEventEmitter { - - @objc(getSharedText:) - func getSharedText(callback: RCTResponseSenderBlock) { -- guard var data: [String:Any] = sharedData else { -- callback([]) -- return -- } -+ var data = [DATA_KEY: sharedData] as [String: Any] - - if let bundleId = Bundle.main.bundleIdentifier, let userDefaults = UserDefaults(suiteName: "group.\(bundleId)") { -- data[EXTRA_DATA_KEY] = userDefaults.object(forKey: USER_DEFAULTS_EXTRA_DATA_KEY) as? [String:Any] -+ data[EXTRA_DATA_KEY] = userDefaults.object(forKey: USER_DEFAULTS_EXTRA_DATA_KEY) as? [String: Any] - } else { - print("Error: \(NO_APP_GROUP_ERROR)") - } - - callback([data as Any]) -- sharedData = nil -+ sharedData = [] - } - -- func dispatchEvent(with data: [String:String], and extraData: [String:Any]?) { -+ func dispatchEvent(with data: [[String:String]], and extraData: [String:Any]?) { - guard hasListeners else { return } - -- var finalData = data as [String:Any] -+ var finalData = [DATA_KEY: data] as [String: Any] - if (extraData != nil) { - finalData[EXTRA_DATA_KEY] = extraData - } -diff --git a/node_modules/react-native-share-menu/ios/Modules/ShareMenuReactView.swift b/node_modules/react-native-share-menu/ios/Modules/ShareMenuReactView.swift -index 5d21773..0c7eaa7 100644 ---- a/node_modules/react-native-share-menu/ios/Modules/ShareMenuReactView.swift -+++ b/node_modules/react-native-share-menu/ios/Modules/ShareMenuReactView.swift -@@ -3,8 +3,9 @@ - // RNShareMenu - // - // Created by Gustavo Parreira on 28/07/2020. --// -+// Modified by Veselin Stoyanov on 17/04/2021. - -+import Foundation - import MobileCoreServices - - @objc(ShareMenuReactView) -@@ -17,8 +18,6 @@ public class ShareMenuReactView: NSObject { - } - - public static func attachViewDelegate(_ delegate: ReactShareViewDelegate!) { -- guard (ShareMenuReactView.viewDelegate == nil) else { return } -- - ShareMenuReactView.viewDelegate = delegate - } - -@@ -65,12 +64,12 @@ public class ShareMenuReactView: NSObject { - - let extensionContext = viewDelegate.loadExtensionContext() - -- guard let item = extensionContext.inputItems.first as? NSExtensionItem else { -- print("Error: \(COULD_NOT_FIND_ITEM_ERROR)") -+ guard let items = extensionContext.inputItems as? [NSExtensionItem] else { -+ print("Error: \(COULD_NOT_FIND_ITEMS_ERROR)") - return - } - -- viewDelegate.continueInApp(with: item, and: extraData) -+ viewDelegate.continueInApp(with: items, and: extraData) - } - - @objc(data:reject:) -@@ -82,91 +81,96 @@ public class ShareMenuReactView: NSObject { - return - } - -- extractDataFromContext(context: extensionContext) { (data, mimeType, error) in -+ extractDataFromContext(context: extensionContext) { (data, error) in - guard (error == nil) else { - reject("error", error?.description, nil) - return - } - -- resolve([MIME_TYPE_KEY: mimeType, DATA_KEY: data]) -+ resolve([DATA_KEY: data]) - } - } - -- func extractDataFromContext(context: NSExtensionContext, withCallback callback: @escaping (String?, String?, NSException?) -> Void) { -- let item:NSExtensionItem! = context.inputItems.first as? NSExtensionItem -- let attachments:[AnyObject]! = item.attachments -- -- var urlProvider:NSItemProvider! = nil -- var imageProvider:NSItemProvider! = nil -- var textProvider:NSItemProvider! = nil -- var dataProvider:NSItemProvider! = nil -- -- for provider in attachments { -- if provider.hasItemConformingToTypeIdentifier(kUTTypeURL as String) { -- urlProvider = provider as? NSItemProvider -- break -- } else if provider.hasItemConformingToTypeIdentifier(kUTTypeText as String) { -- textProvider = provider as? NSItemProvider -- break -- } else if provider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { -- imageProvider = provider as? NSItemProvider -- break -- } else if provider.hasItemConformingToTypeIdentifier(kUTTypeData as String) { -- dataProvider = provider as? NSItemProvider -- break -- } -- } -+ func extractDataFromContext(context: NSExtensionContext, withCallback callback: @escaping ([Any]?, NSException?) -> Void) { -+ DispatchQueue.global().async { -+ let semaphore = DispatchSemaphore(value: 0) -+ let items:[NSExtensionItem]! = context.inputItems as? [NSExtensionItem] -+ var results: [[String: String]] = [] - -- if (urlProvider != nil) { -- urlProvider.loadItem(forTypeIdentifier: kUTTypeURL as String, options: nil) { (item, error) in -- let url: URL! = item as? URL -+ for item in items { -+ guard let attachments = item.attachments else { -+ callback(nil, NSException(name: NSExceptionName(rawValue: "Error"), reason:"couldn't find attachments", userInfo:nil)) -+ return -+ } - -- callback(url.absoluteString, "text/plain", nil) -- } -- } else if (imageProvider != nil) { -- imageProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil) { (item, error) in -- let imageUrl: URL! = item as? URL -+ for provider in attachments { -+ if provider.hasItemConformingToTypeIdentifier(kUTTypeURL as String) { -+ provider.loadItem(forTypeIdentifier: kUTTypeURL as String, options: nil) { (item, error) in -+ let url: URL! = item as? URL - -- if (imageUrl != nil) { -- if let imageData = try? Data(contentsOf: imageUrl) { -- callback(imageUrl.absoluteString, self.extractMimeType(from: imageUrl), nil) -- } -- } else { -- let image: UIImage! = item as? UIImage -+ results.append([DATA_KEY: url.absoluteString, MIME_TYPE_KEY: "text/plain"]) - -- if (image != nil) { -- let imageData: Data! = image.pngData(); -+ semaphore.signal() -+ } -+ semaphore.wait() -+ } else if provider.hasItemConformingToTypeIdentifier(kUTTypeText as String) { -+ provider.loadItem(forTypeIdentifier: kUTTypeText as String, options: nil) { (item, error) in -+ let text:String! = item as? String -+ -+ results.append([DATA_KEY: text, MIME_TYPE_KEY: "text/plain"]) - -- // Creating temporary URL for image data (UIImage) -- guard let imageURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("TemporaryScreenshot.png") else { -- return -+ semaphore.signal() -+ } -+ semaphore.wait() -+ } else if provider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { -+ provider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil) { (item, error) in -+ let imageUrl: URL! = item as? URL -+ -+ if (imageUrl != nil) { -+ if let imageData = try? Data(contentsOf: imageUrl) { -+ results.append([DATA_KEY: imageUrl.absoluteString, MIME_TYPE_KEY: self.extractMimeType(from: imageUrl)]) -+ } -+ } else { -+ let image: UIImage! = item as? UIImage -+ -+ if (image != nil) { -+ let imageData: Data! = image.pngData(); -+ -+ // Creating temporary URL for image data (UIImage) -+ guard let imageURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("TemporaryScreenshot.png") else { -+ return -+ } -+ -+ do { -+ // Writing the image to the URL -+ try imageData.write(to: imageURL) -+ -+ results.append([DATA_KEY: imageUrl.absoluteString, MIME_TYPE_KEY: imageURL.extractMimeType()]) -+ } catch { -+ callback(nil, NSException(name: NSExceptionName(rawValue: "Error"), reason:"Can't load image", userInfo:nil)) -+ } -+ } -+ } -+ -+ semaphore.signal() - } -+ semaphore.wait() -+ } else if provider.hasItemConformingToTypeIdentifier(kUTTypeData as String) { -+ provider.loadItem(forTypeIdentifier: kUTTypeData as String, options: nil) { (item, error) in -+ let url: URL! = item as? URL - -- do { -- // Writing the image to the URL -- try imageData.write(to: imageURL) -+ results.append([DATA_KEY: url.absoluteString, MIME_TYPE_KEY: self.extractMimeType(from: url)]) - -- callback(imageURL.absoluteString, imageURL.extractMimeType(), nil) -- } catch { -- callback(nil, nil, NSException(name: NSExceptionName(rawValue: "Error"), reason:"Can't load image", userInfo:nil)) -+ semaphore.signal() - } -+ semaphore.wait() -+ } else { -+ callback(nil, NSException(name: NSExceptionName(rawValue: "Error"), reason:"couldn't find provider", userInfo:nil)) - } - } - } -- } else if (textProvider != nil) { -- textProvider.loadItem(forTypeIdentifier: kUTTypeText as String, options: nil) { (item, error) in -- let text:String! = item as? String - -- callback(text, "text/plain", nil) -- } -- } else if (dataProvider != nil) { -- dataProvider.loadItem(forTypeIdentifier: kUTTypeData as String, options: nil) { (item, error) in -- let url: URL! = item as? URL -- -- callback(url.absoluteString, self.extractMimeType(from: url), nil) -- } -- } else { -- callback(nil, nil, NSException(name: NSExceptionName(rawValue: "Error"), reason:"couldn't find provider", userInfo:nil)) -+ callback(results, nil) - } - } - -diff --git a/node_modules/react-native-share-menu/ios/ReactShareViewController.swift b/node_modules/react-native-share-menu/ios/ReactShareViewController.swift -index 0189ef6..f42bce6 100644 ---- a/node_modules/react-native-share-menu/ios/ReactShareViewController.swift -+++ b/node_modules/react-native-share-menu/ios/ReactShareViewController.swift -@@ -62,7 +62,7 @@ class ReactShareViewController: ShareViewController, RCTBridgeDelegate, ReactSha - self.openHostApp() - } - -- func continueInApp(with item: NSExtensionItem, and extraData: [String:Any]?) { -- handlePost(item, extraData: extraData) -+ func continueInApp(with items: [NSExtensionItem], and extraData: [String:Any]?) { -+ handlePost(items, extraData: extraData) - } - } -diff --git a/node_modules/react-native-share-menu/ios/ReactShareViewDelegate.swift b/node_modules/react-native-share-menu/ios/ReactShareViewDelegate.swift -index 0aa4c58..ad0812c 100644 ---- a/node_modules/react-native-share-menu/ios/ReactShareViewDelegate.swift -+++ b/node_modules/react-native-share-menu/ios/ReactShareViewDelegate.swift -@@ -10,5 +10,5 @@ public protocol ReactShareViewDelegate { - - func openApp() - -- func continueInApp(with item: NSExtensionItem, and extraData: [String:Any]?) -+ func continueInApp(with items: [NSExtensionItem], and extraData: [String:Any]?) - } -diff --git a/node_modules/react-native-share-menu/ios/ShareViewController.swift b/node_modules/react-native-share-menu/ios/ShareViewController.swift -index 7faf6e4..f02bde5 100644 ---- a/node_modules/react-native-share-menu/ios/ShareViewController.swift -+++ b/node_modules/react-native-share-menu/ios/ShareViewController.swift -@@ -6,15 +6,18 @@ - // - // Created by Gustavo Parreira on 26/07/2020. - // -+// Modified by Veselin Stoyanov on 17/04/2021. - -+import Foundation - import MobileCoreServices - import UIKit - import Social - import RNShareMenu - --class ShareViewController: SLComposeServiceViewController { -+class ShareViewController: UIViewController { - var hostAppId: String? - var hostAppUrlScheme: String? -+ var sharedItems: [Any] = [] - - override func viewDidLoad() { - super.viewDidLoad() -@@ -30,46 +33,64 @@ class ShareViewController: SLComposeServiceViewController { - } else { - print("Error: \(NO_INFO_PLIST_URL_SCHEME_ERROR)") - } -- } - -- override func isContentValid() -> Bool { -- // Do validation of contentText and/or NSExtensionContext attachments here -- return true -+ guard let items = extensionContext?.inputItems as? [NSExtensionItem] else { -+ cancelRequest() -+ return - } - -- override func didSelectPost() { -- // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments. -- guard let item = extensionContext?.inputItems.first as? NSExtensionItem else { -- cancelRequest() -+ handlePost(items) -+ } -+ -+ override func viewDidAppear(_ animated: Bool) { -+ super.viewDidAppear(animated) -+ -+ completeRequest() -+ } -+ -+ func handlePost(_ items: [NSExtensionItem], extraData: [String:Any]? = nil) { -+ DispatchQueue.global().async { -+ guard let hostAppId = self.hostAppId else { -+ self.exit(withError: NO_INFO_PLIST_INDENTIFIER_ERROR) -+ return -+ } -+ guard let userDefaults = UserDefaults(suiteName: "group.\(hostAppId)") else { -+ self.exit(withError: NO_APP_GROUP_ERROR) - return - } - -- handlePost(item) -- } -+ if let data = extraData { -+ self.storeExtraData(data) -+ } else { -+ self.removeExtraData() -+ } - -- override func configurationItems() -> [Any]! { -- // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here. -- return [] -- } -+ let semaphore = DispatchSemaphore(value: 0) - -- func handlePost(_ item: NSExtensionItem, extraData: [String:Any]? = nil) { -- guard let provider = item.attachments?.first else { -- cancelRequest() -- return -- } -+ for item in items { -+ guard let attachments = item.attachments else { -+ self.cancelRequest() -+ return -+ } - -- if let data = extraData { -- storeExtraData(data) -- } else { -- removeExtraData() -- } -+ for provider in attachments { -+ if provider.isText { -+ self.storeText(withProvider: provider, semaphore) -+ } else if provider.isURL { -+ self.storeUrl(withProvider: provider, semaphore) -+ } else { -+ self.storeFile(withProvider: provider, semaphore) -+ } - -- if provider.isText { -- storeText(withProvider: provider) -- } else if provider.isURL { -- storeUrl(withProvider: provider) -- } else { -- storeFile(withProvider: provider) -+ semaphore.wait() -+ } -+ } -+ -+ userDefaults.set(self.sharedItems, -+ forKey: USER_DEFAULTS_KEY) -+ userDefaults.synchronize() -+ -+ self.openHostApp() - } - } - -@@ -99,7 +120,7 @@ class ShareViewController: SLComposeServiceViewController { - userDefaults.synchronize() - } - -- func storeText(withProvider provider: NSItemProvider) { -+ func storeText(withProvider provider: NSItemProvider, _ semaphore: DispatchSemaphore) { - provider.loadItem(forTypeIdentifier: kUTTypeText as String, options: nil) { (data, error) in - guard (error == nil) else { - self.exit(withError: error.debugDescription) -@@ -109,24 +130,13 @@ class ShareViewController: SLComposeServiceViewController { - self.exit(withError: COULD_NOT_FIND_STRING_ERROR) - return - } -- guard let hostAppId = self.hostAppId else { -- self.exit(withError: NO_INFO_PLIST_INDENTIFIER_ERROR) -- return -- } -- guard let userDefaults = UserDefaults(suiteName: "group.\(hostAppId)") else { -- self.exit(withError: NO_APP_GROUP_ERROR) -- return -- } -- -- userDefaults.set([DATA_KEY: text, MIME_TYPE_KEY: "text/plain"], -- forKey: USER_DEFAULTS_KEY) -- userDefaults.synchronize() - -- self.openHostApp() -+ self.sharedItems.append([DATA_KEY: text, MIME_TYPE_KEY: "text/plain"]) -+ semaphore.signal() - } - } - -- func storeUrl(withProvider provider: NSItemProvider) { -+ func storeUrl(withProvider provider: NSItemProvider, _ semaphore: DispatchSemaphore) { - provider.loadItem(forTypeIdentifier: kUTTypeURL as String, options: nil) { (data, error) in - guard (error == nil) else { - self.exit(withError: error.debugDescription) -@@ -136,24 +146,13 @@ class ShareViewController: SLComposeServiceViewController { - self.exit(withError: COULD_NOT_FIND_URL_ERROR) - return - } -- guard let hostAppId = self.hostAppId else { -- self.exit(withError: NO_INFO_PLIST_INDENTIFIER_ERROR) -- return -- } -- guard let userDefaults = UserDefaults(suiteName: "group.\(hostAppId)") else { -- self.exit(withError: NO_APP_GROUP_ERROR) -- return -- } -- -- userDefaults.set([DATA_KEY: url.absoluteString, MIME_TYPE_KEY: "text/plain"], -- forKey: USER_DEFAULTS_KEY) -- userDefaults.synchronize() - -- self.openHostApp() -+ self.sharedItems.append([DATA_KEY: url.absoluteString, MIME_TYPE_KEY: "text/plain"]) -+ semaphore.signal() - } - } - -- func storeFile(withProvider provider: NSItemProvider) { -+ func storeFile(withProvider provider: NSItemProvider, _ semaphore: DispatchSemaphore) { - provider.loadItem(forTypeIdentifier: kUTTypeData as String, options: nil) { (data, error) in - guard (error == nil) else { - self.exit(withError: error.debugDescription) -@@ -167,10 +166,6 @@ class ShareViewController: SLComposeServiceViewController { - self.exit(withError: NO_INFO_PLIST_INDENTIFIER_ERROR) - return - } -- guard let userDefaults = UserDefaults(suiteName: "group.\(hostAppId)") else { -- self.exit(withError: NO_APP_GROUP_ERROR) -- return -- } - guard let groupFileManagerContainer = FileManager.default - .containerURL(forSecurityApplicationGroupIdentifier: "group.\(hostAppId)") - else { -@@ -189,11 +184,8 @@ class ShareViewController: SLComposeServiceViewController { - return - } - -- userDefaults.set([DATA_KEY: filePath.absoluteString, MIME_TYPE_KEY: mimeType], -- forKey: USER_DEFAULTS_KEY) -- userDefaults.synchronize() -- -- self.openHostApp() -+ self.sharedItems.append([DATA_KEY: filePath.absoluteString, MIME_TYPE_KEY: mimeType]) -+ semaphore.signal() - } - } - diff --git a/patches/react-native-share-menu+6.0.0.patch b/patches/react-native-share-menu+6.0.0.patch new file mode 100644 index 00000000..72b155b7 --- /dev/null +++ b/patches/react-native-share-menu+6.0.0.patch @@ -0,0 +1,93 @@ +diff --git a/node_modules/react-native-share-menu/android/build.gradle b/node_modules/react-native-share-menu/android/build.gradle +index 9557fdb..ebdeb6f 100644 +--- a/node_modules/react-native-share-menu/android/build.gradle ++++ b/node_modules/react-native-share-menu/android/build.gradle +@@ -1,12 +1,12 @@ + apply plugin: 'com.android.library' + + android { +- compileSdkVersion 29 +- buildToolsVersion "29.0.2" ++ compileSdkVersion 31 ++ buildToolsVersion "31.0.0" + + defaultConfig { +- minSdkVersion 16 +- targetSdkVersion 29 ++ minSdkVersion 21 ++ targetSdkVersion 31 + versionCode 1 + versionName "1.0" + ndk { +diff --git a/node_modules/react-native-share-menu/ios/ReactShareViewController.swift b/node_modules/react-native-share-menu/ios/ReactShareViewController.swift +index f42bce6..ee36062 100644 +--- a/node_modules/react-native-share-menu/ios/ReactShareViewController.swift ++++ b/node_modules/react-native-share-menu/ios/ReactShareViewController.swift +@@ -13,7 +13,7 @@ class ReactShareViewController: ShareViewController, RCTBridgeDelegate, ReactSha + func sourceURL(for bridge: RCTBridge!) -> URL! { + #if DEBUG + return RCTBundleURLProvider.sharedSettings()? +- .jsBundleURL(forBundleRoot: "index.share", fallbackResource: nil) ++ .jsBundleURL(forBundleRoot: "index.share") + #else + return Bundle.main.url(forResource: "main", withExtension: "jsbundle") + #endif +diff --git a/node_modules/react-native-share-menu/ios/ShareViewController.swift b/node_modules/react-native-share-menu/ios/ShareViewController.swift +index 12d8c92..64aa72b 100644 +--- a/node_modules/react-native-share-menu/ios/ShareViewController.swift ++++ b/node_modules/react-native-share-menu/ios/ShareViewController.swift +@@ -19,8 +19,8 @@ class ShareViewController: SLComposeServiceViewController { + var hostAppUrlScheme: String? + var sharedItems: [Any] = [] + +- override func viewDidLoad() { +- super.viewDidLoad() ++ override func viewWillAppear(_ animated: Bool) { ++ super.viewWillAppear(animated) + + if let hostAppId = Bundle.main.object(forInfoDictionaryKey: HOST_APP_IDENTIFIER_INFO_PLIST_KEY) as? String { + self.hostAppId = hostAppId +@@ -33,6 +33,13 @@ class ShareViewController: SLComposeServiceViewController { + } else { + print("Error: \(NO_INFO_PLIST_URL_SCHEME_ERROR)") + } ++ ++ guard let items = extensionContext?.inputItems as? [NSExtensionItem] else { ++ cancelRequest() ++ return ++ } ++ ++ handlePost(items) + } + + override func isContentValid() -> Bool { +@@ -40,16 +47,6 @@ class ShareViewController: SLComposeServiceViewController { + return true + } + +- override func didSelectPost() { +- // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments. +- guard let items = extensionContext?.inputItems as? [NSExtensionItem] else { +- cancelRequest() +- return +- } +- +- handlePost(items) +- } +- + override func configurationItems() -> [Any]! { + // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here. + return [] +@@ -238,11 +235,10 @@ class ShareViewController: SLComposeServiceViewController { + + func completeRequest() { + // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context. +- extensionContext!.completeRequest(returningItems: [], completionHandler: nil) ++ extensionContext!.completeRequest(returningItems: nil, completionHandler: nil) + } + + func cancelRequest() { + extensionContext!.cancelRequest(withError: NSError()) + } +- + } diff --git a/scripts/release.sh b/scripts/release.sh deleted file mode 100755 index b7534c7e..00000000 --- a/scripts/release.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -if [ $# -ne 1 ]; then - echo "Arguments incorrect" - exit 1 -fi - -expo publish --quiet --target bare --release-channel=$1 \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 96433aeb..6419e708 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -74,37 +74,6 @@ const App: React.FC = () => { } }, []) - const children = useCallback( - bootstrapped => { - log('log', 'App', 'bootstrapped') - if (bootstrapped) { - log('log', 'App', 'loading actual app :)') - const language = getSettingsLanguage(store.getState()) - if (!language) { - store.dispatch(changeLanguage('en')) - i18n.changeLanguage('en') - } else { - i18n.changeLanguage(language) - } - - return ( - - - - - - - - - - ) - } else { - return null - } - }, - [localCorrupt] - ) - return ( @@ -112,7 +81,33 @@ const App: React.FC = () => { { + log('log', 'App', 'bootstrapped') + if (bootstrapped) { + log('log', 'App', 'loading actual app :)') + const language = getSettingsLanguage(store.getState()) + if (!language) { + store.dispatch(changeLanguage('en')) + i18n.changeLanguage('en') + } else { + i18n.changeLanguage(language) + } + + return ( + + + + + + + + + + ) + } else { + return null + } + }} /> diff --git a/src/Screens.tsx b/src/Screens.tsx index f83cf37c..07a072be 100644 --- a/src/Screens.tsx +++ b/src/Screens.tsx @@ -4,6 +4,7 @@ import { displayMessage, Message } from '@components/Message' import navigationRef from '@helpers/navigationRef' import { NavigationContainer } from '@react-navigation/native' import { createNativeStackNavigator } from '@react-navigation/native-stack' +import ScreenAccountSelection from '@screens/AccountSelection' import ScreenActions from '@screens/Actions' import ScreenAnnouncements from '@screens/Announcements' import ScreenCompose from '@screens/Compose' @@ -170,6 +171,9 @@ const Screens: React.FC = ({ localCorrupt }) => { } | { data: string | string[]; mimeType: string } ) => { + if (Platform.OS === 'android') { + return + } if (instanceActive < 0) { return } @@ -234,29 +238,34 @@ const Screens: React.FC = ({ localCorrupt }) => { } } break - case 'android': - if (!item.mimeType) { - return - } - let tempData: string[] - if (!Array.isArray(item.data)) { - tempData = [item.data] - } else { - tempData = item.data - } - for (const d of item.data) { - filterMedia({ uri: d, mime: item.mimeType }) - } - break + // case 'android': + // if (!item.mimeType) { + // return + // } + // for (const d of item.data) { + // filterMedia({ uri: d, mime: item.mimeType }) + // } + // break } if (!text && !media.length) { return } else { - navigationRef.navigate('Screen-Compose', { type: 'share', text, media }) + console.log('share', text, media) + if (instances.length > 1) { + navigationRef.navigate('Screen-AccountSelection', { + share: { text, media } + }) + } else { + navigationRef.navigate('Screen-Compose', { + type: 'share', + text, + media + }) + } } }, - [instanceActive] + [] ) useEffect(() => { ShareMenu.getInitialShare(handleShare) @@ -331,6 +340,23 @@ const Screens: React.FC = ({ localCorrupt }) => { animation: 'fade' }} /> + ({ + title: t('screenAccountSelection:heading'), + headerShadowVisible: false, + presentation: 'modal', + gestureEnabled: false, + headerLeft: () => ( + navigation.goBack()} + /> + ) + })} + /> diff --git a/src/api/general.ts b/src/api/general.ts index cbcc784f..35b971dd 100644 --- a/src/api/general.ts +++ b/src/api/general.ts @@ -1,8 +1,6 @@ import axios from 'axios' -import chalk from 'chalk' import Constants from 'expo-constants' - -const ctx = new chalk.Instance({ level: 3 }) +import handleError, { ctx } from './handleError' export type Params = { method: 'get' | 'post' | 'put' | 'delete' @@ -25,13 +23,13 @@ const apiGeneral = async ({ }: Params): Promise<{ body: T }> => { console.log( ctx.bgGreen.bold(' API general ') + - ' ' + - domain + - ' ' + - method + - ctx.green(' -> ') + - `/${url}` + - (params ? ctx.green(' -> ') : ''), + ' ' + + domain + + ' ' + + method + + ctx.green(' -> ') + + `/${url}` + + (params ? ctx.green(' -> ') : ''), params ? params : '' ) @@ -46,7 +44,7 @@ const apiGeneral = async ({ body && body instanceof FormData ? 'multipart/form-data' : 'application/json', - 'User-Agent': `tooot/${Constants.manifest?.version}`, + 'User-Agent': `tooot/${Constants.expoConfig?.version}`, Accept: '*/*', ...headers }, @@ -57,40 +55,7 @@ const apiGeneral = async ({ body: response.data }) }) - .catch(error => { - if (error?.response) { - // The request was made and the server responded with a status code - // that falls out of the range of 2xx - console.error( - ctx.bold(' API general '), - ctx.bold('response'), - error.response.status, - error.response.data.error - ) - return Promise.reject({ - status: error?.response.status, - message: error?.response.data.error - }) - } else if (error?.request) { - // The request was made but no response was received - // `error.request` is an instance of XMLHttpRequest in the browser and an instance of - // http.ClientRequest in node.js - console.error( - ctx.bold(' API general '), - ctx.bold('request'), - error.request - ) - return Promise.reject() - } else { - console.error( - ctx.bold(' API general '), - ctx.bold('internal'), - error?.message, - url - ) - return Promise.reject() - } - }) + .catch(handleError) } export default apiGeneral diff --git a/src/api/handleError.ts b/src/api/handleError.ts new file mode 100644 index 00000000..6f984b78 --- /dev/null +++ b/src/api/handleError.ts @@ -0,0 +1,38 @@ +import chalk from 'chalk' + +export const ctx = new chalk.Instance({ level: 3 }) + +const handleError = (error: any) => { + if (error?.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + console.error( + ctx.bold(' API instance '), + ctx.bold('response'), + error.response.status, + error?.response.data?.error || error?.response.message || 'Unknown error' + ) + return Promise.reject({ + status: error?.response.status, + message: + error?.response.data?.error || + error?.response.message || + 'Unknown error' + }) + } else if (error?.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + console.error(ctx.bold(' API instance '), ctx.bold('request'), error) + return Promise.reject() + } else { + console.error( + ctx.bold(' API instance '), + ctx.bold('internal'), + error?.message + ) + return Promise.reject() + } +} + +export default handleError diff --git a/src/api/instance.ts b/src/api/instance.ts index 883302e7..c15d5bcc 100644 --- a/src/api/instance.ts +++ b/src/api/instance.ts @@ -1,10 +1,8 @@ import { RootState } from '@root/store' import axios, { AxiosRequestConfig } from 'axios' -import chalk from 'chalk' import Constants from 'expo-constants' import li from 'li' - -const ctx = new chalk.Instance({ level: 3 }) +import handleError, { ctx } from './handleError' export type Params = { method: 'get' | 'post' | 'put' | 'delete' | 'patch' @@ -76,7 +74,7 @@ const apiInstance = async ({ body && body instanceof FormData ? 'multipart/form-data' : 'application/json', - 'User-Agent': `tooot/${Constants.manifest?.version}`, + 'User-Agent': `tooot/${Constants.expoConfig?.version}`, Accept: '*/*', ...headers, ...(token && { @@ -99,36 +97,7 @@ const apiInstance = async ({ links: { prev, next } }) }) - .catch(error => { - if (error?.response) { - // The request was made and the server responded with a status code - // that falls out of the range of 2xx - console.error( - ctx.bold(' API instance '), - ctx.bold('response'), - error.response.status, - error.response.data.error - ) - return Promise.reject({ - status: error?.response.status, - message: error?.response.data.error - }) - } else if (error?.request) { - // The request was made but no response was received - // `error.request` is an instance of XMLHttpRequest in the browser and an instance of - // http.ClientRequest in node.js - console.error(ctx.bold(' API instance '), ctx.bold('request'), error) - return Promise.reject() - } else { - console.error( - ctx.bold(' API instance '), - ctx.bold('internal'), - error?.message, - url - ) - return Promise.reject() - } - }) + .catch(handleError) } export default apiInstance diff --git a/src/api/tooot.ts b/src/api/tooot.ts index 9c029b53..fc6bd0d3 100644 --- a/src/api/tooot.ts +++ b/src/api/tooot.ts @@ -1,10 +1,8 @@ import { mapEnvironment } from '@utils/checkEnvironment' import axios from 'axios' -import chalk from 'chalk' import Constants from 'expo-constants' import * as Sentry from 'sentry-expo' - -const ctx = new chalk.Instance({ level: 3 }) +import handleError, { ctx } from './handleError' export type Params = { method: 'get' | 'post' | 'put' | 'delete' @@ -52,7 +50,7 @@ const apiTooot = async ({ body && body instanceof FormData ? 'multipart/form-data' : 'application/json', - 'User-Agent': `tooot/${Constants.manifest?.version}`, + 'User-Agent': `tooot/${Constants.expoConfig?.version}`, Accept: '*/*', ...headers }, @@ -75,38 +73,7 @@ const apiTooot = async ({ Sentry.Native.captureException(error) } - if (error?.response) { - // The request was made and the server responded with a status code - // that falls out of the range of 2xx - console.error( - ctx.bold(' API tooot '), - ctx.bold('response'), - error.response.status, - error.response.data.error - ) - return Promise.reject({ - status: error?.response.status, - message: error?.response.data.error - }) - } else if (error?.request) { - // The request was made but no response was received - // `error.request` is an instance of XMLHttpRequest in the browser and an instance of - // http.ClientRequest in node.js - console.error( - ctx.bold(' API tooot '), - ctx.bold('request'), - error.request - ) - return Promise.reject() - } else { - console.error( - ctx.bold(' API tooot '), - ctx.bold('internal'), - error?.message, - url - ) - return Promise.reject() - } + return handleError(error) }) } diff --git a/src/components/AccountButton.tsx b/src/components/AccountButton.tsx new file mode 100644 index 00000000..cddce028 --- /dev/null +++ b/src/components/AccountButton.tsx @@ -0,0 +1,45 @@ +import { useNavigation } from '@react-navigation/native' +import initQuery from '@utils/initQuery' +import { InstanceLatest } from '@utils/migrations/instances/migration' +import { StyleConstants } from '@utils/styles/constants' +import React from 'react' +import Button from './Button' +import haptics from './haptics' + +interface Props { + instance: InstanceLatest + selected?: boolean + additionalActions?: () => void +} + +const AccountButton: React.FC = ({ + instance, + selected = false, + additionalActions +}) => { + const navigation = useNavigation() + + return ( +