79 Commits

Author SHA1 Message Date
github-actions[bot]
bab80110f0 chore(master): release 0.13.1 2026-05-17 09:14:15 +00:00
4e53481cdf fix(checklists): auto-dismiss item check snackbar after 6 seconds 2026-05-17 12:11:56 +03:00
116eb18693 fix(macos): esc to dismiss would ring bell and not work 2026-05-16 22:16:22 +03:00
bbdc71c72f build: add macos-deploy to deploy-* tasks 2026-05-16 19:03:16 +03:00
cf2388db2b docs(macos): update release notes 2026-05-16 19:02:59 +03:00
github-actions[bot]
9fdee69cb9 chore(master): release 0.13.0 2026-05-16 18:47:46 +03:00
4a0832a359 ci: update release changelog scopes 2026-05-16 01:36:54 +03:00
88e153b96f feat(macos): go back by using Esc key 2026-05-16 01:36:54 +03:00
cf9135e069 feat: switch between photos in photo view 2026-05-16 01:36:54 +03:00
db7cc6ffab chore(macos): app store preparations, ui adjustments 2026-05-16 01:36:53 +03:00
ec689d2940 ci: route fastlane changelog by commit scope 2026-05-15 23:51:58 +03:00
00241b8ace feat(ios): open full file picker when running on macOS 2026-05-15 23:51:58 +03:00
eb4d8d3c50 feat: add trash view 2026-05-15 23:22:58 +03:00
ddf0c365a1 feat: add undo action for checking items 2026-05-15 23:07:02 +03:00
eafc267e92 feat: improve ui for larger devices 2026-05-15 22:14:43 +03:00
291d8c3bb5 chore(macos): prepare macos compatibility 2026-05-15 21:56:22 +03:00
github-actions[bot]
903fd823d8 chore(master): release 0.12.0 2026-05-15 17:11:17 +03:00
bca375d701 ci: pin release builds to release tag 2026-05-15 17:06:44 +03:00
28f8a269f8 chore(ios): fix build settings 2026-05-15 17:06:44 +03:00
c944ec5140 build: update makefile targets 2026-05-15 01:58:05 +03:00
550027e1bc test: cover list creation, share queues, and photo FAB menu 2026-05-14 17:37:26 +03:00
41e8ac13a0 feat: create new lists from the list selector 2026-05-14 15:22:29 +03:00
d8802690c0 feat: take photos directly from the photo board 2026-05-14 15:15:36 +03:00
60b16aad30 feat: share photos, links, and text to Pantry from other apps 2026-05-14 14:48:57 +03:00
689e4d6cad feat: add setting to show spacing between categories in checklist items 2026-05-14 12:02:57 +03:00
db3bbc0f17 build: add ios submit-only fastlane lane 2026-05-12 12:18:06 +03:00
github-actions[bot]
504da80c09 chore(master): release 0.11.0 2026-05-12 12:00:27 +03:00
0c575eaa26 fix: preserve subpath for Nextcloud instances hosted on sub-paths 2026-05-12 11:56:59 +03:00
38b5d8b464 build: update makefile targets 2026-05-12 11:37:15 +03:00
ef2bc851de feat: add setting to require checkbox tap to complete checklist items 2026-05-12 11:37:15 +03:00
github-actions[bot]
448d85834b chore(master): release 0.10.1 2026-04-26 23:42:06 +03:00
7b5f9c1518 fix: make markdown links clickable 2026-04-26 22:43:52 +03:00
67581d04f0 build: update fastlane 2026-04-21 11:29:39 +03:00
be83067fb7 build: disable preview html for fastlane deliver 2026-04-21 11:18:18 +03:00
ea4590f0ed build: fix makefile syntax 2026-04-21 11:11:41 +03:00
github-actions[bot]
721f32e1ea chore(master): release 0.10.0 2026-04-21 10:08:29 +03:00
36a74b39e1 feat: update notes view & edit ui 2026-04-21 09:52:38 +03:00
08159faec2 fix: bug where note grid would not clip correctly 2026-04-21 09:38:41 +03:00
346bfb9d92 docs: add apple app store link 2026-04-20 09:57:20 +03:00
github-actions[bot]
0b9cda92ca chore(master): release 0.9.10 2026-04-19 17:25:15 +03:00
9f45b2344e build: fix signing
Release-As: 0.9.10
2026-04-19 17:14:18 +03:00
github-actions[bot]
4ae96c37d1 chore(master): release 0.9.9 2026-04-19 15:31:34 +03:00
852e9c47f3 build: re-sign with stripping
Release-As: 0.9.9
2026-04-19 15:28:18 +03:00
github-actions[bot]
769bf74400 chore(master): release 0.9.8 2026-04-19 14:12:40 +03:00
132d9e33a6 build: strip deps metadata from build
Release-As: 0.9.8
2026-04-19 14:10:06 +03:00
github-actions[bot]
7ff161f1c5 chore(master): release 0.9.7 2026-04-19 13:26:45 +03:00
7ea2901867 build: disable deps metadata in apk
Release-As: 0.9.7
2026-04-19 13:22:59 +03:00
github-actions[bot]
7a849d5d36 chore(master): release 0.9.6 2026-04-19 12:47:04 +03:00
b1d7eccd82 build: remove zipalign
Release-As: 0.9.6
2026-04-19 12:44:20 +03:00
github-actions[bot]
0f999750f1 chore(master): release 0.9.5 2026-04-19 12:25:07 +03:00
6d2173f08d build: zipalign
Release-As: 0.9.5
2026-04-19 12:15:46 +03:00
github-actions[bot]
768e78ace9 chore(master): release 0.9.4 2026-04-19 11:56:13 +03:00
d41d2b81be build: remove apk obfuscation
Release-As: 0.9.4
2026-04-19 11:39:31 +03:00
1f09e9d5aa build: use .flutter-version file for github actions 2026-04-19 11:30:24 +03:00
github-actions[bot]
1bb5b85b3e chore(master): release 0.9.3 2026-04-19 11:21:13 +03:00
3e4051a846 build: upgrade flutter version
Release-As: 0.9.3
2026-04-19 11:19:17 +03:00
github-actions[bot]
24baeda80f chore(master): release 0.9.2 2026-04-19 11:07:27 +03:00
9d4c8327b0 build: reproducible build
Release-As: 0.9.2
2026-04-19 11:05:35 +03:00
github-actions[bot]
42125f89eb chore(master): release 0.9.1 2026-04-18 23:34:25 +03:00
7d0c7932ea build: add abi split
Release-As: 0.9.1
2026-04-18 23:31:14 +03:00
6f9f40a061 build: auto send to review 2026-04-18 22:42:26 +03:00
41bec3b656 build: add ios encryption compliance 2026-04-18 22:40:48 +03:00
8ba765e3be build: update ios release changes meta 2026-04-18 11:44:41 +03:00
github-actions[bot]
6cdb74a391 chore(master): release 0.9.0 2026-04-18 11:40:09 +03:00
eb797dd0e8 feat: add search in lists 2026-04-18 11:03:51 +03:00
7243e43bbb feat: allow uploading list item image 2026-04-18 10:37:47 +03:00
82966695b4 build: add debug build variance 2026-04-17 17:21:05 +03:00
322b3e29fa chore: update gitignore 2026-04-16 18:18:22 +03:00
634ac0be6b chore: fix ios release task 2026-04-16 18:16:10 +03:00
github-actions[bot]
2852e3ecf5 chore(master): release 0.8.0 2026-04-16 18:07:46 +03:00
179c6d781c feat: add more icons to categories 2026-04-16 12:03:02 +03:00
daac6f56fd chore: cleanups 2026-04-16 11:44:56 +03:00
a447fe1c8a feat: allow adding one-off list items 2026-04-16 11:42:47 +03:00
d73fa03a25 chore: update store metadata 2026-04-15 23:49:18 +03:00
github-actions[bot]
cb7133fcd7 chore(master): release 0.7.1 2026-04-14 14:29:30 +03:00
64af382f10 fix: about urls not opening 2026-04-14 13:47:39 +03:00
a535c6b49a chore: update icons 2026-04-14 13:39:32 +03:00
c15ad85d67 chore: fix android store icon size 2026-04-14 13:15:55 +03:00
d474663d44 build: ios metadata 2026-04-14 12:37:28 +03:00
219 changed files with 7782 additions and 1120 deletions

View File

@@ -1 +1 @@
3.41.4
3.41.7

View File

@@ -11,7 +11,20 @@ permissions:
pull-requests: write
jobs:
setup:
runs-on: ubuntu-latest
outputs:
flutter-version: ${{ steps.read.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: .flutter-version
sparse-checkout-cone-mode: false
- id: read
run: echo "version=$(cat .flutter-version | tr -d '[:space:]')" >> "$GITHUB_OUTPUT"
lint:
needs: setup
runs-on: ubuntu-latest
steps:
@@ -21,7 +34,7 @@ jobs:
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
flutter-version: ${{ needs.setup.outputs.flutter-version }}
cache: true
- name: Cache pub dependencies
@@ -35,9 +48,6 @@ jobs:
- name: Install dependencies
run: flutter pub get
- name: Stub .env
run: cp .env.example .env
- name: Verify formatting
run: dart format --output=none --set-exit-if-changed .
@@ -45,6 +55,7 @@ jobs:
run: flutter analyze --no-fatal-infos
test:
needs: setup
runs-on: ubuntu-latest
steps:
@@ -54,7 +65,7 @@ jobs:
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
flutter-version: ${{ needs.setup.outputs.flutter-version }}
cache: true
- name: Cache pub dependencies
@@ -68,12 +79,8 @@ jobs:
- name: Install dependencies
run: flutter pub get
- name: Stub .env
run: cp .env.example .env
- name: Run tests
run: flutter test --coverage --dart-define-from-file=.env
run: flutter test --coverage
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
@@ -86,30 +93,37 @@ jobs:
uses: chenasraf/workflows/.github/workflows/release-please-fastlane-changelog.yml@master
with:
release-type: dart
fastlane-changelog-dirs: |
fastlane/metadata/android/en-US/changelogs
fastlane/metadata/ios/en-US/changelogs
scopes: |
ios: fastlane/metadata/ios/en-US/changelogs
macos: fastlane/metadata/macos/en-US/changelogs
desktop: fastlane/metadata/macos/en-US/changelogs
apple: |
fastlane/metadata/ios/en-US/changelogs
fastlane/metadata/macos/en-US/changelogs
android: fastlane/metadata/android/en-US/changelogs
build-android:
needs: release-please
needs: [setup, release-please]
if: ${{ needs.release-please.outputs.release_created }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.release-please.outputs.tag_name }}
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
distribution: "temurin"
java-version: "17"
cache: "gradle"
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
flutter-version: ${{ needs.setup.outputs.flutter-version }}
cache: true
- name: Cache pub dependencies
@@ -123,8 +137,8 @@ jobs:
- name: Install dependencies
run: flutter pub get
- name: Create .env
run: cp .env.example .env
- name: Remove JNI build-id for reproducible builds
run: sed -i -e 's/-Wl,/-Wl,--build-id=none,/' $PUB_CACHE/hosted/pub.dev/jni-*/src/CMakeLists.txt
- name: Decode keystore
run: echo ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | base64 -d > android/app/upload-keystore.jks
@@ -138,23 +152,35 @@ jobs:
storeFile=upload-keystore.jks
EOF
- name: Build APK
run: flutter build apk --release --obfuscate --split-debug-info=build/debug-info-apk --dart-define-from-file=.env
- name: Print signing key SHA-256
run: |
keytool -list -v -keystore android/app/upload-keystore.jks \
-alias ${{ secrets.ANDROID_KEY_ALIAS }} \
-storepass ${{ secrets.ANDROID_STORE_PASSWORD }} \
2>/dev/null | grep "SHA256:" | awk '{print $2}'
- name: Build split APKs
run: flutter build apk --release --split-per-abi
- name: Build App Bundle
run: flutter build appbundle --release --obfuscate --split-debug-info=build/debug-info-aab --dart-define-from-file=.env
run: flutter build appbundle --release --obfuscate --split-debug-info=build/debug-info-aab
- name: Rename artifacts
run: |
mv build/app/outputs/flutter-apk/app-release.apk build/app/outputs/flutter-apk/pantry-${{ needs.release-please.outputs.version }}.apk
mv build/app/outputs/bundle/release/app-release.aab build/app/outputs/bundle/release/pantry-${{ needs.release-please.outputs.version }}.aab
VERSION=${{ needs.release-please.outputs.version }}
APK_DIR=build/app/outputs/flutter-apk
mv ${APK_DIR}/app-armeabi-v7a-release.apk ${APK_DIR}/pantry-${VERSION}-armeabi-v7a.apk
mv ${APK_DIR}/app-arm64-v8a-release.apk ${APK_DIR}/pantry-${VERSION}-arm64-v8a.apk
mv ${APK_DIR}/app-x86_64-release.apk ${APK_DIR}/pantry-${VERSION}-x86_64.apk
mv build/app/outputs/bundle/release/app-release.aab build/app/outputs/bundle/release/pantry-${VERSION}.aab
- name: Upload APK to release
- name: Upload APKs to release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.release-please.outputs.tag_name }}
files: |
build/app/outputs/flutter-apk/pantry-${{ needs.release-please.outputs.version }}.apk
build/app/outputs/flutter-apk/pantry-${{ needs.release-please.outputs.version }}-armeabi-v7a.apk
build/app/outputs/flutter-apk/pantry-${{ needs.release-please.outputs.version }}-arm64-v8a.apk
build/app/outputs/flutter-apk/pantry-${{ needs.release-please.outputs.version }}-x86_64.apk
- name: Upload App Bundle to release
uses: softprops/action-gh-release@v2
@@ -164,18 +190,20 @@ jobs:
build/app/outputs/bundle/release/pantry-${{ needs.release-please.outputs.version }}.aab
build-ios:
needs: release-please
needs: [setup, release-please]
if: false # TEMPORARILY DISABLED — was: ${{ needs.release-please.outputs.release_created }}
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.release-please.outputs.tag_name }}
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
flutter-version: ${{ needs.setup.outputs.flutter-version }}
cache: true
- name: Cache pub dependencies
@@ -198,12 +226,8 @@ jobs:
- name: Install dependencies
run: flutter pub get
- name: Create .env
run: cp .env.example .env
- name: Build iOS (no codesign)
run: flutter build ios --release --no-codesign --obfuscate --split-debug-info=build/debug-info-ios --dart-define-from-file=.env
run: flutter build ios --release --no-codesign --obfuscate --split-debug-info=build/debug-info-ios
- name: Create unsigned IPA
run: |
mkdir -p build/ios/ipa

5
.gitignore vendored
View File

@@ -47,6 +47,8 @@ app.*.map.json
# Environment
.env
.envrc
/.flutter-flags.yml
# Android signing
android/key.properties
@@ -57,4 +59,5 @@ android/app/*.keystore
fastlane/play-store-key.json
fastlane/.image_hashes.json
fastlane/report.xml
/.envrc
fastlane/Preview.html
fastlane/metadata/ios/en-US/release_notes.txt

View File

@@ -1,5 +1,159 @@
# Changelog
## [0.13.1](https://github.com/chenasraf/pantry-flutter/compare/v0.13.0...v0.13.1) (2026-05-17)
### Bug Fixes
* **checklists:** auto-dismiss item check snackbar after 6 seconds ([4e53481](https://github.com/chenasraf/pantry-flutter/commit/4e53481cdfcdba1d75cebadffb023b6a92b3df75))
* **macos:** esc to dismiss would ring bell and not work ([116eb18](https://github.com/chenasraf/pantry-flutter/commit/116eb18693137a0d8733c903d0f66a4e67f3210a))
## [0.13.0](https://github.com/chenasraf/pantry-flutter/compare/v0.12.0...v0.13.0) (2026-05-15)
### Features
* add trash view ([eb4d8d3](https://github.com/chenasraf/pantry-flutter/commit/eb4d8d3c509e6fe1c6ef998caaa58f6bd9a55a53))
* add undo action for checking items ([ddf0c36](https://github.com/chenasraf/pantry-flutter/commit/ddf0c365a1ea4fb27f66fc19a7c5ffd7d72f6de7))
* improve ui for larger devices ([eafc267](https://github.com/chenasraf/pantry-flutter/commit/eafc267e92b275796e1edb746c3c3b9dc75925e7))
* **ios:** open full file picker when running on macOS ([00241b8](https://github.com/chenasraf/pantry-flutter/commit/00241b8aceeda5175e0989f017031a94b6c53581))
* **macos:** go back by using Esc key ([88e153b](https://github.com/chenasraf/pantry-flutter/commit/88e153b96f249f4a8d8f19465a31cde7aa3ac8e0))
* switch between photos in photo view ([cf9135e](https://github.com/chenasraf/pantry-flutter/commit/cf9135e0695f70b8c8c658421306f6cda610b6b4))
## [0.12.0](https://github.com/chenasraf/pantry-flutter/compare/v0.11.0...v0.12.0) (2026-05-15)
### Features
* add setting to show spacing between categories in checklist items ([689e4d6](https://github.com/chenasraf/pantry-flutter/commit/689e4d6cad89a84621b77e300198d12ac43131ff))
* create new lists from the list selector ([41e8ac1](https://github.com/chenasraf/pantry-flutter/commit/41e8ac13a0ab78436bc2674220ed282f8410862d))
* share photos, links, and text to Pantry from other apps ([60b16aa](https://github.com/chenasraf/pantry-flutter/commit/60b16aad309ec0f02b542c53a7bfafb9f9652da3))
* take photos directly from the photo board ([d880269](https://github.com/chenasraf/pantry-flutter/commit/d8802690c0a3ab80346f84ea1df4b3774ba6e4ee))
## [0.11.0](https://github.com/chenasraf/pantry-flutter/compare/v0.10.1...v0.11.0) (2026-05-12)
### Features
* add setting to require checkbox tap to complete checklist items ([ef2bc85](https://github.com/chenasraf/pantry-flutter/commit/ef2bc851deedc180dda51fbfb7378aef7145cf5f))
### Bug Fixes
* preserve subpath for Nextcloud instances hosted on sub-paths ([0c575ea](https://github.com/chenasraf/pantry-flutter/commit/0c575eaa2601dc8c83c6b874f2d81b54a0f6bf01))
## [0.10.1](https://github.com/chenasraf/pantry-flutter/compare/v0.10.0...v0.10.1) (2026-04-26)
### Bug Fixes
* make markdown links clickable ([7b5f9c1](https://github.com/chenasraf/pantry-flutter/commit/7b5f9c151845dde90275a8289b3114483d2b214d))
## [0.10.0](https://github.com/chenasraf/pantry-flutter/compare/v0.9.10...v0.10.0) (2026-04-21)
### Features
* update notes view & edit ui ([36a74b3](https://github.com/chenasraf/pantry-flutter/commit/36a74b39e1beb37fc2f1446f8d45945a22289c6b))
### Bug Fixes
* bug where note grid would not clip correctly ([08159fa](https://github.com/chenasraf/pantry-flutter/commit/08159faec22422da983f23685c53b45088d74b2a))
## [0.9.10](https://github.com/chenasraf/pantry-flutter/compare/v0.9.9...v0.9.10) (2026-04-19)
### Build System
* fix signing ([9f45b23](https://github.com/chenasraf/pantry-flutter/commit/9f45b2344ef87708d55889e8fb80f465808fb0c7))
## [0.9.9](https://github.com/chenasraf/pantry-flutter/compare/v0.9.8...v0.9.9) (2026-04-19)
### Build System
* re-sign with stripping ([852e9c4](https://github.com/chenasraf/pantry-flutter/commit/852e9c47f3cf11145a72ed78b6415ecd0da2b111))
## [0.9.8](https://github.com/chenasraf/pantry-flutter/compare/v0.9.7...v0.9.8) (2026-04-19)
### Build System
* strip deps metadata from build ([132d9e3](https://github.com/chenasraf/pantry-flutter/commit/132d9e33a6662554149a7941053594c6c7ab9043))
## [0.9.7](https://github.com/chenasraf/pantry-flutter/compare/v0.9.6...v0.9.7) (2026-04-19)
### Build System
* disable deps metadata in apk ([7ea2901](https://github.com/chenasraf/pantry-flutter/commit/7ea2901867b25e2c4bcd46cd744af7b12656b6dd))
## [0.9.6](https://github.com/chenasraf/pantry-flutter/compare/v0.9.5...v0.9.6) (2026-04-19)
### Build System
* remove zipalign ([b1d7ecc](https://github.com/chenasraf/pantry-flutter/commit/b1d7eccd822fcbac56683a4085a329784c71ca7f))
## [0.9.5](https://github.com/chenasraf/pantry-flutter/compare/v0.9.4...v0.9.5) (2026-04-19)
### Build System
* zipalign ([6d2173f](https://github.com/chenasraf/pantry-flutter/commit/6d2173f08d72d8e188c9a4aabe044ff922d4b32f))
## [0.9.4](https://github.com/chenasraf/pantry-flutter/compare/v0.9.3...v0.9.4) (2026-04-19)
### Build System
* remove apk obfuscation ([d41d2b8](https://github.com/chenasraf/pantry-flutter/commit/d41d2b81beb512384cb3c2978bebd201c3bf53a0))
## [0.9.3](https://github.com/chenasraf/pantry-flutter/compare/v0.9.2...v0.9.3) (2026-04-19)
### Build System
* upgrade flutter version ([3e4051a](https://github.com/chenasraf/pantry-flutter/commit/3e4051a8462271543381496a9d60a22239b8d8da))
## [0.9.2](https://github.com/chenasraf/pantry-flutter/compare/v0.9.1...v0.9.2) (2026-04-19)
### Build System
* reproducible build ([9d4c832](https://github.com/chenasraf/pantry-flutter/commit/9d4c8327b035eb0433d6d0a571af406ffca84f83))
## [0.9.1](https://github.com/chenasraf/pantry-flutter/compare/v0.9.0...v0.9.1) (2026-04-18)
### Build System
* add abi split ([7d0c793](https://github.com/chenasraf/pantry-flutter/commit/7d0c7932ea9bf18d5ff391351f0058889abba5d8))
## [0.9.0](https://github.com/chenasraf/pantry-flutter/compare/v0.8.0...v0.9.0) (2026-04-18)
### Features
* add search in lists ([eb797dd](https://github.com/chenasraf/pantry-flutter/commit/eb797dd0e87f7eb14576a3bdf7e77f9fe1c0cb09))
* allow uploading list item image ([7243e43](https://github.com/chenasraf/pantry-flutter/commit/7243e43bbbfe8072327fc921ed2a4ffba228bd3f))
## [0.8.0](https://github.com/chenasraf/pantry-flutter/compare/v0.7.1...v0.8.0) (2026-04-16)
### Features
* add more icons to categories ([179c6d7](https://github.com/chenasraf/pantry-flutter/commit/179c6d781c1342434608b9af88daa807795c9a46))
* allow adding one-off list items ([a447fe1](https://github.com/chenasraf/pantry-flutter/commit/a447fe1c8a1d9de655c081015f287afeba75bee1))
## [0.7.1](https://github.com/chenasraf/pantry-flutter/compare/v0.7.0...v0.7.1) (2026-04-14)
### Bug Fixes
* about urls not opening ([64af382](https://github.com/chenasraf/pantry-flutter/commit/64af382f10bd696f05a23d31ee8e04d746fc4b46))
## [0.7.0](https://github.com/chenasraf/pantry-flutter/compare/v0.6.0...v0.7.0) (2026-04-14)

View File

@@ -8,8 +8,8 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
aws-partitions (1.1237.0)
aws-sdk-core (3.244.0)
aws-partitions (1.1246.0)
aws-sdk-core (3.246.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -17,19 +17,19 @@ GEM
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.123.0)
aws-sdk-kms (1.124.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.219.0)
aws-sdk-s3 (1.221.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
base64 (0.3.0)
benchmark (0.5.0)
bigdecimal (4.1.1)
bigdecimal (4.1.2)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
@@ -72,14 +72,14 @@ GEM
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.4.1)
fastlane (2.232.2)
CFPropertyList (>= 2.3, < 4.0.0)
abbrev (~> 0.1.2)
fastlane (2.234.0)
CFPropertyList (>= 2.3, < 5.0.0)
abbrev (~> 0.1)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.197)
babosa (>= 1.0.3, < 2.0.0)
base64 (~> 0.2.0)
base64 (~> 0.2)
benchmark (>= 0.1.0)
bundler (>= 1.17.3, < 5.0.0)
colored (~> 1.2)
@@ -92,7 +92,7 @@ GEM
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
fastlane-sirp (>= 1.0.0)
fastlane-sirp (>= 1.1.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
@@ -105,9 +105,9 @@ GEM
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)
mutex_m (~> 0.3)
naturally (~> 2.2)
nkf (~> 0.2.0)
nkf (~> 0.2)
optparse (>= 0.1.1, < 1.0.0)
ostruct (>= 0.1.0)
plist (>= 3.1.0, < 4.0.0)
@@ -122,10 +122,9 @@ GEM
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.4.1)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
fastlane-sirp (1.1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.98.0)
google-apis-androidpublisher_v3 (0.100.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-core (0.18.0)
addressable (~> 2.5, >= 2.5.1)
@@ -135,11 +134,11 @@ GEM
mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
google-apis-iamcredentials_v1 (0.26.0)
google-apis-iamcredentials_v1 (0.27.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-playcustomapp_v1 (0.17.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-storage_v1 (0.61.0)
google-apis-storage_v1 (0.62.0)
google-apis-core (>= 0.15.0, < 2.a)
google-cloud-core (1.8.0)
google-cloud-env (>= 1.0, < 3.a)
@@ -147,7 +146,7 @@ GEM
google-cloud-env (2.1.1)
faraday (>= 1.0, < 3.a)
google-cloud-errors (1.6.0)
google-cloud-storage (1.59.0)
google-cloud-storage (1.60.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-core (>= 0.18, < 2)
@@ -169,13 +168,13 @@ GEM
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.19.3)
json (2.19.5)
jwt (2.10.2)
base64
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.19.1)
multi_json (1.21.1)
multipart-post (2.4.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
@@ -186,7 +185,7 @@ GEM
ostruct (0.6.3)
plist (3.7.2)
public_suffix (7.0.5)
rake (13.3.1)
rake (13.4.2)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
@@ -205,7 +204,6 @@ GEM
simctl (1.6.10)
CFPropertyList
naturally
sysrandom (1.0.5)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -243,15 +241,15 @@ CHECKSUMS
artifactory (3.0.17) sha256=3023d5c964c31674090d655a516f38ca75665c15084140c08b7f2841131af263
atomos (0.1.3) sha256=7d43b22f2454a36bace5532d30785b06de3711399cb1c6bf932573eda536789f
aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b
aws-partitions (1.1237.0) sha256=9b82f529b69ad83a8e4c5e123038924ed5e8f59bd6064a293ef20efc63364841
aws-sdk-core (3.244.0) sha256=3e458c078b0c5bdee95bc370c3a483374b3224cf730c1f9f0faf849a5d9a18ea
aws-sdk-kms (1.123.0) sha256=d405f37e82f8fa32045ca8980be266c0b45b37aaf2012afe0254321a1e811f20
aws-sdk-s3 (1.219.0) sha256=6a755d7377978525758b3c29185ca6a10128ce2b07555ca37c4549de10c2f1c7
aws-partitions (1.1246.0) sha256=809cd7d38b7ba4ea651c9879248ecf9fd0f8289412e76f26478d2b37064faa1d
aws-sdk-core (3.246.0) sha256=393864ec8948560e69fcccc2e4d256b40c7028eb98930608dd295279e3c4ddcc
aws-sdk-kms (1.124.0) sha256=40d00ab706d7e49fd620270bd0dcb546f266295abdd49b54fec2611e2a41f37c
aws-sdk-s3 (1.221.0) sha256=a05488eab2083a1e90b02e18479d8f65e401081d671b2d138992a2c5fef85491
aws-sigv4 (1.12.1) sha256=6973ff95cb0fd0dc58ba26e90e9510a2219525d07620c8babeb70ef831826c00
babosa (1.0.4) sha256=18dea450f595462ed7cb80595abd76b2e535db8c91b350f6c4b3d73986c5bc99
base64 (0.2.0) sha256=0f25e9b21a02a0cc0cea8ef92b2041035d39350946e8789c562b2d1a3da01507
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.1) sha256=1c09efab961da45203c8316b0cdaec0ff391dfadb952dd459584b63ebf8054ca
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
claide (1.1.0) sha256=6d3c5c089dde904d96aa30e73306d0d4bd444b1accb9b3125ce14a3c0183f82e
colored (1.2) sha256=9d82b47ac589ce7f6cab64b1f194a2009e9fd00c326a5357321f44afab2c1d2c
colored2 (3.1.2) sha256=b13c2bd7eeae2cf7356a62501d398e72fde78780bd26aec6a979578293c28b4a
@@ -277,29 +275,29 @@ CHECKSUMS
faraday-retry (1.0.4) sha256=dc659233777fabf96c69c2ffe56c0a5d2c102af90321a42cc6c90157bcd716aa
faraday_middleware (1.2.1) sha256=d45b78c8ee864c4783fbc276f845243d4a7918a67301c052647bacabec0529e9
fastimage (2.4.1) sha256=c64bebd46b6fd8943ab70c1e6e85ff728f970f2e48f92ecd249b6bc3a540ad20
fastlane (2.232.2) sha256=978689f60f0fc3d54699de86ef12be4eda9f5b52217c1798965257c390d2b112
fastlane-sirp (1.0.0) sha256=66478f25bcd039ec02ccf65625373fca29646fa73d655eb533c915f106c5e641
fastlane (2.234.0) sha256=b74835681ad9a8e9c0931a5727dad1bab433895ac534c864a1ed5749625d26e9
fastlane-sirp (1.1.0) sha256=10bc94f9682efd8e1badfb31452a76dd8981f1f3a33717c765fde6d75b54d847
gh_inspector (1.1.3) sha256=04cca7171b87164e053aa43147971d3b7f500fcb58177698886b48a9fc4a1939
google-apis-androidpublisher_v3 (0.98.0) sha256=094fb952419c1131c16c4dfa66e0c96e6a2fa33adbe266f614b84b22cbc8c5cb
google-apis-androidpublisher_v3 (0.100.0) sha256=7a82935bee985190e8fe23bf5e53df3a27d65dd084114bb71b846b617de16489
google-apis-core (0.18.0) sha256=96b057816feeeab448139ed5b5c78eab7fc2a9d8958f0fbc8217dedffad054ee
google-apis-iamcredentials_v1 (0.26.0) sha256=3ff70a10a1d6cddf2554e95b7c5df2c26afdeaeb64100048a355194da19e48a3
google-apis-iamcredentials_v1 (0.27.0) sha256=9289f29968610754ef11d98b9ec627f0153f3e2616fef839aef096de529f6d1e
google-apis-playcustomapp_v1 (0.17.0) sha256=d5bc90b705f3f862bab4998086449b0abe704ee1685a84821daa90ca7fa95a78
google-apis-storage_v1 (0.61.0) sha256=b330e599b58e6a01533c189525398d6dbdbaf101ffb0c60145940b57e1c982e8
google-apis-storage_v1 (0.62.0) sha256=f62467c36df53287fb0252ebb4da85f9e25d7b4c5809d045c2aab1fc307760c1
google-cloud-core (1.8.0) sha256=e572edcbf189cfcab16590628a516cec3f4f63454b730e59f0b36575120281cf
google-cloud-env (2.1.1) sha256=cf4bb8c7d517ee1ea692baedf06e0b56ce68007549d8d5a66481aa9f97f46999
google-cloud-errors (1.6.0) sha256=1da8476dd706ad04b9d32e3c4b90d07d3463b37d6407cb56d41342ea7647d0a1
google-cloud-storage (1.59.0) sha256=b8c9a5661d775d65ccb279bb1d6be07fd8152576eb0146c2026bd023c4b186b9
google-cloud-storage (1.60.0) sha256=b21b752d37945d678a4533be5ef4303f15d33a964d8bc709c7c41c3600f650db
googleauth (1.11.2) sha256=7e6bacaeed7aea3dd66dcea985266839816af6633e9f5983c3c2e0e40a44731e
highline (2.0.3) sha256=2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479
http-cookie (1.0.8) sha256=b14fe0445cf24bf9ae098633e9b8d42e4c07c3c1f700672b09fbfe32ffd41aa6
httpclient (2.9.0) sha256=4b645958e494b2f86c2f8a2f304c959baa273a310e77a2931ddb986d83e498c8
jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1
json (2.19.3) sha256=289b0bb53052a1fa8c34ab33cc750b659ba14a5c45f3fcf4b18762dc67c78646
json (2.19.5) sha256=218a18553e4801d579ca7e0f5bc72bafd776d7397238a1fb4e74db5b0a812c59
jwt (2.10.2) sha256=31e1ee46f7359883d5e622446969fe9c118c3da87a0b1dca765ce269c3a0c4f4
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
mini_magick (4.13.2) sha256=71d6258e0e8a3d04a9a0a09784d5d857b403a198a51dd4f882510435eb95ddd9
mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef
multi_json (1.19.1) sha256=7aefeff8f2c854bf739931a238e4aea64592845e0c0395c8a7d2eea7fdd631b7
multi_json (1.21.1) sha256=e6126a31808e3b4d19f483c775ceac34df190dffa62adfb63a165ee14ba68080
multipart-post (2.4.1) sha256=9872d03a8e552020ca096adadbf5e3cb1cd1cdd6acd3c161136b8a5737cdb4a8
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nanaimo (0.4.0) sha256=faf069551bab17f15169c1f74a1c73c220657e71b6e900919897a10d991d0723
@@ -310,7 +308,7 @@ CHECKSUMS
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
plist (3.7.2) sha256=d37a4527cc1116064393df4b40e1dbbc94c65fa9ca2eec52edf9a13616718a42
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
representable (3.2.0) sha256=cc29bf7eebc31653586849371a43ffe36c60b54b0a6365b5f7d95ec34d1ebace
retriable (3.4.1) sha256=fb3f114b7d492121c158c01f3d5152b5a615c5b70d5877d0bc08c7ec3725c3bc
rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142
@@ -320,7 +318,6 @@ CHECKSUMS
security (0.1.5) sha256=3a977a0eca7706e804c96db0dd9619e0a94969fe3aac9680fcfc2bf9b8a833b7
signet (0.21.0) sha256=d617e9fbf24928280d39dcfefba9a0372d1c38187ffffd0a9283957a10a8cd5b
simctl (1.6.10) sha256=b99077f4d13ad81eace9f86bf5ba4df1b0b893a4d1b368bd3ed59b5b27f9236b
sysrandom (1.0.5) sha256=5ac1ac3c2ec64ef76ac91018059f541b7e8f437fbda1ccddb4f2c56a9ccf1e75
terminal-notifier (2.0.0) sha256=7a0d2b2212ab9835c07f4b2e22a94cff64149dba1eed203c04835f7991078cea
terminal-table (3.0.2) sha256=f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91
trailblazer-option (0.1.2) sha256=20e4f12ea4e1f718c8007e7944ca21a329eee4eed9e0fa5dde6e8ad8ac4344a3

115
Makefile
View File

@@ -18,7 +18,6 @@ help:
@echo ""
@echo " Development:"
@echo " run Run the app in debug mode"
@echo " webapp-run Run the web app in default browser"
@echo " format Format all Dart files"
@echo " analyze Analyze all Dart files"
@echo " check Check all files (format + analyze, no changes)"
@@ -37,23 +36,30 @@ help:
@echo " Building:"
@echo " android-install Build APK and install on connected device"
@echo " android-build-apk Build Android APK"
@echo " android-build-apk-split Build Android split-per-ABI APKs"
@echo " android-build-aab Build Android App Bundle"
@echo " android-push Build APK and push to device via adb"
@echo " ios-build Build iOS (no codesign)"
@echo " web-build Build web app"
@echo " macos-build Build macOS app (.app bundle, no codesign)"
@echo " macos-build-pkg Build signed macOS .pkg for App Store"
@echo " build-all Build all platforms"
@echo ""
@echo " Release:"
@echo " android-release-apk Build APK and copy to build/release/"
@echo " android-release-aab Build AAB and copy to build/release/"
@echo " ios-release Build iOS and create unsigned IPA in build/release/"
@echo " web-release Build web and create zip in build/release/"
@echo " ios-release Build IPA and copy to build/release/"
@echo " macos-release Build PKG and copy to build/release/"
@echo " release-all Build and release all platforms"
@echo ""
@echo " Deploying:"
@echo " android-deploy Build AAB and upload to Google Play (TRACK=internal|beta|production, STATUS=draft|completed)"
@echo " android-promote Promote release between tracks (FROM=internal, TO=production, STATUS=draft|completed)"
@echo " ios-deploy Build IPA and upload (DEST=testflight|appstore, default: testflight)"
@echo " ios-submit Submit the existing App Store build for review (no upload)"
@echo " macos-deploy Build PKG and upload (DEST=testflight|appstore, default: testflight)"
@echo " macos-submit Submit the existing Mac App Store build for review (no upload)"
@echo " deploy-production Build and deploy to production (Google Play + App Store)"
@echo " deploy-beta Build and deploy to beta (Google Play beta + TestFlight)"
# Setup
.PHONY: get
@@ -82,12 +88,7 @@ i18n-watch:
# Development
.PHONY: run
run:
flutter run --dart-define-from-file=.env
.PHONY: webapp-run
webapp-run:
open http://localhost:5111 & flutter run -d web-server --web-port=5111 --dart-define-from-file=.env
flutter run
.PHONY: format
format:
dart format .
@@ -105,21 +106,23 @@ check:
.PHONY: test
test:
ifdef FILES
flutter test $(FILES) --dart-define-from-file=.env
flutter test $(FILES)
else
flutter test --dart-define-from-file=.env
flutter test
endif
.PHONY: test-coverage
test-coverage:
flutter test --coverage --dart-define-from-file=.env
flutter test --coverage
@echo "Coverage report generated at coverage/lcov.info"
# Building
.PHONY: android-build-apk
android-build-apk:
flutter build apk --release --obfuscate --split-debug-info=build/debug-info-apk --dart-define-from-file=.env
flutter build apk --release --obfuscate --split-debug-info=build/debug-info-apk
.PHONY: android-build-apk-split
android-build-apk-split:
flutter build apk --release --split-per-abi --obfuscate --split-debug-info=build/debug-info-apk
.PHONY: android-install
android-install: android-build-apk
flutter install
@@ -131,22 +134,36 @@ android-push: android-build-apk
.PHONY: android-build-aab
android-build-aab:
flutter build appbundle --release --obfuscate --split-debug-info=build/debug-info-aab --dart-define-from-file=.env
flutter build appbundle --release --obfuscate --split-debug-info=build/debug-info-aab
.PHONY: ios-build
ios-build:
flutter build ios --release --no-codesign --obfuscate --split-debug-info=build/debug-info-ios --dart-define-from-file=.env
flutter build ios --release --no-codesign --obfuscate --split-debug-info=build/debug-info-ios
.PHONY: ios-build-ipa
ios-build-ipa:
flutter build ipa --release --obfuscate --split-debug-info=build/debug-info-ios --dart-define-from-file=.env --export-options-plist=ios/ExportOptions.plist
.PHONY: web-build
web-build:
flutter build web --release --dart-define-from-file=.env
.PHONY: macos-build
macos-build:
flutter build macos --release --obfuscate --split-debug-info=build/debug-info-macos
.PHONY: macos-build-pkg
macos-build-pkg:
flutter build macos --config-only --obfuscate --split-debug-info=build/debug-info-macos
rm -rf build/macos/Runner.xcarchive build/macos/pkg
xcodebuild -workspace macos/Runner.xcworkspace \
-scheme Runner \
-configuration Release \
-archivePath build/macos/Runner.xcarchive \
-allowProvisioningUpdates \
archive
xcodebuild -exportArchive \
-archivePath build/macos/Runner.xcarchive \
-exportPath build/macos/pkg \
-exportOptionsPlist macos/ExportOptions.plist \
-allowProvisioningUpdates
.PHONY: build-all
build-all: android-build-apk android-build-aab web-build
build-all: android-build-apk android-build-aab
# Release (build + copy renamed artifacts to build/release/)
.PHONY: android-release-apk
@@ -162,11 +179,17 @@ android-release-aab: android-build-aab
@echo "-> build/release/pantry-$(VERSION).aab"
.PHONY: ios-release
ios-release: ios-build
ios-release: ios-build-ipa
mkdir -p build/release
cp build/ios/ipa/*.ipa build/release/pantry-$(VERSION).ipa
@echo "-> build/release/pantry-$(VERSION).ipa"
.PHONY: macos-release
macos-release: macos-build-pkg
mkdir -p build/release
cp build/macos/pkg/*.pkg build/release/pantry-$(VERSION).pkg
@echo "-> build/release/pantry-$(VERSION).pkg"
.PHONY: android-upload
android-upload:
@echo "$(or $(TRACK),beta)" | grep -qE '^(internal|alpha|beta|production)$$' || (echo "Error: Invalid TRACK '$(TRACK)'. Must be: internal, alpha, beta, production"; exit 1)
@@ -198,14 +221,41 @@ ios-upload:
.PHONY: ios-deploy
ios-deploy: ios-build-ipa ios-upload
.PHONY: web-release
web-release: web-build
mkdir -p build/release
cd build/web && zip -r ../release/pantry-$(VERSION)-web.zip .
@echo "-> build/release/pantry-$(VERSION)-web.zip"
.PHONY: ios-submit
ios-submit:
bundle exec fastlane ios submit
.PHONY: macos-upload
macos-upload:
@echo "$(or $(DEST),testflight)" | grep -qE '^(testflight|appstore)$$' || (echo "Error: Invalid DEST '$(DEST)'. Must be: testflight, appstore"; exit 1)
@echo "Destination: $(or $(DEST),testflight)"
@if [ "$(or $(DEST),testflight)" = "appstore" ]; then \
bundle exec fastlane mac release; \
else \
bundle exec fastlane mac beta; \
fi
.PHONY: macos-deploy
macos-deploy: macos-build-pkg macos-upload
.PHONY: macos-submit
macos-submit:
bundle exec fastlane mac submit
.PHONY: release-all
release-all: build-clean android-release-apk android-release-aab web-release
release-all: android-release-apk android-release-aab
.PHONY: deploy-production
deploy-production:
$(MAKE) android-deploy TRACK=production STATUS=completed
$(MAKE) ios-deploy DEST=appstore
$(MAKE) macos-deploy DEST=appstore
.PHONY: deploy-beta
deploy-beta:
$(MAKE) android-deploy TRACK=beta STATUS=completed
$(MAKE) ios-deploy DEST=testflight
$(MAKE) macos-deploy DEST=testflight
# CocoaPods
.PHONY: pods
@@ -241,11 +291,12 @@ endif
.PHONY: icons
icons:
mkdir -p assets/icon
rsvg-convert -h 1024 assets/logo_icon.svg > assets/icon/icon.png
rsvg-convert -w 1024 -h 1024 assets/logo_icon_squircle.svg > assets/icon/icon.png
rsvg-convert -w 1024 -h 1024 assets/logo_icon_square.svg > assets/icon/icon_ios.png
rsvg-convert -w 1024 -h 1024 assets/logo_icon_foreground.svg > assets/icon/icon_foreground.png
rsvg-convert -w 1024 -h 1024 assets/logo_icon_macos.svg > assets/icon/icon_macos.png
dart run flutter_launcher_icons
cp assets/icon/icon_ios.png fastlane/metadata/android/en-US/images/icon.png
rsvg-convert -w 512 -h 512 assets/logo_icon_squircle.svg > fastlane/metadata/android/en-US/images/icon.png
.PHONY: splash
splash:

View File

@@ -43,9 +43,9 @@ It may take a few minutes for your tester status to propagate.
Download the latest APK from the
[releases page](https://github.com/chenasraf/pantry-flutter/releases) and sideload onto your device.
### iOS
### App Store (iOS)
[Coming soon — TestFlight]
[Install from the App Store](https://apps.apple.com/us/app/pantry-for-nextcloud/id6762161619)
## Development

View File

@@ -5,6 +5,7 @@ plugins {
id("dev.flutter.flutter-gradle-plugin")
}
import com.android.build.gradle.internal.api.ApkVariantOutputImpl
import java.io.FileInputStream
import java.util.Properties
@@ -48,7 +49,16 @@ android {
}
}
dependenciesInfo {
includeInApk = false
includeInBundle = false
}
buildTypes {
debug {
applicationIdSuffix = ".debug"
versionNameSuffix = "-dev"
}
release {
signingConfig = if (signingConfigs.names.contains("release"))
signingConfigs.getByName("release")
@@ -58,6 +68,17 @@ android {
}
}
val abiCodes = mapOf("armeabi-v7a" to 1, "arm64-v8a" to 2, "x86_64" to 3)
android.applicationVariants.configureEach {
val variant = this
variant.outputs.forEach { output ->
val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier]
if (abiVersionCode != null) {
(output as ApkVariantOutputImpl).versionCodeOverride = variant.versionCode * 10 + abiVersionCode
}
}
}
flutter {
source = "../.."
}

View File

@@ -1,7 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="Pantry Dev" tools:replace="android:label" />
</manifest>

View File

@@ -27,6 +27,21 @@
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -17,6 +17,24 @@ subprojects {
}
subprojects {
project.evaluationDependsOn(":app")
// Force any Flutter plugin subproject (e.g. receive_sharing_intent)
// that defaults to a different Kotlin jvmTarget to match this app's
// Java/Kotlin compatibility, avoiding "Inconsistent JVM Target
// Compatibility Between Java and Kotlin Tasks" build failures.
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
}
}
plugins.withId("com.android.library") {
extensions.configure<com.android.build.gradle.LibraryExtension>("android") {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}
}
}
tasks.register<Delete>("clean") {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 29 KiB

BIN
assets/icon/icon_macos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -0,0 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
<defs>
<clipPath id="squircle">
<path transform="translate(100 100) scale(1.609375)" d="
M256,0 C353,0 406,0 443,18 C468,30 482,44 494,69
C512,106 512,159 512,256 C512,353 512,406 494,443
C482,468 468,482 443,494 C406,512 353,512 256,512
C159,512 106,512 69,494 C44,482 30,468 18,443
C0,406 0,353 0,256 C0,159 0,106 18,69
C30,44 44,30 69,18 C106,0 159,0 256,0 Z"/>
</clipPath>
<filter id="dropShadow" x="-10%" y="-10%" width="120%" height="125%">
<feGaussianBlur in="SourceAlpha" stdDeviation="14"/>
<feOffset dy="14"/>
<feComponentTransfer>
<feFuncA type="linear" slope="0.35"/>
</feComponentTransfer>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<linearGradient id="topLight" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#FFFFFF" stop-opacity="0.22"/>
<stop offset="0.55" stop-color="#FFFFFF" stop-opacity="0"/>
<stop offset="1" stop-color="#000000" stop-opacity="0.12"/>
</linearGradient>
</defs>
<g filter="url(#dropShadow)">
<g clip-path="url(#squircle)">
<rect width="1024" height="1024" fill="#0082C9"/>
<g transform="translate(100 100) scale(1.609375) translate(106 106) scale(12.5)">
<path fill="#FFFFFF" d="M12,3L2,12H5V20H19V12H22L12,3M12,8.75A2.25,2.25 0 0,1 14.25,11A2.25,2.25 0 0,1 12,13.25A2.25,2.25 0 0,1 9.75,11A2.25,2.25 0 0,1 12,8.75M12,15C13.5,15 16.5,15.75 16.5,17.25V18H7.5V17.25C7.5,15.75 10.5,15 12,15Z"/>
</g>
<rect width="1024" height="1024" fill="url(#topLight)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<clipPath id="squircle">
<path d="
M256,0
C353,0 406,0 443,18
C468,30 482,44 494,69
C512,106 512,159 512,256
C512,353 512,406 494,443
C482,468 468,482 443,494
C406,512 353,512 256,512
C159,512 106,512 69,494
C44,482 30,468 18,443
C0,406 0,353 0,256
C0,159 0,106 18,69
C30,44 44,30 69,18
C106,0 159,0 256,0
Z"/>
</clipPath>
</defs>
<rect width="512" height="512" fill="#0082C9" clip-path="url(#squircle)"/>
<g transform="translate(106, 106) scale(12.5)">
<path fill="#FFFFFF" d="M12,3L2,12H5V20H19V12H22L12,3M12,8.75A2.25,2.25 0 0,1 14.25,11A2.25,2.25 0 0,1 12,13.25A2.25,2.25 0 0,1 9.75,11A2.25,2.25 0 0,1 12,8.75M12,15C13.5,15 16.5,15.75 16.5,17.25V18H7.5V17.25C7.5,15.75 10.5,15 12,15Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 913 B

View File

@@ -1,3 +1,2 @@
# The Deliverfile allows you to store various App Store Connect metadata
# For more information, check out the docs
# https://docs.fastlane.tools/actions/deliver/
metadata_path("./fastlane/metadata/ios")
screenshots_path("./fastlane/metadata/ios/en-US/screenshots")

View File

@@ -122,6 +122,7 @@ platform :android do
upload_to_play_store(
skip_upload_aab: true,
skip_upload_apk: true,
skip_upload_changelogs: true,
metadata_path: File.expand_path("metadata/android", __dir__),
skip_upload_images: !changed,
skip_upload_screenshots: !changed,
@@ -169,24 +170,39 @@ platform :ios do
ipa_path
end
def sync_release_notes
version_code = version_info[:build]
changelog_file = File.expand_path("metadata/ios/en-US/changelogs/#{version_code}.txt", __dir__)
notes = File.exist?(changelog_file) ? File.read(changelog_file).strip : changelog_notes
release_notes_path = File.expand_path("metadata/ios/en-US/release_notes.txt", __dir__)
File.write(release_notes_path, notes)
UI.message("Synced release notes from build #{version_code} (#{notes.length} chars)")
notes
end
desc "Upload to TestFlight"
lane :beta do
notes = sync_release_notes
upload_to_testflight(
api_key: api_key,
ipa: find_ipa,
changelog: changelog_notes,
changelog: notes,
skip_waiting_for_build_processing: true,
)
end
desc "Upload to App Store"
lane :release do
sync_release_notes
deliver(
api_key: api_key,
ipa: find_ipa,
metadata_path: File.expand_path("metadata/ios", __dir__),
screenshots_path: File.expand_path("metadata/ios/en-US/screenshots", __dir__),
skip_screenshots: true,
submit_for_review: false,
submit_for_review: true,
precheck_include_in_app_purchases: false,
force: true,
)
end
@@ -195,9 +211,113 @@ platform :ios do
deliver(
api_key: api_key,
metadata_path: File.expand_path("metadata/ios", __dir__),
screenshots_path: File.expand_path("metadata/ios/en-US/screenshots", __dir__),
skip_binary_upload: true,
skip_screenshots: true,
submit_for_review: false,
precheck_include_in_app_purchases: false,
force: true,
)
end
desc "Submit existing App Store build for review (no IPA upload)"
lane :submit do
deliver(
api_key: api_key,
metadata_path: File.expand_path("metadata/ios", __dir__),
screenshots_path: File.expand_path("metadata/ios/en-US/screenshots", __dir__),
skip_binary_upload: true,
skip_screenshots: true,
submit_for_review: true,
precheck_include_in_app_purchases: false,
force: true,
)
end
end
# -- macOS --
platform :mac do
def api_key
key_id = ENV.fetch("APP_STORE_API_KEY")
app_store_connect_api_key(
key_id: key_id,
issuer_id: ENV.fetch("APP_STORE_ISSUER_ID"),
key_filepath: File.join(ENV.fetch("APP_STORE_KEY_PATH"), "AuthKey_#{key_id}.p8"),
)
end
def find_pkg
pkg_path = Dir[File.expand_path("../build/macos/pkg/*.pkg", __dir__)].first
UI.user_error!("No PKG found in build/macos/pkg/. Run 'make macos-build-pkg' first.") unless pkg_path
pkg_path
end
def sync_release_notes
version_code = version_info[:build]
changelog_file = File.expand_path("metadata/macos/en-US/changelogs/#{version_code}.txt", __dir__)
notes = File.exist?(changelog_file) ? File.read(changelog_file).strip : changelog_notes
release_notes_path = File.expand_path("metadata/macos/en-US/release_notes.txt", __dir__)
File.write(release_notes_path, notes)
UI.message("Synced release notes from build #{version_code} (#{notes.length} chars)")
notes
end
desc "Upload to TestFlight (macOS)"
lane :beta do
notes = sync_release_notes
upload_to_testflight(
api_key: api_key,
pkg: find_pkg,
app_platform: "osx",
changelog: notes,
skip_waiting_for_build_processing: true,
)
end
desc "Upload to Mac App Store"
lane :release do
sync_release_notes
deliver(
api_key: api_key,
pkg: find_pkg,
platform: "osx",
metadata_path: File.expand_path("metadata/macos", __dir__),
screenshots_path: File.expand_path("metadata/macos/en-US/screenshots", __dir__),
skip_screenshots: true,
submit_for_review: true,
precheck_include_in_app_purchases: false,
force: true,
)
end
desc "Sync macOS metadata only (no PKG upload)"
lane :metadata do
deliver(
api_key: api_key,
platform: "osx",
metadata_path: File.expand_path("metadata/macos", __dir__),
screenshots_path: File.expand_path("metadata/macos/en-US/screenshots", __dir__),
skip_binary_upload: true,
skip_screenshots: true,
submit_for_review: false,
precheck_include_in_app_purchases: false,
force: true,
)
end
desc "Submit existing Mac App Store build for review (no PKG upload)"
lane :submit do
deliver(
api_key: api_key,
platform: "osx",
metadata_path: File.expand_path("metadata/macos", __dir__),
screenshots_path: File.expand_path("metadata/macos/en-US/screenshots", __dir__),
skip_binary_upload: true,
skip_screenshots: true,
submit_for_review: true,
precheck_include_in_app_purchases: false,
force: true,
)
end
end

View File

@@ -68,6 +68,51 @@ Upload to App Store
Sync iOS metadata only (no IPA upload)
### ios submit
```sh
[bundle exec] fastlane ios submit
```
Submit existing App Store build for review (no IPA upload)
----
## Mac
### mac beta
```sh
[bundle exec] fastlane mac beta
```
Upload to TestFlight (macOS)
### mac release
```sh
[bundle exec] fastlane mac release
```
Upload to Mac App Store
### mac metadata
```sh
[bundle exec] fastlane mac metadata
```
Sync macOS metadata only (no PKG upload)
### mac submit
```sh
[bundle exec] fastlane mac submit
```
Submit existing Mac App Store build for review (no PKG upload)
----
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.

View File

@@ -0,0 +1,2 @@
Bug Fixes
- about urls not opening

View File

@@ -0,0 +1,3 @@
Features
- add more icons to categories
- allow adding one-off list items

View File

@@ -0,0 +1,3 @@
Features
- add search in lists
- allow uploading list item image

View File

@@ -0,0 +1,2 @@
Build System
- add abi split

View File

@@ -0,0 +1,2 @@
Build System
- reproducible build

View File

@@ -0,0 +1,2 @@
Build System
- upgrade flutter version

View File

@@ -0,0 +1,2 @@
Build System
- remove apk obfuscation

View File

@@ -0,0 +1,2 @@
Build System
- zipalign

View File

@@ -0,0 +1,2 @@
Build System
- remove zipalign

View File

@@ -0,0 +1,2 @@
Build System
- disable deps metadata in apk

View File

@@ -0,0 +1,2 @@
Build System
- strip deps metadata from build

View File

@@ -0,0 +1,2 @@
Build System
- re-sign with stripping

View File

@@ -0,0 +1,2 @@
Build System
- fix signing

View File

@@ -0,0 +1,4 @@
Features
- update notes view & edit ui
Bug Fixes
- bug where note grid would not clip correctly

View File

@@ -0,0 +1,2 @@
Bug Fixes
- make markdown links clickable

View File

@@ -0,0 +1,4 @@
Features
- add setting to require checkbox tap to complete checklist items
Bug Fixes
- preserve subpath for Nextcloud instances hosted on sub-paths

View File

@@ -0,0 +1,5 @@
Features
- add setting to show spacing between categories in checklist items
- create new lists from the list selector
- share photos, links, and text to Pantry from other apps
- take photos directly from the photo board

View File

@@ -0,0 +1,5 @@
Features
- add trash view
- add undo action for checking items
- improve ui for larger devices
- switch between photos in photo view

View File

@@ -0,0 +1,2 @@
Bug Fixes
- auto-dismiss item check snackbar after 6 seconds

View File

@@ -10,7 +10,7 @@ Upload and organize photos into folders. Add captions, drag to reorder, and brow
Keep shared notes with your household. Color-code them, write in markdown, and pin the important stuff where everyone can see it.
* Your data, your server
Pantry connects directly to your self-hosted Nextcloud instance. No accounts to create, no cloud services in between. Your data never leaves your server.
Pantry connects directly to your Nextcloud instance. No accounts to create, no cloud services in between. Your data never leaves your server.
* Features
- Shared checklists with categories, quantities, and recurrence
@@ -20,6 +20,6 @@ Pantry connects directly to your self-hosted Nextcloud instance. No accounts to
- Multi-select for bulk actions
- Offline caching for fast loading
- Material Design 3 with dark mode support
- Nextcloud Login Flow v2 authentication
- Secure login flow authentication
* Pantry requires a Nextcloud server with the Pantry app installed. Visit the project page for setup instructions.
* Requires a Nextcloud server with the Pantry app installed. Visit the project page for setup instructions.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1 +1 @@
Manage your household with your Nextcloud — lists, photos & notes.
Manage your household — shared lists, photos & notes on your own server.

View File

@@ -1 +1 @@
Nextcloud Pantry
Pantry for Nextcloud

View File

@@ -0,0 +1 @@
2026 Chen Asraf

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,2 @@
Bug Fixes
- about urls not opening

View File

@@ -0,0 +1,3 @@
Features
- add more icons to categories
- allow adding one-off list items

View File

@@ -0,0 +1,3 @@
Features
- add search in lists
- allow uploading list item image

View File

@@ -0,0 +1,2 @@
Build System
- add abi split

View File

@@ -0,0 +1,2 @@
Build System
- reproducible build

View File

@@ -0,0 +1,2 @@
Build System
- upgrade flutter version

View File

@@ -0,0 +1,2 @@
Build System
- remove apk obfuscation

View File

@@ -0,0 +1,2 @@
Build System
- zipalign

View File

@@ -0,0 +1,2 @@
Build System
- remove zipalign

View File

@@ -0,0 +1,2 @@
Build System
- disable deps metadata in apk

View File

@@ -0,0 +1,2 @@
Build System
- strip deps metadata from build

View File

@@ -0,0 +1,2 @@
Build System
- re-sign with stripping

View File

@@ -0,0 +1,2 @@
Build System
- fix signing

View File

@@ -0,0 +1,4 @@
Features
- update notes view & edit ui
Bug Fixes
- bug where note grid would not clip correctly

View File

@@ -0,0 +1,2 @@
Bug Fixes
- make markdown links clickable

View File

@@ -0,0 +1,4 @@
Features
- add setting to require checkbox tap to complete checklist items
Bug Fixes
- preserve subpath for Nextcloud instances hosted on sub-paths

View File

@@ -0,0 +1,5 @@
Features
- add setting to show spacing between categories in checklist items
- create new lists from the list selector
- share photos, links, and text to Pantry from other apps
- take photos directly from the photo board

View File

@@ -0,0 +1,6 @@
Features
- add trash view
- add undo action for checking items
- improve ui for larger devices
- open full file picker when running on macOS
- switch between photos in photo view

View File

@@ -0,0 +1,2 @@
Bug Fixes
- auto-dismiss item check snackbar after 6 seconds

View File

@@ -10,7 +10,7 @@ Upload and organize photos into folders. Add captions, drag to reorder, and brow
Keep shared notes with your household. Color-code them, write in markdown, and pin the important stuff where everyone can see it.
* Your data, your server
Pantry connects directly to your self-hosted Nextcloud instance. No accounts to create, no cloud services in between. Your data never leaves your server.
Pantry connects directly to your Nextcloud instance. No accounts to create, no cloud services in between. Your data never leaves your server.
* Features
- Shared checklists with categories, quantities, and recurrence
@@ -20,6 +20,6 @@ Pantry connects directly to your self-hosted Nextcloud instance. No accounts to
- Multi-select for bulk actions
- Offline caching for fast loading
- Material Design 3 with dark mode support
- Nextcloud Login Flow v2 authentication
- Secure login flow authentication
* Pantry requires a Nextcloud server with the Pantry app installed. Visit the project page for setup instructions.
* Requires a Nextcloud server with the Pantry app installed. Visit the project page for setup instructions.

View File

@@ -1 +1 @@
nextcloud,household,checklist,shopping list,photos,notes,self-hosted
nextcloud, checklist, todo, shopping list, notes, self-hosted, household

View File

@@ -1 +1 @@
https://casraf.dev
https://github.com/chenasraf/pantry-flutter

View File

@@ -1 +1 @@
Nextcloud Pantry
Pantry for Nextcloud

View File

@@ -0,0 +1 @@
Manage your household on your Nextcloud — shared lists, photos & notes.

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View File

@@ -1 +1 @@
Household hub for Nextcloud
Home lists, photos & notes

View File

@@ -0,0 +1 @@
PRODUCTIVITY

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@
EQq38!t9uA!@RdAkn6umJHo@nDh3ZZwM

View File

@@ -0,0 +1 @@
store-test

View File

@@ -0,0 +1 @@
casraf@pm.me

View File

@@ -0,0 +1 @@
Chen

View File

@@ -0,0 +1 @@
Asraf

View File

@@ -0,0 +1,3 @@
1. In the login screen, for the server, use: spider.casraf.dev and click "Connect"
2. Use the given username/password to sign in to the Nextcloud website loaded in the in-app browser
3. Click "Grant Access" to grant access to the app inside the in-app browser

View File

@@ -0,0 +1 @@
+972549107970

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@
2026 Chen Asraf

View File

@@ -0,0 +1,5 @@
Features
- add setting to show spacing between categories in checklist items
- create new lists from the list selector
- share photos, links, and text to Pantry from other apps
- take photos directly from the photo board

View File

@@ -0,0 +1,6 @@
Features
- add trash view
- add undo action for checking items
- improve ui for larger devices
- go back by using Esc key
- switch between photos in photo view

View File

@@ -0,0 +1,3 @@
Bug Fixes
- auto-dismiss item check snackbar after 6 seconds
- esc to dismiss would ring bell and not work

View File

@@ -0,0 +1,25 @@
Pantry is a companion app for the Nextcloud Pantry server app. It lets you and your household members collaborate on shared checklists, a photo board, and a notes wall — all stored on your own Nextcloud server.
* Checklists
Create shopping lists and to-do lists with categories, quantities, recurring items, and images. Drag to reorder, sort by name or date, and check items off as you go.
* Photo Board
Upload and organize photos into folders. Add captions, drag to reorder, and browse everything in a clean grid view.
* Notes Wall
Keep shared notes with your household. Color-code them, write in markdown, and pin the important stuff where everyone can see it.
* Your data, your server
Pantry connects directly to your Nextcloud instance. No accounts to create, no cloud services in between. Your data never leaves your server.
* Features
- Shared checklists with categories, quantities, and recurrence
- Photo board with folders, captions, and multi-upload
- Color-coded notes wall
- Drag-and-drop reordering everywhere
- Multi-select for bulk actions
- Offline caching for fast loading
- Material Design 3 with dark mode support
- Secure login flow authentication
* Requires a Nextcloud server with the Pantry app installed. Visit the project page for setup instructions.

View File

@@ -0,0 +1 @@
nextcloud, checklist, todo, shopping list, notes, self-hosted, household

View File

@@ -0,0 +1 @@
https://github.com/chenasraf/pantry-flutter

View File

@@ -0,0 +1 @@
Pantry for Nextcloud

Some files were not shown because too many files have changed in this diff Show More