diff --git a/README.md b/README.md
index 2c6989d..d1336c1 100644
--- a/README.md
+++ b/README.md
@@ -22,16 +22,18 @@ Head over to the [**latest release**](https://github.com/yurtemre7/paren/release
| Android (most phones, 2016+) | `paren-arm64-v8a.apk` |
| Android (older 32-bit devices) | `paren-armeabi-v7a.apk` |
| Android (emulator / x86) | `paren-x86_64.apk` |
+| iOS (most phones, sideloading) | `paren.ipa` |
| Windows | `paren-*.msix` |
+| macOS | `paren.zip` |
| Linux | `paren-linux.tar.gz` |
-> Not sure which APK? Grab `paren-arm64-v8a.apk`.
+> Not sure which APK on your Android? Grab `paren-arm64-v8a.apk`.
***
## Code
-The project is written in [Flutter](https://flutter.dev/) and targets Android, Windows, and Linux.
+The project is written in [Flutter](https://flutter.dev/) and targets Android, iOS, macOS, Windows, and Linux.
Browse the codebase freely — check if the app behaves the way you want it to.
***
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 768c576..9e45ada 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -45,6 +45,8 @@ linter:
omit_obvious_local_variable_types: true
omit_obvious_property_types: true
directives_ordering: true
+ unnecessary_async: true
+ avoid_slow_async_io: true
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
diff --git a/android/Gemfile.lock b/android/Gemfile.lock
index 62c1c76..331f838 100644
--- a/android/Gemfile.lock
+++ b/android/Gemfile.lock
@@ -8,7 +8,7 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
- aws-partitions (1.1259.0)
+ aws-partitions (1.1261.0)
aws-sdk-core (3.252.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
@@ -20,7 +20,7 @@ GEM
aws-sdk-kms (1.129.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sigv4 (~> 1.5)
- aws-sdk-s3 (1.225.1)
+ aws-sdk-s3 (1.226.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
@@ -125,7 +125,7 @@ GEM
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.1.0)
gh_inspector (1.1.3)
- google-apis-androidpublisher_v3 (0.102.0)
+ google-apis-androidpublisher_v3 (0.103.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-core (0.18.0)
addressable (~> 2.5, >= 2.5.1)
@@ -135,11 +135,11 @@ GEM
mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
- google-apis-iamcredentials_v1 (0.27.0)
+ google-apis-iamcredentials_v1 (0.28.0)
google-apis-core (>= 0.15.0, < 2.a)
- google-apis-playcustomapp_v1 (0.17.0)
+ google-apis-playcustomapp_v1 (0.18.0)
google-apis-core (>= 0.15.0, < 2.a)
- google-apis-storage_v1 (0.63.0)
+ google-apis-storage_v1 (0.64.0)
google-apis-core (>= 0.15.0, < 2.a)
google-cloud-core (1.9.0)
google-cloud-env (>= 1.0, < 3.a)
@@ -148,7 +148,7 @@ GEM
base64 (~> 0.2)
faraday (>= 1.0, < 3.a)
google-cloud-errors (1.6.0)
- google-cloud-storage (1.60.0)
+ google-cloud-storage (1.61.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-core (>= 0.18, < 2)
@@ -158,7 +158,7 @@ GEM
googleauth (~> 1.9)
mini_mime (~> 1.0)
google-logging-utils (0.2.0)
- googleauth (1.17.0)
+ googleauth (1.17.1)
faraday (>= 1.0, < 3.a)
google-cloud-env (~> 2.2)
google-logging-utils (~> 0.1)
@@ -245,10 +245,10 @@ CHECKSUMS
artifactory (3.0.17) sha256=3023d5c964c31674090d655a516f38ca75665c15084140c08b7f2841131af263
atomos (0.1.3) sha256=7d43b22f2454a36bace5532d30785b06de3711399cb1c6bf932573eda536789f
aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b
- aws-partitions (1.1259.0) sha256=1a61c53f85cee1e69e4ab7946c7350b2237d724acf589023715e7117c03c18c6
+ aws-partitions (1.1261.0) sha256=89eda89781c1ea4e1be2a2dcdc72318c62c6171a01cdaeaa0cbecf3cea6f9fdc
aws-sdk-core (3.252.0) sha256=09c042cbfc2acf2239441cc9b982ebab2a999bed2ef6bdc51849e7b3d6e48a1c
aws-sdk-kms (1.129.0) sha256=363f548df321f4a4fcfd05523384e591060b400f8e65133ed7ef0793155a3343
- aws-sdk-s3 (1.225.1) sha256=d4b23a8db9b0a5548766b52d382b184f47f7e126560acdb731dd46adb5e26512
+ aws-sdk-s3 (1.226.0) sha256=e599f431e006ec9b92c61ee0f14d3f658a1f6c8a1d623d2160be927ac958e2bf
aws-sigv4 (1.12.1) sha256=6973ff95cb0fd0dc58ba26e90e9510a2219525d07620c8babeb70ef831826c00
babosa (1.0.4) sha256=18dea450f595462ed7cb80595abd76b2e535db8c91b350f6c4b3d73986c5bc99
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
@@ -283,17 +283,17 @@ CHECKSUMS
fastlane (2.236.1) sha256=fb89e618e0f38636e487743622cf710ad722723f5d33a63f19e367f84d3770bc
fastlane-sirp (1.1.0) sha256=10bc94f9682efd8e1badfb31452a76dd8981f1f3a33717c765fde6d75b54d847
gh_inspector (1.1.3) sha256=04cca7171b87164e053aa43147971d3b7f500fcb58177698886b48a9fc4a1939
- google-apis-androidpublisher_v3 (0.102.0) sha256=562415c44bd7f81cc808abbea11845ede16cdc3696d95f95efcf50aaffb159cf
+ google-apis-androidpublisher_v3 (0.103.0) sha256=8075b9da398b201493ad1cd4074ff1a76ae67abf7eaad4242c0c75d22d61b559
google-apis-core (0.18.0) sha256=96b057816feeeab448139ed5b5c78eab7fc2a9d8958f0fbc8217dedffad054ee
- google-apis-iamcredentials_v1 (0.27.0) sha256=9289f29968610754ef11d98b9ec627f0153f3e2616fef839aef096de529f6d1e
- google-apis-playcustomapp_v1 (0.17.0) sha256=d5bc90b705f3f862bab4998086449b0abe704ee1685a84821daa90ca7fa95a78
- google-apis-storage_v1 (0.63.0) sha256=7063a6c19c40f5ef96d5894df33c4f9ac915e3107e632b1870ba5247e3bb633f
+ google-apis-iamcredentials_v1 (0.28.0) sha256=0a92ffe6cc39c569554af2a77a25dfc61519ed8bbb64ab04cffdd352dc5ef106
+ google-apis-playcustomapp_v1 (0.18.0) sha256=44b277b9dee4a59ac5e9d98be1485edc5e382d2f9d73c79ae8908a455786a254
+ google-apis-storage_v1 (0.64.0) sha256=75b11afa2edcee859b84c7a6972ee4456314eeef5f762827fd6cf5c5ffaf93f2
google-cloud-core (1.9.0) sha256=ab55409f51488e8deefb6edcc1ce4771dfb5da2fe7b3bc075709a030c2b682a4
google-cloud-env (2.2.2) sha256=94bed40e05a67e9468ce1cb38389fba9a90aa8fc62fc9e173204c1dca59e21e7
google-cloud-errors (1.6.0) sha256=1da8476dd706ad04b9d32e3c4b90d07d3463b37d6407cb56d41342ea7647d0a1
- google-cloud-storage (1.60.0) sha256=b21b752d37945d678a4533be5ef4303f15d33a964d8bc709c7c41c3600f650db
+ google-cloud-storage (1.61.0) sha256=a77f10f4a603289948b09e81c3e23d762a18733fd69d70a4c1399663fbd96002
google-logging-utils (0.2.0) sha256=675462b4ea5affa825a3442694ca2d75d0069455a1d0956127207498fca3df7b
- googleauth (1.17.0) sha256=dbddcaa3b78469fa9392c0e784ab6d8f3f760a1e5f6c6dbbbaa44a612c4198b0
+ googleauth (1.17.1) sha256=0f7e6fc70e204cee1b2d71f1e1de2d3b349d432404197fe68ebf7fa23d0821b9
highline (2.0.3) sha256=2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479
http-cookie (1.0.8) sha256=b14fe0445cf24bf9ae098633e9b8d42e4c07c3c1f700672b09fbfe32ffd41aa6
httpclient (2.9.0) sha256=4b645958e494b2f86c2f8a2f304c959baa273a310e77a2931ddb986d83e498c8
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index a20f2c4..76d4386 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-all.zip
diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts
index 88ed306..e8dad11 100644
--- a/android/settings.gradle.kts
+++ b/android/settings.gradle.kts
@@ -19,9 +19,9 @@ pluginManagement {
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
- id("com.android.application") version "9.1.1" apply false
- id("org.jetbrains.kotlin.android") version "2.2.20" apply false
- id("org.jetbrains.kotlin.plugin.compose") version "2.2.20" apply false
+ id("com.android.application") version "9.2.1" apply false
+ id("org.jetbrains.kotlin.android") version "2.4.0" apply false
+ id("org.jetbrains.kotlin.plugin.compose") version "2.4.0" apply false
}
include(":app")
diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock
index 62c1c76..331f838 100644
--- a/ios/Gemfile.lock
+++ b/ios/Gemfile.lock
@@ -8,7 +8,7 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
- aws-partitions (1.1259.0)
+ aws-partitions (1.1261.0)
aws-sdk-core (3.252.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
@@ -20,7 +20,7 @@ GEM
aws-sdk-kms (1.129.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sigv4 (~> 1.5)
- aws-sdk-s3 (1.225.1)
+ aws-sdk-s3 (1.226.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
@@ -125,7 +125,7 @@ GEM
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.1.0)
gh_inspector (1.1.3)
- google-apis-androidpublisher_v3 (0.102.0)
+ google-apis-androidpublisher_v3 (0.103.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-core (0.18.0)
addressable (~> 2.5, >= 2.5.1)
@@ -135,11 +135,11 @@ GEM
mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
- google-apis-iamcredentials_v1 (0.27.0)
+ google-apis-iamcredentials_v1 (0.28.0)
google-apis-core (>= 0.15.0, < 2.a)
- google-apis-playcustomapp_v1 (0.17.0)
+ google-apis-playcustomapp_v1 (0.18.0)
google-apis-core (>= 0.15.0, < 2.a)
- google-apis-storage_v1 (0.63.0)
+ google-apis-storage_v1 (0.64.0)
google-apis-core (>= 0.15.0, < 2.a)
google-cloud-core (1.9.0)
google-cloud-env (>= 1.0, < 3.a)
@@ -148,7 +148,7 @@ GEM
base64 (~> 0.2)
faraday (>= 1.0, < 3.a)
google-cloud-errors (1.6.0)
- google-cloud-storage (1.60.0)
+ google-cloud-storage (1.61.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-core (>= 0.18, < 2)
@@ -158,7 +158,7 @@ GEM
googleauth (~> 1.9)
mini_mime (~> 1.0)
google-logging-utils (0.2.0)
- googleauth (1.17.0)
+ googleauth (1.17.1)
faraday (>= 1.0, < 3.a)
google-cloud-env (~> 2.2)
google-logging-utils (~> 0.1)
@@ -245,10 +245,10 @@ CHECKSUMS
artifactory (3.0.17) sha256=3023d5c964c31674090d655a516f38ca75665c15084140c08b7f2841131af263
atomos (0.1.3) sha256=7d43b22f2454a36bace5532d30785b06de3711399cb1c6bf932573eda536789f
aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b
- aws-partitions (1.1259.0) sha256=1a61c53f85cee1e69e4ab7946c7350b2237d724acf589023715e7117c03c18c6
+ aws-partitions (1.1261.0) sha256=89eda89781c1ea4e1be2a2dcdc72318c62c6171a01cdaeaa0cbecf3cea6f9fdc
aws-sdk-core (3.252.0) sha256=09c042cbfc2acf2239441cc9b982ebab2a999bed2ef6bdc51849e7b3d6e48a1c
aws-sdk-kms (1.129.0) sha256=363f548df321f4a4fcfd05523384e591060b400f8e65133ed7ef0793155a3343
- aws-sdk-s3 (1.225.1) sha256=d4b23a8db9b0a5548766b52d382b184f47f7e126560acdb731dd46adb5e26512
+ aws-sdk-s3 (1.226.0) sha256=e599f431e006ec9b92c61ee0f14d3f658a1f6c8a1d623d2160be927ac958e2bf
aws-sigv4 (1.12.1) sha256=6973ff95cb0fd0dc58ba26e90e9510a2219525d07620c8babeb70ef831826c00
babosa (1.0.4) sha256=18dea450f595462ed7cb80595abd76b2e535db8c91b350f6c4b3d73986c5bc99
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
@@ -283,17 +283,17 @@ CHECKSUMS
fastlane (2.236.1) sha256=fb89e618e0f38636e487743622cf710ad722723f5d33a63f19e367f84d3770bc
fastlane-sirp (1.1.0) sha256=10bc94f9682efd8e1badfb31452a76dd8981f1f3a33717c765fde6d75b54d847
gh_inspector (1.1.3) sha256=04cca7171b87164e053aa43147971d3b7f500fcb58177698886b48a9fc4a1939
- google-apis-androidpublisher_v3 (0.102.0) sha256=562415c44bd7f81cc808abbea11845ede16cdc3696d95f95efcf50aaffb159cf
+ google-apis-androidpublisher_v3 (0.103.0) sha256=8075b9da398b201493ad1cd4074ff1a76ae67abf7eaad4242c0c75d22d61b559
google-apis-core (0.18.0) sha256=96b057816feeeab448139ed5b5c78eab7fc2a9d8958f0fbc8217dedffad054ee
- google-apis-iamcredentials_v1 (0.27.0) sha256=9289f29968610754ef11d98b9ec627f0153f3e2616fef839aef096de529f6d1e
- google-apis-playcustomapp_v1 (0.17.0) sha256=d5bc90b705f3f862bab4998086449b0abe704ee1685a84821daa90ca7fa95a78
- google-apis-storage_v1 (0.63.0) sha256=7063a6c19c40f5ef96d5894df33c4f9ac915e3107e632b1870ba5247e3bb633f
+ google-apis-iamcredentials_v1 (0.28.0) sha256=0a92ffe6cc39c569554af2a77a25dfc61519ed8bbb64ab04cffdd352dc5ef106
+ google-apis-playcustomapp_v1 (0.18.0) sha256=44b277b9dee4a59ac5e9d98be1485edc5e382d2f9d73c79ae8908a455786a254
+ google-apis-storage_v1 (0.64.0) sha256=75b11afa2edcee859b84c7a6972ee4456314eeef5f762827fd6cf5c5ffaf93f2
google-cloud-core (1.9.0) sha256=ab55409f51488e8deefb6edcc1ce4771dfb5da2fe7b3bc075709a030c2b682a4
google-cloud-env (2.2.2) sha256=94bed40e05a67e9468ce1cb38389fba9a90aa8fc62fc9e173204c1dca59e21e7
google-cloud-errors (1.6.0) sha256=1da8476dd706ad04b9d32e3c4b90d07d3463b37d6407cb56d41342ea7647d0a1
- google-cloud-storage (1.60.0) sha256=b21b752d37945d678a4533be5ef4303f15d33a964d8bc709c7c41c3600f650db
+ google-cloud-storage (1.61.0) sha256=a77f10f4a603289948b09e81c3e23d762a18733fd69d70a4c1399663fbd96002
google-logging-utils (0.2.0) sha256=675462b4ea5affa825a3442694ca2d75d0069455a1d0956127207498fca3df7b
- googleauth (1.17.0) sha256=dbddcaa3b78469fa9392c0e784ab6d8f3f760a1e5f6c6dbbbaa44a612c4198b0
+ googleauth (1.17.1) sha256=0f7e6fc70e204cee1b2d71f1e1de2d3b349d432404197fe68ebf7fa23d0821b9
highline (2.0.3) sha256=2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479
http-cookie (1.0.8) sha256=b14fe0445cf24bf9ae098633e9b8d42e4c07c3c1f700672b09fbfe32ffd41aa6
httpclient (2.9.0) sha256=4b645958e494b2f86c2f8a2f304c959baa273a310e77a2931ddb986d83e498c8
diff --git a/ios/ParenW/Info.plist b/ios/ParenW/Info.plist
index 2176381..36f8f25 100644
--- a/ios/ParenW/Info.plist
+++ b/ios/ParenW/Info.plist
@@ -5,7 +5,7 @@
CFBundleShortVersionString
1.11.5
CFBundleVersion
- 667
+ 674
NSExtension
NSExtensionPointIdentifier
diff --git a/lib/components/adaptive_calendar_picker.dart b/lib/components/adaptive_calendar_picker.dart
new file mode 100644
index 0000000..1464f5e
--- /dev/null
+++ b/lib/components/adaptive_calendar_picker.dart
@@ -0,0 +1,47 @@
+import 'dart:io';
+
+import 'package:cupertino_calendar_picker/cupertino_calendar_picker.dart';
+import 'package:flutter/material.dart';
+
+class AdaptiveCalendarPicker {
+ // The very first date in computer history
+ static var firstDate = DateTime.fromMillisecondsSinceEpoch(0);
+ // Allow future dates up to 1 year
+ static var lastDate = DateTime.now().add(Duration(days: 365));
+
+ static Future show(BuildContext context, {DateTime? initialDate}) {
+ if (Platform.isIOS || Platform.isMacOS) {
+ return cupertinoCalendarPicker(context, initialDate: initialDate);
+ }
+
+ return materialCalendarPicker(context, initialDate: initialDate);
+ }
+
+ static Future materialCalendarPicker(
+ BuildContext context, {
+ DateTime? initialDate,
+ }) {
+ return showDatePicker(
+ context: context,
+ initialDate: initialDate,
+ firstDate: firstDate,
+ lastDate: lastDate,
+ );
+ }
+
+ static Future cupertinoCalendarPicker(
+ BuildContext context, {
+ DateTime? initialDate,
+ }) {
+ var renderBox = context.findRenderObject() as RenderBox?;
+
+ return showCupertinoCalendarPicker(
+ context,
+ widgetRenderBox: renderBox,
+ minimumDateTime: firstDate,
+ initialDateTime: initialDate,
+ maximumDateTime: lastDate,
+ dismissBehavior: CalendarDismissBehavior.onOusideTapOrDateSelect,
+ );
+ }
+}
diff --git a/lib/providers/sheets_provider.dart b/lib/providers/sheets_provider.dart
index 5e5566a..d5901de 100644
--- a/lib/providers/sheets_provider.dart
+++ b/lib/providers/sheets_provider.dart
@@ -4,6 +4,7 @@ import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:paren/classes/sheet.dart';
import 'package:paren/classes/sheet_entry.dart';
+import 'package:paren/components/adaptive_calendar_picker.dart';
import 'package:paren/components/adaptive_overlay.dart';
import 'package:paren/l10n/app_localizations_extension.dart';
import 'package:paren/providers/constants.dart';
@@ -229,36 +230,37 @@ class SheetsProvider extends GetxController {
);
}),
12.h,
- TextField(
- controller: dateCtrl,
- onTap: () async {
- var pickedDate = await showDatePicker(
- context: context,
- initialDate: selectedDate,
- firstDate: DateTime(2000),
- lastDate: DateTime.now().add(
- Duration(days: 365),
- ), // Allow future dates up to 1 year
+ Builder(
+ builder: (context) {
+ return TextField(
+ controller: dateCtrl,
+ onTap: () async {
+ var pickedDate =
+ await AdaptiveCalendarPicker.show(
+ context,
+ initialDate: selectedDate,
+ );
+ if (pickedDate != null && context.mounted) {
+ setState(() {
+ selectedDate = DateTime(
+ pickedDate.year,
+ pickedDate.month,
+ pickedDate.day,
+ 12,
+ );
+ dateCtrl.text = dateFormatter.format(
+ selectedDate,
+ );
+ });
+ }
+ },
+ readOnly: true,
+ decoration: InputDecoration(
+ label: Text(l10n.date),
+ suffixIcon: Icon(Icons.date_range),
+ ),
);
- if (pickedDate != null && context.mounted) {
- setState(() {
- selectedDate = DateTime(
- pickedDate.year,
- pickedDate.month,
- pickedDate.day,
- 12,
- );
- dateCtrl.text = dateFormatter.format(
- selectedDate,
- );
- });
- }
},
- readOnly: true,
- decoration: InputDecoration(
- label: Text(l10n.date),
- suffixIcon: Icon(Icons.date_range),
- ),
),
if (entry != null && sheet != null) ...[
12.h,
diff --git a/lib/screens/home/customization.dart b/lib/screens/home/customization.dart
index 61ed385..8978161 100644
--- a/lib/screens/home/customization.dart
+++ b/lib/screens/home/customization.dart
@@ -279,7 +279,7 @@ class _CustomizationState extends State {
3,
(i) => i == paren.appThemeMode.value.index,
),
- onPressed: (int index) async {
+ onPressed: (int index) {
if (paren.appThemeMode.value.index == index) return;
paren.appThemeMode.value = ThemeMode.values[index];
paren.setTheme();
diff --git a/pubspec.lock b/pubspec.lock
index 7e08769..3b85704 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -177,6 +177,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.7"
+ cupertino_calendar_picker:
+ dependency: "direct main"
+ description:
+ name: cupertino_calendar_picker
+ sha256: "91a717b990d2c602c0be84a8c1e584eea69fae92dad7b3259d019e1b40e10a54"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.6"
+ cupertino_icons:
+ dependency: transitive
+ description:
+ name: cupertino_icons
+ sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.9"
dart_style:
dependency: transitive
description:
@@ -482,10 +498,10 @@ packages:
dependency: "direct main"
description:
name: liquid_glass_widgets
- sha256: "2794bd0080a27c0f78a8c7ee70a0be1700057f3c9578794e6891e94157f166ac"
+ sha256: "0d90d073fe57a67ee9153f887ed4d3384f5fcedaf53ca52c840f5ba835792118"
url: "https://pub.dev"
source: hosted
- version: "0.16.0"
+ version: "0.17.1"
logging:
dependency: transitive
description:
@@ -570,10 +586,10 @@ packages:
dependency: transitive
description:
name: path_provider
- sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
+ sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825
url: "https://pub.dev"
source: hosted
- version: "2.1.5"
+ version: "2.1.6"
path_provider_android:
dependency: transitive
description:
@@ -602,10 +618,10 @@ packages:
dependency: transitive
description:
name: path_provider_platform_interface
- sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
+ sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.3"
path_provider_windows:
dependency: transitive
description:
@@ -1045,4 +1061,4 @@ packages:
version: "3.1.3"
sdks:
dart: ">=3.12.0 <4.0.0"
- flutter: ">=3.44.0"
+ flutter: ">=3.44.0 <4.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 4208098..fbdd855 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,11 +1,11 @@
name: paren
description: "A new Flutter project."
publish_to: "none"
-version: 1.11.5+1
+version: 1.11.6+1
environment:
sdk: ^3.12.0
- flutter: ">=3.34.0"
+ flutter: ^3.44.0
dependencies:
flutter:
@@ -31,7 +31,8 @@ dependencies:
flutter_colorpicker: 1.1.0
stupid_simple_sheet: 0.9.1+1
json_annotation: 4.12.0
- liquid_glass_widgets: ^0.16.0
+ liquid_glass_widgets: ^0.17.1
+ cupertino_calendar_picker: ^2.2.6
# image_picker: 1.1.2
dev_dependencies:
diff --git a/release-github-darwin.sh b/release-github-darwin.sh
new file mode 100755
index 0000000..e859c63
--- /dev/null
+++ b/release-github-darwin.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+git_count=$(git rev-list --count main)
+
+REPO="yurtemre7/paren"
+
+if [[ ! -f pubspec.yaml ]]; then
+ echo "Error: run this script from your Flutter project root." >&2
+ exit 1
+fi
+
+echo "==> flutter build ipa --release --build-number='$git_count'"
+flutter build ipa --release --build-number="$git_count"
+
+echo "==> flutter build macos --release --build-number='$git_count'"
+flutter build macos --release --build-number="$git_count"
+
+# --- IPA (safe discovery) ---
+ipa_files=()
+while IFS= read -r -d '' file; do
+ ipa_files+=("$file")
+done < <(find build/ios/ipa -maxdepth 1 -type f -name '*.ipa' -print0)
+
+if [[ ${#ipa_files[@]} -eq 0 ]]; then
+ echo "Error: no IPA found in build/ios/ipa." >&2
+ exit 1
+fi
+IPA_PATH="$(ls -t "${ipa_files[@]}" | head -n 1)"
+
+# --- macOS .app → zip ---
+APP_PATH="$(find build/macos/Build/Products/Release -maxdepth 1 -type d -name '*.app' | head -n 1)"
+
+if [[ -z "$APP_PATH" ]]; then
+ echo "Error: no .app found in build/macos/Build/Products/Release." >&2
+ exit 1
+fi
+
+APP_NAME="$(basename "$APP_PATH" .app)"
+ZIP_PATH="build/macos/Build/Products/Release/${APP_NAME}.zip"
+
+echo "==> Zipping ${APP_NAME}.app → ${APP_NAME}.zip"
+ditto -c -k --sequesterRsrc --keepParent "$APP_PATH" "$ZIP_PATH"
+
+# --- Upload ---
+TAG="$(gh release view -R "$REPO" --json tagName --jq .tagName)"
+
+if [[ -z "$TAG" ]]; then
+ echo "Error: could not find the latest release in $REPO." >&2
+ exit 1
+fi
+
+echo "==> Uploading $(basename "$IPA_PATH") to release $TAG"
+gh release upload "$TAG" "$IPA_PATH" -R "$REPO" --clobber
+
+echo "==> Uploading ${APP_NAME}.zip to release $TAG"
+gh release upload "$TAG" "$ZIP_PATH" -R "$REPO" --clobber
+
+echo "==> Done"
diff --git a/release-github-ipa.sh b/release-github-ipa.sh
deleted file mode 100755
index 4c258f3..0000000
--- a/release-github-ipa.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-git_count=$(git rev-list --count main)
-
-REPO="yurtemre7/paren"
-
-if [[ ! -f pubspec.yaml ]]; then
- echo "Error: run this script from your Flutter project root." >&2
- exit 1
-fi
-
-echo "==> flutter build ipa --release --build-number='$git_count'"
-flutter build ipa --release --build-number="$git_count"
-
-IPA_PATH="$(find build/ios/ipa -maxdepth 1 -type f -name '*.ipa' -print0 | xargs -r -0 ls -t | head -n 1)"
-
-if [[ -z "$IPA_PATH" || ! -f "$IPA_PATH" ]]; then
- echo "Error: no IPA found in build/ios/ipa." >&2
- exit 1
-fi
-
-TAG="$(gh release view -R "$REPO" --json tagName --jq .tagName)"
-
-if [[ -z "$TAG" ]]; then
- echo "Error: could not find the latest release in $REPO." >&2
- exit 1
-fi
-
-echo "==> Uploading $(basename "$IPA_PATH") to release $TAG"
-gh release upload "$TAG" "$IPA_PATH" -R "$REPO" --clobber
-
-echo "==> Done"
\ No newline at end of file
diff --git a/release-ios.sh b/release-ios.sh
index 244201a..7ef9f77 100755
--- a/release-ios.sh
+++ b/release-ios.sh
@@ -8,7 +8,6 @@ cd ios || exit
echo "==> bundler exec fastlane release"
bundler exec fastlane release
cd .. || exit
-./release-github-ipa.sh
git add ./ios/
git commit -m "chore: update ios version"
git push