diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a246721 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,65 @@ +name: Release + +on: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + publish: + permissions: + id-token: write # Required for authentication using OIDC + uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1 + + tag: + needs: publish + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Tag + run: | + sudo git config --global user.name 'Jake' + sudo git config --global user.email 'jakemor@users.noreply.github.com' + sudo git pull + echo "\n\n\n- - - - - VERSION - - - - -\n\n\n" + VERSION=$(grep '^version:' pubspec.yaml | awk '{ print $2 }') + echo $VERSION + echo "\n\n\n- - - - - END VERSION - - - - -\n\n\n" + sudo git tag -a "$VERSION" -m "tags with latest version" + sudo git push --tags || true + sudo git checkout -b "release/$VERSION" + sudo git push -u origin "release/$VERSION" + + slack: + needs: tag + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Parse version + id: version + run: | + VERSION=$(grep '^version:' pubspec.yaml | awk '{ print $2 }') + echo "VERSION=$VERSION" + echo "::set-output name=prop::$VERSION" + - name: Determine prerelease status + id: prerelease + run: | + VERSION=${{ steps.version.outputs.prop }} + if [[ "$VERSION" == *"-alpha"* || "$VERSION" == *"-beta"* || "$VERSION" == *"-rc"* ]]; then + echo "::set-output name=status::true" + else + echo "::set-output name=status::false" + fi + - name: Send Slack message + uses: slackapi/slack-github-action@v1.24.0 + with: + payload: | + { + "text": "Please create a new Flutter release! https://github.com/superwall/Superwall-Flutter/releases/new?tag=${{ steps.version.outputs.prop }}&prerelease=${{ steps.prerelease.outputs.status }}" + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b34b59..110f1aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ The changelog for `Superwall`. Also see the [releases](https://github.com/superwall/Superwall-Flutter/releases) on GitHub. +## 2.2.2 + +### Fixes + +- Fixes issue with paywall presentation handlers not working. + ## 2.2.1 ### Fixes diff --git a/ios/Classes/PaywallPresentationHandler.swift b/ios/Classes/PaywallPresentationHandler.swift index 721c403..bbaed75 100644 --- a/ios/Classes/PaywallPresentationHandler.swift +++ b/ios/Classes/PaywallPresentationHandler.swift @@ -4,10 +4,13 @@ import Foundation final class PaywallPresentationHandlerHost { private let flutterHandler: PPaywallPresentationHandlerGenerated let handler: PaywallPresentationHandler + private let placement: String + private let cleanupCallback: (String) -> Void - init(flutterHandler: PPaywallPresentationHandlerGenerated) { + init(flutterHandler: PPaywallPresentationHandlerGenerated, placement: String, cleanupCallback: @escaping (String) -> Void) { self.flutterHandler = flutterHandler - + self.placement = placement + self.cleanupCallback = cleanupCallback handler = PaywallPresentationHandler() handler.onPresent { [weak self] paywallInfo in @@ -34,8 +37,12 @@ final class PaywallPresentationHandlerHost { self?.flutterHandler.onDismiss( paywallInfo: paywallInfo.pigeonify(), paywallResult: pResult, - completion: { result in - // NO-OP + completion: { [weak self] result in + if paywallInfo.closeReason != .none { + if let self = self { + self.cleanupCallback(self.placement) + } + } } ) } @@ -65,6 +72,9 @@ final class PaywallPresentationHandlerHost { reason: pReason, completion: { result in // NO-OP + if let self = self { + self.cleanupCallback(self.placement) + } } ) } diff --git a/ios/Classes/SuperwallHost.swift b/ios/Classes/SuperwallHost.swift index 8bdd836..6efb802 100644 --- a/ios/Classes/SuperwallHost.swift +++ b/ios/Classes/SuperwallHost.swift @@ -6,6 +6,7 @@ import Combine final class SuperwallHost : NSObject, PSuperwallHostApi { private let flutterBinaryMessenger: FlutterBinaryMessenger private var streamHandler: SubscriptionStatusStreamHandlerImpl? + private var presentationHandlers: [String: PaywallPresentationHandlerHost] = [:] init(flutterBinaryMessenger: FlutterBinaryMessenger) { self.flutterBinaryMessenger = flutterBinaryMessenger @@ -254,7 +255,15 @@ final class SuperwallHost : NSObject, PSuperwallHostApi { binaryMessenger: self.flutterBinaryMessenger, messageChannelSuffix: placement ) - presentationHandler = PaywallPresentationHandlerHost(flutterHandler: flutterHandler).handler + let handlerHost = PaywallPresentationHandlerHost( + flutterHandler: flutterHandler, + placement: placement, + cleanupCallback: { [weak self] placement in + self?.presentationHandlers.removeValue(forKey: placement) + } + ) + presentationHandlers[placement] = handlerHost + presentationHandler = handlerHost.handler } else { presentationHandler = nil } diff --git a/pubspec.yaml b/pubspec.yaml index a6c375b..cef936d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: superwallkit_flutter description: "Remotely configure every aspect of your paywall and double your revenue." -version: 2.2.1 +version: 2.2.2 homepage: "https://superwall.com" environment: