diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml new file mode 100644 index 000000000..aa7a13d70 --- /dev/null +++ b/.github/workflows/build-ios.yml @@ -0,0 +1,79 @@ +name: build-ios +on: + workflow_call: + inputs: + screenshot: + type: string + required: true + ipa: + description: 'Run IPA build' + type: string + required: true + workflow_dispatch: + inputs: + screenshot: + description: 'Run screenshot build' + type: choice + options: ['true', 'false'] + required: true + ipa: + description: 'Run IPA build' + type: choice + options: ['true', 'false'] + required: true + + +jobs: + build-ios: + runs-on: macos-latest + timeout-minutes: 20 + defaults: + run: + working-directory: ios + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - run: 'echo "$API_KEY" | base64 --decode > AuthKey.p8' + shell: bash + env: + API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }} + + - run: bundle install + + - run: bundle exec fastlane versioning + + - name: Flutter + uses: subosito/flutter-action@v2 + with: + cache: true + cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' + cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" + - run: flutter build ios --simulator --target=integration_test/screenshot_test.dart + if: ${{ inputs.screenshot == 'true' }} + + - name: Archive integration ipa + if: ${{ inputs.screenshot == 'true' }} + uses: actions/upload-artifact@v4 + with: + name: app-simulator-build + path: build/ios/iphonesimulator/Runner.app + if-no-files-found: error + retention-days: 3 + + # Build ios Release + - run: flutter build ios --release --config-only --no-codesign --target=lib/main.dart + if: ${{ inputs.ipa == 'true' }} + + - run: bundle exec fastlane build + if: ${{ inputs.ipa == 'true' }} + + - name: Archive ipa + if: ${{ inputs.ipa == 'true' }} + uses: actions/upload-artifact@v4 + with: + name: Runner.ipa + path: ios/Runner.ipa + if-no-files-found: error + retention-days: 3 \ No newline at end of file diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index ce96b903c..971c48db3 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -28,7 +28,7 @@ jobs: - run: flutter analyze - run: flutter test - build_debug_apk: + build_apk: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -40,11 +40,18 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} - cache: true + cache: false - run: flutter pub get + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@main + with: + # this might remove tools that are actually needed, + # if set to "true" but frees about 6 GB + tool-cache: false + android: false - run: flutter build apk --debug - build_debug_web: + build_web: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -52,7 +59,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} - cache: true + cache: false - run: flutter pub get - name: Prepare web run: ./scripts/prepare-web.sh @@ -90,4 +97,4 @@ jobs: xcode-version: latest - run: brew install sqlcipher - run: flutter pub get - - run: flutter build ios --no-codesign + - run: flutter build ipa --no-codesign diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index a697f9207..2b0eb6f16 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -93,3 +93,62 @@ jobs: run: flutter pub get - name: Update sentry run: flutter packages pub run sentry_dart_plugin + + deploy_playstore_internal: + environment: staging + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: cat .github/workflows/versions.env >> $GITHUB_ENV + - uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'zulu' + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.FLUTTER_VERSION }} + cache: true + - name: Set up Android SDK + if: ${{ env.ACT }} # Only run on local act setups, as GitHub Actions provides the Android SDK on Ubuntu + uses: android-actions/setup-android@v2 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.3' + - name: Install Fastlane + run: gem install fastlane -NV + - name: Remove Emoji Font + run: | + rm -rf fonts/NotoEmoji + yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml + - run: flutter pub get + - name: Prepare Android Release Build + env: + PLAY_STORE_UPLOAD_KEY: ${{ secrets.PLAY_STORE_UPLOAD_KEY }} + PLAY_STORE_KEYSTORE_KEY_ALIAS: ${{ secrets.PLAY_STORE_KEYSTORE_KEY_ALIAS }} + PLAY_STORE_KEYSTORE_STORE_PASSWORD: ${{ secrets.PLAY_STORE_KEYSTORE_STORE_PASSWORD }} + PLAY_STORE_KEYSTORE_KEY_PASSWORD: ${{ secrets.PLAY_STORE_KEYSTORE_KEY_PASSWORD }} + PLAY_STORE_CONFIG_JSON: ${{ secrets.PLAY_STORE_CONFIG_JSON }} + run: ./scripts/prepare-android-release.sh + - name: Build Android Release + run: flutter build appbundle --target-platform android-arm,android-arm64,android-x64 + - name: Deploy Android Release + run: | + mkdir -p build/android + cp build/app/outputs/bundle/release/app-release.aab build/android/ + cd android + bundle install + bundle update fastlane + bundle exec fastlane deploy_internal_test + if [[ $GITHUB_REF_NAME == rc* ]]; then + bundle exec fastlane deploy_candidate + else + bundle exec fastlane deploy_release + fi + cd .. + + deploy_ios_testflight: # stashed on old.yml + environment: staging + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 \ No newline at end of file diff --git a/.github/workflows/old.yml b/.github/workflows/old.yml index a701797de..62d57416b 100644 --- a/.github/workflows/old.yml +++ b/.github/workflows/old.yml @@ -10,101 +10,35 @@ concurrency: cancel-in-progress: true jobs: - build_staging: - runs-on: ubuntu-latest + deploy_ios_internal: + runs-on: macos-latest environment: staging steps: - - uses: actions/checkout@v2 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env + - uses: actions/checkout@v4 + - run: cat ../.github/workflows/versions.env >> $GITHUB_ENV - - name: Set up Flutter + - name: Flutter uses: subosito/flutter-action@v2 with: - flutter-version: ${{ env.FLUTTER_VERSION }} + cache: true + cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' + cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" - - name: Prepare web - run: ./scripts/prepare-web.sh + # Build ios Release + - run: flutter build ios --release --config-only --no-codesign --target=lib/main.dart - - name: Build web - run: ./scripts/build-web.sh - - - name: Upload artifacts - uses: actions/upload-artifact@v2 - with: - name: web-artifact - path: ./build/web - - upload_sentry: - runs-on: ubuntu-latest - needs: build_staging - - steps: - - uses: actions/checkout@v2 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - - name: Build web - run: ./scripts/upload-sentry.sh - - deploy_staging: - runs-on: ubuntu-latest - needs: build_staging - - steps: - - uses: actions/checkout@v2 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - - name: Set up AWS CLI - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ secrets.AWS_DEFAULT_REGION }} - - - name: Download all workflow run artifacts - uses: actions/download-artifact@v3 - - build_production: - runs-on: ubuntu-latest - environment: production - steps: - - uses: actions/checkout@v2 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - - - name: Set up Flutter - uses: subosito/flutter-action@v2 - with: - flutter-version: ${{ env.FLUTTER_VERSION }} - - - name: Prepare web - run: ./scripts/prepare-web.sh - - - name: Build web - run: ./scripts/build-web.sh - - - name: Upload artifacts - uses: actions/upload-artifact@v2 - with: - name: web-artifact - path: ./build/web - - deploy_production: - environment: production - runs-on: ubuntu-latest - needs: build_production - - steps: - - uses: actions/checkout@v2 - - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - - - name: Download all workflow run artifacts - uses: actions/download-artifact@v3 - - - name: Set up AWS CLI - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ secrets.AWS_DEFAULT_REGION }} + - name: Deploy ios + run: | + mkdir -p build/ios + cp build/app/outputs/bundle/release/app-release.aab build/ios/ + cd ios + bundle install + bundle update fastlane + cd .. + - name: Execute fastlane signing + env: + APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} + APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} + APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64: ${{ secrets.APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64 }} + APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} + run: bundle exec fastlane ios beta \ No newline at end of file diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e95b08ef9..fc1cfe4a2 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -102,7 +102,7 @@ jobs: with: upload_url: ${{ github.event.release.upload_url }} asset_path: build/app/outputs/apk/release/app-release.apk - asset_name: fluffychat.apk + asset_name: pangeachat.apk asset_content_type: application/vnd.android.package-archive build_linux: @@ -122,15 +122,15 @@ jobs: - run: ./flutter/bin/flutter pub get - run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }} - name: Create archive - run: tar -czf fluffychat-linux-${{ matrix.arch }}.tar.gz -C build/linux/${{ matrix.arch }}/release/bundle/ . + run: tar -czf pangeachat-linux-${{ matrix.arch }}.tar.gz -C build/linux/${{ matrix.arch }}/release/bundle/ . - name: Upload to release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} - asset_path: fluffychat-linux-${{ matrix.arch }}.tar.gz - asset_name: fluffychat-linux-${{ matrix.arch }}.tar.gz + asset_path: pangeachat-linux-${{ matrix.arch }}.tar.gz + asset_name: pangeachat-linux-${{ matrix.arch }}.tar.gz asset_content_type: application/gzip deploy_playstore: diff --git a/.github/workflows/upload-release-ios.yml b/.github/workflows/upload-release-ios.yml new file mode 100644 index 000000000..aa70cd9ca --- /dev/null +++ b/.github/workflows/upload-release-ios.yml @@ -0,0 +1,39 @@ +name: upload-release-ios +on: + workflow_call: + inputs: + new_release: + required: true + type: string + description: "The new release version number" + new_release_notes: + required: true + type: string + description: "The release notes for the new release" + +jobs: + build: + runs-on: macos-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Download app + uses: actions/download-artifact@v4 + with: + name: Runner.ipa + path: ios/ + + - run: 'echo "$API_KEY" | base64 --decode > AuthKey.p8' + shell: bash + env: + API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }} + + - run: bundle install + + - run: bundle exec fastlane upload_testflight + env: + RELEASE_NOTES: ${{ inputs.new_release_notes }} + - run: bundle exec fastlane upload_metadata_app_store \ No newline at end of file diff --git a/.gitignore b/.gitignore index 534baafd5..62b5cdcf1 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,10 @@ .history .svn/ prime +# act; local github actions +*.secrets +# Android keys file +keys.json !/public/.env *.env.local_choreo *.env.prod diff --git a/android/app/build.gradle b/android/app/build.gradle index 79df0e75d..2bd886d46 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -30,6 +30,8 @@ if (keystorePropertiesFile.exists()) { } android { + ndkVersion = "25.1.8937393" + namespace "com.talktolearn.chat" compileSdkVersion 34 sourceSets { diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 804cd4b2b..771a88826 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -30,7 +30,7 @@ platform :android do config = File.read("./pubspec.yaml") version_name = config.match(re).captures - subst = "version: #{version_name[0]}+#{last_version+2}" + subst = "version: #{version_name[0]}+#{last_version+1}" result = config.gsub(re, subst) diff --git a/android/fastlane/metadata/android/en-US/changelogs/2324 (1.6.0).txt b/android/fastlane/metadata/android/en-US/changelogs/2324 (1.6.0).txt deleted file mode 100644 index b2318505f..000000000 --- a/android/fastlane/metadata/android/en-US/changelogs/2324 (1.6.0).txt +++ /dev/null @@ -1,68 +0,0 @@ -FluffyChat 1.6.0 features a lot of bug fixes and improvements. The code base has been -simplified and the drawer on the chat list page got a come-back. Some new features like -the space hierarchy and session dump have been implemented. - -- feat: Added monochrome entry for themed icon support in Android 13 (James Reilly) -- feat: Display timeline of messages in android notification (Christian Pauly) -- feat: Emoji related fixes (TheOneWithTheBraid) -- feat: Implement deleting pushers in app (Christian Pauly) -- feat: New material 3 design (Christian Pauly) -- feat: Redesign bootsstrap and offer secure storage support (Christian Pauly) -- feat: Send multiple images at once (Christian Pauly) -- feat: implement session dump (TheOneWithTheBraid) -- feat: implement space hierarchy (TheOneWithTheBraid) -- feat: introduce extended integration tests (TheOneWithTheBraid) -- feat: libhandy integration (TheOneWithTheBraid) -- fix: Clearing push triggered when only one room got seen (Christian Pauly) -- fix: Dont display loading dialog when adding reaction (Christian Pauly) -- fix: Follow up for spaces hierarchy (TheOneWithTheBraid) -- fix: Missing null checks in chat details view (Christian Pauly) -- fix: Non FCM Android builds crash on start (Christian Pauly) -- fix: Permission chooser dialog on iOS (Christian Pauly) -- fix: Set avatar on only single action available (Christian Pauly) -- fix: Sharing on iOS and iPad (Christian Pauly) -- fix: Unread bubble is invisible in dark mode (Christian Pauly) -- fix: appimage builds (TheOneWithTheBraid) -- fix: only use custom http client on android (Jayesh Nirve) -- fix: pass isrg cert to http client (Jayesh Nirve) -- refactor: Chat view (Christian Pauly) -- refactor: Encryption button (Christian Pauly) -- refactor: Remove duplicated imports (Christian Pauly) -- refactor: Remove legacy store (Christian Pauly) -- refactor: Remove presence status feature (Christian Pauly) -- refactor: Simplify MxcImage and replace CachedNetworkImage (Christian Pauly) -- refactor: Switch to Hive Collections DB (Christian Pauly) -- refactor: move start chat FAB to implementation file (TheOneWithTheBraid) -- Translated using Weblate (Catalan) (Alfonso Montero López) -- Translated using Weblate (Catalan) (Auri B.P) -- Translated using Weblate (Chinese (Simplified)) (Eric) -- Translated using Weblate (Croatian) (Milo Ivir) -- Translated using Weblate (Dutch) (Jelv) -- Translated using Weblate (English) (Raatty) -- Translated using Weblate (Estonian) (Priit Jõerüüt) -- Translated using Weblate (Finnish) (Aminda Suomalainen) -- Translated using Weblate (Galician) (Xosé M) -- Translated using Weblate (Indonesian) (Linerly) -- Translated using Weblate (Persian) (Amir Hossein Maher) -- Translated using Weblate (Polish) (Przemysław Romanik) -- Translated using Weblate (Russian) (Nikita Epifanov) -- Translated using Weblate (Turkish) (Oğuz Ersen) -- Translated using Weblate (Ukrainian) (Ihor Hordiichuk) -- chore: Add border to avatars (Christian Pauly) -- chore: Add fancy hero animations (Christian Pauly) -- chore: Adjust appbar design (Christian Pauly) -- chore: Adjust design (Christian Pauly) -- chore: Adjust search bar design (Christian Pauly) -- chore: Always display header elevation in chat (Christian Pauly) -- chore: Design follow up fixes (Christian Pauly) -- chore: Design follow up fixes (Christian Pauly) -- chore: Disable integration tests without runners (Krille Fear) -- chore: Enhance invitiation UX (Christian Pauly) -- chore: Make push helper more fail safe (Christian Pauly) -- chore: Make push helper more stable (Christian Pauly) -- chore: Minor design improvements (Christian Pauly) -- chore: Pinned events design (Christian Pauly) -- chore: Remove permission handler dependency and increase compileSdkVersion (Christian Pauly) -- chore: Switch to flutter 3.0.5 (Krille Fear) -- chore: Update SDK (Christian Pauly) -- chore: remove snapping sheet (TheOneWithTheBraid) \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/changelogs/50 (0.22.1).txt b/android/fastlane/metadata/android/en-US/changelogs/50 (0.22.1).txt deleted file mode 100644 index 10f77f4f9..000000000 --- a/android/fastlane/metadata/android/en-US/changelogs/50 (0.22.1).txt +++ /dev/null @@ -1 +0,0 @@ -Check out https://gitlab.com/ChristianPauly/fluffychat-flutter/-/blob/main/CHANGELOG.md for the changelog. \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/full_description.txt b/android/fastlane/metadata/android/en-US/full_description.txt index 64d6b1cef..cbc19a871 100644 --- a/android/fastlane/metadata/android/en-US/full_description.txt +++ b/android/fastlane/metadata/android/en-US/full_description.txt @@ -1,32 +1 @@ -FluffyChat is an open, nonprofit and cute Matrix messenger app for Ubuntu Touch, Android and iOS. - -Open -Opensource and open development where everyone can join. - -Nonprofit -FluffyChat is donation funded. - -Cute ♥ -Cute design and many theme settings including a dark mode. - -One-to-one and group chats -Unlimited groups and direct chats. - -Easy -FluffyChat is made as simple to use as possible. - -Free -Free to use for everyone without ads. - -Decentralized -There is no "FluffyChat server" you are forced to use. Use the server you find trustworthy or host your own. - -Compatible -Compatible with Element, Fractal, Nheko and all Matrix messengers. - - -FluffyChat comes with a dream - -Imagine a world where everyone can choose the messenger they like and is still able to chat with all of their friends. -A world where there are no companies spying on you when you send selfies to friends and your loved. -And a world where apps are made for fluffyness and not for profit. ♥ +Real conversation is the best way to learn a language, and students don't need years of study before they do it. Even if they are just beginning, with Pangea Chat they can start using their new language from day one! \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/images/featureGraphic.png b/android/fastlane/metadata/android/en-US/images/featureGraphic.png deleted file mode 100644 index bafa74332..000000000 Binary files a/android/fastlane/metadata/android/en-US/images/featureGraphic.png and /dev/null differ diff --git a/android/fastlane/metadata/android/en-US/images/icon.png b/android/fastlane/metadata/android/en-US/images/icon.png index 3c730b97b..19a6f9a72 100644 Binary files a/android/fastlane/metadata/android/en-US/images/icon.png and b/android/fastlane/metadata/android/en-US/images/icon.png differ diff --git a/android/fastlane/metadata/android/en-US/short_description.txt b/android/fastlane/metadata/android/en-US/short_description.txt index 6d45532e9..8b1e26136 100644 --- a/android/fastlane/metadata/android/en-US/short_description.txt +++ b/android/fastlane/metadata/android/en-US/short_description.txt @@ -1 +1 @@ -Chat with your friends with FluffyChat. \ No newline at end of file +Learn a language while texting your friends! \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/title.txt b/android/fastlane/metadata/android/en-US/title.txt index df1e0546e..49c120f7f 100644 --- a/android/fastlane/metadata/android/en-US/title.txt +++ b/android/fastlane/metadata/android/en-US/title.txt @@ -1 +1 @@ -FluffyChat \ No newline at end of file +PangeaChat \ No newline at end of file diff --git a/android/settings.gradle b/android/settings.gradle index b2fd960a7..eea4c7e1d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -16,10 +16,22 @@ pluginManagement { } } +buildscript { + repositories { + mavenCentral() + maven { + url = uri("https://storage.googleapis.com/r8-releases/raw") + } + } + dependencies { + classpath("com.android.tools:r8:8.2.24") + } +} + plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.1.2" apply false - id "org.jetbrains.kotlin.android" version "1.8.0" apply false + id "com.android.application" version "7.1.3" apply false + id "org.jetbrains.kotlin.android" version "2.0.21" apply false // id "com.google.gms.google-services" version "4.3.8" apply false } diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 75fbd4bff..6b1c9350e 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -202,4 +202,4 @@ DEPENDENCIES fastlane BUNDLED WITH - 2.1.4 + 2.1.4 \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile index 4c88a1141..ffafc1fa9 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,6 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '13.0' - +platform :ios, '16.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -54,6 +53,7 @@ post_install do |installer| # see https://github.com/flutter-webrtc/flutter-webrtc/issues/1054 config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = 'arm64 i386' + config.build_settings["CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES"] = 'YES' config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 892d8d0b2..20f9bc7b2 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,13 +8,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 18EB8101724ECEB31DC90D37 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4823A1A443F8115651A6C0E8 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 609046320A2D7D2B0D36583B /* Pods_FluffyChat_Share.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9EB6E6475A19949A37A2634 /* Pods_FluffyChat_Share.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - AB0F2865DE230DE37373E0E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50DEFC207B70632D9C56ED78 /* Pods_Runner.framework */; }; C1005C45261071B5002F4F32 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1005C44261071B5002F4F32 /* ShareViewController.swift */; }; C1005C48261071B5002F4F32 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1005C46261071B5002F4F32 /* MainInterface.storyboard */; }; C1005C4C261071B5002F4F32 /* FluffyChat Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C1005C42261071B5002F4F32 /* FluffyChat Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -65,7 +65,7 @@ 58F7B95D036AD8E67B27588D /* Pods-FluffyChat Share.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FluffyChat Share.profile.xcconfig"; path = "Target Support Files/Pods-FluffyChat Share/Pods-FluffyChat Share.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 76737C9A857D5FD6D2634A3F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 759F206BF204861B5B71F335 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -74,7 +74,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9DB2F3524376810E74C799A8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; C1005C42261071B5002F4F32 /* FluffyChat Share.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "FluffyChat Share.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; C1005C44261071B5002F4F32 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; C1005C47261071B5002F4F32 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; @@ -93,7 +92,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AB0F2865DE230DE37373E0E0 /* Pods_Runner.framework in Frameworks */, + 18EB8101724ECEB31DC90D37 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -136,7 +135,7 @@ C1005C43261071B5002F4F32 /* FluffyChat Share */, 97C146EF1CF9000F007C117D /* Products */, E89DCAC000D371640E94E65B /* Pods */, - 075EE1BE25359E34308E0B78 /* Frameworks */, + E4B51FC6310E8231ADAAC605 /* Frameworks */, ); sourceTree = ""; }; @@ -178,6 +177,14 @@ path = "FluffyChat Share"; sourceTree = ""; }; + E4B51FC6310E8231ADAAC605 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4823A1A443F8115651A6C0E8 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; E89DCAC000D371640E94E65B /* Pods */ = { isa = PBXGroup; children = ( @@ -198,7 +205,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8C9CCA7C5C45651F90C7BFDD /* [CP] Check Pods Manifest.lock */, + 57BA887B93F55975BC09DE22 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -300,21 +307,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 064CBD7CE0D4CD6850C6880A /* [CP] Copy Pods Resources */ = { + 1060C2E30AD33D0478B4AC6F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -355,7 +362,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 8C9CCA7C5C45651F90C7BFDD /* [CP] Check Pods Manifest.lock */ = { + 57BA887B93F55975BC09DE22 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -392,21 +399,21 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; - F9C8EE392B9AB471149C306E /* [CP] Embed Pods Frameworks */ = { + AC8E42A36E415621723720E8 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -472,6 +479,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; diff --git a/ios/fastlane/Appfile b/ios/fastlane/Appfile index 86dcebf86..a4842141a 100644 --- a/ios/fastlane/Appfile +++ b/ios/fastlane/Appfile @@ -1,8 +1,8 @@ -app_identifier("im.fluffychat.app") # The bundle identifier of your app -apple_id("christian-kussowski@posteo.de") # Your Apple email address +app_identifier("com.talktolearn.chat") # The bundle identifier of your app +apple_id("wcjord@email.wm.edu") # Your Apple email address -itc_team_id("122628977") # App Store Connect Team ID -team_id("4NXF6Z997G") # Developer Portal Team ID +itc_team_id("118720606") # App Store Connect Team ID +team_id("PJ8L5H7L7H") # Developer Portal Team ID # For more information about the Appfile, see: # https://docs.fastlane.tools/advanced/#appfile diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 6078ad5dd..6686fa31c 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -18,6 +18,16 @@ default_platform(:ios) platform :ios do desc "Push a new beta build to TestFlight" lane :beta do + api_key = app_store_connect_api_key( + key_id: ENV["APP_STORE_CONNECT_API_KEY_KEY_ID"], + issuer_id: ENV["APP_STORE_CONNECT_API_KEY_ISSUER_ID"], + key_content: ENV["APP_STORE_CONNECT_API_KEY_KEY"], + is_key_content_base64: ENV["APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64"], + duration: 500, # maximum 1200 + in_house: false # optional but may be required if using match/sigh + ) + + # TODO: latest_testflight_build_number Not working increment_build_number( xcodeproj: "Runner.xcodeproj", build_number: latest_testflight_build_number + 1 @@ -28,9 +38,10 @@ platform :ios do increment_version_number(version_number: version_name) build_app(workspace: "Runner.xcworkspace", scheme: "Runner") upload_to_testflight( + ipa: "../build/ios/ipa/pangeachat.ipa", # Verify location distribute_external: true, - groups: "FluffyChat Betatest", - changelog: "This is a release candidate for FluffyChat. Please test if the app is overall in a good condition before we push this to production.", + groups: "App Store Connect Users", + changelog: "This is a release candidate for PangeaChat. Please test if the app is overall in a good condition before we push this to production.", ) end end diff --git a/ios/fastlane/README.md b/ios/fastlane/README.md index c7d6f9135..a57c8d1fe 100644 --- a/ios/fastlane/README.md +++ b/ios/fastlane/README.md @@ -1,37 +1,43 @@ fastlane documentation -================ +---- + # Installation Make sure you have the latest version of the Xcode command line tools installed: -``` +```sh xcode-select --install ``` -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew install fastlane` +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) # Available Actions + ### release + +```sh +[bundle exec] fastlane release ``` -fastlane release -``` + ---- + ## iOS + ### ios beta + +```sh +[bundle exec] fastlane ios beta ``` -fastlane ios beta -``` + Push a new beta build to TestFlight ---- -This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). +This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/pangea_packages/fcm_shared_isolate/android/build.gradle b/pangea_packages/fcm_shared_isolate/android/build.gradle index 59f00010c..443be8168 100644 --- a/pangea_packages/fcm_shared_isolate/android/build.gradle +++ b/pangea_packages/fcm_shared_isolate/android/build.gradle @@ -39,13 +39,13 @@ def getRootProjectExtOrCoreProperty(name, firebaseCoreProject) { } android { - compileSdkVersion 30 + compileSdkVersion 34 sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { - minSdkVersion 16 + minSdkVersion 21 } lintOptions { disable 'InvalidPackage' diff --git a/pubspec.lock b/pubspec.lock index a1ea075e7..b7ee77fba 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -604,10 +604,10 @@ packages: dependency: "direct main" description: name: firebase_messaging - sha256: "2d0ea2234ce46030eda2e6922611115ce603adc614ebd8c00e7db06a8929efbb" + sha256: "4d0968ecb860d7baa15a6e2af3469ec5b0d959e51c59ce84a52b0f7632a4aa5a" url: "https://pub.dev" source: hosted - version: "15.0.1" + version: "15.1.5" firebase_messaging_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 06d56256a..6a922745b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -118,7 +118,7 @@ dependencies: fl_chart: ^0.67.0 firebase_analytics: ^11.0.1 firebase_core: ^3.1.0 - firebase_messaging: ^15.0.1 + firebase_messaging: ^15.1.5 flutter_dotenv: ^5.1.0 fcm_shared_isolate: path: pangea_packages/fcm_shared_isolate diff --git a/scripts/prepare-android-release.sh b/scripts/prepare-android-release.sh index a2a11dcb1..3ef7a7b6a 100755 --- a/scripts/prepare-android-release.sh +++ b/scripts/prepare-android-release.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash cd android -echo $FDROID_KEY | base64 --decode --ignore-garbage > key.jks -echo "storePassword=${FDROID_KEY_PASS}" >> key.properties -echo "keyPassword=${FDROID_KEY_PASS}" >> key.properties -echo "keyAlias=key" >> key.properties +echo $PLAY_STORE_UPLOAD_KEY | base64 --decode > key.jks +echo "storePassword=${PLAY_STORE_KEYSTORE_STORE_PASSWORD}" >> key.properties +echo "keyPassword=${PLAY_STORE_KEYSTORE_KEY_PASSWORD}" >> key.properties +echo "keyAlias=${PLAY_STORE_KEYSTORE_KEY_ALIAS}" >> key.properties echo "storeFile=../key.jks" >> key.properties -echo $PLAYSTORE_DEPLOY_KEY >> keys.json +echo $PLAY_STORE_CONFIG_JSON | base64 --decode > keys.json ls | grep key bundle install bundle update fastlane diff --git a/scripts/release-ios-testflight.sh b/scripts/release-ios-testflight.sh index e3f1a109a..e1e040afd 100644 --- a/scripts/release-ios-testflight.sh +++ b/scripts/release-ios-testflight.sh @@ -1,5 +1,5 @@ #!/bin/sh -ve -git apply ./scripts/enable-android-google-services.patch +# git apply ./scripts/enable-android-google-services.patch rm -rf fonts/NotoEmoji yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml flutter clean @@ -7,8 +7,6 @@ flutter pub get cd ios rm -rf Pods rm -f Podfile.lock -arch -x86_64 pod install -arch -x86_64 pod update cd .. flutter build ios --release cd ios