diff --git a/.changeset/metal-symbols-pull.md b/.changeset/metal-symbols-pull.md new file mode 100644 index 00000000..7025e695 --- /dev/null +++ b/.changeset/metal-symbols-pull.md @@ -0,0 +1,5 @@ +--- +"@capacitor/background-runner": major +--- + +Support for Capacitor 8. The Android Min SDK is now 24 and iOS deployment target is 15. diff --git a/apps/example-app-spm/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/apps/example-app-spm/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index c57eae2a..4c20ad1e 100644 --- a/apps/example-app-spm/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/apps/example-app-spm/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,8 +6,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/ionic-team/capacitor-swift-pm.git", "state" : { - "revision" : "145cf37b8e3b240efef3d2d8a7262e621f08bb6f", - "version" : "7.4.4" + "revision" : "596259033e94829dffc552a40e7129262122995e", + "version" : "8.0.0" } } ], diff --git a/apps/example-app-spm/ios/App/CapApp-SPM/Package.swift b/apps/example-app-spm/ios/App/CapApp-SPM/Package.swift index 95506a5e..fe6a1a9e 100644 --- a/apps/example-app-spm/ios/App/CapApp-SPM/Package.swift +++ b/apps/example-app-spm/ios/App/CapApp-SPM/Package.swift @@ -11,12 +11,12 @@ let package = Package( targets: ["CapApp-SPM"]) ], dependencies: [ - .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", exact: "7.4.4"), - .package(name: "CapacitorApp", path: "../../../../../node_modules/.pnpm/@capacitor+app@7.1.0_@capacitor+core@7.4.4/node_modules/@capacitor/app"), + .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", exact: "8.0.0"), + .package(name: "CapacitorApp", path: "../../../../../node_modules/.pnpm/@capacitor+app@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/app"), .package(name: "CapacitorBackgroundRunner", path: "../../../../../packages/capacitor-plugin"), - .package(name: "CapacitorHaptics", path: "../../../../../node_modules/.pnpm/@capacitor+haptics@7.0.2_@capacitor+core@7.4.4/node_modules/@capacitor/haptics"), - .package(name: "CapacitorKeyboard", path: "../../../../../node_modules/.pnpm/@capacitor+keyboard@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/keyboard"), - .package(name: "CapacitorStatusBar", path: "../../../../../node_modules/.pnpm/@capacitor+status-bar@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/status-bar") + .package(name: "CapacitorHaptics", path: "../../../../../node_modules/.pnpm/@capacitor+haptics@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/haptics"), + .package(name: "CapacitorKeyboard", path: "../../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/keyboard"), + .package(name: "CapacitorStatusBar", path: "../../../../../node_modules/.pnpm/@capacitor+status-bar@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/status-bar") ], targets: [ .target( diff --git a/apps/example-app-spm/package.json b/apps/example-app-spm/package.json index 12318e30..c4994499 100644 --- a/apps/example-app-spm/package.json +++ b/apps/example-app-spm/package.json @@ -5,13 +5,13 @@ "dependencies": { "@babel/plugin-syntax-flow": "^7.27.1", "@babel/plugin-transform-react-jsx": "^7.27.1", - "@capacitor/app": "^7.1.0", + "@capacitor/app": "^8.0.0", "@capacitor/background-runner": "workspace:^", - "@capacitor/core": "^7.4.4", - "@capacitor/haptics": "^7.0.2", - "@capacitor/ios": "^7.4.4", - "@capacitor/keyboard": "^7.0.3", - "@capacitor/status-bar": "^7.0.3", + "@capacitor/core": "^8.0.0", + "@capacitor/haptics": "^8.0.0", + "@capacitor/ios": "^8.0.0", + "@capacitor/keyboard": "^8.0.0", + "@capacitor/status-bar": "^8.0.0", "@ionic/react": "^8.7.10", "@ionic/react-router": "^8.7.10", "@testing-library/dom": "^10.4.1", @@ -70,7 +70,7 @@ ] }, "devDependencies": { - "@capacitor/cli": "^7.4.4" + "@capacitor/cli": "^8.0.0" }, "description": "An Ionic project" } diff --git a/apps/example-app/android/app/build.gradle b/apps/example-app/android/app/build.gradle index e0c850ca..daafcf9a 100644 --- a/apps/example-app/android/app/build.gradle +++ b/apps/example-app/android/app/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.application' android { - namespace "io.ionic.starter" - compileSdkVersion rootProject.ext.compileSdkVersion + namespace = "io.ionic.starter" + compileSdkVersion = rootProject.ext.compileSdkVersion defaultConfig { applicationId "io.ionic.starter" minSdkVersion rootProject.ext.minSdkVersion @@ -13,7 +13,7 @@ android { aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 - ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' + ignoreAssetsPattern = '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' } } buildTypes { diff --git a/apps/example-app/android/build.gradle b/apps/example-app/android/build.gradle index f1b3b0e5..f8f0e43b 100644 --- a/apps/example-app/android/build.gradle +++ b/apps/example-app/android/build.gradle @@ -7,8 +7,8 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.7.2' - classpath 'com.google.gms:google-services:4.4.2' + classpath 'com.android.tools.build:gradle:8.13.0' + classpath 'com.google.gms:google-services:4.4.4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/apps/example-app/android/capacitor.settings.gradle b/apps/example-app/android/capacitor.settings.gradle index 86220a6c..a0afa788 100644 --- a/apps/example-app/android/capacitor.settings.gradle +++ b/apps/example-app/android/capacitor.settings.gradle @@ -1,18 +1,18 @@ // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN include ':capacitor-android' -project(':capacitor-android').projectDir = new File('../../../node_modules/.pnpm/@capacitor+android@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/android/capacitor') +project(':capacitor-android').projectDir = new File('../../../node_modules/.pnpm/@capacitor+android@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/android/capacitor') include ':capacitor-app' -project(':capacitor-app').projectDir = new File('../../../node_modules/.pnpm/@capacitor+app@7.1.0_@capacitor+core@7.4.4/node_modules/@capacitor/app/android') +project(':capacitor-app').projectDir = new File('../../../node_modules/.pnpm/@capacitor+app@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/app/android') include ':capacitor-background-runner' project(':capacitor-background-runner').projectDir = new File('../../../packages/capacitor-plugin/android') include ':capacitor-haptics' -project(':capacitor-haptics').projectDir = new File('../../../node_modules/.pnpm/@capacitor+haptics@7.0.2_@capacitor+core@7.4.4/node_modules/@capacitor/haptics/android') +project(':capacitor-haptics').projectDir = new File('../../../node_modules/.pnpm/@capacitor+haptics@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/haptics/android') include ':capacitor-keyboard' -project(':capacitor-keyboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+keyboard@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/keyboard/android') +project(':capacitor-keyboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+keyboard@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/keyboard/android') include ':capacitor-status-bar' -project(':capacitor-status-bar').projectDir = new File('../../../node_modules/.pnpm/@capacitor+status-bar@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/status-bar/android') +project(':capacitor-status-bar').projectDir = new File('../../../node_modules/.pnpm/@capacitor+status-bar@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/status-bar/android') diff --git a/apps/example-app/android/gradle/wrapper/gradle-wrapper.properties b/apps/example-app/android/gradle/wrapper/gradle-wrapper.properties index c1d5e018..7705927e 100644 --- a/apps/example-app/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/example-app/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/apps/example-app/android/variables.gradle b/apps/example-app/android/variables.gradle index 2c8e4083..ee4ba41c 100644 --- a/apps/example-app/android/variables.gradle +++ b/apps/example-app/android/variables.gradle @@ -1,16 +1,16 @@ ext { - minSdkVersion = 23 - compileSdkVersion = 35 - targetSdkVersion = 35 - androidxActivityVersion = '1.9.2' - androidxAppCompatVersion = '1.7.0' - androidxCoordinatorLayoutVersion = '1.2.0' - androidxCoreVersion = '1.15.0' - androidxFragmentVersion = '1.8.4' - coreSplashScreenVersion = '1.0.1' - androidxWebkitVersion = '1.12.1' + minSdkVersion = 24 + compileSdkVersion = 36 + targetSdkVersion = 36 + androidxActivityVersion = '1.11.0' + androidxAppCompatVersion = '1.7.1' + androidxCoordinatorLayoutVersion = '1.3.0' + androidxCoreVersion = '1.17.0' + androidxFragmentVersion = '1.8.9' + coreSplashScreenVersion = '1.2.0' + androidxWebkitVersion = '1.14.0' junitVersion = '4.13.2' - androidxJunitVersion = '1.2.1' - androidxEspressoCoreVersion = '3.6.1' - cordovaAndroidVersion = '10.1.1' + androidxJunitVersion = '1.3.0' + androidxEspressoCoreVersion = '3.7.0' + cordovaAndroidVersion = '14.0.1' } \ No newline at end of file diff --git a/apps/example-app/ios/App/App.xcodeproj/project.pbxproj b/apps/example-app/ios/App/App.xcodeproj/project.pbxproj index 4d996c01..47f7d87d 100644 --- a/apps/example-app/ios/App/App.xcodeproj/project.pbxproj +++ b/apps/example-app/ios/App/App.xcodeproj/project.pbxproj @@ -466,7 +466,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -517,7 +517,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; diff --git a/apps/example-app/ios/App/Podfile b/apps/example-app/ios/App/Podfile index b0c02505..7da4b89e 100644 --- a/apps/example-app/ios/App/Podfile +++ b/apps/example-app/ios/App/Podfile @@ -1,6 +1,6 @@ -require_relative '../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios/scripts/pods_helpers' +require_relative '../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios/scripts/pods_helpers' -platform :ios, '14.0' +platform :ios, '15.0' use_frameworks! # workaround to avoid Xcode caching of Pods that requires @@ -9,13 +9,13 @@ use_frameworks! install! 'cocoapods', :disable_input_output_paths => true def capacitor_pods - pod 'Capacitor', :path => '../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios' - pod 'CapacitorCordova', :path => '../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios' - pod 'CapacitorApp', :path => '../../../../node_modules/.pnpm/@capacitor+app@7.1.0_@capacitor+core@7.4.4/node_modules/@capacitor/app' + pod 'Capacitor', :path => '../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios' + pod 'CapacitorCordova', :path => '../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios' + pod 'CapacitorApp', :path => '../../../../node_modules/.pnpm/@capacitor+app@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/app' pod 'CapacitorBackgroundRunner', :path => '../../../../packages/capacitor-plugin' - pod 'CapacitorHaptics', :path => '../../../../node_modules/.pnpm/@capacitor+haptics@7.0.2_@capacitor+core@7.4.4/node_modules/@capacitor/haptics' - pod 'CapacitorKeyboard', :path => '../../../../node_modules/.pnpm/@capacitor+keyboard@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/keyboard' - pod 'CapacitorStatusBar', :path => '../../../../node_modules/.pnpm/@capacitor+status-bar@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/status-bar' + pod 'CapacitorHaptics', :path => '../../../../node_modules/.pnpm/@capacitor+haptics@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/haptics' + pod 'CapacitorKeyboard', :path => '../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/keyboard' + pod 'CapacitorStatusBar', :path => '../../../../node_modules/.pnpm/@capacitor+status-bar@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/status-bar' end target 'App' do diff --git a/apps/example-app/ios/App/Podfile.lock b/apps/example-app/ios/App/Podfile.lock index ec3740ba..d04cb1bf 100644 --- a/apps/example-app/ios/App/Podfile.lock +++ b/apps/example-app/ios/App/Podfile.lock @@ -1,52 +1,52 @@ PODS: - - Capacitor (7.4.4): + - Capacitor (8.0.0): - CapacitorCordova - - CapacitorApp (7.1.0): + - CapacitorApp (8.0.0): - Capacitor - - CapacitorBackgroundRunner (2.2.0): + - CapacitorBackgroundRunner (2.3.0): - Capacitor - - CapacitorCordova (7.4.4) - - CapacitorHaptics (7.0.2): + - CapacitorCordova (8.0.0) + - CapacitorHaptics (8.0.0): - Capacitor - - CapacitorKeyboard (7.0.3): + - CapacitorKeyboard (8.0.0): - Capacitor - - CapacitorStatusBar (7.0.3): + - CapacitorStatusBar (8.0.0): - Capacitor DEPENDENCIES: - - "Capacitor (from `../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios`)" - - "CapacitorApp (from `../../../../node_modules/.pnpm/@capacitor+app@7.1.0_@capacitor+core@7.4.4/node_modules/@capacitor/app`)" + - "Capacitor (from `../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios`)" + - "CapacitorApp (from `../../../../node_modules/.pnpm/@capacitor+app@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/app`)" - CapacitorBackgroundRunner (from `../../../../packages/capacitor-plugin`) - - "CapacitorCordova (from `../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios`)" - - "CapacitorHaptics (from `../../../../node_modules/.pnpm/@capacitor+haptics@7.0.2_@capacitor+core@7.4.4/node_modules/@capacitor/haptics`)" - - "CapacitorKeyboard (from `../../../../node_modules/.pnpm/@capacitor+keyboard@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/keyboard`)" - - "CapacitorStatusBar (from `../../../../node_modules/.pnpm/@capacitor+status-bar@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/status-bar`)" + - "CapacitorCordova (from `../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios`)" + - "CapacitorHaptics (from `../../../../node_modules/.pnpm/@capacitor+haptics@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/haptics`)" + - "CapacitorKeyboard (from `../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/keyboard`)" + - "CapacitorStatusBar (from `../../../../node_modules/.pnpm/@capacitor+status-bar@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/status-bar`)" EXTERNAL SOURCES: Capacitor: - :path: "../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios" + :path: "../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios" CapacitorApp: - :path: "../../../../node_modules/.pnpm/@capacitor+app@7.1.0_@capacitor+core@7.4.4/node_modules/@capacitor/app" + :path: "../../../../node_modules/.pnpm/@capacitor+app@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/app" CapacitorBackgroundRunner: :path: "../../../../packages/capacitor-plugin" CapacitorCordova: - :path: "../../../../node_modules/.pnpm/@capacitor+ios@7.4.4_@capacitor+core@7.4.4/node_modules/@capacitor/ios" + :path: "../../../../node_modules/.pnpm/@capacitor+ios@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/ios" CapacitorHaptics: - :path: "../../../../node_modules/.pnpm/@capacitor+haptics@7.0.2_@capacitor+core@7.4.4/node_modules/@capacitor/haptics" + :path: "../../../../node_modules/.pnpm/@capacitor+haptics@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/haptics" CapacitorKeyboard: - :path: "../../../../node_modules/.pnpm/@capacitor+keyboard@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/keyboard" + :path: "../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/keyboard" CapacitorStatusBar: - :path: "../../../../node_modules/.pnpm/@capacitor+status-bar@7.0.3_@capacitor+core@7.4.4/node_modules/@capacitor/status-bar" + :path: "../../../../node_modules/.pnpm/@capacitor+status-bar@8.0.0_@capacitor+core@8.0.0/node_modules/@capacitor/status-bar" SPEC CHECKSUMS: - Capacitor: 358dd1c3fdd71d969547b17e159fd8a7736cb45f - CapacitorApp: 26587c2ce485d88ddb39adb21cac64f8e481afe3 - CapacitorBackgroundRunner: de9f99ef9c6c9ed0373e879ea48acb93bd9eda15 - CapacitorCordova: bf648a636f3c153f652d312ae145fb508b6ffced - CapacitorHaptics: b3fb2869e72c4466e18ce9ccbeb60a3d8723b3d4 - CapacitorKeyboard: 62f36104f26d53d8b3a2a43f2a69fe714f1777d5 - CapacitorStatusBar: 0659ddc7b1713764a05831463d215b177a15d054 + Capacitor: 341ff7cf652ec695d1a8ebf604db448ac7b6d635 + CapacitorApp: 3963a84197280757b84f126afd1520a85ae3b092 + CapacitorBackgroundRunner: 8e1771a2b12b853d223d43c95b967953205ecc5b + CapacitorCordova: 5dc3912d25ef770a3fe0f431bb65c9fbfa2e92f9 + CapacitorHaptics: 2079d9fa04c5a71e18663b4722323c304c58245c + CapacitorKeyboard: d7868c079a4d5277a3deca27a10a488fcbbb8b69 + CapacitorStatusBar: 312e2e67928dfe9514c4a8916a1fd610552f5f35 -PODFILE CHECKSUM: 465e517c9e30d2bab8c1788597dcef6141ee6edf +PODFILE CHECKSUM: 246ffb621db05dcf99fdd53d13bed5d5d8737703 COCOAPODS: 1.16.2 diff --git a/apps/example-app/package.json b/apps/example-app/package.json index 1c37f2e7..1afa483d 100644 --- a/apps/example-app/package.json +++ b/apps/example-app/package.json @@ -5,14 +5,14 @@ "dependencies": { "@babel/plugin-syntax-flow": "^7.27.1", "@babel/plugin-transform-react-jsx": "^7.27.1", - "@capacitor/android": "^7.4.4", - "@capacitor/app": "^7.1.0", + "@capacitor/android": "^8.0.0", + "@capacitor/app": "^8.0.0", "@capacitor/background-runner": "workspace:^", - "@capacitor/core": "^7.4.4", - "@capacitor/haptics": "^7.0.2", - "@capacitor/ios": "^7.4.4", - "@capacitor/keyboard": "^7.0.3", - "@capacitor/status-bar": "^7.0.3", + "@capacitor/core": "^8.0.0", + "@capacitor/haptics": "^8.0.0", + "@capacitor/ios": "^8.0.0", + "@capacitor/keyboard": "^8.0.0", + "@capacitor/status-bar": "^8.0.0", "@ionic/react": "^8.7.10", "@ionic/react-router": "^8.7.10", "@testing-library/dom": "^10.4.1", @@ -71,7 +71,7 @@ ] }, "devDependencies": { - "@capacitor/cli": "^7.4.4" + "@capacitor/cli": "^8.0.0" }, "description": "An Ionic project" } diff --git a/packages/android-js-engine/AndroidJSEngine/build.gradle b/packages/android-js-engine/AndroidJSEngine/build.gradle index ffcaabc2..2246ddb4 100644 --- a/packages/android-js-engine/AndroidJSEngine/build.gradle +++ b/packages/android-js-engine/AndroidJSEngine/build.gradle @@ -2,22 +2,22 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget ext { junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2' - androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1' - androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5' - androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1' - androidxCoreKTXVersion = project.hasProperty('androidxCoreKTXVersion') ? rootProject.ext.androidxCoreKTXVersion : '1.12.0' - androidxMaterialVersion = project.hasProperty('androidxMaterialVersion') ? rootProject.ext.androidxMaterialVersion : '1.10.0' + androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.1' + androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.3.0' + androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.7.0' + androidxCoreKTXVersion = project.hasProperty('androidxCoreKTXVersion') ? rootProject.ext.androidxCoreKTXVersion : '1.17.0' + androidxMaterialVersion = project.hasProperty('androidxMaterialVersion') ? rootProject.ext.androidxMaterialVersion : '1.13.0' } buildscript { - ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.9.10' + ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '2.2.20' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.2.1' + classpath 'com.android.tools.build:gradle:8.13.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -26,13 +26,13 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - namespace 'com.capacitorjs.android_js_engine' - compileSdk 34 - ndkVersion "28.2.13676358" + namespace = 'com.capacitorjs.android_js_engine' + compileSdk = 36 + ndkVersion = "28.2.13676358" defaultConfig { - minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22 - targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34 + minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 24 + targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 36 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" @@ -43,7 +43,7 @@ android { } ndk { - debugSymbolLevel 'FULL' + debugSymbolLevel = 'FULL' } } @@ -56,18 +56,18 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "3.22.1" + version = "3.22.1" } } compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 } } kotlin { compilerOptions { - jvmTarget = JvmTarget.JVM_17 + jvmTarget = JvmTarget.JVM_21 } } diff --git a/packages/android-js-engine/app/build.gradle b/packages/android-js-engine/app/build.gradle index f7838f53..c81cdbbe 100644 --- a/packages/android-js-engine/app/build.gradle +++ b/packages/android-js-engine/app/build.gradle @@ -6,13 +6,13 @@ plugins { } android { - namespace 'io.ionic.android_js_engine_testproject' - compileSdk 34 + namespace = 'io.ionic.android_js_engine_testproject' + compileSdk = 36 defaultConfig { applicationId "io.ionic.android_js_engine_testproject" minSdk 24 - targetSdk 34 + targetSdk 36 versionCode 1 versionName "1.0" @@ -39,10 +39,10 @@ kotlin { dependencies { implementation project(path: ':AndroidJSEngine') - implementation 'androidx.core:core-ktx:1.12.0' - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.11.0' + implementation 'androidx.core:core-ktx:1.17.0' + implementation 'androidx.appcompat:appcompat:1.7.1' + implementation 'com.google.android.material:material:1.13.0' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + androidTestImplementation 'androidx.test.ext:junit:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' } \ No newline at end of file diff --git a/packages/android-js-engine/build.gradle b/packages/android-js-engine/build.gradle index 1ccaefec..b5d83626 100644 --- a/packages/android-js-engine/build.gradle +++ b/packages/android-js-engine/build.gradle @@ -1,6 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.2.1' apply false - id 'com.android.library' version '8.2.1' apply false - id 'org.jetbrains.kotlin.android' version '1.9.10' apply false + id 'com.android.application' version '8.13.0' apply false + id 'com.android.library' version '8.13.0' apply false + id 'org.jetbrains.kotlin.android' version '2.2.20' apply false } \ No newline at end of file diff --git a/packages/android-js-engine/gradle/wrapper/gradle-wrapper.properties b/packages/android-js-engine/gradle/wrapper/gradle-wrapper.properties index 4a3c37c3..2906fadc 100644 --- a/packages/android-js-engine/gradle/wrapper/gradle-wrapper.properties +++ b/packages/android-js-engine/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Jan 05 16:19:19 CST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/capacitor-plugin/CapacitorBackgroundRunner.podspec b/packages/capacitor-plugin/CapacitorBackgroundRunner.podspec index c6579f5d..525ecaf5 100644 --- a/packages/capacitor-plugin/CapacitorBackgroundRunner.podspec +++ b/packages/capacitor-plugin/CapacitorBackgroundRunner.podspec @@ -11,7 +11,7 @@ Pod::Spec.new do |s| s.author = package['author'] s.source = { :git => package['repository']['url'], :tag => s.version.to_s } s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}' - s.ios.deployment_target = '14.0' + s.ios.deployment_target = '15.0' s.dependency 'Capacitor' s.swift_version = '5.1' end diff --git a/packages/capacitor-plugin/Package.swift b/packages/capacitor-plugin/Package.swift index 00b4038d..b1dd1dd3 100644 --- a/packages/capacitor-plugin/Package.swift +++ b/packages/capacitor-plugin/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "CapacitorBackgroundRunner", - platforms: [.iOS(.v14), .macOS(.v13)], + platforms: [.iOS(.v15), .macOS(.v13)], products: [ // Products define the executables and libraries a package produces, making them visible to other packages. .library( @@ -14,7 +14,7 @@ let package = Package( ) ], dependencies: [ - .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "7.0.0") + .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "8.0.0") ], targets: [ // Targets are the basic building blocks of a package, defining a module or a test suite. diff --git a/packages/capacitor-plugin/android/build.gradle b/packages/capacitor-plugin/android/build.gradle index 59113262..00ca7d84 100644 --- a/packages/capacitor-plugin/android/build.gradle +++ b/packages/capacitor-plugin/android/build.gradle @@ -1,21 +1,21 @@ ext { junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2' - androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.0' - androidxCoreKTXVersion = project.hasProperty('androidxCoreKTXVersion') ? rootProject.ext.androidxCoreKTXVersion : '1.12.0' - androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.2.1' - androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.6.1' - workManagerVersion = project.hasProperty('workManagerVersion') ? rootProject.ext.workManagerVersion : '2.8.1' + androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.1' + androidxCoreKTXVersion = project.hasProperty('androidxCoreKTXVersion') ? rootProject.ext.androidxCoreKTXVersion : '1.17.0' + androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.3.0' + androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.7.0' + workManagerVersion = project.hasProperty('workManagerVersion') ? rootProject.ext.workManagerVersion : '2.11.0' } buildscript { - ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.9.25' + ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '2.2.20' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.7.2' + classpath 'com.android.tools.build:gradle:8.13.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } @@ -25,11 +25,11 @@ apply plugin: 'com.android.library' apply plugin: 'org.jetbrains.kotlin.android' android { - namespace "com.capacitorjs.plugins.backgroundrunner" - compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 35 + namespace = "com.capacitorjs.plugins.backgroundrunner" + compileSdk = project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 36 defaultConfig { - minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23 - targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 35 + minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 24 + targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 36 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -41,7 +41,7 @@ android { } } lintOptions { - abortOnError false + abortOnError = false } compileOptions { sourceCompatibility JavaVersion.VERSION_21 diff --git a/packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.properties b/packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.properties index c1d5e018..7705927e 100644 --- a/packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Device.kt b/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Device.kt index c2af464f..785e9b2b 100644 --- a/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Device.kt +++ b/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Device.kt @@ -80,7 +80,7 @@ class Device (context: android.content.Context) : DeviceAPI { return false } - @SuppressWarnings("deprecation") + @Suppress("DEPRECATION") private fun getAndParseNetworkInfo(): NetworkStatus { val networkStatus = NetworkStatus() val networkInfo = connectivityManager.activeNetworkInfo diff --git a/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Notifications.kt b/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Notifications.kt index e8b9efa9..9eb28f33 100644 --- a/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Notifications.kt +++ b/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/Notifications.kt @@ -211,17 +211,9 @@ class Notifications(context: Context) : NotificationsAPI { PendingIntent.getBroadcast(context, request.id, intent, flags) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !alarmManager.canScheduleExactAlarms()) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, request.scheduleAt.time, pendingIntent); - } else { - alarmManager.set(AlarmManager.RTC, request.scheduleAt.time, pendingIntent); - } + alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, request.scheduleAt.time, pendingIntent) } else { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, request.scheduleAt.time, pendingIntent); - } else { - alarmManager.setExact(AlarmManager.RTC, request.scheduleAt.time, pendingIntent); - } + alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, request.scheduleAt.time, pendingIntent) } } } \ No newline at end of file diff --git a/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/TimedNotificationPublisher.kt b/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/TimedNotificationPublisher.kt index fdf8dc72..7fc1ae3e 100644 --- a/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/TimedNotificationPublisher.kt +++ b/packages/capacitor-plugin/android/src/main/java/io/ionic/backgroundrunner/plugin/api/TimedNotificationPublisher.kt @@ -34,6 +34,7 @@ class TimedNotificationPublisher : BroadcastReceiver() { notificationManager.notify(id, notification) } + @Suppress("DEPRECATION") private fun getParcelableExtraLegacy(intent: Intent): android.app.Notification? { return intent.getParcelableExtra(NOTIFICATION_KEY) } diff --git a/packages/capacitor-plugin/android/src/main/libs/android-js-engine-release.aar b/packages/capacitor-plugin/android/src/main/libs/android-js-engine-release.aar index 107fc387..0d48d324 100644 Binary files a/packages/capacitor-plugin/android/src/main/libs/android-js-engine-release.aar and b/packages/capacitor-plugin/android/src/main/libs/android-js-engine-release.aar differ diff --git a/packages/capacitor-plugin/ios/Sources/CapacitorBackgroundRunner/CapacitorBackgroundRunner.swift b/packages/capacitor-plugin/ios/Sources/CapacitorBackgroundRunner/CapacitorBackgroundRunner.swift index 6db3c753..2648a45c 100644 --- a/packages/capacitor-plugin/ios/Sources/CapacitorBackgroundRunner/CapacitorBackgroundRunner.swift +++ b/packages/capacitor-plugin/ios/Sources/CapacitorBackgroundRunner/CapacitorBackgroundRunner.swift @@ -1,281 +1,308 @@ -import Foundation import Capacitor -import WatchConnectivity +import Foundation import UserNotifications +import WatchConnectivity @objc(BackgroundRunnerPlugin) public class BackgroundRunnerPlugin: CAPPlugin, CAPBridgedPlugin { - public let identifier = "CapacitorBackgroundRunnerPlugin" - public let jsName = "CapacitorBackgroundRunner" - public let pluginMethods: [CAPPluginMethod] = [ - CAPPluginMethod(name: "checkPermissions", returnType: CAPPluginReturnPromise), - CAPPluginMethod(name: "requestPermissions", returnType: CAPPluginReturnPromise), - CAPPluginMethod(name: "dispatchEvent", returnType: CAPPluginReturnPromise), - CAPPluginMethod(name: "registerBackgroundTask", returnType: CAPPluginReturnPromise), - CAPPluginMethod(name: "removeNotificationListeners", returnType: CAPPluginReturnPromise) - ] - private let impl = BackgroundRunner() - private weak var originalDelegate: UNUserNotificationCenterDelegate? - - override public func load() { - NotificationCenter.default.addObserver( - self, - selector: #selector(didEnterBackground), - name: UIApplication.didEnterBackgroundNotification, - object: nil - ) + public let identifier = "CapacitorBackgroundRunnerPlugin" + public let jsName = "CapacitorBackgroundRunner" + public let pluginMethods: [CAPPluginMethod] = [ + CAPPluginMethod(name: "checkPermissions", returnType: CAPPluginReturnPromise), + CAPPluginMethod(name: "requestPermissions", returnType: CAPPluginReturnPromise), + CAPPluginMethod(name: "dispatchEvent", returnType: CAPPluginReturnPromise), + CAPPluginMethod(name: "registerBackgroundTask", returnType: CAPPluginReturnPromise), + CAPPluginMethod(name: "removeNotificationListeners", returnType: CAPPluginReturnPromise), + ] + private let impl = BackgroundRunner() + private weak var originalDelegate: UNUserNotificationCenterDelegate? + + override public func load() { + NotificationCenter.default.addObserver( + self, + selector: #selector(didEnterBackground), + name: UIApplication.didEnterBackgroundNotification, + object: nil + ) + + // Register as notification delegate + registerNotificationCategories() + + initWatchConnectivity() + } + + @objc override public func checkPermissions(_ call: CAPPluginCall) { + // check geolocation permissions + let geolocationState = CapacitorGeolocation.checkPermission() + + // check notification permissions + let notificationState = CapacitorNotifications.checkPermission() + + call.resolve([ + "geolocation": geolocationState, + "notifications": notificationState, + ]) + } + + @objc override public func requestPermissions(_ call: CAPPluginCall) { + Task { + let permissions = call.getArray("apis") as? [String] ?? [] + + do { + if permissions.contains("notifications") { + try CapacitorNotifications.requestPermission() + } - // Register as notification delegate - registerNotificationCategories() + if permissions.contains("geolocation") { + let geolocation = CapacitorGeolocation() + print("geolocation requested...") + try await geolocation.requestPermission() + print("geolocation requested...done") + } - initWatchConnectivity() + self.checkPermissions(call) + } catch { + call.reject("\(error)") + } } + } - @objc override public func checkPermissions(_ call: CAPPluginCall) { - // check geolocation permissions - let geolocationState = CapacitorGeolocation.checkPermission() + @objc func dispatchEvent(_ call: CAPPluginCall) { + do { + guard let runnerEvent = call.getString("event"), !runnerEvent.isEmpty else { + throw BackgroundRunnerPluginError.invalidArgument(reason: "event is missing or invalid") + } - // check notification permissions - let notificationState = CapacitorNotifications.checkPermission() + let details = call.getObject("details", JSObject()) - call.resolve([ - "geolocation": geolocationState, - "notifications": notificationState - ]) - } + guard var config = impl.config else { + throw BackgroundRunnerPluginError.noRunnerConfig + } - @objc override public func requestPermissions(_ call: CAPPluginCall) { - Task { - let permissions = call.getArray("apis") as? [String] ?? [] - - do { - if permissions.contains("notifications") { - try CapacitorNotifications.requestPermission() - } - - if permissions.contains("geolocation") { - let geolocation = CapacitorGeolocation() - print("geolocation requested...") - try await geolocation.requestPermission() - print("geolocation requested...done") - } - - self.checkPermissions(call) - } catch { - call.reject("\(error)") - } - } - } + config.event = runnerEvent - @objc func dispatchEvent(_ call: CAPPluginCall) { + // swiftlint:disable:next unowned_variable_capture + DispatchQueue.global(qos: .userInitiated).async { [unowned self] in do { - guard let runnerEvent = call.getString("event"), !runnerEvent.isEmpty else { - throw BackgroundRunnerPluginError.invalidArgument(reason: "event is missing or invalid") - } - - let details = call.getObject("details", JSObject()) - - guard var config = impl.config else { - throw BackgroundRunnerPluginError.noRunnerConfig - } - - config.event = runnerEvent - - // swiftlint:disable:next unowned_variable_capture - DispatchQueue.global(qos: .userInitiated).async { [unowned self] in - do { - let result = try self.impl.execute( - config: config, - inputArgs: details as [String: Any], - callbackId: call.callbackId - ) - - if let result = result { - call.resolve(result) - return - } - - call.resolve() - } catch { - call.reject("\(error)") - } - } + let result = try self.impl.execute( + config: config, + inputArgs: details as [String: Any], + callbackId: call.callbackId + ) + + if let result = result { + call.resolve(result) + return + } + + call.resolve() } catch { - call.reject("\(error)") + call.reject("\(error)") } + } + } catch { + call.reject("\(error)") + } + } + + @objc func registerBackgroundTask(_ call: CAPPluginCall) { + call.resolve() + } + + @objc func removeNotificationListeners(_ call: CAPPluginCall) { + notifyListeners("backgroundRunnerNotificationReceived", data: nil) + call.resolve() + } + + @objc private func didEnterBackground() { + do { + try impl.scheduleBackgroundTasks() + } catch { + print("could not schedule background task: \(error)") } + } - @objc func registerBackgroundTask(_ call: CAPPluginCall) { - call.resolve() + public static func registerBackgroundTask() { + do { + try BackgroundRunner.shared.registerBackgroundTask() + } catch { + print("could not register background task: \(error)") + } + } + + public static func dispatchEvent( + event: String, eventArgs: [AnyHashable: Any], completionHandler: ((Result) -> Void) + ) { + if event.isEmpty { + completionHandler( + .failure(BackgroundRunnerPluginError.invalidArgument(reason: "event is missing or invalid")) + ) + return } - @objc func removeNotificationListeners(_ call: CAPPluginCall) { - notifyListeners("backgroundRunnerNotificationReceived", data: nil) - call.resolve() + var args: [String: Any] = [:] + + eventArgs.forEach { (key: AnyHashable, value: Any) in + if let strKey = key as? String { + args[strKey] = value + } } - @objc private func didEnterBackground() { - do { - try impl.scheduleBackgroundTasks() - } catch { - print("could not schedule background task: \(error)") - } + do { + try BackgroundRunner.shared.dispatchEvent(event: event, inputArgs: args) + completionHandler(.success(true)) + } catch { + completionHandler(.failure(error)) } + } - public static func registerBackgroundTask() { - do { - try BackgroundRunner.shared.registerBackgroundTask() - } catch { - print("could not register background task: \(error)") - } + public static func handleApplicationDidFinishLaunching( + launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) { + guard let launchOptions = launchOptions else { + return } - public static func dispatchEvent(event: String, eventArgs: [AnyHashable: Any], completionHandler: ((Result) -> Void)) { - if event.isEmpty { - completionHandler(.failure(BackgroundRunnerPluginError.invalidArgument(reason: "event is missing or invalid"))) - return - } + var events: [String: [String: Any]?] = [:] - var args: [String: Any] = [:] + if launchOptions[.location] != nil { + // application was launched for a location event + var details: [String: Any] = [:] + details["locations"] = nil - eventArgs.forEach { (key: AnyHashable, value: Any) in - if let strKey = key as? String { - args[strKey] = value - } - } + if let location = CapacitorGeolocation.getCurrentKnownLocation() { + var details: [String: Any] = [:] + details["locations"] = [location] + } - do { - try BackgroundRunner.shared.dispatchEvent(event: event, inputArgs: args) - completionHandler(.success(true)) - } catch { - completionHandler(.failure(error)) - } + events["currentLocation"] = details } - public static func handleApplicationDidFinishLaunching(launchOptions: [UIApplication.LaunchOptionsKey: Any]?) { - guard let launchOptions = launchOptions else { - return - } - - var events: [String: [String: Any]?] = [:] - - if launchOptions[.location] != nil { - // application was launched for a location event - var details: [String: Any] = [:] - details["locations"] = nil + print("emit events: \(events)") - if let location = CapacitorGeolocation.getCurrentKnownLocation() { - var details: [String: Any] = [:] - details["locations"] = [location] - } + } - events["currentLocation"] = details - } + private func initWatchConnectivity() { + if !WCSession.isSupported() { + return + } - print("emit events: \(events)") + guard let config = impl.config else { + return + } + if !config.enableWatchConnectivity { + return } - private func initWatchConnectivity() { - if !WCSession.isSupported() { - return - } + WCSession.default.delegate = self + WCSession.default.activate() - guard let config = impl.config else { - return - } - - if !config.enableWatchConnectivity { - return - } + print("Watch Connectivity Enabled") + } - WCSession.default.delegate = self - WCSession.default.activate() + @objc func registerNotificationCategories() { + let notificationCenter = UNUserNotificationCenter.current() - print("Watch Connectivity Enabled") + // Capture the original delegate if it's not self + if notificationCenter.delegate !== self { + originalDelegate = notificationCenter.delegate } - @objc func registerNotificationCategories() { - let notificationCenter = UNUserNotificationCenter.current() - - // Capture the original delegate if it's not self - if notificationCenter.delegate !== self { - originalDelegate = notificationCenter.delegate - } - - // Set the plugin as the notification delegate - notificationCenter.delegate = self - } + // Set the plugin as the notification delegate + notificationCenter.delegate = self + } } // MARK: - UNUserNotificationCenterDelegate extension BackgroundRunnerPlugin: UNUserNotificationCenterDelegate { - // This method will be called when a notification is tapped - public func userNotificationCenter(_ center: UNUserNotificationCenter, - didReceive response: UNNotificationResponse, - withCompletionHandler completionHandler: @escaping () -> Void) { - let userInfo = response.notification.request.content.userInfo - - if isBackgroundRunnerNotification(userInfo) { - handleBackgroundRunnerNotification(response, completionHandler: completionHandler) - } else { - forwardToOriginalDelegate(center, didReceive: response, withCompletionHandler: completionHandler) - } + // This method will be called when a notification is tapped + public func userNotificationCenter( + _ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void + ) { + let userInfo = response.notification.request.content.userInfo + + if isBackgroundRunnerNotification(userInfo) { + handleBackgroundRunnerNotification(response, completionHandler: completionHandler) + } else { + forwardToOriginalDelegate( + center, didReceive: response, withCompletionHandler: completionHandler) } - - // This is needed to present notifications when the app is in the foreground - public func userNotificationCenter(_ center: UNUserNotificationCenter, - willPresent notification: UNNotification, - withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { - let userInfo = notification.request.content.userInfo - - if isBackgroundRunnerNotification(userInfo) { - handleBackgroundRunnerPresentation(completionHandler: completionHandler) - } else { - forwardToOriginalDelegate(center, willPresent: notification, withCompletionHandler: completionHandler) - } + } + + // This is needed to present notifications when the app is in the foreground + public func userNotificationCenter( + _ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void + ) { + let userInfo = notification.request.content.userInfo + + if isBackgroundRunnerNotification(userInfo) { + handleBackgroundRunnerPresentation(completionHandler: completionHandler) + } else { + forwardToOriginalDelegate( + center, willPresent: notification, withCompletionHandler: completionHandler) } + } - // MARK: - Helper Methods - - private func isBackgroundRunnerNotification(_ userInfo: [AnyHashable: Any]) -> Bool { - return (userInfo["source"] as? String) == "capacitor-background-runner" - } + // MARK: - Helper Methods - private func handleBackgroundRunnerNotification(_ response: UNNotificationResponse, completionHandler: @escaping () -> Void) { - let actionTypeId = response.notification.request.content.categoryIdentifier - let notificationId = Int(response.notification.request.identifier) ?? -1 + private func isBackgroundRunnerNotification(_ userInfo: [AnyHashable: Any]) -> Bool { + return (userInfo["source"] as? String) == "capacitor-background-runner" + } - let eventData: [String: Any] = [ - "actionTypeId": actionTypeId, - "notificationId": notificationId - ] + private func handleBackgroundRunnerNotification( + _ response: UNNotificationResponse, completionHandler: @escaping () -> Void + ) { + let actionTypeId = response.notification.request.content.categoryIdentifier + let notificationId = Int(response.notification.request.identifier) ?? -1 - notifyListeners("backgroundRunnerNotificationReceived", data: eventData, retainUntilConsumed: true) - completionHandler() - } + let eventData: [String: Any] = [ + "actionTypeId": actionTypeId, + "notificationId": notificationId, + ] - private func forwardToOriginalDelegate(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { - if let originalDelegate = originalDelegate, originalDelegate.responds(to: #selector(userNotificationCenter(_:didReceive:withCompletionHandler:))) { - originalDelegate.userNotificationCenter?(center, didReceive: response, withCompletionHandler: completionHandler) - } else { - completionHandler() - } + notifyListeners( + "backgroundRunnerNotificationReceived", data: eventData, retainUntilConsumed: true) + completionHandler() + } + + private func forwardToOriginalDelegate( + _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void + ) { + if let originalDelegate = originalDelegate, + originalDelegate.responds( + to: #selector(userNotificationCenter(_:didReceive:withCompletionHandler:))) + { + originalDelegate.userNotificationCenter?( + center, didReceive: response, withCompletionHandler: completionHandler) + } else { + completionHandler() } - - private func handleBackgroundRunnerPresentation(completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { - if #available(iOS 14.0, *) { - completionHandler([.banner, .sound, .badge]) - } else { - completionHandler([.alert, .sound, .badge]) - } - } - - private func forwardToOriginalDelegate(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { - if let originalDelegate = originalDelegate, originalDelegate.responds(to: #selector(userNotificationCenter(_:willPresent:withCompletionHandler:))) { - originalDelegate.userNotificationCenter?(center, willPresent: notification, withCompletionHandler: completionHandler) - } else { - handleBackgroundRunnerPresentation(completionHandler: completionHandler) - } + } + + private func handleBackgroundRunnerPresentation( + completionHandler: @escaping (UNNotificationPresentationOptions) -> Void + ) { + completionHandler([.banner, .sound, .badge]) + } + + private func forwardToOriginalDelegate( + _ center: UNUserNotificationCenter, willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void + ) { + if let originalDelegate = originalDelegate, + originalDelegate.responds( + to: #selector(userNotificationCenter(_:willPresent:withCompletionHandler:))) + { + originalDelegate.userNotificationCenter?( + center, willPresent: notification, withCompletionHandler: completionHandler) + } else { + handleBackgroundRunnerPresentation(completionHandler: completionHandler) } + } } diff --git a/packages/capacitor-plugin/package.json b/packages/capacitor-plugin/package.json index 5b3b4a64..c9937ad7 100644 --- a/packages/capacitor-plugin/package.json +++ b/packages/capacitor-plugin/package.json @@ -51,11 +51,11 @@ "postinstall": "node ./scripts/install_libs.js" }, "devDependencies": { - "@capacitor/android": "^6.2.1", - "@capacitor/cli": "^6.2.1", - "@capacitor/core": "^6.2.1", - "@capacitor/docgen": "0.3.0", - "@capacitor/ios": "^6.2.1", + "@capacitor/android": "^8.0.0", + "@capacitor/cli": "^8.0.0", + "@capacitor/core": "^8.0.0", + "@capacitor/docgen": "^0.3.0", + "@capacitor/ios": "^8.0.0", "@ionic/eslint-config": "^0.4.0", "@ionic/prettier-config": "^4.0.0", "@ionic/swiftlint-config": "^2.0.0", @@ -68,7 +68,7 @@ "typescript": "^5.9.3" }, "peerDependencies": { - "@capacitor/core": ">=6.0.0" + "@capacitor/core": ">=8.0.0" }, "prettier": "@ionic/prettier-config", "swiftlint": "@ionic/swiftlint-config", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc5c927b..2b6bebff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,29 +28,29 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.5) '@capacitor/android': - specifier: ^7.4.4 - version: 7.4.4(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/app': - specifier: ^7.1.0 - version: 7.1.0(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/background-runner': specifier: workspace:^ version: link:../../packages/capacitor-plugin '@capacitor/core': - specifier: ^7.4.4 - version: 7.4.4 + specifier: ^8.0.0 + version: 8.0.0 '@capacitor/haptics': - specifier: ^7.0.2 - version: 7.0.2(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/ios': - specifier: ^7.4.4 - version: 7.4.4(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/keyboard': - specifier: ^7.0.3 - version: 7.0.3(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/status-bar': - specifier: ^7.0.3 - version: 7.0.3(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@ionic/react': specifier: ^8.7.10 version: 8.7.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -149,8 +149,8 @@ importers: version: 7.4.0 devDependencies: '@capacitor/cli': - specifier: ^7.4.4 - version: 7.4.4 + specifier: ^8.0.0 + version: 8.0.0 apps/example-app-spm: dependencies: @@ -161,26 +161,26 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.5) '@capacitor/app': - specifier: ^7.1.0 - version: 7.1.0(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/background-runner': specifier: workspace:^ version: link:../../packages/capacitor-plugin '@capacitor/core': - specifier: ^7.4.4 - version: 7.4.4 + specifier: ^8.0.0 + version: 8.0.0 '@capacitor/haptics': - specifier: ^7.0.2 - version: 7.0.2(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/ios': - specifier: ^7.4.4 - version: 7.4.4(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/keyboard': - specifier: ^7.0.3 - version: 7.0.3(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/status-bar': - specifier: ^7.0.3 - version: 7.0.3(@capacitor/core@7.4.4) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@ionic/react': specifier: ^8.7.10 version: 8.7.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -279,8 +279,8 @@ importers: version: 7.4.0 devDependencies: '@capacitor/cli': - specifier: ^7.4.4 - version: 7.4.4 + specifier: ^8.0.0 + version: 8.0.0 packages/android-js-engine: dependencies: @@ -304,20 +304,20 @@ importers: packages/capacitor-plugin: devDependencies: '@capacitor/android': - specifier: ^6.2.1 - version: 6.2.1(@capacitor/core@6.2.1) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@capacitor/cli': - specifier: ^6.2.1 - version: 6.2.1 + specifier: ^8.0.0 + version: 8.0.0 '@capacitor/core': - specifier: ^6.2.1 - version: 6.2.1 + specifier: ^8.0.0 + version: 8.0.0 '@capacitor/docgen': - specifier: 0.3.0 + specifier: ^0.3.0 version: 0.3.0 '@capacitor/ios': - specifier: ^6.2.1 - version: 6.2.1(@capacitor/core@6.2.1) + specifier: ^8.0.0 + version: 8.0.0(@capacitor/core@8.0.0) '@ionic/eslint-config': specifier: ^0.4.0 version: 0.4.0(eslint@8.57.1)(typescript@5.9.3) @@ -1074,66 +1074,48 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@capacitor/android@6.2.1': - resolution: {integrity: sha512-8gd4CIiQO5LAIlPIfd5mCuodBRxMMdZZEdj8qG8m+dQ1sQ2xyemVpzHmRK8qSCHorsBUCg3D62j2cp6bEBAkdw==} + '@capacitor/android@8.0.0': + resolution: {integrity: sha512-FrBSvVAC5JuLaYHNyDnwQny0/SYnP+xDQbc/KA4wInmRkMXLDv22fkx9aBJIDrxjuUVd+jsRih4SAt8FgMEzCw==} peerDependencies: - '@capacitor/core': ^6.2.0 + '@capacitor/core': ^8.0.0 - '@capacitor/android@7.4.4': - resolution: {integrity: sha512-y8knfV1JXNrd6XZZLZireGT+EBCN0lvOo+HZ/s7L8LkrPBu4nY5UZn0Wxz4yOezItEII9rqYJSHsS5fMJG9gdw==} + '@capacitor/app@8.0.0': + resolution: {integrity: sha512-OwzIkUs4w433Bu9WWAEbEYngXEfJXZ9Wmdb8eoaqzYBgB0W9/3Ed/mh6sAYPNBAZlpyarmewgP7Nb+d3Vrh+xA==} peerDependencies: - '@capacitor/core': ^7.4.0 + '@capacitor/core': '>=8.0.0' - '@capacitor/app@7.1.0': - resolution: {integrity: sha512-W7m09IWrUjZbo7AKeq+rc/KyucxrJekTBg0l4QCm/yDtCejE3hebxp/W2esU26KKCzMc7H3ClkUw32E9lZkwRA==} - peerDependencies: - '@capacitor/core': '>=7.0.0' - - '@capacitor/cli@6.2.1': - resolution: {integrity: sha512-JKl0FpFge8PgQNInw12kcKieQ4BmOyazQ4JGJOfEpVXlgrX1yPhSZTPjngupzTCiK3I7q7iGG5kjun0fDqgSCA==} - engines: {node: '>=18.0.0'} - hasBin: true - - '@capacitor/cli@7.4.4': - resolution: {integrity: sha512-J7ciBE7GlJ70sr2s8oz1+H4ZdNk4MGG41fsakUlDHWva5UWgFIZYMiEdDvGbYazAYTaxN3lVZpH9zil9FfZj+Q==} - engines: {node: '>=20.0.0'} + '@capacitor/cli@8.0.0': + resolution: {integrity: sha512-v9hEBi69xGxuuZhg55N031bMEenKaPSv71Il8C22VOOH6surDyv/MPeImN0oVfFc7eiklaW3rDFYVz6cmXfJWQ==} + engines: {node: '>=22.0.0'} hasBin: true - '@capacitor/core@6.2.1': - resolution: {integrity: sha512-urZwxa7hVE/BnA18oCFAdizXPse6fCKanQyEqpmz6cBJ2vObwMpyJDG5jBeoSsgocS9+Ax+9vb4ducWJn0y2qQ==} - - '@capacitor/core@7.4.4': - resolution: {integrity: sha512-xzjxpr+d2zwTpCaN0k+C6wKSZzWFAb9OVEUtmO72ihjr/NEDoLvsGl4WLfjWPcCO2zOy0b2X52tfRWjECFUjtw==} + '@capacitor/core@8.0.0': + resolution: {integrity: sha512-250HTVd/W/KdMygoqaedisvNbHbpbQTN2Hy/8ZYGm1nAqE0Fx7sGss4l0nDg33STxEdDhtVRoL2fIaaiukKseA==} '@capacitor/docgen@0.3.0': resolution: {integrity: sha512-WPggobo5Ql70F+2xOIUwNSApJXaL9F/9+Al6B+sNuSAmcg484OAksyUPKgiynF4BVlxeY5a0sDkgdVkmmA3ElQ==} engines: {node: '>=18.0.0'} hasBin: true - '@capacitor/haptics@7.0.2': - resolution: {integrity: sha512-vqfeEM6s2zMgLjpITCTUIy7P/hadq/Gr5E/RClFgMJPB41Y5FsqOKD+j85/uwh8N2cf/aWaPeXUmjnTzJbEB2g==} - peerDependencies: - '@capacitor/core': '>=7.0.0' - - '@capacitor/ios@6.2.1': - resolution: {integrity: sha512-tbMlQdQjxe1wyaBvYVU1yTojKJjgluZQsJkALuJxv/6F8QTw5b6vd7X785O/O7cMpIAZfUWo/vtAHzFkRV+kXw==} + '@capacitor/haptics@8.0.0': + resolution: {integrity: sha512-DY1IUOjke1T4ITl7mFHQIKCaJJyHYAYRYHG9bVApU7PDOZiMVGMp48Yjzdqjya+wv/AHS5mDabSTUmhJ5uDvBA==} peerDependencies: - '@capacitor/core': ^6.2.0 + '@capacitor/core': '>=8.0.0' - '@capacitor/ios@7.4.4': - resolution: {integrity: sha512-Xp3bGWlSQAwsZGngRMWTdoD2agdMV12Whnm+/xsYPxfQSj+Tksbr7r/8Mso7VWkpnTKO4iMlx762g3PjW+wi4w==} + '@capacitor/ios@8.0.0': + resolution: {integrity: sha512-gwSn6X4uHYNHlM8zZmVmM1zjEhexxbHpPSSnH1DZkp8o3zdK/RmH8tmDma+3zPZrhhTSrMC7sT24dKTOvV8www==} peerDependencies: - '@capacitor/core': ^7.4.0 + '@capacitor/core': ^8.0.0 - '@capacitor/keyboard@7.0.3': - resolution: {integrity: sha512-BIBKjmky5rOYNhvYhNeDi0MMvjwYZ6YF9JoCYcGKvKY+XLJKtezsEL78XfOlgWZBkbfR8uq3tzktY6PqgoYLKA==} + '@capacitor/keyboard@8.0.0': + resolution: {integrity: sha512-ycPW6iQyFwzDK95jihesj5EGiyyGSfbBqNek11iNp9tBOB7zDeYkUA2S/vPpOETt3dhP6pWr7a9gNVGuEfj11g==} peerDependencies: - '@capacitor/core': '>=7.0.0' + '@capacitor/core': '>=8.0.0' - '@capacitor/status-bar@7.0.3': - resolution: {integrity: sha512-JyRpVnKwHij9hgPWolF6PK+HT3e2HSPjN11/h2OmKxq8GAdPGARFLv+97eZl0pvuvm0Kka/LpiLb5whXISBg7Q==} + '@capacitor/status-bar@8.0.0': + resolution: {integrity: sha512-aIj3bc7z8lfPgOen8HlrBrkfnxpFnh21OCx6jCUx4Mvv+B6eEkUQ49b32DOddgVfr+igRHLX2SYi7duqIsNDXg==} peerDependencies: - '@capacitor/core': '>=7.0.0' + '@capacitor/core': '>=8.0.0' '@changesets/apply-release-plan@7.0.13': resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==} @@ -1510,58 +1492,30 @@ packages: '@ionic/swiftlint-config@2.0.0': resolution: {integrity: sha512-TXy76ALSKhUZzBziHz7aoEtSQwHofBIDRNzM9x4sndtC7fefbZsBw3UgGwXFTOc7hoj72EAGyqZNUhj9LlhaNQ==} - '@ionic/utils-array@2.1.5': - resolution: {integrity: sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==} - engines: {node: '>=10.3.0'} - '@ionic/utils-array@2.1.6': resolution: {integrity: sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==} engines: {node: '>=16.0.0'} - '@ionic/utils-fs@3.1.6': - resolution: {integrity: sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==} - engines: {node: '>=10.3.0'} - '@ionic/utils-fs@3.1.7': resolution: {integrity: sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==} engines: {node: '>=16.0.0'} - '@ionic/utils-object@2.1.5': - resolution: {integrity: sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==} - engines: {node: '>=10.3.0'} - '@ionic/utils-object@2.1.6': resolution: {integrity: sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==} engines: {node: '>=16.0.0'} - '@ionic/utils-process@2.1.10': - resolution: {integrity: sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==} - engines: {node: '>=10.3.0'} - '@ionic/utils-process@2.1.12': resolution: {integrity: sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==} engines: {node: '>=16.0.0'} - '@ionic/utils-stream@3.1.5': - resolution: {integrity: sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==} - engines: {node: '>=10.3.0'} - '@ionic/utils-stream@3.1.7': resolution: {integrity: sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==} engines: {node: '>=16.0.0'} - '@ionic/utils-subprocess@2.1.11': - resolution: {integrity: sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==} - engines: {node: '>=10.3.0'} - '@ionic/utils-subprocess@3.0.1': resolution: {integrity: sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==} engines: {node: '>=16.0.0'} - '@ionic/utils-terminal@2.3.3': - resolution: {integrity: sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==} - engines: {node: '>=10.3.0'} - '@ionic/utils-terminal@2.3.5': resolution: {integrity: sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==} engines: {node: '>=16.0.0'} @@ -3268,10 +3222,6 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -8137,10 +8087,6 @@ packages: xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} - engines: {node: '>=4.0.0'} - xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} @@ -9119,41 +9065,15 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@capacitor/android@6.2.1(@capacitor/core@6.2.1)': - dependencies: - '@capacitor/core': 6.2.1 - - '@capacitor/android@7.4.4(@capacitor/core@7.4.4)': + '@capacitor/android@8.0.0(@capacitor/core@8.0.0)': dependencies: - '@capacitor/core': 7.4.4 + '@capacitor/core': 8.0.0 - '@capacitor/app@7.1.0(@capacitor/core@7.4.4)': + '@capacitor/app@8.0.0(@capacitor/core@8.0.0)': dependencies: - '@capacitor/core': 7.4.4 + '@capacitor/core': 8.0.0 - '@capacitor/cli@6.2.1': - dependencies: - '@ionic/cli-framework-output': 2.2.8 - '@ionic/utils-fs': 3.1.7 - '@ionic/utils-subprocess': 2.1.11 - '@ionic/utils-terminal': 2.3.5 - commander: 9.5.0 - debug: 4.4.3 - env-paths: 2.2.1 - kleur: 4.1.5 - native-run: 2.0.1 - open: 8.4.2 - plist: 3.1.0 - prompts: 2.4.2 - rimraf: 4.4.1 - semver: 7.7.3 - tar: 6.2.1 - tslib: 2.8.1 - xml2js: 0.5.0 - transitivePeerDependencies: - - supports-color - - '@capacitor/cli@7.4.4': + '@capacitor/cli@8.0.0': dependencies: '@ionic/cli-framework-output': 2.2.8 '@ionic/utils-subprocess': 3.0.1 @@ -9175,11 +9095,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@capacitor/core@6.2.1': - dependencies: - tslib: 2.8.1 - - '@capacitor/core@7.4.4': + '@capacitor/core@8.0.0': dependencies: tslib: 2.8.1 @@ -9191,25 +9107,21 @@ snapshots: minimist: 1.2.8 typescript: 4.2.4 - '@capacitor/haptics@7.0.2(@capacitor/core@7.4.4)': + '@capacitor/haptics@8.0.0(@capacitor/core@8.0.0)': dependencies: - '@capacitor/core': 7.4.4 + '@capacitor/core': 8.0.0 - '@capacitor/ios@6.2.1(@capacitor/core@6.2.1)': + '@capacitor/ios@8.0.0(@capacitor/core@8.0.0)': dependencies: - '@capacitor/core': 6.2.1 + '@capacitor/core': 8.0.0 - '@capacitor/ios@7.4.4(@capacitor/core@7.4.4)': + '@capacitor/keyboard@8.0.0(@capacitor/core@8.0.0)': dependencies: - '@capacitor/core': 7.4.4 + '@capacitor/core': 8.0.0 - '@capacitor/keyboard@7.0.3(@capacitor/core@7.4.4)': + '@capacitor/status-bar@8.0.0(@capacitor/core@8.0.0)': dependencies: - '@capacitor/core': 7.4.4 - - '@capacitor/status-bar@7.0.3(@capacitor/core@7.4.4)': - dependencies: - '@capacitor/core': 7.4.4 + '@capacitor/core': 8.0.0 '@changesets/apply-release-plan@7.0.13': dependencies: @@ -9677,13 +9589,6 @@ snapshots: '@ionic/swiftlint-config@2.0.0': {} - '@ionic/utils-array@2.1.5': - dependencies: - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ionic/utils-array@2.1.6': dependencies: debug: 4.4.3 @@ -9691,15 +9596,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ionic/utils-fs@3.1.6': - dependencies: - '@types/fs-extra': 8.1.5 - debug: 4.4.3 - fs-extra: 9.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ionic/utils-fs@3.1.7': dependencies: '@types/fs-extra': 8.1.5 @@ -9709,13 +9605,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ionic/utils-object@2.1.5': - dependencies: - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ionic/utils-object@2.1.6': dependencies: debug: 4.4.3 @@ -9723,17 +9612,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ionic/utils-process@2.1.10': - dependencies: - '@ionic/utils-object': 2.1.5 - '@ionic/utils-terminal': 2.3.3 - debug: 4.4.3 - signal-exit: 3.0.7 - tree-kill: 1.2.2 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ionic/utils-process@2.1.12': dependencies: '@ionic/utils-object': 2.1.6 @@ -9745,13 +9623,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ionic/utils-stream@3.1.5': - dependencies: - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ionic/utils-stream@3.1.7': dependencies: debug: 4.4.3 @@ -9759,19 +9630,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ionic/utils-subprocess@2.1.11': - dependencies: - '@ionic/utils-array': 2.1.5 - '@ionic/utils-fs': 3.1.6 - '@ionic/utils-process': 2.1.10 - '@ionic/utils-stream': 3.1.5 - '@ionic/utils-terminal': 2.3.3 - cross-spawn: 7.0.6 - debug: 4.4.3 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ionic/utils-subprocess@3.0.1': dependencies: '@ionic/utils-array': 2.1.6 @@ -9785,20 +9643,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ionic/utils-terminal@2.3.3': - dependencies: - '@types/slice-ansi': 4.0.0 - debug: 4.4.3 - signal-exit: 3.0.7 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - tslib: 2.8.1 - untildify: 4.0.0 - wrap-ansi: 7.0.0 - transitivePeerDependencies: - - supports-color - '@ionic/utils-terminal@2.3.5': dependencies: '@types/slice-ansi': 4.0.0 @@ -10252,11 +10096,11 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@5.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@npmcli/git@6.0.3': dependencies: @@ -10266,7 +10110,7 @@ snapshots: npm-pick-manifest: 10.0.0 proc-log: 5.0.0 promise-retry: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 which: 5.0.0 '@npmcli/git@7.0.1': @@ -10277,7 +10121,7 @@ snapshots: npm-pick-manifest: 11.0.3 proc-log: 6.0.0 promise-retry: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 which: 6.0.0 '@npmcli/installed-package-contents@3.0.0': @@ -10303,7 +10147,7 @@ snapshots: json-parse-even-better-errors: 5.0.0 pacote: 21.0.4 proc-log: 6.0.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -11917,8 +11761,6 @@ snapshots: commander@8.3.0: {} - commander@9.5.0: {} - common-ancestor-path@1.0.1: {} common-tags@1.8.2: {} @@ -11994,7 +11836,7 @@ snapshots: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 8.1.2 - semver: 7.7.2 + semver: 7.7.3 split: 1.0.1 conventional-commits-filter@3.0.0: @@ -13222,7 +13064,7 @@ snapshots: git-semver-tags@5.0.1: dependencies: meow: 8.1.2 - semver: 7.7.2 + semver: 7.7.3 git-up@7.0.0: dependencies: @@ -14950,7 +14792,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.3 tar: 7.5.2 tinyglobby: 0.2.12 which: 5.0.0 @@ -14978,7 +14820,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -14997,11 +14839,11 @@ snapshots: npm-install-checks@7.1.2: dependencies: - semver: 7.7.2 + semver: 7.7.3 npm-install-checks@8.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 npm-normalize-package-bin@4.0.0: {} @@ -15011,7 +14853,7 @@ snapshots: dependencies: hosted-git-info: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-name: 6.0.2 npm-package-arg@13.0.1: @@ -15031,14 +14873,14 @@ snapshots: npm-install-checks: 7.1.2 npm-normalize-package-bin: 4.0.0 npm-package-arg: 12.0.2 - semver: 7.7.2 + semver: 7.7.3 npm-pick-manifest@11.0.3: dependencies: npm-install-checks: 8.0.0 npm-normalize-package-bin: 5.0.0 npm-package-arg: 13.0.1 - semver: 7.7.2 + semver: 7.7.3 npm-registry-fetch@19.1.0: dependencies: @@ -17830,11 +17672,6 @@ snapshots: xml-name-validator@3.0.0: {} - xml2js@0.5.0: - dependencies: - sax: 1.4.3 - xmlbuilder: 11.0.1 - xml2js@0.6.2: dependencies: sax: 1.4.3