diff --git a/.github/workflows/rn-build-ios.yml b/.github/workflows/rn-build-ios.yml index a6962bfcb..aea3fa9a8 100644 --- a/.github/workflows/rn-build-ios.yml +++ b/.github/workflows/rn-build-ios.yml @@ -11,7 +11,7 @@ jobs: build-ios: name: Build iOS Sample runs-on: ${{ vars.MACOS_RUNNER }} - timeout-minutes: 30 + timeout-minutes: 45 defaults: run: working-directory: platforms/react-native @@ -71,3 +71,12 @@ jobs: - name: Build iOS sample run: pnpm sample build:ios + + - name: Cache React Native SwiftPM artifacts + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: ~/Library/Caches/ReactNative/spm-artifacts/0.87.0 + key: ${{ runner.os }}-react-native-spm-${{ hashFiles('platforms/react-native/sample/package.json', 'platforms/react-native/pnpm-lock.yaml') }} + + - name: Build iOS sample with experimental SwiftPM + run: pnpm sample build:ios:spm diff --git a/dev.yml b/dev.yml index 08378e016..f2a73a722 100644 --- a/dev.yml +++ b/dev.yml @@ -720,22 +720,36 @@ commands: optional: --local run: cd platforms/react-native && pnpm run pod-install -- "$@" + spm: + desc: Sync experimental SwiftPM dependencies for the iOS sample. + long_desc: | + Generates the gitignored Codegen, autolinking, and XCFramework package + trees required by the opt-in SwiftPM Xcode project. Run this after a + fresh clone or dependency update. React Native 0.87 SwiftPM support is + experimental; CocoaPods remains the default. + run: cd platforms/react-native && pnpm sample spm "$@" + + build-spm: + desc: Build the iOS sample with experimental SwiftPM support. + run: cd platforms/react-native && pnpm sample build:ios:spm + open: desc: Open the React Native workspace root or native sample projects long_desc: | Opens platforms/react-native in the editor set by DEV_EDITOR in - .dev.env, otherwise `open`. The --ios and --android flags open the + .dev.env, otherwise `open`. The native flags open the sample app's native projects. dev rn open Open platforms/react-native - dev rn open --ios Open the sample iOS workspace in Xcode + dev rn open --ios Open the CocoaPods sample workspace in Xcode + dev rn open --ios-spm Open the experimental SwiftPM project in Xcode dev rn open --android Open the sample Android project in Android Studio syntax: - optional: "[--ios|--android]" + optional: "[--ios|--ios-spm|--android]" run: | set -e if [ "$#" -gt 1 ]; then - echo "Usage: dev rn open [--ios|--android]" >&2 + echo "Usage: dev rn open [--ios|--ios-spm|--android]" >&2 exit 1 fi @@ -749,11 +763,14 @@ commands: --ios) xed platforms/react-native/sample/ios/CheckoutKitReactNativeDemo.xcworkspace ;; + --ios-spm) + xed platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj + ;; --android) open -a "Android Studio" platforms/react-native/sample/android ;; *) - echo "Usage: dev rn open [--ios|--android]" >&2 + echo "Usage: dev rn open [--ios|--ios-spm|--android]" >&2 exit 1 ;; esac diff --git a/platforms/react-native/CONTRIBUTING.md b/platforms/react-native/CONTRIBUTING.md index e8e8d834b..d09daeaf4 100644 --- a/platforms/react-native/CONTRIBUTING.md +++ b/platforms/react-native/CONTRIBUTING.md @@ -55,6 +55,28 @@ pods need to be installed. The underlying pnpm sample android ``` +### Experimental SwiftPM sample + +React Native 0.87 includes an early SwiftPM preview. CocoaPods remains the +default for the iOS sample, while the parallel +`CheckoutKitReactNativeDemoSPM.xcodeproj` exercises the preview without +changing the supported path. + +After a fresh clone or dependency update, generate the gitignored SwiftPM +packages and React Native XCFramework links, then build the opt-in project: + +```sh +dev rn spm +dev rn build-spm +``` + +Use `dev rn open --ios-spm` to open the project in Xcode. The project's +`Package.resolved` is committed so direct Xcode builds never update package +pins; do not commit other generated files under `ios/build/` or `ios/.build/`. +Community package manifests are committed as pnpm patches because +React Native's preview requires every native dependency to provide a +`Package.swift`. + ## Local SDK development (`--local`) The RN module wraps the Shopify Swift and Android SDKs, which live in this same monorepo at `platforms/swift/` and `platforms/android/`. The sample app builds against the **published** artifacts on CocoaPods / Maven Central — the same path CI takes. diff --git a/platforms/react-native/jest.config.js b/platforms/react-native/jest.config.js index d4e2f0c6b..4b5a2ae29 100644 --- a/platforms/react-native/jest.config.js +++ b/platforms/react-native/jest.config.js @@ -6,4 +6,7 @@ module.exports = { transform: { '\\.[jt]sx?$': 'babel-jest', }, + transformIgnorePatterns: [ + 'node_modules/(?!((jest-)?react-native|@react-native(-community)?|@noble/hashes)/)', + ], }; diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/RNShopifyCheckoutKit.podspec b/platforms/react-native/modules/@shopify/checkout-kit-react-native/RNShopifyCheckoutKit.podspec index 6ab11051d..2365d01ed 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/RNShopifyCheckoutKit.podspec +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/RNShopifyCheckoutKit.podspec @@ -16,7 +16,11 @@ Pod::Spec.new do |s| s.platforms = { :ios => "15.0" } s.source = { :git => "https://github.com/Shopify/checkout-kit.git", :tag => "react-native/#{s.version}" } - s.source_files = "ios/*.{h,m,mm,swift}" + s.source_files = [ + "ios/*.{h,m,mm,swift}", + "ios/generated/ReactCodegen/**/*.{h,m,mm,cpp}" + ] + s.public_header_files = "ios/generated/ReactCodegen/**/*.h" s.dependency "React-Core" diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/AcceleratedCheckoutButtons.swift b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/AcceleratedCheckoutButtons.swift index 184773f12..f2263aaac 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/AcceleratedCheckoutButtons.swift +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/AcceleratedCheckoutButtons.swift @@ -1,6 +1,7 @@ import Foundation import PassKit import React +import ShopifyAcceleratedCheckouts import ShopifyCheckoutKit import SwiftUI import UIKit diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/Package.swift b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/Package.swift new file mode 100644 index 000000000..f791f8908 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/Package.swift @@ -0,0 +1,75 @@ +// swift-tools-version: 6.0 + +import PackageDescription + +let reactNativeHeaders: [Target.Dependency] = [ + .product(name: "ReactHeaders", package: "ReactNative"), + .product(name: "ReactNativeHeaders", package: "ReactNative"), + .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative") +] + +let package = Package( + name: "CheckoutKitReactNative", + platforms: [.iOS(.v15)], + products: [ + .library( + name: "CheckoutKitReactNative", + targets: [ + "CheckoutKitReactNativeSwift", + "CheckoutKitReactNativeObjC", + "CheckoutKitReactNativeCodegen" + ] + ) + ], + dependencies: [ + .package(name: "ReactNative", path: "../../../../xcframeworks"), + .package( + url: "https://github.com/Shopify/checkout-kit", + exact: "4.0.0-alpha.5" + ) + ], + targets: [ + .target( + name: "CheckoutKitReactNativeSwift", + dependencies: reactNativeHeaders + [ + .product(name: "ShopifyCheckoutKit", package: "checkout-kit"), + .product(name: "ShopifyAcceleratedCheckouts", package: "checkout-kit") + ], + path: ".", + sources: [ + "AcceleratedCheckoutButtons+Extensions.swift", + "AcceleratedCheckoutButtons.swift", + "ProtocolRelay.swift", + "ShopifyCheckoutKit+EventSerialization.swift", + "ShopifyCheckoutKit+Extensions.swift", + "ShopifyCheckoutKit.swift" + ], + swiftSettings: [.swiftLanguageMode(.v5)] + ), + .target( + name: "CheckoutKitReactNativeObjC", + dependencies: reactNativeHeaders + ["CheckoutKitReactNativeCodegen"], + path: ".", + sources: ["ShopifyCheckoutKit.mm"], + publicHeadersPath: ".", + cxxSettings: [ + .define("FOLLY_CFG_NO_COROUTINES", to: "1"), + .define("DEBUG", .when(configuration: .debug)), + .define("NDEBUG", .when(configuration: .release)) + ] + ), + .target( + name: "CheckoutKitReactNativeCodegen", + dependencies: reactNativeHeaders, + path: "generated/ReactCodegen", + publicHeadersPath: ".", + cxxSettings: [ + .define("FOLLY_CFG_NO_COROUTINES", to: "1"), + .define("DEBUG", .when(configuration: .debug)), + .define("NDEBUG", .when(configuration: .release)) + ], + linkerSettings: [.linkedFramework("Foundation")] + ) + ], + cxxLanguageStandard: .cxx20 +) diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ProtocolRelay.swift b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ProtocolRelay.swift index 484152f1d..f73d3b399 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ProtocolRelay.swift +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ProtocolRelay.swift @@ -1,10 +1,10 @@ import Foundation -#if COCOAPODS +#if canImport(ShopifyCheckoutProtocol) + import ShopifyCheckoutProtocol +#else import ShopifyCheckoutKit extension CheckoutProtocol.Client: @retroactive CheckoutCommunicationProtocol {} -#else - import ShopifyCheckoutProtocol #endif struct DispatchEnvelope: Encodable { diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit+EventSerialization.swift b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit+EventSerialization.swift index 2b456d38c..b569dfa6d 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit+EventSerialization.swift +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit+EventSerialization.swift @@ -1,4 +1,5 @@ import Foundation +import ShopifyAcceleratedCheckouts import ShopifyCheckoutKit /** diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.mm b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.mm index 758abb561..d673d95da 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.mm +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.mm @@ -1,6 +1,12 @@ #import #import +#if __has_include() +#import +#elif __has_include() #import +#else +#import "generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec.h" +#endif #import // Registers the Swift module class (ShopifyCheckoutKit.swift) with the RN diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.swift b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.swift index f1251316a..d167f5fe1 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.swift +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/ShopifyCheckoutKit.swift @@ -1,6 +1,7 @@ import Foundation import PassKit import React +import ShopifyAcceleratedCheckouts import ShopifyCheckoutKit import SwiftUI import UIKit diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.cpp b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.cpp new file mode 100644 index 000000000..9da6fd17f --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.cpp @@ -0,0 +1,22 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateComponentDescriptorCpp.js + */ + +#include "ComponentDescriptors.h" +#include +#include + +namespace facebook::react { + +void RNShopifyCheckoutKitSpec_registerComponentDescriptorsFromCodegen( + std::shared_ptr registry) { +registry->add(concreteComponentDescriptorProvider()); +} + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.h new file mode 100644 index 000000000..39407b159 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.h @@ -0,0 +1,24 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateComponentDescriptorH.js + */ + +#pragma once + +#include "ShadowNodes.h" +#include +#include + +namespace facebook::react { + +using RCTAcceleratedCheckoutButtonsComponentDescriptor = ConcreteComponentDescriptor; + +void RNShopifyCheckoutKitSpec_registerComponentDescriptorsFromCodegen( + std::shared_ptr registry); + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.cpp b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.cpp new file mode 100644 index 000000000..f7de16682 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.cpp @@ -0,0 +1,72 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateEventEmitterCpp.js + */ + +#include "EventEmitters.h" + + +namespace facebook::react { + +void RCTAcceleratedCheckoutButtonsEventEmitter::onFail(OnFail event) const { + dispatchEvent("fail", [event=std::move(event)](jsi::Runtime &runtime) { + auto payload = jsi::Object(runtime); + payload.setProperty(runtime, "message", event.message); +payload.setProperty(runtime, "code", event.code); +payload.setProperty(runtime, "statusCode", event.statusCode); + return payload; + }); +} + + +void RCTAcceleratedCheckoutButtonsEventEmitter::onCancel(OnCancel event) const { + dispatchEvent("cancel", [](jsi::Runtime &runtime) { + auto payload = jsi::Object(runtime); + + return payload; + }); +} + + +void RCTAcceleratedCheckoutButtonsEventEmitter::onRenderStateChange(OnRenderStateChange event) const { + dispatchEvent("renderStateChange", [event=std::move(event)](jsi::Runtime &runtime) { + auto payload = jsi::Object(runtime); + payload.setProperty(runtime, "state", event.state); +payload.setProperty(runtime, "reason", event.reason); + return payload; + }); +} + + +void RCTAcceleratedCheckoutButtonsEventEmitter::onClickLink(OnClickLink event) const { + dispatchEvent("clickLink", [event=std::move(event)](jsi::Runtime &runtime) { + auto payload = jsi::Object(runtime); + payload.setProperty(runtime, "url", event.url); + return payload; + }); +} + + +void RCTAcceleratedCheckoutButtonsEventEmitter::onDispatch(OnDispatch event) const { + dispatchEvent("dispatch", [event=std::move(event)](jsi::Runtime &runtime) { + auto payload = jsi::Object(runtime); + payload.setProperty(runtime, "value", event.value); + return payload; + }); +} + + +void RCTAcceleratedCheckoutButtonsEventEmitter::onSizeChange(OnSizeChange event) const { + dispatchEvent("sizeChange", [event=std::move(event)](jsi::Runtime &runtime) { + auto payload = jsi::Object(runtime); + payload.setProperty(runtime, "height", event.height); + return payload; + }); +} + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.h new file mode 100644 index 000000000..0f329efc5 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.h @@ -0,0 +1,58 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateEventEmitterH.js + */ +#pragma once + +#include + + +namespace facebook::react { +class RCTAcceleratedCheckoutButtonsEventEmitter : public ViewEventEmitter { + public: + using ViewEventEmitter::ViewEventEmitter; + + struct OnFail { + std::string message; + std::string code; + double statusCode; + }; + + struct OnCancel { + + }; + + struct OnRenderStateChange { + std::string state; + std::string reason; + }; + + struct OnClickLink { + std::string url; + }; + + struct OnDispatch { + std::string value; + }; + + struct OnSizeChange { + double height; + }; + void onFail(OnFail value) const; + + void onCancel(OnCancel value) const; + + void onRenderStateChange(OnRenderStateChange value) const; + + void onClickLink(OnClickLink value) const; + + void onDispatch(OnDispatch value) const; + + void onSizeChange(OnSizeChange value) const; +}; +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.cpp b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.cpp new file mode 100644 index 000000000..fc4b1e3ad --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.cpp @@ -0,0 +1,67 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GeneratePropsCpp.js + */ + +#include "Props.h" +#include +#include + +namespace facebook::react { + +RCTAcceleratedCheckoutButtonsProps::RCTAcceleratedCheckoutButtonsProps( + const PropsParserContext &context, + const RCTAcceleratedCheckoutButtonsProps &sourceProps, + const RawProps &rawProps): ViewProps(context, sourceProps, rawProps), + + checkoutIdentifier(convertRawProp(context, rawProps, "checkoutIdentifier", sourceProps.checkoutIdentifier, {})), + cornerRadius(convertRawProp(context, rawProps, "cornerRadius", sourceProps.cornerRadius, {0.0})), + wallets(convertRawProp(context, rawProps, "wallets", sourceProps.wallets, {})), + applePayLabel(convertRawProp(context, rawProps, "applePayLabel", sourceProps.applePayLabel, {})), + applePayStyle(convertRawProp(context, rawProps, "applePayStyle", sourceProps.applePayStyle, {})) {} + +#ifdef RN_SERIALIZABLE_STATE +ComponentName RCTAcceleratedCheckoutButtonsProps::getDiffPropsImplementationTarget() const { + return "RCTAcceleratedCheckoutButtons"; +} + +folly::dynamic RCTAcceleratedCheckoutButtonsProps::getDiffProps( + const Props* prevProps) const { + static const auto defaultProps = RCTAcceleratedCheckoutButtonsProps(); + const RCTAcceleratedCheckoutButtonsProps* oldProps = prevProps == nullptr + ? &defaultProps + : static_cast(prevProps); + if (this == oldProps) { + return folly::dynamic::object(); + } + folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps); + + if (checkoutIdentifier != oldProps->checkoutIdentifier) { + result["checkoutIdentifier"] = toDynamic(checkoutIdentifier); + } + + if ((cornerRadius != oldProps->cornerRadius) && !(std::isnan(cornerRadius) && std::isnan(oldProps->cornerRadius))) { + result["cornerRadius"] = cornerRadius; + } + + if (wallets != oldProps->wallets) { + result["wallets"] = toDynamic(wallets); + } + + if (applePayLabel != oldProps->applePayLabel) { + result["applePayLabel"] = applePayLabel; + } + + if (applePayStyle != oldProps->applePayStyle) { + result["applePayStyle"] = applePayStyle; + } + return result; +} +#endif + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.h new file mode 100644 index 000000000..87fd0cb2d --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.h @@ -0,0 +1,87 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GeneratePropsH.js + */ +#pragma once + +#include +#include +#include +#include +#include + +namespace facebook::react { + +struct RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct { + std::string cartId{}; + std::string variantId{}; + double quantity{0.0}; + + +#ifdef RN_SERIALIZABLE_STATE + bool operator==(const RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct&) const = default; + + folly::dynamic toDynamic() const { + folly::dynamic result = folly::dynamic::object(); + result["cartId"] = cartId; + result["variantId"] = variantId; + result["quantity"] = quantity; + return result; + } +#endif +}; + +static inline void fromRawValue(const PropsParserContext& context, const RawValue &value, RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct &result) { + auto map = (std::unordered_map)value; + + auto tmp_cartId = map.find("cartId"); + if (tmp_cartId != map.end()) { + fromRawValue(context, tmp_cartId->second, result.cartId); + } + auto tmp_variantId = map.find("variantId"); + if (tmp_variantId != map.end()) { + fromRawValue(context, tmp_variantId->second, result.variantId); + } + auto tmp_quantity = map.find("quantity"); + if (tmp_quantity != map.end()) { + fromRawValue(context, tmp_quantity->second, result.quantity); + } +} + +static inline std::string toString(const RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct &value) { + return "[Object RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct]"; +} + +#ifdef RN_SERIALIZABLE_STATE +static inline folly::dynamic toDynamic(const RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct &value) { + return value.toDynamic(); +} +#endif +class RCTAcceleratedCheckoutButtonsProps final : public ViewProps { + public: + RCTAcceleratedCheckoutButtonsProps() = default; + RCTAcceleratedCheckoutButtonsProps(const PropsParserContext& context, const RCTAcceleratedCheckoutButtonsProps &sourceProps, const RawProps &rawProps); + +#pragma mark - Props + + RCTAcceleratedCheckoutButtonsCheckoutIdentifierStruct checkoutIdentifier{}; + Float cornerRadius{0.0}; + std::vector wallets{}; + std::string applePayLabel{}; + std::string applePayStyle{}; + + #ifdef RN_SERIALIZABLE_STATE + ComponentName getDiffPropsImplementationTarget() const override; + + folly::dynamic getDiffProps(const Props* prevProps) const override; + #endif + + +}; + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RCTComponentViewHelpers.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RCTComponentViewHelpers.h new file mode 100644 index 000000000..a3e4cf87b --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RCTComponentViewHelpers.h @@ -0,0 +1,20 @@ +/** +* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). +* +* Do not edit this file as changes may cause incorrect behavior and will be lost +* once the code is regenerated. +* +* @generated by codegen project: GenerateComponentHObjCpp.js +*/ + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol RCTRCTAcceleratedCheckoutButtonsViewProtocol + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec-generated.mm b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec-generated.mm new file mode 100644 index 000000000..4cc8861fb --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec-generated.mm @@ -0,0 +1,164 @@ +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateModuleObjCpp + * + * We create an umbrella header (and corresponding implementation) here since + * Cxx compilation in BUCK has a limitation: source-code producing genrule()s + * must have a single output. More files => more genrule()s => slower builds. + */ + +#import "RNShopifyCheckoutKitSpec.h" + + +@implementation NativeShopifyCheckoutKitSpecBase +- (void)emitOnDispatch:(NSString *_Nonnull)value +{ + _eventEmitterCallback("onDispatch", value); +} +- (void)emitOnPreloadStateChange:(NSString *_Nonnull)value +{ + _eventEmitterCallback("onPreloadStateChange", value); +} + +- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper +{ + _eventEmitterCallback = std::move(eventEmitterCallbackWrapper->_eventEmitterCallback); +} +@end + +@implementation RCTCxxConvert (NativeShopifyCheckoutKit_IosColorsSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_IosColorsSpec:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +@implementation RCTCxxConvert (NativeShopifyCheckoutKit_AndroidColorsBaseSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_AndroidColorsBaseSpec:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +@implementation RCTCxxConvert (NativeShopifyCheckoutKit_AndroidColorsSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_AndroidColorsSpec:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +@implementation RCTCxxConvert (NativeShopifyCheckoutKit_ColorsSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_ColorsSpec:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +@implementation RCTCxxConvert (NativeShopifyCheckoutKit_ConfigurationSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_ConfigurationSpec:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +namespace facebook::react { + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_present(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "present", @selector(present:subscribedMethods:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_preload(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "preload", @selector(preload:requestId:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_dismiss(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "dismiss", @selector(dismiss), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_invalidateCache(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "invalidateCache", @selector(invalidateCache), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_setConfig(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "setConfig", @selector(setConfig:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_getConfig(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, ObjectKind, "getConfig", @selector(getConfig), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_configureAcceleratedCheckouts(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, BooleanKind, "configureAcceleratedCheckouts", @selector(configureAcceleratedCheckouts:storefrontAccessToken:customerEmail:customerPhoneNumber:customerAccessToken:applePayMerchantIdentifier:applyPayContactFields:supportedShippingCountries:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_isAcceleratedCheckoutAvailable(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, BooleanKind, "isAcceleratedCheckoutAvailable", @selector(isAcceleratedCheckoutAvailable), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_isApplePayAvailable(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, BooleanKind, "isApplePayAvailable", @selector(isApplePayAvailable), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_respondToGeolocationRequest(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "respondToGeolocationRequest", @selector(respondToGeolocationRequest:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_addListener(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "addListener", @selector(addListener:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_removeListeners(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "removeListeners", @selector(removeListeners:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeShopifyCheckoutKitSpecJSI_getConstants(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, ObjectKind, "getConstants", @selector(getConstants), args, count); + } + + NativeShopifyCheckoutKitSpecJSI::NativeShopifyCheckoutKitSpecJSI(const ObjCTurboModule::InitParams ¶ms) + : ObjCTurboModule(params) { + + methodMap_["present"] = MethodMetadata {2, __hostFunction_NativeShopifyCheckoutKitSpecJSI_present}; + + + methodMap_["preload"] = MethodMetadata {2, __hostFunction_NativeShopifyCheckoutKitSpecJSI_preload}; + + + methodMap_["dismiss"] = MethodMetadata {0, __hostFunction_NativeShopifyCheckoutKitSpecJSI_dismiss}; + + + methodMap_["invalidateCache"] = MethodMetadata {0, __hostFunction_NativeShopifyCheckoutKitSpecJSI_invalidateCache}; + + + methodMap_["setConfig"] = MethodMetadata {1, __hostFunction_NativeShopifyCheckoutKitSpecJSI_setConfig}; + setMethodArgConversionSelector(@"setConfig", 0, @"JS_NativeShopifyCheckoutKit_ConfigurationSpec:"); + + methodMap_["getConfig"] = MethodMetadata {0, __hostFunction_NativeShopifyCheckoutKitSpecJSI_getConfig}; + + + methodMap_["configureAcceleratedCheckouts"] = MethodMetadata {8, __hostFunction_NativeShopifyCheckoutKitSpecJSI_configureAcceleratedCheckouts}; + + + methodMap_["isAcceleratedCheckoutAvailable"] = MethodMetadata {0, __hostFunction_NativeShopifyCheckoutKitSpecJSI_isAcceleratedCheckoutAvailable}; + + + methodMap_["isApplePayAvailable"] = MethodMetadata {0, __hostFunction_NativeShopifyCheckoutKitSpecJSI_isApplePayAvailable}; + + + methodMap_["respondToGeolocationRequest"] = MethodMetadata {1, __hostFunction_NativeShopifyCheckoutKitSpecJSI_respondToGeolocationRequest}; + + + methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeShopifyCheckoutKitSpecJSI_addListener}; + + + methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeShopifyCheckoutKitSpecJSI_removeListeners}; + + + methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeShopifyCheckoutKitSpecJSI_getConstants}; + + eventEmitterMap_["onDispatch"] = std::make_shared>(); + eventEmitterMap_["onPreloadStateChange"] = std::make_shared>(); + setEventEmitterCallback([&](const std::string &name, id value) { + static_cast &>(*eventEmitterMap_[name]).emit(value); + }); + } +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec.h new file mode 100644 index 000000000..94e1027f6 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec.h @@ -0,0 +1,333 @@ +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateModuleObjCpp + * + * We create an umbrella header (and corresponding implementation) here since + * Cxx compilation in BUCK has a limitation: source-code producing genrule()s + * must have a single output. More files => more genrule()s => slower builds. + */ + +#ifndef __cplusplus +#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm. +#endif + +// Avoid multiple includes of RNShopifyCheckoutKitSpec symbols +#ifndef RNShopifyCheckoutKitSpec_H +#define RNShopifyCheckoutKitSpec_H + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + + +NS_ASSUME_NONNULL_BEGIN +namespace JS { + namespace NativeShopifyCheckoutKit { + struct IosColorsSpec { + NSString *tintColor() const; + NSString *backgroundColor() const; + NSString *closeButtonColor() const; + + IosColorsSpec(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + } +} + +@interface RCTCxxConvert (NativeShopifyCheckoutKit_IosColorsSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_IosColorsSpec:(id)json; +@end +namespace JS { + namespace NativeShopifyCheckoutKit { + struct AndroidColorsBaseSpec { + NSString *progressIndicator() const; + NSString *backgroundColor() const; + NSString *headerBackgroundColor() const; + NSString *headerTextColor() const; + NSString *closeButtonColor() const; + + AndroidColorsBaseSpec(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + } +} + +@interface RCTCxxConvert (NativeShopifyCheckoutKit_AndroidColorsBaseSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_AndroidColorsBaseSpec:(id)json; +@end +namespace JS { + namespace NativeShopifyCheckoutKit { + struct AndroidColorsSpec { + NSString *progressIndicator() const; + NSString *backgroundColor() const; + NSString *headerBackgroundColor() const; + NSString *headerTextColor() const; + NSString *closeButtonColor() const; + std::optional light() const; + std::optional dark() const; + + AndroidColorsSpec(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + } +} + +@interface RCTCxxConvert (NativeShopifyCheckoutKit_AndroidColorsSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_AndroidColorsSpec:(id)json; +@end +namespace JS { + namespace NativeShopifyCheckoutKit { + struct ColorsSpec { + std::optional ios() const; + std::optional android() const; + + ColorsSpec(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + } +} + +@interface RCTCxxConvert (NativeShopifyCheckoutKit_ColorsSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_ColorsSpec:(id)json; +@end +namespace JS { + namespace NativeShopifyCheckoutKit { + struct ConfigurationSpec { + NSString *title() const; + NSString *colorScheme() const; + NSString *logLevel() const; + std::optional preloading() const; + std::optional> allowedMessageOrigins() const; + std::optional colors() const; + + ConfigurationSpec(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + } +} + +@interface RCTCxxConvert (NativeShopifyCheckoutKit_ConfigurationSpec) ++ (RCTManagedPointer *)JS_NativeShopifyCheckoutKit_ConfigurationSpec:(id)json; +@end +namespace JS { + namespace NativeShopifyCheckoutKit { + struct Constants { + + struct Builder { + // Backwards compat for RCTTypedModuleConstants + using ResultT = Constants; + + struct Input { + RCTRequired version; + RCTRequired> dispatchEventTypes; + }; + + /** Initialize with a set of values */ + Builder(const Input i); + /** Initialize with an existing Constants */ + Builder(Constants i); + /** Builds the object. Generally used only by the infrastructure. */ + NSDictionary *buildUnsafeRawValue() const { return _factory(); }; + private: + NSDictionary *(^_factory)(void); + }; + + static Constants fromUnsafeRawValue(NSDictionary *const v) { return {v}; } + NSDictionary *unsafeRawValue() const { return _v; } + private: + Constants(NSDictionary *const v) : _v(v) {} + NSDictionary *_v; + }; + } +} +@protocol NativeShopifyCheckoutKitSpec + +- (void)present:(NSString *)checkoutUrl +subscribedMethods:(NSArray *)subscribedMethods; +- (void)preload:(NSString *)checkoutUrl + requestId:(NSString *)requestId; +- (void)dismiss; +- (void)invalidateCache; +- (void)setConfig:(JS::NativeShopifyCheckoutKit::ConfigurationSpec &)configuration; +- (NSDictionary *)getConfig; +- (NSNumber *)configureAcceleratedCheckouts:(NSString *)storefrontDomain + storefrontAccessToken:(NSString *)storefrontAccessToken + customerEmail:(NSString * _Nullable)customerEmail + customerPhoneNumber:(NSString * _Nullable)customerPhoneNumber + customerAccessToken:(NSString * _Nullable)customerAccessToken + applePayMerchantIdentifier:(NSString * _Nullable)applePayMerchantIdentifier + applyPayContactFields:(NSArray *)applyPayContactFields + supportedShippingCountries:(NSArray *)supportedShippingCountries; +- (NSNumber *)isAcceleratedCheckoutAvailable; +- (NSNumber *)isApplePayAvailable; +- (void)respondToGeolocationRequest:(BOOL)allow; +- (void)addListener:(NSString *)eventName; +- (void)removeListeners:(double)count; +- (facebook::react::ModuleConstants)constantsToExport; +- (facebook::react::ModuleConstants)getConstants; + +@end + +@interface NativeShopifyCheckoutKitSpecBase : NSObject { +@protected +facebook::react::EventEmitterCallback _eventEmitterCallback; +} +- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper; + +- (void)emitOnDispatch:(NSString *_Nonnull)value; +- (void)emitOnPreloadStateChange:(NSString *_Nonnull)value; +@end + +namespace facebook::react { + /** + * ObjC++ class for module 'NativeShopifyCheckoutKit' + */ + class JSI_EXPORT NativeShopifyCheckoutKitSpecJSI : public ObjCTurboModule { + public: + NativeShopifyCheckoutKitSpecJSI(const ObjCTurboModule::InitParams ¶ms); + }; +} // namespace facebook::react +inline NSString *JS::NativeShopifyCheckoutKit::IosColorsSpec::tintColor() const +{ + id const p = _v[@"tintColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::IosColorsSpec::backgroundColor() const +{ + id const p = _v[@"backgroundColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::IosColorsSpec::closeButtonColor() const +{ + id const p = _v[@"closeButtonColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec::progressIndicator() const +{ + id const p = _v[@"progressIndicator"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec::backgroundColor() const +{ + id const p = _v[@"backgroundColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec::headerBackgroundColor() const +{ + id const p = _v[@"headerBackgroundColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec::headerTextColor() const +{ + id const p = _v[@"headerTextColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec::closeButtonColor() const +{ + id const p = _v[@"closeButtonColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsSpec::progressIndicator() const +{ + id const p = _v[@"progressIndicator"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsSpec::backgroundColor() const +{ + id const p = _v[@"backgroundColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsSpec::headerBackgroundColor() const +{ + id const p = _v[@"headerBackgroundColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsSpec::headerTextColor() const +{ + id const p = _v[@"headerTextColor"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::AndroidColorsSpec::closeButtonColor() const +{ + id const p = _v[@"closeButtonColor"]; + return RCTBridgingToOptionalString(p); +} +inline std::optional JS::NativeShopifyCheckoutKit::AndroidColorsSpec::light() const +{ + id const p = _v[@"light"]; + return (p == nil ? std::nullopt : std::make_optional(JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec(p))); +} +inline std::optional JS::NativeShopifyCheckoutKit::AndroidColorsSpec::dark() const +{ + id const p = _v[@"dark"]; + return (p == nil ? std::nullopt : std::make_optional(JS::NativeShopifyCheckoutKit::AndroidColorsBaseSpec(p))); +} +inline std::optional JS::NativeShopifyCheckoutKit::ColorsSpec::ios() const +{ + id const p = _v[@"ios"]; + return (p == nil ? std::nullopt : std::make_optional(JS::NativeShopifyCheckoutKit::IosColorsSpec(p))); +} +inline std::optional JS::NativeShopifyCheckoutKit::ColorsSpec::android() const +{ + id const p = _v[@"android"]; + return (p == nil ? std::nullopt : std::make_optional(JS::NativeShopifyCheckoutKit::AndroidColorsSpec(p))); +} +inline NSString *JS::NativeShopifyCheckoutKit::ConfigurationSpec::title() const +{ + id const p = _v[@"title"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::ConfigurationSpec::colorScheme() const +{ + id const p = _v[@"colorScheme"]; + return RCTBridgingToOptionalString(p); +} +inline NSString *JS::NativeShopifyCheckoutKit::ConfigurationSpec::logLevel() const +{ + id const p = _v[@"logLevel"]; + return RCTBridgingToOptionalString(p); +} +inline std::optional JS::NativeShopifyCheckoutKit::ConfigurationSpec::preloading() const +{ + id const p = _v[@"preloading"]; + return RCTBridgingToOptionalBool(p); +} +inline std::optional> JS::NativeShopifyCheckoutKit::ConfigurationSpec::allowedMessageOrigins() const +{ + id const p = _v[@"allowedMessageOrigins"]; + return RCTBridgingToOptionalVec(p, ^NSString *(id itemValue_0) { return RCTBridgingToString(itemValue_0); }); +} +inline std::optional JS::NativeShopifyCheckoutKit::ConfigurationSpec::colors() const +{ + id const p = _v[@"colors"]; + return (p == nil ? std::nullopt : std::make_optional(JS::NativeShopifyCheckoutKit::ColorsSpec(p))); +} +inline JS::NativeShopifyCheckoutKit::Constants::Builder::Builder(const Input i) : _factory(^{ + NSMutableDictionary *d = [NSMutableDictionary new]; + auto version = i.version.get(); + d[@"version"] = version; + auto dispatchEventTypes = i.dispatchEventTypes.get(); + d[@"dispatchEventTypes"] = RCTConvertVecToArray(dispatchEventTypes, ^id(NSString * el_) { return el_; }); + return d; +}) {} +inline JS::NativeShopifyCheckoutKit::Constants::Builder::Builder(Constants i) : _factory(^{ + return i.unsafeRawValue(); +}) {} +NS_ASSUME_NONNULL_END +#endif // RNShopifyCheckoutKitSpec_H diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.cpp b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.cpp new file mode 100644 index 000000000..11ec88389 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.cpp @@ -0,0 +1,17 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateShadowNodeCpp.js + */ + +#include "ShadowNodes.h" + +namespace facebook::react { + +extern const char RCTAcceleratedCheckoutButtonsComponentName[] = "RCTAcceleratedCheckoutButtons"; + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.h new file mode 100644 index 000000000..3b593b4a5 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.h @@ -0,0 +1,32 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateShadowNodeH.js + */ + +#pragma once + +#include "EventEmitters.h" +#include "Props.h" +#include "States.h" +#include +#include + +namespace facebook::react { + +JSI_EXPORT extern const char RCTAcceleratedCheckoutButtonsComponentName[]; + +/* + * `ShadowNode` for component. + */ +using RCTAcceleratedCheckoutButtonsShadowNode = ConcreteViewShadowNode< + RCTAcceleratedCheckoutButtonsComponentName, + RCTAcceleratedCheckoutButtonsProps, + RCTAcceleratedCheckoutButtonsEventEmitter, + RCTAcceleratedCheckoutButtonsState>; + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.cpp b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.cpp new file mode 100644 index 000000000..1dbb184cb --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.cpp @@ -0,0 +1,16 @@ + +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateStateCpp.js + */ +#include "States.h" + +namespace facebook::react { + + + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.h new file mode 100644 index 000000000..d628125f6 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.h @@ -0,0 +1,20 @@ +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateStateH.js + */ +#pragma once + +#include +#ifdef RN_SERIALIZABLE_STATE +#include +#endif + +namespace facebook::react { + +using RCTAcceleratedCheckoutButtonsState = StateData; + +} // namespace facebook::react \ No newline at end of file diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpecJSI.h b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpecJSI.h new file mode 100644 index 000000000..49f58a48a --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/ios/generated/ReactCodegen/RNShopifyCheckoutKitSpecJSI.h @@ -0,0 +1,613 @@ +/** + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GenerateModuleH.js + */ + +#pragma once + +#include +#include + +namespace facebook::react { + + +#pragma mark - NativeShopifyCheckoutKitAndroidColorsBaseSpec + +template +struct NativeShopifyCheckoutKitAndroidColorsBaseSpec { + P0 progressIndicator{}; + P1 backgroundColor{}; + P2 headerBackgroundColor{}; + P3 headerTextColor{}; + P4 closeButtonColor; + bool operator==(const NativeShopifyCheckoutKitAndroidColorsBaseSpec &other) const { + return progressIndicator == other.progressIndicator && backgroundColor == other.backgroundColor && headerBackgroundColor == other.headerBackgroundColor && headerTextColor == other.headerTextColor && closeButtonColor == other.closeButtonColor; + } +}; + +template +struct NativeShopifyCheckoutKitAndroidColorsBaseSpecBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "progressIndicator"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "backgroundColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "headerBackgroundColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "headerTextColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "closeButtonColor"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::String progressIndicatorToJs(jsi::Runtime &rt, decltype(types.progressIndicator) value) { + return bridging::toJs(rt, value); + } + static jsi::String backgroundColorToJs(jsi::Runtime &rt, decltype(types.backgroundColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String headerBackgroundColorToJs(jsi::Runtime &rt, decltype(types.headerBackgroundColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String headerTextColorToJs(jsi::Runtime &rt, decltype(types.headerTextColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String closeButtonColorToJs(jsi::Runtime &rt, decltype(types.closeButtonColor) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + if (value.progressIndicator) { + result.setProperty(rt, "progressIndicator", bridging::toJs(rt, value.progressIndicator.value(), jsInvoker)); + } + if (value.backgroundColor) { + result.setProperty(rt, "backgroundColor", bridging::toJs(rt, value.backgroundColor.value(), jsInvoker)); + } + if (value.headerBackgroundColor) { + result.setProperty(rt, "headerBackgroundColor", bridging::toJs(rt, value.headerBackgroundColor.value(), jsInvoker)); + } + if (value.headerTextColor) { + result.setProperty(rt, "headerTextColor", bridging::toJs(rt, value.headerTextColor.value(), jsInvoker)); + } + if (value.closeButtonColor) { + result.setProperty(rt, "closeButtonColor", bridging::toJs(rt, value.closeButtonColor.value(), jsInvoker)); + } + return result; + } +}; + + + +#pragma mark - NativeShopifyCheckoutKitAndroidColorsSpec + +template +struct NativeShopifyCheckoutKitAndroidColorsSpec { + P0 progressIndicator{}; + P1 backgroundColor{}; + P2 headerBackgroundColor{}; + P3 headerTextColor{}; + P4 closeButtonColor{}; + P5 light{}; + P6 dark; + bool operator==(const NativeShopifyCheckoutKitAndroidColorsSpec &other) const { + return progressIndicator == other.progressIndicator && backgroundColor == other.backgroundColor && headerBackgroundColor == other.headerBackgroundColor && headerTextColor == other.headerTextColor && closeButtonColor == other.closeButtonColor && light == other.light && dark == other.dark; + } +}; + +template +struct NativeShopifyCheckoutKitAndroidColorsSpecBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "progressIndicator"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "backgroundColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "headerBackgroundColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "headerTextColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "closeButtonColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "light"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "dark"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::String progressIndicatorToJs(jsi::Runtime &rt, decltype(types.progressIndicator) value) { + return bridging::toJs(rt, value); + } + static jsi::String backgroundColorToJs(jsi::Runtime &rt, decltype(types.backgroundColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String headerBackgroundColorToJs(jsi::Runtime &rt, decltype(types.headerBackgroundColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String headerTextColorToJs(jsi::Runtime &rt, decltype(types.headerTextColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String closeButtonColorToJs(jsi::Runtime &rt, decltype(types.closeButtonColor) value) { + return bridging::toJs(rt, value); + } + static jsi::Object lightToJs(jsi::Runtime &rt, decltype(types.light) value) { + return bridging::toJs(rt, value); + } + static jsi::Object darkToJs(jsi::Runtime &rt, decltype(types.dark) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + if (value.progressIndicator) { + result.setProperty(rt, "progressIndicator", bridging::toJs(rt, value.progressIndicator.value(), jsInvoker)); + } + if (value.backgroundColor) { + result.setProperty(rt, "backgroundColor", bridging::toJs(rt, value.backgroundColor.value(), jsInvoker)); + } + if (value.headerBackgroundColor) { + result.setProperty(rt, "headerBackgroundColor", bridging::toJs(rt, value.headerBackgroundColor.value(), jsInvoker)); + } + if (value.headerTextColor) { + result.setProperty(rt, "headerTextColor", bridging::toJs(rt, value.headerTextColor.value(), jsInvoker)); + } + if (value.closeButtonColor) { + result.setProperty(rt, "closeButtonColor", bridging::toJs(rt, value.closeButtonColor.value(), jsInvoker)); + } + if (value.light) { + result.setProperty(rt, "light", bridging::toJs(rt, value.light.value(), jsInvoker)); + } + if (value.dark) { + result.setProperty(rt, "dark", bridging::toJs(rt, value.dark.value(), jsInvoker)); + } + return result; + } +}; + + + +#pragma mark - NativeShopifyCheckoutKitColorsSpec + +template +struct NativeShopifyCheckoutKitColorsSpec { + P0 ios{}; + P1 android; + bool operator==(const NativeShopifyCheckoutKitColorsSpec &other) const { + return ios == other.ios && android == other.android; + } +}; + +template +struct NativeShopifyCheckoutKitColorsSpecBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "ios"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "android"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::Object iosToJs(jsi::Runtime &rt, decltype(types.ios) value) { + return bridging::toJs(rt, value); + } + static jsi::Object androidToJs(jsi::Runtime &rt, decltype(types.android) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + if (value.ios) { + result.setProperty(rt, "ios", bridging::toJs(rt, value.ios.value(), jsInvoker)); + } + if (value.android) { + result.setProperty(rt, "android", bridging::toJs(rt, value.android.value(), jsInvoker)); + } + return result; + } +}; + + + +#pragma mark - NativeShopifyCheckoutKitConfigurationResultSpec + +template +struct NativeShopifyCheckoutKitConfigurationResultSpec { + P0 colorScheme{}; + P1 logLevel{}; + P2 preloading{}; + P3 title{}; + P4 tintColor{}; + P5 backgroundColor{}; + P6 closeButtonColor{}; + P7 allowedMessageOrigins; + bool operator==(const NativeShopifyCheckoutKitConfigurationResultSpec &other) const { + return colorScheme == other.colorScheme && logLevel == other.logLevel && preloading == other.preloading && title == other.title && tintColor == other.tintColor && backgroundColor == other.backgroundColor && closeButtonColor == other.closeButtonColor && allowedMessageOrigins == other.allowedMessageOrigins; + } +}; + +template +struct NativeShopifyCheckoutKitConfigurationResultSpecBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "colorScheme"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "logLevel"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "preloading"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "title"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "tintColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "backgroundColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "closeButtonColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "allowedMessageOrigins"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::String colorSchemeToJs(jsi::Runtime &rt, decltype(types.colorScheme) value) { + return bridging::toJs(rt, value); + } + static jsi::String logLevelToJs(jsi::Runtime &rt, decltype(types.logLevel) value) { + return bridging::toJs(rt, value); + } + static bool preloadingToJs(jsi::Runtime &rt, decltype(types.preloading) value) { + return bridging::toJs(rt, value); + } + static jsi::String titleToJs(jsi::Runtime &rt, decltype(types.title) value) { + return bridging::toJs(rt, value); + } + static jsi::String tintColorToJs(jsi::Runtime &rt, decltype(types.tintColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String backgroundColorToJs(jsi::Runtime &rt, decltype(types.backgroundColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String closeButtonColorToJs(jsi::Runtime &rt, decltype(types.closeButtonColor) value) { + return bridging::toJs(rt, value); + } + static jsi::Array allowedMessageOriginsToJs(jsi::Runtime &rt, decltype(types.allowedMessageOrigins) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + result.setProperty(rt, "colorScheme", bridging::toJs(rt, value.colorScheme, jsInvoker)); + result.setProperty(rt, "logLevel", bridging::toJs(rt, value.logLevel, jsInvoker)); + result.setProperty(rt, "preloading", bridging::toJs(rt, value.preloading, jsInvoker)); + if (value.title) { + result.setProperty(rt, "title", bridging::toJs(rt, value.title.value(), jsInvoker)); + } + if (value.tintColor) { + result.setProperty(rt, "tintColor", bridging::toJs(rt, value.tintColor.value(), jsInvoker)); + } + if (value.backgroundColor) { + result.setProperty(rt, "backgroundColor", bridging::toJs(rt, value.backgroundColor.value(), jsInvoker)); + } + if (value.closeButtonColor) { + result.setProperty(rt, "closeButtonColor", bridging::toJs(rt, value.closeButtonColor.value(), jsInvoker)); + } + result.setProperty(rt, "allowedMessageOrigins", bridging::toJs(rt, value.allowedMessageOrigins, jsInvoker)); + return result; + } +}; + + + +#pragma mark - NativeShopifyCheckoutKitConfigurationSpec + +template +struct NativeShopifyCheckoutKitConfigurationSpec { + P0 title{}; + P1 colorScheme{}; + P2 logLevel{}; + P3 preloading{}; + P4 allowedMessageOrigins{}; + P5 colors; + bool operator==(const NativeShopifyCheckoutKitConfigurationSpec &other) const { + return title == other.title && colorScheme == other.colorScheme && logLevel == other.logLevel && preloading == other.preloading && allowedMessageOrigins == other.allowedMessageOrigins && colors == other.colors; + } +}; + +template +struct NativeShopifyCheckoutKitConfigurationSpecBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "title"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "colorScheme"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "logLevel"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "preloading"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "allowedMessageOrigins"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "colors"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::String titleToJs(jsi::Runtime &rt, decltype(types.title) value) { + return bridging::toJs(rt, value); + } + static jsi::String colorSchemeToJs(jsi::Runtime &rt, decltype(types.colorScheme) value) { + return bridging::toJs(rt, value); + } + static jsi::String logLevelToJs(jsi::Runtime &rt, decltype(types.logLevel) value) { + return bridging::toJs(rt, value); + } + static bool preloadingToJs(jsi::Runtime &rt, decltype(types.preloading) value) { + return bridging::toJs(rt, value); + } + static jsi::Array allowedMessageOriginsToJs(jsi::Runtime &rt, decltype(types.allowedMessageOrigins) value) { + return bridging::toJs(rt, value); + } + static jsi::Object colorsToJs(jsi::Runtime &rt, decltype(types.colors) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + if (value.title) { + result.setProperty(rt, "title", bridging::toJs(rt, value.title.value(), jsInvoker)); + } + if (value.colorScheme) { + result.setProperty(rt, "colorScheme", bridging::toJs(rt, value.colorScheme.value(), jsInvoker)); + } + if (value.logLevel) { + result.setProperty(rt, "logLevel", bridging::toJs(rt, value.logLevel.value(), jsInvoker)); + } + if (value.preloading) { + result.setProperty(rt, "preloading", bridging::toJs(rt, value.preloading.value(), jsInvoker)); + } + if (value.allowedMessageOrigins) { + result.setProperty(rt, "allowedMessageOrigins", bridging::toJs(rt, value.allowedMessageOrigins.value(), jsInvoker)); + } + if (value.colors) { + result.setProperty(rt, "colors", bridging::toJs(rt, value.colors.value(), jsInvoker)); + } + return result; + } +}; + + + +#pragma mark - NativeShopifyCheckoutKitIosColorsSpec + +template +struct NativeShopifyCheckoutKitIosColorsSpec { + P0 tintColor{}; + P1 backgroundColor{}; + P2 closeButtonColor; + bool operator==(const NativeShopifyCheckoutKitIosColorsSpec &other) const { + return tintColor == other.tintColor && backgroundColor == other.backgroundColor && closeButtonColor == other.closeButtonColor; + } +}; + +template +struct NativeShopifyCheckoutKitIosColorsSpecBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "tintColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "backgroundColor"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "closeButtonColor"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::String tintColorToJs(jsi::Runtime &rt, decltype(types.tintColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String backgroundColorToJs(jsi::Runtime &rt, decltype(types.backgroundColor) value) { + return bridging::toJs(rt, value); + } + static jsi::String closeButtonColorToJs(jsi::Runtime &rt, decltype(types.closeButtonColor) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + if (value.tintColor) { + result.setProperty(rt, "tintColor", bridging::toJs(rt, value.tintColor.value(), jsInvoker)); + } + if (value.backgroundColor) { + result.setProperty(rt, "backgroundColor", bridging::toJs(rt, value.backgroundColor.value(), jsInvoker)); + } + if (value.closeButtonColor) { + result.setProperty(rt, "closeButtonColor", bridging::toJs(rt, value.closeButtonColor.value(), jsInvoker)); + } + return result; + } +}; + + +template +class JSI_EXPORT NativeShopifyCheckoutKitCxxSpec : public TurboModule { +public: + static constexpr std::string_view kModuleName = "ShopifyCheckoutKit"; + +protected: + NativeShopifyCheckoutKitCxxSpec(std::shared_ptr jsInvoker) : TurboModule(std::string{NativeShopifyCheckoutKitCxxSpec::kModuleName}, jsInvoker) { + methodMap_["present"] = MethodMetadata {.argCount = 2, .invoker = __present}; + methodMap_["preload"] = MethodMetadata {.argCount = 2, .invoker = __preload}; + methodMap_["dismiss"] = MethodMetadata {.argCount = 0, .invoker = __dismiss}; + methodMap_["invalidateCache"] = MethodMetadata {.argCount = 0, .invoker = __invalidateCache}; + methodMap_["setConfig"] = MethodMetadata {.argCount = 1, .invoker = __setConfig}; + methodMap_["getConfig"] = MethodMetadata {.argCount = 0, .invoker = __getConfig}; + methodMap_["configureAcceleratedCheckouts"] = MethodMetadata {.argCount = 8, .invoker = __configureAcceleratedCheckouts}; + methodMap_["isAcceleratedCheckoutAvailable"] = MethodMetadata {.argCount = 0, .invoker = __isAcceleratedCheckoutAvailable}; + methodMap_["isApplePayAvailable"] = MethodMetadata {.argCount = 0, .invoker = __isApplePayAvailable}; + methodMap_["respondToGeolocationRequest"] = MethodMetadata {.argCount = 1, .invoker = __respondToGeolocationRequest}; + methodMap_["addListener"] = MethodMetadata {.argCount = 1, .invoker = __addListener}; + methodMap_["removeListeners"] = MethodMetadata {.argCount = 1, .invoker = __removeListeners}; + methodMap_["getConstants"] = MethodMetadata {.argCount = 0, .invoker = __getConstants}; + eventEmitterMap_["onDispatch"] = std::make_shared>(); + eventEmitterMap_["onPreloadStateChange"] = std::make_shared>(); + } + + template void emitOnDispatch(OnDispatchType value) { + static_assert(bridging::supportsFromJs, "value cannnot be converted to jsi::String"); + static_cast&>(*eventEmitterMap_["onDispatch"]).emit([jsInvoker = jsInvoker_, eventValue = value](jsi::Runtime& rt) -> jsi::Value { + return bridging::toJs(rt, eventValue, jsInvoker); + }); + } + + template void emitOnPreloadStateChange(OnPreloadStateChangeType value) { + static_assert(bridging::supportsFromJs, "value cannnot be converted to jsi::String"); + static_cast&>(*eventEmitterMap_["onPreloadStateChange"]).emit([jsInvoker = jsInvoker_, eventValue = value](jsi::Runtime& rt) -> jsi::Value { + return bridging::toJs(rt, eventValue, jsInvoker); + }); + } +private: + static jsi::Value __present(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::present) == 3, + "Expected present(...) to have 3 parameters"); + bridging::callFromJs(rt, &T::present, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt), + count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asObject(rt).asArray(rt));return jsi::Value::undefined(); + } + + static jsi::Value __preload(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::preload) == 3, + "Expected preload(...) to have 3 parameters"); + bridging::callFromJs(rt, &T::preload, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt), + count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt));return jsi::Value::undefined(); + } + + static jsi::Value __dismiss(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) { + static_assert( + bridging::getParameterCount(&T::dismiss) == 1, + "Expected dismiss(...) to have 1 parameters"); + bridging::callFromJs(rt, &T::dismiss, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule));return jsi::Value::undefined(); + } + + static jsi::Value __invalidateCache(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) { + static_assert( + bridging::getParameterCount(&T::invalidateCache) == 1, + "Expected invalidateCache(...) to have 1 parameters"); + bridging::callFromJs(rt, &T::invalidateCache, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule));return jsi::Value::undefined(); + } + + static jsi::Value __setConfig(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::setConfig) == 2, + "Expected setConfig(...) to have 2 parameters"); + bridging::callFromJs(rt, &T::setConfig, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt));return jsi::Value::undefined(); + } + + static jsi::Value __getConfig(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) { + static_assert( + bridging::getParameterCount(&T::getConfig) == 1, + "Expected getConfig(...) to have 1 parameters"); + return bridging::callFromJs(rt, &T::getConfig, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule)); + } + + static jsi::Value __configureAcceleratedCheckouts(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::configureAcceleratedCheckouts) == 9, + "Expected configureAcceleratedCheckouts(...) to have 9 parameters"); + return bridging::callFromJs(rt, &T::configureAcceleratedCheckouts, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt), + count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt), + count <= 2 || args[2].isNull() || args[2].isUndefined() ? std::nullopt : std::make_optional(args[2].asString(rt)), + count <= 3 || args[3].isNull() || args[3].isUndefined() ? std::nullopt : std::make_optional(args[3].asString(rt)), + count <= 4 || args[4].isNull() || args[4].isUndefined() ? std::nullopt : std::make_optional(args[4].asString(rt)), + count <= 5 || args[5].isNull() || args[5].isUndefined() ? std::nullopt : std::make_optional(args[5].asString(rt)), + count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt).asArray(rt), + count <= 7 ? throw jsi::JSError(rt, "Expected argument in position 7 to be passed") : args[7].asObject(rt).asArray(rt)); + } + + static jsi::Value __isAcceleratedCheckoutAvailable(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) { + static_assert( + bridging::getParameterCount(&T::isAcceleratedCheckoutAvailable) == 1, + "Expected isAcceleratedCheckoutAvailable(...) to have 1 parameters"); + return bridging::callFromJs(rt, &T::isAcceleratedCheckoutAvailable, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule)); + } + + static jsi::Value __isApplePayAvailable(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) { + static_assert( + bridging::getParameterCount(&T::isApplePayAvailable) == 1, + "Expected isApplePayAvailable(...) to have 1 parameters"); + return bridging::callFromJs(rt, &T::isApplePayAvailable, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule)); + } + + static jsi::Value __respondToGeolocationRequest(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::respondToGeolocationRequest) == 2, + "Expected respondToGeolocationRequest(...) to have 2 parameters"); + bridging::callFromJs(rt, &T::respondToGeolocationRequest, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asBool());return jsi::Value::undefined(); + } + + static jsi::Value __addListener(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::addListener) == 2, + "Expected addListener(...) to have 2 parameters"); + bridging::callFromJs(rt, &T::addListener, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt));return jsi::Value::undefined(); + } + + static jsi::Value __removeListeners(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_assert( + bridging::getParameterCount(&T::removeListeners) == 2, + "Expected removeListeners(...) to have 2 parameters"); + bridging::callFromJs(rt, &T::removeListeners, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule), + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber());return jsi::Value::undefined(); + } + + static jsi::Value __getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) { + static_assert( + bridging::getParameterCount(&T::getConstants) == 1, + "Expected getConstants(...) to have 1 parameters"); + return bridging::callFromJs(rt, &T::getConstants, static_cast(&turboModule)->jsInvoker_, static_cast(&turboModule)); + } +}; + +} // namespace facebook::react diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.json b/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.json index 49cd8520e..92ca567cf 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.json +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.json @@ -26,10 +26,12 @@ "scripts": { "clean": "rm -rf lib", "build": "bob build", - "lint": "pnpm run typecheck && eslint src", + "lint": "pnpm run typecheck && eslint src && pnpm codegen:ios:check", "typecheck": "tsc --noEmit", "api:check": "pnpm build && node ./scripts/prepare-api-extract.mjs && api-extractor run --verbose", - "api:dump": "pnpm build && node ./scripts/prepare-api-extract.mjs && api-extractor run --local --verbose" + "api:dump": "pnpm build && node ./scripts/prepare-api-extract.mjs && api-extractor run --local --verbose", + "codegen:ios": "node ./scripts/generate-spm-codegen.mjs", + "codegen:ios:check": "node ./scripts/generate-spm-codegen.mjs --check" }, "files": [ "LICENSE", @@ -40,7 +42,6 @@ "android", "lib", "*.podspec", - "!ios/Package.swift", "!ios/Tests", "!ios/build", "!android/src/test", @@ -78,6 +79,7 @@ "name": "RNShopifyCheckoutKitSpec", "type": "all", "jsSrcsDir": "src/specs", + "includesGeneratedCode": true, "android": { "javaPackageName": "com.shopify.checkoutkit" }, diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.snapshot.json b/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.snapshot.json index 32f3e2743..a1e5d1613 100644 --- a/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.snapshot.json +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/package.snapshot.json @@ -12,6 +12,21 @@ "android/src/main/java/com/shopify/reactnative/checkoutkit/ShopifyCheckoutKitPackage.java", "ios/AcceleratedCheckoutButtons.swift", "ios/AcceleratedCheckoutButtons+Extensions.swift", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.cpp", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ComponentDescriptors.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.cpp", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/EventEmitters.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.cpp", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/Props.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RCTComponentViewHelpers.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec-generated.mm", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/RNShopifyCheckoutKitSpec.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.cpp", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/ShadowNodes.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.cpp", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpec/States.h", + "ios/generated/ReactCodegen/RNShopifyCheckoutKitSpecJSI.h", + "ios/Package.swift", "ios/ProtocolRelay.swift", "ios/ShopifyCheckoutKit-Bridging-Header.h", "ios/ShopifyCheckoutKit.mm", diff --git a/platforms/react-native/modules/@shopify/checkout-kit-react-native/scripts/generate-spm-codegen.mjs b/platforms/react-native/modules/@shopify/checkout-kit-react-native/scripts/generate-spm-codegen.mjs new file mode 100644 index 000000000..d035f08c0 --- /dev/null +++ b/platforms/react-native/modules/@shopify/checkout-kit-react-native/scripts/generate-spm-codegen.mjs @@ -0,0 +1,97 @@ +import {spawnSync} from 'node:child_process'; +import { + cpSync, + mkdtempSync, + readdirSync, + readFileSync, + rmSync, + statSync, + writeFileSync, +} from 'node:fs'; +import {tmpdir} from 'node:os'; +import {dirname, join, resolve} from 'node:path'; +import {fileURLToPath} from 'node:url'; + +const moduleRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const reactNativeRoot = resolve(moduleRoot, '../../../node_modules/react-native'); +const generator = join( + reactNativeRoot, + 'scripts/generate-codegen-artifacts.js', +); +const committedOutput = join(moduleRoot, 'ios/generated/ReactCodegen'); +const temporaryOutput = mkdtempSync(join(tmpdir(), 'checkout-kit-codegen-')); +const check = process.argv.includes('--check'); + +function listFiles(root, relative = '') { + const directory = join(root, relative); + + return readdirSync(directory).flatMap(name => { + const child = join(relative, name); + return statSync(join(root, child)).isDirectory() + ? listFiles(root, child) + : [child]; + }); +} + +function outputsMatch(actual, expected) { + const actualFiles = listFiles(actual); + const expectedFiles = listFiles(expected); + + return ( + actualFiles.length === expectedFiles.length && + actualFiles.every( + (file, index) => + file === expectedFiles[index] && + readFileSync(join(actual, file)).equals( + readFileSync(join(expected, file)), + ), + ) + ); +} + +function normalizeGeneratedOutput(root) { + for (const file of listFiles(root)) { + const path = join(root, file); + const contents = readFileSync(path, 'utf8'); + writeFileSync(path, contents.replace(/[ \t]+$/gm, '')); + } +} + +try { + const result = spawnSync( + process.execPath, + [ + generator, + '--path', + moduleRoot, + '--targetPlatform', + 'ios', + '--outputPath', + temporaryOutput, + '--source', + 'library', + ], + {stdio: 'inherit'}, + ); + + if (result.status !== 0) { + process.exitCode = result.status ?? 1; + } else { + const generatedOutput = join(temporaryOutput, 'ReactCodegen'); + normalizeGeneratedOutput(generatedOutput); + + if (check) { + if (!outputsMatch(generatedOutput, committedOutput)) { + console.error( + 'Committed iOS Codegen output is stale. Run `pnpm codegen:ios`.', + ); + process.exitCode = 1; + } + } else { + rmSync(committedOutput, {recursive: true, force: true}); + cpSync(generatedOutput, committedOutput, {recursive: true}); + } + } +} finally { + rmSync(temporaryOutput, {recursive: true, force: true}); +} diff --git a/platforms/react-native/package.json b/platforms/react-native/package.json index 496dbcf78..f364889ad 100644 --- a/platforms/react-native/package.json +++ b/platforms/react-native/package.json @@ -29,6 +29,17 @@ "lodash": ">=4.18.0", "handlebars": ">=4.7.9", "fast-xml-parser": ">=5.7.0" + }, + "patchedDependencies": { + "@react-native-masked-view/masked-view@0.3.2": "patches/@react-native-masked-view__masked-view@0.3.2.patch", + "react-native-config@1.5.6": "patches/react-native-config@1.5.6.patch", + "react-native-encrypted-storage@4.0.3": "patches/react-native-encrypted-storage@4.0.3.patch", + "react-native-gesture-handler@3.2.1": "patches/react-native-gesture-handler@3.2.1.patch", + "react-native-get-random-values@2.0.0": "patches/react-native-get-random-values@2.0.0.patch", + "react-native-safe-area-context@5.9.1": "patches/react-native-safe-area-context@5.9.1.patch", + "react-native-screens@4.27.0": "patches/react-native-screens@4.27.0.patch", + "react-native-vector-icons@10.3.0": "patches/react-native-vector-icons@10.3.0.patch", + "react-native-webview@13.16.1": "patches/react-native-webview@13.16.1.patch" } }, "scripts": { diff --git a/platforms/react-native/patches/@react-native-masked-view__masked-view@0.3.2.patch b/platforms/react-native/patches/@react-native-masked-view__masked-view@0.3.2.patch new file mode 100644 index 000000000..fde1a41e2 --- /dev/null +++ b/platforms/react-native/patches/@react-native-masked-view__masked-view@0.3.2.patch @@ -0,0 +1,66 @@ +diff --git a/masked-view.Package.swift b/Package.swift +new file mode 100644 +index 0000000..afa59fc +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,44 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "MaskedView", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "MaskedView", targets: ["MaskedView"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "MaskedView", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "ios/RNCMaskedView.h", ++ "ios/RNCMaskedView.m", ++ "ios/RNCMaskedViewManager.h", ++ "ios/RNCMaskedViewManager.m", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-config@1.5.6.patch b/platforms/react-native/patches/react-native-config@1.5.6.patch new file mode 100644 index 000000000..658d20ae2 --- /dev/null +++ b/platforms/react-native/patches/react-native-config@1.5.6.patch @@ -0,0 +1,67 @@ +diff --git a/react-native-config.Package.swift b/Package.swift +new file mode 100644 +index 0000000..5317a2b +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,45 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeConfig", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeConfig", targets: ["ReactNativeConfig"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeConfig", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "ios/ReactNativeConfig/GeneratedDotEnv.m", ++ "ios/ReactNativeConfig/RNCConfig.h", ++ "ios/ReactNativeConfig/RNCConfig.m", ++ "ios/ReactNativeConfig/RNCConfigModule.h", ++ "ios/ReactNativeConfig/RNCConfigModule.m", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("ios/ReactNativeConfig"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("ios/ReactNativeConfig"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-encrypted-storage@4.0.3.patch b/platforms/react-native/patches/react-native-encrypted-storage@4.0.3.patch new file mode 100644 index 000000000..7f7aedd53 --- /dev/null +++ b/platforms/react-native/patches/react-native-encrypted-storage@4.0.3.patch @@ -0,0 +1,64 @@ +diff --git a/react-native-encrypted-storage.Package.swift b/Package.swift +new file mode 100644 +index 0000000..b389768 +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,42 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeEncryptedStorage", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeEncryptedStorage", targets: ["ReactNativeEncryptedStorage"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeEncryptedStorage", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "ios/RNEncryptedStorage.h", ++ "ios/RNEncryptedStorage.m", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-gesture-handler@3.2.1.patch b/platforms/react-native/patches/react-native-gesture-handler@3.2.1.patch new file mode 100644 index 000000000..c62ae9418 --- /dev/null +++ b/platforms/react-native/patches/react-native-gesture-handler@3.2.1.patch @@ -0,0 +1,126 @@ +diff --git a/react-native-gesture-handler.Package.swift b/Package.swift +new file mode 100644 +index 0000000..02fe76d +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,104 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeGestureHandler", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeGestureHandler", targets: ["ReactNativeGestureHandler"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeGestureHandler", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "apple/Handlers/RNFlingHandler.h", ++ "apple/Handlers/RNFlingHandler.m", ++ "apple/Handlers/RNForceTouchHandler.h", ++ "apple/Handlers/RNForceTouchHandler.m", ++ "apple/Handlers/RNHoverHandler.h", ++ "apple/Handlers/RNHoverHandler.m", ++ "apple/Handlers/RNLongPressHandler.h", ++ "apple/Handlers/RNLongPressHandler.m", ++ "apple/Handlers/RNManualHandler.h", ++ "apple/Handlers/RNManualHandler.m", ++ "apple/Handlers/RNNativeViewHandler.h", ++ "apple/Handlers/RNNativeViewHandler.mm", ++ "apple/Handlers/RNPanHandler.h", ++ "apple/Handlers/RNPanHandler.m", ++ "apple/Handlers/RNPinchHandler.h", ++ "apple/Handlers/RNPinchHandler.m", ++ "apple/Handlers/RNRotationHandler.h", ++ "apple/Handlers/RNRotationHandler.m", ++ "apple/Handlers/RNTapHandler.h", ++ "apple/Handlers/RNTapHandler.m", ++ "apple/RNGHStylusData.h", ++ "apple/RNGHStylusData.m", ++ "apple/RNGHTouchEventType.h", ++ "apple/RNGHUIKit.h", ++ "apple/RNGHVector.h", ++ "apple/RNGHVector.m", ++ "apple/RNGestureHandler.h", ++ "apple/RNGestureHandler.mm", ++ "apple/RNGestureHandlerActionType.h", ++ "apple/RNGestureHandlerButton.h", ++ "apple/RNGestureHandlerButton.mm", ++ "apple/RNGestureHandlerButtonComponentView.h", ++ "apple/RNGestureHandlerButtonComponentView.mm", ++ "apple/RNGestureHandlerDetector.h", ++ "apple/RNGestureHandlerDetector.mm", ++ "apple/RNGestureHandlerDirection.h", ++ "apple/RNGestureHandlerEventHandlerType.h", ++ "apple/RNGestureHandlerEvents.h", ++ "apple/RNGestureHandlerEvents.mm", ++ "apple/RNGestureHandlerManager.h", ++ "apple/RNGestureHandlerManager.mm", ++ "apple/RNGestureHandlerModule.h", ++ "apple/RNGestureHandlerModule.mm", ++ "apple/RNGestureHandlerNativeEventUtils.h", ++ "apple/RNGestureHandlerNativeEventUtils.mm", ++ "apple/RNGestureHandlerPointerEvents.h", ++ "apple/RNGestureHandlerPointerTracker.h", ++ "apple/RNGestureHandlerPointerTracker.mm", ++ "apple/RNGestureHandlerPointerType.h", ++ "apple/RNGestureHandlerRegistry.h", ++ "apple/RNGestureHandlerRegistry.m", ++ "apple/RNGestureHandlerRootViewComponentView.mm", ++ "apple/RNGestureHandlerState.h", ++ "apple/RNManualActivationRecognizer.h", ++ "apple/RNManualActivationRecognizer.m", ++ "apple/RNRootViewGestureRecognizer.h", ++ "apple/RNRootViewGestureRecognizer.m", ++ "shared/runtime/RNGHRuntimeDecorator.cpp", ++ "shared/runtime/RNGHRuntimeDecorator.h", ++ "shared/shadowNodes/react/renderer/components/rngesturehandler_codegen/ComponentDescriptors.h", ++ "shared/shadowNodes/react/renderer/components/rngesturehandler_codegen/RNGestureHandlerDetectorComponentDescriptor.h", ++ "shared/shadowNodes/react/renderer/components/rngesturehandler_codegen/RNGestureHandlerDetectorShadowNode.cpp", ++ "shared/shadowNodes/react/renderer/components/rngesturehandler_codegen/RNGestureHandlerDetectorShadowNode.h", ++ "shared/shadowNodes/react/renderer/components/rngesturehandler_codegen/RNGestureHandlerDetectorState.h", ++ ], ++ publicHeadersPath: "apple", ++ cSettings: [.define("REACT_NATIVE_MINOR_VERSION", to: "87"), .headerSearchPath("apple/Handlers"), .headerSearchPath("apple"), .headerSearchPath("shared/runtime"), .headerSearchPath("shared/shadowNodes/react/renderer/components/rngesturehandler_codegen"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.define("REACT_NATIVE_MINOR_VERSION", to: "87"), .headerSearchPath("apple/Handlers"), .headerSearchPath("apple"), .headerSearchPath("shared/runtime"), .headerSearchPath("shared/shadowNodes/react/renderer/components/rngesturehandler_codegen"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-get-random-values@2.0.0.patch b/platforms/react-native/patches/react-native-get-random-values@2.0.0.patch new file mode 100644 index 000000000..23d8e15ad --- /dev/null +++ b/platforms/react-native/patches/react-native-get-random-values@2.0.0.patch @@ -0,0 +1,64 @@ +diff --git a/Package.swift b/Package.swift +new file mode 100644 +index 0000000000000000000000000000000000000000..179b8793fb0b047567e8b1be8278ee04ece4083b +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,42 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeGetRandomValues", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeGetRandomValues", targets: ["ReactNativeGetRandomValues"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeGetRandomValues", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "ios/RNGetRandomValues.h", ++ "ios/RNGetRandomValues.mm", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-safe-area-context@5.9.1.patch b/platforms/react-native/patches/react-native-safe-area-context@5.9.1.patch new file mode 100644 index 000000000..bcbb75ec1 --- /dev/null +++ b/platforms/react-native/patches/react-native-safe-area-context@5.9.1.patch @@ -0,0 +1,95 @@ +diff --git a/react-native-safe-area-context.Package.swift b/Package.swift +new file mode 100644 +index 0000000..9747084 +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,73 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeSafeAreaContext", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeSafeAreaContext", targets: ["ReactNativeSafeAreaContext"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeSafeAreaContext", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.cpp", ++ "common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.h", ++ "common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.cpp", ++ "common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.h", ++ "ios/Fabric/RNCSafeAreaProviderComponentView.h", ++ "ios/Fabric/RNCSafeAreaProviderComponentView.mm", ++ "ios/Fabric/RNCSafeAreaViewComponentView.h", ++ "ios/Fabric/RNCSafeAreaViewComponentView.mm", ++ "ios/RNCOnInsetsChangeEvent.h", ++ "ios/RNCOnInsetsChangeEvent.m", ++ "ios/RNCSafeAreaContext.h", ++ "ios/RNCSafeAreaContext.mm", ++ "ios/RNCSafeAreaProvider.h", ++ "ios/RNCSafeAreaProvider.m", ++ "ios/RNCSafeAreaProviderManager.h", ++ "ios/RNCSafeAreaProviderManager.m", ++ "ios/RNCSafeAreaShadowView.h", ++ "ios/RNCSafeAreaShadowView.m", ++ "ios/RNCSafeAreaUtils.h", ++ "ios/RNCSafeAreaUtils.m", ++ "ios/RNCSafeAreaView.h", ++ "ios/RNCSafeAreaView.m", ++ "ios/RNCSafeAreaViewEdgeMode.h", ++ "ios/RNCSafeAreaViewEdgeMode.m", ++ "ios/RNCSafeAreaViewEdges.h", ++ "ios/RNCSafeAreaViewEdges.m", ++ "ios/RNCSafeAreaViewLocalData.h", ++ "ios/RNCSafeAreaViewLocalData.m", ++ "ios/RNCSafeAreaViewManager.h", ++ "ios/RNCSafeAreaViewManager.m", ++ "ios/RNCSafeAreaViewMode.h", ++ "ios/RNCSafeAreaViewMode.m", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("common/cpp"), .headerSearchPath("common/cpp/react/renderer/components/safeareacontext"), .headerSearchPath("ios/Fabric"), .headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("common/cpp"), .headerSearchPath("common/cpp/react/renderer/components/safeareacontext"), .headerSearchPath("ios/Fabric"), .headerSearchPath("ios"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-screens@4.27.0.patch b/platforms/react-native/patches/react-native-screens@4.27.0.patch new file mode 100644 index 000000000..a8f01d3d6 --- /dev/null +++ b/platforms/react-native/patches/react-native-screens@4.27.0.patch @@ -0,0 +1,269 @@ +diff --git a/react-native-screens.Package.swift b/Package.swift +new file mode 100644 +index 0000000..39656b8 +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,247 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeScreens", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeScreens", targets: ["ReactNativeScreens"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeScreens", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSFormSheetHostState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSSafeAreaViewState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNodeCommitHook.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNodeCommitHook.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSScreenState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSSplitScreenState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderItemState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSStackScreenState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryState.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostComponentDescriptor.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostShadowNode.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostShadowNode.h", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostState.cpp", ++ "common/cpp/react/renderer/components/rnscreens/RNSTabsHostState.h", ++ "common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h", ++ "cpp/RNSScreenRemovalListener.cpp", ++ "cpp/RNSScreenRemovalListener.h", ++ "cpp/RNScreensTurboModule.cpp", ++ "cpp/RNScreensTurboModule.h", ++ "ios/RCTImageComponentView+RNSScreenStackHeaderConfig.h", ++ "ios/RCTImageComponentView+RNSScreenStackHeaderConfig.mm", ++ "ios/RNSBarButtonItem.h", ++ "ios/RNSBarButtonItem.mm", ++ "ios/RNSConvert.h", ++ "ios/RNSConvert.mm", ++ "ios/RNSEnums.h", ++ "ios/RNSFullWindowOverlay.h", ++ "ios/RNSFullWindowOverlay.mm", ++ "ios/RNSModalScreen.h", ++ "ios/RNSModalScreen.mm", ++ "ios/RNSModule.h", ++ "ios/RNSModule.mm", ++ "ios/RNSOrientationProviding.h", ++ "ios/RNSPercentDrivenInteractiveTransition.h", ++ "ios/RNSPercentDrivenInteractiveTransition.mm", ++ "ios/RNSReactMountingTransactionObserving.h", ++ "ios/RNSScreen.h", ++ "ios/RNSScreen.mm", ++ "ios/RNSScreenContainer.h", ++ "ios/RNSScreenContainer.mm", ++ "ios/RNSScreenContentWrapper.h", ++ "ios/RNSScreenContentWrapper.mm", ++ "ios/RNSScreenFooter.h", ++ "ios/RNSScreenFooter.mm", ++ "ios/RNSScreenNavigationContainer.h", ++ "ios/RNSScreenNavigationContainer.mm", ++ "ios/RNSScreenStack.h", ++ "ios/RNSScreenStack.mm", ++ "ios/RNSScreenStackAnimator.h", ++ "ios/RNSScreenStackAnimator.mm", ++ "ios/RNSScreenStackHeaderConfig.h", ++ "ios/RNSScreenStackHeaderConfig.mm", ++ "ios/RNSScreenStackHeaderSubview.h", ++ "ios/RNSScreenStackHeaderSubview.mm", ++ "ios/RNSScreenWindowTraits.h", ++ "ios/RNSScreenWindowTraits.mm", ++ "ios/RNSScrollViewBehaviorOverriding.h", ++ "ios/RNSSearchBar.h", ++ "ios/RNSSearchBar.mm", ++ "ios/RNScreens-Bridging-Header.h", ++ "ios/UIScrollView+RNScreens.h", ++ "ios/UIScrollView+RNScreens.mm", ++ "ios/UIViewController+RNScreens.h", ++ "ios/UIViewController+RNScreens.mm", ++ "ios/UIWindow+RNScreens.h", ++ "ios/UIWindow+RNScreens.mm", ++ "ios/bridging/RNSReactBaseView.h", ++ "ios/bridging/RNSReactBaseView.mm", ++ "ios/conversion/RNSConversions-Fabric.mm", ++ "ios/conversion/RNSConversions-ScrollViewMarker.h", ++ "ios/conversion/RNSConversions-ScrollViewMarker.mm", ++ "ios/conversion/RNSConversions-SplitView.mm", ++ "ios/conversion/RNSConversions-Stack.h", ++ "ios/conversion/RNSConversions-Stack.mm", ++ "ios/conversion/RNSConversions-Tabs.mm", ++ "ios/conversion/RNSConversions.h", ++ "ios/conversion/RNSConversions.mm", ++ "ios/conversion/always_false.h", ++ "ios/events/RNSHeaderHeightChangeEvent.h", ++ "ios/events/RNSHeaderHeightChangeEvent.mm", ++ "ios/events/RNSScreenViewEvent.h", ++ "ios/events/RNSScreenViewEvent.mm", ++ "ios/helpers/container/RNSContainer.h", ++ "ios/helpers/container/RNSContainerHelpers.h", ++ "ios/helpers/container/RNSContainerHelpers.mm", ++ "ios/helpers/container/RNSContainerItem.h", ++ "ios/helpers/container/RNSContainerItemSupport.h", ++ "ios/helpers/container/RNSContainerItemSupport.mm", ++ "ios/helpers/container/RNSParentContainerItemRegistry.h", ++ "ios/helpers/container/RNSParentContainerItemRegistry.mm", ++ "ios/helpers/image/RNSImageLoading.h", ++ "ios/helpers/image/RNSImageLoadingHelper.h", ++ "ios/helpers/image/RNSImageLoadingHelper.mm", ++ "ios/helpers/scroll-view/RNSContentScrollViewProviding.h", ++ "ios/helpers/scroll-view/RNSScrollEdgeEffectApplicator.h", ++ "ios/helpers/scroll-view/RNSScrollEdgeEffectApplicator.mm", ++ "ios/helpers/scroll-view/RNSScrollViewFinder.h", ++ "ios/helpers/scroll-view/RNSScrollViewFinder.mm", ++ "ios/helpers/scroll-view/RNSScrollViewHelper.h", ++ "ios/helpers/scroll-view/RNSScrollViewHelper.mm", ++ "ios/integrations/RNSDismissibleModalProtocol.h", ++ "ios/safe-area/RNSSafeAreaProviding.h", ++ "ios/safe-area/RNSSafeAreaViewComponentView.h", ++ "ios/safe-area/RNSSafeAreaViewComponentView.mm", ++ "ios/safe-area/RNSSafeAreaViewNotifications.h", ++ "ios/stubs/RNSGammaStubs.h", ++ "ios/stubs/RNSGammaStubs.mm", ++ "ios/tabs/RCTConvert+RNSTabs.h", ++ "ios/tabs/RCTConvert+RNSTabs.mm", ++ "ios/tabs/RNSTabBarAppearanceCoordinator.h", ++ "ios/tabs/RNSTabBarAppearanceCoordinator.mm", ++ "ios/tabs/RNSTabsSpecialEffectsSupporting.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryHelper.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryHelper.mm", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.h", ++ "ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm", ++ "ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h", ++ "ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.mm", ++ "ios/tabs/host/RNSTabBarController.h", ++ "ios/tabs/host/RNSTabBarController.mm", ++ "ios/tabs/host/RNSTabsHostComponentView.h", ++ "ios/tabs/host/RNSTabsHostComponentView.mm", ++ "ios/tabs/host/RNSTabsHostEventEmitter.h", ++ "ios/tabs/host/RNSTabsHostEventEmitter.mm", ++ "ios/tabs/host/RNSTabsNavigationState.h", ++ "ios/tabs/host/RNSTabsNavigationState.mm", ++ "ios/tabs/host/RNSTabsNavigationStateObserverRegistry.h", ++ "ios/tabs/host/RNSTabsNavigationStateObserverRegistry.mm", ++ "ios/tabs/screen/RNSTabsScreenComponentView.h", ++ "ios/tabs/screen/RNSTabsScreenComponentView.mm", ++ "ios/tabs/screen/RNSTabsScreenEventEmitter.h", ++ "ios/tabs/screen/RNSTabsScreenEventEmitter.mm", ++ "ios/tabs/screen/RNSTabsScreenViewController.h", ++ "ios/tabs/screen/RNSTabsScreenViewController.mm", ++ "ios/utils/NSString+RNSUtility.h", ++ "ios/utils/NSString+RNSUtility.mm", ++ "ios/utils/RCTSurfaceTouchHandler+RNSUtility.h", ++ "ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm", ++ "ios/utils/RNSBackBarButtonItem.h", ++ "ios/utils/RNSBackBarButtonItem.mm", ++ "ios/utils/RNSDefines.h", ++ "ios/utils/RNSLog.h", ++ "ios/utils/UINavigationBar+RNSUtility.h", ++ "ios/utils/UINavigationBar+RNSUtility.mm", ++ "ios/utils/UIView+RNSUtility.h", ++ "ios/utils/UIView+RNSUtility.mm", ++ "ios/utils/extensions/RCTImageSource+AccessHiddenMembers.h", ++ ], ++ publicHeadersPath: "ios", ++ cSettings: [.headerSearchPath("common/cpp"), .headerSearchPath("common/cpp/react/renderer/components"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens/utils"), .headerSearchPath("cpp"), .headerSearchPath("ios"), .headerSearchPath("ios/bridging"), .headerSearchPath("ios/conversion"), .headerSearchPath("ios/events"), .headerSearchPath("ios/helpers/container"), .headerSearchPath("ios/helpers/image"), .headerSearchPath("ios/helpers/scroll-view"), .headerSearchPath("ios/integrations"), .headerSearchPath("ios/safe-area"), .headerSearchPath("ios/stubs"), .headerSearchPath("ios/tabs"), .headerSearchPath("ios/tabs/bottom-accessory"), .headerSearchPath("ios/tabs/extensions"), .headerSearchPath("ios/tabs/host"), .headerSearchPath("ios/tabs/screen"), .headerSearchPath("ios/utils"), .headerSearchPath("ios/utils/extensions"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("common/cpp"), .headerSearchPath("common/cpp/react/renderer/components"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens"), .headerSearchPath("common/cpp/react/renderer/components/rnscreens/utils"), .headerSearchPath("cpp"), .headerSearchPath("ios"), .headerSearchPath("ios/bridging"), .headerSearchPath("ios/conversion"), .headerSearchPath("ios/events"), .headerSearchPath("ios/helpers/container"), .headerSearchPath("ios/helpers/image"), .headerSearchPath("ios/helpers/scroll-view"), .headerSearchPath("ios/integrations"), .headerSearchPath("ios/safe-area"), .headerSearchPath("ios/stubs"), .headerSearchPath("ios/tabs"), .headerSearchPath("ios/tabs/bottom-accessory"), .headerSearchPath("ios/tabs/extensions"), .headerSearchPath("ios/tabs/host"), .headerSearchPath("ios/tabs/screen"), .headerSearchPath("ios/utils"), .headerSearchPath("ios/utils/extensions"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-vector-icons@10.3.0.patch b/platforms/react-native/patches/react-native-vector-icons@10.3.0.patch new file mode 100644 index 000000000..7ffd4bcbe --- /dev/null +++ b/platforms/react-native/patches/react-native-vector-icons@10.3.0.patch @@ -0,0 +1,65 @@ +diff --git a/react-native-vector-icons.Package.swift b/Package.swift +new file mode 100644 +index 0000000..5b31d9f +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,43 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeVectorIcons", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeVectorIcons", targets: ["ReactNativeVectorIcons"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeVectorIcons", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "RNVectorIconsManager/RNVectorIconsManager.h", ++ "RNVectorIconsManager/RNVectorIconsManager.mm", ++ ], ++ resources: [.process("Fonts")], ++ publicHeadersPath: "RNVectorIconsManager", ++ cSettings: [.headerSearchPath("RNVectorIconsManager"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("RNVectorIconsManager"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/patches/react-native-webview@13.16.1.patch b/platforms/react-native/patches/react-native-webview@13.16.1.patch new file mode 100644 index 000000000..90db1c626 --- /dev/null +++ b/platforms/react-native/patches/react-native-webview@13.16.1.patch @@ -0,0 +1,76 @@ +diff --git a/react-native-webview.Package.swift b/Package.swift +new file mode 100644 +index 0000000..02aae59 +--- /dev/null ++++ b/Package.swift +@@ -0,0 +1,54 @@ ++// swift-tools-version: 6.0 ++// AUTO-SCAFFOLDED by react-native spm scaffold — safe to edit & commit via patch-package. ++// AUTO-SCAFFOLDED-VERSION: 19 ++// Cache slot: 0.87.0/dual-flavor ++// Edit the contents below if needed and re-run `npx patch-package ` ++// to persist across `npm install`. To regenerate from the podspec, remove ++// this file (or just this marker) and re-run `npx react-native spm scaffold`. ++// ++// Package references are plain relative paths, computed when this file was ++// scaffolded. They stay correct because the file is re-scaffolded per app ++// and cache slot, and any node_modules relayout reinstalls this package ++// (dropping the file) anyway. ++ ++import PackageDescription ++ ++let package = Package( ++ name: "ReactNativeWebview", ++ platforms: [.iOS(.v15)], ++ products: [ ++ .library(name: "ReactNativeWebview", targets: ["ReactNativeWebview"]), ++ ], ++ dependencies: [ ++ .package(name: "ReactNative", path: "../../../../xcframeworks"), ++ .package(name: "React-GeneratedCode", path: "../../../ios"), ++ ], ++ targets: [ ++ .target( ++ name: "ReactNativeWebview", ++ dependencies: [.product(name: "ReactHeaders", package: "ReactNative"), .product(name: "ReactNativeHeaders", package: "ReactNative"), .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"), .product(name: "ReactAppHeaders", package: "React-GeneratedCode")], ++ path: ".", ++ sources: [ ++ "apple/RCTConvert+WKDataDetectorTypes.h", ++ "apple/RCTConvert+WKDataDetectorTypes.m", ++ "apple/RNCWKProcessPoolManager.h", ++ "apple/RNCWKProcessPoolManager.m", ++ "apple/RNCWebView.h", ++ "apple/RNCWebView.mm", ++ "apple/RNCWebViewDecisionManager.h", ++ "apple/RNCWebViewDecisionManager.m", ++ "apple/RNCWebViewImpl.h", ++ "apple/RNCWebViewImpl.m", ++ "apple/RNCWebViewManager.h", ++ "apple/RNCWebViewManager.mm", ++ "apple/RNCWebViewModule.h", ++ "apple/RNCWebViewModule.mm", ++ ], ++ publicHeadersPath: "apple", ++ cSettings: [.headerSearchPath("apple"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"])], ++ cxxSettings: [.headerSearchPath("apple"), .headerSearchPath("."), .unsafeFlags(["-include", "react-native-spm-prefix.h"]), .unsafeFlags(["-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", "-Wno-comma", "-Wno-shorten-64-to-32", "-DRCT_NEW_ARCH_ENABLED=1"]), .define("FOLLY_CFG_NO_COROUTINES", to: "1"), .define("DEBUG", .when(configuration: .debug)), .define("NDEBUG", .when(configuration: .release))], ++ linkerSettings: [.linkedFramework("UIKit"), .linkedFramework("Foundation"), .linkedFramework("CoreGraphics")] ++ ), ++ ], ++ cxxLanguageStandard: .cxx20 ++) +diff --git a/react-native-spm-prefix.h b/react-native-spm-prefix.h +new file mode 100644 +index 0000000..a1eea12 +--- /dev/null ++++ b/react-native-spm-prefix.h +@@ -0,0 +1,10 @@ ++// AUTO-SCAFFOLDED by react-native spm scaffold — mirrors CocoaPods' default ++// prefix header so ObjC sources that rely on an implicit Foundation/UIKit ++// import compile under SPM (which has no prefix-header mechanism). Safe to ++// delete + regenerate via `npx react-native spm scaffold`. ++#ifdef __OBJC__ ++#import ++#if __has_include() ++#import ++#endif ++#endif diff --git a/platforms/react-native/pnpm-lock.yaml b/platforms/react-native/pnpm-lock.yaml index 030cb51e5..4c55cbd65 100644 --- a/platforms/react-native/pnpm-lock.yaml +++ b/platforms/react-native/pnpm-lock.yaml @@ -19,6 +19,35 @@ overrides: handlebars: '>=4.7.9' fast-xml-parser: '>=5.7.0' +patchedDependencies: + '@react-native-masked-view/masked-view@0.3.2': + hash: 4a0e3f53de0baab3da7008ab1fe2e661778158cd2c10df80bb64e3625f9658ca + path: patches/@react-native-masked-view__masked-view@0.3.2.patch + react-native-config@1.5.6: + hash: 4e591ea8edc24d302ba6de3ddd14eb7e828babb11b795a7ab33333219f52626a + path: patches/react-native-config@1.5.6.patch + react-native-encrypted-storage@4.0.3: + hash: 0a7ee3f5f58074094a368337a37b3fae21effb3938b2681e0b5c0979bba90184 + path: patches/react-native-encrypted-storage@4.0.3.patch + react-native-gesture-handler@3.2.1: + hash: 65ea10ed19e1d936ef3d86217df0810926a18a19fcf31f11a6bbb9ab33aaad62 + path: patches/react-native-gesture-handler@3.2.1.patch + react-native-get-random-values@2.0.0: + hash: b31fd10228bb45d3906e91760ec70816422e94387b5b70bfc78d3e95fb48a3ed + path: patches/react-native-get-random-values@2.0.0.patch + react-native-safe-area-context@5.9.1: + hash: 5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9 + path: patches/react-native-safe-area-context@5.9.1.patch + react-native-screens@4.27.0: + hash: dc2771ddc675143b7942472f1693f1de720755cc6191f969c1e5f642f311772b + path: patches/react-native-screens@4.27.0.patch + react-native-vector-icons@10.3.0: + hash: 011dbc3b1eabcf90f5847b8e0150acdaf5f7d3d7fca6f34f8330fa7181bd6c1c + path: patches/react-native-vector-icons@10.3.0.patch + react-native-webview@13.16.1: + hash: 298b069524f79d9943b02c0e2561afb5db9e587d5a51684f9962abdac744a743 + path: patches/react-native-webview@13.16.1.patch + importers: .: @@ -100,7 +129,7 @@ importers: version: 3.4.11(@babel/runtime@7.28.3) react-native-gesture-handler: specifier: ^3.1.0 - version: 3.2.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 3.2.1(patch_hash=65ea10ed19e1d936ef3d86217df0810926a18a19fcf31f11a6bbb9ab33aaad62)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-test-renderer: specifier: 19.2.3 version: 19.2.3(react@19.2.3) @@ -144,18 +173,21 @@ importers: '@apollo/client': specifier: ^3.13.9 version: 3.14.1(@types/react@19.2.18)(graphql@16.13.2)(react@19.2.3) + '@noble/hashes': + specifier: 2.0.1 + version: 2.0.1 '@react-navigation/bottom-tabs': specifier: ^7.4.6 - version: 7.15.9(c6bb3882a57ec6cf767d9a034f5464c2) + version: 7.15.9(0e91d9ad206f69b56e2bfb134bc98c32) '@react-navigation/native': specifier: ^7.1.17 version: 7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-navigation/native-stack': specifier: ^7.3.25 - version: 7.14.11(c6bb3882a57ec6cf767d9a034f5464c2) + version: 7.14.11(0e91d9ad206f69b56e2bfb134bc98c32) '@react-navigation/stack': specifier: ^7.4.8 - version: 7.8.10(c82de044837c8d92524e78cf0a50d664) + version: 7.8.10(704a9d77162e43057486d7ff1cd5876c) '@shopify/checkout-kit-react-native': specifier: workspace:* version: link:../modules/@shopify/checkout-kit-react-native @@ -173,34 +205,28 @@ importers: version: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-config: specifier: 1.5.6 - version: 1.5.6 + version: 1.5.6(patch_hash=4e591ea8edc24d302ba6de3ddd14eb7e828babb11b795a7ab33333219f52626a) react-native-dotenv: specifier: ^3.4.11 version: 3.4.11(@babel/runtime@7.28.3) react-native-encrypted-storage: specifier: ^4.0.3 - version: 4.0.3(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-nitro-modules: - specifier: ^0.33.7 - version: 0.33.9(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-quick-base64: - specifier: ^2.2.2 - version: 2.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-quick-crypto: - specifier: 1.0.9 - version: 1.0.9(react-native-nitro-modules@0.33.9(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-quick-base64@2.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 4.0.3(patch_hash=0a7ee3f5f58074094a368337a37b3fae21effb3938b2681e0b5c0979bba90184)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-get-random-values: + specifier: 2.0.0 + version: 2.0.0(patch_hash=b31fd10228bb45d3906e91760ec70816422e94387b5b70bfc78d3e95fb48a3ed)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-safe-area-context: specifier: ^5.8.0 - version: 5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 5.9.1(patch_hash=5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: specifier: ^4.27.0 - version: 4.27.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 4.27.0(patch_hash=dc2771ddc675143b7942472f1693f1de720755cc6191f969c1e5f642f311772b)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-vector-icons: specifier: ^10.3.0 - version: 10.3.0 + version: 10.3.0(patch_hash=011dbc3b1eabcf90f5847b8e0150acdaf5f7d3d7fca6f34f8330fa7181bd6c1c) react-native-webview: specifier: ^13.16.0 - version: 13.16.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 13.16.1(patch_hash=298b069524f79d9943b02c0e2561afb5db9e587d5a51684f9962abdac744a743)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) devDependencies: '@babel/core': specifier: '>=7.29.6' @@ -228,7 +254,7 @@ importers: version: 7.28.3 '@react-native-masked-view/masked-view': specifier: ^0.3.2 - version: 0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 0.3.2(patch_hash=4a0e3f53de0baab3da7008ab1fe2e661778158cd2c10df80bb64e3625f9658ca)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native/babel-preset': specifier: 0.87.0 version: 0.87.0(@babel/core@7.29.7) @@ -1082,9 +1108,6 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, tarball: https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz} - '@craftzdog/react-native-buffer@6.1.0': - resolution: {integrity: sha512-lJXdjZ7fTllLbzDrwg/FrJLjQ5sBcAgwcqgAB6OPpXTHdCenEhHZblQpfmBLLe7/S7m0yKXL3kN3jpwOEkpjGg==} - '@eslint-community/eslint-utils@4.10.1': resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1266,6 +1289,10 @@ packages: '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, tarball: https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz} + '@noble/hashes@2.0.1': + resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==, tarball: https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz} + engines: {node: '>= 20.19.0'} + '@nodable/entities@2.2.0': resolution: {integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==, tarball: https://registry.npmjs.org/@nodable/entities/-/entities-2.2.0.tgz} @@ -1684,10 +1711,6 @@ packages: resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} engines: {node: '>=8'} - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, tarball: https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz} engines: {node: '>= 0.6'} @@ -1939,9 +1962,6 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, tarball: https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, tarball: https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz} engines: {node: '>= 0.8'} @@ -2487,14 +2507,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, tarball: https://registry.npmjs.org/etag/-/etag-1.8.1.tgz} engines: {node: '>= 0.6'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==, tarball: https://registry.npmjs.org/execa/-/execa-4.1.0.tgz} engines: {node: '>=10'} @@ -2514,6 +2526,9 @@ packages: exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + fast-base64-decode@1.0.0: + resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==, tarball: https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2879,10 +2894,6 @@ packages: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} engines: {node: '>=0.10.0'} - is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} - is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, tarball: https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz} @@ -3811,10 +3822,6 @@ packages: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==, tarball: https://registry.npmjs.org/promise/-/promise-8.3.0.tgz} @@ -3908,32 +3915,10 @@ packages: react: '*' react-native: '*' - react-native-nitro-modules@0.33.9: - resolution: {integrity: sha512-BM9C5mCGYYjrc8CDWZZ0anLWU/knH2xaEuFzvzogKTOW6fzgS6mmsCdM3ty+AhImJNSYwK19DLrHaqwnrrwEzw==} - peerDependencies: - react: '*' - react-native: '*' - - react-native-quick-base64@2.2.2: - resolution: {integrity: sha512-WLHSifHLoamr2kF00Gov0W9ud6CfPshe1rmqWTquVIi9c62qxOaJCFVDrXFZhEBU8B8PvGLVuOlVKH78yhY0Fg==} + react-native-get-random-values@2.0.0: + resolution: {integrity: sha512-wx7/aPqsUIiWsG35D+MsUJd8ij96e3JKddklSdrdZUrheTx89gPtz3Q2yl9knBArj5u26Cl23T88ai+Q0vypdQ==, tarball: https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-2.0.0.tgz} peerDependencies: - react: '*' - react-native: '*' - - react-native-quick-crypto@1.0.9: - resolution: {integrity: sha512-SAugK0DZg8Q0ELkPWZnzFabbRngZQh0BjwXEMpXH3YQgiM1vVHnb83YOdOTcBmUnM/mAKz+PW9lrvccloNwjbA==} - peerDependencies: - expo: '>=48.0.0' - expo-build-properties: '*' - react: '*' - react-native: '*' - react-native-nitro-modules: '>=0.29.1' - react-native-quick-base64: '>=2.1.0' - peerDependenciesMeta: - expo: - optional: true - expo-build-properties: - optional: true + react-native: '>=0.81' react-native-safe-area-context@5.9.1: resolution: {integrity: sha512-Zpx9Iwg6VhgNarWFpcIM61xK2lUbSfSXemQUmcvOVRpux49lJsUompY1S3E5jKUJbLq233qEpj28DgmXVsgZMQ==, tarball: https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.9.1.tgz} @@ -3986,10 +3971,6 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, tarball: https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz} engines: {node: '>= 6'} - readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -4547,9 +4528,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz} - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, tarball: https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz} engines: {node: '>= 0.4.0'} @@ -5742,14 +5720,6 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@craftzdog/react-native-buffer@6.1.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': - dependencies: - ieee754: 1.2.1 - react-native-quick-base64: 2.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - transitivePeerDependencies: - - react - - react-native - '@eslint-community/eslint-utils@4.10.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -6051,6 +6021,8 @@ snapshots: dependencies: eslint-scope: 5.1.1 + '@noble/hashes@2.0.1': {} + '@nodable/entities@2.2.0': {} '@nodelib/fs.scandir@2.1.5': @@ -6253,7 +6225,7 @@ snapshots: - typescript - utf-8-validate - '@react-native-masked-view/masked-view@0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': + '@react-native-masked-view/masked-view@0.3.2(patch_hash=4a0e3f53de0baab3da7008ab1fe2e661778158cd2c10df80bb64e3625f9658ca)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -6459,15 +6431,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.18 - '@react-navigation/bottom-tabs@7.15.9(c6bb3882a57ec6cf767d9a034f5464c2)': + '@react-navigation/bottom-tabs@7.15.9(0e91d9ad206f69b56e2bfb134bc98c32)': dependencies: - '@react-navigation/elements': 2.9.14(@react-native-masked-view/masked-view@0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(@react-navigation/native@7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/elements': 2.9.14(8ecb8bbebc5a56ce644fb1e2c0f706ec) '@react-navigation/native': 7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-safe-area-context: 5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-screens: 4.27.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.9.1(patch_hash=5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.27.0(patch_hash=dc2771ddc675143b7942472f1693f1de720755cc6191f969c1e5f642f311772b)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -6484,27 +6456,27 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/elements@2.9.14(@react-native-masked-view/masked-view@0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(@react-navigation/native@7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': + '@react-navigation/elements@2.9.14(8ecb8bbebc5a56ce644fb1e2c0f706ec)': dependencies: '@react-navigation/native': 7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-safe-area-context: 5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.9.1(patch_hash=5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-native-masked-view/masked-view': 0.3.2(patch_hash=4a0e3f53de0baab3da7008ab1fe2e661778158cd2c10df80bb64e3625f9658ca)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@react-navigation/native-stack@7.14.11(c6bb3882a57ec6cf767d9a034f5464c2)': + '@react-navigation/native-stack@7.14.11(0e91d9ad206f69b56e2bfb134bc98c32)': dependencies: - '@react-navigation/elements': 2.9.14(@react-native-masked-view/masked-view@0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(@react-navigation/native@7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/elements': 2.9.14(8ecb8bbebc5a56ce644fb1e2c0f706ec) '@react-navigation/native': 7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-safe-area-context: 5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-screens: 4.27.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.9.1(patch_hash=5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.27.0(patch_hash=dc2771ddc675143b7942472f1693f1de720755cc6191f969c1e5f642f311772b)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 transitivePeerDependencies: @@ -6524,16 +6496,16 @@ snapshots: dependencies: nanoid: 3.3.11 - '@react-navigation/stack@7.8.10(c82de044837c8d92524e78cf0a50d664)': + '@react-navigation/stack@7.8.10(704a9d77162e43057486d7ff1cd5876c)': dependencies: - '@react-navigation/elements': 2.9.14(@react-native-masked-view/masked-view@0.3.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(@react-navigation/native@7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/elements': 2.9.14(8ecb8bbebc5a56ce644fb1e2c0f706ec) '@react-navigation/native': 7.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler: 3.2.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-safe-area-context: 5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-screens: 4.27.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 3.2.1(patch_hash=65ea10ed19e1d936ef3d86217df0810926a18a19fcf31f11a6bbb9ab33aaad62)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.9.1(patch_hash=5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.27.0(patch_hash=dc2771ddc675143b7942472f1693f1de720755cc6191f969c1e5f642f311772b)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -6790,10 +6762,6 @@ snapshots: dependencies: tslib: 2.8.1 - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -7132,11 +7100,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bytes@3.1.2: {} call-bind-apply-helpers@1.0.2: @@ -7827,10 +7790,6 @@ snapshots: etag@1.8.1: {} - event-target-shim@5.0.1: {} - - events@3.3.0: {} - execa@4.1.0: dependencies: cross-spawn: 7.0.6 @@ -7867,6 +7826,8 @@ snapshots: exponential-backoff@3.1.1: {} + fast-base64-decode@1.0.0: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -8258,11 +8219,6 @@ snapshots: is-relative: 1.0.0 is-windows: 1.0.2 - is-arguments@1.2.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-array-buffer@3.0.2: dependencies: call-bind: 1.0.8 @@ -9444,8 +9400,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - process@0.11.10: {} - promise@8.3.0: dependencies: asap: 2.0.6 @@ -9540,65 +9494,48 @@ snapshots: transitivePeerDependencies: - supports-color - react-native-config@1.5.6: {} + react-native-config@1.5.6(patch_hash=4e591ea8edc24d302ba6de3ddd14eb7e828babb11b795a7ab33333219f52626a): {} react-native-dotenv@3.4.11(@babel/runtime@7.28.3): dependencies: '@babel/runtime': 7.28.3 dotenv: 16.6.1 - react-native-encrypted-storage@4.0.3(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-encrypted-storage@4.0.3(patch_hash=0a7ee3f5f58074094a368337a37b3fae21effb3938b2681e0b5c0979bba90184)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler@3.2.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-gesture-handler@3.2.1(patch_hash=65ea10ed19e1d936ef3d86217df0810926a18a19fcf31f11a6bbb9ab33aaad62)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: '@types/react-test-renderer': 19.1.0 invariant: 2.2.4 react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-nitro-modules@0.33.9(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-get-random-values@2.0.0(patch_hash=b31fd10228bb45d3906e91760ec70816422e94387b5b70bfc78d3e95fb48a3ed)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - react: 19.2.3 + fast-base64-decode: 1.0.0 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-quick-base64@2.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-safe-area-context@5.9.1(patch_hash=5fa9c074cfddb5fda585dd695d8984204bb2f9c2836ed44b63cdadbd981680b9)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-quick-crypto@1.0.9(react-native-nitro-modules@0.33.9(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-quick-base64@2.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): - dependencies: - '@craftzdog/react-native-buffer': 6.1.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - events: 3.3.0 - react: 19.2.3 - react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-nitro-modules: 0.33.9(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-quick-base64: 2.2.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - readable-stream: 4.5.2 - safe-buffer: 5.2.1 - util: 0.12.5 - - react-native-safe-area-context@5.9.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): - dependencies: - react: 19.2.3 - react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - - react-native-screens@4.27.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-screens@4.27.0(patch_hash=dc2771ddc675143b7942472f1693f1de720755cc6191f969c1e5f642f311772b)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-freeze: 1.0.4(react@19.2.3) react-native: 0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) warn-once: 0.1.1 - react-native-vector-icons@10.3.0: + react-native-vector-icons@10.3.0(patch_hash=011dbc3b1eabcf90f5847b8e0150acdaf5f7d3d7fca6f34f8330fa7181bd6c1c): dependencies: prop-types: 15.8.1 yargs: 16.2.0 - react-native-webview@13.16.1(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-webview@13.16.1(patch_hash=298b069524f79d9943b02c0e2561afb5db9e587d5a51684f9962abdac744a743)(react-native@0.87.0(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@6.0.3))(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: escape-string-regexp: 4.0.0 invariant: 2.2.4 @@ -9707,14 +9644,6 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-stream@4.5.2: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -10320,14 +10249,6 @@ snapshots: util-deprecate@1.0.2: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.2.0 - is-generator-function: 1.1.2 - is-typed-array: 1.1.15 - which-typed-array: 1.1.20 - utils-merge@1.0.1: {} v8-to-istanbul@9.1.3: diff --git a/platforms/react-native/sample/index.js b/platforms/react-native/sample/index.js index 72f0e9727..41c1ae43c 100644 --- a/platforms/react-native/sample/index.js +++ b/platforms/react-native/sample/index.js @@ -1,8 +1,6 @@ -import {install} from 'react-native-quick-crypto'; -install(); - import 'setimmediate'; import 'react-native-gesture-handler'; +import 'react-native-get-random-values'; import SampleApp from './src/App'; import {name} from './app.json'; diff --git a/platforms/react-native/sample/ios/.gitignore b/platforms/react-native/sample/ios/.gitignore new file mode 100644 index 000000000..f876b530f --- /dev/null +++ b/platforms/react-native/sample/ios/.gitignore @@ -0,0 +1,7 @@ + +# SPM – auto-generated at build time (do not commit) +Package.resolved +!CheckoutKitReactNativeDemoSPM.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +build/generated/ +build/xcframeworks/ +.build/ diff --git a/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/.spm-injected.json b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/.spm-injected.json new file mode 100644 index 000000000..2a773fc07 --- /dev/null +++ b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/.spm-injected.json @@ -0,0 +1,182 @@ +{ + "rootUuid": "83CBB9F71A601CBA00E9B192", + "target": "CheckoutKitReactNativeDemo", + "targetUuid": "13B07F861A680F5B00A75B9A", + "injectedUuids": [ + "17CA21E30A8FFCB9D0FC1E35", + "27BDE9D743CB351F53154525", + "3AFDEFB917B01458307FDE0A", + "3F1E298E4A2D7CA403A328B5", + "50A8621D202A6CFB97E2C1B5", + "512EBECF5434FD7A6AF7C967", + "658A88AFBFD620F8BC6F91BA", + "69A7AB74931112BD2779B631", + "8332BE36B9C49BD2E49347C1", + "920F69A9DF98D37C8308D020", + "947DD5EF3BE079FB7F5AFF87", + "94F7C9B714A718310DA6BE9C", + "A700952B9A737913514EB28F", + "B174F870C259554596A4373B", + "C2FECF1430FDAAE3BF355839", + "D6BD17EA9023C9F39246B71F", + "F3857EDDA38AFC0011322D6D" + ], + "createdArrayFields": [], + "buildSettingChanges": [ + { + "configUuid": "13B07F941A680F5B00A75B9A", + "createdArrayKeys": [ + "FRAMEWORK_SEARCH_PATHS" + ], + "appendedArrayValues": { + "HEADER_SEARCH_PATHS": [ + "\"$(SRCROOT)/build/generated/autolinking/headers\"" + ], + "OTHER_LDFLAGS": [ + "\"$(RN_SPM_REACT_BINARY)\"", + "\"$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)\"", + "\"$(RN_SPM_HERMES_BINARY)\"" + ] + }, + "createdScalars": [ + "CLANG_CXX_LANGUAGE_STANDARD", + "REACT_NATIVE_PATH", + "HERMES_CLI_PATH", + "RN_SPM_FLAVOR", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xros*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]\"" + ], + "replacedScalars": {} + }, + { + "configUuid": "13B07F951A680F5B00A75B9A", + "createdArrayKeys": [ + "FRAMEWORK_SEARCH_PATHS" + ], + "appendedArrayValues": { + "HEADER_SEARCH_PATHS": [ + "\"$(SRCROOT)/build/generated/autolinking/headers\"" + ], + "OTHER_LDFLAGS": [ + "\"$(RN_SPM_REACT_BINARY)\"", + "\"$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)\"", + "\"$(RN_SPM_HERMES_BINARY)\"" + ] + }, + "createdScalars": [ + "CLANG_CXX_LANGUAGE_STANDARD", + "REACT_NATIVE_PATH", + "HERMES_CLI_PATH", + "RN_SPM_FLAVOR", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=macosx*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xros*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xros*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]\"", + "\"RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_BINARY[sdk=xrsimulator*]\"", + "\"RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]\"" + ], + "replacedScalars": {} + } + ], + "generatedSources": {}, + "artifactsVersionOverride": null, + "configCommand": null, + "scheme": { + "file": "CheckoutKitReactNativeDemo.xcscheme", + "created": false + } +} diff --git a/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/project.pbxproj b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/project.pbxproj new file mode 100644 index 000000000..a8b16bccc --- /dev/null +++ b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/project.pbxproj @@ -0,0 +1,794 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 6A58AAE82E607E0200A6AA85 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A58AAE72E607DFB00A6AA85 /* AppDelegate.swift */; }; + 6AFAD2D22BA9DEF8001F9644 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 6AFAD2D12BA9DEF8001F9644 /* Localizable.xcstrings */; }; + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + 9403907249B4B6D988902B48 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1939D329B2C035D1A15E316B /* PrivacyInfo.xcprivacy */; }; + 94F7C9B714A718310DA6BE9C /* ReactHeaders in Frameworks */ = {isa = PBXBuildFile; productRef = 512EBECF5434FD7A6AF7C967 /* ReactHeaders */;}; + 17CA21E30A8FFCB9D0FC1E35 /* ReactNativeHeaders in Frameworks */ = {isa = PBXBuildFile; productRef = 920F69A9DF98D37C8308D020 /* ReactNativeHeaders */;}; + 69A7AB74931112BD2779B631 /* ReactNativeDependenciesHeaders in Frameworks */ = {isa = PBXBuildFile; productRef = 8332BE36B9C49BD2E49347C1 /* ReactNativeDependenciesHeaders */;}; + D6BD17EA9023C9F39246B71F /* Autolinked in Frameworks */ = {isa = PBXBuildFile; productRef = 3AFDEFB917B01458307FDE0A /* Autolinked */;}; + 3F1E298E4A2D7CA403A328B5 /* ReactCodegen in Frameworks */ = {isa = PBXBuildFile; productRef = 947DD5EF3BE079FB7F5AFF87 /* ReactCodegen */;}; + 50A8621D202A6CFB97E2C1B5 /* ReactAppDependencyProvider in Frameworks */ = {isa = PBXBuildFile; productRef = F3857EDDA38AFC0011322D6D /* ReactAppDependencyProvider */;}; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 13B07F961A680F5B00A75B9A /* CheckoutKitReactNativeDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CheckoutKitReactNativeDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = CheckoutKitReactNativeDemo/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = CheckoutKitReactNativeDemo/Info.plist; sourceTree = ""; }; + 1939D329B2C035D1A15E316B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = CheckoutKitReactNativeDemo/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 6A58AAE72E607DFB00A6AA85 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 6A8D64CF2AF25C1200FE4E4A /* CheckoutKitReactNativeDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = CheckoutKitReactNativeDemo.entitlements; path = CheckoutKitReactNativeDemo/CheckoutKitReactNativeDemo.entitlements; sourceTree = ""; }; + 6AABC1942B17417E008240EB /* OpenSSL.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = OpenSSL.xcframework; path = "Pods/OpenSSL-Universal/Frameworks/OpenSSL.xcframework"; sourceTree = ""; }; + 6AAEC3572B067AD500C7099B /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; + 6AF2B3762B0BCA6600C6CE4F /* CheckoutKitReactNativeDemo-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CheckoutKitReactNativeDemo-Bridging-Header.h"; sourceTree = ""; }; + 6AFAD2D12BA9DEF8001F9644 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = Localizable.xcstrings; path = CheckoutKitReactNativeDemo/Localizable.xcstrings; sourceTree = ""; }; + 6AFC2CB62B0D5814003B5A63 /* libShopifyCheckoutKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libShopifyCheckoutKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A4F0E4A2E4B123400000001 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = CheckoutKitReactNativeDemo/LaunchScreen.storyboard; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 94F7C9B714A718310DA6BE9C /* ReactHeaders in Frameworks */, + 17CA21E30A8FFCB9D0FC1E35 /* ReactNativeHeaders in Frameworks */, + 69A7AB74931112BD2779B631 /* ReactNativeDependenciesHeaders in Frameworks */, + D6BD17EA9023C9F39246B71F /* Autolinked in Frameworks */, + 3F1E298E4A2D7CA403A328B5 /* ReactCodegen in Frameworks */, + 50A8621D202A6CFB97E2C1B5 /* ReactAppDependencyProvider in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* CheckoutKitReactNativeDemo */ = { + isa = PBXGroup; + children = ( + 6A58AAE72E607DFB00A6AA85 /* AppDelegate.swift */, + 6AF2B3762B0BCA6600C6CE4F /* CheckoutKitReactNativeDemo-Bridging-Header.h */, + 6AAEC3572B067AD500C7099B /* Entypo.ttf */, + 6A8D64CF2AF25C1200FE4E4A /* CheckoutKitReactNativeDemo.entitlements */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, + 6AFAD2D12BA9DEF8001F9644 /* Localizable.xcstrings */, + 1939D329B2C035D1A15E316B /* PrivacyInfo.xcprivacy */, + ); + name = CheckoutKitReactNativeDemo; + sourceTree = ""; + }; + 6A18CE262AF1B119007B1B08 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6AABC1942B17417E008240EB /* OpenSSL.xcframework */, + 6AFC2CB62B0D5814003B5A63 /* libShopifyCheckoutKit.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6AB7C68F2AF197BE000DB11B /* Packages */ = { + isa = PBXGroup; + children = ( + ); + name = Packages; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 7A4F0E4A2E4B123400000001 /* Config.xcconfig */, + 6AB7C68F2AF197BE000DB11B /* Packages */, + 13B07FAE1A68108700A75B9A /* CheckoutKitReactNativeDemo */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 6A18CE262AF1B119007B1B08 /* Frameworks */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* CheckoutKitReactNativeDemo.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* CheckoutKitReactNativeDemo */ = { + packageProductDependencies = ( + 512EBECF5434FD7A6AF7C967 /* ReactHeaders */, + 920F69A9DF98D37C8308D020 /* ReactNativeHeaders */, + 8332BE36B9C49BD2E49347C1 /* ReactNativeDependenciesHeaders */, + 3AFDEFB917B01458307FDE0A /* Autolinked */, + 947DD5EF3BE079FB7F5AFF87 /* ReactCodegen */, + F3857EDDA38AFC0011322D6D /* ReactAppDependencyProvider */, + ); + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "CheckoutKitReactNativeDemo" */; + buildPhases = ( + 658A88AFBFD620F8BC6F91BA /* Sync SPM Autolinking */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + B174F870C259554596A4373B /* Embed React Native Flavored Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CheckoutKitReactNativeDemo; + productName = CheckoutKitReactNativeDemo; + productReference = 13B07F961A680F5B00A75B9A /* CheckoutKitReactNativeDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + packageReferences = ( + 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */, + C2FECF1430FDAAE3BF355839 /* XCLocalSwiftPackageReference "build/generated/autolinking" */, + A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */, + ); + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1430; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "CheckoutKitReactNativeDemo" */; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* CheckoutKitReactNativeDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 6AFAD2D22BA9DEF8001F9644 /* Localizable.xcstrings in Resources */, + 9403907249B4B6D988902B48 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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"; + }; + 658A88AFBFD620F8BC6F91BA /* Sync SPM Autolinking */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Sync SPM Autolinking"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -euo pipefail\n\n# ---------------------------------------------------------------------------\n# Resolve a node binary and the react-native package dir at BUILD TIME.\n# ---------------------------------------------------------------------------\nNODE_BINARY=\"${NODE_BINARY:-}\"\nif [ -z \"$NODE_BINARY\" ]; then\n # Source RN's standard app-local node-path files. They reference vars that\n # may be unset and may return non-zero, so relax nounset AND errexit while\n # sourcing — a buggy user .xcode.env must degrade to PATH-based node\n # resolution below, not silently abort every build.\n set +eu\n if [ -f \"$SRCROOT/.xcode.env\" ]; then\n . \"$SRCROOT/.xcode.env\"\n fi\n if [ -f \"$SRCROOT/.xcode.env.local\" ]; then\n . \"$SRCROOT/.xcode.env.local\"\n fi\n set -eu\n NODE_BINARY=\"${NODE_BINARY:-}\"\nfi\nif [ -z \"$NODE_BINARY\" ]; then\n NODE_BINARY=\"$(command -v node 2>/dev/null || true)\"\nfi\n\n# Resolve react-native's dir FROM THE APP (require.resolve), not a\n# generation-time baked path — the baked path goes stale in pnpm / hoisted\n# stores. Fall back to the baked path if resolution fails or the resolved dir\n# has no setup-apple-spm.js.\nRN_DIR=\"\"\nif [ -n \"$NODE_BINARY\" ]; then\n RN_DIR=\"$(cd \"$SRCROOT\" && \"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json'))\" 2>/dev/null || true)\"\nfi\nif [ -z \"$RN_DIR\" ] || [ ! -f \"$RN_DIR/scripts/setup-apple-spm.js\" ]; then\n RN_DIR=\"../../node_modules/react-native\"\nfi\n\nSTAMP=\"$SRCROOT/build/generated/autolinking/.spm-sync-stamp\"\nSTALE=0\n\n# Find project root (where package.json lives — may be an ancestor of SRCROOT)\nPROJECT_ROOT=\"$SRCROOT\"\nwhile [ \"$PROJECT_ROOT\" != \"/\" ] && [ ! -f \"$PROJECT_ROOT/package.json\" ]; do\n PROJECT_ROOT=\"$(dirname \"$PROJECT_ROOT\")\"\ndone\nif [ ! -f \"$PROJECT_ROOT/package.json\" ]; then\n PROJECT_ROOT=\"$SRCROOT\"\nfi\n\n# Check 1: dependency inputs (covers app projects after any package manager install)\nfor INPUT in \\\n \"$PROJECT_ROOT/package.json\" \\\n \"$PROJECT_ROOT/react-native.config.js\"; do\n if [ -f \"$INPUT\" ] && [ \"$INPUT\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\ndone\n\n# Check workspace lockfiles and package-manager metadata. These cover package\n# managers that do not reliably bump node_modules mtimes, and Yarn PnP projects\n# that do not have node_modules at all.\nif [ \"$STALE\" -eq 0 ]; then\n DIR=\"$PROJECT_ROOT\"\n while [ \"$DIR\" != \"/\" ]; do\n for INPUT in \\\n \"$DIR/package-lock.json\" \\\n \"$DIR/npm-shrinkwrap.json\" \\\n \"$DIR/yarn.lock\" \\\n \"$DIR/pnpm-lock.yaml\" \\\n \"$DIR/bun.lock\" \\\n \"$DIR/bun.lockb\" \\\n \"$DIR/.pnp.cjs\" \\\n \"$DIR/.pnp.loader.mjs\"; do\n if [ -f \"$INPUT\" ] && [ \"$INPUT\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\n done\n if [ \"$STALE\" -eq 1 ]; then\n break\n fi\n DIR=\"$(dirname \"$DIR\")\"\n done\nfi\n\n# Check node_modules mtime. In monorepos, node_modules may be hoisted to any\n# ancestor between the app package and the workspace root.\nif [ \"$STALE\" -eq 0 ]; then\n DIR=\"$PROJECT_ROOT\"\n while [ \"$DIR\" != \"/\" ]; do\n NM_DIR=\"$DIR/node_modules\"\n if [ -d \"$NM_DIR\" ] && [ \"$NM_DIR\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\n DIR=\"$(dirname \"$DIR\")\"\n done\nfi\n\n# Also check the app root directly when SRCROOT is not the package root.\nif [ \"$STALE\" -eq 0 ] && [ \"$SRCROOT\" != \"$PROJECT_ROOT\" ]; then\n if [ -d \"$SRCROOT/node_modules\" ] && [ \"$SRCROOT/node_modules\" -nt \"$STAMP\" ]; then\n STALE=1\n fi\nfi\n\n# Check 1.5: watched paths (mixed dirs AND files). Dirs catch add/remove of\n# source files in spm.modules and autolinked deps (dir mtime updates on both);\n# files catch edits to a dep's checked-in Package.swift / plugin manifests that\n# would not bump any parent dir mtime. A path that has VANISHED (renamed/moved\n# module root) forces a re-sync so the autolinker surfaces the real, actionable\n# config error rather than the build failing later on dangling-symlink noise.\nWATCH_FILE=\"$SRCROOT/build/generated/autolinking/.spm-sync-watch-paths\"\nif [ \"$STALE\" -eq 0 ] && [ -f \"$WATCH_FILE\" ]; then\n while IFS= read -r P; do\n [ -z \"$P\" ] && continue\n if [ -d \"$P\" ]; then\n if [ -n \"$(find \"$P\" -newer \"$STAMP\" -print -quit 2>/dev/null)\" ]; then\n STALE=1\n break\n fi\n elif [ -f \"$P\" ]; then\n if [ \"$P\" -nt \"$STAMP\" ]; then\n STALE=1\n break\n fi\n else\n STALE=1\n break\n fi\n done < \"$WATCH_FILE\"\nfi\n\n# Check 2: codegen spec files changed via git (covers monorepo after git pull)\nif [ \"$STALE\" -eq 0 ] && [ -f \"$STAMP\" ]; then\n STAMP_TIME=$(stat -f %m \"$STAMP\" 2>/dev/null || stat -c %Y \"$STAMP\" 2>/dev/null || echo 0)\n LATEST_SPEC_COMMIT=$(git -C \"$SRCROOT\" log -1 --format=%ct -- '*.js' '*.ts' 2>/dev/null || echo 0)\n if [ \"$LATEST_SPEC_COMMIT\" -gt \"$STAMP_TIME\" ]; then\n STALE=1\n fi\nfi\n\nif [ ! -f \"$STAMP\" ]; then\n STALE=1\nfi\n\n# Re-sync codegen + autolinking when a dependency input changed. Runtime\n# framework slots and Xcode linker settings are only changed by spm update.\nif [ \"$STALE\" -eq 1 ]; then\n echo \"SPM sync inputs changed — re-syncing (codegen + autolinking)...\"\n\n WITH_ENVIRONMENT=\"$RN_DIR/scripts/xcode/with-environment.sh\"\n\n if [ -f \"$WITH_ENVIRONMENT\" ]; then\n # with-environment.sh references PODS_ROOT and $1, which may be unset.\n # Temporarily disable nounset to avoid failures when sourcing.\n export PODS_ROOT=\"${PODS_ROOT:-$SRCROOT}\"\n set +u\n . \"$WITH_ENVIRONMENT\"\n set -u\n fi\n\n cd \"$SRCROOT\"\n # `|| RC=$?` so a non-zero exit is CAPTURED rather than aborting the phase\n # under `set -e` — the whole point is to branch on the code below (2 = fail\n # the build with a scaffold hint; other non-zero = warn but don't break).\n RC=0\n if [ -n \"$NODE_BINARY\" ] && [ -f \"$RN_DIR/scripts/setup-apple-spm.js\" ]; then\n # Direct, dependency-free dispatch (no `npx react-native`, which needs\n # @react-native-community/cli).\n \"$NODE_BINARY\" \"$RN_DIR/scripts/setup-apple-spm.js\" sync || RC=$?\n elif command -v npx >/dev/null 2>&1; then\n npx react-native spm sync || RC=$?\n else\n echo \"warning: node/npx not found — skipping SPM sync\"\n fi\n if [ \"$RC\" -eq 2 ]; then\n # Exit 2 = an autolinked community dependency has no Package.swift. The\n # autolinker already printed an `error:` line per dep (so Xcode shows them\n # and the fix). Fail the build — the developer must run\n # `npx react-native spm scaffold` from a terminal to generate the manifest.\n exit 1\n elif [ \"$RC\" -ne 0 ]; then\n echo \"warning: SPM sync failed — build may use stale codegen/autolinking\"\n fi\nfi\n\n"; + }; + B174F870C259554596A4373B /* Embed React Native Flavored Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/build/xcframeworks/.artifact-stamp", + "$(RN_SPM_REACT_FRAMEWORK)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK)", + "$(RN_SPM_HERMES_FRAMEWORK)", + ); + name = "Embed React Native Flavored Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(TARGET_BUILD_DIR)/$(FRAMEWORKS_FOLDER_PATH)/React.framework", + "$(TARGET_BUILD_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactNativeDependencies.framework", + "$(TARGET_BUILD_DIR)/$(FRAMEWORKS_FOLDER_PATH)/hermesvm.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -euo pipefail\n\ndestination=\"$TARGET_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH\"\nmkdir -p \"$destination\"\n\nvalidate_framework() {\n source=\"$1\"\n name=\"$2\"\n if [ -z \"$source\" ] || [ ! -d \"$source\" ]; then\n echo \"error: React Native SwiftPM framework '$name' is unavailable for configuration '$CONFIGURATION' and SDK '$SDK_NAME': $source\"\n exit 1\n fi\n binary=\"${name%.framework}\"\n if [ ! -e \"$source/$binary\" ] && [ ! -e \"$source/Versions/Current/$binary\" ]; then\n echo \"error: React Native SwiftPM framework '$name' is invalid for configuration '$CONFIGURATION': expected $source/$binary or $source/Versions/Current/$binary\"\n exit 1\n fi\n}\n\ncopy_and_sign() {\n source=\"$1\"\n name=\"$2\"\n /usr/bin/rsync -a --delete \"$source/\" \"$destination/$name/\"\n if [ \"${CODE_SIGNING_ALLOWED:-YES}\" != \"NO\" ]; then\n identity=\"${EXPANDED_CODE_SIGN_IDENTITY:--}\"\n if [ \"$identity\" = \"-\" ]; then\n /usr/bin/codesign --force --sign - --timestamp=none --preserve-metadata=identifier,entitlements,flags \"$destination/$name\"\n else\n /usr/bin/codesign --force --sign \"$identity\" --preserve-metadata=identifier,entitlements,flags \"$destination/$name\"\n fi\n fi\n}\n\nvalidate_framework \"${RN_SPM_REACT_FRAMEWORK:-}\" \"React.framework\"\nvalidate_framework \"${RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK:-}\" \"ReactNativeDependencies.framework\"\nvalidate_framework \"${RN_SPM_HERMES_FRAMEWORK:-}\" \"hermesvm.framework\"\ncopy_and_sign \"${RN_SPM_REACT_FRAMEWORK:-}\" \"React.framework\"\ncopy_and_sign \"${RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK:-}\" \"ReactNativeDependencies.framework\"\ncopy_and_sign \"${RN_SPM_HERMES_FRAMEWORK:-}\" \"hermesvm.framework\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A58AAE82E607E0200A6AA85 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + "RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64"; + "RN_SPM_HERMES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_HERMES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework/Versions/1/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64"; + "RN_SPM_HERMES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64"; + "RN_SPM_HERMES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64"; + "RN_SPM_REACT_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework"; + RN_SPM_FLAVOR = debug; + HERMES_CLI_PATH = "$(SRCROOT)/../../node_modules/hermes-compiler/hermesc/osx-bin/hermesc"; + REACT_NATIVE_PATH = "../../node_modules/react-native"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(RN_SPM_REACT_SEARCH_PATH)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH)", + "$(RN_SPM_HERMES_SEARCH_PATH)", + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = CheckoutKitReactNativeDemo/CheckoutKitReactNativeDemo.entitlements; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7XGC83MZE; + ENABLE_BITCODE = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"${PODS_ROOT}/Headers/Public\"", + "\"${PODS_ROOT}/Headers/Public/CocoaAsyncSocket\"", + "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"", + "\"${PODS_ROOT}/Headers/Public/FBLazyVector\"", + "\"${PODS_ROOT}/Headers/Public/RCT-Folly\"", + "\"${PODS_ROOT}/Headers/Public/RCTRequired\"", + "\"${PODS_ROOT}/Headers/Public/RCTTypeSafety\"", + "\"${PODS_ROOT}/Headers/Public/RNCMaskedView\"", + "\"${PODS_ROOT}/Headers/Public/RNGestureHandler\"", + "\"${PODS_ROOT}/Headers/Public/RNReanimated\"", + "\"${PODS_ROOT}/Headers/Public/RNScreens\"", + "\"${PODS_ROOT}/Headers/Public/RNVectorIcons\"", + "\"${PODS_ROOT}/Headers/Public/React-Codegen\"", + "\"${PODS_ROOT}/Headers/Public/React-Core\"", + "\"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"", + "\"$(SRCROOT)/Pods/ShopifyCheckoutKit\"/**", + "\"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTText\"", + "\"${PODS_ROOT}/Headers/Public/React-callinvoker\"", + "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"", + "\"${PODS_ROOT}/Headers/Public/React-debug\"", + "\"${PODS_ROOT}/Headers/Public/React-hermes\"", + "\"${PODS_ROOT}/Headers/Public/React-jsi\"", + "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"", + "\"${PODS_ROOT}/Headers/Public/React-logger\"", + "\"${PODS_ROOT}/Headers/Public/React-perflogger\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimescheduler\"", + "\"${PODS_ROOT}/Headers/Public/React-utils\"", + "\"${PODS_ROOT}/Headers/Public/ReactCommon\"", + "\"${PODS_ROOT}/Headers/Public/SocketRocket\"", + "\"${PODS_ROOT}/Headers/Public/Yoga\"", + "\"${PODS_ROOT}/Headers/Public/YogaKit\"", + "\"${PODS_ROOT}/Headers/Public/fmt\"", + "\"${PODS_ROOT}/Headers/Public/glog\"", + "\"${PODS_ROOT}/Headers/Public/hermes-engine\"", + "\"${PODS_ROOT}/Headers/Public/libevent\"", + "\"${PODS_ROOT}/Headers/Public/react-native-safe-area-context\"", + "\"${PODS_ROOT}/Headers/Public/RNShopifyCheckoutKit\"/**", + "\"$(PODS_ROOT)/DoubleConversion\"", + "\"$(PODS_ROOT)/boost\"", + "\"$(PODS_ROOT)/Headers/Private/React-Core\"", + "\"$(PODS_TARGET_SRCROOT)/include/\"", + "\"$(PODS_ROOT)/boost\"", + "\"$(PODS_ROOT)/boost-for-react-native\"", + "\"$(PODS_ROOT)/glog\"", + "\"$(PODS_ROOT)/RCT-Folly\"", + "\"$(PODS_ROOT)/Headers/Public/React-hermes\"", + "\"$(PODS_ROOT)/Headers/Public/hermes-engine\"", + "\"$(PODS_ROOT)/../../node_modules/react-native/ReactCommon\"", + "$(SRCROOT)/build/generated/autolinking/headers", + ); + INFOPLIST_FILE = CheckoutKitReactNativeDemo/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "Checkout Kit React Native Demo"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + "$(RN_SPM_REACT_BINARY)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)", + "$(RN_SPM_HERMES_BINARY)", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.shopify.checkoutkit.reactnativedemo; + PRODUCT_NAME = CheckoutKitReactNativeDemo; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_OBJC_BRIDGING_HEADER = "CheckoutKitReactNativeDemo-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + "RN_SPM_HERMES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64"; + "RN_SPM_HERMES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/xros-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_HERMES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework/Versions/1/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-maccatalyst/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64"; + "RN_SPM_HERMES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/ios-arm64/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_HERMES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64_x86_64-simulator/hermesvm.framework"; + "RN_SPM_HERMES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64"; + "RN_SPM_HERMES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework/hermesvm"; + "RN_SPM_HERMES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/hermes-engine.xcframework/tvos-arm64/hermesvm.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xrsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=xros*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/xros-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-maccatalyst/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/ios-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvsimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64_x86_64-simulator/ReactNativeDependencies.framework"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework/ReactNativeDependencies"; + "RN_SPM_REACT_NATIVE_DEPENDENCIES_FRAMEWORK[sdk=appletvos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/ReactNativeDependencies.xcframework/tvos-arm64/ReactNativeDependencies.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst"; + "RN_SPM_REACT_BINARY[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=macosx*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-maccatalyst/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator"; + "RN_SPM_REACT_BINARY[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphonesimulator*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64_x86_64-simulator/React.framework"; + "RN_SPM_REACT_SEARCH_PATH[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64"; + "RN_SPM_REACT_BINARY[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework/React"; + "RN_SPM_REACT_FRAMEWORK[sdk=iphoneos*]" = "$(SRCROOT)/build/xcframeworks/$(RN_SPM_FLAVOR)/React.xcframework/ios-arm64/React.framework"; + RN_SPM_FLAVOR = release; + HERMES_CLI_PATH = "$(SRCROOT)/../../node_modules/hermes-compiler/hermesc/osx-bin/hermesc"; + REACT_NATIVE_PATH = "../../node_modules/react-native"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(RN_SPM_REACT_SEARCH_PATH)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_SEARCH_PATH)", + "$(RN_SPM_HERMES_SEARCH_PATH)", + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = CheckoutKitReactNativeDemo/CheckoutKitReactNativeDemo.entitlements; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7XGC83MZE; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"${PODS_ROOT}/Headers/Public\"", + "\"${PODS_ROOT}/Headers/Public/CocoaAsyncSocket\"", + "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"", + "\"${PODS_ROOT}/Headers/Public/FBLazyVector\"", + "\"${PODS_ROOT}/Headers/Public/RCT-Folly\"", + "\"${PODS_ROOT}/Headers/Public/RCTRequired\"", + "\"${PODS_ROOT}/Headers/Public/RCTTypeSafety\"", + "\"${PODS_ROOT}/Headers/Public/RNCMaskedView\"", + "\"${PODS_ROOT}/Headers/Public/RNGestureHandler\"", + "\"${PODS_ROOT}/Headers/Public/RNReanimated\"", + "\"${PODS_ROOT}/Headers/Public/RNScreens\"", + "\"${PODS_ROOT}/Headers/Public/RNVectorIcons\"", + "\"${PODS_ROOT}/Headers/Public/React-Codegen\"", + "\"${PODS_ROOT}/Headers/Public/React-Core\"", + "\"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"", + "\"$(SRCROOT)/Pods/ShopifyCheckoutKit\"/**", + "\"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTText\"", + "\"${PODS_ROOT}/Headers/Public/React-callinvoker\"", + "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"", + "\"${PODS_ROOT}/Headers/Public/React-debug\"", + "\"${PODS_ROOT}/Headers/Public/React-hermes\"", + "\"${PODS_ROOT}/Headers/Public/React-jsi\"", + "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"", + "\"${PODS_ROOT}/Headers/Public/React-logger\"", + "\"${PODS_ROOT}/Headers/Public/React-perflogger\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimescheduler\"", + "\"${PODS_ROOT}/Headers/Public/React-utils\"", + "\"${PODS_ROOT}/Headers/Public/ReactCommon\"", + "\"${PODS_ROOT}/Headers/Public/SocketRocket\"", + "\"${PODS_ROOT}/Headers/Public/Yoga\"", + "\"${PODS_ROOT}/Headers/Public/YogaKit\"", + "\"${PODS_ROOT}/Headers/Public/fmt\"", + "\"${PODS_ROOT}/Headers/Public/glog\"", + "\"${PODS_ROOT}/Headers/Public/hermes-engine\"", + "\"${PODS_ROOT}/Headers/Public/libevent\"", + "\"${PODS_ROOT}/Headers/Public/react-native-safe-area-context\"", + "\"${PODS_ROOT}/Headers/Public/RNShopifyCheckoutKit\"/**", + "\"$(PODS_ROOT)/DoubleConversion\"", + "\"$(PODS_ROOT)/boost\"", + "\"$(PODS_ROOT)/Headers/Private/React-Core\"", + "\"$(PODS_TARGET_SRCROOT)/include/\"", + "\"$(PODS_ROOT)/boost\"", + "\"$(PODS_ROOT)/boost-for-react-native\"", + "\"$(PODS_ROOT)/glog\"", + "\"$(PODS_ROOT)/RCT-Folly\"", + "\"$(PODS_ROOT)/Headers/Public/React-hermes\"", + "\"$(PODS_ROOT)/Headers/Public/hermes-engine\"", + "\"$(PODS_ROOT)/../../node_modules/react-native/ReactCommon\"", + "$(SRCROOT)/build/generated/autolinking/headers", + ); + INFOPLIST_FILE = CheckoutKitReactNativeDemo/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "Checkout Kit React Native Demo"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + "$(RN_SPM_REACT_BINARY)", + "$(RN_SPM_REACT_NATIVE_DEPENDENCIES_BINARY)", + "$(RN_SPM_HERMES_BINARY)", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.shopify.checkoutkit.reactnativedemo; + PRODUCT_NAME = CheckoutKitReactNativeDemo; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_OBJC_BRIDGING_HEADER = "CheckoutKitReactNativeDemo-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A4F0E4A2E4B123400000001 /* Config.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CXX = ""; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + LD = ""; + LDPLUSPLUS = ""; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_LDFLAGS = "$(inherited)"; + PODFILE_DIR = "$(SRCROOT)"; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_OBJC_BRIDGING_HEADER = "CheckoutKitReactNativeDemo-Bridging-Header.h"; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A4F0E4A2E4B123400000001 /* Config.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + CXX = ""; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + LD = ""; + LDPLUSPLUS = ""; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_LDFLAGS = "$(inherited)"; + PODFILE_DIR = "$(SRCROOT)"; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_OBJC_BRIDGING_HEADER = "CheckoutKitReactNativeDemo-Bridging-Header.h"; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "CheckoutKitReactNativeDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "CheckoutKitReactNativeDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */ = {isa = XCLocalSwiftPackageReference; relativePath = build/xcframeworks;}; + C2FECF1430FDAAE3BF355839 /* XCLocalSwiftPackageReference "build/generated/autolinking" */ = {isa = XCLocalSwiftPackageReference; relativePath = build/generated/autolinking;}; + A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */ = {isa = XCLocalSwiftPackageReference; relativePath = build/generated/ios;}; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 512EBECF5434FD7A6AF7C967 /* ReactHeaders */ = {isa = XCSwiftPackageProductDependency; package = 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */; productName = ReactHeaders;}; + 920F69A9DF98D37C8308D020 /* ReactNativeHeaders */ = {isa = XCSwiftPackageProductDependency; package = 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */; productName = ReactNativeHeaders;}; + 8332BE36B9C49BD2E49347C1 /* ReactNativeDependenciesHeaders */ = {isa = XCSwiftPackageProductDependency; package = 27BDE9D743CB351F53154525 /* XCLocalSwiftPackageReference "build/xcframeworks" */; productName = ReactNativeDependenciesHeaders;}; + 3AFDEFB917B01458307FDE0A /* Autolinked */ = {isa = XCSwiftPackageProductDependency; package = C2FECF1430FDAAE3BF355839 /* XCLocalSwiftPackageReference "build/generated/autolinking" */; productName = Autolinked;}; + 947DD5EF3BE079FB7F5AFF87 /* ReactCodegen */ = {isa = XCSwiftPackageProductDependency; package = A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */; productName = ReactCodegen;}; + F3857EDDA38AFC0011322D6D /* ReactAppDependencyProvider */ = {isa = XCSwiftPackageProductDependency; package = A700952B9A737913514EB28F /* XCLocalSwiftPackageReference "build/generated/ios" */; productName = ReactAppDependencyProvider;}; +/* End XCSwiftPackageProductDependency section */ + + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..8101a4472 --- /dev/null +++ b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "checkout-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Shopify/checkout-kit", + "state" : { + "revision" : "08e6494e12a7658aaede4e2990b68b1d659d26ed", + "version" : "4.0.0-alpha.5" + } + } + ], + "version" : 2 +} diff --git a/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/xcshareddata/xcschemes/CheckoutKitReactNativeDemo.xcscheme b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/xcshareddata/xcschemes/CheckoutKitReactNativeDemo.xcscheme new file mode 100644 index 000000000..c0165ddf5 --- /dev/null +++ b/platforms/react-native/sample/ios/CheckoutKitReactNativeDemoSPM.xcodeproj/xcshareddata/xcschemes/CheckoutKitReactNativeDemo.xcscheme @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platforms/react-native/sample/ios/Podfile b/platforms/react-native/sample/ios/Podfile index e08885873..d6500eb98 100644 --- a/platforms/react-native/sample/ios/Podfile +++ b/platforms/react-native/sample/ios/Podfile @@ -7,6 +7,8 @@ require Pod::Executable.execute_command('node', ['-p', platform :ios, '16.6' +project 'CheckoutKitReactNativeDemo.xcodeproj' + prepare_react_native_project! # Suppress warnings in dependencies when building the sample app diff --git a/platforms/react-native/sample/package.json b/platforms/react-native/sample/package.json index 291774a37..f0b2bc570 100644 --- a/platforms/react-native/sample/package.json +++ b/platforms/react-native/sample/package.json @@ -9,8 +9,10 @@ "build:android": "bash ./scripts/build_android", "release:android": "bash ./scripts/release_android", "build:ios": "sh ./scripts/build_ios", + "build:ios:spm": "bash ./scripts/build_ios_spm", "lint": "pnpm run typecheck && eslint .", "ios": "bash ./scripts/ios", + "spm": "bash ./scripts/spm", "start": "react-native start -- --reset-cache", "typecheck": "tsc --noEmit", "test:ios": "sh ./scripts/test_ios", @@ -18,6 +20,7 @@ }, "dependencies": { "@apollo/client": "^3.13.9", + "@noble/hashes": "2.0.1", "@react-navigation/bottom-tabs": "^7.4.6", "@react-navigation/native": "^7.1.17", "@react-navigation/native-stack": "^7.3.25", @@ -30,9 +33,7 @@ "react-native-config": "1.5.6", "react-native-dotenv": "^3.4.11", "react-native-encrypted-storage": "^4.0.3", - "react-native-nitro-modules": "^0.33.7", - "react-native-quick-base64": "^2.2.2", - "react-native-quick-crypto": "1.0.9", + "react-native-get-random-values": "2.0.0", "react-native-safe-area-context": "^5.8.0", "react-native-screens": "^4.27.0", "react-native-vector-icons": "^10.3.0", @@ -47,8 +48,8 @@ "@babel/plugin-transform-template-literals": "^7.23.3", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.27.6", - "@react-native/babel-preset": "0.87.0", "@react-native-masked-view/masked-view": "^0.3.2", + "@react-native/babel-preset": "0.87.0", "@react-native/metro-config": "0.87.0", "@types/react": "^19.2.0", "@types/setimmediate": "^1", diff --git a/platforms/react-native/sample/react-native.config.js b/platforms/react-native/sample/react-native.config.js index 30df24fe0..3a5d6cb07 100644 --- a/platforms/react-native/sample/react-native.config.js +++ b/platforms/react-native/sample/react-native.config.js @@ -29,14 +29,8 @@ module.exports = { 'react-native-gesture-handler': { root: resolvePackageRoot('react-native-gesture-handler'), }, - 'react-native-nitro-modules': { - root: resolvePackageRoot('react-native-nitro-modules'), - }, - 'react-native-quick-base64': { - root: resolvePackageRoot('react-native-quick-base64'), - }, - 'react-native-quick-crypto': { - root: resolvePackageRoot('react-native-quick-crypto'), + 'react-native-get-random-values': { + root: resolvePackageRoot('react-native-get-random-values'), }, 'react-native-safe-area-context': { root: resolvePackageRoot('react-native-safe-area-context'), diff --git a/platforms/react-native/sample/scripts/build_ios_spm b/platforms/react-native/sample/scripts/build_ios_spm new file mode 100755 index 000000000..ae77b05e2 --- /dev/null +++ b/platforms/react-native/sample/scripts/build_ios_spm @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -e -o pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/simulator" +dest="$(get_sim_destination)" + +(cd "$SCRIPT_DIR/.." && pnpm spm) +cd "$SCRIPT_DIR/../ios" + +xcbeautify_args="" +if [ "${GITHUB_ACTIONS:-}" = "true" ]; then + xcbeautify_args="--renderer github-actions" +fi + +run_xcodebuild() { + xcodebuild build \ + -project CheckoutKitReactNativeDemoSPM.xcodeproj \ + -scheme CheckoutKitReactNativeDemo \ + -sdk iphonesimulator \ + -destination "$dest" \ + -skipPackagePluginValidation \ + -disableAutomaticPackageResolution \ + GCC_PRECOMPILE_PREFIX_HEADER=YES \ + ASSETCATALOG_COMPILER_OPTIMIZATION=time \ + COMPILER_INDEX_STORE_ENABLE=NO +} + +if command -v xcbeautify >/dev/null 2>&1; then + run_xcodebuild | xcbeautify $xcbeautify_args +else + run_xcodebuild +fi diff --git a/platforms/react-native/sample/scripts/normalize_spm_project.mjs b/platforms/react-native/sample/scripts/normalize_spm_project.mjs new file mode 100644 index 000000000..e85bbba51 --- /dev/null +++ b/platforms/react-native/sample/scripts/normalize_spm_project.mjs @@ -0,0 +1,12 @@ +import {readFileSync, writeFileSync} from 'node:fs'; + +const projectPath = process.argv[2]; +const project = readFileSync(projectPath, 'utf8'); +const normalized = project.replace( + /HERMES_CLI_PATH = "[^"]*\/hermes-compiler\/hermesc\/osx-bin\/hermesc";/g, + 'HERMES_CLI_PATH = "$(SRCROOT)/../../node_modules/hermes-compiler/hermesc/osx-bin/hermesc";', +); + +if (normalized !== project) { + writeFileSync(projectPath, normalized); +} diff --git a/platforms/react-native/sample/scripts/spm b/platforms/react-native/sample/scripts/spm new file mode 100755 index 000000000..c6f211306 --- /dev/null +++ b/platforms/react-native/sample/scripts/spm @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT="CheckoutKitReactNativeDemoSPM.xcodeproj" + +cd "$SCRIPT_DIR/.." +rm -rf ios/build/generated +react-native spm \ + --xcodeproj "$PROJECT" \ + --productName CheckoutKitReactNativeDemo \ + "$@" + +node "$SCRIPT_DIR/normalize_spm_project.mjs" "ios/$PROJECT/project.pbxproj" diff --git a/platforms/react-native/sample/src/auth/pkce.ts b/platforms/react-native/sample/src/auth/pkce.ts index 3a24f1142..8c01951eb 100644 --- a/platforms/react-native/sample/src/auth/pkce.ts +++ b/platforms/react-native/sample/src/auth/pkce.ts @@ -1,7 +1,7 @@ -import crypto from 'react-native-quick-crypto'; +import {sha256} from '@noble/hashes/sha2.js'; +import {randomBytes, utf8ToBytes} from '@noble/hashes/utils.js'; -function base64URLEncode(buffer: ArrayBufferLike): string { - const bytes = new Uint8Array(buffer); +function base64URLEncode(bytes: Uint8Array): string { let binary = ''; for (let i = 0; i < bytes.length; i++) { binary += String.fromCharCode(bytes[i]!); @@ -14,17 +14,14 @@ function base64URLEncode(buffer: ArrayBufferLike): string { export class PKCE { static generateCodeVerifier(): string { - const bytes = crypto.randomBytes(32); - return base64URLEncode(bytes.buffer); + return base64URLEncode(randomBytes(32)); } static generateCodeChallenge(verifier: string): string { - const hash = crypto.createHash('sha256').update(verifier).digest(); - return base64URLEncode(hash.buffer); + return base64URLEncode(sha256(utf8ToBytes(verifier))); } static generateState(): string { - const bytes = crypto.randomBytes(27); - return base64URLEncode(bytes.buffer); + return base64URLEncode(randomBytes(27)); } } diff --git a/platforms/react-native/scripts/pod_install b/platforms/react-native/scripts/pod_install index f1ff76ee2..8734adff9 100755 --- a/platforms/react-native/scripts/pod_install +++ b/platforms/react-native/scripts/pod_install @@ -9,6 +9,7 @@ for arg in "$@"; do done cd sample/ios +rm -rf build/generated bundle check || bundle install if [ "${USE_LOCAL_SDK:-0}" = "1" ]; then diff --git a/platforms/react-native/tsconfig.json b/platforms/react-native/tsconfig.json index 8e4a91dc6..beae6a775 100644 --- a/platforms/react-native/tsconfig.json +++ b/platforms/react-native/tsconfig.json @@ -23,5 +23,6 @@ "verbatimModuleSyntax": true, "target": "esnext", "types": ["jest", "node"] - } + }, + "exclude": ["node_modules", "sample/ios/build"] }