From 9840d1c17da7c877aac17dae9f0fa2116d0299d1 Mon Sep 17 00:00:00 2001 From: Aditya Chavda Date: Fri, 6 Oct 2023 20:59:45 +0530 Subject: [PATCH] :sparkles: Add desktop support in example app --- CHANGELOG.md | 1 + example/.metadata | 10 - example/ios/Flutter/Debug.xcconfig | 1 - example/ios/Flutter/Release.xcconfig | 1 - example/linux/.gitignore | 1 + example/linux/CMakeLists.txt | 139 ++++ example/linux/flutter/CMakeLists.txt | 88 +++ example/linux/main.cc | 6 + example/linux/my_application.cc | 104 +++ example/linux/my_application.h | 18 + example/macos/.gitignore | 7 + example/macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../macos/Runner.xcodeproj/project.pbxproj | 737 ++++++++++++++++++ .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ example/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/1024.png | Bin 0 -> 142925 bytes .../AppIcon.appiconset/128.png | Bin 0 -> 8730 bytes .../Assets.xcassets/AppIcon.appiconset/16.png | Bin 0 -> 826 bytes .../AppIcon.appiconset/256.png | Bin 0 -> 18022 bytes .../Assets.xcassets/AppIcon.appiconset/32.png | Bin 0 -> 1889 bytes .../AppIcon.appiconset/512.png | Bin 0 -> 44443 bytes .../Assets.xcassets/AppIcon.appiconset/64.png | Bin 0 -> 4051 bytes .../AppIcon.appiconset/Contents.json | 1 + example/macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ example/macos/Runner/Configs/AppInfo.xcconfig | 14 + example/macos/Runner/Configs/Debug.xcconfig | 2 + example/macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + example/macos/Runner/Info.plist | 32 + example/macos/Runner/MainFlutterWindow.swift | 15 + example/macos/Runner/Release.entitlements | 8 + example/windows/.gitignore | 17 + example/windows/CMakeLists.txt | 102 +++ example/windows/flutter/CMakeLists.txt | 104 +++ example/windows/runner/CMakeLists.txt | 40 + example/windows/runner/Runner.rc | 121 +++ example/windows/runner/flutter_window.cpp | 66 ++ example/windows/runner/flutter_window.h | 33 + example/windows/runner/main.cpp | 43 + example/windows/runner/resource.h | 16 + example/windows/runner/resources/app_icon.ico | Bin 0 -> 12162 bytes example/windows/runner/runner.exe.manifest | 20 + example/windows/runner/utils.cpp | 65 ++ example/windows/runner/utils.h | 19 + example/windows/runner/win32_window.cpp | 288 +++++++ example/windows/runner/win32_window.h | 102 +++ .../flutter_credit_card_method_channel.dart | 3 +- 49 files changed, 2690 insertions(+), 14 deletions(-) delete mode 100644 example/.metadata delete mode 100644 example/ios/Flutter/Debug.xcconfig delete mode 100644 example/ios/Flutter/Release.xcconfig create mode 100644 example/linux/.gitignore create mode 100644 example/linux/CMakeLists.txt create mode 100644 example/linux/flutter/CMakeLists.txt create mode 100644 example/linux/main.cc create mode 100644 example/linux/my_application.cc create mode 100644 example/linux/my_application.h create mode 100644 example/macos/.gitignore create mode 100644 example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/macos/Runner/AppDelegate.swift create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/1024.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/64.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 example/macos/Runner/Configs/Debug.xcconfig create mode 100644 example/macos/Runner/Configs/Release.xcconfig create mode 100644 example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 example/macos/Runner/DebugProfile.entitlements create mode 100644 example/macos/Runner/Info.plist create mode 100644 example/macos/Runner/MainFlutterWindow.swift create mode 100644 example/macos/Runner/Release.entitlements create mode 100644 example/windows/.gitignore create mode 100644 example/windows/CMakeLists.txt create mode 100644 example/windows/flutter/CMakeLists.txt create mode 100644 example/windows/runner/CMakeLists.txt create mode 100644 example/windows/runner/Runner.rc create mode 100644 example/windows/runner/flutter_window.cpp create mode 100644 example/windows/runner/flutter_window.h create mode 100644 example/windows/runner/main.cpp create mode 100644 example/windows/runner/resource.h create mode 100644 example/windows/runner/resources/app_icon.ico create mode 100644 example/windows/runner/runner.exe.manifest create mode 100644 example/windows/runner/utils.cpp create mode 100644 example/windows/runner/utils.h create mode 100644 example/windows/runner/win32_window.cpp create mode 100644 example/windows/runner/win32_window.h diff --git a/CHANGELOG.md b/CHANGELOG.md index 57dea4f..b020300 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # [4.0.1](https://github.com/SimformSolutionsPvtLtd/flutter_credit_card/tree/4.0.1) - Fixed glare effect issue [#154](https://github.com/SimformSolutionsPvtLtd/flutter_credit_card/pull/154). +- Added desktop support for example app [#155](https://github.com/SimformSolutionsPvtLtd/flutter_credit_card/pull/155). # [4.0.0+1](https://github.com/SimformSolutionsPvtLtd/flutter_credit_card/tree/4.0.0+1) diff --git a/example/.metadata b/example/.metadata deleted file mode 100644 index 050aaf9..0000000 --- a/example/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 0545c63b9baca0d40c2126dba6366fad2b16d3c1 - channel: master - -project_type: app diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/example/linux/.gitignore b/example/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/example/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/example/linux/CMakeLists.txt b/example/linux/CMakeLists.txt new file mode 100644 index 0000000..e9dfbcb --- /dev/null +++ b/example/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# 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 "example") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.simform.example") + +# 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 "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>: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) + +# 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() diff --git a/example/linux/flutter/CMakeLists.txt b/example/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/example/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# 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} +) diff --git a/example/linux/main.cc b/example/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/example/linux/main.cc @@ -0,0 +1,6 @@ +#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); +} diff --git a/example/linux/my_application.cc b/example/linux/my_application.cc new file mode 100644 index 0000000..0ba8f43 --- /dev/null +++ b/example/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#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, "example"); + 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, "example"); + } + + 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 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_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)); +} diff --git a/example/linux/my_application.h b/example/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/example/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +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_ diff --git a/example/macos/.gitignore b/example/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/example/macos/Flutter/Flutter-Debug.xcconfig b/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..20ca87d --- /dev/null +++ b/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" diff --git a/example/macos/Flutter/Flutter-Release.xcconfig b/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7d9b555 --- /dev/null +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,737 @@ +// !$*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 */; }; + 94733279F50B72492FA15948 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D566C8D96BAB46777E3D3CF /* Pods_Runner.framework */; }; +/* 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 = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 6D566C8D96BAB46777E3D3CF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8E4A00D932DD3F713F3FD242 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A6A0E03E1578A1629B37A597 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + DDC969ADD6BD8A10FD973D26 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 94733279F50B72492FA15948 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + FED85B5C71E817096DEEA201 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6D566C8D96BAB46777E3D3CF /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + FED85B5C71E817096DEEA201 /* Pods */ = { + isa = PBXGroup; + children = ( + A6A0E03E1578A1629B37A597 /* Pods-Runner.debug.xcconfig */, + 8E4A00D932DD3F713F3FD242 /* Pods-Runner.release.xcconfig */, + DDC969ADD6BD8A10FD973D26 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* 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 = ( + 5F88AD8B1C1F3F7C5BE5E823 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + 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"; + }; + 5F88AD8B1C1F3F7C5BE5E823 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* 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 = ""; + }; +/* 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.simform.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + 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.simform.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + 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.simform.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + 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; + 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; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + 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; + 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; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + 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 */; +} diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..8fedab6 --- /dev/null +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/macos/Runner/AppDelegate.swift b/example/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000000000000000000000000000000000000..6cedb348c3027d1265bbb4decef9bef2f6580548 GIT binary patch literal 142925 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 J@{BPN{{!KHR@DFi literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png new file mode 100644 index 0000000000000000000000000000000000000000..ce42d2955c6724987a35cd97123f0feca9e988ef GIT binary patch literal 8730 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 Ef(mZV3jhEB literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png new file mode 100644 index 0000000000000000000000000000000000000000..243d2080e44eb2454e5235b620bbfae6516ae12b GIT binary patch literal 826 zcmV-A1I7G_P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR915TFA91ONa40RR915C8xG05nx`@&Et=q)9|UR5%fplWk~?VHn5%_x(KQ zIcMkW*qJrM7hzVz(4-bIvuIX6Df89KXRVawrI44|kqC{H8s9gj z>?3o!55*U+p=(lrz0QMEzJOXFMk{X@&yKD z?*g3vL3~{h5+qx0DuGaRMy>=U!-mA8<_`cmpo<9P2%?k3!hw!|Jos(r{Oj%LGsKY#JYBbPzhJGY$_B95D`gv&VqSJUO0+)_kLtA z-$44{Dfr*M+XPPiV*UmU8t#qOsVb5$L&YnQzdwNK!{@?&=@Q+x32yUBxb=$&F-GbX z5v+Z_51pC=HFN2@DL#4*m59^M@-v({%ZqllBerw9^_2<93x13td*v2NZ{7ob8D2Y? zMLXL_Iov8?Ac17d@^>B}b1{S{b{TcL`y@)Q-V!?fT}jdgEpVcoc`!a{Gl%`L!^#9q zp#=ZSS4@*& z$0WNUpnqMdj8^u=>uBXMb^UQn|8>r-Jm+N==30ksEyvVnSv;Y7A07*qoM6N<$ Eg8rRnBLDyZ literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png new file mode 100644 index 0000000000000000000000000000000000000000..7f097a7c934d6eec2567f709908410a7d4fcbfd4 GIT binary patch literal 18022 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 literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png new file mode 100644 index 0000000000000000000000000000000000000000..ad08833de9d4359a64cc11ad5fde08d96a291a02 GIT binary patch literal 1889 zcmV-n2cGzeP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$_%Sl8*R9FeUS80e{3zyIKAZ0j|;n>IC|4yF-#L2NIs=N22 z_`wF0zuAP~&=GUq@jO63HlD^!aUDp(n!v@0;$_(!D&bUk?j5nL>q$E z1L$1(3M#*Dhm&ox+G?#YP)X}+Uapf>avku;jX~qQ```{6d<=W3d zC))^AtXb<>n|rySP_)z1t~ZJJfbWq+r-_NC1#{t@d3p~LHo|n6jDx=pTJW|UoTh%j zr5Sx69%+L+Vko>bMgnwK&HOQNe5C@C6;P&8to5M5iV3^shWKHrM6Id{Qn%vkNC_1gZvZbX8zg;7|!))FQG-?0TkD+ zhtte}tM|F0n!>}*E)&J6+h-wl^9(5O73rXVjrk)NqRK!WXviJJD6ahk4bv`#H)04a zz)|2t*qOJ{9t#jS1%_?y@LR?r``qJ5&%VKe$LU01Z_Fs;e~~n`Ax_0uPVcMSNUY+z zPt1xF9BB*N=gddgo})(0b7>04$ZdEJ$q<9=xvNK9#=Mv4cYmbwCoi>ILQ<{A_~`^s)-HSEtC<;}mqukP9lQ`@C|JVZi4 zra5DByH@>U4+^V4MEUC<5U|1}CX6$L%rWid&pqX2WFEX54O1^de#L53e%oQ);>mRp z0QU*Ax@#X?z12+cNI?A%3H>yprSgwIqx9*Q#0lV@I0%&;yHMTRYGbFimzx=+{^S;9 zUw9Jfdv1l3N?I3MX;v`>Be7lcO6{+RnEKCC(R%8}>1clCSyS5;_0>JC$UU+cg;gKY z%yEE{fUKso1WDa+4g5*tS-c88V}de;ZPG9%cFa|R1TJCHkXLW?X~-^l44Hdp!)0Mn zO66Z$iQK%WQQ5ZBg2vVR2;XO9_k_9Ny-*qN*SYT8(6$dJ{j?yzGA$O3AfA(2u zxa2%kf7x!d3l1Gc>Am$v>qN`h-H;?w{^~p9Z>NC;EOs@s%1I}wpE?)iY)n8$bx-j8 zidD$XU1XXOqmkxg0gQZi=wK2#69G#!U#kqfi;*~gf+1LAp#AZgcv5mynu+auqeei{ z?KpMpA`;G^X5;6MMK7Y^vWrY5G^rU2qTt|g8$70~YCwV(=`p03tQXgqc##CuJ$a)> z!cR;*2c^$8#!Ee~VwoZ_+Pw7nMkosuh$$7PsA@J`Jr$V;?zD}IiWQZs4ekm4K7@ch zB>LzXgk4vPJ1Dd+S8GzD8|87C9Zpx5@qhZxn@n`qwkbvwc*+LtK=-{1w;mF*Y z?+vUo0w+;-P}cO3svj}te{ahL#=gM_N)13(W*?v}?-1UV|9e00000NkvXXu0mjf5<7%k literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png new file mode 100644 index 0000000000000000000000000000000000000000..4c74a90110eb1ef47c7399d649d7683040763f02 GIT binary patch literal 44443 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 z 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 literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/64.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/64.png new file mode 100644 index 0000000000000000000000000000000000000000..4df727a2e2cacef0be4ff9f24eafe3a7d9c3ca30 GIT binary patch literal 4051 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 FV1f*#f-C?4 literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2003d5b --- /dev/null +++ b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]} \ No newline at end of file diff --git a/example/macos/Runner/Base.lproj/MainMenu.xib b/example/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/example/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/macos/Runner/Configs/AppInfo.xcconfig b/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..ce1e415 --- /dev/null +++ b/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// 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 = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.simform.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.simform. All rights reserved. diff --git a/example/macos/Runner/Configs/Debug.xcconfig b/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/macos/Runner/Configs/Release.xcconfig b/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/macos/Runner/Configs/Warnings.xcconfig b/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +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 diff --git a/example/macos/Runner/DebugProfile.entitlements b/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/example/macos/Runner/Info.plist b/example/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/example/macos/Runner/MainFlutterWindow.swift b/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +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() + } +} diff --git a/example/macos/Runner/Release.entitlements b/example/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/example/windows/.gitignore b/example/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/example/windows/.gitignore @@ -0,0 +1,17 @@ +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/ diff --git a/example/windows/CMakeLists.txt b/example/windows/CMakeLists.txt new file mode 100644 index 0000000..1378672 --- /dev/null +++ b/example/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(example 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 "example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# 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 "$<$:_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 "$") +# 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() + +# 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) diff --git a/example/windows/flutter/CMakeLists.txt b/example/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..930d207 --- /dev/null +++ b/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# 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") + +# === 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" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/example/windows/runner/CMakeLists.txt b/example/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +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) diff --git a/example/windows/runner/Runner.rc b/example/windows/runner/Runner.rc new file mode 100644 index 0000000..2ac6baf --- /dev/null +++ b/example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// 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.simform" "\0" + VALUE "FileDescription", "example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.simform. All rights reserved." "\0" + VALUE "OriginalFilename", "example.exe" "\0" + VALUE "ProductName", "example" "\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 diff --git a/example/windows/runner/flutter_window.cpp b/example/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..b25e363 --- /dev/null +++ b/example/windows/runner/flutter_window.cpp @@ -0,0 +1,66 @@ +#include "flutter_window.h" + +#include + +#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( + 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(); + }); + + 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 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); +} diff --git a/example/windows/runner/flutter_window.h b/example/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/example/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#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_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/example/windows/runner/main.cpp b/example/windows/runner/main.cpp new file mode 100644 index 0000000..a61bf80 --- /dev/null +++ b/example/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#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 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"example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/example/windows/runner/resource.h b/example/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/example/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{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 diff --git a/example/windows/runner/resources/app_icon.ico b/example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..26c27bde6b0c96f90591e63b953d48838ac2c618 GIT binary patch literal 12162 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 Q)*$dwl2?-}kueGQKV@mL%>V!Z literal 0 HcmV?d00001 diff --git a/example/windows/runner/runner.exe.manifest b/example/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..a42ea76 --- /dev/null +++ b/example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/example/windows/runner/utils.cpp b/example/windows/runner/utils.cpp new file mode 100644 index 0000000..b2b0873 --- /dev/null +++ b/example/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +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 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::vector 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; +} diff --git a/example/windows/runner/utils.h b/example/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/example/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// 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, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/example/windows/runner/win32_window.cpp b/example/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/example/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#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(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( + 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(origin.x), + static_cast(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(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(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(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( + 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)); + } +} diff --git a/example/windows/runner/win32_window.h b/example/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/example/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// 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_ diff --git a/lib/src/plugin/flutter_credit_card_method_channel.dart b/lib/src/plugin/flutter_credit_card_method_channel.dart index 6679764..e99338b 100644 --- a/lib/src/plugin/flutter_credit_card_method_channel.dart +++ b/lib/src/plugin/flutter_credit_card_method_channel.dart @@ -50,9 +50,8 @@ class MethodChannelFlutterCreditCard extends FlutterCreditCardPlatform { AppConstants.gyroEventChannelName, ); - await initiateEvents(); - if (Platform.isIOS || Platform.isAndroid) { + await initiateEvents(); _isGyroscopeAvailable = await _methodChannel!.invokeMethod( AppConstants.isGyroAvailableMethod, ) ??