diff --git a/.github/workflows/conventional-pr-title.yml b/.github/workflows/conventional-pr-title.yml
new file mode 100644
index 000000000..4fd3e664e
--- /dev/null
+++ b/.github/workflows/conventional-pr-title.yml
@@ -0,0 +1,44 @@
+name: "Conventional PR Title"
+
+on:
+ pull_request_target:
+ types:
+ - opened
+ - reopened
+ - edited
+ - synchronize
+
+permissions:
+ pull-requests: write
+
+jobs:
+ main:
+ name: Validate PR title
+ runs-on: ubuntu-latest
+ steps:
+ - uses: amannn/action-semantic-pull-request@v5
+ id: lint_pr_title
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - uses: marocchino/sticky-pull-request-comment@v2
+ # When the previous steps fails, the workflow would stop. By adding this
+ # condition you can continue the execution with the populated error message.
+ if: always() && (steps.lint_pr_title.outputs.error_message != null)
+ with:
+ header: pr-title-lint-error
+ message: |
+ Hey there and thank you for opening this pull request! 馃憢馃徏
+
+ We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted.
+ Details:
+
+ ```
+ ${{ steps.lint_pr_title.outputs.error_message }}
+ ```
+ # Delete a previous comment when the issue has been resolved
+ - if: ${{ steps.lint_pr_title.outputs.error_message == null }}
+ uses: marocchino/sticky-pull-request-comment@v2
+ with:
+ header: pr-title-lint-error
+ delete: true
diff --git a/README.md b/README.md
index d8dbf3ec4..860f175b8 100644
--- a/README.md
+++ b/README.md
@@ -87,6 +87,7 @@ Key features of the project:
* The app is designed to be as user friendly as possible.
* A thorough selection process has been undertaken to ensure that the books are suitable for the Torah community
* the library is flexible, means that you can add or remove books from the library.
+* fast search engine, including the user-added books.
* the app supports the following formats: TXT, Docx and PDF.
I hope that my work will help the Torah community to learn easiely and effectively anytime and anywhere.
@@ -151,15 +152,12 @@ See the Wiki section for documentation.
## Roadmap
-- [ ] Add ViewModel layer
-- [ ] Transfer database to isar
+- [ ] Add business logic layer by switching the state management library to Bloc.
+- [ ] Transfer books data from text files to SQLite database
+- [ ] add option for semantic search using an embedding ML model and vector database
- [ ] language Support
- [ ] English
- [X] Hebrew
-- [ ] full-text search with index
-- [ ] add more features
- - [ ] search for references
- - [ ] save history
See the [open issues](https://github.com/sivan22/otzaria/issues) for a full list of proposed features (and known issues).
@@ -211,8 +209,12 @@ Project Link: [https://github.com/sivan22/otzaria](https://github.com/sivan22/ot
## Acknowledgments
the project was avavilable because of Sefaria's amazing project.
-
-
+
+and Dicta association, by which many important books were added.
+
+
+
+
the PDF viewer is powered by [pdfrx](https://pub.dev/packages/pdfrx).
diff --git a/images/dicta_logo.jpg b/images/dicta_logo.jpg
new file mode 100644
index 000000000..ce104c4da
Binary files /dev/null and b/images/dicta_logo.jpg differ
diff --git a/images/safria logo.png b/images/safria logo.png
new file mode 100644
index 000000000..78ff5a1cf
Binary files /dev/null and b/images/safria logo.png differ
diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig
index 592ceee85..ec97fc6f3 100644
--- a/ios/Flutter/Debug.xcconfig
+++ b/ios/Flutter/Debug.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig
index 592ceee85..c4855bfe2 100644
--- a/ios/Flutter/Release.xcconfig
+++ b/ios/Flutter/Release.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
diff --git a/ios/Podfile b/ios/Podfile
new file mode 100644
index 000000000..d97f17e22
--- /dev/null
+++ b/ios/Podfile
@@ -0,0 +1,44 @@
+# Uncomment this line to define a global platform for your project
+# platform :ios, '12.0'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+ target 'RunnerTests' do
+ inherit! :search_paths
+ end
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_ios_build_settings(target)
+ end
+end
diff --git a/lib/models/app_model.dart b/lib/models/app_model.dart
index 8d38bd1be..301c885b1 100644
--- a/lib/models/app_model.dart
+++ b/lib/models/app_model.dart
@@ -311,11 +311,21 @@ class AppModel with ChangeNotifier {
Hive.box(name: 'tabs').put("key-current-tab", currentTab);
}
- void addBookmark(
+ bool addBookmark(
{required String ref, required Book book, required int index}) {
- bookmarks.add(Bookmark(ref: ref, book: book, index: index));
- // write to disk
- Hive.box(name: 'bookmarks').put('key-bookmarks', bookmarks);
+ // Check if a bookmark with the same ref, book, and index already exists
+ bool bookmarkExists = bookmarks.any((bookmark) =>
+ bookmark.ref == ref &&
+ bookmark.book.title == book.title &&
+ bookmark.index == index);
+
+ if (!bookmarkExists) {
+ bookmarks.add(Bookmark(ref: ref, book: book, index: index));
+ // write to disk
+ Hive.box(name: 'bookmarks').put('key-bookmarks', bookmarks);
+ return true;
+ }
+ return false;
}
void removeBookmark(int index) {
@@ -330,9 +340,7 @@ class AppModel with ChangeNotifier {
void addHistory(
{required String ref, required Book book, required int index}) {
- if (book is TextBook) {
- history.insert(0, Bookmark(ref: ref, book: book, index: index));
- }
+ history.insert(0, Bookmark(ref: ref, book: book, index: index));
// write to disk
Hive.box(name: 'history').put('key-history', history);
}
diff --git a/lib/screens/pdf_book_screen.dart b/lib/screens/pdf_book_screen.dart
index 12d2a5d07..9fa71075d 100644
--- a/lib/screens/pdf_book_screen.dart
+++ b/lib/screens/pdf_book_screen.dart
@@ -60,31 +60,37 @@ class _PdfBookViewrState extends State
),
actions: [
IconButton(
- icon: const Icon(Icons.bookmark_add),
- tooltip: '讛讜住驻转 住讬诪谞讬讛',
- onPressed: () {
- int index = widget.tab.pdfViewerController.isReady
- ? widget.tab.pdfViewerController.pageNumber!
- : 1;
- Provider.of(context, listen: false).addBookmark(
- ref: '${widget.tab.title} 注诪讜讚 $index',
- book: widget.tab.book,
- index: index);
- // notify user
- if (mounted) {
- ScaffoldMessenger.of(context).showSnackBar(
- const SnackBar(
- content: Text('讛住讬诪谞讬讛 谞讜住驻讛 讘讛爪诇讞讛'),
- ),
- );
- }
- }),
+ icon: const Icon(
+ Icons.bookmark_add,
+ ),
+ tooltip: '讛讜住驻转 住讬诪谞讬讛',
+ onPressed: () {
+ int index = widget.tab.pdfViewerController.isReady
+ ? widget.tab.pdfViewerController.pageNumber!
+ : 1;
+ bool bookmarkAdded = Provider.of(context, listen: false)
+ .addBookmark(
+ ref: '${widget.tab.title} 注诪讜讚 $index',
+ book: widget.tab.book,
+ index: index);
+ // notify user
+ if (mounted) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ SnackBar(
+ content: Text(bookmarkAdded
+ ? '讛住讬诪谞讬讛 谞讜住驻讛 讘讛爪诇讞讛'
+ : '讛住讬诪谞讬讛 讻讘专 拽讬讬诪转'),
+ ),
+ );
+ }
+ },
+ ),
IconButton(
icon: const Icon(
Icons.zoom_in,
),
tooltip: '讛讙讚诇',
- onPressed: () => widget..tab.pdfViewerController.zoomUp(),
+ onPressed: () => widget.tab.pdfViewerController.zoomUp(),
),
IconButton(
icon: const Icon(Icons.zoom_out),
diff --git a/lib/screens/text_book_screen.dart b/lib/screens/text_book_screen.dart
index 5bec7bf9e..fb7352627 100644
--- a/lib/screens/text_book_screen.dart
+++ b/lib/screens/text_book_screen.dart
@@ -134,21 +134,23 @@ class _TextBookViewerState extends State
),
//button to add a bookmark
IconButton(
- onPressed: () {
- () async {
- int index = widget
- .tab.positionsListener.itemPositions.value.first.index;
- Provider.of(context, listen: false).addBookmark(
- ref: await utils.refFromIndex(
- index, widget.tab.tableOfContents),
- book: widget.tab.book,
- index: index);
- }();
+ onPressed: () async {
+ int index = widget
+ .tab.positionsListener.itemPositions.value.first.index;
+ String ref = await utils.refFromIndex(
+ index, widget.tab.tableOfContents);
+ bool bookmarkAdded = Provider.of(context, listen: false)
+ .addBookmark(
+ ref: ref,
+ book: widget.tab.book,
+ index: index);
// notify user
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
- const SnackBar(
- content: Text('讛住讬诪谞讬讛 谞讜住驻讛 讘讛爪诇讞讛'),
+ SnackBar(
+ content: Text(bookmarkAdded
+ ? '讛住讬诪谞讬讛 谞讜住驻讛 讘讛爪诇讞讛'
+ : '讛住讬诪谞讬讛 讻讘专 拽讬讬诪转'),
),
);
}
diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig
index c2efd0b60..4b81f9b2d 100644
--- a/macos/Flutter/Flutter-Debug.xcconfig
+++ b/macos/Flutter/Flutter-Debug.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig
index c2efd0b60..5caa9d157 100644
--- a/macos/Flutter/Flutter-Release.xcconfig
+++ b/macos/Flutter/Flutter-Release.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/macos/Podfile b/macos/Podfile
new file mode 100644
index 000000000..c795730db
--- /dev/null
+++ b/macos/Podfile
@@ -0,0 +1,43 @@
+platform :osx, '10.14'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_macos_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
+ target 'RunnerTests' do
+ inherit! :search_paths
+ end
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_macos_build_settings(target)
+ end
+end
diff --git a/macos/Podfile.lock b/macos/Podfile.lock
new file mode 100644
index 000000000..ce1812096
--- /dev/null
+++ b/macos/Podfile.lock
@@ -0,0 +1,73 @@
+PODS:
+ - FlutterMacOS (1.0.0)
+ - isar_flutter_libs (1.0.0):
+ - FlutterMacOS
+ - package_info_plus (0.0.1):
+ - FlutterMacOS
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - pdfrx (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - printing (1.0.0):
+ - FlutterMacOS
+ - screen_retriever (0.0.1):
+ - FlutterMacOS
+ - shared_preferences_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - url_launcher_macos (0.0.1):
+ - FlutterMacOS
+ - window_manager (0.2.0):
+ - FlutterMacOS
+
+DEPENDENCIES:
+ - FlutterMacOS (from `Flutter/ephemeral`)
+ - isar_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/isar_flutter_libs/macos`)
+ - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
+ - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+ - pdfrx (from `Flutter/ephemeral/.symlinks/plugins/pdfrx/darwin`)
+ - printing (from `Flutter/ephemeral/.symlinks/plugins/printing/macos`)
+ - screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
+ - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
+ - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
+ - window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
+
+EXTERNAL SOURCES:
+ FlutterMacOS:
+ :path: Flutter/ephemeral
+ isar_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/isar_flutter_libs/macos
+ package_info_plus:
+ :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
+ path_provider_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+ pdfrx:
+ :path: Flutter/ephemeral/.symlinks/plugins/pdfrx/darwin
+ printing:
+ :path: Flutter/ephemeral/.symlinks/plugins/printing/macos
+ screen_retriever:
+ :path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
+ shared_preferences_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
+ url_launcher_macos:
+ :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
+ window_manager:
+ :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
+
+SPEC CHECKSUMS:
+ FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
+ isar_flutter_libs: 43385c99864c168fadba7c9adeddc5d38838ca6a
+ package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
+ path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
+ pdfrx: 8c711fadb19f76c70e3326ceaa718fe4b6703c37
+ printing: 1dd6a1fce2209ec240698e2439a4adbb9b427637
+ screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
+ shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
+ url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
+ window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
+
+PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
+
+COCOAPODS: 1.15.2
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index 800198d4f..c95cd9219 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -27,6 +27,8 @@
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
+ 79F23E06B00A5FF06E565027 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A84E11165A38C1F48CD6CF0B /* Pods_Runner.framework */; };
+ E33C2F452CB68412250286D2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E53B3BB205F534BB0D1D28E9 /* Pods_RunnerTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -60,11 +62,12 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 117DDBEBB841300EE3C59E5A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
- 33CC10ED2044A3C60003C045 /* otzaria.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "otzaria.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33CC10ED2044A3C60003C045 /* otzaria.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = otzaria.app; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
@@ -76,8 +79,15 @@
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
+ 49FE1A282605E6CCFD3CF46B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ 4ADB39DDCF482AB72B8C172A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+ 5A86C986B7373DFCF97FE8CD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 9341277F1DF77B60AC337BC8 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+ A84E11165A38C1F48CD6CF0B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B150B28F8705627EBC9FF79D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ E53B3BB205F534BB0D1D28E9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -85,6 +95,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ E33C2F452CB68412250286D2 /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -92,6 +103,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 79F23E06B00A5FF06E565027 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -125,6 +137,7 @@
331C80D6294CF71000263BE5 /* RunnerTests */,
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
+ A2B778A93A09DF5D32B14690 /* Pods */,
);
sourceTree = "";
};
@@ -172,9 +185,25 @@
path = Runner;
sourceTree = "";
};
+ A2B778A93A09DF5D32B14690 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ B150B28F8705627EBC9FF79D /* Pods-Runner.debug.xcconfig */,
+ 49FE1A282605E6CCFD3CF46B /* Pods-Runner.release.xcconfig */,
+ 5A86C986B7373DFCF97FE8CD /* Pods-Runner.profile.xcconfig */,
+ 9341277F1DF77B60AC337BC8 /* Pods-RunnerTests.debug.xcconfig */,
+ 4ADB39DDCF482AB72B8C172A /* Pods-RunnerTests.release.xcconfig */,
+ 117DDBEBB841300EE3C59E5A /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ A84E11165A38C1F48CD6CF0B /* Pods_Runner.framework */,
+ E53B3BB205F534BB0D1D28E9 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -186,6 +215,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
+ FEBB8F16F1A0F41D8C028E29 /* [CP] Check Pods Manifest.lock */,
331C80D1294CF70F00263BE5 /* Sources */,
331C80D2294CF70F00263BE5 /* Frameworks */,
331C80D3294CF70F00263BE5 /* Resources */,
@@ -204,11 +234,13 @@
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
+ 3A513D6542A3247C4936F15C /* [CP] Check Pods Manifest.lock */,
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
+ 916C0D27308C0DAB3ECEC970 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -227,7 +259,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C80D4294CF70F00263BE5 = {
@@ -328,6 +360,67 @@
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
+ 3A513D6542A3247C4936F15C /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 916C0D27308C0DAB3ECEC970 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FEBB8F16F1A0F41D8C028E29 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -379,6 +472,7 @@
/* Begin XCBuildConfiguration section */
331C80DB294CF71000263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 9341277F1DF77B60AC337BC8 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
@@ -393,6 +487,7 @@
};
331C80DC294CF71000263BE5 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 4ADB39DDCF482AB72B8C172A /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
@@ -407,6 +502,7 @@
};
331C80DD294CF71000263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 117DDBEBB841300EE3C59E5A /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index be70ebf0a..91e724de6 100644
--- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
+
+
diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift
index d53ef6437..8e02df288 100644
--- a/macos/Runner/AppDelegate.swift
+++ b/macos/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import Cocoa
import FlutterMacOS
-@NSApplicationMain
+@main
class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
diff --git a/pubspec.lock b/pubspec.lock
index 1f79efd7f..2dd4925e4 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: archive
- sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d"
+ sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
url: "https://pub.dev"
source: hosted
- version: "3.4.10"
+ version: "3.6.1"
args:
dependency: transitive
description: