From ebd6c8e4b33975965ccc77623d5bf16e8308b525 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Thu, 9 Jan 2025 23:33:03 +0900 Subject: [PATCH 1/8] chore: change app version 2.5.1 --- ios/Podfile.lock | 30 +++++++++++++++--------------- pubspec.yaml | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 992ad546..6ab80ca1 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -248,13 +248,13 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin" SPEC CHECKSUMS: - channel_talk_flutter: 62d078feeddfa94b03dfa72f39ecf26f2731c2ee + channel_talk_flutter: c479a334a8383bcf7e6ca9ce0384d616673249a3 ChannelIOSDK: 3d4bee1e1a077cf60394b439801e5078bb69a3b1 Firebase: cf1b19f21410b029b6786a54e9764a0cacad3c99 - firebase_analytics: 2815af29d49c1a994652abd37a5b001a88bc7b75 - firebase_core: b62a5080210edad3f2934314a8b2c6f5124e8e10 - firebase_crashlytics: 757e252772ed3dd37c07638f9fcd4dceb5f101c8 - firebase_messaging: 98619a0572d82cfb3668e78859ba9f1110e268c9 + firebase_analytics: 0ff02d803c99a48739f7afd5f5b0dee64c78e1a0 + firebase_core: 726c34112998e66d1ddaf4b1bef78ed2dd4b9804 + firebase_crashlytics: 1c2e2091a0b06bf6e3d6535010469a98c44c4d67 + firebase_messaging: a538130cb2bca3ea0ff0892b8c948bd7d20ecaed FirebaseAnalytics: 3feef9ae8733c567866342a1000691baaa7cad49 FirebaseCore: e0510f1523bc0eb21653cac00792e1e2bd6f1771 FirebaseCoreExtension: f1bc67a4702931a7caa097d8e4ac0a1b0d16720e @@ -265,22 +265,22 @@ SPEC CHECKSUMS: FirebaseRemoteConfigInterop: e75e348953352a000331eb77caf01e424248e176 FirebaseSessions: 3f56f177d9e53a85021d16b31f9a111849d1dd8b Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_native_splash: e8a1e01082d97a8099d973f919f57904c925008a - flutter_web_browser: 7bccaafbb0c5b8862afe7bcd158f15557109f61f - flutter_widgetkit: a0e9b0d50ee9bec366dad36c639509daaafc397a + flutter_native_splash: 576fbd69b830a63594ae678396fa17e43abbc5f8 + flutter_web_browser: 8fe4d18e7b1328ab3fbec6e67029d6996c2335d9 + flutter_widgetkit: 21fcf04a99462110a8c855b614b97532d7d759b7 GoogleAppMeasurement: 987769c4ca6b968f2479fbcc9fe3ce34af454b8e GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - open_app_file: 205f73051668bfbd68356005fef8a62e620f0a77 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 + open_app_file: ba67d2bf6cdddfb654b13b713d66bea4974a5adb + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe - webview_cookie_manager: eaf920722b493bd0f7611b5484771ca53fed03f7 - webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4 + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + webview_cookie_manager: d63a76cabdf42a7ea3d92768ac67d4853a1367f8 + webview_flutter_wkwebview: 44d4dee7d7056d5ad185d25b38404436d56c547c PODFILE CHECKSUM: b34ba01b6d31eabe4d020b5ccb7ac5cba06d49cf diff --git a/pubspec.yaml b/pubspec.yaml index 68d6cf64..ff4e2ada 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ description: Online Timeplanner with Lectures Plus App @ KAIST # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 2.5.0+21 +version: 2.5.1+21 environment: sdk: ">=3.2.0 <4.0.0" From 72826be5ebbb8848066dd7eb1a2806ee02cbd3a7 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Thu, 9 Jan 2025 23:43:24 +0900 Subject: [PATCH 2/8] chore: update flutter pub dependencies --- ios/Podfile.lock | 110 +++++++++++++++++++++++------------------------ pubspec.lock | 52 +++++++++++----------- pubspec.yaml | 14 +++--- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 6ab80ca1..6d4b0873 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,62 +3,62 @@ PODS: - ChannelIOSDK (= 11.7.3) - Flutter - ChannelIOSDK (11.7.3) - - Firebase/Analytics (11.4.0): + - Firebase/Analytics (11.6.0): - Firebase/Core - - Firebase/Core (11.4.0): + - Firebase/Core (11.6.0): - Firebase/CoreOnly - - FirebaseAnalytics (~> 11.4.0) - - Firebase/CoreOnly (11.4.0): - - FirebaseCore (= 11.4.0) - - Firebase/Crashlytics (11.4.0): + - FirebaseAnalytics (~> 11.6.0) + - Firebase/CoreOnly (11.6.0): + - FirebaseCore (~> 11.6.0) + - Firebase/Crashlytics (11.6.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 11.4.0) - - Firebase/Messaging (11.4.0): + - FirebaseCrashlytics (~> 11.6.0) + - Firebase/Messaging (11.6.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 11.4.0) - - firebase_analytics (11.3.6): - - Firebase/Analytics (= 11.4.0) + - FirebaseMessaging (~> 11.6.0) + - firebase_analytics (11.4.0): + - Firebase/Analytics (= 11.6.0) - firebase_core - Flutter - - firebase_core (3.9.0): - - Firebase/CoreOnly (= 11.4.0) + - firebase_core (3.10.0): + - Firebase/CoreOnly (= 11.6.0) - Flutter - - firebase_crashlytics (4.2.0): - - Firebase/Crashlytics (= 11.4.0) + - firebase_crashlytics (4.3.0): + - Firebase/Crashlytics (= 11.6.0) - firebase_core - Flutter - - firebase_messaging (15.1.6): - - Firebase/Messaging (= 11.4.0) + - firebase_messaging (15.2.0): + - Firebase/Messaging (= 11.6.0) - firebase_core - Flutter - - FirebaseAnalytics (11.4.0): - - FirebaseAnalytics/AdIdSupport (= 11.4.0) - - FirebaseCore (~> 11.0) + - FirebaseAnalytics (11.6.0): + - FirebaseAnalytics/AdIdSupport (= 11.6.0) + - FirebaseCore (~> 11.6.0) - FirebaseInstallations (~> 11.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - FirebaseAnalytics/AdIdSupport (11.4.0): - - FirebaseCore (~> 11.0) + - FirebaseAnalytics/AdIdSupport (11.6.0): + - FirebaseCore (~> 11.6.0) - FirebaseInstallations (~> 11.0) - - GoogleAppMeasurement (= 11.4.0) + - GoogleAppMeasurement (= 11.6.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - FirebaseCore (11.4.0): - - FirebaseCoreInternal (~> 11.0) + - FirebaseCore (11.6.0): + - FirebaseCoreInternal (~> 11.6.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/Logger (~> 8.0) - - FirebaseCoreExtension (11.4.1): - - FirebaseCore (~> 11.0) + - FirebaseCoreExtension (11.6.0): + - FirebaseCore (~> 11.6.0) - FirebaseCoreInternal (11.6.0): - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseCrashlytics (11.4.0): - - FirebaseCore (~> 11.4) + - FirebaseCrashlytics (11.6.0): + - FirebaseCore (~> 11.6.0) - FirebaseInstallations (~> 11.0) - FirebaseRemoteConfigInterop (~> 11.0) - FirebaseSessions (~> 11.0) @@ -66,13 +66,13 @@ PODS: - GoogleUtilities/Environment (~> 8.0) - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - FirebaseInstallations (11.4.0): - - FirebaseCore (~> 11.0) + - FirebaseInstallations (11.6.0): + - FirebaseCore (~> 11.6.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - PromisesObjC (~> 2.4) - - FirebaseMessaging (11.4.0): - - FirebaseCore (~> 11.0) + - FirebaseMessaging (11.6.0): + - FirebaseCore (~> 11.6.0) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) @@ -81,9 +81,9 @@ PODS: - GoogleUtilities/UserDefaults (~> 8.0) - nanopb (~> 3.30910.0) - FirebaseRemoteConfigInterop (11.6.0) - - FirebaseSessions (11.4.0): - - FirebaseCore (~> 11.4) - - FirebaseCoreExtension (~> 11.4) + - FirebaseSessions (11.6.0): + - FirebaseCore (~> 11.6.0) + - FirebaseCoreExtension (~> 11.6.0) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) - GoogleUtilities/Environment (~> 8.0) @@ -97,21 +97,21 @@ PODS: - Flutter - flutter_widgetkit (0.0.1): - Flutter - - GoogleAppMeasurement (11.4.0): - - GoogleAppMeasurement/AdIdSupport (= 11.4.0) + - GoogleAppMeasurement (11.6.0): + - GoogleAppMeasurement/AdIdSupport (= 11.6.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/AdIdSupport (11.4.0): - - GoogleAppMeasurement/WithoutAdIdSupport (= 11.4.0) + - GoogleAppMeasurement/AdIdSupport (11.6.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 11.6.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/WithoutAdIdSupport (11.4.0): + - GoogleAppMeasurement/WithoutAdIdSupport (11.6.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) @@ -250,25 +250,25 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: channel_talk_flutter: c479a334a8383bcf7e6ca9ce0384d616673249a3 ChannelIOSDK: 3d4bee1e1a077cf60394b439801e5078bb69a3b1 - Firebase: cf1b19f21410b029b6786a54e9764a0cacad3c99 - firebase_analytics: 0ff02d803c99a48739f7afd5f5b0dee64c78e1a0 - firebase_core: 726c34112998e66d1ddaf4b1bef78ed2dd4b9804 - firebase_crashlytics: 1c2e2091a0b06bf6e3d6535010469a98c44c4d67 - firebase_messaging: a538130cb2bca3ea0ff0892b8c948bd7d20ecaed - FirebaseAnalytics: 3feef9ae8733c567866342a1000691baaa7cad49 - FirebaseCore: e0510f1523bc0eb21653cac00792e1e2bd6f1771 - FirebaseCoreExtension: f1bc67a4702931a7caa097d8e4ac0a1b0d16720e + Firebase: 374a441a91ead896215703a674d58cdb3e9d772b + firebase_analytics: a5c6ef5a435d22870fe3cfdcb424f390f56ff752 + firebase_core: 2337982fb78ee4d8d91e608b0a3d4f44346a93c8 + firebase_crashlytics: 3b6a9a9cbdc5ab92afaf9b206e52c79c2321a0d4 + firebase_messaging: f3bddfa28c2cad70b3341bf461e987a24efd28d6 + FirebaseAnalytics: 7114c698cac995602e3b1b96663473e50d54d6e7 + FirebaseCore: 48b0dd707581cf9c1a1220da68223fb0a562afaa + FirebaseCoreExtension: 2d77d6430c16cf43ca2b04608302ed02b3598361 FirebaseCoreInternal: d98ab91e2d80a56d7b246856a8885443b302c0c2 - FirebaseCrashlytics: 41bbdd2b514a8523cede0c217aee6ef7ecf38401 - FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414 - FirebaseMessaging: f8a160d99c2c2e5babbbcc90c4a3e15db036aee2 + FirebaseCrashlytics: b21c665fb50138766480bce73ebdb1aa30f7f300 + FirebaseInstallations: efc0946fc756e4d22d8113f7c761948120322e8c + FirebaseMessaging: e1aca1fcc23e8b9eddb0e33f375ff90944623021 FirebaseRemoteConfigInterop: e75e348953352a000331eb77caf01e424248e176 - FirebaseSessions: 3f56f177d9e53a85021d16b31f9a111849d1dd8b + FirebaseSessions: 9529d14180868e29a8da164b3a729c036204918b Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_native_splash: 576fbd69b830a63594ae678396fa17e43abbc5f8 + flutter_native_splash: 6cad9122ea0fad137d23137dd14b937f3e90b145 flutter_web_browser: 8fe4d18e7b1328ab3fbec6e67029d6996c2335d9 flutter_widgetkit: 21fcf04a99462110a8c855b614b97532d7d759b7 - GoogleAppMeasurement: 987769c4ca6b968f2479fbcc9fe3ce34af454b8e + GoogleAppMeasurement: 6a9e6317b6a6d810ad03d4a66564ca6c4c5818a3 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 diff --git a/pubspec.lock b/pubspec.lock index 04362c11..488441f8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: daa1d780fdecf8af925680c06c86563cdd445deea995d5c9176f1302a2b10bbe + sha256: "27899c95f9e7ec06c8310e6e0eac967707714b9f1450c4a58fa00ca011a4a8ae" url: "https://pub.dev" source: hosted - version: "1.3.48" + version: "1.3.49" _macros: dependency: transitive description: dart @@ -219,34 +219,34 @@ packages: dependency: "direct main" description: name: firebase_analytics - sha256: "366140abb55418ea23060b779893fa997c2d8e1974a4d1cc4d9590933b65c5fd" + sha256: "498c6cb8468e348a556709c745d92a52173ab3a9b906aa0593393f0787f201ea" url: "https://pub.dev" source: hosted - version: "11.3.6" + version: "11.4.0" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: "8e987cf977c0c8f4ad02d9950a9b25b1a9606899f37b66a322a43af05be0246b" + sha256: ccbb350554e98afdb4b59852689292d194d31232a2647b5012a66622b3711df9 url: "https://pub.dev" source: hosted - version: "4.2.8" + version: "4.3.0" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "0b64ef9060d394bba3d3b4777f49ee098efeeea7b0afb04663c956de6a3da170" + sha256: "68e1f18fc16482c211c658e739c25f015b202a260d9ad8249c6d3d7963b8105f" url: "https://pub.dev" source: hosted - version: "0.5.10+5" + version: "0.5.10+6" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "15d761b95dfa2906dfcc31b7fc6fe293188533d1a3ffe78389ba9e69bd7fdbde" + sha256: "0307c1fde82e2b8b97e0be2dab93612aff9a72f31ebe9bfac66ed8b37ef7c568" url: "https://pub.dev" source: hosted - version: "3.9.0" + version: "3.10.0" firebase_core_platform_interface: dependency: transitive description: @@ -267,42 +267,42 @@ packages: dependency: "direct main" description: name: firebase_crashlytics - sha256: e235c8452d5622fc271404592388fde179e4b62c50e777ad3c8c3369296104ed + sha256: f6adb65fa3d6391a79f0e60833bb4cdc468ce0c318831c90057ee11e0909cd29 url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "4.3.0" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "4ddadf44ed0a202f3acad053f12c083877940fa8cc1a9f747ae09e1ef4372160" + sha256: "6635166c22c6f75f634b8e77b70fcc43b24af4cfee28f975249dbdbd9769a702" url: "https://pub.dev" source: hosted - version: "3.7.0" + version: "3.8.0" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "151a3ee68736abf293aab66d1317ade53c88abe1db09c75a0460aebf7767bbdf" + sha256: "48a8a59197c1c5174060ba9aa1e0036e9b5a0d28a0cc22d19c1fcabc67fafe3c" url: "https://pub.dev" source: hosted - version: "15.1.6" + version: "15.2.0" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: f331ee51e40c243f90cc7bc059222dfec4e5df53125b08d31fb28961b00d2a9d + sha256: "9770a8e91f54296829dcaa61ce9b7c2f9ae9abbf99976dd3103a60470d5264dd" url: "https://pub.dev" source: hosted - version: "4.5.49" + version: "4.6.0" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: efaf3fdc54cd77e0eedb8e75f7f01c808828c64d052ddbf94d3009974e47d30f + sha256: "329ca4ef45ec616abe6f1d5e58feed0934a50840a65aa327052354ad3c64ed77" url: "https://pub.dev" source: hosted - version: "3.9.5" + version: "3.10.0" flutter: dependency: "direct main" description: flutter @@ -322,18 +322,18 @@ packages: dependency: "direct main" description: name: flutter_native_splash - sha256: "1152ab0067ca5a2ebeb862fe0a762057202cceb22b7e62692dcbabf6483891bb" + sha256: "7062602e0dbd29141fb8eb19220b5871ca650be5197ab9c1f193a28b17537bc7" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.4" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" + sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.0.17" flutter_test: dependency: "direct dev" description: flutter @@ -737,10 +737,10 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "3c7e73920c694a436afaf65ab60ce3453d91f84208d761fbd83fc21182134d93" + sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.5" shared_preferences_android: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ff4e2ada..489ba454 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,19 +32,19 @@ dependencies: provider: ^6.1.2 url_launcher: ^6.3.1 equatable: ^2.0.7 - shared_preferences: ^2.3.4 + shared_preferences: ^2.3.5 easy_localization: ^3.0.7 flutter_widgetkit: ^1.0.3 - flutter_svg: ^2.0.16 + flutter_svg: ^2.0.17 open_app_file: ^4.0.2 - flutter_native_splash: ^2.4.3 + flutter_native_splash: ^2.4.4 mailto: ^2.0.0 dropdown_button2: ^3.0.0-beta.21 # Firebase - firebase_core: ^3.9.0 - firebase_analytics: ^11.3.6 - firebase_crashlytics: ^4.2.0 - firebase_messaging: ^15.1.6 + firebase_core: ^3.10.0 + firebase_analytics: ^11.4.0 + firebase_crashlytics: ^4.3.0 + firebase_messaging: ^15.2.0 channel_talk_flutter: git: url: https://github.com/happycastle114/channel_talk_flutter From fb918cc451774e41fde5271213467fe7c3b8489a Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Fri, 10 Jan 2025 00:06:22 +0900 Subject: [PATCH 3/8] chore: change xcode version to 16.2 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac1b4dd1..6f96fd9b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,7 @@ on: env: FLUTTER_VERSION: "3.27.x" JAVA_VERSION: "17" - XCODE_VERSION: "Xcode_16" + XCODE_VERSION: "Xcode_16.2" jobs: build-android: From ad503b33cee5c537ca730ba10adaa19c97bbb372 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Fri, 10 Jan 2025 00:19:32 +0900 Subject: [PATCH 4/8] chore: change xcode and simulator version --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ae3762b6..5c1aa39b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,8 +8,8 @@ env: FLUTTER_VERSION: "3.27.x" JAVA_VERSION: "17" ANDROID_API_LEVEL: "34" - XCODE_VERSION: "Xcode_16" - IOS_DEVICE: "iPhone 15 Pro" + XCODE_VERSION: "Xcode_16.2" + IOS_DEVICE: "iPhone 16 Pro" jobs: unit: From e67e5a0921fd5e919a8c22bd3d1b437327d853c9 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Fri, 10 Jan 2025 00:36:16 +0900 Subject: [PATCH 5/8] chore: fix failed test chore: change to macos-15 on github actions --- .github/workflows/build.yml | 2 +- .github/workflows/test.yml | 2 +- test/models/lecture_test.dart | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f96fd9b..79b6b1ad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,7 +40,7 @@ jobs: build-ios: name: Build iOS - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v4 - name: Select Xcode version diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5c1aa39b..8996df98 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,7 +56,7 @@ jobs: integration-ios: name: Integration Test on iOS - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v4 - name: Select Xcode version diff --git a/test/models/lecture_test.dart b/test/models/lecture_test.dart index 93f109ef..2a1082ca 100644 --- a/test/models/lecture_test.dart +++ b/test/models/lecture_test.dart @@ -86,7 +86,8 @@ void main() { final lectures = json.decode(response.body); print(url); // 2024년 가을학기부터 HSE 강의 없음 - assert(lectures.isEmpty); + // 2025년 1월 10일 기준 있음 + assert(!lectures.isEmpty); for (Map l in lectures) { final Lecture lecture = Lecture.fromJson(l); expect(lecture.typeIdx, 4); From a6b4722619d42defdbecf9c821c2d8d28a4a81fa Mon Sep 17 00:00:00 2001 From: sparcscasio <162997498+sparcscasio@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:44:03 +0900 Subject: [PATCH 6/8] feat: add promotion consent --- assets/translations/en.json | 15 +++++- assets/translations/ko.json | 16 +++++- devtools_options.yaml | 3 ++ lib/main.dart | 1 + lib/pages/settings_page.dart | 20 ++++++++ lib/providers/settings_model.dart | 17 +++++++ lib/widgets/otl_dialog.dart | 83 +++++++++++++++++++++++++++++-- 7 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 devtools_options.yaml diff --git a/assets/translations/en.json b/assets/translations/en.json index 9d9fb3d7..2eb7462f 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -19,7 +19,8 @@ "all_selected": "All Selected", "num_selected": " Selected", "close": "Close", - "coming": "Coming Soon" + "coming": "Coming Soon", + "confirm": "Confirm" }, "semester": { "spring": "Spring", @@ -165,11 +166,21 @@ "send_error_log_desc": "Automatically collect logs without user reporting", "send_anonymously": "Send anonymously", "send_anonymously_desc": "Not including user ID in error logs", + "receive_promotion": "Promotion consent", + "receive_promotion_desc": "Receive promotional notifications", "reset_all": "Reset all settings", "dialog": { "reset": "Reset", "reset_settings": "Reset settings", - "reset_settings_desc": "Are you really want to reset all data? However, it will be reset except for login data." + "reset_settings_desc": "Are you really want to reset all data? However, it will be reset except for login data.", + "disable_promotion" : "Refusal to Receive Promotional Information", + "promotion_desc" : "You can change your consent to receive promotional information in Settings > [Promoiton Consent].", + "enable_promotion" : "Consent to Receive Promotional Information", + "date" : "Date", + "user_name" : "Name", + "detail" : "Detail", + "disable" : "decline", + "enable" : "agree" }, "throw_test": "Throw Test Exception", "throw_test_desc": "for testing firebase crashlytics", diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 5837b0f6..51177b8f 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -19,7 +19,8 @@ "all_selected": "전체 선택됨", "num_selected": "개 선택됨", "close": "닫기", - "coming": "준비 중입니다." + "coming": "준비 중입니다.", + "confirm": "확인" }, "semester": { "spring": "봄", @@ -164,12 +165,23 @@ "send_error_log": "오류 로그 전송", "send_error_log_desc": "사용자의 제보 없이 자동으로 오류를 수집합니다.", "send_anonymously": "익명으로 전송", + "receive_promotion": "광고성 정보 수신 동의", + "receive_promotion_desc": "광고성 정보에 대한 푸시 알림 수신에 동의합니다.", "send_anonymously_desc": "오류 로그에 사용자 ID를 포함하지 않고 익명으로 전송합니다.", "reset_all": "모든 설정 데이터 초기화", "dialog": { "reset": "초기화", + "yes": "확인", "reset_settings": "설정 초기화", - "reset_settings_desc": "정말 모든 설정 데이터를 초기화하시겠습니까? 단, 로그인 정보는 제외하고 초기화됩니다." + "reset_settings_desc": "정말 모든 설정 데이터를 초기화하시겠습니까? 단, 로그인 정보는 제외하고 초기화됩니다.", + "disable_promotion": "광고성 정보 수신 거부 처리 결과", + "enable_promotion" : "광고성 정보 수신 동의 처리 결과", + "promotion_desc" : "광고성 정보 수신동의는 설정 > [광고성 정보 수신 동의] 에서 변경 가능합니다.", + "date" : "일시", + "user_name" : "전송자", + "detail" : "내용", + "disable" : "거부", + "enable" : "동의" }, "throw_test": "테스트 오류 발생", "throw_test_desc": "Firebase crashlytics 테스트용", diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 00000000..fa0b357c --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/main.dart b/lib/main.dart index c74694c1..59abd491 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -49,6 +49,7 @@ void main() { ); final token = await FirebaseMessaging.instance.getToken(); + debugPrint('firebase token : ${token}'); FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError; diff --git a/lib/pages/settings_page.dart b/lib/pages/settings_page.dart index 1481fb54..d6c2ddf9 100644 --- a/lib/pages/settings_page.dart +++ b/lib/pages/settings_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/cupertino.dart'; import 'package:otlplus/constants/color.dart'; import 'package:otlplus/constants/text_styles.dart'; import 'package:otlplus/constants/url.dart'; +import 'package:otlplus/providers/info_model.dart'; import 'package:otlplus/providers/settings_model.dart'; import 'package:otlplus/widgets/dropdown.dart'; import 'package:otlplus/widgets/otl_dialog.dart'; @@ -18,6 +19,7 @@ class SettingsPage extends StatelessWidget { @override Widget build(BuildContext context) { final isEn = EasyLocalization.of(context)?.currentLocale == Locale('en'); + final user = context.watch().user; return OTLScaffold( child: OTLLayout( @@ -84,6 +86,24 @@ class SettingsPage extends StatelessWidget { ), ], ), + _buildListTile( + title: "settings.receive_promotion".tr(), + subtitle: "settings.receive_promotion_desc".tr(), + trailing: CupertinoSwitch( + value: context.watch().getReceivePromotion(), + onChanged: (value) { + context.read().setReceivePromotion(value); + OTLNavigator.pushDialog( + context: context, + builder: (_) => OTLDialog( + type: value + ? OTLDialogType.enablePromotion + : OTLDialogType.disablePromotion, + ), + ); + }, + ), + ), _buildListTile( title: "settings.send_error_log".tr(), subtitle: "settings.send_error_log_desc".tr(), diff --git a/lib/providers/settings_model.dart b/lib/providers/settings_model.dart index bf8bc354..8807b50d 100644 --- a/lib/providers/settings_model.dart +++ b/lib/providers/settings_model.dart @@ -1,14 +1,17 @@ +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; final _kSendCrashlytics = 'sendCrashlytics'; final _kSendCrashlyticsAnonymously = 'sendCrashlyticsAnonymously'; final _kShowsChannelTalkButton = 'showsChannelTalkButton'; +final _kReceivePromotion = 'receivePromoiton'; class SettingsModel extends ChangeNotifier { late bool _sendCrashlytics; late bool _sendCrashlyticsAnonymously; late bool _showsChannelTalkButton; + late bool _receivePromotion; bool getSendCrashlytics() => _sendCrashlytics; void setSendCrashlytics(bool newValue) { @@ -34,6 +37,17 @@ class SettingsModel extends ChangeNotifier { (instance) => instance.setBool(_kShowsChannelTalkButton, newValue)); } + bool getReceivePromotion() => _receivePromotion; + Future setReceivePromotion(bool newValue) async { + _receivePromotion = newValue; + notifyListeners(); + SharedPreferences.getInstance() + .then((instance) => instance.setBool(_kReceivePromotion, newValue)); + newValue + ? await FirebaseMessaging.instance.subscribeToTopic("promotion") + : await FirebaseMessaging.instance.unsubscribeFromTopic("promotion"); + } + SettingsModel({bool forTest = false}) { SharedPreferences.getInstance().then((instance) { getAllValues(instance); @@ -43,6 +57,7 @@ class SettingsModel extends ChangeNotifier { _sendCrashlytics = true; _sendCrashlyticsAnonymously = false; _showsChannelTalkButton = true; + _receivePromotion = true; } } @@ -52,6 +67,8 @@ class SettingsModel extends ChangeNotifier { instance.getBool(_kSendCrashlyticsAnonymously) ?? false; _showsChannelTalkButton = instance.getBool(_kShowsChannelTalkButton) ?? true; + _receivePromotion = instance.getBool(_kReceivePromotion) ?? false; + notifyListeners(); } diff --git a/lib/widgets/otl_dialog.dart b/lib/widgets/otl_dialog.dart index 8f167985..40df018d 100644 --- a/lib/widgets/otl_dialog.dart +++ b/lib/widgets/otl_dialog.dart @@ -4,8 +4,11 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:otlplus/constants/color.dart'; import 'package:otlplus/constants/text_styles.dart'; import 'package:otlplus/constants/url.dart'; +import 'package:otlplus/models/user.dart'; +import 'package:otlplus/providers/info_model.dart'; import 'package:otlplus/utils/navigator.dart'; import 'package:otlplus/widgets/responsive_button.dart'; +import 'package:provider/provider.dart'; enum OTLDialogType { /// namedArgs: 'lecture' @@ -37,6 +40,10 @@ enum OTLDialogType { resetSettings, + disablePromotion, + + enablePromotion, + about, } @@ -133,7 +140,21 @@ extension OTLDialogTypeExt on OTLDialogType { title: 'settings.dialog.reset_settings', content: 'settings.dialog.reset_settings_desc', icon: 'alert', - posText: 'settings.dialog.reset', + posText: '.dialog.reset', + ), + OTLDialogType.disablePromotion: _OTLDialogData( + title: 'settings.dialog.disable_promotion', + content: 'settings.dialog.reset_settings_desc', + icon: 'OTL', + negText: 'common.close', + btnStyle: BtnStyle.one, + ), + OTLDialogType.enablePromotion: _OTLDialogData( + title: 'settings.dialog.enable_promotion', + content: 'settings.dialog.reset_settings_desc', + icon: 'OTL', + negText: 'common.close', + btnStyle: BtnStyle.one, ), OTLDialogType.about: _OTLDialogData( title: 'Online Timeplanner with Lectures Plus @ KAIST', @@ -169,6 +190,8 @@ class OTLDialog extends StatelessWidget { @override Widget build(BuildContext context) { + final user = context.watch().user; + return Center( child: Container( width: 256, @@ -200,7 +223,7 @@ class OTLDialog extends StatelessWidget { children: [ Text(type.title.tr(), style: titleBold), const SizedBox(height: 8), - _buildContent(), + _buildContent(user: user), ], ), ), @@ -259,8 +282,11 @@ class OTLDialog extends StatelessWidget { ); } - Widget _buildContent() { + Widget _buildContent({User? user}) { final content = type.content.tr(namedArgs: namedArgs); + + user ?? null; + switch (type) { case OTLDialogType.addLecture: case OTLDialogType.addLectureWithTab: @@ -275,6 +301,57 @@ class OTLDialog extends StatelessWidget { content, style: bodyRegular, ); + + case OTLDialogType.disablePromotion: + return Column( + children: [ + Container( + width: 200, + child: Column( + children: [ + Text( + '${'settings.dialog.date'.tr(namedArgs: namedArgs)} : ${DateFormat('yyyy-MM-dd').format(DateTime.now())}'), + Text( + '${'settings.dialog.user_name'.tr(namedArgs: namedArgs)} : ${user!.firstName} ${user!.lastName}'), + Text( + '${'settings.dialog.detail'.tr(namedArgs: namedArgs)} : ${'settings.dialog.disable'.tr(namedArgs: namedArgs)}'), + ], + ), + color: OTLColor.grayE, + ), + SizedBox( + height: 5, + ), + Text( + '${'settings.dialog.promotion_desc'.tr(namedArgs: namedArgs)}'), + ], + ); + + case OTLDialogType.enablePromotion: + return Column( + children: [ + Container( + width: 200, + child: Column( + children: [ + Text( + '${'settings.dialog.date'.tr(namedArgs: namedArgs)} : ${DateFormat('yyyy-MM-dd').format(DateTime.now())}'), + Text( + '${'settings.dialog.user_name'.tr(namedArgs: namedArgs)} : ${user!.firstName} ${user!.lastName}'), + Text( + '${'settings.dialog.detail'.tr(namedArgs: namedArgs)} : ${'settings.dialog.enable'.tr(namedArgs: namedArgs)}'), + ], + ), + color: OTLColor.grayE, + ), + SizedBox( + height: 5, + ), + Text( + '${'settings.dialog.promotion_desc'.tr(namedArgs: namedArgs)}'), + ], + ); + case OTLDialogType.addOverlappingLecture: case OTLDialogType.addOverlappingLectureWithTab: return Text.rich(TextSpan( From 10d76eadb7a6297079c5c5e7f5c93532f63f4988 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Fri, 10 Jan 2025 01:23:14 +0900 Subject: [PATCH 7/8] chore: format and analyze code --- lib/pages/settings_page.dart | 2 -- lib/widgets/otl_dialog.dart | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/pages/settings_page.dart b/lib/pages/settings_page.dart index d6c2ddf9..6b4d2389 100644 --- a/lib/pages/settings_page.dart +++ b/lib/pages/settings_page.dart @@ -3,7 +3,6 @@ import 'package:flutter/cupertino.dart'; import 'package:otlplus/constants/color.dart'; import 'package:otlplus/constants/text_styles.dart'; import 'package:otlplus/constants/url.dart'; -import 'package:otlplus/providers/info_model.dart'; import 'package:otlplus/providers/settings_model.dart'; import 'package:otlplus/widgets/dropdown.dart'; import 'package:otlplus/widgets/otl_dialog.dart'; @@ -19,7 +18,6 @@ class SettingsPage extends StatelessWidget { @override Widget build(BuildContext context) { final isEn = EasyLocalization.of(context)?.currentLocale == Locale('en'); - final user = context.watch().user; return OTLScaffold( child: OTLLayout( diff --git a/lib/widgets/otl_dialog.dart b/lib/widgets/otl_dialog.dart index 40df018d..f7725092 100644 --- a/lib/widgets/otl_dialog.dart +++ b/lib/widgets/otl_dialog.dart @@ -312,7 +312,7 @@ class OTLDialog extends StatelessWidget { Text( '${'settings.dialog.date'.tr(namedArgs: namedArgs)} : ${DateFormat('yyyy-MM-dd').format(DateTime.now())}'), Text( - '${'settings.dialog.user_name'.tr(namedArgs: namedArgs)} : ${user!.firstName} ${user!.lastName}'), + '${'settings.dialog.user_name'.tr(namedArgs: namedArgs)} : ${user?.firstName} ${user?.lastName}'), Text( '${'settings.dialog.detail'.tr(namedArgs: namedArgs)} : ${'settings.dialog.disable'.tr(namedArgs: namedArgs)}'), ], From 636ae0f24c5ae9b6731c8bc6c82e1c1edcd8630e Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Fri, 10 Jan 2025 01:23:56 +0900 Subject: [PATCH 8/8] chore: analyze code and fix --- lib/widgets/otl_dialog.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/widgets/otl_dialog.dart b/lib/widgets/otl_dialog.dart index f7725092..218f2e48 100644 --- a/lib/widgets/otl_dialog.dart +++ b/lib/widgets/otl_dialog.dart @@ -337,7 +337,7 @@ class OTLDialog extends StatelessWidget { Text( '${'settings.dialog.date'.tr(namedArgs: namedArgs)} : ${DateFormat('yyyy-MM-dd').format(DateTime.now())}'), Text( - '${'settings.dialog.user_name'.tr(namedArgs: namedArgs)} : ${user!.firstName} ${user!.lastName}'), + '${'settings.dialog.user_name'.tr(namedArgs: namedArgs)} : ${user?.firstName} ${user?.lastName}'), Text( '${'settings.dialog.detail'.tr(namedArgs: namedArgs)} : ${'settings.dialog.enable'.tr(namedArgs: namedArgs)}'), ],