From 626a215739b374f2cd8fcee64f8766efba2df15a Mon Sep 17 00:00:00 2001 From: Paul Vasile Date: Thu, 18 Dec 2025 15:04:38 +0200 Subject: [PATCH 01/16] ALFMOB-202: Fix iOS 26 liquid glass effect bug --- Alfie/Alfie/Views/TabBar/TabBarView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Alfie/Alfie/Views/TabBar/TabBarView.swift b/Alfie/Alfie/Views/TabBar/TabBarView.swift index 7119b7bc..0fea42af 100644 --- a/Alfie/Alfie/Views/TabBar/TabBarView.swift +++ b/Alfie/Alfie/Views/TabBar/TabBarView.swift @@ -30,7 +30,7 @@ struct TabBarView: View { TabView(selection: $tabCoordinator.activeTab) { ForEach($tabCoordinator.tabs, id: \.self) { $tab in tabCoordinator.view(for: tab) - .toolbar(tabCoordinator.shouldShowTabBar ? .visible : .hidden, for: .tabBar) + .toolbar(.hidden, for: .tabBar) } } .onChange(of: tabCoordinator.activeTab) { _ in From 93d9ae34bbe5445f1e63b7ddacf4404fa2c1b267 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 16:45:21 +0000 Subject: [PATCH 02/16] task: improved github actions --- .github/workflows/alfie.yml | 132 ++++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 28 deletions(-) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index 79cf772b..8f66e129 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -3,14 +3,18 @@ name: Alfie CI/CD on: push: branches: - - 'main' - + - "main" + pull_request: branches: - - 'main' + - "main" workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + env: DEVELOPER_DIR: "/Applications/Xcode_16.2.app/Contents/Developer" ARTIFACTS_PATH: "/tmp/alfie-artifacts" @@ -18,22 +22,79 @@ env: SPM_CLONED_DEPENDENCIES_PATH: "/tmp/SourcePackages" jobs: - run-tests: + setup: + runs-on: macos-15 + timeout-minutes: 15 + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Cache Homebrew + uses: actions/cache@v4 + with: + path: | + ~/Library/Caches/Homebrew + /usr/local/Homebrew + key: brew-${{ runner.os }}-${{ hashFiles('Brewfile') }} + restore-keys: | + brew-${{ runner.os }}- + + - name: Cache Ruby Gems + uses: actions/cache@v4 + with: + path: vendor/bundle + key: gems-${{ runner.os }}-${{ hashFiles('Gemfile', 'Gemfile.lock') }} + restore-keys: | + gems-${{ runner.os }}-${{ hashFiles('Gemfile') }}- + gems-${{ runner.os }}- + + - name: Install Homebrew formulas + run: | + brew update + brew bundle install + + - name: Install Ruby dependencies + run: | + gem install bundler --no-document + bundle config set --local path 'vendor/bundle' + bundle install --jobs 4 --retry 3 + + unit-tests: + needs: setup runs-on: macos-15 + timeout-minutes: 30 steps: - name: Checkout Code - uses: actions/checkout@v3 + uses: actions/checkout@v4 + + - name: Restore Ruby Gems + uses: actions/cache@v4 + with: + path: vendor/bundle + key: gems-${{ runner.os }}-${{ hashFiles('Gemfile', 'Gemfile.lock') }} + restore-keys: | + gems-${{ runner.os }}-${{ hashFiles('Gemfile') }}- + gems-${{ runner.os }}- + + - name: Restore Swift Package Manager Cache + uses: actions/cache@v4 + with: + path: | + ~/Library/Caches/org.swift.swiftpm + ${{ env.SPM_CLONED_DEPENDENCIES_PATH }} + key: spm-${{ runner.os }}-${{ hashFiles('AlfieKit/Package.swift', 'AlfieKit/Package.resolved') }} + restore-keys: | + spm-${{ runner.os }}- - name: Install Homebrew formulas run: | - brew update - brew bundle install - - - name: bundle install + brew bundle install + + - name: Install Ruby dependencies run: | - gem install bundler --no-document - bundle install --jobs 4 --retry 3 - + bundle config set --local path 'vendor/bundle' + bundle install --jobs 4 --retry 3 + - name: Import GPG Private Key and Decrypt sensitive files env: SECRETS_GPG_PRIVATE_KEY: ${{ secrets.SECRETS_GPG_PRIVATE_KEY }} @@ -46,33 +107,48 @@ jobs: run: bundle exec fastlane ios test --env default env: BUILD_CONFIGURATION: "Debug" - - - name: Archive Artifacts + + - name: Upload Test Results + if: always() uses: actions/upload-artifact@v4 with: - name: Test artifacts + name: test-results path: | - ${{ env.ARTIFACTS_PATH }}/*.xcresult - ${{ env.ARTIFACTS_PATH }}/*.junit + ${{ env.ARTIFACTS_PATH }}/*.xcresult + ${{ env.ARTIFACTS_PATH }}/*.junit retention-days: 7 release: - needs: run-tests + needs: [setup, unit-tests] runs-on: macos-15 + timeout-minutes: 60 if: github.event_name == 'push' steps: - name: Checkout Code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Install Homebrew formulas - run: | - brew update - brew bundle install - - - name: bundle install + - name: Restore Ruby Gems + uses: actions/cache@v4 + with: + path: vendor/bundle + key: gems-${{ runner.os }}-${{ hashFiles('Gemfile', 'Gemfile.lock') }} + restore-keys: | + gems-${{ runner.os }}-${{ hashFiles('Gemfile') }}- + gems-${{ runner.os }}- + + - name: Restore Swift Package Manager Cache + uses: actions/cache@v4 + with: + path: | + ~/Library/Caches/org.swift.swiftpm + ${{ env.SPM_CLONED_DEPENDENCIES_PATH }} + key: spm-${{ runner.os }}-${{ hashFiles('AlfieKit/Package.swift', 'AlfieKit/Package.resolved') }} + restore-keys: | + spm-${{ runner.os }}- + + - name: Configure Bundler run: | - gem install bundler --no-document - bundle install --jobs 4 --retry 3 + bundle config set --local path 'vendor/bundle' - name: Set up SSH for Bitbucket run: | @@ -80,7 +156,7 @@ jobs: echo "${{ secrets.BITBUCKET_SSH_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts - + - name: Import GPG Private Key and Decrypt sensitive files env: SECRETS_GPG_PRIVATE_KEY: ${{ secrets.SECRETS_GPG_PRIVATE_KEY }} From be365acf6a7ea7d35dc045d17a741b4708829e11 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 16:48:06 +0000 Subject: [PATCH 03/16] task: temp run jobs manually --- .github/workflows/alfie.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index 8f66e129..1e138459 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -10,6 +10,22 @@ on: - "main" workflow_dispatch: + inputs: + run_setup: + description: "Run setup job" + required: false + default: true + type: boolean + run_unit_tests: + description: "Run unit-tests job" + required: false + default: true + type: boolean + run_release: + description: "Run release job" + required: false + default: false + type: boolean concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -23,6 +39,7 @@ env: jobs: setup: + if: github.event_name != 'workflow_dispatch' || inputs.run_setup runs-on: macos-15 timeout-minutes: 15 steps: @@ -61,6 +78,7 @@ jobs: unit-tests: needs: setup + if: (github.event_name != 'workflow_dispatch' || inputs.run_unit_tests) && !cancelled() runs-on: macos-15 timeout-minutes: 30 steps: @@ -122,7 +140,7 @@ jobs: needs: [setup, unit-tests] runs-on: macos-15 timeout-minutes: 60 - if: github.event_name == 'push' + if: (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.run_release)) && !cancelled() steps: - name: Checkout Code uses: actions/checkout@v4 From 11ed73a7444316a72f2fe0f21ba4f87f6ebd57c5 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 19:08:12 +0000 Subject: [PATCH 04/16] task: SPM caching --- .gitignore | 2 +- Alfie/AlfieKit/Package.resolved | 266 ++++++++++++++++++++++++++++++++ 2 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 Alfie/AlfieKit/Package.resolved diff --git a/.gitignore b/.gitignore index a915f598..a1090ef4 100644 --- a/.gitignore +++ b/.gitignore @@ -105,7 +105,7 @@ DerivedData/ .build/ Alfie/AlfieKit/.build Alfie/AlfieKit/.swiftpm -Alfie/AlfieKit/Package.resolved +# Alfie/AlfieKit/Package.resolved - Tracking for reproducible builds # Accio dependency management Dependencies/ diff --git a/Alfie/AlfieKit/Package.resolved b/Alfie/AlfieKit/Package.resolved new file mode 100644 index 00000000..b43fa853 --- /dev/null +++ b/Alfie/AlfieKit/Package.resolved @@ -0,0 +1,266 @@ +{ + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5", + "version" : "1.2024072200.0" + } + }, + { + "identity" : "alicerce", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mindera/Alicerce.git", + "state" : { + "revision" : "bd9b6bd326ebee7aee956dabba737febffde6895", + "version" : "0.18.0" + } + }, + { + "identity" : "apollo-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apollographql/apollo-ios.git", + "state" : { + "revision" : "4d0845f9f2901ed657d680c874ffc68d12704cd4", + "version" : "1.19.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "braze-swift-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/braze-inc/braze-swift-sdk", + "state" : { + "revision" : "6c7bcbd58e36b4776f235260398fa1817244160d", + "version" : "11.9.0" + } + }, + { + "identity" : "combine-schedulers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/combine-schedulers", + "state" : { + "revision" : "5928286acce13def418ec36d05a001a9641086f2", + "version" : "1.0.3" + } + }, + { + "identity" : "easystash", + "kind" : "remoteSourceControl", + "location" : "https://github.com/onmyway133/EasyStash.git", + "state" : { + "revision" : "53c895b453c5476b673d2498d8edbe349ced72e7", + "version" : "1.1.9" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk.git", + "state" : { + "revision" : "d1f7c7e8eaa74d7e44467184dc5f592268247d33", + "version" : "11.11.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "dd89fc79a77183830742a16866d87e4e54785734", + "version" : "11.11.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "75b31c842f664a0f46a2e590a570e370249fd8f6", + "version" : "1.69.1" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "c756a29784521063b6a1202907e2cc47f41b667c", + "version" : "4.5.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe", + "version" : "101.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "nuke", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kean/Nuke.git", + "state" : { + "revision" : "0ead44350d2737db384908569c012fe67c421e4d", + "version" : "12.8.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "sdwebimage", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SDWebImage/SDWebImage.git", + "state" : { + "revision" : "36e79ba485e9bb4d3cd4e3318908866dac5e7b51", + "version" : "5.21.5" + } + }, + { + "identity" : "sqlite.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/stephencelis/SQLite.swift.git", + "state" : { + "revision" : "392dd6058624d9f6c5b4c769d165ddd8c7293394", + "version" : "0.15.4" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections", + "state" : { + "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", + "version" : "1.1.4" + } + }, + { + "identity" : "swift-concurrency-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-concurrency-extras", + "state" : { + "revision" : "5a3825302b1a0d744183200915a47b508c828e6f", + "version" : "1.3.2" + } + }, + { + "identity" : "swift-custom-dump", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-custom-dump", + "state" : { + "revision" : "82645ec760917961cfa08c9c0c7104a57a0fa4b1", + "version" : "1.3.3" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "c169a5744230951031770e27e475ff6eefe51f9d", + "version" : "1.33.3" + } + }, + { + "identity" : "swift-snapshot-testing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-snapshot-testing", + "state" : { + "revision" : "1be8144023c367c5de701a6313ed29a3a10bf59b", + "version" : "1.18.3" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax", + "state" : { + "revision" : "f99ae8aa18f0cf0d53481901f88a0991dc3bd4a2", + "version" : "601.0.1" + } + }, + { + "identity" : "swift-toolchain-sqlite", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-toolchain-sqlite", + "state" : { + "revision" : "b626d3002773b1a1304166643e7f118f724b2132", + "version" : "1.0.4" + } + }, + { + "identity" : "swiftgenplugin", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mindera/SwiftGenPlugin", + "state" : { + "revision" : "4659156ae082430840be407e25af56cfa9d64ab3", + "version" : "6.6.4-mindera" + } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "31073495cae9caf243c440eac94b3ab067e3d7bc", + "version" : "1.8.0" + } + } + ], + "version" : 2 +} From 251dfd6524cf95761a0c69c47103b06dc8160357 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 20:05:59 +0000 Subject: [PATCH 05/16] task: .gitignore cleanup --- .gitignore | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.gitignore b/.gitignore index a1090ef4..11926494 100644 --- a/.gitignore +++ b/.gitignore @@ -105,11 +105,6 @@ DerivedData/ .build/ Alfie/AlfieKit/.build Alfie/AlfieKit/.swiftpm -# Alfie/AlfieKit/Package.resolved - Tracking for reproducible builds - -# Accio dependency management -Dependencies/ -.accio/ # fastlane # It is recommended to not store the screenshots in the git repo. From 8597d51a4afe1e7e1d249f14c1f97b86ec453d25 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 20:06:21 +0000 Subject: [PATCH 06/16] task: updated tooling --- Gemfile.lock | 81 +++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9086da05..58870354 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,38 +1,40 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + CFPropertyList (3.0.8) + abbrev (0.1.2) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.3.1) - aws-partitions (1.1052.0) - aws-sdk-core (3.219.0) + aws-eventstream (1.4.0) + aws-partitions (1.1196.0) + aws-sdk-core (3.240.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.99.0) - aws-sdk-core (~> 3, >= 3.216.0) + logger + aws-sdk-kms (1.118.0) + aws-sdk-core (~> 3, >= 3.239.1) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.182.0) - aws-sdk-core (~> 3, >= 3.216.0) + aws-sdk-s3 (1.208.0) + aws-sdk-core (~> 3, >= 3.234.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.11.0) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) + bigdecimal (4.0.1) claide (1.1.0) colored (1.2) colored2 (3.1.2) commander (4.6.0) highline (~> 2.0.0) + csv (3.3.5) declarative (0.0.20) digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) @@ -52,14 +54,14 @@ GEM faraday-rack (~> 1.0) faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) - faraday-cookie_jar (0.0.7) + faraday-cookie_jar (0.0.8) faraday (>= 0.8.0) - http-cookie (~> 1.0.0) + http-cookie (>= 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.1.0) + faraday-multipart (1.1.1) multipart-post (~> 2.0) faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) @@ -69,15 +71,18 @@ GEM faraday_middleware (1.2.1) faraday (~> 1.0) fastimage (2.4.0) - fastlane (2.226.0) + fastlane (2.230.0) CFPropertyList (>= 2.3, < 4.0.0) + abbrev (~> 0.1.2) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) aws-sdk-s3 (~> 1.0) babosa (>= 1.0.3, < 2.0.0) + base64 (~> 0.2.0) bundler (>= 1.12.0, < 3.0.0) colored (~> 1.2) commander (~> 4.6) + csv (~> 3.3) dotenv (>= 2.1.1, < 3.0.0) emoji_regex (>= 0.1, < 4.0) excon (>= 0.71.0, < 1.0.0) @@ -95,9 +100,12 @@ GEM http-cookie (~> 1.0.5) json (< 3.0.0) jwt (>= 2.1.0, < 3) + logger (>= 1.6, < 2.0) mini_magick (>= 4.9.4, < 5.0.0) multipart-post (>= 2.0.0, < 3.0.0) + mutex_m (~> 0.3.0) naturally (~> 2.2) + nkf (~> 0.2.0) optparse (>= 0.1.1, < 1.0.0) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) @@ -109,7 +117,7 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.4.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-sirp (1.0.0) sysrandom (~> 1.0) @@ -130,12 +138,12 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.1) + google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.4.0) + google-cloud-errors (1.5.0) google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) @@ -153,37 +161,40 @@ GEM highline (2.0.3) http-cookie (1.0.8) domain_name (~> 0.5) - httpclient (2.8.3) + httpclient (2.9.0) + mutex_m jmespath (1.6.2) - json (2.10.2) - jwt (2.10.1) + json (2.18.0) + jwt (2.10.2) base64 + logger (1.7.0) mini_magick (4.13.2) mini_mime (1.1.5) - multi_json (1.15.0) + multi_json (1.18.0) multipart-post (2.4.1) + mutex_m (0.3.0) nanaimo (0.4.0) - naturally (2.2.1) + naturally (2.3.0) nkf (0.2.0) - optparse (0.6.0) + optparse (0.8.1) os (1.1.4) plist (3.7.2) - public_suffix (6.0.1) - rake (13.2.1) + public_suffix (7.0.0) + rake (13.3.1) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.4.1) + rexml (3.4.4) rouge (3.28.0) ruby2_keywords (0.0.5) rubyzip (2.4.1) security (0.1.5) - signet (0.19.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList @@ -207,7 +218,7 @@ GEM colored2 (~> 3.1) nanaimo (~> 0.4.0) rexml (>= 3.3.6, < 4.0) - xcpretty (0.4.0) + xcpretty (0.4.1) rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) @@ -220,4 +231,4 @@ DEPENDENCIES fastlane BUNDLED WITH - 2.5.23 + 2.6.9 From 47100bc427d15c6b9ce932acf1d2bc7b24513129 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 20:26:11 +0000 Subject: [PATCH 07/16] task: removed unnecessary properties --- fastlane/.env.default | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fastlane/.env.default b/fastlane/.env.default index 5e24e64b..a851f4b7 100644 --- a/fastlane/.env.default +++ b/fastlane/.env.default @@ -1,7 +1,7 @@ ####################################################################### # Global -ROOT_PATH="./" +ROOT_PATH="." PROJECT_PATH="${ROOT_PATH}/Alfie/Alfie.xcodeproj" SCHEME="Alfie" @@ -37,7 +37,6 @@ FASTLANE_XCODEBUILD_FORMATTER="xcbeautify" SCAN_PROJECT=${PROJECT_PATH} SCAN_SCHEME=${SCHEME} SCAN_TESTPLAN=${TESTPLAN} -SCAN_DESTINATION=${DESTINATION} SCAN_OUTPUT_DIRECTORY=${ARTIFACTS_PATH} SCAN_XCARGS=${EXTRA_XCARGS} SCAN_RESULT_BUNDLE=true From 5a6cf82179e8aa542df2138ec027c5fc2c78b5d8 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 20:27:27 +0000 Subject: [PATCH 08/16] task: updated .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 11926494..2fa90704 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,6 @@ # Icon must end with two \r Icon - # Thumbnails ._* @@ -83,6 +82,8 @@ DerivedData/ !default.mode2v3 *.perspectivev3 !default.perspectivev3 +**.xcresult +report.junit ## Obj-C/Swift specific *.hmap From 0c620ade544caf6826cb5a3ff60467904056c5db Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 20:40:36 +0000 Subject: [PATCH 09/16] task: test to remove specified xcode --- .github/workflows/alfie.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index 1e138459..13334ac3 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -32,9 +32,7 @@ concurrency: cancel-in-progress: true env: - DEVELOPER_DIR: "/Applications/Xcode_16.2.app/Contents/Developer" ARTIFACTS_PATH: "/tmp/alfie-artifacts" - DESTINATION: "platform=iOS Simulator,OS=latest,name=iPhone 16 Pro" SPM_CLONED_DEPENDENCIES_PATH: "/tmp/SourcePackages" jobs: @@ -122,7 +120,7 @@ jobs: git secret reveal -p "$SECRETS_GPG_PASSPHRASE" - name: Run Tests - run: bundle exec fastlane ios test --env default + run: bundle exec fastlane ios test --env default --verbose env: BUILD_CONFIGURATION: "Debug" From 3931d0165669f62bbca210dab931924c8ae129db Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 20:55:33 +0000 Subject: [PATCH 10/16] task: removed ci testing parameters --- .github/workflows/alfie.yml | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index 13334ac3..a1a7a5ed 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -9,24 +9,6 @@ on: branches: - "main" - workflow_dispatch: - inputs: - run_setup: - description: "Run setup job" - required: false - default: true - type: boolean - run_unit_tests: - description: "Run unit-tests job" - required: false - default: true - type: boolean - run_release: - description: "Run release job" - required: false - default: false - type: boolean - concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -37,7 +19,6 @@ env: jobs: setup: - if: github.event_name != 'workflow_dispatch' || inputs.run_setup runs-on: macos-15 timeout-minutes: 15 steps: @@ -76,7 +57,6 @@ jobs: unit-tests: needs: setup - if: (github.event_name != 'workflow_dispatch' || inputs.run_unit_tests) && !cancelled() runs-on: macos-15 timeout-minutes: 30 steps: @@ -120,7 +100,7 @@ jobs: git secret reveal -p "$SECRETS_GPG_PASSPHRASE" - name: Run Tests - run: bundle exec fastlane ios test --env default --verbose + run: bundle exec fastlane ios test --env default env: BUILD_CONFIGURATION: "Debug" @@ -138,7 +118,7 @@ jobs: needs: [setup, unit-tests] runs-on: macos-15 timeout-minutes: 60 - if: (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.run_release)) && !cancelled() + if: github.event_name == 'push' steps: - name: Checkout Code uses: actions/checkout@v4 From 748d60821d80eb3522d0e342d387c032ef91265d Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 22:32:39 +0000 Subject: [PATCH 11/16] Update .github/workflows/alfie.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/alfie.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index a1a7a5ed..ba1ca527 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -138,7 +138,7 @@ jobs: path: | ~/Library/Caches/org.swift.swiftpm ${{ env.SPM_CLONED_DEPENDENCIES_PATH }} - key: spm-${{ runner.os }}-${{ hashFiles('AlfieKit/Package.swift', 'AlfieKit/Package.resolved') }} + key: spm-${{ runner.os }}-${{ hashFiles('Alfie/AlfieKit/Package.swift', 'Alfie/AlfieKit/Package.resolved') }} restore-keys: | spm-${{ runner.os }}- From 72d0dce4041479fffed57e51ab2c0c152706967c Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 22:32:48 +0000 Subject: [PATCH 12/16] Update .github/workflows/alfie.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/alfie.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index ba1ca527..f8a9863e 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -78,7 +78,7 @@ jobs: path: | ~/Library/Caches/org.swift.swiftpm ${{ env.SPM_CLONED_DEPENDENCIES_PATH }} - key: spm-${{ runner.os }}-${{ hashFiles('AlfieKit/Package.swift', 'AlfieKit/Package.resolved') }} + key: spm-${{ runner.os }}-${{ hashFiles('Alfie/AlfieKit/Package.swift', 'Alfie/AlfieKit/Package.resolved') }} restore-keys: | spm-${{ runner.os }}- From 41c5224b4417115dacefc0867b260bc172c31fd0 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Thu, 18 Dec 2025 22:39:35 +0000 Subject: [PATCH 13/16] Update .github/workflows/alfie.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/alfie.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/alfie.yml b/.github/workflows/alfie.yml index f8a9863e..b845e5f3 100644 --- a/.github/workflows/alfie.yml +++ b/.github/workflows/alfie.yml @@ -145,6 +145,7 @@ jobs: - name: Configure Bundler run: | bundle config set --local path 'vendor/bundle' + bundle install --jobs 4 --retry 3 - name: Set up SSH for Bitbucket run: | From 20b12b1fc4d5d330766b98b34e0fd6ba92aea878 Mon Sep 17 00:00:00 2001 From: Alasdair McCall Date: Tue, 23 Dec 2025 13:03:18 +0000 Subject: [PATCH 14/16] Disable liquid glass at a project level --- Alfie/Alfie/Info.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Alfie/Alfie/Info.plist b/Alfie/Alfie/Info.plist index 1a84e443..fb906c84 100644 --- a/Alfie/Alfie/Info.plist +++ b/Alfie/Alfie/Info.plist @@ -29,5 +29,7 @@ UILaunchStoryboardName LaunchScreen.storyboard + UIDesignRequiresCompatibility + From acd4dfbc3509cbada0069d25c630d2a3b8a34fd6 Mon Sep 17 00:00:00 2001 From: Paul Vasile Date: Wed, 24 Dec 2025 11:33:52 +0200 Subject: [PATCH 15/16] fix: re-enabled liquid glass and fixed tab bar --- Alfie/Alfie.xcodeproj/project.pbxproj | 5 ++++- Alfie/Alfie/Info.plist | 6 ------ .../Sources/AppFeature/Navigation/RootTabView.swift | 1 + 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Alfie/Alfie.xcodeproj/project.pbxproj b/Alfie/Alfie.xcodeproj/project.pbxproj index 34c5735d..b80d744f 100644 --- a/Alfie/Alfie.xcodeproj/project.pbxproj +++ b/Alfie/Alfie.xcodeproj/project.pbxproj @@ -62,7 +62,6 @@ Alfie.xctestplan, "Configuration/Debug/GoogleService-Info.plist", "Configuration/Debug/GoogleService-Info.plist.secret", - "Configuration/Release/GoogleService-Info.plist", "Configuration/Release/GoogleService-Info.plist.secret", Info.plist, ); @@ -544,8 +543,10 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Alfie/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Alfie; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIRequiresFullScreen = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UIUserInterfaceStyle = Light; @@ -581,8 +582,10 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Alfie/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Alfie; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIRequiresFullScreen = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UIUserInterfaceStyle = Light; diff --git a/Alfie/Alfie/Info.plist b/Alfie/Alfie/Info.plist index fb906c84..4977863c 100644 --- a/Alfie/Alfie/Info.plist +++ b/Alfie/Alfie/Info.plist @@ -19,17 +19,11 @@ - ITSAppUsesNonExemptEncryption - UIBackgroundModes fetch processing remote-notification - UILaunchStoryboardName - LaunchScreen.storyboard - UIDesignRequiresCompatibility - diff --git a/Alfie/AlfieKit/Sources/AppFeature/Navigation/RootTabView.swift b/Alfie/AlfieKit/Sources/AppFeature/Navigation/RootTabView.swift index 9688872a..2a61a28e 100644 --- a/Alfie/AlfieKit/Sources/AppFeature/Navigation/RootTabView.swift +++ b/Alfie/AlfieKit/Sources/AppFeature/Navigation/RootTabView.swift @@ -39,6 +39,7 @@ public struct RootTabView: View { .environment(\.tabBarSize, tabBarSize) } } + .toolbar(.hidden, for: .tabBar) } .accentColor(Colors.primary.black) .padding(.bottom, Spacing.space150) From 9a191d0e093adbf6a842ff7370bd8d60522a71c5 Mon Sep 17 00:00:00 2001 From: Paul Vasile Date: Wed, 24 Dec 2025 12:07:15 +0200 Subject: [PATCH 16/16] fix: added back reference to GoogleService-Info for release --- Alfie/Alfie.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Alfie/Alfie.xcodeproj/project.pbxproj b/Alfie/Alfie.xcodeproj/project.pbxproj index b80d744f..d89696fc 100644 --- a/Alfie/Alfie.xcodeproj/project.pbxproj +++ b/Alfie/Alfie.xcodeproj/project.pbxproj @@ -62,6 +62,7 @@ Alfie.xctestplan, "Configuration/Debug/GoogleService-Info.plist", "Configuration/Debug/GoogleService-Info.plist.secret", + "Configuration/Release/GoogleService-Info.plist", "Configuration/Release/GoogleService-Info.plist.secret", Info.plist, );