remove unneeded build targets
							
								
								
									
										1
									
								
								frontend/linux/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1 +0,0 @@ | ||||
| flutter/ephemeral | ||||
| @@ -1,145 +0,0 @@ | ||||
| # Project-level configuration. | ||||
| cmake_minimum_required(VERSION 3.10) | ||||
| project(runner LANGUAGES CXX) | ||||
|  | ||||
| # The name of the executable created for the application. Change this to change | ||||
| # the on-disk name of your application. | ||||
| set(BINARY_NAME "anyway") | ||||
| # The unique GTK application identifier for this application. See: | ||||
| # https://wiki.gnome.org/HowDoI/ChooseApplicationID | ||||
| set(APPLICATION_ID "com.example.anyway") | ||||
|  | ||||
| # Explicitly opt in to modern CMake behaviors to avoid warnings with recent | ||||
| # versions of CMake. | ||||
| cmake_policy(SET CMP0063 NEW) | ||||
|  | ||||
| # Load bundled libraries from the lib/ directory relative to the binary. | ||||
| set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") | ||||
|  | ||||
| # Root filesystem for cross-building. | ||||
| if(FLUTTER_TARGET_PLATFORM_SYSROOT) | ||||
|   set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) | ||||
|   set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) | ||||
|   set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | ||||
|   set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) | ||||
|   set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | ||||
|   set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | ||||
| endif() | ||||
|  | ||||
| # Define build configuration options. | ||||
| if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) | ||||
|   set(CMAKE_BUILD_TYPE "Debug" CACHE | ||||
|     STRING "Flutter build mode" FORCE) | ||||
|   set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS | ||||
|     "Debug" "Profile" "Release") | ||||
| endif() | ||||
|  | ||||
| # Compilation settings that should be applied to most targets. | ||||
| # | ||||
| # Be cautious about adding new options here, as plugins use this function by | ||||
| # default. In most cases, you should add new options to specific targets instead | ||||
| # of modifying this function. | ||||
| function(APPLY_STANDARD_SETTINGS TARGET) | ||||
|   target_compile_features(${TARGET} PUBLIC cxx_std_14) | ||||
|   target_compile_options(${TARGET} PRIVATE -Wall -Werror) | ||||
|   target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>") | ||||
|   target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>") | ||||
| endfunction() | ||||
|  | ||||
| # Flutter library and tool build rules. | ||||
| set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") | ||||
| add_subdirectory(${FLUTTER_MANAGED_DIR}) | ||||
|  | ||||
| # System-level dependencies. | ||||
| find_package(PkgConfig REQUIRED) | ||||
| pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) | ||||
|  | ||||
| add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") | ||||
|  | ||||
| # Define the application target. To change its name, change BINARY_NAME above, | ||||
| # not the value here, or `flutter run` will no longer work. | ||||
| # | ||||
| # Any new source files that you add to the application should be added here. | ||||
| add_executable(${BINARY_NAME} | ||||
|   "main.cc" | ||||
|   "my_application.cc" | ||||
|   "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" | ||||
| ) | ||||
|  | ||||
| # Apply the standard set of build settings. This can be removed for applications | ||||
| # that need different build settings. | ||||
| apply_standard_settings(${BINARY_NAME}) | ||||
|  | ||||
| # Add dependency libraries. Add any application-specific dependencies here. | ||||
| target_link_libraries(${BINARY_NAME} PRIVATE flutter) | ||||
| target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) | ||||
|  | ||||
| # Run the Flutter tool portions of the build. This must not be removed. | ||||
| add_dependencies(${BINARY_NAME} flutter_assemble) | ||||
|  | ||||
| # Only the install-generated bundle's copy of the executable will launch | ||||
| # correctly, since the resources must in the right relative locations. To avoid | ||||
| # people trying to run the unbundled copy, put it in a subdirectory instead of | ||||
| # the default top-level location. | ||||
| set_target_properties(${BINARY_NAME} | ||||
|   PROPERTIES | ||||
|   RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" | ||||
| ) | ||||
|  | ||||
|  | ||||
| # Generated plugin build rules, which manage building the plugins and adding | ||||
| # them to the application. | ||||
| include(flutter/generated_plugins.cmake) | ||||
|  | ||||
|  | ||||
| # === Installation === | ||||
| # By default, "installing" just makes a relocatable bundle in the build | ||||
| # directory. | ||||
| set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") | ||||
| if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) | ||||
|   set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) | ||||
| endif() | ||||
|  | ||||
| # Start with a clean build bundle directory every time. | ||||
| install(CODE " | ||||
|   file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") | ||||
|   " COMPONENT Runtime) | ||||
|  | ||||
| set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") | ||||
| set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") | ||||
|  | ||||
| install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" | ||||
|   COMPONENT Runtime) | ||||
|  | ||||
| install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" | ||||
|   COMPONENT Runtime) | ||||
|  | ||||
| install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|   COMPONENT Runtime) | ||||
|  | ||||
| foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) | ||||
|   install(FILES "${bundled_library}" | ||||
|     DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|     COMPONENT Runtime) | ||||
| endforeach(bundled_library) | ||||
|  | ||||
| # Copy the native assets provided by the build.dart from all packages. | ||||
| set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") | ||||
| install(DIRECTORY "${NATIVE_ASSETS_DIR}" | ||||
|    DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|    COMPONENT Runtime) | ||||
|  | ||||
| # Fully re-copy the assets directory on each build to avoid having stale files | ||||
| # from a previous install. | ||||
| set(FLUTTER_ASSET_DIR_NAME "flutter_assets") | ||||
| install(CODE " | ||||
|   file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") | ||||
|   " COMPONENT Runtime) | ||||
| install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" | ||||
|   DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) | ||||
|  | ||||
| # Install the AOT library on non-Debug builds only. | ||||
| if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") | ||||
|   install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|     COMPONENT Runtime) | ||||
| endif() | ||||
| @@ -1,88 +0,0 @@ | ||||
| # This file controls Flutter-level build steps. It should not be edited. | ||||
| cmake_minimum_required(VERSION 3.10) | ||||
|  | ||||
| set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") | ||||
|  | ||||
| # Configuration provided via flutter tool. | ||||
| include(${EPHEMERAL_DIR}/generated_config.cmake) | ||||
|  | ||||
| # TODO: Move the rest of this into files in ephemeral. See | ||||
| # https://github.com/flutter/flutter/issues/57146. | ||||
|  | ||||
| # Serves the same purpose as list(TRANSFORM ... PREPEND ...), | ||||
| # which isn't available in 3.10. | ||||
| function(list_prepend LIST_NAME PREFIX) | ||||
|     set(NEW_LIST "") | ||||
|     foreach(element ${${LIST_NAME}}) | ||||
|         list(APPEND NEW_LIST "${PREFIX}${element}") | ||||
|     endforeach(element) | ||||
|     set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) | ||||
| endfunction() | ||||
|  | ||||
| # === Flutter Library === | ||||
| # System-level dependencies. | ||||
| find_package(PkgConfig REQUIRED) | ||||
| pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) | ||||
| pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) | ||||
| pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) | ||||
|  | ||||
| set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") | ||||
|  | ||||
| # Published to parent scope for install step. | ||||
| set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) | ||||
| set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) | ||||
| set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) | ||||
| set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) | ||||
|  | ||||
| list(APPEND FLUTTER_LIBRARY_HEADERS | ||||
|   "fl_basic_message_channel.h" | ||||
|   "fl_binary_codec.h" | ||||
|   "fl_binary_messenger.h" | ||||
|   "fl_dart_project.h" | ||||
|   "fl_engine.h" | ||||
|   "fl_json_message_codec.h" | ||||
|   "fl_json_method_codec.h" | ||||
|   "fl_message_codec.h" | ||||
|   "fl_method_call.h" | ||||
|   "fl_method_channel.h" | ||||
|   "fl_method_codec.h" | ||||
|   "fl_method_response.h" | ||||
|   "fl_plugin_registrar.h" | ||||
|   "fl_plugin_registry.h" | ||||
|   "fl_standard_message_codec.h" | ||||
|   "fl_standard_method_codec.h" | ||||
|   "fl_string_codec.h" | ||||
|   "fl_value.h" | ||||
|   "fl_view.h" | ||||
|   "flutter_linux.h" | ||||
| ) | ||||
| list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") | ||||
| add_library(flutter INTERFACE) | ||||
| target_include_directories(flutter INTERFACE | ||||
|   "${EPHEMERAL_DIR}" | ||||
| ) | ||||
| target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") | ||||
| target_link_libraries(flutter INTERFACE | ||||
|   PkgConfig::GTK | ||||
|   PkgConfig::GLIB | ||||
|   PkgConfig::GIO | ||||
| ) | ||||
| add_dependencies(flutter flutter_assemble) | ||||
|  | ||||
| # === Flutter tool backend === | ||||
| # _phony_ is a non-existent file to force this command to run every time, | ||||
| # since currently there's no way to get a full input/output list from the | ||||
| # flutter tool. | ||||
| add_custom_command( | ||||
|   OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} | ||||
|     ${CMAKE_CURRENT_BINARY_DIR}/_phony_ | ||||
|   COMMAND ${CMAKE_COMMAND} -E env | ||||
|     ${FLUTTER_TOOL_ENVIRONMENT} | ||||
|     "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" | ||||
|       ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} | ||||
|   VERBATIM | ||||
| ) | ||||
| add_custom_target(flutter_assemble DEPENDS | ||||
|   "${FLUTTER_LIBRARY}" | ||||
|   ${FLUTTER_LIBRARY_HEADERS} | ||||
| ) | ||||
| @@ -1,11 +0,0 @@ | ||||
| // | ||||
| //  Generated file. Do not edit. | ||||
| // | ||||
|  | ||||
| // clang-format off | ||||
|  | ||||
| #include "generated_plugin_registrant.h" | ||||
|  | ||||
|  | ||||
| void fl_register_plugins(FlPluginRegistry* registry) { | ||||
| } | ||||
| @@ -1,15 +0,0 @@ | ||||
| // | ||||
| //  Generated file. Do not edit. | ||||
| // | ||||
|  | ||||
| // clang-format off | ||||
|  | ||||
| #ifndef GENERATED_PLUGIN_REGISTRANT_ | ||||
| #define GENERATED_PLUGIN_REGISTRANT_ | ||||
|  | ||||
| #include <flutter_linux/flutter_linux.h> | ||||
|  | ||||
| // Registers Flutter plugins. | ||||
| void fl_register_plugins(FlPluginRegistry* registry); | ||||
|  | ||||
| #endif  // GENERATED_PLUGIN_REGISTRANT_ | ||||
| @@ -1,23 +0,0 @@ | ||||
| # | ||||
| # Generated file, do not edit. | ||||
| # | ||||
|  | ||||
| list(APPEND FLUTTER_PLUGIN_LIST | ||||
| ) | ||||
|  | ||||
| list(APPEND FLUTTER_FFI_PLUGIN_LIST | ||||
| ) | ||||
|  | ||||
| set(PLUGIN_BUNDLED_LIBRARIES) | ||||
|  | ||||
| foreach(plugin ${FLUTTER_PLUGIN_LIST}) | ||||
|   add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) | ||||
|   target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) | ||||
|   list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>) | ||||
|   list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) | ||||
| endforeach(plugin) | ||||
|  | ||||
| foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) | ||||
|   add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) | ||||
|   list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) | ||||
| endforeach(ffi_plugin) | ||||
| @@ -1,6 +0,0 @@ | ||||
| #include "my_application.h" | ||||
|  | ||||
| int main(int argc, char** argv) { | ||||
|   g_autoptr(MyApplication) app = my_application_new(); | ||||
|   return g_application_run(G_APPLICATION(app), argc, argv); | ||||
| } | ||||
| @@ -1,124 +0,0 @@ | ||||
| #include "my_application.h" | ||||
|  | ||||
| #include <flutter_linux/flutter_linux.h> | ||||
| #ifdef GDK_WINDOWING_X11 | ||||
| #include <gdk/gdkx.h> | ||||
| #endif | ||||
|  | ||||
| #include "flutter/generated_plugin_registrant.h" | ||||
|  | ||||
| struct _MyApplication { | ||||
|   GtkApplication parent_instance; | ||||
|   char** dart_entrypoint_arguments; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) | ||||
|  | ||||
| // Implements GApplication::activate. | ||||
| static void my_application_activate(GApplication* application) { | ||||
|   MyApplication* self = MY_APPLICATION(application); | ||||
|   GtkWindow* window = | ||||
|       GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); | ||||
|  | ||||
|   // Use a header bar when running in GNOME as this is the common style used | ||||
|   // by applications and is the setup most users will be using (e.g. Ubuntu | ||||
|   // desktop). | ||||
|   // If running on X and not using GNOME then just use a traditional title bar | ||||
|   // in case the window manager does more exotic layout, e.g. tiling. | ||||
|   // If running on Wayland assume the header bar will work (may need changing | ||||
|   // if future cases occur). | ||||
|   gboolean use_header_bar = TRUE; | ||||
| #ifdef GDK_WINDOWING_X11 | ||||
|   GdkScreen* screen = gtk_window_get_screen(window); | ||||
|   if (GDK_IS_X11_SCREEN(screen)) { | ||||
|     const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); | ||||
|     if (g_strcmp0(wm_name, "GNOME Shell") != 0) { | ||||
|       use_header_bar = FALSE; | ||||
|     } | ||||
|   } | ||||
| #endif | ||||
|   if (use_header_bar) { | ||||
|     GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); | ||||
|     gtk_widget_show(GTK_WIDGET(header_bar)); | ||||
|     gtk_header_bar_set_title(header_bar, "anyway"); | ||||
|     gtk_header_bar_set_show_close_button(header_bar, TRUE); | ||||
|     gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); | ||||
|   } else { | ||||
|     gtk_window_set_title(window, "anyway"); | ||||
|   } | ||||
|  | ||||
|   gtk_window_set_default_size(window, 1280, 720); | ||||
|   gtk_widget_show(GTK_WIDGET(window)); | ||||
|  | ||||
|   g_autoptr(FlDartProject) project = fl_dart_project_new(); | ||||
|   fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); | ||||
|  | ||||
|   FlView* view = fl_view_new(project); | ||||
|   gtk_widget_show(GTK_WIDGET(view)); | ||||
|   gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); | ||||
|  | ||||
|   fl_register_plugins(FL_PLUGIN_REGISTRY(view)); | ||||
|  | ||||
|   gtk_widget_grab_focus(GTK_WIDGET(view)); | ||||
| } | ||||
|  | ||||
| // Implements GApplication::local_command_line. | ||||
| static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { | ||||
|   MyApplication* self = MY_APPLICATION(application); | ||||
|   // Strip out the first argument as it is the binary name. | ||||
|   self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); | ||||
|  | ||||
|   g_autoptr(GError) error = nullptr; | ||||
|   if (!g_application_register(application, nullptr, &error)) { | ||||
|      g_warning("Failed to register: %s", error->message); | ||||
|      *exit_status = 1; | ||||
|      return TRUE; | ||||
|   } | ||||
|  | ||||
|   g_application_activate(application); | ||||
|   *exit_status = 0; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| // Implements GApplication::startup. | ||||
| static void my_application_startup(GApplication* application) { | ||||
|   //MyApplication* self = MY_APPLICATION(object); | ||||
|  | ||||
|   // Perform any actions required at application startup. | ||||
|  | ||||
|   G_APPLICATION_CLASS(my_application_parent_class)->startup(application); | ||||
| } | ||||
|  | ||||
| // Implements GApplication::shutdown. | ||||
| static void my_application_shutdown(GApplication* application) { | ||||
|   //MyApplication* self = MY_APPLICATION(object); | ||||
|  | ||||
|   // Perform any actions required at application shutdown. | ||||
|  | ||||
|   G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); | ||||
| } | ||||
|  | ||||
| // Implements GObject::dispose. | ||||
| static void my_application_dispose(GObject* object) { | ||||
|   MyApplication* self = MY_APPLICATION(object); | ||||
|   g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); | ||||
|   G_OBJECT_CLASS(my_application_parent_class)->dispose(object); | ||||
| } | ||||
|  | ||||
| static void my_application_class_init(MyApplicationClass* klass) { | ||||
|   G_APPLICATION_CLASS(klass)->activate = my_application_activate; | ||||
|   G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; | ||||
|   G_APPLICATION_CLASS(klass)->startup = my_application_startup; | ||||
|   G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; | ||||
|   G_OBJECT_CLASS(klass)->dispose = my_application_dispose; | ||||
| } | ||||
|  | ||||
| static void my_application_init(MyApplication* self) {} | ||||
|  | ||||
| MyApplication* my_application_new() { | ||||
|   return MY_APPLICATION(g_object_new(my_application_get_type(), | ||||
|                                      "application-id", APPLICATION_ID, | ||||
|                                      "flags", G_APPLICATION_NON_UNIQUE, | ||||
|                                      nullptr)); | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| #ifndef FLUTTER_MY_APPLICATION_H_ | ||||
| #define FLUTTER_MY_APPLICATION_H_ | ||||
|  | ||||
| #include <gtk/gtk.h> | ||||
|  | ||||
| G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, | ||||
|                      GtkApplication) | ||||
|  | ||||
| /** | ||||
|  * my_application_new: | ||||
|  * | ||||
|  * Creates a new Flutter-based application. | ||||
|  * | ||||
|  * Returns: a new #MyApplication. | ||||
|  */ | ||||
| MyApplication* my_application_new(); | ||||
|  | ||||
| #endif  // FLUTTER_MY_APPLICATION_H_ | ||||
							
								
								
									
										7
									
								
								frontend/macos/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,7 +0,0 @@ | ||||
| # Flutter-related | ||||
| **/Flutter/ephemeral/ | ||||
| **/Pods/ | ||||
|  | ||||
| # Xcode-related | ||||
| **/dgph | ||||
| **/xcuserdata/ | ||||
| @@ -1 +0,0 @@ | ||||
| #include "ephemeral/Flutter-Generated.xcconfig" | ||||
| @@ -1 +0,0 @@ | ||||
| #include "ephemeral/Flutter-Generated.xcconfig" | ||||
| @@ -1,16 +0,0 @@ | ||||
| // | ||||
| //  Generated file. Do not edit. | ||||
| // | ||||
|  | ||||
| import FlutterMacOS | ||||
| import Foundation | ||||
|  | ||||
| import path_provider_foundation | ||||
| import shared_preferences_foundation | ||||
| import sqflite | ||||
|  | ||||
| func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | ||||
|   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) | ||||
|   SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) | ||||
|   SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) | ||||
| } | ||||
| @@ -1,705 +0,0 @@ | ||||
| // !$*UTF8*$! | ||||
| { | ||||
| 	archiveVersion = 1; | ||||
| 	classes = { | ||||
| 	}; | ||||
| 	objectVersion = 54; | ||||
| 	objects = { | ||||
|  | ||||
| /* Begin PBXAggregateTarget section */ | ||||
| 		33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { | ||||
| 			isa = PBXAggregateTarget; | ||||
| 			buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; | ||||
| 			buildPhases = ( | ||||
| 				33CC111E2044C6BF0003C045 /* ShellScript */, | ||||
| 			); | ||||
| 			dependencies = ( | ||||
| 			); | ||||
| 			name = "Flutter Assemble"; | ||||
| 			productName = FLX; | ||||
| 		}; | ||||
| /* End PBXAggregateTarget section */ | ||||
|  | ||||
| /* Begin PBXBuildFile section */ | ||||
| 		331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; | ||||
| 		335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; | ||||
| 		33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; | ||||
| 		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 */; }; | ||||
| /* End PBXBuildFile section */ | ||||
|  | ||||
| /* Begin PBXContainerItemProxy section */ | ||||
| 		331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { | ||||
| 			isa = PBXContainerItemProxy; | ||||
| 			containerPortal = 33CC10E52044A3C60003C045 /* Project object */; | ||||
| 			proxyType = 1; | ||||
| 			remoteGlobalIDString = 33CC10EC2044A3C60003C045; | ||||
| 			remoteInfo = Runner; | ||||
| 		}; | ||||
| 		33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { | ||||
| 			isa = PBXContainerItemProxy; | ||||
| 			containerPortal = 33CC10E52044A3C60003C045 /* Project object */; | ||||
| 			proxyType = 1; | ||||
| 			remoteGlobalIDString = 33CC111A2044C6BA0003C045; | ||||
| 			remoteInfo = FLX; | ||||
| 		}; | ||||
| /* End PBXContainerItemProxy section */ | ||||
|  | ||||
| /* Begin PBXCopyFilesBuildPhase section */ | ||||
| 		33CC110E2044A8840003C045 /* Bundle Framework */ = { | ||||
| 			isa = PBXCopyFilesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			dstPath = ""; | ||||
| 			dstSubfolderSpec = 10; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			name = "Bundle Framework"; | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| /* End PBXCopyFilesBuildPhase section */ | ||||
|  | ||||
| /* Begin PBXFileReference section */ | ||||
| 		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 = "<group>"; }; | ||||
| 		333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; }; | ||||
| 		335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; }; | ||||
| 		33CC10ED2044A3C60003C045 /* anyway.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "anyway.app"; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||
| 		33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | ||||
| 		33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; }; | ||||
| 		33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; }; | ||||
| 		33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; }; | ||||
| 		33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; }; | ||||
| 		33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; }; | ||||
| 		33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; }; | ||||
| 		33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; }; | ||||
| 		33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; }; | ||||
| 		33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; }; | ||||
| 		33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; }; | ||||
| 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; | ||||
| 		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; | ||||
| /* End PBXFileReference section */ | ||||
|  | ||||
| /* Begin PBXFrameworksBuildPhase section */ | ||||
| 		331C80D2294CF70F00263BE5 /* Frameworks */ = { | ||||
| 			isa = PBXFrameworksBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| 		33CC10EA2044A3C60003C045 /* Frameworks */ = { | ||||
| 			isa = PBXFrameworksBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| /* End PBXFrameworksBuildPhase section */ | ||||
|  | ||||
| /* Begin PBXGroup section */ | ||||
| 		331C80D6294CF71000263BE5 /* RunnerTests */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				331C80D7294CF71000263BE5 /* RunnerTests.swift */, | ||||
| 			); | ||||
| 			path = RunnerTests; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		33BA886A226E78AF003329D5 /* Configs */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				33E5194F232828860026EE4D /* AppInfo.xcconfig */, | ||||
| 				9740EEB21CF90195004384FC /* Debug.xcconfig */, | ||||
| 				7AFA3C8E1D35360C0083082E /* Release.xcconfig */, | ||||
| 				333000ED22D3DE5D00554162 /* Warnings.xcconfig */, | ||||
| 			); | ||||
| 			path = Configs; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		33CC10E42044A3C60003C045 = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				33FAB671232836740065AC1E /* Runner */, | ||||
| 				33CEB47122A05771004F2AC0 /* Flutter */, | ||||
| 				331C80D6294CF71000263BE5 /* RunnerTests */, | ||||
| 				33CC10EE2044A3C60003C045 /* Products */, | ||||
| 				D73912EC22F37F3D000D13A0 /* Frameworks */, | ||||
| 			); | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		33CC10EE2044A3C60003C045 /* Products */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				33CC10ED2044A3C60003C045 /* anyway.app */, | ||||
| 				331C80D5294CF71000263BE5 /* RunnerTests.xctest */, | ||||
| 			); | ||||
| 			name = Products; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		33CC11242044D66E0003C045 /* Resources */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				33CC10F22044A3C60003C045 /* Assets.xcassets */, | ||||
| 				33CC10F42044A3C60003C045 /* MainMenu.xib */, | ||||
| 				33CC10F72044A3C60003C045 /* Info.plist */, | ||||
| 			); | ||||
| 			name = Resources; | ||||
| 			path = ..; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		33CEB47122A05771004F2AC0 /* Flutter */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, | ||||
| 				33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, | ||||
| 				33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, | ||||
| 				33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, | ||||
| 			); | ||||
| 			path = Flutter; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		33FAB671232836740065AC1E /* Runner */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				33CC10F02044A3C60003C045 /* AppDelegate.swift */, | ||||
| 				33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, | ||||
| 				33E51913231747F40026EE4D /* DebugProfile.entitlements */, | ||||
| 				33E51914231749380026EE4D /* Release.entitlements */, | ||||
| 				33CC11242044D66E0003C045 /* Resources */, | ||||
| 				33BA886A226E78AF003329D5 /* Configs */, | ||||
| 			); | ||||
| 			path = Runner; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		D73912EC22F37F3D000D13A0 /* Frameworks */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 			); | ||||
| 			name = Frameworks; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| /* End PBXGroup section */ | ||||
|  | ||||
| /* Begin PBXNativeTarget section */ | ||||
| 		331C80D4294CF70F00263BE5 /* RunnerTests */ = { | ||||
| 			isa = PBXNativeTarget; | ||||
| 			buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; | ||||
| 			buildPhases = ( | ||||
| 				331C80D1294CF70F00263BE5 /* Sources */, | ||||
| 				331C80D2294CF70F00263BE5 /* Frameworks */, | ||||
| 				331C80D3294CF70F00263BE5 /* Resources */, | ||||
| 			); | ||||
| 			buildRules = ( | ||||
| 			); | ||||
| 			dependencies = ( | ||||
| 				331C80DA294CF71000263BE5 /* PBXTargetDependency */, | ||||
| 			); | ||||
| 			name = RunnerTests; | ||||
| 			productName = RunnerTests; | ||||
| 			productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; | ||||
| 			productType = "com.apple.product-type.bundle.unit-test"; | ||||
| 		}; | ||||
| 		33CC10EC2044A3C60003C045 /* Runner */ = { | ||||
| 			isa = PBXNativeTarget; | ||||
| 			buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; | ||||
| 			buildPhases = ( | ||||
| 				33CC10E92044A3C60003C045 /* Sources */, | ||||
| 				33CC10EA2044A3C60003C045 /* Frameworks */, | ||||
| 				33CC10EB2044A3C60003C045 /* Resources */, | ||||
| 				33CC110E2044A8840003C045 /* Bundle Framework */, | ||||
| 				3399D490228B24CF009A79C7 /* ShellScript */, | ||||
| 			); | ||||
| 			buildRules = ( | ||||
| 			); | ||||
| 			dependencies = ( | ||||
| 				33CC11202044C79F0003C045 /* PBXTargetDependency */, | ||||
| 			); | ||||
| 			name = Runner; | ||||
| 			productName = Runner; | ||||
| 			productReference = 33CC10ED2044A3C60003C045 /* anyway.app */; | ||||
| 			productType = "com.apple.product-type.application"; | ||||
| 		}; | ||||
| /* End PBXNativeTarget section */ | ||||
|  | ||||
| /* Begin PBXProject section */ | ||||
| 		33CC10E52044A3C60003C045 /* Project object */ = { | ||||
| 			isa = PBXProject; | ||||
| 			attributes = { | ||||
| 				BuildIndependentTargetsInParallel = YES; | ||||
| 				LastSwiftUpdateCheck = 0920; | ||||
| 				LastUpgradeCheck = 1510; | ||||
| 				ORGANIZATIONNAME = ""; | ||||
| 				TargetAttributes = { | ||||
| 					331C80D4294CF70F00263BE5 = { | ||||
| 						CreatedOnToolsVersion = 14.0; | ||||
| 						TestTargetID = 33CC10EC2044A3C60003C045; | ||||
| 					}; | ||||
| 					33CC10EC2044A3C60003C045 = { | ||||
| 						CreatedOnToolsVersion = 9.2; | ||||
| 						LastSwiftMigration = 1100; | ||||
| 						ProvisioningStyle = Automatic; | ||||
| 						SystemCapabilities = { | ||||
| 							com.apple.Sandbox = { | ||||
| 								enabled = 1; | ||||
| 							}; | ||||
| 						}; | ||||
| 					}; | ||||
| 					33CC111A2044C6BA0003C045 = { | ||||
| 						CreatedOnToolsVersion = 9.2; | ||||
| 						ProvisioningStyle = Manual; | ||||
| 					}; | ||||
| 				}; | ||||
| 			}; | ||||
| 			buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; | ||||
| 			compatibilityVersion = "Xcode 9.3"; | ||||
| 			developmentRegion = en; | ||||
| 			hasScannedForEncodings = 0; | ||||
| 			knownRegions = ( | ||||
| 				en, | ||||
| 				Base, | ||||
| 			); | ||||
| 			mainGroup = 33CC10E42044A3C60003C045; | ||||
| 			productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; | ||||
| 			projectDirPath = ""; | ||||
| 			projectRoot = ""; | ||||
| 			targets = ( | ||||
| 				33CC10EC2044A3C60003C045 /* Runner */, | ||||
| 				331C80D4294CF70F00263BE5 /* RunnerTests */, | ||||
| 				33CC111A2044C6BA0003C045 /* Flutter Assemble */, | ||||
| 			); | ||||
| 		}; | ||||
| /* End PBXProject section */ | ||||
|  | ||||
| /* Begin PBXResourcesBuildPhase section */ | ||||
| 		331C80D3294CF70F00263BE5 /* Resources */ = { | ||||
| 			isa = PBXResourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| 		33CC10EB2044A3C60003C045 /* Resources */ = { | ||||
| 			isa = PBXResourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, | ||||
| 				33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| /* End PBXResourcesBuildPhase section */ | ||||
|  | ||||
| /* Begin PBXShellScriptBuildPhase section */ | ||||
| 		3399D490228B24CF009A79C7 /* ShellScript */ = { | ||||
| 			isa = PBXShellScriptBuildPhase; | ||||
| 			alwaysOutOfDate = 1; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			inputFileListPaths = ( | ||||
| 			); | ||||
| 			inputPaths = ( | ||||
| 			); | ||||
| 			outputFileListPaths = ( | ||||
| 			); | ||||
| 			outputPaths = ( | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 			shellPath = /bin/sh; | ||||
| 			shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; | ||||
| 		}; | ||||
| 		33CC111E2044C6BF0003C045 /* ShellScript */ = { | ||||
| 			isa = PBXShellScriptBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			inputFileListPaths = ( | ||||
| 				Flutter/ephemeral/FlutterInputs.xcfilelist, | ||||
| 			); | ||||
| 			inputPaths = ( | ||||
| 				Flutter/ephemeral/tripwire, | ||||
| 			); | ||||
| 			outputFileListPaths = ( | ||||
| 				Flutter/ephemeral/FlutterOutputs.xcfilelist, | ||||
| 			); | ||||
| 			outputPaths = ( | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 			shellPath = /bin/sh; | ||||
| 			shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; | ||||
| 		}; | ||||
| /* End PBXShellScriptBuildPhase section */ | ||||
|  | ||||
| /* Begin PBXSourcesBuildPhase section */ | ||||
| 		331C80D1294CF70F00263BE5 /* Sources */ = { | ||||
| 			isa = PBXSourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| 		33CC10E92044A3C60003C045 /* Sources */ = { | ||||
| 			isa = PBXSourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, | ||||
| 				33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, | ||||
| 				335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| /* End PBXSourcesBuildPhase section */ | ||||
|  | ||||
| /* Begin PBXTargetDependency section */ | ||||
| 		331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { | ||||
| 			isa = PBXTargetDependency; | ||||
| 			target = 33CC10EC2044A3C60003C045 /* Runner */; | ||||
| 			targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; | ||||
| 		}; | ||||
| 		33CC11202044C79F0003C045 /* PBXTargetDependency */ = { | ||||
| 			isa = PBXTargetDependency; | ||||
| 			target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; | ||||
| 			targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; | ||||
| 		}; | ||||
| /* End PBXTargetDependency section */ | ||||
|  | ||||
| /* Begin PBXVariantGroup section */ | ||||
| 		33CC10F42044A3C60003C045 /* MainMenu.xib */ = { | ||||
| 			isa = PBXVariantGroup; | ||||
| 			children = ( | ||||
| 				33CC10F52044A3C60003C045 /* Base */, | ||||
| 			); | ||||
| 			name = MainMenu.xib; | ||||
| 			path = Runner; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| /* End PBXVariantGroup section */ | ||||
|  | ||||
| /* Begin XCBuildConfiguration section */ | ||||
| 		331C80DB294CF71000263BE5 /* Debug */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			buildSettings = { | ||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||
| 				CURRENT_PROJECT_VERSION = 1; | ||||
| 				GENERATE_INFOPLIST_FILE = YES; | ||||
| 				MARKETING_VERSION = 1.0; | ||||
| 				PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests; | ||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| 				SWIFT_VERSION = 5.0; | ||||
| 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anyway.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anyway"; | ||||
| 			}; | ||||
| 			name = Debug; | ||||
| 		}; | ||||
| 		331C80DC294CF71000263BE5 /* Release */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			buildSettings = { | ||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||
| 				CURRENT_PROJECT_VERSION = 1; | ||||
| 				GENERATE_INFOPLIST_FILE = YES; | ||||
| 				MARKETING_VERSION = 1.0; | ||||
| 				PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests; | ||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| 				SWIFT_VERSION = 5.0; | ||||
| 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anyway.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anyway"; | ||||
| 			}; | ||||
| 			name = Release; | ||||
| 		}; | ||||
| 		331C80DD294CF71000263BE5 /* Profile */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			buildSettings = { | ||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||
| 				CURRENT_PROJECT_VERSION = 1; | ||||
| 				GENERATE_INFOPLIST_FILE = YES; | ||||
| 				MARKETING_VERSION = 1.0; | ||||
| 				PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests; | ||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| 				SWIFT_VERSION = 5.0; | ||||
| 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anyway.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anyway"; | ||||
| 			}; | ||||
| 			name = Profile; | ||||
| 		}; | ||||
| 		338D0CE9231458BD00FA5F75 /* Profile */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | ||||
| 			buildSettings = { | ||||
| 				ALWAYS_SEARCH_USER_PATHS = NO; | ||||
| 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||
| 				CLANG_ANALYZER_NONNULL = YES; | ||||
| 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||
| 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | ||||
| 				CLANG_CXX_LIBRARY = "libc++"; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CLANG_ENABLE_OBJC_ARC = YES; | ||||
| 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||||
| 				CLANG_WARN_BOOL_CONVERSION = YES; | ||||
| 				CLANG_WARN_CONSTANT_CONVERSION = YES; | ||||
| 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||||
| 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||||
| 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||
| 				CLANG_WARN_EMPTY_BODY = YES; | ||||
| 				CLANG_WARN_ENUM_CONVERSION = YES; | ||||
| 				CLANG_WARN_INFINITE_RECURSION = YES; | ||||
| 				CLANG_WARN_INT_CONVERSION = YES; | ||||
| 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||||
| 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||||
| 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||||
| 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||||
| 				CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||||
| 				CODE_SIGN_IDENTITY = "-"; | ||||
| 				COPY_PHASE_STRIP = NO; | ||||
| 				DEAD_CODE_STRIPPING = YES; | ||||
| 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||||
| 				ENABLE_NS_ASSERTIONS = NO; | ||||
| 				ENABLE_STRICT_OBJC_MSGSEND = YES; | ||||
| 				ENABLE_USER_SCRIPT_SANDBOXING = NO; | ||||
| 				GCC_C_LANGUAGE_STANDARD = gnu11; | ||||
| 				GCC_NO_COMMON_BLOCKS = YES; | ||||
| 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||||
| 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||
| 				GCC_WARN_UNUSED_FUNCTION = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.14; | ||||
| 				MTL_ENABLE_DEBUG_INFO = NO; | ||||
| 				SDKROOT = macosx; | ||||
| 				SWIFT_COMPILATION_MODE = wholemodule; | ||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-O"; | ||||
| 			}; | ||||
| 			name = Profile; | ||||
| 		}; | ||||
| 		338D0CEA231458BD00FA5F75 /* Profile */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; | ||||
| 			buildSettings = { | ||||
| 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; | ||||
| 				CODE_SIGN_STYLE = Automatic; | ||||
| 				COMBINE_HIDPI_IMAGES = YES; | ||||
| 				INFOPLIST_FILE = Runner/Info.plist; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"@executable_path/../Frameworks", | ||||
| 				); | ||||
| 				PROVISIONING_PROFILE_SPECIFIER = ""; | ||||
| 				SWIFT_VERSION = 5.0; | ||||
| 			}; | ||||
| 			name = Profile; | ||||
| 		}; | ||||
| 		338D0CEB231458BD00FA5F75 /* Profile */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			buildSettings = { | ||||
| 				CODE_SIGN_STYLE = Manual; | ||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| 			}; | ||||
| 			name = Profile; | ||||
| 		}; | ||||
| 		33CC10F92044A3C60003C045 /* Debug */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; | ||||
| 			buildSettings = { | ||||
| 				ALWAYS_SEARCH_USER_PATHS = NO; | ||||
| 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||
| 				CLANG_ANALYZER_NONNULL = YES; | ||||
| 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||
| 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | ||||
| 				CLANG_CXX_LIBRARY = "libc++"; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CLANG_ENABLE_OBJC_ARC = YES; | ||||
| 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||||
| 				CLANG_WARN_BOOL_CONVERSION = YES; | ||||
| 				CLANG_WARN_CONSTANT_CONVERSION = YES; | ||||
| 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||||
| 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||||
| 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||
| 				CLANG_WARN_EMPTY_BODY = YES; | ||||
| 				CLANG_WARN_ENUM_CONVERSION = YES; | ||||
| 				CLANG_WARN_INFINITE_RECURSION = YES; | ||||
| 				CLANG_WARN_INT_CONVERSION = YES; | ||||
| 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||||
| 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||||
| 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||||
| 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||||
| 				CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||||
| 				CODE_SIGN_IDENTITY = "-"; | ||||
| 				COPY_PHASE_STRIP = NO; | ||||
| 				DEAD_CODE_STRIPPING = YES; | ||||
| 				DEBUG_INFORMATION_FORMAT = dwarf; | ||||
| 				ENABLE_STRICT_OBJC_MSGSEND = YES; | ||||
| 				ENABLE_TESTABILITY = YES; | ||||
| 				ENABLE_USER_SCRIPT_SANDBOXING = NO; | ||||
| 				GCC_C_LANGUAGE_STANDARD = gnu11; | ||||
| 				GCC_DYNAMIC_NO_PIC = NO; | ||||
| 				GCC_NO_COMMON_BLOCKS = YES; | ||||
| 				GCC_OPTIMIZATION_LEVEL = 0; | ||||
| 				GCC_PREPROCESSOR_DEFINITIONS = ( | ||||
| 					"DEBUG=1", | ||||
| 					"$(inherited)", | ||||
| 				); | ||||
| 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||||
| 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||
| 				GCC_WARN_UNUSED_FUNCTION = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.14; | ||||
| 				MTL_ENABLE_DEBUG_INFO = YES; | ||||
| 				ONLY_ACTIVE_ARCH = YES; | ||||
| 				SDKROOT = macosx; | ||||
| 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | ||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||
| 			}; | ||||
| 			name = Debug; | ||||
| 		}; | ||||
| 		33CC10FA2044A3C60003C045 /* Release */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | ||||
| 			buildSettings = { | ||||
| 				ALWAYS_SEARCH_USER_PATHS = NO; | ||||
| 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||||
| 				CLANG_ANALYZER_NONNULL = YES; | ||||
| 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||||
| 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | ||||
| 				CLANG_CXX_LIBRARY = "libc++"; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CLANG_ENABLE_OBJC_ARC = YES; | ||||
| 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||||
| 				CLANG_WARN_BOOL_CONVERSION = YES; | ||||
| 				CLANG_WARN_CONSTANT_CONVERSION = YES; | ||||
| 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||||
| 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||||
| 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||||
| 				CLANG_WARN_EMPTY_BODY = YES; | ||||
| 				CLANG_WARN_ENUM_CONVERSION = YES; | ||||
| 				CLANG_WARN_INFINITE_RECURSION = YES; | ||||
| 				CLANG_WARN_INT_CONVERSION = YES; | ||||
| 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||||
| 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||||
| 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||||
| 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||||
| 				CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||||
| 				CODE_SIGN_IDENTITY = "-"; | ||||
| 				COPY_PHASE_STRIP = NO; | ||||
| 				DEAD_CODE_STRIPPING = YES; | ||||
| 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||||
| 				ENABLE_NS_ASSERTIONS = NO; | ||||
| 				ENABLE_STRICT_OBJC_MSGSEND = YES; | ||||
| 				ENABLE_USER_SCRIPT_SANDBOXING = NO; | ||||
| 				GCC_C_LANGUAGE_STANDARD = gnu11; | ||||
| 				GCC_NO_COMMON_BLOCKS = YES; | ||||
| 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||||
| 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||
| 				GCC_WARN_UNUSED_FUNCTION = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.14; | ||||
| 				MTL_ENABLE_DEBUG_INFO = NO; | ||||
| 				SDKROOT = macosx; | ||||
| 				SWIFT_COMPILATION_MODE = wholemodule; | ||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-O"; | ||||
| 			}; | ||||
| 			name = Release; | ||||
| 		}; | ||||
| 		33CC10FC2044A3C60003C045 /* Debug */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; | ||||
| 			buildSettings = { | ||||
| 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; | ||||
| 				CODE_SIGN_STYLE = Automatic; | ||||
| 				COMBINE_HIDPI_IMAGES = YES; | ||||
| 				INFOPLIST_FILE = Runner/Info.plist; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"@executable_path/../Frameworks", | ||||
| 				); | ||||
| 				PROVISIONING_PROFILE_SPECIFIER = ""; | ||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||
| 				SWIFT_VERSION = 5.0; | ||||
| 			}; | ||||
| 			name = Debug; | ||||
| 		}; | ||||
| 		33CC10FD2044A3C60003C045 /* Release */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; | ||||
| 			buildSettings = { | ||||
| 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; | ||||
| 				CODE_SIGN_STYLE = Automatic; | ||||
| 				COMBINE_HIDPI_IMAGES = YES; | ||||
| 				INFOPLIST_FILE = Runner/Info.plist; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"@executable_path/../Frameworks", | ||||
| 				); | ||||
| 				PROVISIONING_PROFILE_SPECIFIER = ""; | ||||
| 				SWIFT_VERSION = 5.0; | ||||
| 			}; | ||||
| 			name = Release; | ||||
| 		}; | ||||
| 		33CC111C2044C6BA0003C045 /* Debug */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			buildSettings = { | ||||
| 				CODE_SIGN_STYLE = Manual; | ||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| 			}; | ||||
| 			name = Debug; | ||||
| 		}; | ||||
| 		33CC111D2044C6BA0003C045 /* Release */ = { | ||||
| 			isa = XCBuildConfiguration; | ||||
| 			buildSettings = { | ||||
| 				CODE_SIGN_STYLE = Automatic; | ||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| 			}; | ||||
| 			name = Release; | ||||
| 		}; | ||||
| /* End XCBuildConfiguration section */ | ||||
|  | ||||
| /* Begin XCConfigurationList section */ | ||||
| 		331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { | ||||
| 			isa = XCConfigurationList; | ||||
| 			buildConfigurations = ( | ||||
| 				331C80DB294CF71000263BE5 /* Debug */, | ||||
| 				331C80DC294CF71000263BE5 /* Release */, | ||||
| 				331C80DD294CF71000263BE5 /* Profile */, | ||||
| 			); | ||||
| 			defaultConfigurationIsVisible = 0; | ||||
| 			defaultConfigurationName = Release; | ||||
| 		}; | ||||
| 		33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { | ||||
| 			isa = XCConfigurationList; | ||||
| 			buildConfigurations = ( | ||||
| 				33CC10F92044A3C60003C045 /* Debug */, | ||||
| 				33CC10FA2044A3C60003C045 /* Release */, | ||||
| 				338D0CE9231458BD00FA5F75 /* Profile */, | ||||
| 			); | ||||
| 			defaultConfigurationIsVisible = 0; | ||||
| 			defaultConfigurationName = Release; | ||||
| 		}; | ||||
| 		33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { | ||||
| 			isa = XCConfigurationList; | ||||
| 			buildConfigurations = ( | ||||
| 				33CC10FC2044A3C60003C045 /* Debug */, | ||||
| 				33CC10FD2044A3C60003C045 /* Release */, | ||||
| 				338D0CEA231458BD00FA5F75 /* Profile */, | ||||
| 			); | ||||
| 			defaultConfigurationIsVisible = 0; | ||||
| 			defaultConfigurationName = Release; | ||||
| 		}; | ||||
| 		33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { | ||||
| 			isa = XCConfigurationList; | ||||
| 			buildConfigurations = ( | ||||
| 				33CC111C2044C6BA0003C045 /* Debug */, | ||||
| 				33CC111D2044C6BA0003C045 /* Release */, | ||||
| 				338D0CEB231458BD00FA5F75 /* Profile */, | ||||
| 			); | ||||
| 			defaultConfigurationIsVisible = 0; | ||||
| 			defaultConfigurationName = Release; | ||||
| 		}; | ||||
| /* End XCConfigurationList section */ | ||||
| 	}; | ||||
| 	rootObject = 33CC10E52044A3C60003C045 /* Project object */; | ||||
| } | ||||
| @@ -1,8 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||
| <plist version="1.0"> | ||||
| <dict> | ||||
| 	<key>IDEDidComputeMac32BitWarning</key> | ||||
| 	<true/> | ||||
| </dict> | ||||
| </plist> | ||||
| @@ -1,98 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <Scheme | ||||
|    LastUpgradeVersion = "1510" | ||||
|    version = "1.3"> | ||||
|    <BuildAction | ||||
|       parallelizeBuildables = "YES" | ||||
|       buildImplicitDependencies = "YES"> | ||||
|       <BuildActionEntries> | ||||
|          <BuildActionEntry | ||||
|             buildForTesting = "YES" | ||||
|             buildForRunning = "YES" | ||||
|             buildForProfiling = "YES" | ||||
|             buildForArchiving = "YES" | ||||
|             buildForAnalyzing = "YES"> | ||||
|             <BuildableReference | ||||
|                BuildableIdentifier = "primary" | ||||
|                BlueprintIdentifier = "33CC10EC2044A3C60003C045" | ||||
|                BuildableName = "anyway.app" | ||||
|                BlueprintName = "Runner" | ||||
|                ReferencedContainer = "container:Runner.xcodeproj"> | ||||
|             </BuildableReference> | ||||
|          </BuildActionEntry> | ||||
|       </BuildActionEntries> | ||||
|    </BuildAction> | ||||
|    <TestAction | ||||
|       buildConfiguration = "Debug" | ||||
|       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||||
|       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||||
|       shouldUseLaunchSchemeArgsEnv = "YES"> | ||||
|       <MacroExpansion> | ||||
|          <BuildableReference | ||||
|             BuildableIdentifier = "primary" | ||||
|             BlueprintIdentifier = "33CC10EC2044A3C60003C045" | ||||
|             BuildableName = "anyway.app" | ||||
|             BlueprintName = "Runner" | ||||
|             ReferencedContainer = "container:Runner.xcodeproj"> | ||||
|          </BuildableReference> | ||||
|       </MacroExpansion> | ||||
|       <Testables> | ||||
|          <TestableReference | ||||
|             skipped = "NO" | ||||
|             parallelizable = "YES"> | ||||
|             <BuildableReference | ||||
|                BuildableIdentifier = "primary" | ||||
|                BlueprintIdentifier = "331C80D4294CF70F00263BE5" | ||||
|                BuildableName = "RunnerTests.xctest" | ||||
|                BlueprintName = "RunnerTests" | ||||
|                ReferencedContainer = "container:Runner.xcodeproj"> | ||||
|             </BuildableReference> | ||||
|          </TestableReference> | ||||
|       </Testables> | ||||
|    </TestAction> | ||||
|    <LaunchAction | ||||
|       buildConfiguration = "Debug" | ||||
|       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||||
|       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||||
|       launchStyle = "0" | ||||
|       useCustomWorkingDirectory = "NO" | ||||
|       ignoresPersistentStateOnLaunch = "NO" | ||||
|       debugDocumentVersioning = "YES" | ||||
|       debugServiceExtension = "internal" | ||||
|       allowLocationSimulation = "YES"> | ||||
|       <BuildableProductRunnable | ||||
|          runnableDebuggingMode = "0"> | ||||
|          <BuildableReference | ||||
|             BuildableIdentifier = "primary" | ||||
|             BlueprintIdentifier = "33CC10EC2044A3C60003C045" | ||||
|             BuildableName = "anyway.app" | ||||
|             BlueprintName = "Runner" | ||||
|             ReferencedContainer = "container:Runner.xcodeproj"> | ||||
|          </BuildableReference> | ||||
|       </BuildableProductRunnable> | ||||
|    </LaunchAction> | ||||
|    <ProfileAction | ||||
|       buildConfiguration = "Profile" | ||||
|       shouldUseLaunchSchemeArgsEnv = "YES" | ||||
|       savedToolIdentifier = "" | ||||
|       useCustomWorkingDirectory = "NO" | ||||
|       debugDocumentVersioning = "YES"> | ||||
|       <BuildableProductRunnable | ||||
|          runnableDebuggingMode = "0"> | ||||
|          <BuildableReference | ||||
|             BuildableIdentifier = "primary" | ||||
|             BlueprintIdentifier = "33CC10EC2044A3C60003C045" | ||||
|             BuildableName = "anyway.app" | ||||
|             BlueprintName = "Runner" | ||||
|             ReferencedContainer = "container:Runner.xcodeproj"> | ||||
|          </BuildableReference> | ||||
|       </BuildableProductRunnable> | ||||
|    </ProfileAction> | ||||
|    <AnalyzeAction | ||||
|       buildConfiguration = "Debug"> | ||||
|    </AnalyzeAction> | ||||
|    <ArchiveAction | ||||
|       buildConfiguration = "Release" | ||||
|       revealArchiveInOrganizer = "YES"> | ||||
|    </ArchiveAction> | ||||
| </Scheme> | ||||
| @@ -1,7 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <Workspace | ||||
|    version = "1.0"> | ||||
|    <FileRef | ||||
|       location = "group:Runner.xcodeproj"> | ||||
|    </FileRef> | ||||
| </Workspace> | ||||
| @@ -1,8 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||
| <plist version="1.0"> | ||||
| <dict> | ||||
| 	<key>IDEDidComputeMac32BitWarning</key> | ||||
| 	<true/> | ||||
| </dict> | ||||
| </plist> | ||||
| @@ -1,9 +0,0 @@ | ||||
| import Cocoa | ||||
| import FlutterMacOS | ||||
|  | ||||
| @NSApplicationMain | ||||
| class AppDelegate: FlutterAppDelegate { | ||||
|   override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { | ||||
|     return true | ||||
|   } | ||||
| } | ||||
| @@ -1,68 +0,0 @@ | ||||
| { | ||||
|   "images" : [ | ||||
|     { | ||||
|       "size" : "16x16", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_16.png", | ||||
|       "scale" : "1x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "16x16", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_32.png", | ||||
|       "scale" : "2x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "32x32", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_32.png", | ||||
|       "scale" : "1x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "32x32", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_64.png", | ||||
|       "scale" : "2x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "128x128", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_128.png", | ||||
|       "scale" : "1x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "128x128", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_256.png", | ||||
|       "scale" : "2x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "256x256", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_256.png", | ||||
|       "scale" : "1x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "256x256", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_512.png", | ||||
|       "scale" : "2x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "512x512", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_512.png", | ||||
|       "scale" : "1x" | ||||
|     }, | ||||
|     { | ||||
|       "size" : "512x512", | ||||
|       "idiom" : "mac", | ||||
|       "filename" : "app_icon_1024.png", | ||||
|       "scale" : "2x" | ||||
|     } | ||||
|   ], | ||||
|   "info" : { | ||||
|     "version" : 1, | ||||
|     "author" : "xcode" | ||||
|   } | ||||
| } | ||||
| Before Width: | Height: | Size: 101 KiB | 
| Before Width: | Height: | Size: 5.5 KiB | 
| Before Width: | Height: | Size: 520 B | 
| Before Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 1.0 KiB | 
| Before Width: | Height: | Size: 36 KiB | 
| Before Width: | Height: | Size: 2.2 KiB | 
| @@ -1,343 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> | ||||
|     <dependencies> | ||||
|         <deployment identifier="macosx"/> | ||||
|         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/> | ||||
|         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||||
|     </dependencies> | ||||
|     <objects> | ||||
|         <customObject id="-2" userLabel="File's Owner" customClass="NSApplication"> | ||||
|             <connections> | ||||
|                 <outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/> | ||||
|             </connections> | ||||
|         </customObject> | ||||
|         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> | ||||
|         <customObject id="-3" userLabel="Application" customClass="NSObject"/> | ||||
|         <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target"> | ||||
|             <connections> | ||||
|                 <outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/> | ||||
|                 <outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/> | ||||
|             </connections> | ||||
|         </customObject> | ||||
|         <customObject id="YLy-65-1bz" customClass="NSFontManager"/> | ||||
|         <menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6"> | ||||
|             <items> | ||||
|                 <menuItem title="APP_NAME" id="1Xt-HY-uBw"> | ||||
|                     <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                     <menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr"> | ||||
|                         <items> | ||||
|                             <menuItem title="About APP_NAME" id="5kV-Vb-QxS"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/> | ||||
|                             <menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/> | ||||
|                             <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/> | ||||
|                             <menuItem title="Services" id="NMo-om-nkz"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/> | ||||
|                             </menuItem> | ||||
|                             <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/> | ||||
|                             <menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN"> | ||||
|                                 <connections> | ||||
|                                     <action selector="hide:" target="-1" id="PnN-Uc-m68"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Show All" id="Kd2-mp-pUS"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/> | ||||
|                             <menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi"> | ||||
|                                 <connections> | ||||
|                                     <action selector="terminate:" target="-1" id="Te7-pn-YzF"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                         </items> | ||||
|                     </menu> | ||||
|                 </menuItem> | ||||
|                 <menuItem title="Edit" id="5QF-Oa-p0T"> | ||||
|                     <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                     <menu key="submenu" title="Edit" id="W48-6f-4Dl"> | ||||
|                         <items> | ||||
|                             <menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg"> | ||||
|                                 <connections> | ||||
|                                     <action selector="undo:" target="-1" id="M6e-cu-g7V"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam"> | ||||
|                                 <connections> | ||||
|                                     <action selector="redo:" target="-1" id="oIA-Rs-6OD"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/> | ||||
|                             <menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG"> | ||||
|                                 <connections> | ||||
|                                     <action selector="cut:" target="-1" id="YJe-68-I9s"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU"> | ||||
|                                 <connections> | ||||
|                                     <action selector="copy:" target="-1" id="G1f-GL-Joy"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL"> | ||||
|                                 <connections> | ||||
|                                     <action selector="paste:" target="-1" id="UvS-8e-Qdg"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Delete" id="pa3-QI-u2k"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="delete:" target="-1" id="0Mk-Ml-PaM"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m"> | ||||
|                                 <connections> | ||||
|                                     <action selector="selectAll:" target="-1" id="VNm-Mi-diN"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/> | ||||
|                             <menuItem title="Find" id="4EN-yA-p0u"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <menu key="submenu" title="Find" id="1b7-l0-nxx"> | ||||
|                                     <items> | ||||
|                                         <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                     </items> | ||||
|                                 </menu> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Spelling and Grammar" id="Dv1-io-Yv7"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <menu key="submenu" title="Spelling" id="3IN-sU-3Bg"> | ||||
|                                     <items> | ||||
|                                         <menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7"> | ||||
|                                             <connections> | ||||
|                                                 <action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem isSeparatorItem="YES" id="bNw-od-mp5"/> | ||||
|                                         <menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Correct Spelling Automatically" id="78Y-hA-62v"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                     </items> | ||||
|                                 </menu> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Substitutions" id="9ic-FL-obx"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <menu key="submenu" title="Substitutions" id="FeM-D8-WVr"> | ||||
|                                     <items> | ||||
|                                         <menuItem title="Show Substitutions" id="z6F-FW-3nz"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/> | ||||
|                                         <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Smart Quotes" id="hQb-2v-fYv"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Smart Dashes" id="rgM-f4-ycn"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Smart Links" id="cwL-P1-jid"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Data Detectors" id="tRr-pd-1PS"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Text Replacement" id="HFQ-gK-NFA"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                     </items> | ||||
|                                 </menu> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Transformations" id="2oI-Rn-ZJC"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <menu key="submenu" title="Transformations" id="c8a-y6-VQd"> | ||||
|                                     <items> | ||||
|                                         <menuItem title="Make Upper Case" id="vmV-6d-7jI"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Make Lower Case" id="d9M-CD-aMd"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Capitalize" id="UEZ-Bs-lqG"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                     </items> | ||||
|                                 </menu> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Speech" id="xrE-MZ-jX0"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <menu key="submenu" title="Speech" id="3rS-ZA-NoH"> | ||||
|                                     <items> | ||||
|                                         <menuItem title="Start Speaking" id="Ynk-f8-cLZ"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                         <menuItem title="Stop Speaking" id="Oyz-dy-DGm"> | ||||
|                                             <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                             <connections> | ||||
|                                                 <action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/> | ||||
|                                             </connections> | ||||
|                                         </menuItem> | ||||
|                                     </items> | ||||
|                                 </menu> | ||||
|                             </menuItem> | ||||
|                         </items> | ||||
|                     </menu> | ||||
|                 </menuItem> | ||||
|                 <menuItem title="View" id="H8h-7b-M4v"> | ||||
|                     <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                     <menu key="submenu" title="View" id="HyV-fh-RgO"> | ||||
|                         <items> | ||||
|                             <menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                         </items> | ||||
|                     </menu> | ||||
|                 </menuItem> | ||||
|                 <menuItem title="Window" id="aUF-d1-5bR"> | ||||
|                     <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                     <menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo"> | ||||
|                         <items> | ||||
|                             <menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV"> | ||||
|                                 <connections> | ||||
|                                     <action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem title="Zoom" id="R4o-n2-Eq4"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="performZoom:" target="-1" id="DIl-cC-cCs"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                             <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/> | ||||
|                             <menuItem title="Bring All to Front" id="LE2-aR-0XJ"> | ||||
|                                 <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                                 <connections> | ||||
|                                     <action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/> | ||||
|                                 </connections> | ||||
|                             </menuItem> | ||||
|                         </items> | ||||
|                     </menu> | ||||
|                 </menuItem> | ||||
|                 <menuItem title="Help" id="EPT-qC-fAb"> | ||||
|                     <modifierMask key="keyEquivalentModifierMask"/> | ||||
|                     <menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/> | ||||
|                 </menuItem> | ||||
|             </items> | ||||
|             <point key="canvasLocation" x="142" y="-258"/> | ||||
|         </menu> | ||||
|         <window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target"> | ||||
|             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> | ||||
|             <rect key="contentRect" x="335" y="390" width="800" height="600"/> | ||||
|             <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/> | ||||
|             <view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ"> | ||||
|                 <rect key="frame" x="0.0" y="0.0" width="800" height="600"/> | ||||
|                 <autoresizingMask key="autoresizingMask"/> | ||||
|             </view> | ||||
|         </window> | ||||
|     </objects> | ||||
| </document> | ||||
| @@ -1,14 +0,0 @@ | ||||
| // Application-level settings for the Runner target. | ||||
| // | ||||
| // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the | ||||
| // future. If not, the values below would default to using the project name when this becomes a | ||||
| // 'flutter create' template. | ||||
|  | ||||
| // The application's name. By default this is also the title of the Flutter window. | ||||
| PRODUCT_NAME = anyway | ||||
|  | ||||
| // The application's bundle identifier | ||||
| PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation | ||||
|  | ||||
| // The copyright displayed in application information | ||||
| PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. | ||||
| @@ -1,2 +0,0 @@ | ||||
| #include "../../Flutter/Flutter-Debug.xcconfig" | ||||
| #include "Warnings.xcconfig" | ||||
| @@ -1,2 +0,0 @@ | ||||
| #include "../../Flutter/Flutter-Release.xcconfig" | ||||
| #include "Warnings.xcconfig" | ||||
| @@ -1,13 +0,0 @@ | ||||
| WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings | ||||
| GCC_WARN_UNDECLARED_SELECTOR = YES | ||||
| CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES | ||||
| CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE | ||||
| CLANG_WARN__DUPLICATE_METHOD_MATCH = YES | ||||
| CLANG_WARN_PRAGMA_PACK = YES | ||||
| CLANG_WARN_STRICT_PROTOTYPES = YES | ||||
| CLANG_WARN_COMMA = YES | ||||
| GCC_WARN_STRICT_SELECTOR_MATCH = YES | ||||
| CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES | ||||
| CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES | ||||
| GCC_WARN_SHADOW = YES | ||||
| CLANG_WARN_UNREACHABLE_CODE = YES | ||||
| @@ -1,12 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||
| <plist version="1.0"> | ||||
| <dict> | ||||
| 	<key>com.apple.security.app-sandbox</key> | ||||
| 	<true/> | ||||
| 	<key>com.apple.security.cs.allow-jit</key> | ||||
| 	<true/> | ||||
| 	<key>com.apple.security.network.server</key> | ||||
| 	<true/> | ||||
| </dict> | ||||
| </plist> | ||||
| @@ -1,32 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||
| <plist version="1.0"> | ||||
| <dict> | ||||
| 	<key>CFBundleDevelopmentRegion</key> | ||||
| 	<string>$(DEVELOPMENT_LANGUAGE)</string> | ||||
| 	<key>CFBundleExecutable</key> | ||||
| 	<string>$(EXECUTABLE_NAME)</string> | ||||
| 	<key>CFBundleIconFile</key> | ||||
| 	<string></string> | ||||
| 	<key>CFBundleIdentifier</key> | ||||
| 	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||||
| 	<key>CFBundleInfoDictionaryVersion</key> | ||||
| 	<string>6.0</string> | ||||
| 	<key>CFBundleName</key> | ||||
| 	<string>$(PRODUCT_NAME)</string> | ||||
| 	<key>CFBundlePackageType</key> | ||||
| 	<string>APPL</string> | ||||
| 	<key>CFBundleShortVersionString</key> | ||||
| 	<string>$(FLUTTER_BUILD_NAME)</string> | ||||
| 	<key>CFBundleVersion</key> | ||||
| 	<string>$(FLUTTER_BUILD_NUMBER)</string> | ||||
| 	<key>LSMinimumSystemVersion</key> | ||||
| 	<string>$(MACOSX_DEPLOYMENT_TARGET)</string> | ||||
| 	<key>NSHumanReadableCopyright</key> | ||||
| 	<string>$(PRODUCT_COPYRIGHT)</string> | ||||
| 	<key>NSMainNibFile</key> | ||||
| 	<string>MainMenu</string> | ||||
| 	<key>NSPrincipalClass</key> | ||||
| 	<string>NSApplication</string> | ||||
| </dict> | ||||
| </plist> | ||||
| @@ -1,15 +0,0 @@ | ||||
| import Cocoa | ||||
| import FlutterMacOS | ||||
|  | ||||
| class MainFlutterWindow: NSWindow { | ||||
|   override func awakeFromNib() { | ||||
|     let flutterViewController = FlutterViewController() | ||||
|     let windowFrame = self.frame | ||||
|     self.contentViewController = flutterViewController | ||||
|     self.setFrame(windowFrame, display: true) | ||||
|  | ||||
|     RegisterGeneratedPlugins(registry: flutterViewController) | ||||
|  | ||||
|     super.awakeFromNib() | ||||
|   } | ||||
| } | ||||
| @@ -1,8 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||
| <plist version="1.0"> | ||||
| <dict> | ||||
| 	<key>com.apple.security.app-sandbox</key> | ||||
| 	<true/> | ||||
| </dict> | ||||
| </plist> | ||||
| @@ -1,12 +0,0 @@ | ||||
| import FlutterMacOS | ||||
| import Cocoa | ||||
| import XCTest | ||||
|  | ||||
| class RunnerTests: XCTestCase { | ||||
|  | ||||
|   func testExample() { | ||||
|     // If you add code to the Runner application, consider adding tests here. | ||||
|     // See https://developer.apple.com/documentation/xctest for more information about using XCTest. | ||||
|   } | ||||
|  | ||||
| } | ||||
							
								
								
									
										17
									
								
								frontend/windows/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,17 +0,0 @@ | ||||
| flutter/ephemeral/ | ||||
|  | ||||
| # Visual Studio user-specific files. | ||||
| *.suo | ||||
| *.user | ||||
| *.userosscache | ||||
| *.sln.docstates | ||||
|  | ||||
| # Visual Studio build-related files. | ||||
| x64/ | ||||
| x86/ | ||||
|  | ||||
| # Visual Studio cache files | ||||
| # files ending in .cache can be ignored | ||||
| *.[Cc]ache | ||||
| # but keep track of directories ending in .cache | ||||
| !*.[Cc]ache/ | ||||
| @@ -1,108 +0,0 @@ | ||||
| # Project-level configuration. | ||||
| cmake_minimum_required(VERSION 3.14) | ||||
| project(anyway LANGUAGES CXX) | ||||
|  | ||||
| # The name of the executable created for the application. Change this to change | ||||
| # the on-disk name of your application. | ||||
| set(BINARY_NAME "anyway") | ||||
|  | ||||
| # Explicitly opt in to modern CMake behaviors to avoid warnings with recent | ||||
| # versions of CMake. | ||||
| cmake_policy(VERSION 3.14...3.25) | ||||
|  | ||||
| # Define build configuration option. | ||||
| get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) | ||||
| if(IS_MULTICONFIG) | ||||
|   set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" | ||||
|     CACHE STRING "" FORCE) | ||||
| else() | ||||
|   if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) | ||||
|     set(CMAKE_BUILD_TYPE "Debug" CACHE | ||||
|       STRING "Flutter build mode" FORCE) | ||||
|     set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS | ||||
|       "Debug" "Profile" "Release") | ||||
|   endif() | ||||
| endif() | ||||
| # Define settings for the Profile build mode. | ||||
| set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") | ||||
| set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") | ||||
| set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") | ||||
| set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") | ||||
|  | ||||
| # Use Unicode for all projects. | ||||
| add_definitions(-DUNICODE -D_UNICODE) | ||||
|  | ||||
| # Compilation settings that should be applied to most targets. | ||||
| # | ||||
| # Be cautious about adding new options here, as plugins use this function by | ||||
| # default. In most cases, you should add new options to specific targets instead | ||||
| # of modifying this function. | ||||
| function(APPLY_STANDARD_SETTINGS TARGET) | ||||
|   target_compile_features(${TARGET} PUBLIC cxx_std_17) | ||||
|   target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") | ||||
|   target_compile_options(${TARGET} PRIVATE /EHsc) | ||||
|   target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") | ||||
|   target_compile_definitions(${TARGET} PRIVATE "$<$<CONFIG:Debug>:_DEBUG>") | ||||
| endfunction() | ||||
|  | ||||
| # Flutter library and tool build rules. | ||||
| set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") | ||||
| add_subdirectory(${FLUTTER_MANAGED_DIR}) | ||||
|  | ||||
| # Application build; see runner/CMakeLists.txt. | ||||
| add_subdirectory("runner") | ||||
|  | ||||
|  | ||||
| # Generated plugin build rules, which manage building the plugins and adding | ||||
| # them to the application. | ||||
| include(flutter/generated_plugins.cmake) | ||||
|  | ||||
|  | ||||
| # === Installation === | ||||
| # Support files are copied into place next to the executable, so that it can | ||||
| # run in place. This is done instead of making a separate bundle (as on Linux) | ||||
| # so that building and running from within Visual Studio will work. | ||||
| set(BUILD_BUNDLE_DIR "$<TARGET_FILE_DIR:${BINARY_NAME}>") | ||||
| # Make the "install" step default, as it's required to run. | ||||
| set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) | ||||
| if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) | ||||
|   set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) | ||||
| endif() | ||||
|  | ||||
| set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") | ||||
| set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") | ||||
|  | ||||
| install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" | ||||
|   COMPONENT Runtime) | ||||
|  | ||||
| install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" | ||||
|   COMPONENT Runtime) | ||||
|  | ||||
| install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|   COMPONENT Runtime) | ||||
|  | ||||
| if(PLUGIN_BUNDLED_LIBRARIES) | ||||
|   install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" | ||||
|     DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|     COMPONENT Runtime) | ||||
| endif() | ||||
|  | ||||
| # Copy the native assets provided by the build.dart from all packages. | ||||
| set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") | ||||
| install(DIRECTORY "${NATIVE_ASSETS_DIR}" | ||||
|    DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | ||||
|    COMPONENT Runtime) | ||||
|  | ||||
| # Fully re-copy the assets directory on each build to avoid having stale files | ||||
| # from a previous install. | ||||
| set(FLUTTER_ASSET_DIR_NAME "flutter_assets") | ||||
| install(CODE " | ||||
|   file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") | ||||
|   " COMPONENT Runtime) | ||||
| install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" | ||||
|   DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) | ||||
|  | ||||
| # Install the AOT library on non-Debug builds only. | ||||
| install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" | ||||
|   CONFIGURATIONS Profile;Release | ||||
|   COMPONENT Runtime) | ||||
| @@ -1,109 +0,0 @@ | ||||
| # This file controls Flutter-level build steps. It should not be edited. | ||||
| cmake_minimum_required(VERSION 3.14) | ||||
|  | ||||
| set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") | ||||
|  | ||||
| # Configuration provided via flutter tool. | ||||
| include(${EPHEMERAL_DIR}/generated_config.cmake) | ||||
|  | ||||
| # TODO: Move the rest of this into files in ephemeral. See | ||||
| # https://github.com/flutter/flutter/issues/57146. | ||||
| set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") | ||||
|  | ||||
| # Set fallback configurations for older versions of the flutter tool. | ||||
| if (NOT DEFINED FLUTTER_TARGET_PLATFORM) | ||||
|   set(FLUTTER_TARGET_PLATFORM "windows-x64") | ||||
| endif() | ||||
|  | ||||
| # === Flutter Library === | ||||
| set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") | ||||
|  | ||||
| # Published to parent scope for install step. | ||||
| set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) | ||||
| set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) | ||||
| set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) | ||||
| set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) | ||||
|  | ||||
| list(APPEND FLUTTER_LIBRARY_HEADERS | ||||
|   "flutter_export.h" | ||||
|   "flutter_windows.h" | ||||
|   "flutter_messenger.h" | ||||
|   "flutter_plugin_registrar.h" | ||||
|   "flutter_texture_registrar.h" | ||||
| ) | ||||
| list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") | ||||
| add_library(flutter INTERFACE) | ||||
| target_include_directories(flutter INTERFACE | ||||
|   "${EPHEMERAL_DIR}" | ||||
| ) | ||||
| target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") | ||||
| add_dependencies(flutter flutter_assemble) | ||||
|  | ||||
| # === Wrapper === | ||||
| list(APPEND CPP_WRAPPER_SOURCES_CORE | ||||
|   "core_implementations.cc" | ||||
|   "standard_codec.cc" | ||||
| ) | ||||
| list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") | ||||
| list(APPEND CPP_WRAPPER_SOURCES_PLUGIN | ||||
|   "plugin_registrar.cc" | ||||
| ) | ||||
| list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") | ||||
| list(APPEND CPP_WRAPPER_SOURCES_APP | ||||
|   "flutter_engine.cc" | ||||
|   "flutter_view_controller.cc" | ||||
| ) | ||||
| list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") | ||||
|  | ||||
| # Wrapper sources needed for a plugin. | ||||
| add_library(flutter_wrapper_plugin STATIC | ||||
|   ${CPP_WRAPPER_SOURCES_CORE} | ||||
|   ${CPP_WRAPPER_SOURCES_PLUGIN} | ||||
| ) | ||||
| apply_standard_settings(flutter_wrapper_plugin) | ||||
| set_target_properties(flutter_wrapper_plugin PROPERTIES | ||||
|   POSITION_INDEPENDENT_CODE ON) | ||||
| set_target_properties(flutter_wrapper_plugin PROPERTIES | ||||
|   CXX_VISIBILITY_PRESET hidden) | ||||
| target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) | ||||
| target_include_directories(flutter_wrapper_plugin PUBLIC | ||||
|   "${WRAPPER_ROOT}/include" | ||||
| ) | ||||
| add_dependencies(flutter_wrapper_plugin flutter_assemble) | ||||
|  | ||||
| # Wrapper sources needed for the runner. | ||||
| add_library(flutter_wrapper_app STATIC | ||||
|   ${CPP_WRAPPER_SOURCES_CORE} | ||||
|   ${CPP_WRAPPER_SOURCES_APP} | ||||
| ) | ||||
| apply_standard_settings(flutter_wrapper_app) | ||||
| target_link_libraries(flutter_wrapper_app PUBLIC flutter) | ||||
| target_include_directories(flutter_wrapper_app PUBLIC | ||||
|   "${WRAPPER_ROOT}/include" | ||||
| ) | ||||
| add_dependencies(flutter_wrapper_app flutter_assemble) | ||||
|  | ||||
| # === Flutter tool backend === | ||||
| # _phony_ is a non-existent file to force this command to run every time, | ||||
| # since currently there's no way to get a full input/output list from the | ||||
| # flutter tool. | ||||
| set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") | ||||
| set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) | ||||
| add_custom_command( | ||||
|   OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} | ||||
|     ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} | ||||
|     ${CPP_WRAPPER_SOURCES_APP} | ||||
|     ${PHONY_OUTPUT} | ||||
|   COMMAND ${CMAKE_COMMAND} -E env | ||||
|     ${FLUTTER_TOOL_ENVIRONMENT} | ||||
|     "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" | ||||
|       ${FLUTTER_TARGET_PLATFORM} $<CONFIG> | ||||
|   VERBATIM | ||||
| ) | ||||
| add_custom_target(flutter_assemble DEPENDS | ||||
|   "${FLUTTER_LIBRARY}" | ||||
|   ${FLUTTER_LIBRARY_HEADERS} | ||||
|   ${CPP_WRAPPER_SOURCES_CORE} | ||||
|   ${CPP_WRAPPER_SOURCES_PLUGIN} | ||||
|   ${CPP_WRAPPER_SOURCES_APP} | ||||
| ) | ||||
| @@ -1,11 +0,0 @@ | ||||
| // | ||||
| //  Generated file. Do not edit. | ||||
| // | ||||
|  | ||||
| // clang-format off | ||||
|  | ||||
| #include "generated_plugin_registrant.h" | ||||
|  | ||||
|  | ||||
| void RegisterPlugins(flutter::PluginRegistry* registry) { | ||||
| } | ||||
| @@ -1,15 +0,0 @@ | ||||
| // | ||||
| //  Generated file. Do not edit. | ||||
| // | ||||
|  | ||||
| // clang-format off | ||||
|  | ||||
| #ifndef GENERATED_PLUGIN_REGISTRANT_ | ||||
| #define GENERATED_PLUGIN_REGISTRANT_ | ||||
|  | ||||
| #include <flutter/plugin_registry.h> | ||||
|  | ||||
| // Registers Flutter plugins. | ||||
| void RegisterPlugins(flutter::PluginRegistry* registry); | ||||
|  | ||||
| #endif  // GENERATED_PLUGIN_REGISTRANT_ | ||||
| @@ -1,23 +0,0 @@ | ||||
| # | ||||
| # Generated file, do not edit. | ||||
| # | ||||
|  | ||||
| list(APPEND FLUTTER_PLUGIN_LIST | ||||
| ) | ||||
|  | ||||
| list(APPEND FLUTTER_FFI_PLUGIN_LIST | ||||
| ) | ||||
|  | ||||
| set(PLUGIN_BUNDLED_LIBRARIES) | ||||
|  | ||||
| foreach(plugin ${FLUTTER_PLUGIN_LIST}) | ||||
|   add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) | ||||
|   target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) | ||||
|   list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>) | ||||
|   list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) | ||||
| endforeach(plugin) | ||||
|  | ||||
| foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) | ||||
|   add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) | ||||
|   list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) | ||||
| endforeach(ffi_plugin) | ||||
| @@ -1,40 +0,0 @@ | ||||
| cmake_minimum_required(VERSION 3.14) | ||||
| project(runner LANGUAGES CXX) | ||||
|  | ||||
| # Define the application target. To change its name, change BINARY_NAME in the | ||||
| # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer | ||||
| # work. | ||||
| # | ||||
| # Any new source files that you add to the application should be added here. | ||||
| add_executable(${BINARY_NAME} WIN32 | ||||
|   "flutter_window.cpp" | ||||
|   "main.cpp" | ||||
|   "utils.cpp" | ||||
|   "win32_window.cpp" | ||||
|   "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" | ||||
|   "Runner.rc" | ||||
|   "runner.exe.manifest" | ||||
| ) | ||||
|  | ||||
| # Apply the standard set of build settings. This can be removed for applications | ||||
| # that need different build settings. | ||||
| apply_standard_settings(${BINARY_NAME}) | ||||
|  | ||||
| # Add preprocessor definitions for the build version. | ||||
| target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") | ||||
| target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") | ||||
| target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") | ||||
| target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") | ||||
| target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") | ||||
|  | ||||
| # Disable Windows macros that collide with C++ standard library functions. | ||||
| target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") | ||||
|  | ||||
| # Add dependency libraries and include directories. Add any application-specific | ||||
| # dependencies here. | ||||
| target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) | ||||
| target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") | ||||
| target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") | ||||
|  | ||||
| # Run the Flutter tool portions of the build. This must not be removed. | ||||
| add_dependencies(${BINARY_NAME} flutter_assemble) | ||||
| @@ -1,121 +0,0 @@ | ||||
| // Microsoft Visual C++ generated resource script. | ||||
| // | ||||
| #pragma code_page(65001) | ||||
| #include "resource.h" | ||||
|  | ||||
| #define APSTUDIO_READONLY_SYMBOLS | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Generated from the TEXTINCLUDE 2 resource. | ||||
| // | ||||
| #include "winres.h" | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| #undef APSTUDIO_READONLY_SYMBOLS | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // English (United States) resources | ||||
|  | ||||
| #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) | ||||
| LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US | ||||
|  | ||||
| #ifdef APSTUDIO_INVOKED | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // TEXTINCLUDE | ||||
| // | ||||
|  | ||||
| 1 TEXTINCLUDE | ||||
| BEGIN | ||||
|     "resource.h\0" | ||||
| END | ||||
|  | ||||
| 2 TEXTINCLUDE | ||||
| BEGIN | ||||
|     "#include ""winres.h""\r\n" | ||||
|     "\0" | ||||
| END | ||||
|  | ||||
| 3 TEXTINCLUDE | ||||
| BEGIN | ||||
|     "\r\n" | ||||
|     "\0" | ||||
| END | ||||
|  | ||||
| #endif    // APSTUDIO_INVOKED | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Icon | ||||
| // | ||||
|  | ||||
| // Icon with lowest ID value placed first to ensure application icon | ||||
| // remains consistent on all systems. | ||||
| IDI_APP_ICON            ICON                    "resources\\app_icon.ico" | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Version | ||||
| // | ||||
|  | ||||
| #if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) | ||||
| #define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD | ||||
| #else | ||||
| #define VERSION_AS_NUMBER 1,0,0,0 | ||||
| #endif | ||||
|  | ||||
| #if defined(FLUTTER_VERSION) | ||||
| #define VERSION_AS_STRING FLUTTER_VERSION | ||||
| #else | ||||
| #define VERSION_AS_STRING "1.0.0" | ||||
| #endif | ||||
|  | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION VERSION_AS_NUMBER | ||||
|  PRODUCTVERSION VERSION_AS_NUMBER | ||||
|  FILEFLAGSMASK VS_FFI_FILEFLAGSMASK | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS VS_FF_DEBUG | ||||
| #else | ||||
|  FILEFLAGS 0x0L | ||||
| #endif | ||||
|  FILEOS VOS__WINDOWS32 | ||||
|  FILETYPE VFT_APP | ||||
|  FILESUBTYPE 0x0L | ||||
| BEGIN | ||||
|     BLOCK "StringFileInfo" | ||||
|     BEGIN | ||||
|         BLOCK "040904e4" | ||||
|         BEGIN | ||||
|             VALUE "CompanyName", "com.example" "\0" | ||||
|             VALUE "FileDescription", "anyway" "\0" | ||||
|             VALUE "FileVersion", VERSION_AS_STRING "\0" | ||||
|             VALUE "InternalName", "anyway" "\0" | ||||
|             VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" | ||||
|             VALUE "OriginalFilename", "anyway.exe" "\0" | ||||
|             VALUE "ProductName", "anyway" "\0" | ||||
|             VALUE "ProductVersion", VERSION_AS_STRING "\0" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|     BEGIN | ||||
|         VALUE "Translation", 0x409, 1252 | ||||
|     END | ||||
| END | ||||
|  | ||||
| #endif    // English (United States) resources | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
|  | ||||
|  | ||||
|  | ||||
| #ifndef APSTUDIO_INVOKED | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Generated from the TEXTINCLUDE 3 resource. | ||||
| // | ||||
|  | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| #endif    // not APSTUDIO_INVOKED | ||||
| @@ -1,71 +0,0 @@ | ||||
| #include "flutter_window.h" | ||||
|  | ||||
| #include <optional> | ||||
|  | ||||
| #include "flutter/generated_plugin_registrant.h" | ||||
|  | ||||
| FlutterWindow::FlutterWindow(const flutter::DartProject& project) | ||||
|     : project_(project) {} | ||||
|  | ||||
| FlutterWindow::~FlutterWindow() {} | ||||
|  | ||||
| bool FlutterWindow::OnCreate() { | ||||
|   if (!Win32Window::OnCreate()) { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   RECT frame = GetClientArea(); | ||||
|  | ||||
|   // The size here must match the window dimensions to avoid unnecessary surface | ||||
|   // creation / destruction in the startup path. | ||||
|   flutter_controller_ = std::make_unique<flutter::FlutterViewController>( | ||||
|       frame.right - frame.left, frame.bottom - frame.top, project_); | ||||
|   // Ensure that basic setup of the controller was successful. | ||||
|   if (!flutter_controller_->engine() || !flutter_controller_->view()) { | ||||
|     return false; | ||||
|   } | ||||
|   RegisterPlugins(flutter_controller_->engine()); | ||||
|   SetChildContent(flutter_controller_->view()->GetNativeWindow()); | ||||
|  | ||||
|   flutter_controller_->engine()->SetNextFrameCallback([&]() { | ||||
|     this->Show(); | ||||
|   }); | ||||
|  | ||||
|   // Flutter can complete the first frame before the "show window" callback is | ||||
|   // registered. The following call ensures a frame is pending to ensure the | ||||
|   // window is shown. It is a no-op if the first frame hasn't completed yet. | ||||
|   flutter_controller_->ForceRedraw(); | ||||
|  | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| void FlutterWindow::OnDestroy() { | ||||
|   if (flutter_controller_) { | ||||
|     flutter_controller_ = nullptr; | ||||
|   } | ||||
|  | ||||
|   Win32Window::OnDestroy(); | ||||
| } | ||||
|  | ||||
| LRESULT | ||||
| FlutterWindow::MessageHandler(HWND hwnd, UINT const message, | ||||
|                               WPARAM const wparam, | ||||
|                               LPARAM const lparam) noexcept { | ||||
|   // Give Flutter, including plugins, an opportunity to handle window messages. | ||||
|   if (flutter_controller_) { | ||||
|     std::optional<LRESULT> result = | ||||
|         flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, | ||||
|                                                       lparam); | ||||
|     if (result) { | ||||
|       return *result; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   switch (message) { | ||||
|     case WM_FONTCHANGE: | ||||
|       flutter_controller_->engine()->ReloadSystemFonts(); | ||||
|       break; | ||||
|   } | ||||
|  | ||||
|   return Win32Window::MessageHandler(hwnd, message, wparam, lparam); | ||||
| } | ||||
| @@ -1,33 +0,0 @@ | ||||
| #ifndef RUNNER_FLUTTER_WINDOW_H_ | ||||
| #define RUNNER_FLUTTER_WINDOW_H_ | ||||
|  | ||||
| #include <flutter/dart_project.h> | ||||
| #include <flutter/flutter_view_controller.h> | ||||
|  | ||||
| #include <memory> | ||||
|  | ||||
| #include "win32_window.h" | ||||
|  | ||||
| // A window that does nothing but host a Flutter view. | ||||
| class FlutterWindow : public Win32Window { | ||||
|  public: | ||||
|   // Creates a new FlutterWindow hosting a Flutter view running |project|. | ||||
|   explicit FlutterWindow(const flutter::DartProject& project); | ||||
|   virtual ~FlutterWindow(); | ||||
|  | ||||
|  protected: | ||||
|   // Win32Window: | ||||
|   bool OnCreate() override; | ||||
|   void OnDestroy() override; | ||||
|   LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, | ||||
|                          LPARAM const lparam) noexcept override; | ||||
|  | ||||
|  private: | ||||
|   // The project to run. | ||||
|   flutter::DartProject project_; | ||||
|  | ||||
|   // The Flutter instance hosted by this window. | ||||
|   std::unique_ptr<flutter::FlutterViewController> flutter_controller_; | ||||
| }; | ||||
|  | ||||
| #endif  // RUNNER_FLUTTER_WINDOW_H_ | ||||
| @@ -1,43 +0,0 @@ | ||||
| #include <flutter/dart_project.h> | ||||
| #include <flutter/flutter_view_controller.h> | ||||
| #include <windows.h> | ||||
|  | ||||
| #include "flutter_window.h" | ||||
| #include "utils.h" | ||||
|  | ||||
| int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, | ||||
|                       _In_ wchar_t *command_line, _In_ int show_command) { | ||||
|   // Attach to console when present (e.g., 'flutter run') or create a | ||||
|   // new console when running with a debugger. | ||||
|   if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { | ||||
|     CreateAndAttachConsole(); | ||||
|   } | ||||
|  | ||||
|   // Initialize COM, so that it is available for use in the library and/or | ||||
|   // plugins. | ||||
|   ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); | ||||
|  | ||||
|   flutter::DartProject project(L"data"); | ||||
|  | ||||
|   std::vector<std::string> command_line_arguments = | ||||
|       GetCommandLineArguments(); | ||||
|  | ||||
|   project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); | ||||
|  | ||||
|   FlutterWindow window(project); | ||||
|   Win32Window::Point origin(10, 10); | ||||
|   Win32Window::Size size(1280, 720); | ||||
|   if (!window.Create(L"anyway", origin, size)) { | ||||
|     return EXIT_FAILURE; | ||||
|   } | ||||
|   window.SetQuitOnClose(true); | ||||
|  | ||||
|   ::MSG msg; | ||||
|   while (::GetMessage(&msg, nullptr, 0, 0)) { | ||||
|     ::TranslateMessage(&msg); | ||||
|     ::DispatchMessage(&msg); | ||||
|   } | ||||
|  | ||||
|   ::CoUninitialize(); | ||||
|   return EXIT_SUCCESS; | ||||
| } | ||||
| @@ -1,16 +0,0 @@ | ||||
| //{{NO_DEPENDENCIES}} | ||||
| // Microsoft Visual C++ generated include file. | ||||
| // Used by Runner.rc | ||||
| // | ||||
| #define IDI_APP_ICON                    101 | ||||
|  | ||||
| // Next default values for new objects | ||||
| // | ||||
| #ifdef APSTUDIO_INVOKED | ||||
| #ifndef APSTUDIO_READONLY_SYMBOLS | ||||
| #define _APS_NEXT_RESOURCE_VALUE        102 | ||||
| #define _APS_NEXT_COMMAND_VALUE         40001 | ||||
| #define _APS_NEXT_CONTROL_VALUE         1001 | ||||
| #define _APS_NEXT_SYMED_VALUE           101 | ||||
| #endif | ||||
| #endif | ||||
| Before Width: | Height: | Size: 33 KiB | 
| @@ -1,20 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> | ||||
|   <application xmlns="urn:schemas-microsoft-com:asm.v3"> | ||||
|     <windowsSettings> | ||||
|       <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> | ||||
|     </windowsSettings> | ||||
|   </application> | ||||
|   <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> | ||||
|     <application> | ||||
|       <!-- Windows 10 and Windows 11 --> | ||||
|       <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> | ||||
|       <!-- Windows 8.1 --> | ||||
|       <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> | ||||
|       <!-- Windows 8 --> | ||||
|       <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> | ||||
|       <!-- Windows 7 --> | ||||
|       <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> | ||||
|     </application> | ||||
|   </compatibility> | ||||
| </assembly> | ||||
| @@ -1,65 +0,0 @@ | ||||
| #include "utils.h" | ||||
|  | ||||
| #include <flutter_windows.h> | ||||
| #include <io.h> | ||||
| #include <stdio.h> | ||||
| #include <windows.h> | ||||
|  | ||||
| #include <iostream> | ||||
|  | ||||
| void CreateAndAttachConsole() { | ||||
|   if (::AllocConsole()) { | ||||
|     FILE *unused; | ||||
|     if (freopen_s(&unused, "CONOUT$", "w", stdout)) { | ||||
|       _dup2(_fileno(stdout), 1); | ||||
|     } | ||||
|     if (freopen_s(&unused, "CONOUT$", "w", stderr)) { | ||||
|       _dup2(_fileno(stdout), 2); | ||||
|     } | ||||
|     std::ios::sync_with_stdio(); | ||||
|     FlutterDesktopResyncOutputStreams(); | ||||
|   } | ||||
| } | ||||
|  | ||||
| std::vector<std::string> GetCommandLineArguments() { | ||||
|   // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. | ||||
|   int argc; | ||||
|   wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); | ||||
|   if (argv == nullptr) { | ||||
|     return std::vector<std::string>(); | ||||
|   } | ||||
|  | ||||
|   std::vector<std::string> command_line_arguments; | ||||
|  | ||||
|   // Skip the first argument as it's the binary name. | ||||
|   for (int i = 1; i < argc; i++) { | ||||
|     command_line_arguments.push_back(Utf8FromUtf16(argv[i])); | ||||
|   } | ||||
|  | ||||
|   ::LocalFree(argv); | ||||
|  | ||||
|   return command_line_arguments; | ||||
| } | ||||
|  | ||||
| std::string Utf8FromUtf16(const wchar_t* utf16_string) { | ||||
|   if (utf16_string == nullptr) { | ||||
|     return std::string(); | ||||
|   } | ||||
|   int target_length = ::WideCharToMultiByte( | ||||
|       CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, | ||||
|       -1, nullptr, 0, nullptr, nullptr) | ||||
|     -1; // remove the trailing null character | ||||
|   int input_length = (int)wcslen(utf16_string); | ||||
|   std::string utf8_string; | ||||
|   if (target_length <= 0 || target_length > utf8_string.max_size()) { | ||||
|     return utf8_string; | ||||
|   } | ||||
|   utf8_string.resize(target_length); | ||||
|   int converted_length = ::WideCharToMultiByte( | ||||
|       CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, | ||||
|       input_length, utf8_string.data(), target_length, nullptr, nullptr); | ||||
|   if (converted_length == 0) { | ||||
|     return std::string(); | ||||
|   } | ||||
|   return utf8_string; | ||||
| } | ||||
| @@ -1,19 +0,0 @@ | ||||
| #ifndef RUNNER_UTILS_H_ | ||||
| #define RUNNER_UTILS_H_ | ||||
|  | ||||
| #include <string> | ||||
| #include <vector> | ||||
|  | ||||
| // Creates a console for the process, and redirects stdout and stderr to | ||||
| // it for both the runner and the Flutter library. | ||||
| void CreateAndAttachConsole(); | ||||
|  | ||||
| // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string | ||||
| // encoded in UTF-8. Returns an empty std::string on failure. | ||||
| std::string Utf8FromUtf16(const wchar_t* utf16_string); | ||||
|  | ||||
| // Gets the command line arguments passed in as a std::vector<std::string>, | ||||
| // encoded in UTF-8. Returns an empty std::vector<std::string> on failure. | ||||
| std::vector<std::string> GetCommandLineArguments(); | ||||
|  | ||||
| #endif  // RUNNER_UTILS_H_ | ||||
| @@ -1,288 +0,0 @@ | ||||
| #include "win32_window.h" | ||||
|  | ||||
| #include <dwmapi.h> | ||||
| #include <flutter_windows.h> | ||||
|  | ||||
| #include "resource.h" | ||||
|  | ||||
| namespace { | ||||
|  | ||||
| /// Window attribute that enables dark mode window decorations. | ||||
| /// | ||||
| /// Redefined in case the developer's machine has a Windows SDK older than | ||||
| /// version 10.0.22000.0. | ||||
| /// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute | ||||
| #ifndef DWMWA_USE_IMMERSIVE_DARK_MODE | ||||
| #define DWMWA_USE_IMMERSIVE_DARK_MODE 20 | ||||
| #endif | ||||
|  | ||||
| constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; | ||||
|  | ||||
| /// Registry key for app theme preference. | ||||
| /// | ||||
| /// A value of 0 indicates apps should use dark mode. A non-zero or missing | ||||
| /// value indicates apps should use light mode. | ||||
| constexpr const wchar_t kGetPreferredBrightnessRegKey[] = | ||||
|   L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; | ||||
| constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; | ||||
|  | ||||
| // The number of Win32Window objects that currently exist. | ||||
| static int g_active_window_count = 0; | ||||
|  | ||||
| using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); | ||||
|  | ||||
| // Scale helper to convert logical scaler values to physical using passed in | ||||
| // scale factor | ||||
| int Scale(int source, double scale_factor) { | ||||
|   return static_cast<int>(source * scale_factor); | ||||
| } | ||||
|  | ||||
| // Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. | ||||
| // This API is only needed for PerMonitor V1 awareness mode. | ||||
| void EnableFullDpiSupportIfAvailable(HWND hwnd) { | ||||
|   HMODULE user32_module = LoadLibraryA("User32.dll"); | ||||
|   if (!user32_module) { | ||||
|     return; | ||||
|   } | ||||
|   auto enable_non_client_dpi_scaling = | ||||
|       reinterpret_cast<EnableNonClientDpiScaling*>( | ||||
|           GetProcAddress(user32_module, "EnableNonClientDpiScaling")); | ||||
|   if (enable_non_client_dpi_scaling != nullptr) { | ||||
|     enable_non_client_dpi_scaling(hwnd); | ||||
|   } | ||||
|   FreeLibrary(user32_module); | ||||
| } | ||||
|  | ||||
| }  // namespace | ||||
|  | ||||
| // Manages the Win32Window's window class registration. | ||||
| class WindowClassRegistrar { | ||||
|  public: | ||||
|   ~WindowClassRegistrar() = default; | ||||
|  | ||||
|   // Returns the singleton registrar instance. | ||||
|   static WindowClassRegistrar* GetInstance() { | ||||
|     if (!instance_) { | ||||
|       instance_ = new WindowClassRegistrar(); | ||||
|     } | ||||
|     return instance_; | ||||
|   } | ||||
|  | ||||
|   // Returns the name of the window class, registering the class if it hasn't | ||||
|   // previously been registered. | ||||
|   const wchar_t* GetWindowClass(); | ||||
|  | ||||
|   // Unregisters the window class. Should only be called if there are no | ||||
|   // instances of the window. | ||||
|   void UnregisterWindowClass(); | ||||
|  | ||||
|  private: | ||||
|   WindowClassRegistrar() = default; | ||||
|  | ||||
|   static WindowClassRegistrar* instance_; | ||||
|  | ||||
|   bool class_registered_ = false; | ||||
| }; | ||||
|  | ||||
| WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; | ||||
|  | ||||
| const wchar_t* WindowClassRegistrar::GetWindowClass() { | ||||
|   if (!class_registered_) { | ||||
|     WNDCLASS window_class{}; | ||||
|     window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); | ||||
|     window_class.lpszClassName = kWindowClassName; | ||||
|     window_class.style = CS_HREDRAW | CS_VREDRAW; | ||||
|     window_class.cbClsExtra = 0; | ||||
|     window_class.cbWndExtra = 0; | ||||
|     window_class.hInstance = GetModuleHandle(nullptr); | ||||
|     window_class.hIcon = | ||||
|         LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); | ||||
|     window_class.hbrBackground = 0; | ||||
|     window_class.lpszMenuName = nullptr; | ||||
|     window_class.lpfnWndProc = Win32Window::WndProc; | ||||
|     RegisterClass(&window_class); | ||||
|     class_registered_ = true; | ||||
|   } | ||||
|   return kWindowClassName; | ||||
| } | ||||
|  | ||||
| void WindowClassRegistrar::UnregisterWindowClass() { | ||||
|   UnregisterClass(kWindowClassName, nullptr); | ||||
|   class_registered_ = false; | ||||
| } | ||||
|  | ||||
| Win32Window::Win32Window() { | ||||
|   ++g_active_window_count; | ||||
| } | ||||
|  | ||||
| Win32Window::~Win32Window() { | ||||
|   --g_active_window_count; | ||||
|   Destroy(); | ||||
| } | ||||
|  | ||||
| bool Win32Window::Create(const std::wstring& title, | ||||
|                          const Point& origin, | ||||
|                          const Size& size) { | ||||
|   Destroy(); | ||||
|  | ||||
|   const wchar_t* window_class = | ||||
|       WindowClassRegistrar::GetInstance()->GetWindowClass(); | ||||
|  | ||||
|   const POINT target_point = {static_cast<LONG>(origin.x), | ||||
|                               static_cast<LONG>(origin.y)}; | ||||
|   HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); | ||||
|   UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); | ||||
|   double scale_factor = dpi / 96.0; | ||||
|  | ||||
|   HWND window = CreateWindow( | ||||
|       window_class, title.c_str(), WS_OVERLAPPEDWINDOW, | ||||
|       Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), | ||||
|       Scale(size.width, scale_factor), Scale(size.height, scale_factor), | ||||
|       nullptr, nullptr, GetModuleHandle(nullptr), this); | ||||
|  | ||||
|   if (!window) { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   UpdateTheme(window); | ||||
|  | ||||
|   return OnCreate(); | ||||
| } | ||||
|  | ||||
| bool Win32Window::Show() { | ||||
|   return ShowWindow(window_handle_, SW_SHOWNORMAL); | ||||
| } | ||||
|  | ||||
| // static | ||||
| LRESULT CALLBACK Win32Window::WndProc(HWND const window, | ||||
|                                       UINT const message, | ||||
|                                       WPARAM const wparam, | ||||
|                                       LPARAM const lparam) noexcept { | ||||
|   if (message == WM_NCCREATE) { | ||||
|     auto window_struct = reinterpret_cast<CREATESTRUCT*>(lparam); | ||||
|     SetWindowLongPtr(window, GWLP_USERDATA, | ||||
|                      reinterpret_cast<LONG_PTR>(window_struct->lpCreateParams)); | ||||
|  | ||||
|     auto that = static_cast<Win32Window*>(window_struct->lpCreateParams); | ||||
|     EnableFullDpiSupportIfAvailable(window); | ||||
|     that->window_handle_ = window; | ||||
|   } else if (Win32Window* that = GetThisFromHandle(window)) { | ||||
|     return that->MessageHandler(window, message, wparam, lparam); | ||||
|   } | ||||
|  | ||||
|   return DefWindowProc(window, message, wparam, lparam); | ||||
| } | ||||
|  | ||||
| LRESULT | ||||
| Win32Window::MessageHandler(HWND hwnd, | ||||
|                             UINT const message, | ||||
|                             WPARAM const wparam, | ||||
|                             LPARAM const lparam) noexcept { | ||||
|   switch (message) { | ||||
|     case WM_DESTROY: | ||||
|       window_handle_ = nullptr; | ||||
|       Destroy(); | ||||
|       if (quit_on_close_) { | ||||
|         PostQuitMessage(0); | ||||
|       } | ||||
|       return 0; | ||||
|  | ||||
|     case WM_DPICHANGED: { | ||||
|       auto newRectSize = reinterpret_cast<RECT*>(lparam); | ||||
|       LONG newWidth = newRectSize->right - newRectSize->left; | ||||
|       LONG newHeight = newRectSize->bottom - newRectSize->top; | ||||
|  | ||||
|       SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, | ||||
|                    newHeight, SWP_NOZORDER | SWP_NOACTIVATE); | ||||
|  | ||||
|       return 0; | ||||
|     } | ||||
|     case WM_SIZE: { | ||||
|       RECT rect = GetClientArea(); | ||||
|       if (child_content_ != nullptr) { | ||||
|         // Size and position the child window. | ||||
|         MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, | ||||
|                    rect.bottom - rect.top, TRUE); | ||||
|       } | ||||
|       return 0; | ||||
|     } | ||||
|  | ||||
|     case WM_ACTIVATE: | ||||
|       if (child_content_ != nullptr) { | ||||
|         SetFocus(child_content_); | ||||
|       } | ||||
|       return 0; | ||||
|  | ||||
|     case WM_DWMCOLORIZATIONCOLORCHANGED: | ||||
|       UpdateTheme(hwnd); | ||||
|       return 0; | ||||
|   } | ||||
|  | ||||
|   return DefWindowProc(window_handle_, message, wparam, lparam); | ||||
| } | ||||
|  | ||||
| void Win32Window::Destroy() { | ||||
|   OnDestroy(); | ||||
|  | ||||
|   if (window_handle_) { | ||||
|     DestroyWindow(window_handle_); | ||||
|     window_handle_ = nullptr; | ||||
|   } | ||||
|   if (g_active_window_count == 0) { | ||||
|     WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); | ||||
|   } | ||||
| } | ||||
|  | ||||
| Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { | ||||
|   return reinterpret_cast<Win32Window*>( | ||||
|       GetWindowLongPtr(window, GWLP_USERDATA)); | ||||
| } | ||||
|  | ||||
| void Win32Window::SetChildContent(HWND content) { | ||||
|   child_content_ = content; | ||||
|   SetParent(content, window_handle_); | ||||
|   RECT frame = GetClientArea(); | ||||
|  | ||||
|   MoveWindow(content, frame.left, frame.top, frame.right - frame.left, | ||||
|              frame.bottom - frame.top, true); | ||||
|  | ||||
|   SetFocus(child_content_); | ||||
| } | ||||
|  | ||||
| RECT Win32Window::GetClientArea() { | ||||
|   RECT frame; | ||||
|   GetClientRect(window_handle_, &frame); | ||||
|   return frame; | ||||
| } | ||||
|  | ||||
| HWND Win32Window::GetHandle() { | ||||
|   return window_handle_; | ||||
| } | ||||
|  | ||||
| void Win32Window::SetQuitOnClose(bool quit_on_close) { | ||||
|   quit_on_close_ = quit_on_close; | ||||
| } | ||||
|  | ||||
| bool Win32Window::OnCreate() { | ||||
|   // No-op; provided for subclasses. | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| void Win32Window::OnDestroy() { | ||||
|   // No-op; provided for subclasses. | ||||
| } | ||||
|  | ||||
| void Win32Window::UpdateTheme(HWND const window) { | ||||
|   DWORD light_mode; | ||||
|   DWORD light_mode_size = sizeof(light_mode); | ||||
|   LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, | ||||
|                                kGetPreferredBrightnessRegValue, | ||||
|                                RRF_RT_REG_DWORD, nullptr, &light_mode, | ||||
|                                &light_mode_size); | ||||
|  | ||||
|   if (result == ERROR_SUCCESS) { | ||||
|     BOOL enable_dark_mode = light_mode == 0; | ||||
|     DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, | ||||
|                           &enable_dark_mode, sizeof(enable_dark_mode)); | ||||
|   } | ||||
| } | ||||
| @@ -1,102 +0,0 @@ | ||||
| #ifndef RUNNER_WIN32_WINDOW_H_ | ||||
| #define RUNNER_WIN32_WINDOW_H_ | ||||
|  | ||||
| #include <windows.h> | ||||
|  | ||||
| #include <functional> | ||||
| #include <memory> | ||||
| #include <string> | ||||
|  | ||||
| // A class abstraction for a high DPI-aware Win32 Window. Intended to be | ||||
| // inherited from by classes that wish to specialize with custom | ||||
| // rendering and input handling | ||||
| class Win32Window { | ||||
|  public: | ||||
|   struct Point { | ||||
|     unsigned int x; | ||||
|     unsigned int y; | ||||
|     Point(unsigned int x, unsigned int y) : x(x), y(y) {} | ||||
|   }; | ||||
|  | ||||
|   struct Size { | ||||
|     unsigned int width; | ||||
|     unsigned int height; | ||||
|     Size(unsigned int width, unsigned int height) | ||||
|         : width(width), height(height) {} | ||||
|   }; | ||||
|  | ||||
|   Win32Window(); | ||||
|   virtual ~Win32Window(); | ||||
|  | ||||
|   // Creates a win32 window with |title| that is positioned and sized using | ||||
|   // |origin| and |size|. New windows are created on the default monitor. Window | ||||
|   // sizes are specified to the OS in physical pixels, hence to ensure a | ||||
|   // consistent size this function will scale the inputted width and height as | ||||
|   // as appropriate for the default monitor. The window is invisible until | ||||
|   // |Show| is called. Returns true if the window was created successfully. | ||||
|   bool Create(const std::wstring& title, const Point& origin, const Size& size); | ||||
|  | ||||
|   // Show the current window. Returns true if the window was successfully shown. | ||||
|   bool Show(); | ||||
|  | ||||
|   // Release OS resources associated with window. | ||||
|   void Destroy(); | ||||
|  | ||||
|   // Inserts |content| into the window tree. | ||||
|   void SetChildContent(HWND content); | ||||
|  | ||||
|   // Returns the backing Window handle to enable clients to set icon and other | ||||
|   // window properties. Returns nullptr if the window has been destroyed. | ||||
|   HWND GetHandle(); | ||||
|  | ||||
|   // If true, closing this window will quit the application. | ||||
|   void SetQuitOnClose(bool quit_on_close); | ||||
|  | ||||
|   // Return a RECT representing the bounds of the current client area. | ||||
|   RECT GetClientArea(); | ||||
|  | ||||
|  protected: | ||||
|   // Processes and route salient window messages for mouse handling, | ||||
|   // size change and DPI. Delegates handling of these to member overloads that | ||||
|   // inheriting classes can handle. | ||||
|   virtual LRESULT MessageHandler(HWND window, | ||||
|                                  UINT const message, | ||||
|                                  WPARAM const wparam, | ||||
|                                  LPARAM const lparam) noexcept; | ||||
|  | ||||
|   // Called when CreateAndShow is called, allowing subclass window-related | ||||
|   // setup. Subclasses should return false if setup fails. | ||||
|   virtual bool OnCreate(); | ||||
|  | ||||
|   // Called when Destroy is called. | ||||
|   virtual void OnDestroy(); | ||||
|  | ||||
|  private: | ||||
|   friend class WindowClassRegistrar; | ||||
|  | ||||
|   // OS callback called by message pump. Handles the WM_NCCREATE message which | ||||
|   // is passed when the non-client area is being created and enables automatic | ||||
|   // non-client DPI scaling so that the non-client area automatically | ||||
|   // responds to changes in DPI. All other messages are handled by | ||||
|   // MessageHandler. | ||||
|   static LRESULT CALLBACK WndProc(HWND const window, | ||||
|                                   UINT const message, | ||||
|                                   WPARAM const wparam, | ||||
|                                   LPARAM const lparam) noexcept; | ||||
|  | ||||
|   // Retrieves a class instance pointer for |window| | ||||
|   static Win32Window* GetThisFromHandle(HWND const window) noexcept; | ||||
|  | ||||
|   // Update the window frame's theme to match the system theme. | ||||
|   static void UpdateTheme(HWND const window); | ||||
|  | ||||
|   bool quit_on_close_ = false; | ||||
|  | ||||
|   // window handle for top level window. | ||||
|   HWND window_handle_ = nullptr; | ||||
|  | ||||
|   // window handle for hosted content. | ||||
|   HWND child_content_ = nullptr; | ||||
| }; | ||||
|  | ||||
| #endif  // RUNNER_WIN32_WINDOW_H_ | ||||