From 09ee34f07c531490a443b7d365691be521d570e2 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 12:22:42 +0800 Subject: [PATCH 01/25] feat: implement clickstream react native SDK --- .github/ISSUE_TEMPLATE/bug_report.yaml | 81 ++++++++++ .github/ISSUE_TEMPLATE/feature_request.yaml | 32 ++++ .github/PULL_REQUEST_TEMPLATE.md | 16 ++ .github/workflows/build-android.yml | 22 +++ .github/workflows/build-ios.yml | 26 ++++ .github/workflows/build-rn.yml | 49 ++++++ .github/workflows/build-web.yml | 19 +++ .github/workflows/title-lint.yml | 24 +++ react-native/.github/FUNDING.yml | 13 -- .../.github/ISSUE_TEMPLATE/bug_report.yaml | 18 --- react-native/.github/ISSUE_TEMPLATE/custom.md | 11 -- .../ISSUE_TEMPLATE/feature_request.yaml | 28 ---- .../.github/PULL_REQUEST_TEMPLATE/default.md | 54 ------- .../pull_request_template.md | 18 --- react-native/.github/config.yml | 13 -- .../config/changelog_configuration.json | 59 ------- react-native/.github/dependabot.yml | 9 -- react-native/.github/stale.yml | 17 --- react-native/.github/workflows/release.yml | 127 --------------- react-native/.github/workflows/test.yml | 39 ----- react-native/.husky/pre-commit | 4 - react-native/android/app/build.gradle | 3 +- .../funnyzak/v2ex/ClickstreamModule.java | 144 ------------------ .../github/funnyzak/v2ex/MainApplication.java | 17 +-- .../github/funnyzak/v2ex/MyAppPackage.java | 1 - .../main/res/raw/amplifyconfiguration.json | 15 -- .../clickstream-react-native-0.0.2.tgz | Bin 0 -> 41574 bytes react-native/index.js | 10 ++ react-native/ios/ClickstreamManager.h | 4 - react-native/ios/ClickstreamManager.m | 55 ------- react-native/ios/Podfile | 4 +- react-native/ios/amplifyconfiguration.json | 13 -- react-native/ios/app-Bridging-Header.h | 4 - .../ios/app.xcodeproj/project.pbxproj | 55 +------ .../xcshareddata/swiftpm/Package.resolved | 122 --------------- react-native/ios/app/AppDelegate.mm | 16 -- react-native/package.json | 1 + react-native/src/actions/MemberActions.ts | 12 +- react-native/src/navigation/Navigator.tsx | 28 ++++ react-native/src/screens/my/Home.tsx | 17 ++- react-native/yarn.lock | 4 + web/.gitignore | 1 + 42 files changed, 341 insertions(+), 864 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yaml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yaml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/build-android.yml create mode 100644 .github/workflows/build-ios.yml create mode 100644 .github/workflows/build-rn.yml create mode 100644 .github/workflows/build-web.yml create mode 100644 .github/workflows/title-lint.yml delete mode 100644 react-native/.github/FUNDING.yml delete mode 100644 react-native/.github/ISSUE_TEMPLATE/bug_report.yaml delete mode 100644 react-native/.github/ISSUE_TEMPLATE/custom.md delete mode 100644 react-native/.github/ISSUE_TEMPLATE/feature_request.yaml delete mode 100644 react-native/.github/PULL_REQUEST_TEMPLATE/default.md delete mode 100644 react-native/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md delete mode 100644 react-native/.github/config.yml delete mode 100644 react-native/.github/config/changelog_configuration.json delete mode 100644 react-native/.github/dependabot.yml delete mode 100644 react-native/.github/stale.yml delete mode 100644 react-native/.github/workflows/release.yml delete mode 100644 react-native/.github/workflows/test.yml delete mode 100755 react-native/.husky/pre-commit delete mode 100644 react-native/android/app/src/main/java/github/funnyzak/v2ex/ClickstreamModule.java delete mode 100644 react-native/android/app/src/main/res/raw/amplifyconfiguration.json create mode 100644 react-native/clickstream-react-native-0.0.2.tgz delete mode 100644 react-native/ios/ClickstreamManager.h delete mode 100644 react-native/ios/ClickstreamManager.m delete mode 100644 react-native/ios/amplifyconfiguration.json delete mode 100644 react-native/ios/app-Bridging-Header.h delete mode 100644 react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000..92dd101 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,81 @@ +name: Bug Report +description: Create a report to help us improve +body: + - type: textarea + id: description + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + id: repro + attributes: + label: Steps To Reproduce + description: How do you trigger this bug? Please walk us through it step by step. + value: | + Steps to reproduce the behavior: + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + render: typescript + validations: + required: true + - type: textarea + id: behavior + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + validations: + required: true + - type: input + id: clickstream-version + attributes: + label: ClickstreamAnalytic SDK Version + placeholder: e.g. 1.0.0 + validations: + required: true + - type: input + id: platform + attributes: + label: The platform of the bug + placeholder: | + - e.g. Android/iOS/Web/All + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant log output + description: >- + Include any relevant log output + value: | +
+ Log Messages + + ``` + INSERT LOG MESSAGES HERE + ``` +
+ render: shell + - type: dropdown + id: regression + attributes: + label: Is this a regression? + multiple: false + options: + - "Yes" + - "No" + validations: + required: true + - type: textarea + id: regression-info + attributes: + label: Regression additional context + placeholder: If it was a regression provide the versions used before and after the upgrade. + - type: textarea + id: context + attributes: + label: Additional context + description: Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 0000000..36105ac --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,32 @@ +name: Feature request +description: Suggest an idea for this project +body: + - type: textarea + id: description + attributes: + label: Is your feature request related to a problem? Please describe. + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered. + validations: + required: true + + - type: textarea + id: context + attributes: + label: Additional context + description: Add any other context about the problem here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..5503089 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +## Issue \# + + +## Description + + +## General Checklist + + +- [ ] Added new tests to cover change, if needed +- [ ] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc) +- [ ] Documentation update for the change if required +- [ ] PR title conforms to conventional commit style +- [ ] If breaking change, documentation/changelog update with migration instructions + +By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml new file mode 100644 index 0000000..e8ca0aa --- /dev/null +++ b/.github/workflows/build-android.yml @@ -0,0 +1,22 @@ +name: Build for Android + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build-android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: '17' + cache: gradle + - name: Build android apk + run: | + cd android + ./gradlew assembleDebug diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml new file mode 100644 index 0000000..299d624 --- /dev/null +++ b/.github/workflows/build-ios.yml @@ -0,0 +1,26 @@ +name: Build for iOS + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build-ios: + runs-on: macos-13-xl + steps: + - uses: actions/checkout@v3 + - name: Build ios + run: | + sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' + xcode-select --print-path + cd ios + xcodebuild -resolvePackageDependencies + echo "start build ios app" + xcodebuild -scheme "ModerneShopping" \ + -archivePath $RUNNER_TEMP/ModerneShopping.xcarchive \ + -sdk iphoneos \ + -configuration Release \ + -destination generic/platform=iOS \ + clean archive | xcpretty diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml new file mode 100644 index 0000000..b6266c0 --- /dev/null +++ b/.github/workflows/build-rn.yml @@ -0,0 +1,49 @@ +name: Build for React Native + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + lint-rn: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run build + run: | + cd react-native + yarn + yarn lint + + build-android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: '17' + cache: gradle + - name: Build android apk + run: | + cd react-native/android + ./gradlew assembleDebug + + build-ios: + runs-on: macos-13-xl + steps: + - uses: actions/checkout@v3 + - name: Build ios + run: | + sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' + cd react-native/ios + xcodebuild -resolvePackageDependencies + echo "start build ios app" + xcodebuild -workspace app.xcworkspace \ + -scheme "app" \ + -sdk iphoneos \ + -configuration Release \ + -destination generic/platform=iOS \ + clean archive | xcpretty \ No newline at end of file diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml new file mode 100644 index 0000000..2e02b4b --- /dev/null +++ b/.github/workflows/build-web.yml @@ -0,0 +1,19 @@ +name: Build for React Native + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build-web: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run build + run: | + cd web + yarn + cd packages/vue2 + yarn build \ No newline at end of file diff --git a/.github/workflows/title-lint.yml b/.github/workflows/title-lint.yml new file mode 100644 index 0000000..d5f6cee --- /dev/null +++ b/.github/workflows/title-lint.yml @@ -0,0 +1,24 @@ +name: Pull Request Title Lint + +on: + pull_request: + branches: [ "*" ] + +jobs: + title-lint: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: |- + feat + fix + chore + docs + ci + tests + requireScope: false diff --git a/react-native/.github/FUNDING.yml b/react-native/.github/FUNDING.yml deleted file mode 100644 index a98d89e..0000000 --- a/react-native/.github/FUNDING.yml +++ /dev/null @@ -1,13 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry -custom: ['https://github.com/funnyzak/funnyzak/blob/storage/assets/coffee.png'] diff --git a/react-native/.github/ISSUE_TEMPLATE/bug_report.yaml b/react-native/.github/ISSUE_TEMPLATE/bug_report.yaml deleted file mode 100644 index d815e7c..0000000 --- a/react-native/.github/ISSUE_TEMPLATE/bug_report.yaml +++ /dev/null @@ -1,18 +0,0 @@ -name: Report a bug -description: ——— -labels: [bug] -body: - - type: markdown - attributes: - value: | - # Thanks for reporting this bug! - - Help us replicate and find a fix for the issue by filling in this form. - - type: textarea - attributes: - label: Description - description: | - Describe the issue and how to replicate it. If possible, please include - a minimal example to reproduce the issue. - validations: - required: true \ No newline at end of file diff --git a/react-native/.github/ISSUE_TEMPLATE/custom.md b/react-native/.github/ISSUE_TEMPLATE/custom.md deleted file mode 100644 index 34d97c1..0000000 --- a/react-native/.github/ISSUE_TEMPLATE/custom.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Custom Issue Template -about: Tell us something related to the project or general discussion -title: '' -labels: question -assignees: troublediehard ---- - -**Are there certain things to report that are not a bug or feature?** -Please tell us as exactly as possible about your request, thanks. -We will reply as soon as possible. diff --git a/react-native/.github/ISSUE_TEMPLATE/feature_request.yaml b/react-native/.github/ISSUE_TEMPLATE/feature_request.yaml deleted file mode 100644 index f60c611..0000000 --- a/react-native/.github/ISSUE_TEMPLATE/feature_request.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: Suggest an improvement or new feature -description: ——— -labels: [enhancement] -body: - - type: markdown - attributes: - value: | - # Thanks for filing this feature request! - - Help us understanding this feature and the need for it better by filling in this form. - - type: textarea - attributes: - label: Description - description: Describe the feature in detail - validations: - required: true - - type: textarea - attributes: - label: Why - description: Why should we add this feature? What are potential use cases for it? - validations: - required: true - - type: textarea - attributes: - label: Alternatives - description: Describe the alternatives you have considered, or existing workarounds - validations: - required: true diff --git a/react-native/.github/PULL_REQUEST_TEMPLATE/default.md b/react-native/.github/PULL_REQUEST_TEMPLATE/default.md deleted file mode 100644 index 8196834..0000000 --- a/react-native/.github/PULL_REQUEST_TEMPLATE/default.md +++ /dev/null @@ -1,54 +0,0 @@ - - -## Related Issues - - - -## Description - - - -### Added - - - -### Changed - - - -### Removed - - - -## Caveats/Problems/Issues - - - -## Checklist - -- [ ] The issues that this PR fixes/closes have been mentioned above. -- [ ] What this PR adds/changes/removes has been explained. -- [ ] All tests pass. -- [ ] The linter does not throw an errors. diff --git a/react-native/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/react-native/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md deleted file mode 100644 index eb634d2..0000000 --- a/react-native/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ /dev/null @@ -1,18 +0,0 @@ -**What does this implement/fix? Explain your changes.** -Please explain your changes in addition to your commit messages. - -**Does this close any currently open issues?** -If yes, please mention, else ignore. - -**Screenshots** -If applicable, add screenshots of end result. - -**Any other comments?** - -## **Where has this been tested?** - -- OS: [e.g. Windows 10] -- Version [e.g. 1.0.0] -- Node.js version [e.g. 12.16.1] -- Yarn version [e.g. 1.22.4] -- ...etc diff --git a/react-native/.github/config.yml b/react-native/.github/config.yml deleted file mode 100644 index 0f9eb8f..0000000 --- a/react-native/.github/config.yml +++ /dev/null @@ -1,13 +0,0 @@ -newIssueWelcomeComment: > - 感谢你提交的问题或反馈,我会尽快回复,在此期间你可以看看[之前被解决的反馈](https://github.com/funnyzak/react-native-v2ex/issues?q=is%3Aissue+is%3Aclosed)说不定有你需要的答案。 - - Thanks for opening this issue, a maintainer will get back to you shortly! - -newPRWelcomeComment: > - 感谢你提交的问题或反馈,我会尽快来审查代码。 - - Thanks so much for opening your first PR here! -firstPRMergeComment: > - 感谢贡献 PR 来支持 Funnyzak! :tada: - - Congrats on merging your first pull request here! :tada: How awesome! \ No newline at end of file diff --git a/react-native/.github/config/changelog_configuration.json b/react-native/.github/config/changelog_configuration.json deleted file mode 100644 index ee21056..0000000 --- a/react-native/.github/config/changelog_configuration.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "categories": [ - { - "title": "## 🚀 Features", - "labels": [ - "feature", - "feat" - ] - }, - { - "title": "## 🐛 Fixes", - "labels": [ - "fix", - "bug", - "fixed" - ] - }, - { - "title": "## 🧪 Tests", - "labels": [ - "test" - ] - }, - { - "title": "## 💬 Other", - "labels": [ - "other" - ] - }, - { - "title": "## ✨ Refactors", - "labels": [ - "refactor" - ] - }, - { - "title": "## 📦 Dependencies", - "labels": [ - "dependencies" - ] - } - ], - "sort": "ASC", - "template": "${{CHANGELOG}}\n\n
\nUncategorized\n\n${{UNCATEGORIZED}}\n
", - "pr_template": "- ${{TITLE}}\n - PR: #${{NUMBER}}", - "empty_template": "- no changes", - "transformers": [ - { - "pattern": "[\\-\\*] (\\[(...|TEST|CI|SKIP)\\])( )?(.+?)\n(.+?[\\-\\*] )(.+)", - "target": "- $4\n - $6" - } - ], - "max_tags_to_fetch": 500, - "max_pull_requests": 500, - "max_back_track_time_days": 500, - "exclude_merge_branches": [ - "Owner/qa" - ] -} \ No newline at end of file diff --git a/react-native/.github/dependabot.yml b/react-native/.github/dependabot.yml deleted file mode 100644 index 42cdbc1..0000000 --- a/react-native/.github/dependabot.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: 2 -updates: -- package-ecosystem: npm - directory: "/" - schedule: - interval: daily - open-pull-requests-limit: 3 - ignore: - - dependency-name: "i18n-js" diff --git a/react-native/.github/stale.yml b/react-native/.github/stale.yml deleted file mode 100644 index 872c4f5..0000000 --- a/react-native/.github/stale.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 30 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false \ No newline at end of file diff --git a/react-native/.github/workflows/release.yml b/react-native/.github/workflows/release.yml deleted file mode 100644 index 10e1e5f..0000000 --- a/react-native/.github/workflows/release.yml +++ /dev/null @@ -1,127 +0,0 @@ -name: CI -on: - push: - tags: - - '*' - workflow_dispatch: - -env: - DIST_ARCHIVE_PREFIX_NAME: ${{ github.event.repository.name }} - -jobs: - lint-and-test: - name: Lint and Test - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - registry-url: 'https://registry.npmjs.org/' - cache: 'yarn' - - name: Install dependencies - run: | - yarn - - build-android-apk: - name: Build Android APK - needs: lint-and-test - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Set variables - id: set_veriables - run: | - # Get the version from package.json - echo "PACKAGE_VERSION_NAME=$(node -p "require('./package.json').version")" >> $GITHUB_ENV - # Get the name from package.json - echo "PACKAGE_NAME=$(node -p "require('./package.json').name")" >> $GITHUB_ENV - # current push sha - echo "COMMIT_ID=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_ENV - # current push tag - echo "VERSION=$(echo $GITHUB_REF | cut -d / -f 3)" >> $GITHUB_ENV - # latest tag - echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - # set current timestamp - echo "TIMESTAMP=$(date +%s)" >> $GITHUB_ENV - # set current time and format - echo "BUILD_TIME=$(date "+%Y-%m-%d-%H-%M")" >> $GITHUB_ENV - - name: Set apk name - id: set_apk_name - run: | - echo "APK_NAME=${{ env.PACKAGE_NAME }}-${{ env.PACKAGE_VERSION_NAME }}-${{ env.TIMESTAMP }}-${{ env.COMMIT_ID }}.apk" >> $GITHUB_ENV - - name: Build changelog - id: build_changelog - uses: mikepenz/release-changelog-builder-action@v3.4.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - configuration: '.github/config/changelog_configuration.json' - ignorePreReleases: 'false' - - name: Use node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - name: Restore yarn cache - uses: actions/cache@v3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Install dependencies - run: | - yarn - - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: '11' - - name: Build APK - run: | - cd android && ./gradlew assembleRelease - - name: Move apk to target directory - run: cp android/app/build/outputs/apk/release/app-release.apk android/app/build/outputs/apk/release/${{ env.APK_NAME }} - - name: Release - uses: softprops/action-gh-release@v1 - with: - body: ${{ steps.build_changelog.outputs.changelog }} - name: ${{ env.PACKAGE_VERSION_NAME }} - tag_name: ${{ env.TAG_NAME }} - files: | - android/app/build/outputs/apk/release/${{ env.APK_NAME }} - env: - GITHUB_TOKEN: ${{ secrets.github_token }} - - push-release-message: - name: Push release message - runs-on: ubuntu-latest - needs: [build-android-apk] - steps: - - name: Push message - uses: funnyzak/pushoo-action@main - with: - platforms: ifttt,wecombot,bark - tokens: ${{ secrets.PUSH_TOKEN }} - content: | - # ${{ github.event.repository.name }} Released - ## trigger: ${{ github.event_name }} at ${{ github.event.head_commit.timestamp }} - ## commit message: ${{ github.event.head_commit.message }} - ## commit url: ${{ github.event.head_commit.url }} - ## commit author: ${{ github.event.head_commit.author.name }} - ## commit email: ${{ github.event.head_commit.author.email }} - ## commit id: ${{ github.event.head_commit.id }} - title: | - ${{ github.repository }} ${{ github.event_name }} Message - options: '{"bark": { "url": "https://github.com/${{github.repository}}" }}' - debug: false diff --git a/react-native/.github/workflows/test.yml b/react-native/.github/workflows/test.yml deleted file mode 100644 index 1b0c3af..0000000 --- a/react-native/.github/workflows/test.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: test - -on: - push: - branches: [ dev, main ] - pull_request: - workflow_dispatch: -jobs: - lint: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - steps: - - - name: Checkout - uses: actions/checkout@v3 - - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - uses: actions/cache@v3 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Lint - run: | - yarn - yarn lint diff --git a/react-native/.husky/pre-commit b/react-native/.husky/pre-commit deleted file mode 100755 index 0312b76..0000000 --- a/react-native/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx lint-staged \ No newline at end of file diff --git a/react-native/android/app/build.gradle b/react-native/android/app/build.gradle index 43be748..de29e2d 100644 --- a/react-native/android/app/build.gradle +++ b/react-native/android/app/build.gradle @@ -175,8 +175,7 @@ dependencies { } else { implementation jscFlavor } - implementation("software.aws.solution:clickstream:0.9.0") implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.10")) } -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) \ No newline at end of file +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/react-native/android/app/src/main/java/github/funnyzak/v2ex/ClickstreamModule.java b/react-native/android/app/src/main/java/github/funnyzak/v2ex/ClickstreamModule.java deleted file mode 100644 index d636e32..0000000 --- a/react-native/android/app/src/main/java/github/funnyzak/v2ex/ClickstreamModule.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package github.funnyzak.v2ex; - -import androidx.annotation.NonNull; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import software.aws.solution.clickstream.ClickstreamAnalytics; -import software.aws.solution.clickstream.ClickstreamAttribute; -import software.aws.solution.clickstream.ClickstreamEvent; -import software.aws.solution.clickstream.ClickstreamUserAttribute; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -public class ClickstreamModule extends ReactContextBaseJavaModule { - - public ClickstreamModule(ReactApplicationContext context) { - super(context); - } - - @NonNull - @Override - public String getName() { - return "ClickstreamAnalytics"; - } - - @ReactMethod() - public void recordEventWithName(String eventName) { - ClickstreamAnalytics.recordEvent(eventName); - } - - @ReactMethod - public void recordEvent(String eventName, ReadableMap map) { - HashMap attributeMap = map.toHashMap(); - ClickstreamEvent.Builder builder = new ClickstreamEvent.Builder(); - builder.name(eventName); - for (Map.Entry entry : attributeMap.entrySet()) { - if (entry.getValue() instanceof String) { - builder.add(entry.getKey(), (String) entry.getValue()); - } else if (entry.getValue() instanceof Integer) { - builder.add(entry.getKey(), (Integer) entry.getValue()); - } else if (entry.getValue() instanceof Long) { - builder.add(entry.getKey(), (Long) entry.getValue()); - } else if (entry.getValue() instanceof Boolean) { - builder.add(entry.getKey(), (Boolean) entry.getValue()); - } else if (entry.getValue() instanceof Double) { - builder.add(entry.getKey(), (Double) entry.getValue()); - } - } - ClickstreamAnalytics.recordEvent(builder.build()); - } - - @ReactMethod - public void setUserId(String userId) { - ClickstreamAnalytics.setUserId(userId); - } - - @ReactMethod - public void addUserAttributes(ReadableMap map) { - HashMap attributeMap = map.toHashMap(); - ClickstreamUserAttribute.Builder builder = new ClickstreamUserAttribute.Builder(); - for (Map.Entry entry : attributeMap.entrySet()) { - if (entry.getValue() instanceof String) { - builder.add(entry.getKey(), (String) entry.getValue()); - } else if (entry.getValue() instanceof Integer) { - builder.add(entry.getKey(), (Integer) entry.getValue()); - } else if (entry.getValue() instanceof Long) { - builder.add(entry.getKey(), (Long) entry.getValue()); - } else if (entry.getValue() instanceof Boolean) { - builder.add(entry.getKey(), (Boolean) entry.getValue()); - } else if (entry.getValue() instanceof Double) { - builder.add(entry.getKey(), (Double) entry.getValue()); - } - } - ClickstreamAnalytics.addUserAttributes(builder.build()); - } - - @ReactMethod - public void addGlobalAttributes(ReadableMap map) { - HashMap attributeMap = map.toHashMap(); - ClickstreamAttribute.Builder builder = new ClickstreamAttribute.Builder(); - for (Map.Entry entry : attributeMap.entrySet()) { - if (entry.getValue() instanceof String) { - builder.add(entry.getKey(), (String) entry.getValue()); - } else if (entry.getValue() instanceof Integer) { - builder.add(entry.getKey(), (Integer) entry.getValue()); - } else if (entry.getValue() instanceof Long) { - builder.add(entry.getKey(), (Long) entry.getValue()); - } else if (entry.getValue() instanceof Boolean) { - builder.add(entry.getKey(), (Boolean) entry.getValue()); - } else if (entry.getValue() instanceof Double) { - builder.add(entry.getKey(), (Double) entry.getValue()); - } - } - ClickstreamAnalytics.addGlobalAttributes(builder.build()); - } - - @ReactMethod - public void deleteGlobalAttributes(ReadableArray attributes) { - ArrayList attributeArray = new ArrayList<>(); - for (Object attribute : attributes.toArrayList()) { - if (attribute instanceof String) { - attributeArray.add((String) attribute); - } - } - if (attributeArray.size() > 0) { - ClickstreamAnalytics.deleteGlobalAttributes(attributeArray.toArray(new String[0])); - } - } - - @ReactMethod - public void flushEvents() { - ClickstreamAnalytics.flushEvents(); - } - - @ReactMethod - public void enable() { - ClickstreamAnalytics.enable(); - } - - @ReactMethod - public void disable() { - ClickstreamAnalytics.disable(); - } -} diff --git a/react-native/android/app/src/main/java/github/funnyzak/v2ex/MainApplication.java b/react-native/android/app/src/main/java/github/funnyzak/v2ex/MainApplication.java index f0a835b..61ada75 100644 --- a/react-native/android/app/src/main/java/github/funnyzak/v2ex/MainApplication.java +++ b/react-native/android/app/src/main/java/github/funnyzak/v2ex/MainApplication.java @@ -2,8 +2,6 @@ import android.app.Application; -import com.amplifyframework.AmplifyException; - import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; import com.facebook.react.ReactNativeHost; @@ -11,7 +9,6 @@ import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; -import software.aws.solution.clickstream.ClickstreamAnalytics; import java.util.List; @@ -63,17 +60,5 @@ public void onCreate() { DefaultNewArchitectureEntryPoint.load(); } ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - - // Init ClickstreamAnalytics - try { - ClickstreamAnalytics.init(getApplicationContext()); - - ClickstreamAnalytics.getClickStreamConfiguration() - .withLogEvents(true) - .withTrackScreenViewEvents(false) - .withTrackUserEngagementEvents(false); - } catch (AmplifyException e) { - e.printStackTrace(); - } } -} \ No newline at end of file +} diff --git a/react-native/android/app/src/main/java/github/funnyzak/v2ex/MyAppPackage.java b/react-native/android/app/src/main/java/github/funnyzak/v2ex/MyAppPackage.java index da85f18..94ba8ef 100644 --- a/react-native/android/app/src/main/java/github/funnyzak/v2ex/MyAppPackage.java +++ b/react-native/android/app/src/main/java/github/funnyzak/v2ex/MyAppPackage.java @@ -39,7 +39,6 @@ public List createNativeModules( @NonNull ReactApplicationContext reactContext) { List modules = new ArrayList<>(); - modules.add(new ClickstreamModule(reactContext)); return modules; } } \ No newline at end of file diff --git a/react-native/android/app/src/main/res/raw/amplifyconfiguration.json b/react-native/android/app/src/main/res/raw/amplifyconfiguration.json deleted file mode 100644 index 2b38354..0000000 --- a/react-native/android/app/src/main/res/raw/amplifyconfiguration.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "UserAgent": "aws-solution/clickstream", - "Version": "1.0", - "analytics": { - "plugins": { - "awsClickstreamPlugin": { - "appId": "your appId", - "endpoint": "your endpoint", - "isCompressEvents": true, - "autoFlushEventsInterval": 10000, - "isTrackAppExceptionEvents": false - } - } - } -} diff --git a/react-native/clickstream-react-native-0.0.2.tgz b/react-native/clickstream-react-native-0.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9a98531d4f04e43e179c11f8fd0c91ac2975d4d3 GIT binary patch literal 41574 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 z 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 { + console.log('Initial Clickstream SDK result: ' + result) +}) + AppRegistry.registerComponent(appName, () => App) diff --git a/react-native/ios/ClickstreamManager.h b/react-native/ios/ClickstreamManager.h deleted file mode 100644 index 2cdefc6..0000000 --- a/react-native/ios/ClickstreamManager.h +++ /dev/null @@ -1,4 +0,0 @@ -// ClickstreamManager.h -#import -@interface ClickstreamManager : NSObject -@end diff --git a/react-native/ios/ClickstreamManager.m b/react-native/ios/ClickstreamManager.m deleted file mode 100644 index 50d12cf..0000000 --- a/react-native/ios/ClickstreamManager.m +++ /dev/null @@ -1,55 +0,0 @@ -// ClickstreamManager.m -#import "ClickstreamManager.h" -#import -@import Clickstream; - -@implementation ClickstreamManager - -// To export a module named ClickstreamManager -RCT_EXPORT_MODULE(ClickstreamAnalytics); - -RCT_EXPORT_METHOD(recordEventWithName:(NSString *)name) -{ - [ClickstreamObjc recordEvent:name]; -} - -RCT_EXPORT_METHOD(recordEvent:(NSString *)name :(NSDictionary *)attributes) -{ - [ClickstreamObjc recordEvent:name :attributes]; -} - -RCT_EXPORT_METHOD(setUserId:(NSString *)userId) -{ - [ClickstreamObjc setUserId:userId]; -} - -RCT_EXPORT_METHOD(addUserAttributes:(NSDictionary *)attributes) -{ - [ClickstreamObjc addUserAttributes:attributes]; -} - -RCT_EXPORT_METHOD(addGlobalAttributes:(NSDictionary *)attributes) -{ - [ClickstreamObjc addGlobalAttributes:attributes]; -} - -RCT_EXPORT_METHOD(deleteGlobalAttributes:(NSArray *)attributes) -{ - [ClickstreamObjc deleteGlobalAttributes:attributes]; -} - -RCT_EXPORT_METHOD(flushEvents) -{ - [ClickstreamObjc flushEvents]; -} - -RCT_EXPORT_METHOD(enable) -{ - [ClickstreamObjc enable]; -} - -RCT_EXPORT_METHOD(disable) -{ - [ClickstreamObjc disable]; -} -@end diff --git a/react-native/ios/Podfile b/react-native/ios/Podfile index 90dc26f..cbd444c 100644 --- a/react-native/ios/Podfile +++ b/react-native/ios/Podfile @@ -1,7 +1,7 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -platform :ios, min_ios_version_supported +platform :ios, 13 prepare_react_native_project! # https://github.com/facebook/react-native/pull/36759 @@ -12,7 +12,7 @@ def __apply_Xcode_14_3_RC_post_install_workaround(installer) installer.pods_project.targets.each do |target| target.build_configurations.each do |config| current_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] - minimum_target = min_ios_version_supported + minimum_target = 13 if current_target.to_f < minimum_target.to_f config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = minimum_target end diff --git a/react-native/ios/amplifyconfiguration.json b/react-native/ios/amplifyconfiguration.json deleted file mode 100644 index 08c4e47..0000000 --- a/react-native/ios/amplifyconfiguration.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "analytics": { - "plugins": { - "awsClickstreamPlugin": { - "appId": "your appId", - "endpoint": "your endpoint", - "isCompressEvents": true, - "autoFlushEventsInterval": 10000, - "isTrackAppExceptionEvents": false - } - } - } -} diff --git a/react-native/ios/app-Bridging-Header.h b/react-native/ios/app-Bridging-Header.h deleted file mode 100644 index 1b2cb5d..0000000 --- a/react-native/ios/app-Bridging-Header.h +++ /dev/null @@ -1,4 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// - diff --git a/react-native/ios/app.xcodeproj/project.pbxproj b/react-native/ios/app.xcodeproj/project.pbxproj index a3db3dc..800f801 100644 --- a/react-native/ios/app.xcodeproj/project.pbxproj +++ b/react-native/ios/app.xcodeproj/project.pbxproj @@ -11,10 +11,6 @@ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 3A46E88B2B26B70F0042C324 /* Clickstream in Frameworks */ = {isa = PBXBuildFile; productRef = 3A46E88A2B26B70F0042C324 /* Clickstream */; }; - 3A78F5E02B26DB16006001B7 /* ClickstreamManager.h in Sources */ = {isa = PBXBuildFile; fileRef = 3A78F5DF2B26DB16006001B7 /* ClickstreamManager.h */; }; - 3A78F5E22B26DC73006001B7 /* ClickstreamManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A78F5E12B26DC73006001B7 /* ClickstreamManager.m */; }; - 3A78F5E72B26E58A006001B7 /* amplifyconfiguration.json in Resources */ = {isa = PBXBuildFile; fileRef = 3A78F5E62B26E58A006001B7 /* amplifyconfiguration.json */; }; 6172F2D35A4C3AA820D92908 /* libPods-app.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6423831EA8574132BED9D8CC /* libPods-app.a */; }; 7EF68E3733C33B6898317E18 /* libPods-app-appTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ABFE59519B596E51CEFDCCC0 /* libPods-app-appTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; @@ -41,10 +37,6 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = app/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = app/main.m; sourceTree = ""; }; 1D0AE47A65C8663E3B452821 /* Pods-app-appTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-app-appTests.release.xcconfig"; path = "Target Support Files/Pods-app-appTests/Pods-app-appTests.release.xcconfig"; sourceTree = ""; }; - 3A78F5DF2B26DB16006001B7 /* ClickstreamManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClickstreamManager.h; sourceTree = ""; }; - 3A78F5E12B26DC73006001B7 /* ClickstreamManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClickstreamManager.m; sourceTree = ""; }; - 3A78F5E32B26E493006001B7 /* app-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "app-Bridging-Header.h"; sourceTree = ""; }; - 3A78F5E62B26E58A006001B7 /* amplifyconfiguration.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = amplifyconfiguration.json; sourceTree = ""; }; 6423831EA8574132BED9D8CC /* libPods-app.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-app.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 6C97AB639B58BBB4B15BBE30 /* Pods-app-appTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-app-appTests.debug.xcconfig"; path = "Target Support Files/Pods-app-appTests/Pods-app-appTests.debug.xcconfig"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = app/LaunchScreen.storyboard; sourceTree = ""; }; @@ -68,7 +60,6 @@ buildActionMask = 2147483647; files = ( 6172F2D35A4C3AA820D92908 /* libPods-app.a in Frameworks */, - 3A46E88B2B26B70F0042C324 /* Clickstream in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,16 +86,12 @@ 13B07FAE1A68108700A75B9A /* app */ = { isa = PBXGroup; children = ( - 3A78F5E62B26E58A006001B7 /* amplifyconfiguration.json */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FB71A68108700A75B9A /* main.m */, - 3A78F5DF2B26DB16006001B7 /* ClickstreamManager.h */, - 3A78F5E12B26DC73006001B7 /* ClickstreamManager.m */, - 3A78F5E32B26E493006001B7 /* app-Bridging-Header.h */, ); name = app; sourceTree = ""; @@ -203,9 +190,6 @@ dependencies = ( ); name = app; - packageProductDependencies = ( - 3A46E88A2B26B70F0042C324 /* Clickstream */, - ); productName = app; productReference = 13B07F961A680F5B00A75B9A /* app.app */; productType = "com.apple.product-type.application"; @@ -236,9 +220,6 @@ Base, ); mainGroup = 83CBB9F61A601CBA00E9B192; - packageReferences = ( - 3A46E8892B26B70F0042C324 /* XCRemoteSwiftPackageReference "clickstream-swift" */, - ); productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -262,7 +243,6 @@ buildActionMask = 2147483647; files = ( 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 3A78F5E72B26E58A006001B7 /* amplifyconfiguration.json in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -430,10 +410,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3A78F5E22B26DC73006001B7 /* ClickstreamManager.m in Sources */, 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, - 3A78F5E02B26DB16006001B7 /* ClickstreamManager.h in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -453,6 +431,7 @@ baseConfigurationReference = 6C97AB639B58BBB4B15BBE30 /* Pods-app-appTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -481,6 +460,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = appTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -506,9 +486,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 29; - DEVELOPMENT_TEAM = ED4U2734MB; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; INFOPLIST_FILE = app/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; @@ -525,7 +506,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = github.funnyzak.v2ex; PRODUCT_NAME = app; - PROVISIONING_PROFILE_SPECIFIER = "v2ex dist"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "app-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VER6.0 = SWIFT_VER6.0; @@ -543,11 +524,9 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = ED4U2734MB; INFOPLIST_FILE = app/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; IPHONEOS_DEPLOYMENT_TARGET = 12.4; @@ -564,7 +543,6 @@ PRODUCT_BUNDLE_IDENTIFIER = github.funnyzak.v2ex; PRODUCT_NAME = app; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "v2ex app dis m1"; SWIFT_OBJC_BRIDGING_HEADER = "app-Bridging-Header.h"; SWIFT_VER6.0 = SWIFT_VER6.0; SWIFT_VERSION = 6.0; @@ -729,25 +707,6 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 3A46E8892B26B70F0042C324 /* XCRemoteSwiftPackageReference "clickstream-swift" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/awslabs/clickstream-swift.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 0.8.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 3A46E88A2B26B70F0042C324 /* Clickstream */ = { - isa = XCSwiftPackageProductDependency; - package = 3A46E8892B26B70F0042C324 /* XCRemoteSwiftPackageReference "clickstream-swift" */; - productName = Clickstream; - }; -/* End XCSwiftPackageProductDependency section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; } diff --git a/react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved b/react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index faa56a7..0000000 --- a/react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,122 +0,0 @@ -{ - "pins" : [ - { - "identity" : "amplify-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/aws-amplify/amplify-swift.git", - "state" : { - "revision" : "abe8aae8d5e750147619ef2917c6219672c5e3cc", - "version" : "2.10.0" - } - }, - { - "identity" : "amplify-swift-utils-notifications", - "kind" : "remoteSourceControl", - "location" : "https://github.com/aws-amplify/amplify-swift-utils-notifications.git", - "state" : { - "revision" : "f970384ad1035732f99259255cd2f97564807e41", - "version" : "1.1.0" - } - }, - { - "identity" : "aws-appsync-realtime-client-ios", - "kind" : "remoteSourceControl", - "location" : "https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git", - "state" : { - "revision" : "a08684c5004e2049c29f57a5938beae9695a1ef7", - "version" : "3.1.2" - } - }, - { - "identity" : "aws-crt-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/awslabs/aws-crt-swift", - "state" : { - "revision" : "6feec6c3787877807aa9a00fad09591b96752376", - "version" : "0.6.1" - } - }, - { - "identity" : "aws-sdk-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/awslabs/aws-sdk-swift.git", - "state" : { - "revision" : "24bae88a2391fe75da8a940a544d1ef6441f5321", - "version" : "0.13.0" - } - }, - { - "identity" : "clickstream-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/awslabs/clickstream-swift.git", - "state" : { - "revision" : "1708b7597ec014e25a00f5c724e58972e3f8328b", - "version" : "0.8.0" - } - }, - { - "identity" : "gzipswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/1024jp/GzipSwift", - "state" : { - "revision" : "7a7f17761c76a932662ab77028a4329f67d645a4", - "version" : "5.2.0" - } - }, - { - "identity" : "smithy-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/awslabs/smithy-swift", - "state" : { - "revision" : "7b28da158d92cd06a3549140d43b8fbcf64a94a6", - "version" : "0.15.0" - } - }, - { - "identity" : "sqlite.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/stephencelis/SQLite.swift.git", - "state" : { - "revision" : "5f5ad81ac0d0a0f3e56e39e646e8423c617df523", - "version" : "0.13.2" - } - }, - { - "identity" : "starscream", - "kind" : "remoteSourceControl", - "location" : "https://github.com/daltoniam/Starscream", - "state" : { - "revision" : "df8d82047f6654d8e4b655d1b1525c64e1059d21", - "version" : "4.0.4" - } - }, - { - "identity" : "swift-collections", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-collections", - "state" : { - "revision" : "a902f1823a7ff3c9ab2fba0f992396b948eda307", - "version" : "1.0.5" - } - }, - { - "identity" : "swift-log", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-log.git", - "state" : { - "revision" : "532d8b529501fb73a2455b179e0bbb6d49b652ed", - "version" : "1.5.3" - } - }, - { - "identity" : "xmlcoder", - "kind" : "remoteSourceControl", - "location" : "https://github.com/MaxDesiatov/XMLCoder.git", - "state" : { - "revision" : "b1e944cbd0ef33787b13f639a5418d55b3bed501", - "version" : "0.17.1" - } - } - ], - "version" : 2 -} diff --git a/react-native/ios/app/AppDelegate.mm b/react-native/ios/app/AppDelegate.mm index cc143fb..68438d7 100644 --- a/react-native/ios/app/AppDelegate.mm +++ b/react-native/ios/app/AppDelegate.mm @@ -1,7 +1,6 @@ #import "AppDelegate.h" #import #import "RNSplashScreen.h" // react-native-splash-screen -@import Clickstream; @implementation AppDelegate @@ -16,21 +15,6 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [RNSplashScreen show]; // react-native-splash-screen - NSError *error = nil; - [ClickstreamObjc initSDKAndReturnError:&error]; - - if (error) { - NSLog(@"Failed to initialize ClickstreamAnalytics: %@", error.localizedDescription); - } - ClickstreamContextConfiguration *configuration = [ClickstreamObjc getClickstreamConfigurationAndReturnError:&error]; - if (configuration) { - [configuration setIsLogEvents:true]; - [configuration setIsTrackScreenViewEvents:false]; - [configuration setIsTrackUserEngagementEvents:false]; - }else{ - NSLog(@"Failed to get configuration: %@", error.localizedDescription); - } - return YES; } diff --git a/react-native/package.json b/react-native/package.json index 426361b..d946529 100644 --- a/react-native/package.json +++ b/react-native/package.json @@ -58,6 +58,7 @@ "@react-navigation/native-stack": "^6.9.8", "@redux-devtools/extension": "^3.2.2", "@types/react": "^18", + "clickstream-react-native": "./clickstream-react-native-0.0.2.tgz", "dayjs": "^1.11.7", "i18n-js": "^3.8.0", "lodash": "^4.17.21", diff --git a/react-native/src/actions/MemberActions.ts b/react-native/src/actions/MemberActions.ts index a3fab99..5932b56 100644 --- a/react-native/src/actions/MemberActions.ts +++ b/react-native/src/actions/MemberActions.ts @@ -28,16 +28,18 @@ import { AppObject } from '../types' import { cacheMemberFollowing, cacheMemberInterestNodes, cacheMemberLikeTopicss } from './CacheAction' -import { NativeModules } from 'react-native' - -const { ClickstreamAnalytics } = NativeModules +import { ClickstreamAnalytics } from 'clickstream-react-native' export const myProfile = () => async (dispatch: Dispatch, getState: () => RootState) => { const _member = await ApiLib.member.myProfile() console.log('member:' + JSON.stringify(_member)) ClickstreamAnalytics.setUserId(_member.id.toString()) - ClickstreamAnalytics.addUserAttributes({ user_name: _member.username }) - ClickstreamAnalytics.recordEventWithName('login') + ClickstreamAnalytics.setUserAttributes({ + user_name: _member.username + }) + ClickstreamAnalytics.record({ + name: 'login' + }) dispatch({ type: MEMBER_PROFILE, payload: _member diff --git a/react-native/src/navigation/Navigator.tsx b/react-native/src/navigation/Navigator.tsx index 3e38fb1..78f8fe1 100755 --- a/react-native/src/navigation/Navigator.tsx +++ b/react-native/src/navigation/Navigator.tsx @@ -38,6 +38,8 @@ import SplashScreen from 'react-native-splash-screen' import '../components/actions-sheet' import NavigationService from './NavigationService' import { CommonScreenProps, RootStackParamList, ROUTES } from './routes' +import { ClickstreamAnalytics } from 'clickstream-react-native' + /** * dayjs */ @@ -339,6 +341,29 @@ const MainAppNavigator = () => { } const StackNavigator = createNativeStackNavigator() export const AppNavigationContainer = () => { + let mNavigationRef: NavigationContainerRefWithCurrent + let currentScreenName = '' + const recordScreenView = (name: string) => { + ClickstreamAnalytics.record({ + name: ClickstreamAnalytics.Event.SCREEN_VIEW, + attributes: { + [ClickstreamAnalytics.Attr.SCREEN_NAME]: name + } + }) + console.log('Recorded screen view: ' + name) + } + const onReady = () => { + recordScreenView('Hot') + } + + const onStateChange = () => { + const routeName = mNavigationRef?.getCurrentRoute()?.name + if (routeName && currentScreenName !== routeName) { + recordScreenView(routeName) + currentScreenName = routeName + } + } + const { token } = useAppSelector((state: RootState) => state.member) const { login: { tokenGeneratedLink } @@ -365,7 +390,10 @@ export const AppNavigationContainer = () => { ) => { NavigationService.setTopLevelNavigator(navigatorRef) + mNavigationRef = navigatorRef }} + onReady={onReady} + onStateChange={onStateChange} theme={{ dark: theme.name === 'dark', colors: { diff --git a/react-native/src/screens/my/Home.tsx b/react-native/src/screens/my/Home.tsx index 1e31f7f..515683e 100644 --- a/react-native/src/screens/my/Home.tsx +++ b/react-native/src/screens/my/Home.tsx @@ -11,11 +11,11 @@ import { SylCommon, useTheme } from '@src/theme' import { IState, AppObject } from '@src/types' import { linking } from '@src/utils' import React, { useEffect } from 'react' -import { NativeModules, ScrollView } from 'react-native' +import { ScrollView } from 'react-native' import { connect } from 'react-redux' import { Footer, HeaderButton, ProfileCard, SetStatusBar, TableList, TableRow } from '../components' +import { ClickstreamAnalytics } from 'clickstream-react-native' -const { ClickstreamAnalytics } = NativeModules const My = ({ navigation, app, @@ -51,16 +51,19 @@ const My = ({ text={translate('common.more')} onPress={() => { console.log('click_user_more') - ClickstreamAnalytics.recordEvent('button_click', { - location: 'user_more', - profile_url: profile?.url + ClickstreamAnalytics.record({ + name: 'button_click', + attributes: { + location: 'user_more', + profile_url: profile?.url + } }) - ClickstreamAnalytics.addGlobalAttributes({ + ClickstreamAnalytics.setGlobalAttributes({ user_name: 'test_username', test_global_attribute: 'test_global_attribute_value' }) - ClickstreamAnalytics.deleteGlobalAttributes(['test_global_attribute', 'location']) + ClickstreamAnalytics.deleteGlobalAttributes(['test_global_attribute']) ClickstreamAnalytics.disable() ClickstreamAnalytics.enable() navigation.navigate(ROUTES.WebViewer, { url: profile?.url }) diff --git a/react-native/yarn.lock b/react-native/yarn.lock index 468f1aa..4539f4c 100644 --- a/react-native/yarn.lock +++ b/react-native/yarn.lock @@ -3595,6 +3595,10 @@ cli-width@^3.0.0: resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +clickstream-react-native@./clickstream-react-native-0.0.2.tgz: + version "0.0.2" + resolved "./clickstream-react-native-0.0.2.tgz#0f700a2a1b37dcca7a3ec1cc9223a2caca49ddc1" + cliui@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" diff --git a/web/.gitignore b/web/.gitignore index 2d7ec5c..7b4dd92 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,2 +1,3 @@ .env node_modules/ +dist From a18d246afdf7e59cf02f012b6db42e0b6846daae Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 12:23:53 +0800 Subject: [PATCH 02/25] feat: add ios package resolved file --- .../xcshareddata/swiftpm/Package.resolved | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved b/react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..faa56a7 --- /dev/null +++ b/react-native/ios/app.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,122 @@ +{ + "pins" : [ + { + "identity" : "amplify-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/aws-amplify/amplify-swift.git", + "state" : { + "revision" : "abe8aae8d5e750147619ef2917c6219672c5e3cc", + "version" : "2.10.0" + } + }, + { + "identity" : "amplify-swift-utils-notifications", + "kind" : "remoteSourceControl", + "location" : "https://github.com/aws-amplify/amplify-swift-utils-notifications.git", + "state" : { + "revision" : "f970384ad1035732f99259255cd2f97564807e41", + "version" : "1.1.0" + } + }, + { + "identity" : "aws-appsync-realtime-client-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git", + "state" : { + "revision" : "a08684c5004e2049c29f57a5938beae9695a1ef7", + "version" : "3.1.2" + } + }, + { + "identity" : "aws-crt-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/awslabs/aws-crt-swift", + "state" : { + "revision" : "6feec6c3787877807aa9a00fad09591b96752376", + "version" : "0.6.1" + } + }, + { + "identity" : "aws-sdk-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/awslabs/aws-sdk-swift.git", + "state" : { + "revision" : "24bae88a2391fe75da8a940a544d1ef6441f5321", + "version" : "0.13.0" + } + }, + { + "identity" : "clickstream-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/awslabs/clickstream-swift.git", + "state" : { + "revision" : "1708b7597ec014e25a00f5c724e58972e3f8328b", + "version" : "0.8.0" + } + }, + { + "identity" : "gzipswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/1024jp/GzipSwift", + "state" : { + "revision" : "7a7f17761c76a932662ab77028a4329f67d645a4", + "version" : "5.2.0" + } + }, + { + "identity" : "smithy-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/awslabs/smithy-swift", + "state" : { + "revision" : "7b28da158d92cd06a3549140d43b8fbcf64a94a6", + "version" : "0.15.0" + } + }, + { + "identity" : "sqlite.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/stephencelis/SQLite.swift.git", + "state" : { + "revision" : "5f5ad81ac0d0a0f3e56e39e646e8423c617df523", + "version" : "0.13.2" + } + }, + { + "identity" : "starscream", + "kind" : "remoteSourceControl", + "location" : "https://github.com/daltoniam/Starscream", + "state" : { + "revision" : "df8d82047f6654d8e4b655d1b1525c64e1059d21", + "version" : "4.0.4" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections", + "state" : { + "revision" : "a902f1823a7ff3c9ab2fba0f992396b948eda307", + "version" : "1.0.5" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "532d8b529501fb73a2455b179e0bbb6d49b652ed", + "version" : "1.5.3" + } + }, + { + "identity" : "xmlcoder", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MaxDesiatov/XMLCoder.git", + "state" : { + "revision" : "b1e944cbd0ef33787b13f639a5418d55b3bed501", + "version" : "0.17.1" + } + } + ], + "version" : 2 +} From 2e8990930209efccadb506e430ca35760b1db38c Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 12:26:15 +0800 Subject: [PATCH 03/25] fix: change license in pr template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5503089..c2a62b4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -13,4 +13,4 @@ - [ ] PR title conforms to conventional commit style - [ ] If breaking change, documentation/changelog update with migration instructions -By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. +By submitting this pull request, I confirm that my contribution is made under the terms of the MIT-0 license. From aadd8229d2f30e1a48011e5a7a3f59d1f9816b96 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 12:29:59 +0800 Subject: [PATCH 04/25] fix: change build name for web --- .github/workflows/build-web.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 2e02b4b..76be75c 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -1,4 +1,4 @@ -name: Build for React Native +name: Build for Web on: push: From c4171cd085ee943712b346b197c193dfcbb2304e Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 13:21:00 +0800 Subject: [PATCH 05/25] fix: update build rn workflow --- .github/workflows/build-rn.yml | 10 +++++++--- react-native/package.json | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index b6266c0..1c8dc53 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Run build + - name: Run lint run: | cd react-native yarn @@ -28,7 +28,9 @@ jobs: cache: gradle - name: Build android apk run: | - cd react-native/android + cd react-native + yarn + cd android ./gradlew assembleDebug build-ios: @@ -38,7 +40,9 @@ jobs: - name: Build ios run: | sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' - cd react-native/ios + cd react-native + yarn + cd ios xcodebuild -resolvePackageDependencies echo "start build ios app" xcodebuild -workspace app.xcworkspace \ diff --git a/react-native/package.json b/react-native/package.json index d946529..1f889c6 100644 --- a/react-native/package.json +++ b/react-native/package.json @@ -17,7 +17,7 @@ "lint:style:fix": "prettier --write '**/*.{ts,js,jsx,tsx}'", "lint": "yarn lint:code && yarn lint:style", "lint:fix": "yarn lint:style:fix && yarn lint:code --fix", - "prepare": "if [[ $NODE_ENV != \"production\" ]]; then husky install; fi && patch-package", + "prepare": "patch-package", "p": "plop", "upgrade": "react-native upgrade", "check-dependencies": "rnx-dep-check", From 16736ef77fd9129bd57731aa59903bbfda44dc2f Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 14:13:28 +0800 Subject: [PATCH 06/25] fix: update clickstream swift sdk version --- .github/workflows/build-ios.yml | 10 +--------- .github/workflows/build-rn.yml | 9 +-------- .../xcshareddata/swiftpm/Package.resolved | 2 +- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index 299d624..56a848b 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -13,14 +13,6 @@ jobs: - uses: actions/checkout@v3 - name: Build ios run: | - sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' - xcode-select --print-path cd ios - xcodebuild -resolvePackageDependencies echo "start build ios app" - xcodebuild -scheme "ModerneShopping" \ - -archivePath $RUNNER_TEMP/ModerneShopping.xcarchive \ - -sdk iphoneos \ - -configuration Release \ - -destination generic/platform=iOS \ - clean archive | xcpretty + xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS clean archive | xcpretty diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 1c8dc53..6750c9c 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -39,15 +39,8 @@ jobs: - uses: actions/checkout@v3 - name: Build ios run: | - sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' cd react-native yarn cd ios - xcodebuild -resolvePackageDependencies echo "start build ios app" - xcodebuild -workspace app.xcworkspace \ - -scheme "app" \ - -sdk iphoneos \ - -configuration Release \ - -destination generic/platform=iOS \ - clean archive | xcpretty \ No newline at end of file + xcodebuild -scheme "app" -sdk iphoneos -configuration Release -destination generic/platform=iOS clean archive | xcpretty \ No newline at end of file diff --git a/ios/ModerneShopping.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/ModerneShopping.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 43ed3c3..cfb4c1f 100644 --- a/ios/ModerneShopping.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ios/ModerneShopping.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -51,7 +51,7 @@ "location" : "https://github.com/awslabs/clickstream-swift.git", "state" : { "branch" : "main", - "revision" : "32f44a86c1674f8375e2de903a6aeb21420bd4d7" + "revision" : "a2c331eed23b8441aedc6de4e2fba2d339bf35b7" } }, { From d3a6ab22a116e6148d9bc9fc9117136e6c600f65 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Tue, 2 Apr 2024 16:49:33 +0800 Subject: [PATCH 07/25] fix: use xcode-select to use Xcode 15.2 app --- .github/workflows/build-ios.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index 56a848b..e3bdc54 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -13,6 +13,9 @@ jobs: - uses: actions/checkout@v3 - name: Build ios run: | + sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' + xcode-select --print-path cd ios + xcodebuild -resolvePackageDependencies echo "start build ios app" xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS clean archive | xcpretty From 512c90d9219ad317ffdec04d9daa09527765a236 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Wed, 3 Apr 2024 11:22:20 +0800 Subject: [PATCH 08/25] fix: change sdk name, test build ios --- .github/workflows/build-ios.yml | 2 +- .../aws-clickstream-react-native-0.0.1.tgz | Bin 0 -> 41586 bytes react-native/clickstream-react-native-0.0.2.tgz | Bin 41574 -> 0 bytes react-native/index.js | 2 +- react-native/package.json | 2 +- react-native/src/actions/MemberActions.ts | 2 +- react-native/src/navigation/Navigator.tsx | 2 +- react-native/src/screens/my/Home.tsx | 2 +- react-native/yarn.lock | 8 ++++---- 9 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 react-native/aws-clickstream-react-native-0.0.1.tgz delete mode 100644 react-native/clickstream-react-native-0.0.2.tgz diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index e3bdc54..abb34c6 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -18,4 +18,4 @@ jobs: cd ios xcodebuild -resolvePackageDependencies echo "start build ios app" - xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS clean archive | xcpretty + xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS diff --git a/react-native/aws-clickstream-react-native-0.0.1.tgz b/react-native/aws-clickstream-react-native-0.0.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d6958b3cfb3ee975037cdfef6bcb951c595caf9f GIT binary patch literal 41586 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�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 G1Ox!X!VE+J literal 0 HcmV?d00001 diff --git a/react-native/clickstream-react-native-0.0.2.tgz b/react-native/clickstream-react-native-0.0.2.tgz deleted file mode 100644 index 9a98531d4f04e43e179c11f8fd0c91ac2975d4d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41574 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 z 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 async (dispatch: Dispatch, getState: () => RootState) => { const _member = await ApiLib.member.myProfile() diff --git a/react-native/src/navigation/Navigator.tsx b/react-native/src/navigation/Navigator.tsx index 78f8fe1..ca79858 100755 --- a/react-native/src/navigation/Navigator.tsx +++ b/react-native/src/navigation/Navigator.tsx @@ -38,7 +38,7 @@ import SplashScreen from 'react-native-splash-screen' import '../components/actions-sheet' import NavigationService from './NavigationService' import { CommonScreenProps, RootStackParamList, ROUTES } from './routes' -import { ClickstreamAnalytics } from 'clickstream-react-native' +import { ClickstreamAnalytics } from '@aws/clickstream-react-native' /** * dayjs diff --git a/react-native/src/screens/my/Home.tsx b/react-native/src/screens/my/Home.tsx index 515683e..6da5e60 100644 --- a/react-native/src/screens/my/Home.tsx +++ b/react-native/src/screens/my/Home.tsx @@ -14,7 +14,7 @@ import React, { useEffect } from 'react' import { ScrollView } from 'react-native' import { connect } from 'react-redux' import { Footer, HeaderButton, ProfileCard, SetStatusBar, TableList, TableRow } from '../components' -import { ClickstreamAnalytics } from 'clickstream-react-native' +import { ClickstreamAnalytics } from '@aws/clickstream-react-native' const My = ({ navigation, diff --git a/react-native/yarn.lock b/react-native/yarn.lock index 4539f4c..ddd8a26 100644 --- a/react-native/yarn.lock +++ b/react-native/yarn.lock @@ -15,6 +15,10 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" +"@aws/clickstream-react-native@./aws-clickstream-react-native-0.0.1.tgz": + version "0.0.1" + resolved "./aws-clickstream-react-native-0.0.1.tgz#6596e818bd607bc3967a5bf4731a6c4ff512aa94" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" @@ -3595,10 +3599,6 @@ cli-width@^3.0.0: resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -clickstream-react-native@./clickstream-react-native-0.0.2.tgz: - version "0.0.2" - resolved "./clickstream-react-native-0.0.2.tgz#0f700a2a1b37dcca7a3ec1cc9223a2caca49ddc1" - cliui@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" From e1dd857e17b9a80ca7d3dbe348692f8965262c9a Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Wed, 3 Apr 2024 15:28:03 +0800 Subject: [PATCH 09/25] fix: change to react native SDK 0.1.0 version, optimize ios build action --- .github/workflows/build-ios.yml | 2 +- .github/workflows/build-rn.yml | 2 +- .../aws-clickstream-react-native-0.0.1.tgz | Bin 41586 -> 0 bytes react-native/package.json | 2 +- react-native/yarn.lock | 7 ++++--- 5 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 react-native/aws-clickstream-react-native-0.0.1.tgz diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index abb34c6..5c55228 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -18,4 +18,4 @@ jobs: cd ios xcodebuild -resolvePackageDependencies echo "start build ios app" - xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS + xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 6750c9c..5c3135c 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -43,4 +43,4 @@ jobs: yarn cd ios echo "start build ios app" - xcodebuild -scheme "app" -sdk iphoneos -configuration Release -destination generic/platform=iOS clean archive | xcpretty \ No newline at end of file + xcodebuild -scheme "app" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO \ No newline at end of file diff --git a/react-native/aws-clickstream-react-native-0.0.1.tgz b/react-native/aws-clickstream-react-native-0.0.1.tgz deleted file mode 100644 index d6958b3cfb3ee975037cdfef6bcb951c595caf9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41586 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�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 G1Ox!X!VE+J diff --git a/react-native/package.json b/react-native/package.json index 0b4142e..f3e1727 100644 --- a/react-native/package.json +++ b/react-native/package.json @@ -48,7 +48,7 @@ }, "homepage": "https://v2hub.yycc.dev/", "dependencies": { - "@aws/clickstream-react-native": "./aws-clickstream-react-native-0.0.1.tgz", + "@aws/clickstream-react-native": "0.1.0", "@bugsnag/react-native": "7.18.2", "@react-native-async-storage/async-storage": "^1.17.11", "@react-native-masked-view/masked-view": "^0.2.8", diff --git a/react-native/yarn.lock b/react-native/yarn.lock index ddd8a26..92655b1 100644 --- a/react-native/yarn.lock +++ b/react-native/yarn.lock @@ -15,9 +15,10 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@aws/clickstream-react-native@./aws-clickstream-react-native-0.0.1.tgz": - version "0.0.1" - resolved "./aws-clickstream-react-native-0.0.1.tgz#6596e818bd607bc3967a5bf4731a6c4ff512aa94" +"@aws/clickstream-react-native@0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@aws/clickstream-react-native/-/clickstream-react-native-0.1.0.tgz#2dbbb71830af55a54b46d313952de53d59a551c2" + integrity sha512-rRQn+FY7x1lo4Zsw6V3tXTE78xBUB6yoQhNMDsucpJVQneIOJd+lPND8MCrhOtLgFzHvf4C8G5S6hFl77AuIdg== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.23.5": version "7.23.5" From cf415a9d7684f0f0e208f1e1464b534d6e6d742f Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Wed, 3 Apr 2024 16:03:01 +0800 Subject: [PATCH 10/25] fix: add pod install for react native ios build --- .github/workflows/build-ios.yml | 2 +- .github/workflows/build-rn.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index 5c55228..d4be698 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -18,4 +18,4 @@ jobs: cd ios xcodebuild -resolvePackageDependencies echo "start build ios app" - xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO + xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 5c3135c..1bbecab 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -41,6 +41,6 @@ jobs: run: | cd react-native yarn - cd ios + cd ios && pod install echo "start build ios app" xcodebuild -scheme "app" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO \ No newline at end of file From 1ecd327d05cb5fa1e22dd380b41bb0a204c5baf2 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Wed, 3 Apr 2024 17:17:44 +0800 Subject: [PATCH 11/25] feat: optimize readme and react native ios project build --- .github/workflows/build-rn.yml | 2 +- README.md | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 1bbecab..fa89a1e 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -43,4 +43,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -scheme "app" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file diff --git a/README.md b/README.md index 272c96d..b735038 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,17 @@ More references: License: [MIT](https://github.com/Djallil14/SwiftUI-FakeShopping-App/blob/main/LICENSE.md) -## React-Native Example +## React Native SDK Example React-Native example app **v2ex** is forked from https://github.com/funnyzak/react-native-v2ex. To get started with the React-Native example, refer to the [React-Native Example README](react-native/README.md). -You can refer this [PR](https://github.com/aws-samples/clickstream-sdk-samples/pull/8/files) to learn how to integrate Clickstream Android and Swift SDK into react-native app. +Please refer this [PR](https://github.com/aws-samples/clickstream-sdk-samples/pull/25/files#diff-92545e618a4ce920ced0c68cb0dd77f476ad4613261b41b57e3d41e8ab84a4e8R12-R19) to learn how to integrate Clickstream React Native SDK into your app. + +You can also refer this [PR](https://github.com/aws-samples/clickstream-sdk-samples/pull/8/files) to learn how to manually integrate Clickstream Android and Swift SDK into react native app. + +### Record screen views when using React Navigation +Here's an example of globally logging React Native screen view events when using React Navigation 6.x: +https://github.com/aws-samples/clickstream-sdk-samples/pull/25/files#diff-96a74db413b2f02988e5537fdbdf4f307334e8f5ef3a9999df7de3c6785af75bR344-R397 + License: [Apache-2.0](https://github.com/funnyzak/react-native-v2ex/blob/dev/LICENSE) From a92e79f823d16acc0f5999eb797c6625c0aea6aa Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Wed, 3 Apr 2024 17:19:26 +0800 Subject: [PATCH 12/25] feat: add example link in readme --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index b735038..c22b3e9 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,7 @@ Please refer this [PR](https://github.com/aws-samples/clickstream-sdk-samples/pu You can also refer this [PR](https://github.com/aws-samples/clickstream-sdk-samples/pull/8/files) to learn how to manually integrate Clickstream Android and Swift SDK into react native app. ### Record screen views when using React Navigation -Here's an example of globally logging React Native screen view events when using React Navigation 6.x: -https://github.com/aws-samples/clickstream-sdk-samples/pull/25/files#diff-96a74db413b2f02988e5537fdbdf4f307334e8f5ef3a9999df7de3c6785af75bR344-R397 - +Here's an [example](https://github.com/aws-samples/clickstream-sdk-samples/pull/25/files#diff-96a74db413b2f02988e5537fdbdf4f307334e8f5ef3a9999df7de3c6785af75bR344-R397) of globally logging React Native screen view events when using React Navigation 6.x: License: [Apache-2.0](https://github.com/funnyzak/react-native-v2ex/blob/dev/LICENSE) From d1ba60ca04f5a9406cc2426c086495654a324430 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 09:37:27 +0800 Subject: [PATCH 13/25] fix: add exit code for build rn-ios --- .github/workflows/build-rn.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index fa89a1e..210b24b 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -43,4 +43,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty --exit-code \ No newline at end of file From 260442572fd60129cc82c87072c6994b33c3c9ba Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 10:30:55 +0800 Subject: [PATCH 14/25] fix: upgrade clickstream version and Compatible with Swift version 5 --- .github/workflows/build-rn.yml | 2 +- react-native/package.json | 2 +- react-native/yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 210b24b..fa89a1e 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -43,4 +43,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty --exit-code \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file diff --git a/react-native/package.json b/react-native/package.json index f3e1727..eb0b6d4 100644 --- a/react-native/package.json +++ b/react-native/package.json @@ -48,7 +48,7 @@ }, "homepage": "https://v2hub.yycc.dev/", "dependencies": { - "@aws/clickstream-react-native": "0.1.0", + "@aws/clickstream-react-native": "0.1.1", "@bugsnag/react-native": "7.18.2", "@react-native-async-storage/async-storage": "^1.17.11", "@react-native-masked-view/masked-view": "^0.2.8", diff --git a/react-native/yarn.lock b/react-native/yarn.lock index 92655b1..7ba6c51 100644 --- a/react-native/yarn.lock +++ b/react-native/yarn.lock @@ -15,10 +15,10 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@aws/clickstream-react-native@0.1.0": - version "0.1.0" - resolved "https://registry.npmjs.org/@aws/clickstream-react-native/-/clickstream-react-native-0.1.0.tgz#2dbbb71830af55a54b46d313952de53d59a551c2" - integrity sha512-rRQn+FY7x1lo4Zsw6V3tXTE78xBUB6yoQhNMDsucpJVQneIOJd+lPND8MCrhOtLgFzHvf4C8G5S6hFl77AuIdg== +"@aws/clickstream-react-native@0.1.1": + version "0.1.1" + resolved "https://registry.npmjs.org/@aws/clickstream-react-native/-/clickstream-react-native-0.1.1.tgz#227daaba2bebbbd8cef79efe1b3ed689420ee703" + integrity sha512-FWOgDh/vf0eOVVeBbzRjrcvwBq3mwieBtMw5efZeU1VrUEw63lvgixT2vufc2cNW/rLpSnwCVIM+dehJAIR4vg== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.23.5": version "7.23.5" From 3277babd4f3175cad79913d8912d0c592debaf95 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 11:46:52 +0800 Subject: [PATCH 15/25] fix: add xcode version 15.2 to build rn-ios --- .github/workflows/build-rn.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index fa89a1e..d962d62 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -39,6 +39,8 @@ jobs: - uses: actions/checkout@v3 - name: Build ios run: | + sudo xcode-select -s '/Applications/Xcode_15.2.app/Contents/Developer' + xcode-select --print-path cd react-native yarn cd ios && pod install From be2ce69ea773ab7646db3df206fc0361f7c68f89 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 14:07:16 +0800 Subject: [PATCH 16/25] fix: add clang --- .github/workflows/build-rn.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index d962d62..0a6a458 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -45,4 +45,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ clean archive | xcpretty \ No newline at end of file From 58de834c088294f534b01f042dd3194b20ac61eb Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 14:35:08 +0800 Subject: [PATCH 17/25] fix: remove unary binary function and fix ios build issue --- .github/workflows/build-rn.yml | 2 +- react-native/ios/Podfile | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 0a6a458..d962d62 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -45,4 +45,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ clean archive | xcpretty \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file diff --git a/react-native/ios/Podfile b/react-native/ios/Podfile index cbd444c..361a3a7 100644 --- a/react-native/ios/Podfile +++ b/react-native/ios/Podfile @@ -72,7 +72,12 @@ target 'app' do # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'] + end + end __apply_Xcode_12_5_M1_post_install_workaround(installer) __apply_Xcode_14_3_RC_post_install_workaround(installer) end -end \ No newline at end of file +end From 9dc0504923c952c2cb1d6e5d11c7c75230add253 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 15:01:40 +0800 Subject: [PATCH 18/25] fix: optimize ios build --- .github/workflows/build-rn.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index d962d62..f9802a7 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -45,4 +45,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time clean archive | xcpretty \ No newline at end of file From 9f4d926ae691621b4eeaaedcf11ac6f167dba824 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 15:18:27 +0800 Subject: [PATCH 19/25] fix: remove gcc compile option and optimize ios build --- .github/workflows/build-rn.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index f9802a7..d962d62 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -45,4 +45,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time clean archive | xcpretty \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file From f77825239b2e3fb845b167cb19b796fccb10cb31 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 15:25:12 +0800 Subject: [PATCH 20/25] fix: test build with fail --- .github/workflows/build-rn.yml | 2 +- react-native/ios/Podfile | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index d962d62..86f11d9 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -45,4 +45,4 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty \ No newline at end of file + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty --no-color --report junit \ No newline at end of file diff --git a/react-native/ios/Podfile b/react-native/ios/Podfile index 361a3a7..5fe3e42 100644 --- a/react-native/ios/Podfile +++ b/react-native/ios/Podfile @@ -72,11 +72,6 @@ target 'app' do # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'] - end - end __apply_Xcode_12_5_M1_post_install_workaround(installer) __apply_Xcode_14_3_RC_post_install_workaround(installer) end From 1af08074dc0b16813899396087d8e095138d39b5 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Sun, 7 Apr 2024 15:25:27 +0800 Subject: [PATCH 21/25] fix: test build success --- react-native/ios/Podfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/react-native/ios/Podfile b/react-native/ios/Podfile index 5fe3e42..361a3a7 100644 --- a/react-native/ios/Podfile +++ b/react-native/ios/Podfile @@ -72,6 +72,11 @@ target 'app' do # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'] + end + end __apply_Xcode_12_5_M1_post_install_workaround(installer) __apply_Xcode_14_3_RC_post_install_workaround(installer) end From ce67843045c62df0643894bdbea49003f097efde Mon Sep 17 00:00:00 2001 From: Xiaowei Zhu <33129495+zhu-xiaowei@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:11:00 +0800 Subject: [PATCH 22/25] ci: Update build-rn.yml --- .github/workflows/build-rn.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-rn.yml b/.github/workflows/build-rn.yml index 86f11d9..c04cca6 100644 --- a/.github/workflows/build-rn.yml +++ b/.github/workflows/build-rn.yml @@ -45,4 +45,5 @@ jobs: yarn cd ios && pod install echo "start build ios app" - xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty --no-color --report junit \ No newline at end of file + set -o pipefail + xcodebuild -workspace app.xcworkspace -scheme app -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty From 03d75362d017958078b93650b214dc4186f1011d Mon Sep 17 00:00:00 2001 From: Xiaowei Zhu <33129495+zhu-xiaowei@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:13:07 +0800 Subject: [PATCH 23/25] ci: Update Podfile test build fail --- react-native/ios/Podfile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/react-native/ios/Podfile b/react-native/ios/Podfile index 361a3a7..5fe3e42 100644 --- a/react-native/ios/Podfile +++ b/react-native/ios/Podfile @@ -72,11 +72,6 @@ target 'app' do # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'] - end - end __apply_Xcode_12_5_M1_post_install_workaround(installer) __apply_Xcode_14_3_RC_post_install_workaround(installer) end From 02abf839146b5fd0697ab8df45b9cc3ac57d3a14 Mon Sep 17 00:00:00 2001 From: Xiaowei Zhu <33129495+zhu-xiaowei@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:30:20 +0800 Subject: [PATCH 24/25] ci: revert pod file --- react-native/ios/Podfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/react-native/ios/Podfile b/react-native/ios/Podfile index 5fe3e42..361a3a7 100644 --- a/react-native/ios/Podfile +++ b/react-native/ios/Podfile @@ -72,6 +72,11 @@ target 'app' do # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'] + end + end __apply_Xcode_12_5_M1_post_install_workaround(installer) __apply_Xcode_14_3_RC_post_install_workaround(installer) end From db847019f168b7906b93fd75e1860344cf0c5072 Mon Sep 17 00:00:00 2001 From: Xiaowei Zhu <33129495+zhu-xiaowei@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:32:00 +0800 Subject: [PATCH 25/25] ci: add pipe fail for build-ios --- .github/workflows/build-ios.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index d4be698..b4a311c 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -18,4 +18,5 @@ jobs: cd ios xcodebuild -resolvePackageDependencies echo "start build ios app" + set -o pipefail xcodebuild -scheme "ModerneShopping" -sdk iphoneos -configuration Release -destination generic/platform=iOS CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO clean archive | xcpretty