@xrnjs/app-template 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/$package.json +51 -0
- package/.env +6 -0
- package/.env.prod +6 -0
- package/LICENSE +202 -0
- package/android/app/build.gradle +176 -0
- package/android/app/build_defs.bzl +19 -0
- package/android/app/debug.keystore +0 -0
- package/android/app/proguard-rules.pro +10 -0
- package/android/app/src/debug/AndroidManifest.xml +13 -0
- package/android/app/src/debug/java/com/xrn/template/ReactNativeFlipper.java +73 -0
- package/android/app/src/main/AndroidManifest.xml +46 -0
- package/android/app/src/main/assets/index.main-bundle.bundle +178940 -0
- package/android/app/src/main/assets/index.sub-bundle.bundle +178928 -0
- package/android/app/src/main/assets/xrn-manifest.json +1 -0
- package/android/app/src/main/java/com/xrn/template/MainActivity.kt +52 -0
- package/android/app/src/main/java/com/xrn/template/MainApplication.kt +91 -0
- package/android/app/src/main/java/com/xrn/template/multibundle/XBundleInfoHook.kt +9 -0
- package/android/app/src/main/java/com/xrn/template/multibundle/XDevSupportParams.kt +6 -0
- package/android/app/src/main/java/com/xrn/template/multibundle/XRNHostParams.kt +81 -0
- package/android/app/src/main/java/com/xrn/template/navigation/MainClazzFactory.kt +14 -0
- package/android/app/src/main/java/com/xrn/template/navigation/XBundleActivity.kt +56 -0
- package/android/app/src/main/java/com/xrn/template/navigation/XMainActivity.kt +4 -0
- package/android/app/src/main/java/com/xrn/template/utils/DevEntryUtil.kt +29 -0
- package/android/app/src/main/java/com/xrn/template/utils/LifecycleAwareRunnable.kt +37 -0
- package/android/app/src/main/jni/CMakeLists.txt +7 -0
- package/android/app/src/main/jni/MainApplicationModuleProvider.cpp +32 -0
- package/android/app/src/main/jni/MainApplicationModuleProvider.h +16 -0
- package/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp +45 -0
- package/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h +38 -0
- package/android/app/src/main/jni/MainComponentsRegistry.cpp +65 -0
- package/android/app/src/main/jni/MainComponentsRegistry.h +32 -0
- package/android/app/src/main/jni/OnLoad.cpp +11 -0
- package/android/app/src/main/res/drawable/bg_debug_entry.xml +15 -0
- package/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
- package/android/app/src/main/res/drawable-hdpi/node_modules_reactnavigation_elements_src_assets_backicon.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_logbox_ui_logboximages_alerttriangle.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_logbox_ui_logboximages_chevronleft.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_logbox_ui_logboximages_chevronright.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_logbox_ui_logboximages_close.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_logbox_ui_logboximages_loader.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnavigation_elements_src_assets_backicon.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_reactnavigation_elements_src_assets_backiconmask.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_images_fail_icon.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_images_success_icon.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_network_close.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_network_filter.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_network_more.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_network_search.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_devtools_assets_network_share.png +0 -0
- package/android/app/src/main/res/drawable-mdpi/node_modules_xrn_navigation_assets_backicon.png +0 -0
- package/android/app/src/main/res/drawable-xhdpi/node_modules_reactnavigation_elements_src_assets_backicon.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_reactnavigation_elements_src_assets_backicon.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_copy_icon.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_app_info.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_app_start_time.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_file.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_fps.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_h5.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_health.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_kadun.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_net.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_qingchu.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_scan.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_self.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_setting.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_view_check.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_view_level.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_doraemon_viewmetrics.png +0 -0
- package/android/app/src/main/res/drawable-xxhdpi/node_modules_xrn_devtools_assets_images_rebackwhiteicon.png +0 -0
- package/android/app/src/main/res/drawable-xxxhdpi/node_modules_reactnavigation_elements_src_assets_backicon.png +0 -0
- package/android/app/src/main/res/layout/activity_splash.xml +16 -0
- package/android/app/src/main/res/layout/layout_rn_dev_float.xml +18 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/raw/bundle_config.json +23 -0
- package/android/app/src/main/res/raw/launch_screen.json +1 -0
- package/android/app/src/main/res/values/strings.xml +3 -0
- package/android/app/src/main/res/values/styles.xml +9 -0
- package/android/build.gradle +83 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradle.properties +63 -0
- package/android/gradlew +234 -0
- package/android/gradlew.bat +89 -0
- package/android/settings.gradle +18 -0
- package/harmony/.clang-format +64 -0
- package/harmony/.clang-tidy +1 -0
- package/harmony/.clangd +13 -0
- package/harmony/AppScope/app.json5 +10 -0
- package/harmony/AppScope/resources/base/element/string.json +8 -0
- package/harmony/AppScope/resources/base/media/app_icon.png +0 -0
- package/harmony/XRNTemplate-dev.cer +52 -0
- package/harmony/XRNTemplate-devDebug.p7b +0 -0
- package/harmony/XRNTemplate.p12 +0 -0
- package/harmony/build-profile.json5 +91 -0
- package/harmony/code-linter.json5 +20 -0
- package/harmony/entry/build-profile.json5 +33 -0
- package/harmony/entry/hvigorfile.ts +6 -0
- package/harmony/entry/obfuscation-rules.txt +23 -0
- package/harmony/entry/oh-package-lock.json5 +486 -0
- package/harmony/entry/oh-package.json5 +59 -0
- package/harmony/entry/src/main/cpp/CMakeLists.txt +72 -0
- package/harmony/entry/src/main/cpp/PackageProvider.cpp +51 -0
- package/harmony/entry/src/main/cpp/generated/BundleNavigation.cpp +25 -0
- package/harmony/entry/src/main/cpp/generated/BundleNavigation.h +21 -0
- package/harmony/entry/src/main/cpp/generated/ConfigNativeModule.cpp +21 -0
- package/harmony/entry/src/main/cpp/generated/ConfigNativeModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/GetRandomValuesNativeModule.cpp +21 -0
- package/harmony/entry/src/main/cpp/generated/GetRandomValuesNativeModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/ImageResizer.cpp +21 -0
- package/harmony/entry/src/main/cpp/generated/ImageResizer.h +21 -0
- package/harmony/entry/src/main/cpp/generated/NativeHarmonyTouchId.cpp +22 -0
- package/harmony/entry/src/main/cpp/generated/NativeHarmonyTouchId.h +21 -0
- package/harmony/entry/src/main/cpp/generated/OreitationLockerNativeModule.cpp +31 -0
- package/harmony/entry/src/main/cpp/generated/OreitationLockerNativeModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNCCameraRoll.cpp +28 -0
- package/harmony/entry/src/main/cpp/generated/RNCCameraRoll.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNCCameraRollPermission.cpp +26 -0
- package/harmony/entry/src/main/cpp/generated/RNCCameraRollPermission.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNCWebViewComponentDescriptor.h +43 -0
- package/harmony/entry/src/main/cpp/generated/RNCWebViewJSIBinder.h +120 -0
- package/harmony/entry/src/main/cpp/generated/RNCWebViewModule.cpp +22 -0
- package/harmony/entry/src/main/cpp/generated/RNCWebViewModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNDeviceInfo.cpp +137 -0
- package/harmony/entry/src/main/cpp/generated/RNDeviceInfo.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNDocumentPicker.cpp +24 -0
- package/harmony/entry/src/main/cpp/generated/RNDocumentPicker.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNGestureHandlerButtonComponentDescriptor.h +43 -0
- package/harmony/entry/src/main/cpp/generated/RNGestureHandlerButtonJSIBinder.h +38 -0
- package/harmony/entry/src/main/cpp/generated/RNGestureHandlerModule.cpp +28 -0
- package/harmony/entry/src/main/cpp/generated/RNGestureHandlerModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNGestureHandlerRootViewComponentDescriptor.h +43 -0
- package/harmony/entry/src/main/cpp/generated/RNGestureHandlerRootViewJSIBinder.h +31 -0
- package/harmony/entry/src/main/cpp/generated/RNLocalize.cpp +31 -0
- package/harmony/entry/src/main/cpp/generated/RNLocalize.h +21 -0
- package/harmony/entry/src/main/cpp/generated/RNOHGeneratedPackage.h +191 -0
- package/harmony/entry/src/main/cpp/generated/RTNCodePush.cpp +48 -0
- package/harmony/entry/src/main/cpp/generated/RTNCodePush.h +21 -0
- package/harmony/entry/src/main/cpp/generated/ReactNativeBlobUtil.cpp +51 -0
- package/harmony/entry/src/main/cpp/generated/ReactNativeBlobUtil.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNAppUtilsModule.cpp +29 -0
- package/harmony/entry/src/main/cpp/generated/XRNAppUtilsModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNAssetLoaderModule.cpp +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNAssetLoaderModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNBundleModule.cpp +27 -0
- package/harmony/entry/src/main/cpp/generated/XRNBundleModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNDebugToolsModule.cpp +32 -0
- package/harmony/entry/src/main/cpp/generated/XRNDebugToolsModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNFileModule.cpp +22 -0
- package/harmony/entry/src/main/cpp/generated/XRNFileModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNLoadingModule.cpp +25 -0
- package/harmony/entry/src/main/cpp/generated/XRNLoadingModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNMultiBundleModule.cpp +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNMultiBundleModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNNativeStorageModule.cpp +26 -0
- package/harmony/entry/src/main/cpp/generated/XRNNativeStorageModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNNavigation.cpp +23 -0
- package/harmony/entry/src/main/cpp/generated/XRNNavigation.h +21 -0
- package/harmony/entry/src/main/cpp/generated/XRNToastModule.cpp +22 -0
- package/harmony/entry/src/main/cpp/generated/XRNToastModule.h +21 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/RNOH/generated/BaseReactNativeOhTplAsyncStoragePackage.h +68 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/RNOH/generated/turbo_modules/RNCAsyncStorage.cpp +26 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/RNOH/generated/turbo_modules/RNCAsyncStorage.h +21 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/ComponentDescriptors.h +22 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/EventEmitters.cpp +18 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/EventEmitters.h +19 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/Props.cpp +21 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/Props.h +20 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/ShadowNodes.cpp +19 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/ShadowNodes.h +25 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/States.cpp +18 -0
- package/harmony/entry/src/main/cpp/generated/_react_native_oh_tpl_async_storage/react/renderer/components/_react_native_oh_tpl_async_storage/States.h +23 -0
- package/harmony/entry/src/main/ets/BundleHelper.ets +198 -0
- package/harmony/entry/src/main/ets/Constants.ets +2 -0
- package/harmony/entry/src/main/ets/MainAbilityStage.ets +60 -0
- package/harmony/entry/src/main/ets/entryability/EntryAbility.ets +57 -0
- package/harmony/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +12 -0
- package/harmony/entry/src/main/ets/lottie/launch_screen.json +1 -0
- package/harmony/entry/src/main/ets/module/devtools/components/FloatBall.ets +359 -0
- package/harmony/entry/src/main/ets/navDestination/BizModuleContainer.ets +8 -0
- package/harmony/entry/src/main/ets/navDestination/MainModuleContainer.ets +8 -0
- package/harmony/entry/src/main/ets/navDestination/Splash.ets +79 -0
- package/harmony/entry/src/main/ets/pages/Index.ets +66 -0
- package/harmony/entry/src/main/module.json5 +68 -0
- package/harmony/entry/src/main/resources/base/element/color.json +12 -0
- package/harmony/entry/src/main/resources/base/element/string.json +19 -0
- package/harmony/entry/src/main/resources/base/media/background.png +0 -0
- package/harmony/entry/src/main/resources/base/media/foreground.png +0 -0
- package/harmony/entry/src/main/resources/base/media/ic_back.png +0 -0
- package/harmony/entry/src/main/resources/base/media/layered_image.json +7 -0
- package/harmony/entry/src/main/resources/base/media/startIcon.png +0 -0
- package/harmony/entry/src/main/resources/base/profile/backup_config.json +3 -0
- package/harmony/entry/src/main/resources/base/profile/main_pages.json +5 -0
- package/harmony/entry/src/main/resources/en_US/element/string.json +16 -0
- package/harmony/entry/src/main/resources/rawfile/bundle_config.json5 +23 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/AntDesign.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Entypo.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/EvilIcons.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Feather.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome5_Brands.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome5_Regular.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome5_Solid.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome6_Brands.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome6_Regular.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/FontAwesome6_Solid.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Fontisto.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Foundation.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Ionicons.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/MaterialCommunityIcons.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/MaterialIcons.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Octicons.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/SimpleLineIcons.ttf +0 -0
- package/harmony/entry/src/main/resources/rawfile/fonts/Zocial.ttf +0 -0
- package/harmony/entry/src/main/resources/zh_CN/element/string.json +16 -0
- package/harmony/entry/src/mock/mock-config.json5 +2 -0
- package/harmony/entry/src/ohosTest/ets/test/Ability.test.ets +35 -0
- package/harmony/entry/src/ohosTest/ets/test/List.test.ets +5 -0
- package/harmony/entry/src/ohosTest/module.json5 +13 -0
- package/harmony/entry/src/test/List.test.ets +5 -0
- package/harmony/entry/src/test/LocalUnit.test.ets +33 -0
- package/harmony/hvigor/hvigor-config.json5 +22 -0
- package/harmony/hvigorfile.ts +6 -0
- package/harmony/material/ac/6a282c38039b44b2949441a85986c35d +1 -0
- package/harmony/material/ce/b2a765b7b925475797f45ae55c8d3ad3 +0 -0
- package/harmony/material/fd/0/9cbed212f275489b874de30a02692f59 +1 -0
- package/harmony/material/fd/1/dc8ea45ef44142d09bca7eeacdc5ecac +1 -0
- package/harmony/material/fd/2/d34888210a5846829d745f65295f90b7 +1 -0
- package/harmony/oh-package-lock.json5 +27 -0
- package/harmony/oh-package.json5 +17 -0
- package/ios/.xcode.env +11 -0
- package/ios/BundleEventCenter/XTBundleProvider.h +17 -0
- package/ios/BundleEventCenter/XTBundleProvider.m +129 -0
- package/ios/BundleEventCenter/XTBundleViewControllerFactory.h +18 -0
- package/ios/BundleEventCenter/XTBundleViewControllerFactory.m +39 -0
- package/ios/BundleEventCenter/bundleController/XTBundleViewController.h +16 -0
- package/ios/BundleEventCenter/bundleController/XTBundleViewController.m +35 -0
- package/ios/BundleEventCenter/bundleController/XTMainBundleViewController.h +16 -0
- package/ios/BundleEventCenter/bundleController/XTMainBundleViewController.m +41 -0
- package/ios/BundleEventCenter/bundleController/xtBundles.plist +14 -0
- package/ios/Podfile +221 -0
- package/ios/Podfile.lock +955 -0
- package/ios/RNDebug/DebugPlugin/XTPluginManage.h +24 -0
- package/ios/RNDebug/DebugPlugin/XTPluginManage.m +93 -0
- package/ios/RNDebug/Views/XTLoadJSErrorTipPanel.swift +231 -0
- package/ios/RNDebug/Views/XTScanQRPlugin.swift +122 -0
- package/ios/RNDebug/Views/XTSuspendBall.h +34 -0
- package/ios/RNDebug/Views/XTSuspendBall.m +357 -0
- package/ios/XRNTemplate/AppDelegate.h +8 -0
- package/ios/XRNTemplate/AppDelegate.mm +168 -0
- package/ios/XRNTemplate/Images.xcassets/AppIcon.appiconset/Contents.json +55 -0
- package/ios/XRNTemplate/Images.xcassets/AppIcon.appiconset/icon120_120@2x.png +0 -0
- package/ios/XRNTemplate/Images.xcassets/AppIcon.appiconset/icon180_180@3x.png +0 -0
- package/ios/XRNTemplate/Images.xcassets/Contents.json +6 -0
- package/ios/XRNTemplate/Images.xcassets/launch_icon.imageset/Contents.json +21 -0
- package/ios/XRNTemplate/Images.xcassets/launch_icon.imageset/launch_icon@2x.png +0 -0
- package/ios/XRNTemplate/Info.plist +82 -0
- package/ios/XRNTemplate/LaunchScreen.storyboard +43 -0
- package/ios/XRNTemplate/main.m +10 -0
- package/ios/XRNTemplate-Bridging-Header.h +29 -0
- package/ios/XRNTemplate.xcodeproj/project.pbxproj +1022 -0
- package/ios/XRNTemplate.xcodeproj/xcshareddata/xcschemes/XRNTemplate.xcscheme +88 -0
- package/ios/XRNTemplate.xcworkspace/contents.xcworkspacedata +10 -0
- package/ios/XRNTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/XRNTemplateTests/Info.plist +24 -0
- package/ios/XRNTemplateTests/XRNTemplateTests.m +66 -0
- package/main-bundle/App.tsx +29 -0
- package/main-bundle/app.json +15 -0
- package/main-bundle/babel.config.js +4 -0
- package/main-bundle/index.ts +3 -0
- package/main-bundle/metro.config.js +21 -0
- package/main-bundle/package.json +35 -0
- package/main-bundle/router.ts +18 -0
- package/main-bundle/tsconfig.json +26 -0
- package/main-bundle/xrn.config.ts +13 -0
- package/main-bundle/yarn.lock +13622 -0
- package/package.json +16 -0
- package/react-native.config.js +36 -0
- package/sub-bundle/App.tsx +23 -0
- package/sub-bundle/app.json +15 -0
- package/sub-bundle/babel.config.js +4 -0
- package/sub-bundle/index.ts +3 -0
- package/sub-bundle/metro.config.js +21 -0
- package/sub-bundle/package.json +36 -0
- package/sub-bundle/router.ts +18 -0
- package/sub-bundle/tsconfig.json +26 -0
- package/sub-bundle/xrn.config.ts +13 -0
- package/sub-bundle/yarn.lock +13652 -0
- package/xrn-react-native-xcode.sh +172 -0
- package/xrn.config.json +46 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// XTPluginManage.h
|
|
3
|
+
// XRNTemplate
|
|
4
|
+
//
|
|
5
|
+
// Created by xtgq on 2024/5/7.
|
|
6
|
+
// Copyright © 2024 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <Foundation/Foundation.h>
|
|
10
|
+
|
|
11
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
12
|
+
|
|
13
|
+
@interface XTPluginManage : NSObject
|
|
14
|
+
|
|
15
|
+
+ (instancetype)shareInstance;
|
|
16
|
+
|
|
17
|
+
- (void)addSuspendBallToWindow;
|
|
18
|
+
- (void)pushJSErrorTipPanel:(NSString *)bundleName;
|
|
19
|
+
|
|
20
|
+
- (NSString *)getLocalHost;
|
|
21
|
+
- (NSString *)getLocalCodePushKey:(NSString *)bundleName;
|
|
22
|
+
@end
|
|
23
|
+
|
|
24
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
//
|
|
2
|
+
// XTPluginManage.m
|
|
3
|
+
// XRNTemplate
|
|
4
|
+
//
|
|
5
|
+
// Created by xtgq on 2024/5/7.
|
|
6
|
+
// Copyright © 2024 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import "XTPluginManage.h"
|
|
10
|
+
#import "XTSuspendBall.h"
|
|
11
|
+
#import "BundleNavigation.h"
|
|
12
|
+
#import "RCTBridge+XTExtension.h"
|
|
13
|
+
#import "XTJSBundleTool.h"
|
|
14
|
+
#import "JSONUtils.h"
|
|
15
|
+
#import "XRNToastView.h"
|
|
16
|
+
#import "RNCConfig.h"
|
|
17
|
+
#import <React/RCTUtils.h>
|
|
18
|
+
#import "XRNTemplate-Swift.h"
|
|
19
|
+
|
|
20
|
+
@interface XTPluginManage ()<SuspendViewDelegate>
|
|
21
|
+
|
|
22
|
+
@property (nonatomic, strong) NSMutableArray <NSMutableData *>*testDataArray;
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
@implementation XTPluginManage
|
|
26
|
+
|
|
27
|
+
+ (instancetype)shareInstance {
|
|
28
|
+
static XTPluginManage *_sharedInstance = nil;
|
|
29
|
+
static dispatch_once_t onceToken;
|
|
30
|
+
dispatch_once(&onceToken, ^{
|
|
31
|
+
_sharedInstance = [[XTPluginManage alloc] init];
|
|
32
|
+
_sharedInstance.testDataArray = [NSMutableArray array];
|
|
33
|
+
});
|
|
34
|
+
return _sharedInstance;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
- (void)addSuspendBallToWindow {
|
|
38
|
+
XTSuspendBall *debugButton = [[XTSuspendBall alloc] init];
|
|
39
|
+
debugButton.delegate = self;
|
|
40
|
+
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
|
|
41
|
+
[mainWindow addSubview:debugButton];
|
|
42
|
+
[mainWindow bringSubviewToFront:debugButton];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
- (void)suspendViewButtonClick:(nonnull UIButton *)sender {
|
|
46
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
47
|
+
RCTBridge *currentBridge = [[XTJSBundleTool shared] fetchCurrentBridge];
|
|
48
|
+
if (currentBridge == nil) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
BundleNavigation *module = [currentBridge moduleForClass:[BundleNavigation class]];
|
|
53
|
+
NSString *paramsStr = [JSONUtils dictionaryToJsonString:@{@"where":@"NATIVE"}];
|
|
54
|
+
[module publishSingleBundleEvent:@"NATIVE_FLOAT_BAR_CLICK" params:paramsStr];
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
- (void)pushJSErrorTipPanel:(NSString *)bundleName {
|
|
59
|
+
NSString *localBundleDebug = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@-debug", bundleName]];
|
|
60
|
+
if (!localBundleDebug) return;
|
|
61
|
+
|
|
62
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
63
|
+
XTLoadJSErrorTipPanel *vc = [[XTLoadJSErrorTipPanel alloc] init];
|
|
64
|
+
vc.bundleName = bundleName;
|
|
65
|
+
UIViewController *rootViewController = RCTPresentedViewController();
|
|
66
|
+
[rootViewController presentViewController:vc animated:YES completion:nil];
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
- (NSString *)getLocalHost {
|
|
71
|
+
NSString *host = [[NSUserDefaults standardUserDefaults] stringForKey:@"RCT_jsLocation"];
|
|
72
|
+
if (host.length > 0) {
|
|
73
|
+
NSInteger index = [host rangeOfString:@":"].location;
|
|
74
|
+
if (index != NSNotFound) {
|
|
75
|
+
host = [host substringToIndex:index];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#if TARGET_OS_SIMULATOR
|
|
80
|
+
host = @"localhost";
|
|
81
|
+
#else
|
|
82
|
+
host = host ?: @"";
|
|
83
|
+
#endif
|
|
84
|
+
return host;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
- (NSString *)getLocalCodePushKey:(NSString *)bundleName {
|
|
88
|
+
NSString *key = [NSString stringWithFormat:@"%@-codepush-key", bundleName];
|
|
89
|
+
NSString *localCodePsuhKey = [[NSUserDefaults standardUserDefaults] objectForKey:key];
|
|
90
|
+
return localCodePsuhKey;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@end
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
//
|
|
2
|
+
// XTLoadJSErrorTipPanel.swift
|
|
3
|
+
// XRNTemplate
|
|
4
|
+
//
|
|
5
|
+
// Created by xtgq on 2025/3/4.
|
|
6
|
+
// Copyright © 2025 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import UIKit
|
|
10
|
+
import SnapKit
|
|
11
|
+
|
|
12
|
+
@objc final class XTLoadJSErrorTipPanel: UIViewController {
|
|
13
|
+
|
|
14
|
+
@objc var bundleName: String = ""
|
|
15
|
+
|
|
16
|
+
override func viewDidLoad() {
|
|
17
|
+
super.viewDidLoad()
|
|
18
|
+
view.backgroundColor = .white
|
|
19
|
+
setupUI()
|
|
20
|
+
|
|
21
|
+
subDesc.text = "\(bundleName) bundle已开启动态调试,但本地服务连接异常,可能是以下原因:"
|
|
22
|
+
ipTip.text = "3:ip不正确(当前绑定IP是:\(XTPluginManage.shareInstance().getLocalHost()), 如果IP不正确,直接重新扫码绑定ip即可)"
|
|
23
|
+
|
|
24
|
+
cancleBtn.addTarget(self, action: #selector(cancleClick), for: .touchUpInside)
|
|
25
|
+
scanBtn.addTarget(self, action: #selector(scanClick), for: .touchUpInside)
|
|
26
|
+
exitApp.addTarget(self, action: #selector(exitClick), for: .touchUpInside)
|
|
27
|
+
resetBundle.addTarget(self, action: #selector(resetBundleClick), for: .touchUpInside)
|
|
28
|
+
resetBundle.setTitle("关闭\(bundleName)调试", for: .normal)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
deinit {
|
|
32
|
+
print("XTLoadJSErrorTipPanel deinit!")
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private func setupUI() {
|
|
36
|
+
view.addSubview(titleLabel)
|
|
37
|
+
view.addSubview(cancleBtn)
|
|
38
|
+
view.addSubview(subDesc)
|
|
39
|
+
view.addSubview(serverTip)
|
|
40
|
+
view.addSubview(wifiTip)
|
|
41
|
+
view.addSubview(ipTip)
|
|
42
|
+
view.addSubview(scanBtn)
|
|
43
|
+
view.addSubview(jsErr)
|
|
44
|
+
|
|
45
|
+
// view.addSubview(exitApp)
|
|
46
|
+
view.addSubview(resetBundle)
|
|
47
|
+
|
|
48
|
+
titleLabel.snp.makeConstraints { make in
|
|
49
|
+
make.top.equalTo(20)
|
|
50
|
+
make.centerX.equalToSuperview()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
cancleBtn.snp.makeConstraints { make in
|
|
54
|
+
make.centerY.equalTo(titleLabel)
|
|
55
|
+
make.right.equalTo(-20)
|
|
56
|
+
make.width.equalTo(40)
|
|
57
|
+
make.height.equalTo(40)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
subDesc.snp.makeConstraints { make in
|
|
61
|
+
make.top.equalTo(titleLabel.snp.bottom).offset(50)
|
|
62
|
+
make.left.equalTo(20)
|
|
63
|
+
make.right.equalTo(-20)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
serverTip.snp.makeConstraints { make in
|
|
67
|
+
make.top.equalTo(subDesc.snp.bottom).offset(50)
|
|
68
|
+
make.left.equalTo(20)
|
|
69
|
+
make.right.equalTo(-20)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
wifiTip.snp.makeConstraints { make in
|
|
73
|
+
make.top.equalTo(serverTip.snp.bottom).offset(30)
|
|
74
|
+
make.left.equalTo(20)
|
|
75
|
+
make.right.equalTo(-20)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
ipTip.snp.makeConstraints { make in
|
|
79
|
+
make.top.equalTo(wifiTip.snp.bottom).offset(30)
|
|
80
|
+
make.left.equalTo(20)
|
|
81
|
+
make.right.equalTo(-20)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
scanBtn.snp.makeConstraints { make in
|
|
85
|
+
make.top.equalTo(ipTip.snp.bottom).offset(30)
|
|
86
|
+
make.centerX.equalToSuperview()
|
|
87
|
+
make.width.equalTo(300)
|
|
88
|
+
make.height.equalTo(45)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
jsErr.snp.makeConstraints { make in
|
|
92
|
+
make.top.equalTo(scanBtn.snp.bottom).offset(30)
|
|
93
|
+
make.left.equalTo(20)
|
|
94
|
+
make.right.equalTo(-20)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// exitApp.snp.makeConstraints { make in
|
|
98
|
+
// make.left.equalToSuperview().offset(20)
|
|
99
|
+
// make.bottom.equalTo(-60)
|
|
100
|
+
// make.width.equalTo(140)
|
|
101
|
+
// make.height.equalTo(45)
|
|
102
|
+
// }
|
|
103
|
+
|
|
104
|
+
resetBundle.snp.makeConstraints { make in
|
|
105
|
+
make.left.equalToSuperview().offset(20)
|
|
106
|
+
make.right.equalToSuperview().offset(-20)
|
|
107
|
+
make.height.equalTo(45)
|
|
108
|
+
make.bottom.equalTo(-60)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@objc private func cancleClick() {
|
|
114
|
+
self.dismiss(animated: true, completion: nil)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@objc private func exitClick() {
|
|
118
|
+
exitAppFun()
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@objc private func resetBundleClick() {
|
|
122
|
+
UserDefaults.standard.removeObject(forKey: "\(bundleName)-debug")
|
|
123
|
+
UserDefaults.standard.synchronize()
|
|
124
|
+
exitAppFun()
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@objc private func scanClick() {
|
|
128
|
+
#if DEBUG
|
|
129
|
+
XTScanQRPlugin.shared.startScan()
|
|
130
|
+
#endif
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private func exitAppFun() {
|
|
134
|
+
// let mainBridge = XTMultiBundleManager.shared().pool?.fetchJSBridge(withJSBundleName: "xt-app-main") as? RCTBridge
|
|
135
|
+
// if let bridge = mainBridge, let module = bridge.module(forName: "XRNAppUtilsModule") as? NSObject {
|
|
136
|
+
// module.perform(Selector(("exitApp")))
|
|
137
|
+
// }
|
|
138
|
+
exit(0)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private lazy var titleLabel: UILabel = {
|
|
142
|
+
let label = UILabel()
|
|
143
|
+
label.text = "本地服务异常"
|
|
144
|
+
label.textColor = .black
|
|
145
|
+
label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
|
|
146
|
+
label.numberOfLines = 0
|
|
147
|
+
return label
|
|
148
|
+
}()
|
|
149
|
+
|
|
150
|
+
private lazy var cancleBtn: UIButton = {
|
|
151
|
+
let cancle = UIButton(type: .custom)
|
|
152
|
+
cancle.setTitle("取消", for: .normal)
|
|
153
|
+
cancle.setTitleColor(.black, for: .normal)
|
|
154
|
+
cancle.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .bold)
|
|
155
|
+
return cancle
|
|
156
|
+
}()
|
|
157
|
+
|
|
158
|
+
private lazy var subDesc: UILabel = {
|
|
159
|
+
let label = UILabel()
|
|
160
|
+
label.text = ""
|
|
161
|
+
label.textColor = .black
|
|
162
|
+
label.font = UIFont.systemFont(ofSize: 18, weight: .bold)
|
|
163
|
+
label.numberOfLines = 0
|
|
164
|
+
return label
|
|
165
|
+
}()
|
|
166
|
+
|
|
167
|
+
private lazy var serverTip: UILabel = {
|
|
168
|
+
let label = UILabel()
|
|
169
|
+
label.text = "1:本地服务未开启(yarn start 启动本地服务)"
|
|
170
|
+
label.textColor = .black
|
|
171
|
+
label.font = UIFont.systemFont(ofSize: 16)
|
|
172
|
+
label.numberOfLines = 0
|
|
173
|
+
return label
|
|
174
|
+
}()
|
|
175
|
+
|
|
176
|
+
private lazy var wifiTip: UILabel = {
|
|
177
|
+
let label = UILabel()
|
|
178
|
+
label.text = "2:网络异常(检查手机WiFi连接是否正常,手机WiFi是否与电脑WiFi一致,手机WiFi是否设置了代理)"
|
|
179
|
+
label.textColor = .black
|
|
180
|
+
label.font = UIFont.systemFont(ofSize: 16)
|
|
181
|
+
label.numberOfLines = 0
|
|
182
|
+
return label
|
|
183
|
+
}()
|
|
184
|
+
|
|
185
|
+
private lazy var ipTip: UILabel = {
|
|
186
|
+
let label = UILabel()
|
|
187
|
+
label.text = ""
|
|
188
|
+
label.textColor = .black
|
|
189
|
+
label.font = UIFont.systemFont(ofSize: 16)
|
|
190
|
+
label.numberOfLines = 0
|
|
191
|
+
return label
|
|
192
|
+
}()
|
|
193
|
+
|
|
194
|
+
private lazy var scanBtn: UIButton = {
|
|
195
|
+
let button = UIButton(type: .custom)
|
|
196
|
+
button.setTitle(" 扫码绑定IP", for: .normal)
|
|
197
|
+
button.setImage(UIImage(named: "doraemon_scan"), for: .normal)
|
|
198
|
+
button.setTitleColor(.white, for: .normal)
|
|
199
|
+
button.backgroundColor = .orange
|
|
200
|
+
button.layer.cornerRadius = 22
|
|
201
|
+
return button
|
|
202
|
+
}()
|
|
203
|
+
|
|
204
|
+
private lazy var jsErr: UILabel = {
|
|
205
|
+
let label = UILabel()
|
|
206
|
+
label.text = "4:JS 执行报错(在终端检查是否有JS Error)"
|
|
207
|
+
label.textColor = .black
|
|
208
|
+
label.font = UIFont.systemFont(ofSize: 16)
|
|
209
|
+
label.numberOfLines = 0
|
|
210
|
+
return label
|
|
211
|
+
}()
|
|
212
|
+
|
|
213
|
+
private lazy var exitApp: UIButton = {
|
|
214
|
+
let button = UIButton(type: .custom)
|
|
215
|
+
button.setTitle("重启App", for: .normal)
|
|
216
|
+
button.setTitleColor(.white, for: .normal)
|
|
217
|
+
button.backgroundColor = .orange
|
|
218
|
+
button.layer.cornerRadius = 22
|
|
219
|
+
return button
|
|
220
|
+
}()
|
|
221
|
+
|
|
222
|
+
private lazy var resetBundle: UIButton = {
|
|
223
|
+
let button = UIButton(type: .custom)
|
|
224
|
+
button.setTitle("关闭调试", for: .normal)
|
|
225
|
+
button.setTitleColor(.white, for: .normal)
|
|
226
|
+
button.backgroundColor = .orange
|
|
227
|
+
button.layer.cornerRadius = 22
|
|
228
|
+
return button
|
|
229
|
+
}()
|
|
230
|
+
|
|
231
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
//
|
|
2
|
+
// XTScanQRPlugin.swift
|
|
3
|
+
// XRNTemplate
|
|
4
|
+
//
|
|
5
|
+
// Created by xtgq on 2024/10/8.
|
|
6
|
+
// Copyright © 2024 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
#if DEBUG
|
|
12
|
+
import swiftScan
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
@objcMembers
|
|
16
|
+
public class XTScanQRPlugin: NSObject {
|
|
17
|
+
|
|
18
|
+
public static let shared = XTScanQRPlugin()
|
|
19
|
+
|
|
20
|
+
#if DEBUG
|
|
21
|
+
@objc func startScan() {
|
|
22
|
+
var style = LBXScanViewStyle()
|
|
23
|
+
style.centerUpOffset = 44
|
|
24
|
+
style.photoframeAngleStyle = LBXScanViewPhotoframeAngleStyle.Inner
|
|
25
|
+
style.photoframeLineW = 2
|
|
26
|
+
style.photoframeAngleW = 18
|
|
27
|
+
style.photoframeAngleH = 18
|
|
28
|
+
style.isNeedShowRetangle = false
|
|
29
|
+
style.anmiationStyle = LBXScanViewAnimationStyle.LineMove
|
|
30
|
+
style.colorAngle = UIColor(red: 0.0/255, green: 200.0/255.0, blue: 20.0/255.0, alpha: 1.0)
|
|
31
|
+
style.animationImage = UIImage(named: "CodeScan.bundle/qrcode_Scan_weixin_Line")
|
|
32
|
+
|
|
33
|
+
let vc = LBXScanViewController()
|
|
34
|
+
vc.scanStyle = style
|
|
35
|
+
vc.scanResultDelegate = self
|
|
36
|
+
if let presentedVC = RCTPresentedViewController() {
|
|
37
|
+
presentedVC.present(vc, animated: true, completion: nil)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#if DEBUG
|
|
45
|
+
extension XTScanQRPlugin: LBXScanViewControllerDelegate {
|
|
46
|
+
public func scanFinished(scanResult: swiftScan.LBXScanResult, error: String?) {
|
|
47
|
+
guard let scanContent = scanResult.strScanned else {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if let scanContent = jsonStringToDictionary(scanContent), scanContent["action"] as? String == "action_set_bundle_host" {
|
|
52
|
+
guard let urlString = scanContent["content"] as? String else {
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
if let ipAddress = parseIP(from: urlString), let port = parsePort(from: urlString) {
|
|
56
|
+
UserDefaults.standard.setValue(ipAddress, forKey: "RCT_jsLocation")
|
|
57
|
+
UserDefaults.standard.synchronize()
|
|
58
|
+
|
|
59
|
+
let bundles = XTJSBundleTool.shared().getAllBundleInfo()
|
|
60
|
+
var bundleName = ""
|
|
61
|
+
for bundle in bundles {
|
|
62
|
+
if let bundleDict = bundle as? [String: Any] {
|
|
63
|
+
if let portNum = bundleDict["port"] as? String {
|
|
64
|
+
if portNum == port {
|
|
65
|
+
bundleName = bundleDict["bundleName"] as? String ?? ""
|
|
66
|
+
break
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if !bundleName.isEmpty {
|
|
72
|
+
UserDefaults.standard.set("1", forKey: "\(bundleName)-debug")
|
|
73
|
+
UserDefaults.standard.synchronize()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
XRNToastView.shared().showToast("ip地址绑定成功,重启APP生效!", duration: 3)
|
|
77
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
|
|
78
|
+
exit(0)
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
XRNToastView.shared().showToast("ip地址解析失败!", duration: 3)
|
|
82
|
+
if let presentedVC = RCTPresentedViewController() {
|
|
83
|
+
presentedVC.dismiss(animated: true, completion: nil)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
XRNToastView.shared().showToast("ip地址解析失败!", duration: 3)
|
|
88
|
+
if let presentedVC = RCTPresentedViewController() {
|
|
89
|
+
presentedVC.dismiss(animated: true, completion: nil)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
#endif
|
|
95
|
+
|
|
96
|
+
func parseIP(from urlString: String) -> String? {
|
|
97
|
+
if let url = URL(string: urlString) {
|
|
98
|
+
return url.host
|
|
99
|
+
}
|
|
100
|
+
return nil
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
func parsePort(from urlString: String) -> String? {
|
|
104
|
+
if let url = URL(string: urlString), let port = url.port {
|
|
105
|
+
return String(port)
|
|
106
|
+
}
|
|
107
|
+
return nil
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
func jsonStringToDictionary(_ jsonString: String) -> [String: Any]? {
|
|
111
|
+
guard let jsonData = jsonString.data(using: .utf8) else {
|
|
112
|
+
print("Error converting string to Data")
|
|
113
|
+
return nil
|
|
114
|
+
}
|
|
115
|
+
do {
|
|
116
|
+
let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any]
|
|
117
|
+
return jsonDictionary
|
|
118
|
+
} catch {
|
|
119
|
+
print("Error converting string to dictionary: \(error.localizedDescription)")
|
|
120
|
+
return nil
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//
|
|
2
|
+
// XTSuspendBall.h
|
|
3
|
+
// XRNTemplate
|
|
4
|
+
//
|
|
5
|
+
// Created by xtgq on 2024/4/23.
|
|
6
|
+
// Copyright © 2024 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <UIKit/UIKit.h>
|
|
10
|
+
|
|
11
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
12
|
+
|
|
13
|
+
@protocol SuspendViewDelegate <NSObject>
|
|
14
|
+
|
|
15
|
+
- (void)suspendViewButtonClick:(UIButton *)sender;
|
|
16
|
+
@end
|
|
17
|
+
|
|
18
|
+
@interface XTSuspendBall : UIView {
|
|
19
|
+
CGPoint lastPoint;
|
|
20
|
+
BOOL isChangePosition;
|
|
21
|
+
CGFloat changeHig;
|
|
22
|
+
CGFloat changeWid;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@property (nonatomic, retain) UIButton *btn;
|
|
26
|
+
@property (nonatomic, strong) NSTimer *_Nullable timer;
|
|
27
|
+
@property (nonatomic, assign) UIInterfaceOrientation orientation;
|
|
28
|
+
@property (nonatomic, weak) id<SuspendViewDelegate> delegate;
|
|
29
|
+
|
|
30
|
+
- (void)showSuspendView;
|
|
31
|
+
- (void)dismissSuspendView;
|
|
32
|
+
@end
|
|
33
|
+
|
|
34
|
+
NS_ASSUME_NONNULL_END
|