From aef6f2139c8872a1954c17d4474d0ed30cd814d8 Mon Sep 17 00:00:00 2001 From: mrrhak Date: Fri, 10 Jun 2022 14:29:06 +0700 Subject: [PATCH 01/21] rewrite --- .github/workflows/main.yml | 3 + .gitignore | 2 + .vscode/settings.json | 8 +- README.md | 4 +- bin/create.dart | 15 +- bin/main.dart | 10 - lib/_constants.dart | 74 ++++ lib/_custom_exceptions.dart | 41 ++ lib/_main.dart | 292 ++++++++++++++ lib/_utils.dart | 43 ++ lib/_xml_templates.dart | 38 ++ lib/class/template.dart | 41 ++ lib/cli_commands.dart | 263 ++++++++++++ lib/constants.dart | 63 --- lib/custom_exceptions.dart | 41 -- lib/flavor_helper.dart | 138 +++++++ lib/main.dart | 292 -------------- lib/src/android.dart | 786 ++++++++++++++---------------------- lib/src/ios.dart | 404 ++---------------- lib/src/linux.dart | 119 ++---- lib/src/macos.dart | 286 ++----------- lib/src/version.dart | 2 + lib/src/web.dart | 129 ++---- lib/src/windows.dart | 96 ++--- lib/utils.dart | 43 -- lib/utils/cli_logger.dart | 56 +++ lib/utils/constants.dart | 116 ++++++ lib/utils/utils.dart | 137 +++++++ lib/xml_templates.dart | 38 -- pubspec.yaml | 6 +- test/main_test.dart | 105 +---- 31 files changed, 1737 insertions(+), 1954 deletions(-) delete mode 100644 bin/main.dart create mode 100644 lib/_constants.dart create mode 100644 lib/_custom_exceptions.dart create mode 100644 lib/_main.dart create mode 100644 lib/_utils.dart create mode 100644 lib/_xml_templates.dart create mode 100644 lib/class/template.dart create mode 100644 lib/cli_commands.dart delete mode 100644 lib/constants.dart delete mode 100644 lib/custom_exceptions.dart create mode 100644 lib/flavor_helper.dart delete mode 100644 lib/main.dart create mode 100644 lib/src/version.dart delete mode 100644 lib/utils.dart create mode 100644 lib/utils/cli_logger.dart create mode 100644 lib/utils/constants.dart create mode 100644 lib/utils/utils.dart delete mode 100644 lib/xml_templates.dart diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index adab721..4acd8e4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,6 +23,9 @@ jobs: - name: Install dependencies run: dart pub get + - name: Generate package version + run: dart run build_runner build + - name: Verify formatting run: dart format --output=none --set-exit-if-changed . diff --git a/.gitignore b/.gitignore index 45ce92b..0faa433 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ pubspec.lock # Directory created by dartdoc doc/api/ + +example/test/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index fc4b219..0122a74 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,10 @@ "cSpell.words": [ "anydpi", "appiconset", + "hdpi", + "Hexa", "Mainifest", + "mdpi", "mipmap", "negatable", "pbxproj", @@ -11,6 +14,9 @@ "unawaited", "writeln", "xcassets", - "xcodeproj" + "xcodeproj", + "xhdpi", + "xxhdpi", + "xxxhdpi" ] } \ No newline at end of file diff --git a/README.md b/README.md index b94f64a..254a817 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ An example is shown below. More complex examples [here](https://github.com/mrrha ```yaml dev_dependencies: - icons_launcher: ^1.1.9 + icons_launcher: ^2.0.0 flutter_icons: image_path: 'assets/ic_logo_border.png' @@ -153,7 +153,7 @@ The configuration file format is the same. ```yaml dev_dependencies: - icons_launcher: ^1.1.9 + icons_launcher: ^2.0.0 flutter_icons: # image_path: 'assets/ic_logo_border.png' diff --git a/bin/create.dart b/bin/create.dart index d1ea4fa..cc22b03 100644 --- a/bin/create.dart +++ b/bin/create.dart @@ -1,7 +1,16 @@ -import 'dart:async'; -import 'package:icons_launcher/main.dart' as icons_launcher; +import 'package:args/args.dart'; +import 'package:icons_launcher/cli_commands.dart'; +import 'package:icons_launcher/utils/constants.dart'; /// Run to create launcher icons void main(List arguments) { - unawaited(icons_launcher.createIconsFromArguments(arguments)); + print(startMessage); + final parser = ArgParser(); + + parser.addOption('path'); + parser.addOption('flavor'); + + final parsedArgs = parser.parse(arguments); + + createLauncherIcons(path: parsedArgs['path'], flavor: parsedArgs['flavor']); } diff --git a/bin/main.dart b/bin/main.dart deleted file mode 100644 index fecdb88..0000000 --- a/bin/main.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'create.dart' as create; - -/// Run the main app -/// Deprecated. Use `create` instead. -void main(List arguments) { - print( - "\n\n⚠️ This 'icons_launcher:main' is deprecated. Use 'icons_launcher:create' instead. ⚠️"); - - create.main(arguments); -} diff --git a/lib/_constants.dart b/lib/_constants.dart new file mode 100644 index 0000000..bb5a81a --- /dev/null +++ b/lib/_constants.dart @@ -0,0 +1,74 @@ +// import 'package:icons_launcher/src/version.dart'; + +// const String flutterSdkGradleFile = +// '/packages/flutter_tools/gradle/flutter.gradle'; +// String androidMainFolder(String? flavor) => +// "android/app/src/${flavor ?? 'main'}/"; +// String androidResFolder(String? flavor) => +// "android/app/src/${flavor ?? 'main'}/res/"; +// String androidColorsFile(String? flavor) => +// "android/app/src/${flavor ?? 'main'}/res/values/colors.xml"; +// const String androidLocalProperties = 'android/local.properties'; +// const String androidManifestFile = 'android/app/src/main/AndroidManifest.xml'; +// const String androidGradleFile = 'android/app/build.gradle'; +// const String androidFileName = 'ic_launcher.png'; +// const String androidRoundFileName = 'ic_launcher_round.png'; +// const String androidAdaptiveForegroundFileName = 'ic_launcher_foreground.png'; +// const String androidAdaptiveBackgroundFileName = 'ic_launcher_background.png'; +// const String androidPlayStoreFileName = 'ic_launcher-playstore.png'; +// String androidAdaptiveXmlFolder(String? flavor) => +// androidResFolder(flavor) + 'mipmap-anydpi-v26/'; +// const String androidDefaultIconName = 'ic_launcher'; +// const String androidDefaultRoundIconName = 'ic_launcher_round'; + +// const String iosDefaultIconFolder = +// 'ios/Runner/Assets.xcassets/AppIcon.appiconset/'; +// const String iosAssetFolder = 'ios/Runner/Assets.xcassets/'; +// const String iosConfigFile = 'ios/Runner.xcodeproj/project.pbxproj'; +// const String iosDefaultIconName = 'Icon-App'; + +// const String macosDefaultIconFolder = +// 'macos/Runner/Assets.xcassets/AppIcon.appiconset/'; +// const String macosAssetFolder = 'macos/Runner/Assets.xcassets/'; +// const String macosConfigFile = 'macos/Runner.xcodeproj/project.pbxproj'; +// const String macosDefaultIconName = 'app_icon'; + +// const String windowsDefaultIconFolder = 'windows/runner/resources/'; +// const String windowsDefaultIconName = 'app_icon'; + +// const String linuxDefaultIconFolder = 'snap/gui/'; +// const String linuxDefaultIconName = 'app_icon'; + +// const String webDefaultFaviconFolder = 'web/'; +// const String webDefaultIconFolder = 'web/icons/'; + +// const String errorMissingImagePath = +// 'Missing "image_path" or "image_path_android" + "image_path_ios" within configuration'; +// const String errorMissingPlatform = +// 'No platform specified within config to generate icons for.'; +// const String errorMissingRegularAndroid = +// 'Adaptive icon config found but no regular Android config. ' +// 'Below API 26 the regular Android config is required'; +// const String errorIncorrectIconName = +// 'The icon name must contain only lowercase a-z, 0-9, or underscore: ' +// 'E.g. "ic_my_new_icon"'; +// const String errorMissingMinSdk = +// 'Cannot not find minSdkVersion from android/app/build.gradle or android/local.properties' +// 'Specify minSdkVersion in either android/app/build.gradle or android/local.properties'; + +// String introMessage() { +// return '''\n +// ═════════════════════════════════════════════ +// ✨ ICONS LAUNCHER STARTING ✨ +// v1.1.9 +// ═════════════════════════════════════════════\n'''; +// } + +// //=================================// +// const String startMessage = '''\n +// ╔════════════════════════════════════════════════════╗ +// ║ ✨✨ ICONS LAUNCHER ✨✨ ║ +// ╠════════════════════════════════════════════════════╣ +// ║ Version: $packageVersion ║ +// ╚════════════════════════════════════════════════════╝ +// \n'''; diff --git a/lib/_custom_exceptions.dart b/lib/_custom_exceptions.dart new file mode 100644 index 0000000..365ac1b --- /dev/null +++ b/lib/_custom_exceptions.dart @@ -0,0 +1,41 @@ +// import 'package:icons_launcher/utils.dart'; + +// class InvalidAndroidIconNameException implements Exception { +// const InvalidAndroidIconNameException([this.message]); +// final String? message; + +// @override +// String toString() { +// return generateError(this, message); +// } +// } + +// class InvalidConfigException implements Exception { +// const InvalidConfigException([this.message]); +// final String? message; + +// @override +// String toString() { +// return generateError(this, message); +// } +// } + +// class NoConfigFoundException implements Exception { +// const NoConfigFoundException([this.message]); +// final String? message; + +// @override +// String toString() { +// return generateError(this, message); +// } +// } + +// class NoDecoderForImageFormatException implements Exception { +// const NoDecoderForImageFormatException([this.message]); +// final String? message; + +// @override +// String toString() { +// return generateError(this, message); +// } +// } diff --git a/lib/_main.dart b/lib/_main.dart new file mode 100644 index 0000000..743d9de --- /dev/null +++ b/lib/_main.dart @@ -0,0 +1,292 @@ +// import 'package:args/args.dart'; +// import 'package:icons_launcher/_constants.dart'; +// import 'package:icons_launcher/custom_exceptions.dart'; +// import 'package:icons_launcher/src/android.dart' as android_icons_launcher; +// import 'package:icons_launcher/src/ios.dart' as ios_icons_launcher; +// import 'package:icons_launcher/src/linux.dart' as linux_icons_launcher; +// import 'package:icons_launcher/src/macos.dart' as macos_icons_launcher; +// import 'package:icons_launcher/src/web.dart' as web_icons_launcher; +// import 'package:icons_launcher/src/windows.dart' as windows_icons_launcher; +// import 'package:path/path.dart' as path; +// import 'package:universal_io/io.dart'; +// import 'package:yaml/yaml.dart'; + +// const String fileOption = 'file'; +// const String helpFlag = 'help'; +// const String defaultConfigFile = 'icons_launcher.yaml'; +// const String flavorConfigFilePattern = r'^icons_launcher-(.*).yaml$'; +// String flavorConfigFile(String flavor) => 'icons_launcher-$flavor.yaml'; + +// /// Returns a list of all the flavors found in the config file. +// List getFlavors() { +// final List flavors = []; +// for (var item in Directory('.').listSync()) { +// if (item is File) { +// final name = path.basename(item.path); +// final match = RegExp(flavorConfigFilePattern).firstMatch(name); +// if (match != null) { +// flavors.add(match.group(1)!); +// } +// } +// } +// return flavors; +// } + +// /// Creates icons from the arguments passed to the program. +// Future createIconsFromArguments(List arguments) async { +// print(introMessage()); + +// final ArgParser parser = ArgParser(allowTrailingOptions: true); +// parser.addFlag(helpFlag, abbr: 'h', help: 'Usage help', negatable: false); +// // Make default null to differentiate when it is explicitly set +// parser.addOption(fileOption, +// abbr: 'f', help: 'Config file (default: $defaultConfigFile)'); +// final ArgResults argResults = parser.parse(arguments); + +// if (argResults[helpFlag]) { +// stdout.writeln('Generates icons for iOS and Android'); +// stdout.writeln(parser.usage); +// exit(0); +// } + +// // Flavors management +// final flavors = getFlavors(); +// final hasFlavors = flavors.isNotEmpty; + +// // Load the config file +// final Map? yamlConfig = +// loadConfigFileFromArgResults(argResults, verbose: true); + +// if (yamlConfig == null) { +// throw const NoConfigFoundException(); +// } + +// // Create icons +// if (!hasFlavors) { +// try { +// await createIconsFromConfig(yamlConfig); +// print('\n✓ Successfully generated launcher icons'); +// } catch (e) { +// stderr.writeln('\n✕ Could not generate launcher icons'); +// stderr.writeln(e); +// exit(2); +// } +// } else { +// try { +// for (String flavor in flavors) { +// print('\nFlavor: $flavor'); +// final Map yamlConfig = +// loadConfigFile(flavorConfigFile(flavor), flavorConfigFile(flavor)); +// await createIconsFromConfig(yamlConfig, flavor); +// } +// print('\n✓ Successfully generated launcher icons for flavors'); +// } catch (e) { +// stderr.writeln('\n✕ Could not generate launcher icons for flavors'); +// stderr.writeln(e); +// exit(2); +// } +// } +// } + +// /// Loads the config file from the arguments passed to the program. +// /// Generate launcher icons base on config file. +// Future createIconsFromConfig(Map config, +// [String? flavor]) async { +// if (!isImagePathInConfig(config)) { +// throw const InvalidConfigException(errorMissingImagePath); +// } +// if (!hasPlatformConfig(config)) { +// throw const InvalidConfigException(errorMissingPlatform); +// } + +// if (isNeedingNewAndroidIcon(config) || hasAndroidAdaptiveConfig(config)) { +// final int minSdk = android_icons_launcher.minSdk(); +// if (minSdk == 0) { +// throw const InvalidConfigException(errorMissingMinSdk); +// } +// if (minSdk < 26 && +// hasAndroidAdaptiveConfig(config) && +// !hasAndroidConfig(config)) { +// throw const InvalidConfigException(errorMissingRegularAndroid); +// } +// } + +// if (isNeedingNewAndroidIcon(config)) { +// android_icons_launcher.createDefaultIcons(config, flavor); +// } +// if (hasAndroidAdaptiveConfig(config)) { +// android_icons_launcher.createAdaptiveIcons(config, flavor); +// } +// if (isNeedingNewIOSIcon(config)) { +// ios_icons_launcher.createIcons(config, flavor); +// } + +// if (isNeedingNewMacOSIcon(config)) { +// macos_icons_launcher.createIcons(config, flavor); +// } + +// if (isNeedingNewWindowsIcon(config)) { +// windows_icons_launcher.createIcons(config, flavor); +// } + +// if (isNeedingNewLinuxIcon(config)) { +// linux_icons_launcher.createIcons(config, flavor); +// } + +// if (isNeedingNewWebIcon(config)) { +// web_icons_launcher.createIcons(config, flavor); +// } +// } + +// /// Loads the config file from the arguments passed to the program. +// Map? loadConfigFileFromArgResults(ArgResults argResults, +// {bool verbose = false}) { +// final String? configFile = argResults[fileOption]; +// final String? fileOptionResult = argResults[fileOption]; + +// // if icon is given, try to load icon +// if (configFile != null && configFile != defaultConfigFile) { +// try { +// return loadConfigFile(configFile, fileOptionResult); +// } catch (e) { +// if (verbose) { +// stderr.writeln(e); +// } + +// return null; +// } +// } + +// // If none set try icons_launcher.yaml first then pubspec.yaml +// // for compatibility +// try { +// return loadConfigFile(defaultConfigFile, fileOptionResult); +// } catch (e) { +// // Try pubspec.yaml for compatibility +// if (configFile == null) { +// try { +// return loadConfigFile('pubspec.yaml', fileOptionResult); +// } catch (_) {} +// } + +// // if nothing got returned, print error +// if (verbose) { +// stderr.writeln(e); +// } +// } + +// return null; +// } + +// /// Load the config file from the given path. +// Map loadConfigFile(String path, String? fileOptionResult) { +// final File file = File(path); +// final String yamlString = file.readAsStringSync(); +// // ignore: always_specify_types +// final Map yamlMap = loadYaml(yamlString); + +// if (!(yamlMap['flutter_icons'] is Map)) { +// stderr.writeln(NoConfigFoundException('Check that your config file ' +// '`${fileOptionResult ?? defaultConfigFile}`' +// ' has a `flutter_icons` section')); +// exit(1); +// } + +// // yamlMap has the type YamlMap, which has several unwanted side effects +// final Map config = {}; +// for (MapEntry entry in yamlMap['flutter_icons'].entries) { +// config[entry.key] = entry.value; +// } + +// return config; +// } + +// /// Checks if the config image path. +// bool isImagePathInConfig(Map flutterIconsConfig) { +// return flutterIconsConfig.containsKey('image_path') || +// (flutterIconsConfig.containsKey('image_path_android') && +// flutterIconsConfig.containsKey('image_path_ios')); +// } + +// /// Checks if the config platform. +// bool hasPlatformConfig(Map flutterIconsConfig) { +// return hasAndroidConfig(flutterIconsConfig) || +// hasIOSConfig(flutterIconsConfig) || +// hasMacOSConfig(flutterIconsConfig) || +// hasWebConfig(flutterIconsConfig) || +// hasWindowsConfig(flutterIconsConfig) || +// hasLinuxConfig(flutterIconsConfig); +// } + +// /// Checks if the config has android. +// bool hasAndroidConfig(Map iconsLauncher) { +// return iconsLauncher.containsKey('android'); +// } + +// /// Checks if the config need android. +// bool isNeedingNewAndroidIcon(Map iconsLauncherConfig) { +// return hasAndroidConfig(iconsLauncherConfig) && +// iconsLauncherConfig['android'] != false; +// } + +// /// Checks if the config has android adaptive. +// bool hasAndroidAdaptiveConfig(Map iconsLauncherConfig) { +// return isNeedingNewAndroidIcon(iconsLauncherConfig) && +// iconsLauncherConfig.containsKey('adaptive_icon_background') && +// iconsLauncherConfig.containsKey('adaptive_icon_foreground'); +// } + +// /// Checks if the config has ios. +// bool hasIOSConfig(Map iconsLauncherConfig) { +// return iconsLauncherConfig.containsKey('ios'); +// } + +// /// Checks if the config need ios. +// bool isNeedingNewIOSIcon(Map iconsLauncherConfig) { +// return hasIOSConfig(iconsLauncherConfig) && +// iconsLauncherConfig['ios'] != false; +// } + +// /// Checks if the config has macos. +// bool hasMacOSConfig(Map iconsLauncherConfig) { +// return iconsLauncherConfig.containsKey('macos'); +// } + +// /// Checks if the config need macos. +// bool isNeedingNewMacOSIcon(Map iconsLauncherConfig) { +// return hasMacOSConfig(iconsLauncherConfig) && +// iconsLauncherConfig['macos'] != false; +// } + +// /// Checks if the config has windows. +// bool hasWindowsConfig(Map iconsLauncherConfig) { +// return iconsLauncherConfig.containsKey('windows'); +// } + +// /// Checks if the config need windows. +// bool isNeedingNewWindowsIcon(Map iconsLauncherConfig) { +// return hasWindowsConfig(iconsLauncherConfig) && +// iconsLauncherConfig['windows'] != false; +// } + +// /// Checks if the config has linux. +// bool hasLinuxConfig(Map iconsLauncherConfig) { +// return iconsLauncherConfig.containsKey('linux'); +// } + +// /// Checks if the config need linux. +// bool isNeedingNewLinuxIcon(Map iconsLauncherConfig) { +// return hasLinuxConfig(iconsLauncherConfig) && +// iconsLauncherConfig['linux'] != false; +// } + +// /// Checks if the config has web. +// bool hasWebConfig(Map iconsLauncherConfig) { +// return iconsLauncherConfig.containsKey('web'); +// } + +// /// Checks if the config need linux. +// bool isNeedingNewWebIcon(Map iconsLauncherConfig) { +// return hasWebConfig(iconsLauncherConfig) && +// iconsLauncherConfig['web'] != false; +// } diff --git a/lib/_utils.dart b/lib/_utils.dart new file mode 100644 index 0000000..5f0bc3e --- /dev/null +++ b/lib/_utils.dart @@ -0,0 +1,43 @@ +// import 'package:image/image.dart'; +// import 'package:universal_io/io.dart'; + +// import 'custom_exceptions.dart'; + +// /// Handle resizing images +// Image createResizedImage(int iconSize, Image image) { +// if (image.width >= iconSize) { +// return copyResize( +// image, +// width: iconSize, +// height: iconSize, +// interpolation: Interpolation.average, +// ); +// } else { +// return copyResize( +// image, +// width: iconSize, +// height: iconSize, +// interpolation: Interpolation.linear, +// ); +// } +// } + +// /// Logging +// void printStatus(String message) { +// print('🚀 $message'); +// } + +// /// Generate error +// String generateError(Exception e, String? error) { +// final errorOutput = error == null ? '' : ' \n$error'; +// return '\n✗ ERROR: ${(e).runtimeType.toString()}$errorOutput'; +// } + +// /// Decode image file +// Image? decodeImageFile(String filePath) { +// final image = decodeImage(File(filePath).readAsBytesSync()); +// if (image == null) { +// throw NoDecoderForImageFormatException(filePath); +// } +// return image; +// } diff --git a/lib/_xml_templates.dart b/lib/_xml_templates.dart new file mode 100644 index 0000000..b1fc07b --- /dev/null +++ b/lib/_xml_templates.dart @@ -0,0 +1,38 @@ +// const String icLauncherXml = ''' +// +// +// +// +// +// '''; + +// const String icLauncherRoundXml = ''' +// +// +// +// +// +// '''; + +// const String icLauncherMipMapXml = ''' +// +// +// +// +// +// '''; + +// const String icLauncherRoundMipMapXml = ''' +// +// +// +// +// +// '''; + +// const String colorsXml = ''' +// +// +// #FF000000 +// +// '''; diff --git a/lib/class/template.dart b/lib/class/template.dart new file mode 100644 index 0000000..4396b92 --- /dev/null +++ b/lib/class/template.dart @@ -0,0 +1,41 @@ +class AndroidMipMapIconTemplate { + AndroidMipMapIconTemplate({required this.directoryName, required this.size}); + + final String directoryName; + final int size; +} + +class IosIconTemplate { + IosIconTemplate({required this.size, required this.name}); + + final String name; + final int size; +} + +class WebIconTemplate { + WebIconTemplate({required this.size, required this.name}); + + final String name; + final int size; +} + +class MacOSIconTemplate { + MacOSIconTemplate({required this.size, required this.name}); + + final String name; + final int size; +} + +class WindowsIconTemplate { + WindowsIconTemplate({required this.size, required this.name}); + + final String name; + final int size; +} + +class LinuxIconTemplate { + LinuxIconTemplate({required this.size, required this.name}); + + final String name; + final int size; +} diff --git a/lib/cli_commands.dart b/lib/cli_commands.dart new file mode 100644 index 0000000..9bcd5b6 --- /dev/null +++ b/lib/cli_commands.dart @@ -0,0 +1,263 @@ +library icons_launcher_cli; + +import 'package:icons_launcher/utils/cli_logger.dart'; +import 'package:icons_launcher/utils/constants.dart'; +import 'package:image/image.dart'; +import 'package:path/path.dart' as p; +import 'package:universal_io/io.dart'; +import 'package:yaml/yaml.dart'; + +import 'class/template.dart'; +import 'utils/utils.dart'; + +part 'flavor_helper.dart'; +part 'src/android.dart'; +part 'src/ios.dart'; +part 'src/macos.dart'; +part 'src/web.dart'; +part 'src/windows.dart'; +part 'src/linux.dart'; + +late _FlavorHelper _flavorHelper; + +/// Create launcher icons +void createLauncherIcons({String? path, String? flavor}) { + if (flavor != null) { + print('📱 Flavor $flavor detected! (Android, iOS)'); + } + _flavorHelper = _FlavorHelper(flavor); + final config = _getConfig(configFile: path); + _checkConfig(config); + _createIconsByConfig(config); +} + +Map _getConfig({String? configFile}) { + String filePath; + if (configFile != null) { + if (File(configFile).existsSync()) { + filePath = configFile; + } else { + CliLogger.error('The config file `$configFile` was not found.'); + exit(1); + } + } else if (_flavorHelper.flavor != null) { + filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; + } else if (File('icons_launcher.yaml').existsSync()) { + filePath = 'icons_launcher.yaml'; + } else { + filePath = 'pubspec.yaml'; + } + + final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; + + if (yamlMap['icons_launcher'] is! Map) { + throw Exception( + "Your $filePath file does not contain a 'icons_launcher' section."); + } + + // yamlMap has the type YamlMap, which has several unwanted side effects + return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); +} + +Map _yamlToMap(YamlMap yamlMap) { + final Map map = {}; + for (final MapEntry entry in yamlMap.entries) { + if (entry.value is YamlList) { + final list = []; + for (final value in entry.value as YamlList) { + if (value is String) { + list.add(value); + } + } + map[entry.key as String] = list; + } else if (entry.value is YamlMap) { + map[entry.key as String] = _yamlToMap(entry.value as YamlMap); + } else { + map[entry.key as String] = entry.value; + } + } + return map; +} + +void _checkConfig(Map config) { + if (!hasPlatformConfig(config)) { + CliLogger.error('Please add a `platform` target to your config file.'); + exit(1); + } + + if (config.containsKey('adaptive_foreground_image') && + !config.containsKey('adaptive_background_image') && + !config.containsKey('adaptive_background_color')) { + CliLogger.error( + 'Please add an `adaptive_background_image` or `adaptive_background_color` to your config file.'); + exit(1); + } + + if (!config.containsKey('adaptive_foreground_image') && + (config.containsKey('adaptive_background_image') || + config.containsKey('adaptive_background_color'))) { + CliLogger.error( + 'Please add an `adaptive_foreground_image` to your config file.'); + exit(1); + } + + if (config.containsKey('adaptive_background_image') && + config.containsKey('adaptive_background_color')) { + CliLogger.error('Your `icons_launcher` section can not contain both a ' + '`adaptive_background_image` and `adaptive_background_color`.'); + exit(1); + } + + final imagePath = _checkImageExists(config: config, parameter: 'image_path'); + final imagePathAndroid = + _checkImageExists(config: config, parameter: 'image_path_android') ?? + imagePath; + final imagePathIos = + _checkImageExists(config: config, parameter: 'image_path_ios') ?? + imagePath; + final imagePathMacos = + _checkImageExists(config: config, parameter: 'image_path_macos') ?? + imagePath; + final imagePathWindows = + _checkImageExists(config: config, parameter: 'image_path_windows') ?? + imagePath; + final imagePathLinux = + _checkImageExists(config: config, parameter: 'image_path_linux') ?? + imagePath; + final imagePathWeb = + _checkImageExists(config: config, parameter: 'image_path_web') ?? + imagePath; + // final adaptiveIconBackground = + // _checkImageExists(config: config, parameter: 'adaptive_icon_background'); + // final adaptiveIconForeground = + // _checkImageExists(config: config, parameter: 'adaptive_icon_foreground'); + // final adaptiveIconRound = + // _checkImageExists(config: config, parameter: 'adaptive_icon_round'); + + final List errors = []; + if (isNeedingNewAndroidIcon(config) && imagePathAndroid == null) { + errors.add('Could not find image path for Android'); + } + if (isNeedingNewIOSIcon(config) && imagePathIos == null) { + errors.add('Could not find image path for iOS'); + } + if (isNeedingNewMacOSIcon(config) && imagePathMacos == null) { + errors.add('Could not find image path for macOS'); + } + if (isNeedingNewWindowsIcon(config) && imagePathWindows == null) { + errors.add('Could not find image path for Windows'); + } + if (isNeedingNewLinuxIcon(config) && imagePathLinux == null) { + errors.add('Could not find image path for Linux'); + } + if (isNeedingNewWebIcon(config) && imagePathWeb == null) { + errors.add('Could not find image path for Web'); + } + + if (errors.isNotEmpty) { + errors.forEach(CliLogger.error); + exit(1); + } +} + +void _createIconsByConfig(Map config) { + final imagePath = _checkImageExists(config: config, parameter: 'image_path'); + final imagePathAndroid = + _checkImageExists(config: config, parameter: 'image_path_android') ?? + imagePath; + final imagePathIos = + _checkImageExists(config: config, parameter: 'image_path_ios') ?? + imagePath; + final imagePathMacos = + _checkImageExists(config: config, parameter: 'image_path_macos') ?? + imagePath; + final imagePathWindows = + _checkImageExists(config: config, parameter: 'image_path_windows') ?? + imagePath; + final imagePathLinux = + _checkImageExists(config: config, parameter: 'image_path_linux') ?? + imagePath; + final imagePathWeb = + _checkImageExists(config: config, parameter: 'image_path_web') ?? + imagePath; + final adaptiveBgImage = + _checkImageExists(config: config, parameter: 'adaptive_background_image'); + final adaptiveFgImage = + _checkImageExists(config: config, parameter: 'adaptive_foreground_image'); + final adaptiveRoundImage = + _checkImageExists(config: config, parameter: 'adaptive_round_image'); + + //! Android + if (isNeedingNewAndroidIcon(config) && imagePathAndroid != null) { + _createAndroidIcons(imagePath: imagePathAndroid); + } + + String? adaptiveBg; + if (config.containsKey('adaptive_background_color')) { + adaptiveBg = config['adaptive_background_color']; + } else if (adaptiveBgImage != null) { + adaptiveBg = adaptiveBgImage; + } + + //! Android Adaptive + final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; + if (hasAndroidAdaptiveConfig(config) && isAdaptiveIconExists) { + _createAndroidAdaptiveIcon( + background: adaptiveBg, + foreground: adaptiveFgImage, + round: adaptiveRoundImage, + ); + } + + //! iOS + if (isNeedingNewIOSIcon(config) && imagePathIos != null) { + _createIosIcons(imagePath: imagePathIos); + } + + //! macOS + if (isNeedingNewMacOSIcon(config) && imagePathMacos != null) { + _createMacOSIcons(imagePath: imagePathMacos); + } + + //! Web + if (isNeedingNewWebIcon(config) && imagePathWeb != null) { + _createWebIcons(imagePath: imagePathWeb); + } + + //! Windows + if (isNeedingNewWindowsIcon(config) && imagePathWindows != null) { + _createWindowsIcons(imagePath: imagePathWindows); + } + + //! Linux + if (isNeedingNewLinuxIcon(config) && imagePathLinux != null) { + _createLinuxIcons(imagePath: imagePathLinux); + } +} + +String? _checkImageExists({ + required Map config, + required String parameter, +}) { + final String? image = config[parameter]?.toString(); + if (image != null) { + if (image.isNotEmpty && !File(image).existsSync()) { + CliLogger.error( + 'The file "$image" set as the parameter "$parameter" was not found.', + ); + exit(1); + } + + final imageExtension = p.extension(image).toLowerCase(); + if (imageExtension != '.png' && + imageExtension != '.jpg' && + imageExtension != '.jpeg') { + CliLogger.error( + 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', + ); + exit(1); + } + } + + return image == '' ? null : image; +} diff --git a/lib/constants.dart b/lib/constants.dart deleted file mode 100644 index da8432d..0000000 --- a/lib/constants.dart +++ /dev/null @@ -1,63 +0,0 @@ -const String flutterSdkGradleFile = - '/packages/flutter_tools/gradle/flutter.gradle'; -String androidMainFolder(String? flavor) => - "android/app/src/${flavor ?? 'main'}/"; -String androidResFolder(String? flavor) => - "android/app/src/${flavor ?? 'main'}/res/"; -String androidColorsFile(String? flavor) => - "android/app/src/${flavor ?? 'main'}/res/values/colors.xml"; -const String androidLocalProperties = 'android/local.properties'; -const String androidManifestFile = 'android/app/src/main/AndroidManifest.xml'; -const String androidGradleFile = 'android/app/build.gradle'; -const String androidFileName = 'ic_launcher.png'; -const String androidRoundFileName = 'ic_launcher_round.png'; -const String androidAdaptiveForegroundFileName = 'ic_launcher_foreground.png'; -const String androidAdaptiveBackgroundFileName = 'ic_launcher_background.png'; -const String androidPlayStoreFileName = 'ic_launcher-playstore.png'; -String androidAdaptiveXmlFolder(String? flavor) => - androidResFolder(flavor) + 'mipmap-anydpi-v26/'; -const String androidDefaultIconName = 'ic_launcher'; -const String androidDefaultRoundIconName = 'ic_launcher_round'; - -const String iosDefaultIconFolder = - 'ios/Runner/Assets.xcassets/AppIcon.appiconset/'; -const String iosAssetFolder = 'ios/Runner/Assets.xcassets/'; -const String iosConfigFile = 'ios/Runner.xcodeproj/project.pbxproj'; -const String iosDefaultIconName = 'Icon-App'; - -const String macosDefaultIconFolder = - 'macos/Runner/Assets.xcassets/AppIcon.appiconset/'; -const String macosAssetFolder = 'macos/Runner/Assets.xcassets/'; -const String macosConfigFile = 'macos/Runner.xcodeproj/project.pbxproj'; -const String macosDefaultIconName = 'app_icon'; - -const String windowsDefaultIconFolder = 'windows/runner/resources/'; -const String windowsDefaultIconName = 'app_icon'; - -const String linuxDefaultIconFolder = 'snap/gui/'; -const String linuxDefaultIconName = 'app_icon'; - -const String webDefaultFaviconFolder = 'web/'; -const String webDefaultIconFolder = 'web/icons/'; - -const String errorMissingImagePath = - 'Missing "image_path" or "image_path_android" + "image_path_ios" within configuration'; -const String errorMissingPlatform = - 'No platform specified within config to generate icons for.'; -const String errorMissingRegularAndroid = - 'Adaptive icon config found but no regular Android config. ' - 'Below API 26 the regular Android config is required'; -const String errorIncorrectIconName = - 'The icon name must contain only lowercase a-z, 0-9, or underscore: ' - 'E.g. "ic_my_new_icon"'; -const String errorMissingMinSdk = - 'Cannot not find minSdkVersion from android/app/build.gradle or android/local.properties' - 'Specify minSdkVersion in either android/app/build.gradle or android/local.properties'; - -String introMessage() { - return '''\n -═════════════════════════════════════════════ - ✨ ICONS LAUNCHER STARTING ✨ - v1.1.9 -═════════════════════════════════════════════\n'''; -} diff --git a/lib/custom_exceptions.dart b/lib/custom_exceptions.dart deleted file mode 100644 index ae9ac08..0000000 --- a/lib/custom_exceptions.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:icons_launcher/utils.dart'; - -class InvalidAndroidIconNameException implements Exception { - const InvalidAndroidIconNameException([this.message]); - final String? message; - - @override - String toString() { - return generateError(this, message); - } -} - -class InvalidConfigException implements Exception { - const InvalidConfigException([this.message]); - final String? message; - - @override - String toString() { - return generateError(this, message); - } -} - -class NoConfigFoundException implements Exception { - const NoConfigFoundException([this.message]); - final String? message; - - @override - String toString() { - return generateError(this, message); - } -} - -class NoDecoderForImageFormatException implements Exception { - const NoDecoderForImageFormatException([this.message]); - final String? message; - - @override - String toString() { - return generateError(this, message); - } -} diff --git a/lib/flavor_helper.dart b/lib/flavor_helper.dart new file mode 100644 index 0000000..7843f73 --- /dev/null +++ b/lib/flavor_helper.dart @@ -0,0 +1,138 @@ +part of icons_launcher_cli; + +class _FlavorHelper { + _FlavorHelper(this._flavor) { + if (_flavor != null) { + _androidResFolder = 'android/app/src/$_flavor/res/'; + _iOSFlavorName = _flavor!.capitalize(); + } else { + _androidResFolder = 'android/app/src/main/res/'; + _iOSFlavorName = ''; + } + } + + // Android related path values + final String? _flavor; + late String _androidResFolder; + + String? get flavor { + return _flavor; + } + + String get androidResFolder { + return _androidResFolder; + } + + String get androidDrawableFolder { + return '${_androidResFolder}drawable/'; + } + + String get androidNightDrawableFolder { + return '${_androidResFolder}drawable-night/'; + } + + String get androidLaunchBackgroundFile { + return '${androidDrawableFolder}launch_background.xml'; + } + + String get androidLaunchDarkBackgroundFile { + return '${androidNightDrawableFolder}launch_background.xml'; + } + + String get androidStylesFile { + return '${_androidResFolder}values/styles.xml'; + } + + String get androidNightStylesFile { + return '${_androidResFolder}values-night/styles.xml'; + } + + String get androidV31StylesFile { + return '${_androidResFolder}values-v31/styles.xml'; + } + + String get androidV31StylesNightFile { + return '${_androidResFolder}values-night-v31/styles.xml'; + } + + String get androidV21DrawableFolder { + return '${_androidResFolder}drawable-v21/'; + } + + String get androidV21LaunchBackgroundFile { + return '${androidV21DrawableFolder}launch_background.xml'; + } + + String get androidNightV21DrawableFolder { + return '${_androidResFolder}drawable-night-v21/'; + } + + String get androidV21LaunchDarkBackgroundFile { + return '${androidNightV21DrawableFolder}launch_background.xml'; + } + + String get androidManifestFile { + return 'android/app/src/main/AndroidManifest.xml'; + } + + // iOS related values + late String? _iOSFlavorName; + + String? get iOSFlavorName { + return _iOSFlavorName; + } + + String get iOSAssetsLaunchImageFolder { + return 'ios/Runner/Assets.xcassets/LaunchImage$_iOSFlavorName.imageset/'; + } + + String get iOSAssetsBrandingImageFolder { + return 'ios/Runner/Assets.xcassets/BrandingImage$_iOSFlavorName.imageset/'; + } + + String get iOSLaunchScreenStoryboardFile { + return 'ios/Runner/Base.lproj/$iOSLaunchScreenStoryboardName.storyboard'; + } + + String get iOSLaunchScreenStoryboardName { + return 'LaunchScreen$_iOSFlavorName'; + } + + String get iOSInfoPlistFile { + return 'ios/Runner/Info.plist'; + } + + String get iOSAssetsLaunchImageBackgroundFolder { + return 'ios/Runner/Assets.xcassets/LaunchBackground$_iOSFlavorName.imageset/'; + } + + String get iOSLaunchImageName { + if (_iOSFlavorName == null) { + return 'LaunchImage'; + } else { + return 'LaunchImage$_iOSFlavorName'; + } + } + + String get iOSBrandingImageName { + if (_iOSFlavorName == null) { + return 'BrandingImage'; + } else { + return 'BrandingImage$_iOSFlavorName'; + } + } + + String get iOSLaunchBackgroundName { + if (_iOSFlavorName == null) { + return 'LaunchBackground'; + } else { + return 'LaunchBackground$_iOSFlavorName'; + } + } +} + +extension StringExtension on String { + String capitalize() { + return '${this[0].toUpperCase()}${substring(1).toLowerCase()}'; + } +} diff --git a/lib/main.dart b/lib/main.dart deleted file mode 100644 index 35a9dc2..0000000 --- a/lib/main.dart +++ /dev/null @@ -1,292 +0,0 @@ -import 'package:args/args.dart'; -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/custom_exceptions.dart'; -import 'package:icons_launcher/src/android.dart' as android_icons_launcher; -import 'package:icons_launcher/src/ios.dart' as ios_icons_launcher; -import 'package:icons_launcher/src/linux.dart' as linux_icons_launcher; -import 'package:icons_launcher/src/macos.dart' as macos_icons_launcher; -import 'package:icons_launcher/src/web.dart' as web_icons_launcher; -import 'package:icons_launcher/src/windows.dart' as windows_icons_launcher; -import 'package:path/path.dart' as path; -import 'package:universal_io/io.dart'; -import 'package:yaml/yaml.dart'; - -const String fileOption = 'file'; -const String helpFlag = 'help'; -const String defaultConfigFile = 'icons_launcher.yaml'; -const String flavorConfigFilePattern = r'^icons_launcher-(.*).yaml$'; -String flavorConfigFile(String flavor) => 'icons_launcher-$flavor.yaml'; - -/// Returns a list of all the flavors found in the config file. -List getFlavors() { - final List flavors = []; - for (var item in Directory('.').listSync()) { - if (item is File) { - final name = path.basename(item.path); - final match = RegExp(flavorConfigFilePattern).firstMatch(name); - if (match != null) { - flavors.add(match.group(1)!); - } - } - } - return flavors; -} - -/// Creates icons from the arguments passed to the program. -Future createIconsFromArguments(List arguments) async { - print(introMessage()); - - final ArgParser parser = ArgParser(allowTrailingOptions: true); - parser.addFlag(helpFlag, abbr: 'h', help: 'Usage help', negatable: false); - // Make default null to differentiate when it is explicitly set - parser.addOption(fileOption, - abbr: 'f', help: 'Config file (default: $defaultConfigFile)'); - final ArgResults argResults = parser.parse(arguments); - - if (argResults[helpFlag]) { - stdout.writeln('Generates icons for iOS and Android'); - stdout.writeln(parser.usage); - exit(0); - } - - // Flavors management - final flavors = getFlavors(); - final hasFlavors = flavors.isNotEmpty; - - // Load the config file - final Map? yamlConfig = - loadConfigFileFromArgResults(argResults, verbose: true); - - if (yamlConfig == null) { - throw const NoConfigFoundException(); - } - - // Create icons - if (!hasFlavors) { - try { - await createIconsFromConfig(yamlConfig); - print('\n✓ Successfully generated launcher icons'); - } catch (e) { - stderr.writeln('\n✕ Could not generate launcher icons'); - stderr.writeln(e); - exit(2); - } - } else { - try { - for (String flavor in flavors) { - print('\nFlavor: $flavor'); - final Map yamlConfig = - loadConfigFile(flavorConfigFile(flavor), flavorConfigFile(flavor)); - await createIconsFromConfig(yamlConfig, flavor); - } - print('\n✓ Successfully generated launcher icons for flavors'); - } catch (e) { - stderr.writeln('\n✕ Could not generate launcher icons for flavors'); - stderr.writeln(e); - exit(2); - } - } -} - -/// Loads the config file from the arguments passed to the program. -/// Generate launcher icons base on config file. -Future createIconsFromConfig(Map config, - [String? flavor]) async { - if (!isImagePathInConfig(config)) { - throw const InvalidConfigException(errorMissingImagePath); - } - if (!hasPlatformConfig(config)) { - throw const InvalidConfigException(errorMissingPlatform); - } - - if (isNeedingNewAndroidIcon(config) || hasAndroidAdaptiveConfig(config)) { - final int minSdk = android_icons_launcher.minSdk(); - if (minSdk == 0) { - throw const InvalidConfigException(errorMissingMinSdk); - } - if (minSdk < 26 && - hasAndroidAdaptiveConfig(config) && - !hasAndroidConfig(config)) { - throw const InvalidConfigException(errorMissingRegularAndroid); - } - } - - if (isNeedingNewAndroidIcon(config)) { - android_icons_launcher.createDefaultIcons(config, flavor); - } - if (hasAndroidAdaptiveConfig(config)) { - android_icons_launcher.createAdaptiveIcons(config, flavor); - } - if (isNeedingNewIOSIcon(config)) { - ios_icons_launcher.createIcons(config, flavor); - } - - if (isNeedingNewMacOSIcon(config)) { - macos_icons_launcher.createIcons(config, flavor); - } - - if (isNeedingNewWindowsIcon(config)) { - windows_icons_launcher.createIcons(config, flavor); - } - - if (isNeedingNewLinuxIcon(config)) { - linux_icons_launcher.createIcons(config, flavor); - } - - if (isNeedingNewWebIcon(config)) { - web_icons_launcher.createIcons(config, flavor); - } -} - -/// Loads the config file from the arguments passed to the program. -Map? loadConfigFileFromArgResults(ArgResults argResults, - {bool verbose = false}) { - final String? configFile = argResults[fileOption]; - final String? fileOptionResult = argResults[fileOption]; - - // if icon is given, try to load icon - if (configFile != null && configFile != defaultConfigFile) { - try { - return loadConfigFile(configFile, fileOptionResult); - } catch (e) { - if (verbose) { - stderr.writeln(e); - } - - return null; - } - } - - // If none set try icons_launcher.yaml first then pubspec.yaml - // for compatibility - try { - return loadConfigFile(defaultConfigFile, fileOptionResult); - } catch (e) { - // Try pubspec.yaml for compatibility - if (configFile == null) { - try { - return loadConfigFile('pubspec.yaml', fileOptionResult); - } catch (_) {} - } - - // if nothing got returned, print error - if (verbose) { - stderr.writeln(e); - } - } - - return null; -} - -/// Load the config file from the given path. -Map loadConfigFile(String path, String? fileOptionResult) { - final File file = File(path); - final String yamlString = file.readAsStringSync(); - // ignore: always_specify_types - final Map yamlMap = loadYaml(yamlString); - - if (!(yamlMap['flutter_icons'] is Map)) { - stderr.writeln(NoConfigFoundException('Check that your config file ' - '`${fileOptionResult ?? defaultConfigFile}`' - ' has a `flutter_icons` section')); - exit(1); - } - - // yamlMap has the type YamlMap, which has several unwanted side effects - final Map config = {}; - for (MapEntry entry in yamlMap['flutter_icons'].entries) { - config[entry.key] = entry.value; - } - - return config; -} - -/// Checks if the config image path. -bool isImagePathInConfig(Map flutterIconsConfig) { - return flutterIconsConfig.containsKey('image_path') || - (flutterIconsConfig.containsKey('image_path_android') && - flutterIconsConfig.containsKey('image_path_ios')); -} - -/// Checks if the config platform. -bool hasPlatformConfig(Map flutterIconsConfig) { - return hasAndroidConfig(flutterIconsConfig) || - hasIOSConfig(flutterIconsConfig) || - hasMacOSConfig(flutterIconsConfig) || - hasWebConfig(flutterIconsConfig) || - hasWindowsConfig(flutterIconsConfig) || - hasLinuxConfig(flutterIconsConfig); -} - -/// Checks if the config has android. -bool hasAndroidConfig(Map iconsLauncher) { - return iconsLauncher.containsKey('android'); -} - -/// Checks if the config need android. -bool isNeedingNewAndroidIcon(Map iconsLauncherConfig) { - return hasAndroidConfig(iconsLauncherConfig) && - iconsLauncherConfig['android'] != false; -} - -/// Checks if the config has android adaptive. -bool hasAndroidAdaptiveConfig(Map iconsLauncherConfig) { - return isNeedingNewAndroidIcon(iconsLauncherConfig) && - iconsLauncherConfig.containsKey('adaptive_icon_background') && - iconsLauncherConfig.containsKey('adaptive_icon_foreground'); -} - -/// Checks if the config has ios. -bool hasIOSConfig(Map iconsLauncherConfig) { - return iconsLauncherConfig.containsKey('ios'); -} - -/// Checks if the config need ios. -bool isNeedingNewIOSIcon(Map iconsLauncherConfig) { - return hasIOSConfig(iconsLauncherConfig) && - iconsLauncherConfig['ios'] != false; -} - -/// Checks if the config has macos. -bool hasMacOSConfig(Map iconsLauncherConfig) { - return iconsLauncherConfig.containsKey('macos'); -} - -/// Checks if the config need macos. -bool isNeedingNewMacOSIcon(Map iconsLauncherConfig) { - return hasMacOSConfig(iconsLauncherConfig) && - iconsLauncherConfig['macos'] != false; -} - -/// Checks if the config has windows. -bool hasWindowsConfig(Map iconsLauncherConfig) { - return iconsLauncherConfig.containsKey('windows'); -} - -/// Checks if the config need windows. -bool isNeedingNewWindowsIcon(Map iconsLauncherConfig) { - return hasWindowsConfig(iconsLauncherConfig) && - iconsLauncherConfig['windows'] != false; -} - -/// Checks if the config has linux. -bool hasLinuxConfig(Map iconsLauncherConfig) { - return iconsLauncherConfig.containsKey('linux'); -} - -/// Checks if the config need linux. -bool isNeedingNewLinuxIcon(Map iconsLauncherConfig) { - return hasLinuxConfig(iconsLauncherConfig) && - iconsLauncherConfig['linux'] != false; -} - -/// Checks if the config has web. -bool hasWebConfig(Map iconsLauncherConfig) { - return iconsLauncherConfig.containsKey('web'); -} - -/// Checks if the config need linux. -bool isNeedingNewWebIcon(Map iconsLauncherConfig) { - return hasWebConfig(iconsLauncherConfig) && - iconsLauncherConfig['web'] != false; -} diff --git a/lib/src/android.dart b/lib/src/android.dart index 080c923..4093b43 100644 --- a/lib/src/android.dart +++ b/lib/src/android.dart @@ -1,546 +1,382 @@ -import 'package:icons_launcher/constants.dart' as constants; -import 'package:icons_launcher/custom_exceptions.dart'; -import 'package:icons_launcher/utils.dart'; -import 'package:icons_launcher/xml_templates.dart' as xml_template; -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; - -/// Class android icon template model -class AndroidIconTemplate { - AndroidIconTemplate({required this.size, required this.directoryName}); - - final String directoryName; - final int size; -} - -/// List of android adaptive icon templates -final List adaptiveForegroundIcons = [ - AndroidIconTemplate(directoryName: 'mipmap-mdpi', size: 108), - AndroidIconTemplate(directoryName: 'mipmap-hdpi', size: 162), - AndroidIconTemplate(directoryName: 'mipmap-xhdpi', size: 216), - AndroidIconTemplate(directoryName: 'mipmap-xxhdpi', size: 324), - AndroidIconTemplate(directoryName: 'mipmap-xxxhdpi', size: 432), +part of icons_launcher_cli; + +final androidIcons = [ + AndroidMipMapIconTemplate(directoryName: 'mipmap-mdpi', size: 48), + AndroidMipMapIconTemplate(directoryName: 'mipmap-hdpi', size: 72), + AndroidMipMapIconTemplate(directoryName: 'mipmap-xhdpi', size: 96), + AndroidMipMapIconTemplate(directoryName: 'mipmap-xxhdpi', size: 144), + AndroidMipMapIconTemplate(directoryName: 'mipmap-xxxhdpi', size: 192), ]; -/// List of android icon templates -List androidIcons = [ - AndroidIconTemplate(directoryName: 'mipmap-mdpi', size: 48), - AndroidIconTemplate(directoryName: 'mipmap-hdpi', size: 72), - AndroidIconTemplate(directoryName: 'mipmap-xhdpi', size: 96), - AndroidIconTemplate(directoryName: 'mipmap-xxhdpi', size: 144), - AndroidIconTemplate(directoryName: 'mipmap-xxxhdpi', size: 192), +final adaptiveIcons = [ + AndroidMipMapIconTemplate(directoryName: 'mipmap-mdpi', size: 108), + AndroidMipMapIconTemplate(directoryName: 'mipmap-hdpi', size: 162), + AndroidMipMapIconTemplate(directoryName: 'mipmap-xhdpi', size: 216), + AndroidMipMapIconTemplate(directoryName: 'mipmap-xxhdpi', size: 324), + AndroidMipMapIconTemplate(directoryName: 'mipmap-xxxhdpi', size: 432), ]; -/// Create default icons -void createDefaultIcons( - Map iconsLauncherConfig, String? flavor) { - printStatus('Creating default icons Android'); - final String filePath = getAndroidIconPath(iconsLauncherConfig); - final Image? image = decodeImageFile(filePath); +void _createAndroidIcons({required String imagePath}) { + CliLogger.info('Creating Android icons...'); + + final image = decodeImage(File(imagePath).readAsBytesSync()); if (image == null) { - return; + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); } - final File androidManifestFile = File(constants.androidManifestFile); - if (isCustomAndroidFile(iconsLauncherConfig)) { - printStatus('Adding a new Android launcher icon'); - final String iconName = getNewIconName(iconsLauncherConfig); - isAndroidIconNameCorrectFormat(iconName); - final String iconPath = '$iconName.png'; - for (AndroidIconTemplate template in androidIcons) { - saveNewImages(template, image, iconPath, flavor); - } - overwriteAndroidManifestWithNewIconLauncher(iconName, androidManifestFile); - if (isConfigAdaptiveRoundIcon(iconsLauncherConfig)) { - overwriteAndroidManifestWithNewRoundIconLauncher( - iconName, androidManifestFile); - } - } else { - printStatus( - 'Overwriting the default Android launcher icon with a new icon'); - for (AndroidIconTemplate template in androidIcons) { - overwriteExistingIcons( - template, image, constants.androidFileName, flavor); - } - overwriteAndroidManifestWithNewIconLauncher( - constants.androidDefaultIconName, androidManifestFile); - if (isConfigAdaptiveRoundIcon(iconsLauncherConfig)) { - overwriteAndroidManifestWithNewRoundIconLauncher( - constants.androidDefaultRoundIconName, androidManifestFile); - } + + for (final template in androidIcons) { + _saveImageAndroid(template, image, ANDROID_ICON_FILE_NAME); } - // Create play store icon - createPlayStoreIcon(image, flavor); - removeConflictDir(); + CliLogger.success( + 'Generated launcher icon images', + level: CliLoggerLevel.two, + ); + + _createPlayStoreIcon(image); + _updateAndroidManifestIconLauncher(); } -void removeConflictDir() { - try { - final dir = Directory('android/app/src/main/res/drawable-anydpi-v21'); - dir.deleteSync(recursive: true); - } catch (_) {} +void _saveImageAndroid( + AndroidMipMapIconTemplate template, + Image image, + String fileName, +) { + final resizedImage = createResizedImage(template.size, image); + + // When the flavor value is not specified we will place all the data inside the main directory. + // However if the flavor value is specified, we need to place the data in the correct directory. + // Default: android/app/src/main/res/ + // With a flavor: android/app/src/[flavor name]/res/ + final file = File( + '${_flavorHelper.androidResFolder}${template.directoryName}/$fileName', + ); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } -/// Create play store icon -void createPlayStoreIcon(Image image, String? flavor) { - final template = AndroidIconTemplate( - directoryName: constants.androidMainFolder(flavor), size: 512); - final Image newFile = createResizedImage(template.size, image); - File(template.directoryName + constants.androidPlayStoreFileName) - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); +void _createPlayStoreIcon(Image image) { + final template = AndroidMipMapIconTemplate( + directoryName: _flavorHelper.androidResFolder, + size: 512, + ); + final Image resizedImage = createResizedImage(template.size, image); + + final file = + File('${template.directoryName}/$ANDROID_PLAYSTORE_ICON_FILE_NAME'); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } -/// Ensures that the Android icon name is in the correct format -bool isAndroidIconNameCorrectFormat(String iconName) { - // assure the icon only consists of lowercase letters, numbers and underscore - if (!RegExp(r'^[a-z0-9_]+$').hasMatch(iconName)) { - throw const InvalidAndroidIconNameException( - constants.errorIncorrectIconName); - } - return true; +void _updateAndroidManifestIconLauncher() { + final androidManifestFile = File(ANDROID_MANIFEST_FILE); + final androidManifestString = androidManifestFile.readAsStringSync(); + final manifestLines = androidManifestString.split('\n'); + + final androidManifestUpdated = manifestLines.map((String line) { + if (line.contains('android:icon')) { + // Using RegExp replace the value of android:icon to point to the new icon + // anything but a quote of any length: [^"]* + // an escaped quote: \\" (escape slash, because it exists regex) + // quote, no quote / quote with things behind : \"[^"]* + // repeat as often as wanted with no quote at start: [^"]*(\"[^"]*)* + // escaping the slash to place in string: [^"]*(\\"[^"]*)*" + // result: any string which does only include escaped quotes + return line.replaceAll(RegExp(r'android:icon="[^"]*(\\"[^"]*)*"'), + 'android:icon="@mipmap/$ANDROID_ICON_NAME"'); + } else { + return line; + } + }).toList(); + + androidManifestFile.writeAsStringSync(androidManifestUpdated.join('\n')); + CliLogger.success( + 'Updated android manifest launcher icon', + level: CliLoggerLevel.two, + ); } -/// Create adaptive icons -void createAdaptiveIcons( - Map iconsLauncherConfig, String? flavor) { - printStatus('Creating adaptive icons Android'); - - // Retrieve the necessary launcher icons configuration from the pubspec.yaml file - final String backgroundConfig = - iconsLauncherConfig['adaptive_icon_background']; - final String foregroundImagePath = - iconsLauncherConfig['adaptive_icon_foreground']; - final String? roundImagePath = iconsLauncherConfig['adaptive_icon_round']; - final Image? foregroundImage = decodeImageFile(foregroundImagePath); - if (foregroundImage == null) { - return; +void _createAndroidAdaptiveIcon({ + required String background, + required String foreground, + String? round, +}) { + String message = 'Creating Android adaptive icons...'; + if (round != null) { + message = 'Creating Android adaptive icons with round...'; } + CliLogger.info(message); - // Create adaptive icon foreground images - for (AndroidIconTemplate androidIcon in adaptiveForegroundIcons) { - overwriteExistingIcons(androidIcon, foregroundImage, - constants.androidAdaptiveForegroundFileName, flavor); + _createAdaptiveForeground(adaptiveIcons, foreground); + _createAdaptiveBackground(adaptiveIcons, background); + if (round != null) { + _createAdaptiveRound(androidIcons, round); + } else { + _removeAndroidManifestIconLauncherRound(); } +} - // Create adaptive icon background - if (isAdaptiveIconConfigPngFile(backgroundConfig)) { - createAdaptiveBackgrounds(iconsLauncherConfig, backgroundConfig, flavor); +void _createAdaptiveBackground( + List adaptiveIcons, + String background, +) { + // Check background is hexa color or image + if (isValidHexaCode(background)) { + _handleColorsXmlFile(background); + _createIcLauncherColorXmlFile(); } else { - createAdaptiveIconMipMapXmlFile(iconsLauncherConfig, flavor); - if (isConfigAdaptiveRoundIcon(iconsLauncherConfig)) { - createAdaptiveRoundIconMipMapXmlFile(iconsLauncherConfig, flavor); - } - updateColorsXmlFile(backgroundConfig, flavor); - } + try { + final file = File(background).readAsBytesSync(); + final backgroundImage = decodeImage(file); + if (backgroundImage == null) { + CliLogger.error( + 'The file $background could not be read.', + level: CliLoggerLevel.two, + ); + exit(1); + } - if (roundImagePath != null) { - final Image? roundImage = decodeImageFile(roundImagePath); - if (roundImage != null) { - for (AndroidIconTemplate androidIcon in androidIcons) { - overwriteExistingRoundIcons( - androidIcon, roundImage, constants.androidRoundFileName, flavor); + for (final template in adaptiveIcons) { + _saveImageAndroid( + template, + backgroundImage, + ANDROID_ADAPTIVE_BACKGROUND_ICON_FILE_NAME, + ); } + CliLogger.success( + 'Generated adaptive background images', + level: CliLoggerLevel.two, + ); + _createIcLauncherMipMapXmlFile(); + } catch (e) { + CliLogger.error( + 'Incorrect `$background` of `adaptive_background_color` or `adaptive_background_image`', + level: CliLoggerLevel.two, + ); + exit(1); } } } -/// Retrieves the colors.xml file for the project. -/// -/// If the colors.xml file is found, it is updated with a new color item for the -/// adaptive icon background. -/// -/// If not, the colors.xml file is created and a color item for the adaptive icon -/// background is included in the new colors.xml file. -void updateColorsXmlFile(String backgroundConfig, String? flavor) { - final File colorsXml = File(constants.androidColorsFile(flavor)); - if (colorsXml.existsSync()) { - printStatus('Updating colors.xml with color for adaptive icon background'); - updateColorsFile(colorsXml, backgroundConfig); - } else { - printStatus('No colors.xml file found in your Android project'); - printStatus( - 'Creating colors.xml file and adding it to your Android project'); - createNewColorsFile(backgroundConfig, flavor); +void _createAdaptiveForeground( + List adaptiveIcons, + String foreground, +) { + final foregroundImage = decodeImage(File(foreground).readAsBytesSync()); + if (foregroundImage == null) { + CliLogger.error( + 'The file $foreground could not be read.', + level: CliLoggerLevel.two, + ); + exit(1); } -} -/// Creates the xml file required for the adaptive launcher icon -/// FILE LOCATED HERE: res/mipmap-anydpi/{icon-name-from-yaml-config}.xml -void createAdaptiveIconMipMapXmlFile( - Map iconsLauncherConfig, String? flavor) { - if (isCustomAndroidFile(iconsLauncherConfig)) { - File(constants.androidAdaptiveXmlFolder(flavor) + - getNewIconName(iconsLauncherConfig) + - '.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherXml); - }); - } else { - File(constants.androidAdaptiveXmlFolder(flavor) + - constants.androidDefaultIconName + - '.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherXml); - }); + for (final template in adaptiveIcons) { + _saveImageAndroid( + template, + foregroundImage, + ANDROID_ADAPTIVE_FOREGROUND_ICON_FILE_NAME, + ); } + CliLogger.success( + 'Generated adaptive foreground images', + level: CliLoggerLevel.two, + ); } -/// Creates the xml file for the adaptive launcher round icon -/// FILE LOCATED HERE: res/mipmap-anydpi/{icon-name-from-yaml-config}.xml -void createAdaptiveRoundIconMipMapXmlFile( - Map iconsLauncherConfig, String? flavor) { - if (isCustomAndroidFile(iconsLauncherConfig)) { - File(constants.androidAdaptiveXmlFolder(flavor) + - getNewIconName(iconsLauncherConfig) + - '_round.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherRoundXml); - }); - } else { - File(constants.androidAdaptiveXmlFolder(flavor) + - constants.androidDefaultIconName + - '_round.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherRoundXml); - }); +void _createAdaptiveRound( + List adaptiveIcons, + String round, +) { + final roundImage = decodeImage(File(round).readAsBytesSync()); + if (roundImage == null) { + CliLogger.error( + 'The file $round could not be read.', + level: CliLoggerLevel.two, + ); + exit(1); } -} -/// creates adaptive background using png image -void createAdaptiveBackgrounds(Map yamlConfig, - String adaptiveIconBackgroundImagePath, String? flavor) { - final String filePath = adaptiveIconBackgroundImagePath; - final Image? image = decodeImageFile(filePath); - if (image == null) { - return; + for (final template in adaptiveIcons) { + _saveImageAndroid( + template, + roundImage, + ANDROID_ADAPTIVE_ROUND_ICON_FILE_NAME, + ); } + CliLogger.success( + 'Generated adaptive round images', + level: CliLoggerLevel.two, + ); + _createIcLauncherRoundMipMapXmlFile(); + _createAndroidManifestIconLauncherRound(); +} - // creates a png image (ic_adaptive_background.png) for the adaptive icon background in each of the locations - // it is required - for (AndroidIconTemplate androidIcon in adaptiveForegroundIcons) { - saveNewImages(androidIcon, image, - constants.androidAdaptiveBackgroundFileName, flavor); +void _handleColorsXmlFile(String backgroundColor) { + final File colorsXml = + File('${_flavorHelper.androidResFolder}$ANDROID_COLOR_FILE'); + if (colorsXml.existsSync()) { + CliLogger.success( + 'Updated colors.xml with color `$backgroundColor`', + level: CliLoggerLevel.two, + ); + _updateColorsFile(colorsXml, backgroundColor); + } else { + CliLogger.success( + 'Created colors.xml with color `$backgroundColor`', + level: CliLoggerLevel.two, + ); + _createColorsFile(backgroundColor); } +} - // Creates the xml file required for the adaptive launcher icon - // FILE LOCATED HERE: res/mipmap-anydpi/{icon-name-from-yaml-config}.xml - if (isCustomAndroidFile(yamlConfig)) { - File(constants.androidAdaptiveXmlFolder(flavor) + - getNewIconName(yamlConfig) + - '.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherMipMapXml); - }); - - if (isConfigAdaptiveRoundIcon(yamlConfig)) { - File(constants.androidAdaptiveXmlFolder(flavor) + - getNewIconName(yamlConfig) + - '_round.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherRoundMipMapXml); - }); - } +void _createColorsFile(String backgroundColor) { + String color = backgroundColor; + + if ((color.length == 4 || color.length == 7) && color.length != 9) { + color = '#FF' + backgroundColor.replaceAll('#', ''); } else { - File(constants.androidAdaptiveXmlFolder(flavor) + - constants.androidDefaultIconName + - '.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherMipMapXml); - }); - if (isConfigAdaptiveRoundIcon(yamlConfig)) { - File(constants.androidAdaptiveXmlFolder(flavor) + - constants.androidDefaultIconName + - '_round.xml') - .create(recursive: true) - .then((File adaptiveIcon) { - adaptiveIcon.writeAsString(xml_template.icLauncherRoundMipMapXml); - }); - } + CliLogger.error( + 'Incorrect `$backgroundColor` of `adaptive_background_color`', + level: CliLoggerLevel.two, + ); + exit(1); } -} -/// Creates a colors.xml file if it was missing from android/app/src/main/res/values/colors.xml -void createNewColorsFile(String backgroundColor, String? flavor) { - File(constants.androidColorsFile(flavor)) - .create(recursive: true) - .then((File colorsFile) { - colorsFile.writeAsString(xml_template.colorsXml).then((File file) { - updateColorsFile(colorsFile, backgroundColor); - }); - }); + final file = File('${_flavorHelper.androidResFolder}$ANDROID_COLOR_FILE'); + file.createSync(recursive: true); + file.writeAsStringSync(getColorXmlContent(color)); } -/// Updates the colors.xml with the new adaptive launcher icon color -void updateColorsFile(File colorsFile, String backgroundColor) { - // Write foreground color - final List lines = colorsFile.readAsLinesSync(); +void _updateColorsFile(File colorsXml, String backgroundColor) { + String color = backgroundColor; + + if ((color.length == 4 || color.length == 7) && color.length != 9) { + color = '#FF' + backgroundColor.replaceAll('#', ''); + } else { + CliLogger.error( + 'Incorrect `$backgroundColor` of `adaptive_background_color`', + level: CliLoggerLevel.two, + ); + exit(1); + } + + final List lines = colorsXml.readAsLinesSync(); bool foundExisting = false; for (int x = 0; x < lines.length; x++) { String line = lines[x]; if (line.contains('name="ic_launcher_background"')) { foundExisting = true; // replace anything between tags which does not contain another tag - line = line.replaceAll(RegExp(r'>([^><]*)<'), '>$backgroundColor<'); + line = line.replaceAll(RegExp(r'>([^><]*)<'), '>${color.toUpperCase()}<'); lines[x] = line; break; } } - // Add new line if we didn't find an existing value if (!foundExisting) { lines.insert(lines.length - 1, - '\t$backgroundColor'); + '\t${color.toUpperCase()}'); } - - colorsFile.writeAsStringSync(lines.join('\n')); + colorsXml.writeAsStringSync(lines.join('\n')); } -/// Check to see if specified Android config is a string or bool -/// String - Generate new launcher icon with the string specified -/// bool - override the default flutter project icon -bool isCustomAndroidFile(Map config) { - final dynamic androidConfig = config['android']; - return androidConfig is String; +void _createIcLauncherColorXmlFile() { + final icLauncherXml = File( + '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_XML_FILE_NAME'); + icLauncherXml.createSync(recursive: true); + icLauncherXml.writeAsStringSync(IC_LAUNCHER_BACKGROUND_COLOR_XML); + CliLogger.success( + 'Created `$ANDROID_ADAPTIVE_XML_FILE_NAME`', + level: CliLoggerLevel.two, + ); } -/// Check to see if specified Android adaptive round icon -bool isConfigAdaptiveRoundIcon(Map config) { - final String? roundImagePath = config['adaptive_icon_round']; - return roundImagePath != null; +void _createIcLauncherMipMapXmlFile() { + final icLauncherXml = File( + '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_XML_FILE_NAME'); + icLauncherXml.createSync(recursive: true); + icLauncherXml.writeAsStringSync(IC_LAUNCHER_MIP_MAP_XML); + CliLogger.success( + 'Created `$ANDROID_ADAPTIVE_XML_FILE_NAME`', + level: CliLoggerLevel.two, + ); } -/// return the new launcher icon file name -String getNewIconName(Map config) { - return config['android']; +// void _createIcLauncherRoundColorXmlFile() { +// final icLauncherXml = File( +// '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME'); +// icLauncherXml.createSync(recursive: true); +// icLauncherXml.writeAsStringSync(IC_LAUNCHER_ROUND_BACKGROUND_COLOR_XML); +// CliLogger.success( +// 'Created `$ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME`', +// level: CliLoggerLevel.two, +// ); +// } + +void _createIcLauncherRoundMipMapXmlFile() { + final icLauncherXml = File( + '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME'); + icLauncherXml.createSync(recursive: true); + icLauncherXml.writeAsStringSync(IC_LAUNCHER_ROUND_MIP_MAP_XML); + CliLogger.success( + 'Created `$ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME`', + level: CliLoggerLevel.two, + ); } -/// Overrides the existing launcher icons in the project -/// Note: Do not change interpolation unless you end up with better results (see issue for result when using cubic -/// interpolation) -void overwriteExistingIcons( - AndroidIconTemplate template, - Image image, - String filename, - String? flavor, -) { - final Image newFile = createResizedImage(template.size, image); - File(constants.androidResFolder(flavor) + - template.directoryName + - '/' + - filename) - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); -} - -/// Overrides the existing launcher round icons in the project -/// Note: Do not change interpolation unless you end up with better results (see issue for result when using cubic -/// interpolation) -void overwriteExistingRoundIcons( - AndroidIconTemplate template, - Image image, - String filename, - String? flavor, -) { - final Image newFile = createResizedImage(template.size, image); - File(constants.androidResFolder(flavor) + - template.directoryName + - '/' + - filename) - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); -} - -/// Saves new launcher icons to the project, keeping the old launcher icons. -/// Note: Do not change interpolation unless you end up with better results -void saveNewImages(AndroidIconTemplate template, Image image, - String iconFilePath, String? flavor) { - final Image newFile = createResizedImage(template.size, image); - File(constants.androidResFolder(flavor) + - template.directoryName + - '/' + - iconFilePath) - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); -} - -/// Updates the line which specifies the launcher icon within the AndroidManifest.xml -/// with the new icon name (only if it has changed) -/// -/// Note: default iconName = "ic_launcher" -Future overwriteAndroidManifestWithNewIconLauncher( - String iconName, File androidManifestFile) async { - // we do not use `file.readAsLinesSync()` here because that always gets rid of the last empty newline - final List oldManifestLines = - (await androidManifestFile.readAsString()).split('\n'); - final List transformedLineIcon = - transformAndroidManifestWithNewIconLauncher(oldManifestLines, iconName); - await androidManifestFile.writeAsString(transformedLineIcon.join('\n')); -} - -/// Updates only the line containing android:icon with the specified iconName -List transformAndroidManifestWithNewIconLauncher( - List oldManifestLines, String iconName) { - return oldManifestLines.map((String line) { - if (line.contains('android:icon')) { - // Using RegExp replace the value of android:icon to point to the new icon - // anything but a quote of any length: [^"]* - // an escaped quote: \\" (escape slash, because it exists regex) - // quote, no quote / quote with things behind : \"[^"]* - // repeat as often as wanted with no quote at start: [^"]*(\"[^"]*)* - // escaping the slash to place in string: [^"]*(\\"[^"]*)*" - // result: any string which does only include escaped quotes - return line.replaceAll(RegExp(r'android:icon="[^"]*(\\"[^"]*)*"'), - 'android:icon="@mipmap/$iconName"'); - } else { - return line; - } - }).toList(); -} - -/// Updates the line which specifies the launcher round icon within the AndroidManifest.xml -/// with the new icon name (only if it has changed) -/// -/// Note: default iconName = "ic_launcher_round" -Future overwriteAndroidManifestWithNewRoundIconLauncher( - String iconName, File androidManifestFile) async { - // we do not use `file.readAsLinesSync()` here because that always gets rid of the last empty newline - final List oldManifestLines = - (await androidManifestFile.readAsString()).split('\n'); - final List transformedLineIconRound = - transformAndroidManifestWithNewRoundIconLauncher( - oldManifestLines, iconName); - await androidManifestFile.writeAsString(transformedLineIconRound.join('\n')); -} - -/// Updates only the line containing android:roundIcon with the specified iconName -List transformAndroidManifestWithNewRoundIconLauncher( - List oldManifestLines, String iconName) { - bool isRoundIconExisting = false; - final newManifest = oldManifestLines.map((String line) { - if (line.contains('android:roundIcon')) { - // Using RegExp replace the value of android:roundIcon to point to the new icon - // anything but a quote of any length: [^"]* - // an escaped quote: \\" (escape slash, because it exists regex) - // quote, no quote / quote with things behind : \"[^"]* - // repeat as often as wanted with no quote at start: [^"]*(\"[^"]*)* - // escaping the slash to place in string: [^"]*(\\"[^"]*)*" - // result: any string which does only include escaped quotes - isRoundIconExisting = true; - return line.replaceAll(RegExp(r'android:roundIcon="[^"]*(\\"[^"]*)*"'), - 'android:roundIcon="@mipmap/$iconName"'); - } else { - return line; - } - }).toList(); - - if (isRoundIconExisting) { - return newManifest; +void _createAndroidManifestIconLauncherRound() { + final androidManifestFile = File(ANDROID_MANIFEST_FILE); + final androidManifestString = androidManifestFile.readAsStringSync(); + final manifestLines = androidManifestString.split('\n'); + + final index = + manifestLines.indexWhere((line) => line.contains('android:roundIcon')); + if (index != -1) { + final lineUpdated = manifestLines.elementAt(index).replaceAll( + RegExp(r'android:roundIcon="[^"]*(\\"[^"]*)*"'), + 'android:roundIcon="@mipmap/$ANDROID_ADAPTIVE_ROUND_ICON_NAME"', + ); + manifestLines.replaceRange(index, index + 1, [lineUpdated]); + androidManifestFile.writeAsStringSync(manifestLines.join('\n')); + CliLogger.success( + 'Updated `android:roundIcon` to manifest', + level: CliLoggerLevel.two, + ); } else { - print('Adding android:roundIcon to manifest'); - return oldManifestLines.map((String line) { - if (line.contains('android:icon')) { - final addLines = - '''android:icon="@mipmap/${constants.androidDefaultIconName}" - android:roundIcon="@mipmap/$iconName"'''; - return line.replaceAll( - RegExp(r'android:icon="[^"]*(\\"[^"]*)*"'), addLines); - } else { - return line; - } - }).toList(); - } -} - -/// File reader -List readFileLinesSync(String file) => File(file).readAsLinesSync(); - -/// Retrieves the flutter sdk path -String flutterSdk() { - final lines = readFileLinesSync(constants.androidLocalProperties); - const key = 'flutter.sdk='; - for (String line in lines) { - if (line.contains(key)) { - // Remove the key and return the flutter sdk path - return line.replaceAll(key, '').trim(); + final index = + manifestLines.indexWhere((line) => line.contains('android:icon')); + if (index != -1) { + final lineUpdated = manifestLines + .elementAt(index) + .replaceAll(RegExp(r'android:icon="[^"]*(\\"[^"]*)*"'), ''' +android:icon="@mipmap/$ANDROID_ICON_NAME" +\t\tandroid:roundIcon="@mipmap/$ANDROID_ADAPTIVE_ROUND_ICON_NAME"'''); + + manifestLines.replaceRange(index, index + 1, [lineUpdated]); + androidManifestFile.writeAsStringSync(manifestLines.join('\n')); + CliLogger.success( + 'Updated `android:roundIcon` to manifest', + level: CliLoggerLevel.two, + ); } } - return ''; } -/// Retrieves the string number only -String? getLineValueNumber(List lines, String key) { - for (String line in lines) { - if (line.contains(key)) { - final value = line.replaceAll(RegExp(r'[^\d]'), '').trim(); - if (value.isNotEmpty) { - return value; - } - } +void _removeAndroidManifestIconLauncherRound() { + final androidManifestFile = File(ANDROID_MANIFEST_FILE); + final androidManifestString = androidManifestFile.readAsStringSync(); + final manifestLines = androidManifestString.split('\n'); + + final index = + manifestLines.indexWhere((line) => line.contains('android:roundIcon')); + if (index != -1) { + final lineUpdated = manifestLines + .elementAt(index) + .replaceAll(RegExp(r'android:roundIcon="[^"]*(\\"[^"]*)*"'), ''); + manifestLines.replaceRange(index, index + 1, [lineUpdated]); + androidManifestFile.writeAsStringSync(manifestLines.join('\n')); + print(' ⚡ Removed `android:roundIcon` from manifest'); } - return null; -} - -/// Retrieves the minSdk value from the Android build.gradle file -int minSdk() { - String? minSdkValue; - - final File androidGradleFile = File(constants.androidGradleFile); - final androidLines = androidGradleFile.readAsLinesSync(); - - //! First try -> app/build.gradle file - const androidLineKey = 'minSdkVersion'; - minSdkValue = getLineValueNumber(androidLines, androidLineKey); - - //! Second try -> local.properties - if (minSdkValue == null) { - final localLines = readFileLinesSync(constants.androidLocalProperties); - const localKey = 'flutter.minSdkVersion='; - minSdkValue = getLineValueNumber(localLines, localKey); - } - - //! Third try -> flutter.gradle file (default flutter sdk) - if (minSdkValue == null) { - final gradleFile = '${flutterSdk()}${constants.flutterSdkGradleFile}'; - final List flutterLines = readFileLinesSync(gradleFile); - const flutterLineKey = 'minSdkVersion ='; - minSdkValue = getLineValueNumber(flutterLines, flutterLineKey); - } - - return int.tryParse(minSdkValue ?? '0') ?? 0; -} - -/// Method for the retrieval of the Android icon path -/// If image_path_android is found, this will be priorities over the image_path -/// value. -String getAndroidIconPath(Map config) { - return config['image_path_android'] ?? config['image_path']; -} - -/// Returns true if the adaptive icon configuration is a PNG image -bool isAdaptiveIconConfigPngFile(String backgroundFile) { - return backgroundFile.endsWith('.png'); -} - -/// (NOTE THIS IS JUST USED FOR UNIT TEST) -/// Ensures the correct path is used for generating adaptive icons -/// "Next you must create alternative drawable resources in your app for use with -/// Android 8.0 (API level 26) in res/mipmap-anydpi/ic_launcher.xml" -/// Source: https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive -bool isCorrectMipMapDirectoryForAdaptiveIcon(String path) { - return path == 'android/app/src/main/res/mipmap-anydpi-v26/'; } diff --git a/lib/src/ios.dart b/lib/src/ios.dart index 1cf5641..8b8c3fb 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -1,372 +1,50 @@ -import 'dart:convert'; -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/utils.dart'; -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; +part of icons_launcher_cli; -/// File to handle the creation of icons for iOS platform -class IosIconTemplate { - IosIconTemplate({required this.size, required this.name}); +void _createIosIcons({required String imagePath}) { + CliLogger.info('Creating iOS icons...'); - final String name; - final int size; -} - -/// List of icons to create -List iosIcons = [ - IosIconTemplate(name: '-20x20@1x', size: 20), - IosIconTemplate(name: '-20x20@2x', size: 40), - IosIconTemplate(name: '-20x20@3x', size: 60), - IosIconTemplate(name: '-29x29@1x', size: 29), - IosIconTemplate(name: '-29x29@2x', size: 58), - IosIconTemplate(name: '-29x29@3x', size: 87), - IosIconTemplate(name: '-40x40@1x', size: 40), - IosIconTemplate(name: '-40x40@2x', size: 80), - IosIconTemplate(name: '-40x40@3x', size: 120), - IosIconTemplate(name: '-50x50@1x', size: 50), - IosIconTemplate(name: '-50x50@2x', size: 100), - IosIconTemplate(name: '-57x57@1x', size: 57), - IosIconTemplate(name: '-57x57@2x', size: 114), - IosIconTemplate(name: '-60x60@2x', size: 120), - IosIconTemplate(name: '-60x60@3x', size: 180), - IosIconTemplate(name: '-72x72@1x', size: 72), - IosIconTemplate(name: '-72x72@2x', size: 144), - IosIconTemplate(name: '-76x76@1x', size: 76), - IosIconTemplate(name: '-76x76@2x', size: 152), - IosIconTemplate(name: '-83.5x83.5@2x', size: 167), - IosIconTemplate(name: '-1024x1024@1x', size: 1024), -]; - -/// Create the icons -void createIcons(Map config, String? flavor) { - final String filePath = config['image_path_ios'] ?? config['image_path']; - // decodeImageFile shows error message if null - // so can return here if image is null - final Image? image = decodeImage(File(filePath).readAsBytesSync()); + final image = decodeImage(File(imagePath).readAsBytesSync()); if (image == null) { - return; - } - if (config['remove_alpha_ios'] is bool && config['remove_alpha_ios']) { - image.channels = Channels.rgb; - } - if (image.channels == Channels.rgba) { - print( - '\nWARNING: Icons with alpha channel are not allowed in the Apple App Store.\nSet "remove_alpha_ios: true" to remove it.\n'); - } - String iconName; - final dynamic iosConfig = config['ios']; - if (flavor != null) { - final String catalogName = 'AppIcon-$flavor'; - printStatus('Building iOS launcher icon for $flavor'); - for (IosIconTemplate template in iosIcons) { - saveNewIcons(template, image, catalogName); - } - iconName = iosDefaultIconName; - changeIosIconLauncher(catalogName, flavor); - modifyContentsFile(catalogName); - } else if (iosConfig is String) { - // If the IOS configuration is a string then the user has specified a new icon to be created - // and for the old icon file to be kept - final String newIconName = iosConfig; - printStatus('Adding new iOS launcher icon'); - for (IosIconTemplate template in iosIcons) { - saveNewIcons(template, image, newIconName); - } - iconName = newIconName; - changeIosIconLauncher(iconName, flavor); - modifyContentsFile(iconName); - } - // Otherwise the user wants the new icon to use the default icons name and - // update config file to use it - else { - printStatus('Overwriting default iOS launcher icon with new icon'); - for (IosIconTemplate template in iosIcons) { - overwriteDefaultIcons(template, image); - } - iconName = iosDefaultIconName; - changeIosIconLauncher('AppIcon', flavor); - } -} - -/// Note: Do not change interpolation unless you end up with better results (see issue for result when using cubic -/// interpolation) -void overwriteDefaultIcons(IosIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(iosDefaultIconFolder + iosDefaultIconName + template.name + '.png') - ..writeAsBytesSync(encodePng(newFile)); -} - -/// Note: Do not change interpolation unless you end up with better results (see issue for result when using cubic -/// interpolation) -void saveNewIcons(IosIconTemplate template, Image image, String newIconName) { - final String newIconFolder = iosAssetFolder + newIconName + '.appiconset/'; - final Image newFile = createResizedImage(template, image); - File(newIconFolder + newIconName + template.name + '.png') - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); -} - -/// Create a resized image -Image createResizedImage(IosIconTemplate template, Image image) { - if (image.width >= template.size) { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.average); - } else { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.linear); - } -} - -/// Change the launcher icon to use the new icon -Future changeIosIconLauncher(String iconName, String? flavor) async { - final File iOSConfigFile = File(iosConfigFile); - final List lines = await iOSConfigFile.readAsLines(); - - bool onConfigurationSection = false; - String? currentConfig; - - for (int x = 0; x < lines.length; x++) { - final String line = lines[x]; - if (line.contains('/* Begin XCBuildConfiguration section */')) { - onConfigurationSection = true; - } - if (line.contains('/* End XCBuildConfiguration section */')) { - onConfigurationSection = false; - } - if (onConfigurationSection) { - final match = RegExp('.*/\\* (.*)\.xcconfig \\*/;').firstMatch(line); - if (match != null) { - currentConfig = match.group(1); - } - - if (currentConfig != null && - (flavor == null || currentConfig.contains('-$flavor')) && - line.contains('ASSETCATALOG')) { - lines[x] = line.replaceAll(RegExp('\=(.*);'), '= $iconName;'); - } - } - } - - final String entireFile = '${lines.join('\n')}\n'; - await iOSConfigFile.writeAsString(entireFile); -} - -/// Create the Contents.json file -void modifyContentsFile(String newIconName) { - final String newIconFolder = - iosAssetFolder + newIconName + '.appiconset/Contents.json'; - File(newIconFolder).create(recursive: true).then((File contentsJsonFile) { - final String contentsFileContent = - generateContentsFileAsString(newIconName); - contentsJsonFile.writeAsString(contentsFileContent); - }); -} - -/// Generate the Contents json file -String generateContentsFileAsString(String newIconName) { - final Map contentJson = { - 'images': createImageList(newIconName), - 'info': ContentsInfoObject(version: 1, author: 'xcode').toJson() - }; - return json.encode(contentJson); -} - -class ContentsImageObject { - ContentsImageObject({ - required this.size, - required this.idiom, - required this.filename, - required this.scale, - }); - - final String size; - final String idiom; - final String filename; - final String scale; + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); + } + + final iosIcons = [ + IosIconTemplate(name: '-20x20@1x', size: 20), + IosIconTemplate(name: '-20x20@2x', size: 40), + IosIconTemplate(name: '-20x20@3x', size: 60), + IosIconTemplate(name: '-29x29@1x', size: 29), + IosIconTemplate(name: '-29x29@2x', size: 58), + IosIconTemplate(name: '-29x29@3x', size: 87), + IosIconTemplate(name: '-40x40@1x', size: 40), + IosIconTemplate(name: '-40x40@2x', size: 80), + IosIconTemplate(name: '-40x40@3x', size: 120), + IosIconTemplate(name: '-50x50@1x', size: 50), + IosIconTemplate(name: '-50x50@2x', size: 100), + IosIconTemplate(name: '-57x57@1x', size: 57), + IosIconTemplate(name: '-57x57@2x', size: 114), + IosIconTemplate(name: '-60x60@2x', size: 120), + IosIconTemplate(name: '-60x60@3x', size: 180), + IosIconTemplate(name: '-72x72@1x', size: 72), + IosIconTemplate(name: '-72x72@2x', size: 144), + IosIconTemplate(name: '-76x76@1x', size: 76), + IosIconTemplate(name: '-76x76@2x', size: 152), + IosIconTemplate(name: '-83.5x83.5@2x', size: 167), + IosIconTemplate(name: '-1024x1024@1x', size: 1024), + ]; - Map toJson() { - return { - 'size': size, - 'idiom': idiom, - 'filename': filename, - 'scale': scale - }; + for (final template in iosIcons) { + _saveImageIos(template, image); } -} -class ContentsInfoObject { - ContentsInfoObject({required this.version, required this.author}); - - final int version; - final String author; - - Map toJson() { - return { - 'version': version, - 'author': author, - }; - } + CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } -/// Create the image list -List> createImageList(String fileNamePrefix) { - final List> imageList = >[ - ContentsImageObject( - size: '20x20', - idiom: 'iphone', - filename: '$fileNamePrefix-20x20@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '20x20', - idiom: 'iphone', - filename: '$fileNamePrefix-20x20@3x.png', - scale: '3x') - .toJson(), - ContentsImageObject( - size: '29x29', - idiom: 'iphone', - filename: '$fileNamePrefix-29x29@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '29x29', - idiom: 'iphone', - filename: '$fileNamePrefix-29x29@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '29x29', - idiom: 'iphone', - filename: '$fileNamePrefix-29x29@3x.png', - scale: '3x') - .toJson(), - ContentsImageObject( - size: '40x40', - idiom: 'iphone', - filename: '$fileNamePrefix-40x40@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '40x40', - idiom: 'iphone', - filename: '$fileNamePrefix-40x40@3x.png', - scale: '3x') - .toJson(), - ContentsImageObject( - size: '50x50', - idiom: 'iphone', - filename: '$fileNamePrefix-50x50@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '50x50', - idiom: 'iphone', - filename: '$fileNamePrefix-50x50@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '57x57', - idiom: 'iphone', - filename: '$fileNamePrefix-57x57@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '57x57', - idiom: 'iphone', - filename: '$fileNamePrefix-57x57@3x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '60x60', - idiom: 'iphone', - filename: '$fileNamePrefix-60x60@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '60x60', - idiom: 'iphone', - filename: '$fileNamePrefix-60x60@3x.png', - scale: '3x') - .toJson(), - ContentsImageObject( - size: '20x20', - idiom: 'ipad', - filename: '$fileNamePrefix-20x20@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '20x20', - idiom: 'ipad', - filename: '$fileNamePrefix-20x20@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '29x29', - idiom: 'ipad', - filename: '$fileNamePrefix-29x29@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '29x29', - idiom: 'ipad', - filename: '$fileNamePrefix-29x29@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '40x40', - idiom: 'ipad', - filename: '$fileNamePrefix-40x40@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '40x40', - idiom: 'ipad', - filename: '$fileNamePrefix-40x40@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '72x72', - idiom: 'ipad', - filename: '$fileNamePrefix-72x72@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '72x72', - idiom: 'ipad', - filename: '$fileNamePrefix-72x72@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '76x76', - idiom: 'ipad', - filename: '$fileNamePrefix-76x76@1x.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '76x76', - idiom: 'ipad', - filename: '$fileNamePrefix-76x76@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '83.5x83.5', - idiom: 'ipad', - filename: '$fileNamePrefix-83.5x83.5@2x.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '1024x1024', - idiom: 'ios-marketing', - filename: '$fileNamePrefix-1024x1024@1x.png', - scale: '1x') - .toJson() - ]; - return imageList; +void _saveImageIos(IosIconTemplate template, Image image) { + final resizedImage = createResizedImage(template.size, image); + final file = + File('$IOS_DEFAULT_ICON_DIR$IOS_DEFAULT_ICON_NAME${template.name}.png'); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } diff --git a/lib/src/linux.dart b/lib/src/linux.dart index 47e718b..972c152 100644 --- a/lib/src/linux.dart +++ b/lib/src/linux.dart @@ -1,109 +1,48 @@ -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/utils.dart'; -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; +part of icons_launcher_cli; -/// File to handle the creation of icons for Linux platform -class LinuxIconTemplate { - LinuxIconTemplate({required this.size, required this.name}); +void _createLinuxIcons({required String imagePath}) { + CliLogger.info('Creating Linux icons...'); - final String name; - final int size; -} - -/// List of icons to create -List linuxIcons = [ - LinuxIconTemplate(name: linuxDefaultIconName, size: 256), -]; - -/// Create the resized icons -Image createResizedImage(LinuxIconTemplate template, Image image) { - if (image.width >= template.size) { - return copyResize( - image, - width: template.size, - height: template.size, - interpolation: Interpolation.average, - ); - } else { - return copyResize( - image, - width: template.size, - height: template.size, - interpolation: Interpolation.linear, - ); + final image = decodeImage(File(imagePath).readAsBytesSync()); + if (image == null) { + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); } -} -/// Override the default icon -void overwriteDefaultIcons(LinuxIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(linuxDefaultIconFolder + template.name + '.png') - ..writeAsBytesSync(encodePng(newFile)); -} + final template = LinuxIconTemplate(name: LINUX_DEFAULT_ICON_NAME, size: 256); + _saveImageLinux(template, image, LINUX_DEFAULT_ICON_FILE_NAME); -/// Save the icons -void saveNewIcons(LinuxIconTemplate template, Image image, - {String? newIconName}) { - final Image newFile = createResizedImage(template, image); - final iconName = newIconName ?? template.name; - File(linuxDefaultIconFolder + iconName + '.png') - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); -} + CliLogger.success('Generated app icon image', level: CliLoggerLevel.two); -/// Create the icons -void createIcons(Map config, String? flavor) { - final String filePath = config['image_path_linux'] ?? config['image_path']; - // decodeImageFile shows error message if null - // so can return here if image is null - final Image? image = decodeImage(File(filePath).readAsBytesSync()); - if (image == null) { - return; - } + _createLinuxDesktopFile(); + CliLogger.success('Created desktop entry file', level: CliLoggerLevel.two); +} - final dynamic linuxConfig = config['linux']; - if (flavor != null) { - final String catalogName = 'AppIcon-$flavor'; - printStatus('Building Linux launcher icon for $flavor'); - for (LinuxIconTemplate template in linuxIcons) { - saveNewIcons(template, image, newIconName: catalogName); - } - } else if (linuxConfig is String) { - // If the Linux configuration is a string then the user has specified a new icon to be created - // and for the old icon file to be kept - final String newIconName = linuxConfig; - printStatus('Adding new linux launcher icon'); - for (LinuxIconTemplate template in linuxIcons) { - saveNewIcons(template, image, newIconName: newIconName); - } - } else { - printStatus('Adding new linux launcher icon'); - for (LinuxIconTemplate template in linuxIcons) { - saveNewIcons(template, image); - } - } - createDesktopFile(); +void _saveImageLinux( + LinuxIconTemplate template, + Image image, + String fileName, +) { + final resizedImage = createResizedImage(template.size, image); + final file = File('$LINUX_DEFAULT_ICON_DIR$fileName'); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } -/// Create the .desktop extension file -void createDesktopFile() { +void _createLinuxDesktopFile() { const String desktopFile = ''' [Desktop Entry] Name=Flutter Linux App Comment=Flutter Linux launcher icon -Exec=$linuxDefaultIconName -Icon=$linuxDefaultIconName.png +Exec=$LINUX_DEFAULT_ICON_NAME +Icon=$LINUX_DEFAULT_ICON_FILE_NAME Terminal=false Type=Application Categories=Entertainment; '''; - File(linuxDefaultIconFolder + linuxDefaultIconName + '.desktop') - .create(recursive: true) - .then((File file) { - file.writeAsStringSync(desktopFile); - }); + final file = File('$LINUX_DEFAULT_ICON_DIR$LINUX_DEFAULT_ICON_NAME.desktop'); + file.createSync(recursive: true); + file.writeAsStringSync(desktopFile); } diff --git a/lib/src/macos.dart b/lib/src/macos.dart index 17b3795..a711161 100644 --- a/lib/src/macos.dart +++ b/lib/src/macos.dart @@ -1,267 +1,37 @@ -import 'dart:convert'; -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/utils.dart'; -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; +part of icons_launcher_cli; -/// File to handle the creation of icons for MacOS platform -class MacOSIconTemplate { - MacOSIconTemplate({required this.size, required this.name}); +void _createMacOSIcons({required String imagePath}) { + CliLogger.info('Creating macOS icons...'); - final String name; - final int size; -} - -/// List of icons to create -List macosIcons = [ - MacOSIconTemplate(name: '_16', size: 16), - MacOSIconTemplate(name: '_32', size: 32), - MacOSIconTemplate(name: '_64', size: 64), - MacOSIconTemplate(name: '_128', size: 128), - MacOSIconTemplate(name: '_256', size: 256), - MacOSIconTemplate(name: '_512', size: 512), - MacOSIconTemplate(name: '_1024', size: 1024), -]; - -/// Create the icons -void createIcons(Map config, String? flavor) { - final String filePath = config['image_path_macos'] ?? config['image_path']; - // decodeImageFile shows error message if null - // so can return here if image is null - final Image? image = decodeImage(File(filePath).readAsBytesSync()); + final image = decodeImage(File(imagePath).readAsBytesSync()); if (image == null) { - return; - } - if (config['remove_alpha_macos'] is bool && config['remove_alpha_macos']) { - image.channels = Channels.rgb; - } - if (image.channels == Channels.rgba) { - print( - '\nWARNING: Icons with alpha channel are not allowed in the Apple App Store.\nSet "remove_alpha_macos: true" to remove it.\n'); - } - String iconName; - final dynamic macosConfig = config['macos']; - if (flavor != null) { - final String catalogName = 'AppIcon-$flavor'; - printStatus('Building MacOS launcher icon for $flavor'); - for (MacOSIconTemplate template in macosIcons) { - saveNewIcons(template, image, catalogName); - } - iconName = macosDefaultIconName; - changeMacOSIconLauncher(catalogName, flavor); - modifyContentsFile(catalogName); - } else if (macosConfig is String) { - // If the MacOS configuration is a string then the user has specified a new icon to be created - // and for the old icon file to be kept - final String newIconName = macosConfig; - printStatus('Adding new MacOS launcher icon'); - for (MacOSIconTemplate template in macosIcons) { - saveNewIcons(template, image, newIconName); - } - iconName = newIconName; - changeMacOSIconLauncher(iconName, flavor); - modifyContentsFile(iconName); - } - // Otherwise the user wants the new icon to use the default icons name and - // update config file to use it - else { - printStatus('Overwriting default MacOS launcher icon with new icon'); - for (MacOSIconTemplate template in macosIcons) { - overwriteDefaultIcons(template, image); - } - iconName = macosDefaultIconName; - changeMacOSIconLauncher('AppIcon', flavor); - } -} - -/// Note: Do not change interpolation unless you end up with better results (see issue for result when using cubic -/// interpolation) -void overwriteDefaultIcons(MacOSIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(macosDefaultIconFolder + macosDefaultIconName + template.name + '.png') - ..writeAsBytesSync(encodePng(newFile)); -} - -/// Note: Do not change interpolation unless you end up with better results (see issue for result when using cubic -/// interpolation) -void saveNewIcons(MacOSIconTemplate template, Image image, String newIconName) { - final String newIconFolder = macosAssetFolder + newIconName + '.appiconset/'; - final Image newFile = createResizedImage(template, image); - File(newIconFolder + newIconName + template.name + '.png') - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); -} - -Image createResizedImage(MacOSIconTemplate template, Image image) { - if (image.width >= template.size) { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.average); - } else { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.linear); - } -} - -/// Change the launcher icon -Future changeMacOSIconLauncher(String iconName, String? flavor) async { - final File macOSConfigFile = File(macosConfigFile); - final List lines = await macOSConfigFile.readAsLines(); - - bool onConfigurationSection = false; - String? currentConfig; - - for (int x = 0; x < lines.length; x++) { - final String line = lines[x]; - if (line.contains('/* Begin XCBuildConfiguration section */')) { - onConfigurationSection = true; - } - if (line.contains('/* End XCBuildConfiguration section */')) { - onConfigurationSection = false; - } - if (onConfigurationSection) { - final match = RegExp('.*/\\* (.*)\.xcconfig \\*/;').firstMatch(line); - if (match != null) { - currentConfig = match.group(1); - } - - if (currentConfig != null && - (flavor == null || currentConfig.contains('-$flavor')) && - line.contains('ASSETCATALOG')) { - lines[x] = line.replaceAll(RegExp('\=(.*);'), '= $iconName;'); - } - } - } - - final String entireFile = lines.join('\n'); - await macOSConfigFile.writeAsString(entireFile); -} - -/// Create the Contents.json file -void modifyContentsFile(String newIconName) { - final String newIconFolder = - macosAssetFolder + newIconName + '.appiconset/Contents.json'; - File(newIconFolder).create(recursive: true).then((File contentsJsonFile) { - final String contentsFileContent = - generateContentsFileAsString(newIconName); - contentsJsonFile.writeAsString(contentsFileContent); - }); -} - -/// Generate the Contents.json file -String generateContentsFileAsString(String newIconName) { - final Map contentJson = { - 'images': createImageList(newIconName), - 'info': ContentsInfoObject(version: 1, author: 'xcode').toJson() - }; - return json.encode(contentJson); -} - -class ContentsImageObject { - ContentsImageObject({ - required this.size, - required this.idiom, - required this.filename, - required this.scale, - }); - - final String size; - final String idiom; - final String filename; - final String scale; + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); + } + + final macosIcons = [ + MacOSIconTemplate(name: '_16', size: 16), + MacOSIconTemplate(name: '_32', size: 32), + MacOSIconTemplate(name: '_64', size: 64), + MacOSIconTemplate(name: '_128', size: 128), + MacOSIconTemplate(name: '_256', size: 256), + MacOSIconTemplate(name: '_512', size: 512), + MacOSIconTemplate(name: '_1024', size: 1024), + ]; - Map toJson() { - return { - 'size': size, - 'idiom': idiom, - 'filename': filename, - 'scale': scale - }; + for (final template in macosIcons) { + _saveImageMacOS(template, image); } -} -class ContentsInfoObject { - ContentsInfoObject({required this.version, required this.author}); - - final int version; - final String author; - - Map toJson() { - return { - 'version': version, - 'author': author, - }; - } + CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } -/// Create the image list -List> createImageList(String fileNamePrefix) { - final List> imageList = >[ - ContentsImageObject( - size: '16x16', - idiom: 'mac', - filename: '${fileNamePrefix}_16.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '16x16', - idiom: 'mac', - filename: '${fileNamePrefix}_32.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '32x32', - idiom: 'mac', - filename: '${fileNamePrefix}_32.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '32x32', - idiom: 'mac', - filename: '${fileNamePrefix}_64.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '128x128', - idiom: 'mac', - filename: '${fileNamePrefix}_128.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '128x128', - idiom: 'mac', - filename: '${fileNamePrefix}_256.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '256x256', - idiom: 'mac', - filename: '${fileNamePrefix}_256.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '256x256', - idiom: 'mac', - filename: '${fileNamePrefix}_512.png', - scale: '2x') - .toJson(), - ContentsImageObject( - size: '512x512', - idiom: 'mac', - filename: '${fileNamePrefix}_512.png', - scale: '1x') - .toJson(), - ContentsImageObject( - size: '512x512', - idiom: 'mac', - filename: '${fileNamePrefix}_1024.png', - scale: '2x') - .toJson(), - ]; - return imageList; +void _saveImageMacOS(MacOSIconTemplate template, Image image) { + final resizedImage = createResizedImage(template.size, image); + final file = File( + '$MACOS_DEFAULT_APP_ICON_DIR$MACOS_DEFAULT_ICON_NAME${template.name}.png', + ); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } diff --git a/lib/src/version.dart b/lib/src/version.dart new file mode 100644 index 0000000..0e58df3 --- /dev/null +++ b/lib/src/version.dart @@ -0,0 +1,2 @@ +// Generated code. Do not modify. +const packageVersion = '2.0.0'; diff --git a/lib/src/web.dart b/lib/src/web.dart index 1128ed3..10cb267 100644 --- a/lib/src/web.dart +++ b/lib/src/web.dart @@ -1,111 +1,42 @@ -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/utils.dart'; -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; +part of icons_launcher_cli; -/// File to handle the creation of icons for Web platform -class WebIconTemplate { - WebIconTemplate({required this.size, required this.name}); +void _createWebIcons({required String imagePath}) { + CliLogger.info('Creating Web icons...'); - final String name; - final int size; -} - -List webIcons = [ - WebIconTemplate(name: 'Icon-192', size: 192), - WebIconTemplate(name: 'Icon-512', size: 512), - WebIconTemplate(name: 'Icon-maskable-192', size: 192), - WebIconTemplate(name: 'Icon-maskable-512', size: 512), -]; - -WebIconTemplate webFavicon = WebIconTemplate(name: 'favicon', size: 16); - -/// Creates icons with resize -Image createResizedImage(WebIconTemplate template, Image image) { - if (image.width >= template.size) { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.average); - } else { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.linear); + final image = decodeImage(File(imagePath).readAsBytesSync()); + if (image == null) { + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); } -} -/// Overwrites the default favicon -void overwriteDefaultFavicon(WebIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(webDefaultFaviconFolder + template.name + '.png') - ..writeAsBytesSync(encodePng(newFile)); -} + final webIcons = [ + WebIconTemplate(name: 'Icon-192.png', size: 192), + WebIconTemplate(name: 'Icon-512.png', size: 512), + WebIconTemplate(name: 'Icon-maskable-192.png', size: 192), + WebIconTemplate(name: 'Icon-maskable-512.png', size: 512), + ]; -/// Overwrites the default icons -void overwriteDefaultIcons(WebIconTemplate template, Image image) { - try { - final Image newFile = createResizedImage(template, image); - File(webDefaultIconFolder + template.name + '.png') - ..writeAsBytesSync(encodePng(newFile)); - } catch (e) { - print(e); + for (final template in webIcons) { + _saveImageWeb(template, image); } -} + CliLogger.success('Generated icon images', level: CliLoggerLevel.two); -/// Creates new favicon -void saveNewFavicon(WebIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(webDefaultFaviconFolder + template.name + '.png') - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); + final webFavicon = WebIconTemplate(name: 'favicon.png', size: 16); + _saveFaviconImageWeb(webFavicon, image); + CliLogger.success('Generated favicon image', level: CliLoggerLevel.two); } -/// Creates new icons -void saveNewIcons(WebIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(webDefaultIconFolder + template.name + '.png') - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodePng(newFile)); - }); +void _saveImageWeb(WebIconTemplate template, Image image) { + final resizedImage = createResizedImage(template.size, image); + final file = File('$WEB_DEFAULT_ICON_DIR${template.name}'); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } -/// Create icons -void createIcons(Map config, String? flavor) { - final String filePath = config['image_path_web'] ?? config['image_path']; - // decodeImageFile shows error message if null - // so can return here if image is null - final Image? image = decodeImage(File(filePath).readAsBytesSync()); - if (image == null) { - return; - } - - final dynamic webConfig = config['web']; - if (flavor != null) { - printStatus('Building Web launcher icon for $flavor'); - saveNewFavicon(webFavicon, image); - for (WebIconTemplate template in webIcons) { - saveNewIcons(template, image); - } - } else if (webConfig is String) { - // If the Web configuration is a string then the user has specified a new icon to be created - // and for the old icon file to be kept - printStatus('Adding new Web launcher icon'); - saveNewFavicon(webFavicon, image); - for (WebIconTemplate template in webIcons) { - saveNewIcons(template, image); - } - } - // Otherwise the user wants the new icon to use the default icons name and - // update config file to use it - else { - printStatus('Overwriting default Web launcher icon with new icon'); - overwriteDefaultFavicon(webFavicon, image); - for (WebIconTemplate template in webIcons) { - overwriteDefaultIcons(template, image); - } - } +void _saveFaviconImageWeb(WebIconTemplate template, Image image) { + final resizedImage = createResizedImage(template.size, image); + final file = File('$WEB_DEFAULT_FAVICON_DIR${template.name}'); + file.createSync(recursive: true); + file.writeAsBytesSync(encodePng(resizedImage)); } diff --git a/lib/src/windows.dart b/lib/src/windows.dart index 2ed6821..12f82a8 100644 --- a/lib/src/windows.dart +++ b/lib/src/windows.dart @@ -1,80 +1,32 @@ -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/utils.dart'; -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; +part of icons_launcher_cli; -/// File to handle the creation of icons for Windows platform -class WindowsIconTemplate { - WindowsIconTemplate({required this.size, required this.name}); +void _createWindowsIcons({required String imagePath}) { + CliLogger.info('Creating Windows icons...'); - final String name; - final int size; -} - -List windowsIcons = [ - WindowsIconTemplate(name: '', size: 128), -]; - -/// Creates icons with resize -Image createResizedImage(WindowsIconTemplate template, Image image) { - if (image.width >= template.size) { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.average); - } else { - return copyResize(image, - width: template.size, - height: template.size, - interpolation: Interpolation.linear); + final image = decodeImage(File(imagePath).readAsBytesSync()); + if (image == null) { + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); } -} -/// Overwrites the icon file with the new icon -void overwriteDefaultIcons(WindowsIconTemplate template, Image image) { - final Image newFile = createResizedImage(template, image); - File(windowsDefaultIconFolder + - windowsDefaultIconName + - template.name + - '.ico') - ..writeAsBytesSync(encodeIco(newFile)); -} + final template = + WindowsIconTemplate(name: WINDOWS_DEFAULT_ICON_NAME, size: 128); + _saveImageWindow(template, image, WINDOWS_DEFAULT_ICON_FILE_NAME); -/// Creates new icons -void saveNewIcons( - WindowsIconTemplate template, Image image, String newIconName) { - final String newIconFolder = windowsDefaultIconFolder + newIconName; - final Image newFile = createResizedImage(template, image); - File(newIconFolder + newIconName + template.name + '.ico') - .create(recursive: true) - .then((File file) { - file.writeAsBytesSync(encodeIco(newFile)); - }); + CliLogger.success( + 'Generated app icon image', + level: CliLoggerLevel.two, + ); } -/// Create icons -void createIcons(Map config, String? flavor) { - final String filePath = config['image_path_windows'] ?? config['image_path']; - // decodeImageFile shows error message if null - // so can return here if image is null - final Image? image = decodeImage(File(filePath).readAsBytesSync()); - if (image == null) { - return; - } - - final dynamic windowsConfig = config['windows']; - if (windowsConfig is String) { - // If the Windows configuration is a string then the user has specified a new icon to be created - // and for the old icon file to be kept - final String newIconName = windowsConfig; - printStatus('Adding new Windows launcher icon'); - for (WindowsIconTemplate template in windowsIcons) { - saveNewIcons(template, image, newIconName); - } - } else { - printStatus('Overwriting default Windows launcher icon with new icon'); - for (WindowsIconTemplate template in windowsIcons) { - overwriteDefaultIcons(template, image); - } - } +void _saveImageWindow( + WindowsIconTemplate template, + Image image, + String fileName, +) { + final resizedImage = createResizedImage(template.size, image); + final file = File('$WINDOWS_DEFAULT_ICON_DIR$fileName'); + file.createSync(recursive: true); + file.writeAsBytesSync(encodeIco(resizedImage)); } diff --git a/lib/utils.dart b/lib/utils.dart deleted file mode 100644 index 74fbe3f..0000000 --- a/lib/utils.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:image/image.dart'; -import 'package:universal_io/io.dart'; - -import 'custom_exceptions.dart'; - -/// Handle resizing images -Image createResizedImage(int iconSize, Image image) { - if (image.width >= iconSize) { - return copyResize( - image, - width: iconSize, - height: iconSize, - interpolation: Interpolation.average, - ); - } else { - return copyResize( - image, - width: iconSize, - height: iconSize, - interpolation: Interpolation.linear, - ); - } -} - -/// Logging -void printStatus(String message) { - print('🚀 $message'); -} - -/// Generate error -String generateError(Exception e, String? error) { - final errorOutput = error == null ? '' : ' \n$error'; - return '\n✗ ERROR: ${(e).runtimeType.toString()}$errorOutput'; -} - -/// Decode image file -Image? decodeImageFile(String filePath) { - final image = decodeImage(File(filePath).readAsBytesSync()); - if (image == null) { - throw NoDecoderForImageFormatException(filePath); - } - return image; -} diff --git a/lib/utils/cli_logger.dart b/lib/utils/cli_logger.dart new file mode 100644 index 0000000..6199656 --- /dev/null +++ b/lib/utils/cli_logger.dart @@ -0,0 +1,56 @@ +enum CliLoggerLevel { + one, + two, + three, +} + +class CliLogger { + CliLogger(); + static void info( + String message, { + CliLoggerLevel level = CliLoggerLevel.one, + }) { + final String space = _getSpace(level); + print('$space⚡ $message'); + } + + static void error( + String message, { + CliLoggerLevel level = CliLoggerLevel.one, + }) { + final String space = _getSpace(level); + print('$space❌ $message'); + } + + static void warning( + String message, { + CliLoggerLevel level = CliLoggerLevel.one, + }) { + final String space = _getSpace(level); + print('$space⚠️ $message'); + } + + static void success( + String message, { + CliLoggerLevel level = CliLoggerLevel.one, + }) { + final String space = _getSpace(level); + print('$space✅ $message'); + } + + static String _getSpace(CliLoggerLevel level) { + String space = ''; + switch (level) { + case CliLoggerLevel.one: + space = ''; + break; + case CliLoggerLevel.two: + space = ' '; + break; + case CliLoggerLevel.three: + space = ' '; + break; + } + return space; + } +} diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart new file mode 100644 index 0000000..6e50d3d --- /dev/null +++ b/lib/utils/constants.dart @@ -0,0 +1,116 @@ +import '../src/version.dart'; + +const String START_MESSAGE = '''\n +╔════════════════════════════════════════════════════╗ +║ ✨✨ ICONS LAUNCHER ✨✨ ║ +╠════════════════════════════════════════════════════╣ +║ Version: 2.0.0 ║ +╚════════════════════════════════════════════════════╝ +\n'''; + +const String ANDROID_COLOR_FILE = 'values/colors.xml'; + +const String ANDROID_MANIFEST_FILE = 'android/app/src/main/AndroidManifest.xml'; + +const String ANDROID_ICON_NAME = 'ic_launcher'; + +const String ANDROID_ICON_FILE_NAME = '$ANDROID_ICON_NAME.png'; + +const String ANDROID_PLAYSTORE_ICON_NAME = 'ic_launcher-playstore'; + +const String ANDROID_PLAYSTORE_ICON_FILE_NAME = + '$ANDROID_PLAYSTORE_ICON_NAME.png'; + +const String ANDROID_ADAPTIVE_ROUND_ICON_NAME = 'ic_launcher_round'; + +const String ANDROID_ADAPTIVE_ROUND_ICON_FILE_NAME = + '$ANDROID_ADAPTIVE_ROUND_ICON_NAME.png'; + +const String ANDROID_ADAPTIVE_FOREGROUND_ICON_NAME = 'ic_launcher_foreground'; + +const String ANDROID_ADAPTIVE_FOREGROUND_ICON_FILE_NAME = + '$ANDROID_ADAPTIVE_FOREGROUND_ICON_NAME.png'; + +const String ANDROID_ADAPTIVE_BACKGROUND_ICON_NAME = 'ic_launcher_background'; + +const String ANDROID_ADAPTIVE_BACKGROUND_ICON_FILE_NAME = + '$ANDROID_ADAPTIVE_BACKGROUND_ICON_NAME.png'; + +const String ANDROID_ADAPTIVE_XML_DIR = 'mipmap-anydpi-v26'; + +const String ANDROID_ADAPTIVE_XML_FILE_NAME = '$ANDROID_ICON_NAME.xml'; + +const String ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME = + '$ANDROID_ADAPTIVE_ROUND_ICON_NAME.xml'; + +const String IC_LAUNCHER_BACKGROUND_COLOR_XML = ''' + + + + + +'''; + +const String IC_LAUNCHER_MIP_MAP_XML = ''' + + + + + +'''; + +const String IC_LAUNCHER_ROUND_BACKGROUND_COLOR_XML = ''' + + + + + +'''; + +const String IC_LAUNCHER_ROUND_MIP_MAP_XML = ''' + + + + + +'''; + +const String IOS_DEFAULT_ICON_DIR = + 'ios/Runner/Assets.xcassets/AppIcon.appiconset/'; + +const String IOS_ASSET_DIR = 'ios/Runner/Assets.xcassets/'; + +const String IOS_CONFIG_FILE = 'ios/Runner.xcodeproj/project.pbxproj'; + +const String IOS_DEFAULT_ICON_NAME = 'Icon-App'; + +const String WEB_DEFAULT_FAVICON_DIR = 'web/'; + +const String WEB_DEFAULT_ICON_DIR = 'web/icons/'; + +const String MACOS_DEFAULT_APP_ICON_DIR = + 'macos/Runner/Assets.xcassets/AppIcon.appiconset/'; +const String MACOS_ASSET_DIR = 'macos/Runner/Assets.xcassets/'; +const String MACOS_CONFIG_FILE = 'macos/Runner.xcodeproj/project.pbxproj'; +const String MACOS_DEFAULT_ICON_NAME = 'app_icon'; +const String MACOS_DEFAULT_ICON_FILE_NAME = '$MACOS_DEFAULT_ICON_NAME.png'; + +const String WINDOWS_DEFAULT_ICON_DIR = 'windows/runner/resources/'; + +const String WINDOWS_DEFAULT_ICON_NAME = 'app_icon'; + +const String WINDOWS_DEFAULT_ICON_FILE_NAME = '$WINDOWS_DEFAULT_ICON_NAME.ico'; + +const String LINUX_DEFAULT_ICON_DIR = 'snap/gui/'; + +const String LINUX_DEFAULT_ICON_NAME = 'app_icon'; + +const String LINUX_DEFAULT_ICON_FILE_NAME = '$LINUX_DEFAULT_ICON_NAME.png'; + +const String startMessage = '''\n +╔════════════════════════════════════════════════════╗ +║ ✨✨ ICONS LAUNCHER ✨✨ ║ +╠════════════════════════════════════════════════════╣ +║ Version: $packageVersion ║ +╚════════════════════════════════════════════════════╝ +\n'''; diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart new file mode 100644 index 0000000..734cb22 --- /dev/null +++ b/lib/utils/utils.dart @@ -0,0 +1,137 @@ +import 'package:image/image.dart'; + +/// Checks if the config file contains a `platform` +bool hasPlatformConfig(Map config) { + return isNeedingNewAndroidIcon(config) || + isNeedingNewIOSIcon(config) || + isNeedingNewMacOSIcon(config) || + isNeedingNewWindowsIcon(config) || + isNeedingNewWebIcon(config) || + isNeedingNewLinuxIcon(config); +} + +/// Checks if the config has android. +bool hasAndroidConfig(Map config) { + return config.containsKey('android'); +} + +/// Checks if the config need android. +bool isNeedingNewAndroidIcon(Map config) { + return hasAndroidConfig(config) && config['android'] == true; +} + +/// Checks if the config has android adaptive. +bool hasAndroidAdaptiveConfig(Map config) { + return isNeedingNewAndroidIcon(config) && + (config.containsKey('adaptive_background_image') || + config.containsKey('adaptive_background_color')) && + config.containsKey('adaptive_foreground_image'); +} + +/// Checks if the config has ios. +bool hasIosConfig(Map config) { + return config.containsKey('ios'); +} + +/// Checks if the config need ios. +bool isNeedingNewIOSIcon(Map config) { + return hasIosConfig(config) && config['ios'] == true; +} + +/// Checks if the config has macos. +bool hasMacOSConfig(Map config) { + return config.containsKey('macos'); +} + +/// Checks if the config need macos. +bool isNeedingNewMacOSIcon(Map config) { + return hasMacOSConfig(config) && config['macos'] == true; +} + +/// Checks if the config has windows. +bool hasWindowsConfig(Map config) { + return config.containsKey('windows'); +} + +/// Checks if the config need windows. +bool isNeedingNewWindowsIcon(Map config) { + return hasWindowsConfig(config) && config['windows'] == true; +} + +/// Checks if the config has linux. +bool hasLinuxConfig(Map config) { + return config.containsKey('linux'); +} + +/// Checks if the config need linux. +bool isNeedingNewLinuxIcon(Map config) { + return hasLinuxConfig(config) && config['linux'] == true; +} + +/// Checks if the config has web. +bool hasWebConfig(Map config) { + return config.containsKey('web'); +} + +/// Checks if the config need linux. +bool isNeedingNewWebIcon(Map config) { + return hasWebConfig(config) && config['web'] == true; +} + +/// Handle resizing images +Image createResizedImage(int iconSize, Image image) { + if (image.width >= iconSize) { + return copyResize( + image, + width: iconSize, + height: iconSize, + interpolation: Interpolation.average, + ); + } else { + return copyResize( + image, + width: iconSize, + height: iconSize, + interpolation: Interpolation.linear, + ); + } +} + +/// Checking color code +bool isValidHexaCode(String hexaCode) { + if (hexaCode[0] != '#') { + return false; + } + + if (!(hexaCode.length == 4 || hexaCode.length == 7)) { + return false; + } + + for (var i = 1; i < hexaCode.length; i++) + if (!((hexaCode[i].codeUnitAt(0) <= '0'.codeUnitAt(0) && + hexaCode[i].codeUnitAt(0) <= 9) || + (hexaCode[i].codeUnitAt(0) >= 'a'.codeUnitAt(0) && + hexaCode[i].codeUnitAt(0) <= 'f'.codeUnitAt(0)) || + (hexaCode[i].codeUnitAt(0) >= 'A'.codeUnitAt(0) || + hexaCode[i].codeUnitAt(0) <= 'F'.codeUnitAt(0)))) { + return false; + } + + return true; +} + +/// Checking valid image file +bool isImageFile(String fileName) { + return fileName.endsWith('.png') || + fileName.endsWith('.jpg') || + fileName.endsWith('.jpeg'); +} + +String getColorXmlContent(String color) { + return ''' + + + ${color.toUpperCase()} + +'''; +} diff --git a/lib/xml_templates.dart b/lib/xml_templates.dart deleted file mode 100644 index 1e55a3b..0000000 --- a/lib/xml_templates.dart +++ /dev/null @@ -1,38 +0,0 @@ -const String icLauncherXml = ''' - - - - - -'''; - -const String icLauncherRoundXml = ''' - - - - - -'''; - -const String icLauncherMipMapXml = ''' - - - - - -'''; - -const String icLauncherRoundMipMapXml = ''' - - - - - -'''; - -const String colorsXml = ''' - - - #FF000000 - -'''; diff --git a/pubspec.yaml b/pubspec.yaml index 37b0a48..9d3447b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A command-line tool that simplifies the task of updating your Flutt maintainer: Mrr Hak homepage: https://mrrhak.com repository: https://github.com/mrrhak/icons_launcher -version: 1.1.9 +version: 2.0.0 dependencies: args: ^2.3.1 @@ -13,7 +13,9 @@ dependencies: yaml: ^3.1.1 environment: - sdk: ">=2.17.0 <3.0.0" + sdk: ">=2.17.1 <3.0.0" dev_dependencies: test: ^1.21.1 + build_runner: ^2.1.11 + build_version: ^2.1.1 diff --git a/test/main_test.dart b/test/main_test.dart index b904319..01f4f44 100644 --- a/test/main_test.dart +++ b/test/main_test.dart @@ -1,7 +1,4 @@ -import 'package:icons_launcher/constants.dart'; -import 'package:icons_launcher/main.dart' as main_dart; -import 'package:icons_launcher/src/android.dart' as android; -import 'package:icons_launcher/src/ios.dart' as ios; +import 'package:icons_launcher/src/version.dart'; import 'package:test/test.dart'; import 'package:universal_io/io.dart'; import 'package:yaml/yaml.dart'; @@ -9,14 +6,13 @@ import 'package:yaml/yaml.dart'; // Unit tests for main.dart void main() { test('Version checker', () { + //! dart run build_runner build // Read yaml config file final File file = File('pubspec.yaml'); final String content = file.readAsStringSync(); final Map yaml = loadYaml(content); - // Read message constant - final message = introMessage(); - expect(message, contains(yaml['version']), + expect(packageVersion, yaml['version'].toString(), reason: 'Version is not correct'); }); @@ -32,99 +28,4 @@ void main() { expect(length, lessThan(180), reason: 'Description should be less than 180 characters'); }); - - test('Android icon list is correct size', () { - expect(android.androidIcons.length, 5); - }); - - test('Adaptive foreground icons icon list is correct size', () { - expect(android.adaptiveForegroundIcons.length, 5); - }); - - test('iOS icon list is correct size', () { - expect(ios.iosIcons.length, 21); - }); - - test( - 'iOS image list used to generate Contents.json for icon directory is correct size', - () { - expect(ios.createImageList('blah').length, 25); - }); - - test('image_path is in config', () { - final Map flutterIconsConfig = { - 'image_path': 'assets/ic_logo_border.png', - 'android': true, - 'ios': true - }; - expect(main_dart.isImagePathInConfig(flutterIconsConfig), true); - final Map flutterIconsConfigAndroid = { - 'image_path_android': 'assets/images/icon-710x599.png', - 'android': true, - 'ios': true - }; - expect(main_dart.isImagePathInConfig(flutterIconsConfigAndroid), false); - final Map flutterIconsConfigBoth = { - 'image_path_android': 'assets/ic_logo_border.png', - 'image_path_ios': 'assets/ic_logo_rectangle.png', - 'image_path_macos': 'assets/ic_logo_border.png', - 'image_path_windows': 'assets/ic_logo_border.png', - 'image_path_linux': 'assets/ic_logo_border.png', - 'image_path_web': 'assets/ic_logo_border.png', - 'adaptive_icon_background': 'assets/ic_background.png', - 'adaptive_icon_foreground': 'assets/ic_foreground.png', - 'adaptive_icon_round': 'assets/ic_logo_round.png', - 'remove_alpha_ios': false, - 'remove_alpha_macos': false, - 'ios': true, - 'android': true, - 'macos': false, - 'windows': false, - 'linux': false, - 'web': false - }; - expect(main_dart.isImagePathInConfig(flutterIconsConfigBoth), true); - }); - - test('At least one platform is in config file', () { - final Map flutterIconsConfig = { - 'image_path': 'assets/ic_logo_border.png', - 'android': true, - 'ios': true - }; - expect(main_dart.hasPlatformConfig(flutterIconsConfig), true); - }); - - test('No platform specified in config', () { - final Map flutterIconsConfig = { - 'image_path': 'assets/ic_logo_border.png' - }; - expect(main_dart.hasPlatformConfig(flutterIconsConfig), false); - }); - - test('No new Android icon needed - android: false', () { - final Map flutterIconsConfig = { - 'image_path': 'assets/ic_logo_border.png', - 'android': false, - 'ios': true - }; - expect(main_dart.isNeedingNewAndroidIcon(flutterIconsConfig), false); - }); - - test('No new Android icon needed - no Android config', () { - final Map flutterIconsConfig = { - 'image_path': 'assets/ic_logo_border.png', - 'ios': true - }; - expect(main_dart.isNeedingNewAndroidIcon(flutterIconsConfig), false); - }); - - test('No new iOS icon needed - ios: false', () { - final Map flutterIconsConfig = { - 'image_path': 'assets/ic_logo_border.png', - 'android': true, - 'ios': false - }; - expect(main_dart.isNeedingNewIOSIcon(flutterIconsConfig), false); - }); } From 1193aff65fa78ff152291bce2b4f73031027704c Mon Sep 17 00:00:00 2001 From: mrrhak Date: Fri, 10 Jun 2022 14:32:23 +0700 Subject: [PATCH 02/21] add example test --- .gitignore | 2 +- example/test/.gitignore | 47 ++ example/test/.metadata | 45 ++ example/test/README.md | 16 + example/test/analysis_options.yaml | 29 + example/test/android/.gitignore | 13 + example/test/android/app/build.gradle | 71 +++ .../android/app/src/debug/AndroidManifest.xml | 8 + .../app/src/dev/res/ic_launcher-playstore.png | Bin 0 -> 15291 bytes .../dev/res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/dev/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1989 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 453 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3534 bytes .../dev/res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3358 bytes .../src/dev/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1315 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 319 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2091 bytes .../dev/res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2177 bytes .../src/dev/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2618 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 655 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 4913 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4396 bytes .../src/dev/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3901 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 1021 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 7945 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 6514 bytes .../dev/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5403 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 1331 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 11966 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 8944 bytes .../android/app/src/dev/res/values/colors.xml | 4 + .../android/app/src/main/AndroidManifest.xml | 35 ++ .../app/src/main/ic_launcher-playstore.png | Bin 0 -> 33051 bytes .../kotlin/com/example/test/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../res/drawable/ic_launcher_background.xml | 74 +++ .../main/res/drawable/launch_background.xml | 12 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2065 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4872 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1217 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3056 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 3073 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6703 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 5290 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10771 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 8594 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15647 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/colors.xml | 4 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 8 + example/test/android/build.gradle | 31 + example/test/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + example/test/android/settings.gradle | 11 + example/test/assets/ic_background.png | Bin 0 -> 247 bytes example/test/assets/ic_foreground.png | Bin 0 -> 11052 bytes example/test/assets/ic_logo_border.png | Bin 0 -> 14616 bytes example/test/assets/ic_logo_rectangle.png | Bin 0 -> 10138 bytes example/test/assets/ic_logo_round.png | Bin 0 -> 18357 bytes example/test/icons_launcher-dev.yaml | 12 + example/test/icons_launcher.yaml | 17 + example/test/ios/.gitignore | 34 ++ .../test/ios/Flutter/AppFrameworkInfo.plist | 26 + example/test/ios/Flutter/Debug.xcconfig | 1 + example/test/ios/Flutter/Release.xcconfig | 1 + .../test/ios/Runner.xcodeproj/project.pbxproj | 481 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + example/test/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 26033 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 361 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 657 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 934 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 524 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 979 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1577 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 657 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1340 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2097 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 879 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 1754 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 907 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 1833 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2097 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3402 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 1302 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 2568 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1246 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 2737 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 2951 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + example/test/ios/Runner/Info.plist | 49 ++ .../test/ios/Runner/Runner-Bridging-Header.h | 1 + example/test/lib/main.dart | 115 ++++ example/test/linux/.gitignore | 1 + example/test/linux/CMakeLists.txt | 138 +++++ example/test/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + example/test/linux/main.cc | 6 + example/test/linux/my_application.cc | 104 ++++ example/test/linux/my_application.h | 18 + example/test/macos/.gitignore | 7 + .../test/macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 572 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + example/test/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 +++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 35866 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3005 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 426 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 6306 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 751 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 15291 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1515 bytes .../test/macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../test/macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + example/test/macos/Runner/Info.plist | 32 + .../test/macos/Runner/MainFlutterWindow.swift | 15 + .../test/macos/Runner/Release.entitlements | 8 + example/test/pubspec.yaml | 91 +++ example/test/snap/gui/app_icon.desktop | 8 + example/test/snap/gui/app_icon.png | Bin 0 -> 6306 bytes example/test/test/widget_test.dart | 30 + example/test/web/favicon.png | Bin 0 -> 426 bytes example/test/web/icons/Icon-192.png | Bin 0 -> 5403 bytes example/test/web/icons/Icon-512.png | Bin 0 -> 15291 bytes example/test/web/icons/Icon-maskable-192.png | Bin 0 -> 5403 bytes example/test/web/icons/Icon-maskable-512.png | Bin 0 -> 15291 bytes example/test/web/index.html | 58 ++ example/test/web/manifest.json | 35 ++ example/test/windows/.gitignore | 17 + example/test/windows/CMakeLists.txt | 101 ++++ example/test/windows/flutter/CMakeLists.txt | 104 ++++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + example/test/windows/runner/CMakeLists.txt | 32 + example/test/windows/runner/Runner.rc | 121 ++++ .../test/windows/runner/flutter_window.cpp | 61 ++ example/test/windows/runner/flutter_window.h | 33 + example/test/windows/runner/main.cpp | 43 ++ example/test/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 3027 bytes .../test/windows/runner/runner.exe.manifest | 20 + example/test/windows/runner/utils.cpp | 64 ++ example/test/windows/runner/utils.h | 19 + example/test/windows/runner/win32_window.cpp | 245 ++++++++ example/test/windows/runner/win32_window.h | 98 +++ 175 files changed, 4456 insertions(+), 1 deletion(-) create mode 100644 example/test/.gitignore create mode 100644 example/test/.metadata create mode 100644 example/test/README.md create mode 100644 example/test/analysis_options.yaml create mode 100644 example/test/android/.gitignore create mode 100644 example/test/android/app/build.gradle create mode 100644 example/test/android/app/src/debug/AndroidManifest.xml create mode 100644 example/test/android/app/src/dev/res/ic_launcher-playstore.png create mode 100644 example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png create mode 100644 example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png create mode 100644 example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/dev/res/values/colors.xml create mode 100644 example/test/android/app/src/main/AndroidManifest.xml create mode 100644 example/test/android/app/src/main/ic_launcher-playstore.png create mode 100644 example/test/android/app/src/main/kotlin/com/example/test/MainActivity.kt create mode 100644 example/test/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 example/test/android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 example/test/android/app/src/main/res/drawable/launch_background.xml create mode 100644 example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 example/test/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 example/test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 example/test/android/app/src/main/res/values-night/styles.xml create mode 100644 example/test/android/app/src/main/res/values/colors.xml create mode 100644 example/test/android/app/src/main/res/values/styles.xml create mode 100644 example/test/android/app/src/profile/AndroidManifest.xml create mode 100644 example/test/android/build.gradle create mode 100644 example/test/android/gradle.properties create mode 100644 example/test/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 example/test/android/settings.gradle create mode 100644 example/test/assets/ic_background.png create mode 100644 example/test/assets/ic_foreground.png create mode 100644 example/test/assets/ic_logo_border.png create mode 100644 example/test/assets/ic_logo_rectangle.png create mode 100644 example/test/assets/ic_logo_round.png create mode 100644 example/test/icons_launcher-dev.yaml create mode 100644 example/test/icons_launcher.yaml create mode 100644 example/test/ios/.gitignore create mode 100644 example/test/ios/Flutter/AppFrameworkInfo.plist create mode 100644 example/test/ios/Flutter/Debug.xcconfig create mode 100644 example/test/ios/Flutter/Release.xcconfig create mode 100644 example/test/ios/Runner.xcodeproj/project.pbxproj create mode 100644 example/test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/test/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/test/ios/Runner/AppDelegate.swift create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 example/test/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 example/test/ios/Runner/Base.lproj/Main.storyboard create mode 100644 example/test/ios/Runner/Info.plist create mode 100644 example/test/ios/Runner/Runner-Bridging-Header.h create mode 100644 example/test/lib/main.dart create mode 100644 example/test/linux/.gitignore create mode 100644 example/test/linux/CMakeLists.txt create mode 100644 example/test/linux/flutter/CMakeLists.txt create mode 100644 example/test/linux/flutter/generated_plugin_registrant.cc create mode 100644 example/test/linux/flutter/generated_plugin_registrant.h create mode 100644 example/test/linux/flutter/generated_plugins.cmake create mode 100644 example/test/linux/main.cc create mode 100644 example/test/linux/my_application.cc create mode 100644 example/test/linux/my_application.h create mode 100644 example/test/macos/.gitignore create mode 100644 example/test/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 example/test/macos/Flutter/Flutter-Release.xcconfig create mode 100644 example/test/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 example/test/macos/Runner.xcodeproj/project.pbxproj create mode 100644 example/test/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/test/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/test/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test/macos/Runner/AppDelegate.swift create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 example/test/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 example/test/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 example/test/macos/Runner/Configs/Debug.xcconfig create mode 100644 example/test/macos/Runner/Configs/Release.xcconfig create mode 100644 example/test/macos/Runner/Configs/Warnings.xcconfig create mode 100644 example/test/macos/Runner/DebugProfile.entitlements create mode 100644 example/test/macos/Runner/Info.plist create mode 100644 example/test/macos/Runner/MainFlutterWindow.swift create mode 100644 example/test/macos/Runner/Release.entitlements create mode 100644 example/test/pubspec.yaml create mode 100644 example/test/snap/gui/app_icon.desktop create mode 100644 example/test/snap/gui/app_icon.png create mode 100644 example/test/test/widget_test.dart create mode 100644 example/test/web/favicon.png create mode 100644 example/test/web/icons/Icon-192.png create mode 100644 example/test/web/icons/Icon-512.png create mode 100644 example/test/web/icons/Icon-maskable-192.png create mode 100644 example/test/web/icons/Icon-maskable-512.png create mode 100644 example/test/web/index.html create mode 100644 example/test/web/manifest.json create mode 100644 example/test/windows/.gitignore create mode 100644 example/test/windows/CMakeLists.txt create mode 100644 example/test/windows/flutter/CMakeLists.txt create mode 100644 example/test/windows/flutter/generated_plugin_registrant.cc create mode 100644 example/test/windows/flutter/generated_plugin_registrant.h create mode 100644 example/test/windows/flutter/generated_plugins.cmake create mode 100644 example/test/windows/runner/CMakeLists.txt create mode 100644 example/test/windows/runner/Runner.rc create mode 100644 example/test/windows/runner/flutter_window.cpp create mode 100644 example/test/windows/runner/flutter_window.h create mode 100644 example/test/windows/runner/main.cpp create mode 100644 example/test/windows/runner/resource.h create mode 100644 example/test/windows/runner/resources/app_icon.ico create mode 100644 example/test/windows/runner/runner.exe.manifest create mode 100644 example/test/windows/runner/utils.cpp create mode 100644 example/test/windows/runner/utils.h create mode 100644 example/test/windows/runner/win32_window.cpp create mode 100644 example/test/windows/runner/win32_window.h diff --git a/.gitignore b/.gitignore index 0faa433..d1c38be 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ pubspec.lock # Directory created by dartdoc doc/api/ -example/test/ \ No newline at end of file +# example/test/ \ No newline at end of file diff --git a/example/test/.gitignore b/example/test/.gitignore new file mode 100644 index 0000000..a8e938c --- /dev/null +++ b/example/test/.gitignore @@ -0,0 +1,47 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/example/test/.metadata b/example/test/.metadata new file mode 100644 index 0000000..95f73f5 --- /dev/null +++ b/example/test/.metadata @@ -0,0 +1,45 @@ +# 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. + +version: + revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: android + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: ios + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: linux + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: macos + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: web + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: windows + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/example/test/README.md b/example/test/README.md new file mode 100644 index 0000000..8c9666f --- /dev/null +++ b/example/test/README.md @@ -0,0 +1,16 @@ +# test + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/test/analysis_options.yaml b/example/test/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/example/test/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/example/test/android/.gitignore b/example/test/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/example/test/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/example/test/android/app/build.gradle b/example/test/android/app/build.gradle new file mode 100644 index 0000000..3353a98 --- /dev/null +++ b/example/test/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.test" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/example/test/android/app/src/debug/AndroidManifest.xml b/example/test/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..b56a811 --- /dev/null +++ b/example/test/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example/test/android/app/src/dev/res/ic_launcher-playstore.png b/example/test/android/app/src/dev/res/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..7878c2c612371a0d01b4403db169aa8ab122e1fb GIT binary patch literal 15291 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 S$AKw=jvcW-Tx#hN^M3$opYtRD literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml b/example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..ec59d6e --- /dev/null +++ b/example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher_round.xml b/example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..ec59d6e --- /dev/null +++ b/example/test/android/app/src/dev/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png b/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b1fb5b81724b14a997c6038ab4f92fc1cdc0c928 GIT binary patch literal 1989 zcmV;$2RitPP)@ElhTP#+MAt`DK*!D{$X(~dM6s%|q1&!dNT1^yD!G7>Xus$Igtxa2! zwrWgYkw}m>n$$o<5KUXf7s|?;O3EUsR9P1o*q!M;%Z}`OvE7+FjrQaXf&G1;>Suy5fKqEYu2pzjEsyd0_U%yqN0O`4jno= zFfcG=eV+}Wu&}U@Q>RXyj){p$kTzVp3JMCEuyyO!gUQLsDQRhGDIFah4}@z^0TDQw z^78UZLiTk!VbWK0bo84Q6&05f6BFaw+uLC->Q z$H&h$7!0f#P;PE+HmS$Cw1bn2A|oT;$ji&yv3>jYT})tLpqiNS4%$J5V#%{_eh z@DXO=!iCAf!NFm)1CpEk{QQF6BVy*wo0mvC7`ZAgE^Zz(bLPxfX$K-#5ig2lNXM+9 z9f({-%1nc+n1Xg7GM2(&t1%{9jREqYF+d(P2FQbC4T$3bhWOFn&-eiNdilgkwt)IL zfC8Ng>IX&^Sa%3dv%uLinT2s8wz{$b#1c4#U8>Q;@#A3k zBo+dE#f?iAfch+O?)Hyvw&*!#LzZBZL>-X91hBVjxUAf*=u#N6Gf@SEnIpg%ji#%I zmvX7#pr`?|_Z;3XeeAOd;e0YlTtjvyDu4vfsUH~e9CzgvMapWYM4n?W$pK-XvsY(Z zR_?L~;p9tPR@Raf5W?B#1dglh!Lr&(5e`Z+Kz%MU#~zOG_f#cERx9Z}$6k^Ea@GWT zf`c8h*iGPQBsw6chU})SURL4WiiKbqz(I)$$lj3Mfx&TvBbUq(BpM*WbDAvYIqtxq zu&nZB1_vbyAoQFAIu$eyxOZ54&#^D7Hr5C3^t%UatvP`v2=VfaybfsOB+zv#SWniK z=hPE0dx>`$OgZX+B58Q;ef9G)24 zM-z;YsxkhDs9nqJfC5NGsfLb0M@X(b=dLAlSkCjwJ7&%b0%!3HMo~X{E7~eHo=hGgMZAmsHEdAOMAv>f|lI zR}e7i8u8(vMDL`{nMBI%#6u;l3LSFroZowg;q;k?r;DFb?&<}2X}m2Y0nT!SBSGc} zl4LK2p0qJ+$YC5aXTv=e^xJt3OR`93f#jk@Erw6 z)I10wef z05X7CWA!}9+MmwX=^*p-YWQJetmvL33qUCJq!aH>hWE80(1=~41&+YTeq&!nJSpSz zOYoz}kYoc0_2PIxDBThdsYfoFA-O%nCKoRfPZArFtN@`V2Kz(V$8SUW(JH9xc;s*$ z!C0RMRn|X%WnYlhEnA!xKz4vom`MmJ?bC~Jy{+fzIHIwBOf9^wxT7OLtD$()90>69 z?v!K+2o*w%`j;IEU^IC?t~Z)E;0P_1()&xlYyqJdg#t#^?kL4u?qv-~4jKdGL1TbC zXbg}CA)sgYcai5#Jj1fAV>dP?vk05VOhZG1HYzGAhITM=RC9B4BU4pXbs;4sWhL!k z)b+O$ZGMiWdf%j`3#|61H5qL!AHhMJn1Y67REwYBw6XE*)> X)B6(p5;c+@00000NkvXXu0mjfy052J literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_background.png b/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..ccd01fc13f723477b5f2ca6414e2c192515daed0 GIT binary patch literal 453 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz2}t@*X!K!VVC?a9aSW+oe0$N6mq9_`fPvhP z@M@+4M$T+eotyJ!9)17qHACJ8%Y)BYW(()|jWTE&2p010tf`@{>v@3D!{F)a=d#Wz Gp$PzeAGrJg literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_foreground.png b/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..3710404d1fc1eca0138743516ef8be58922de9a3 GIT binary patch literal 3534 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 literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_round.png b/example/test/android/app/src/dev/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f63a2314f9ea345921e19d2fc00f3442ab9ccb01 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png b/example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fa65e3d7b10ab80c8ce7266214073c6565a60407 GIT binary patch literal 1315 zcmV+;1>E|HP)(LIhTNp1LRZ-Gez!5@>f6W9m!I%JHEW?puU>KwE4HA{8OB~Z_)JbAY zrhmyOXxQc-Q-QVk$3_sAfO{eF1%Z&LV^UfiX^_$$wCD4bUOC?3dPlot-=yvDUUK*O zKELPr-S2)W10u03%aoOs9V#g)IcPSUv$R^R4x&IFk7ssxczCd_t?fc3yP1A-`U*U{B3S-ZWdEsUVa!|Wknil zt1=pm4^>oD9AU6v4@DYAstOAWOPP#}jHoQy%?L-z3*MjiNwM)&z$vs|3(eSGt-;5M9K=2I{Yr`iX{QC%>%1VbPDPn-&KSlVf zGi$?tm>OQ>1<7tefTzeWDb}EN1|u&AJV{mq;;7L2)`K%F%mc=8CVNmfE3auEp}lK&4KFwVPS&iLd%@c z=02St-cI2lc01=nzGV=C^ucjnh&;g`yT!uzoN7gik@o3)lHo~`3}~>g>ykP60DIw= z*~MOw|X<(&0&xdw_0w3?uh37V!;CrR8Ze!NtG}Lo9f4n#n9H6FMUc z;p_KspbG<@6xJw2CaC*QJ2Y@`*L*1Qc5e(+53=yLM+Is(K#CrKWftKx5&i_iYr}*m zh5a0$bgE4bEma00e-zNNjg4n9$(e_Qv|*xJ>XQS?5Ad4xsw?MR-B;et>Z_ zk)Q0t0_Px3CU}yp2JXeH8L$Ta@+|HX9&lc}1A5wfVe+;85SJJ)+dXA9KsE9CUJhQu z;{DmB4!u75olcmx{RmUOc_?YQO$#PHG-v@T!i1Wq69K4DquAmA3xE*FL zc7orJPY$&T#%|BRfriU);dOaTDDp-YFk$B4#olS?w06RL3=cfBkoc5Re@@Oo(Wy&; zo=6KbofLZ~rgS>}m=2EgCqmDVW5r}|?6w<<(L{UQ6W9~dO(?o5u_Km&Z(eyED!=T7 zOTXDe`+0OjW^VrL#-6wgKfIX_4@fkj__`38`1Ta-(4GxwC;QZKA+FC@oCX1WcM;7BO`yLrlvj^X&5OQ z9UUEFIyySO%gf7qI?^ywWV6}Y8H>fzTvJn1XEYkqBMr0_IUJ6$rlzJdjN9$@(0>oG zC%Uv+t$g!b1;ugPY;|>Yxy$AHFE9%A_4QpVEiHWt9i2-`N-{qytA9IvItT)!2M^W=I$q4mW`VjQR2`y#mdvzkmY9 M)78&qol`;+04MccApigX literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher_foreground.png b/example/test/android/app/src/dev/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..65848f9e7a2d1185981e0e360a76b65d1b8dca03 GIT binary patch literal 2091 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 D128+J literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png b/example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e31fdf9b47a8a76d0be440e15874dc1d3a3c275d GIT binary patch literal 2618 zcmV-A3dQw_P)QQk@Lcldw2IU zgY4dWcjoZ@p7TAwbM6Hha08`M2^kp~FJ)$C=B!@5IwdhNF)lbbIMkib`U_^W+0fV5 zH+=8jy|1rcz54m(%a=P%CX?0G=a{)p#>K@&m6n$7Dk>^^D>gQE<&$f!Z?bmnTK0QI zMFr?|x}K({rjy5yAOEnsyIU*v89@UWhEeR?x%2JH%F4Qkh=^qi)Lx$^CMG6n*REaF zB_$>08jYr^zP|pqLLM{a|!-bb>oRV*thu>G_QT@fVJil$7+w z#>OUM!mC^y%@|N#UcQ|Slh^4r&p${{Pv4|gt1GIjtLyPSYXGTsmh9cT_aNP-`478y z@2)w0`gC(wS62^f0O|c@DwS#}?S}aaWDT`=-@bj7#l^+j8O(lC=anScS52^c^bpEKaT z3E&@-L9=RWp+^&}A}7A9vOp~3@?nN2hEExwGb!M}KnV01m9vgp!C7mI!vQOK|4Ot8 zHbj~iw2hAVi~%VA{{9dcF)3YN>;Q_tiHQGBtPvDmUY7cV0T?^j^F0wCb!JC~z30;q zACbKQT#KN-0S&#Q&9XoiHMKL&VVr@{(B_zhv!-CviDkYck~aVsSv7;s;=5bzdaS(jauOerlmTNRv4gl1JuiowWhFi$83VX##}o1SWQ3dG-R1HU zACZIsI+1DzalCWIhdY%)dVU!ZKS*ZcBh(EL+uL!~>$!7jDl_T%23d-aP&L4DZwGNF zZXWe~TkJ406(6By0Jpcp-%@sKb!-1F=h)#x#Q@CwDvTWuZzH-JJCFNNi8npvDm?D zTOTlRQfK>>2T#S1B;x-p&b#6xUNyi%z6|bcqzN3e#g2I9qxgRu4QAH?^AZ33r}gkm zh5Lfqy!kBrsl5_p&uBsi39qjq@5kH)We=w1b_=wl%fOs;*Ysn9c z^MKZk`?_<9KcCp)gFPSHvNDv8_z0CM2u-L>%7VG-HPk zwRHf-QB8uLjU%1eS>bg1gexZgnPCP#7-C?l%5(9L@(O*7Kz*J|bxYnn!}*;D6o!a~51V`hdid z!ej(ZikZZYbj3#`ZNT>;EwDTUV8r11TK-x)>NgIGX8)k*y6BFL)3MC`q zk&J??UxNWA{`MK@N3?8eDad5-t55$06M7Tue=U`LFEu1@0J3Va6;3AW;Y~6UM)V3N z;qkqKh(CF*4fI+aD3nBKC0=J`XXIn;x7q8Y7)P=&0Ab_kc|8<6#1U(T5yfu@!?2d^ z66z+LOqIzBHS1>+pf~o@P#F4BFKyXfIASP`6Iux|y2GD=FUY6J%)sf^pRN<_qxpQ5_82pK=l&5xY;IVB^SE9aZ7POmQg4)&OKxTqJy2 zkp-LUFG2tP$(iHs-WNW6-c}t|{pdw%BSF>%AW6%@;p6g5cV7(khT0h9?CKp8YZ z+K&zRIB0jEqU+vOiL zHZ~r;cJ11i_+S6w&B@8huCK4J-MV$_9-(Ujc!Z_7x%tD=($c+TaAcF$W0f)9< z;n9pTS|>iNS8z@%=l^52pZS5I5~rKW!44IPi7d*K5?q9OJemYO4Mqh=0|ZxM&^uSa WX8X3jof(+W7(8A5T-G@yGywqK1G>Ec literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_foreground.png b/example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..eeec932031e860a517dc75ad5d5e935febc6cbe4 GIT binary patch literal 4913 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 literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_round.png b/example/test/android/app/src/dev/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..cf09c586eae86a813ab258c2bd7c107b77048ae1 GIT binary patch literal 4396 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 A6#xJL literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher_background.png b/example/test/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd18646b8340ff745367bd5ad3fa8039ed6c081 GIT binary patch literal 1021 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 M;I4k9u2ana0m46PqyPW_ literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher_background.png b/example/test/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..2c342f5bb5dcd3007434a842e74e42479901a2ea GIT binary patch literal 1331 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 + + #FFFFFFFF + \ No newline at end of file diff --git a/example/test/android/app/src/main/AndroidManifest.xml b/example/test/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..92a4f65 --- /dev/null +++ b/example/test/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/example/test/android/app/src/main/ic_launcher-playstore.png b/example/test/android/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..c90347e5e399aa8b28990a921696694f4d8bcfdf GIT binary patch literal 33051 zcmeEu`9D)qpd6|!udwOl{@TTM=>%@y6E6UE3b{_n9JT_K*@csOI z9czu9H*DGO9oK(%;DKq}hvK^jUTdVE%6YgxmM50S*y+gQb^9ulFX^Wqx4e0Rz|OUf z4Yh`CZ+5{43Z=~U`P;9&0rQqGF58fnYDtq}6K8kZUT>VAuE?lo$Bi(Ad)ucK{g4kF zi}N+30bhqwaA^??5$UmWOK&Mn=9s`$Gsef4t15O zD?Xi$ayAz=IyNddyeE-qvy&@GRuOD?YS70Zs zMaCHqUhGTRQi@IecTR!%KdZ_4ZEuRYJi?vF{SqX)DOb%zjcDdnr9%_}fdi&l) z`*)ScI}i7%c8K@}@^nw6#I+0F%-A^vF*=CaixqFDO1}Ayq z5tp=kWrw0JEb*CT?{PYI+->Ez<8Udb($>4^}opjjg8P59{*?vKMu#S8T_NWelka!Wmi5h|hVDaU&74=%;mP z4z|h%7g=0eL5fUdM5ysM^)w2qOfq(CVWw3(Z{)#6YI$k0TiWQN*i=}J!*F{7>B2mD zu0q>=wZB%(f_>BLq$TbSrSt8$czB=*Ac?9=yUcoDCk&}uB=03!C9J}{=bb*zbr*7_ z=^C^l_3xDzPuA|6iD+DH|Lnq%YBybB#iP@koGM)YPRc>eO0~t!c%Ou{Ep2E>w>f@< zbGqq{3Hf7*x#;_A9{K*hGqQOAewe(-38!4^O_^ntY{uV607>|`vwlP^c(`<;SwMWg zB`_fje6Cu1M0inSe)poY`T=c+V>-b_wjO6=P;qwkQo6UqxKs`zgrq|E%b%{65?v24 z#>n@Cgv1vxk87_?`whH^t974VOsqbKkH&Xms$y>Tz8s=C`vujvYv`S8vpAs}-=mJl z%1hlZV)dChvkM@P0@{}iU9Mk^JCwetrRwoF%4t9pExOvdEfetV23`3ARiy}&k8cCnHWQ^a<7DqUb^ zU^)UbRQ;Ff@onW@btBuD7HVfx)BS`pS%(f`u0M>q{)Ba}_QiycQgKQ_PKXzPGQ0wi zdHw9C1QOZDEWD|MKcD?B)*T5sGec>T-ILJ$xxA%&w>pi&wz`kS%YFYmsVl$ zO48mu8``SvG?t$K5_g)QIJ48QW{1`G@CL<`v6L<0gNo^~9h`!VHyV8#{o`1rSdMY3 zaFC!6Y>ce|WgoUng!QSnntJMM&@!Ec+{9v3M~&;nbe~kO4g4JbEvpWlF((rt>uz}2 zI<}95jZ9bbcdV3yuJ?mG2VuUvxjXSifbO_ z3Md?;$Qa9rq`!VNzIY4gE;41sx+1~}7@_*>aEglo+4P(&nV#`mm|O+R@&`iS?tJw` z^%rAw#?QrceK}F+F^H3Js$F`(xdP$szRmLRlN0iRA(P@E8xb6CU{1czrz(Ac5eROk z-xk&12Fn%MW|k#|4xKcnmE=>cY0@j;<>@B2fPF{-*-s|dLp-8=9*gcP+4+s{4EiF+ zqSs^&)0Nwam|J;zM2oJ3g#5)_JS*3|lezBw*RWvS@pWjeYV09azcQLWbc`;UE0}k*^S_~1FLk}nfzQ=Qc^{9T!Jz+gshNfOsqM?Y8MdLzvh!A<;oeN9lD)?ZIoYsk1 zM)njTyI`9ib|#){<#N}sshGgcKC@?VEsFy;s?Ht_Mq4pg`WUR#;=EgkW=**a&Tot0 z3CeXPw|tfrc5nR#I_3sT(7UhmnvP>v0~@VZ5tZ~`3n>$@-EbOFq*Srg>~i&CUHn4q zN?6^wAL?0m(1d8wdFI6B)#`f)q#QmgI``xPx^6`~zS6uyP1)QaypJ3uWHL-TWrZ(ZYkv2jjh4$?@_lH{&JGNS>Xb{hyRba?t$ba z=%0>(<&p)zvMbZF3CEd->vax_W5@K&QA{EbJ_#p_uQ!JLQ7h8&$D^qJ1xsa?>*+j5 z0d+0N0Ujzg-Ep`(%=67*Sra>r&qt?8AQHQ-Yqd#VM|3ZZzSV@Q z3=IoDxCI<}^*xrvZn((Sco1_xZ~TiYd-I7r+X>m_dgXgKigsKJ<*YE#TKB_pRh$G3MboO9(`H=y=(I3e*yTPNCb7;@{ai2SIBlm9|w zD%$k{&uE`P1X`5x<}LULGn}YEKLQ_a6@;{ZG8#nZ%+4DbdH#bP$KTu}3WLHYp9{h- z)GCj;g(-g%f755U!cE@eSsrdNJ7w5qqJO#jphO_&7 zE9~^XD0{$0x;ByO;um&z^uaym&OW9>)DodrBGnO@Txr%cZAhZar0FytvS=;{UmN5{ zJ>Ma~^3Zf3j%u=QB5mJH9CG)W=$k(dkPAZ67jEIs<@)TkFoEZoi_<89zI~pGL+s2J z@DChQzLE{TQe>m>O5Fh~>QlNHbfXC4E~xF&s~zmY`UL&n9%&AM?rY1l2kgTL!(nFf zbnip9M@tw3D+k&1(W)XoNzpgV-DiWN-FV{(Z+bf)m$2-Dr`Omz~2> zS*2GMNx}c03sa7GzOpG3(HqTWz6C#BboL{F15( z#T6q$!m#uXMG|iNb0U7FNtv&M_%P<{kEVEVMoe|W8kuw}>q02%Vggsz8pwHx6x?WV z*^u8%B)1)Z^!8uN%;&0Hpt=|mMJLXnlB;oz!r$)vo6BO!;hntG6q@12j0iP42qjWP zeB+1QpRINu6lGoEbCZFPtJIT|XR_)r;vid$sQK3!(WF6^;sK8E?_Q{^P13>`o{rIN z3g_==KeT9RZ-pwu+S%bbI*XmBfgbM#F<25LZ|Uyq1}A8@c?w(Q zGe2#E2C4xPJrx3dlTMO$zdX%ddd?VL<&$kRi_<`!ia}~C?;@Ic;*lpOQigNeBq8Ci9>`z4FP zjbzuOYT)hROk{N%qUNFakgdiGkw<5m<33!U_3;jH9`mo8H4TJ#SHikfEojCb*%ONB zNMun=h(sfJC=MgR1aS9tz*1akk>JYB-4z7YBMq`PV;6c4WBy|$0H<^z{xL}sNDEaz zhpL+nSvvsZh!U^%0uGL7EIJ}7GA70_y_ZAz!yUq2VCE|iGHU}QPN$>@IknYv!3H#O zEocpVcwlY7*>2n`_*jDjA^W{GoSHA)_mk@SkvfccKq&p>ontZTEC@4hR9T$+AUu0UK#F@b^2*ejT(Ww*(WGWcS;Ld>8@r4wSB?RHJw)|My;|iNs-Im`M zuoLB4jqDfv9G~nUU#w@hWMIMsP%BBc-JL9nxRH%S-NlKde-{VdTFgp^&lgqkP8|n_ zAGRLm4aHpbL;Iy!aSCPXxS>%D)^3RBXVO=N7POEv{HlJU$UM z`*ve!2kOrg-z@=hreJe~%o~vY5M|pUgeyr|gn8b;iT6T{%1EJ6-xsy%?h<{w&&sbr za9H8|^~c#06-zG!V~Ugo^Y*xhXrAPnnY;u77&w^Is1I5CEE`1Gk{z4Rb^hZ!8?A~>Lq|yFStFZtF9$$`c;c!zKFk={Oi&C>X7>&p(4>u2#vUV1uXQWSUk&c;pW;=_V$ii>obW|EQoTf9!~L58?D&_V7BjDH+8*hZr>|18 zowdj0hhUC^2fy8^oQA!NGVC;K*2aL`cx~5p0dCA+#P1iL$|rLXMp@OkojqC?7HX@} z(aU+m+KuVu;Tz#>3+M53g0PbN3HLWVNW@$9W3jj}05CsrD~^{G>oY_Y>%XpQ}=Xz0V!ZktHMQ zs~Q3?^~de^yw#z_9zMGescxcg{&wQFh3TKPW&Nq2+*DYeW4HP{fL@Ha1BAW`Y>Q>D zp=D|FM7`mc(jY#$9K{_315(kB#(3eZSQ5V)A)Zj)tPG zLf+hRUg}6lzZ+5`qa`|3csOf0asOfXt{`0zR69J6HjTZ1OhS)YaiH16+@etE4c@*V z!q>gJ`+i3d5hFR6mN*sum&Yv=YXZG}rfJoN2zOIFTQKg*N!7T7JVz0|Z976Shr#(x9_RiCn9-NmW3@{O zZA7$I{+zDUGA>&YuB47`)MfT$t9hz3-U$mH2Zt5R=2J>oM`J!uTrpJx?2oCn%Z=_$Iy7%mZGbQGaE z=BCn1;x|g@)%h0(+u&_w>gXFHkPuvauu-?Mo6V&JX?gZ#Fqs5*Wn3h56evsv;1}`;FJoYEM5xa z|Def){UkxhkEN^&DNe92Z=>AZZM@JC--fd1pq~Y)XOGQo-CKz~0dB>}xtQ*m4ZS_a z%aqg@gXDRaZ~(Amo(~Bpm`yi)$bX(x=#Lhc)K)&kVs!}8^WIQrQ1lvS*)0&HE``vJ zb0tG>t3gJ_W>HD4TN-Q=bpCMD$~9ZzRYtUFZp_wA(R_eXoV;Tha{1^wQ8;)TDG|GH zK%AUmM!bIpKJ>?90cy{ta74WzKIGr4&*o&AUQrKWxl}XZXc|@0C<2Y`q~6=%@iNo% zjd-8;at;M#=<{b7g82GzrYoku-{z!(mjlI($!DVX{kP_6nFMvoY|9mAl4eZHi%okfyuFl|P2Jw!67NmE z`CeOsfsIDz<27kvqau^x4mzZ3fF67Q@`2A4=UO!x$*IHI4&*i`-aAhWi{Q2PGq z9-jw60oJZ-9tt1h)&t#3z;%5H+ux#I+347-mNr|v7kBgpJH~$vB)z|IEg$m9h!z>V zM79@%Pc*;TV|$B~V7KC$qs5qD`LYDv_T@zCzpnWLu*ZZRfGu8t1AHqUDD<>5gpXOM zwYc6NQuoxebGJLMJoXq6NWb73lkW;rHG!SB!b(PZJ|{Wzn8XN3A(kAp<5D$;y8&PJ z*k}-Ifw>Ea4xO}dEyZ&Swae|F}VO|yXNzR-wDM?uvLOJJZ!j! zTq0Vmok+>)@+8+0e22{0Rv-`VyU>%9kvVm^n7SGz36-*rx$ui2Udh&ewCOku!*r&N zPn=%f!>mnzqm_@>QT=iVk04ywZJso>h!VU{y1?}CpC=a6$$}ln8Uox5@O81(KEdOd z@f$2!ISWXH7N!1{Z=(@Zv*JOa*S`Ef;eKNRw~| z#;`)xs|pLuTIb|Y`dh1zdBCChCPxv6J!i!IjA50LGGewH4+CPZ|ULEpt_WOzDVCcE3$0oc8IPhM<=~3 z*G$WvlFXWR20777Jjf9g{77|at4w)T?7?v7jDG>avLmj6#3a#vA%tkhH4w>*5Fw*b za8I*lEBrBbI{YHA%R@B^LQ&gBOuVWrR8IwCtRi_ZzyKGoHxgEw$43rSzaJdo^d@V6 zPfE6>iwS(Fo|>?y(}3YdBef@_>|L!sd>2%ZjsP8PF#0omqE~?u?v%!*DV|MVtqUJb7x*M$(`>S0%q|C`#Pw7C9}lo@2r?t z40cO1gJvcxO2-LGo8WmH<3C}^evxjo_X?Em`tY zY2C~}EQc{42aMpZ6&1w5MoJL7mnoPzAPqks}-1Ux(IJQtKO$ zRnMQp_Z4FlSD58}QMP~@oDuu+%iSV^aCx@&6OToD(LHe#?y(gxaK!!6w8LfFa^Gv5g6)Wd>st7%S_qHi3J!OMQh5TSm7cf8}){iJquD8~6f{v0}0 z0+TRp@hBpPp}w;Im@HrtRU7n)gfl17R`>2T9T%-x_GG4CwMn|trp5jCZ3g_ZVw%9M zzm{&oWB?5KkoI^9dU$pn+QSJW{qk|JP|wH8{0N*|HNj581Yd9%`umm1P@KyWh*^rh zr%M=e^!k3C4K}XgtE9`s?^>85FVy^BO_A6!Y0ZN-|3aEx+R!!5eTa~gf>DvzahKTv zsCNMJ<>_KF!AzCX_hMy05OuqVVVh0Gb~TaW#zn7%UN4Yh zRp^W&D(U-fgtv*)NhQ2Zp8OS>g5yW@pCL!VRy^@O8K`xv}3lDxF>I`Um{|VhLgRT~cc%eSm68s~w`- z$|fY6z8SUCr(9orpLE1%J)>x}lXLCLc>9>8-w4hDET^*hIG*VZ^qmkpbGb*$PvGR& zr3aUr&bSPZhMqCp#-_5ey0X@UE{V=Xe>7!mF7*=z7Txo)T9QRC^+Ohsiavp+@Z{8C zwj3b$X8vG}e#flSTmj0&@NPJ_%_v=$HchcdHh~Lf#ofX=FNHQ5oM32_mcL2x&#gvG zf|wNvpw50r4?vx5h3SJO=bU^p6?-V32K)vNfm@~xHi_CcBG39>PnHMyTu~+L?r`B| zkz!kMMUQm=j*tg+d~v){I&LJCD$0#!L)SPVJyld(wjXB$ng;c@FO`j!u%R}s4DA|` z5LJYFm&x_K0c|mL(W#nk_TTSFaQVcs=xl6h9f5b)=py(osv6C0&?0dk;x7y@G@n?MGx-NPzB14o ztqL$)$p0LH(O?`RgyMw0e0(p-B9%2~7Smavd#ATx8o!yDjeghNfV-|s`DAyd+ZpsO zQvOlyD`^x4uE#rKZN=eHFsVkZ-NWmr^0>O;31LcVvNrb8e|&)^M1ytgEL5dUF}f!_ z#54B7tv({q$wqr7a9ziPMLf-F*>=SX!pERO@j zbV1tYYz7Nu6%>jn7&Wa)?|Hg9k7~QT!{25s!KMP@nH=I8&hy|iz~pN3#!;&Aj%A{B zz7rmlEUJqh5y`yqeg|^!uLlpatCTQ|2hnfFjU|jD(A5}s`n4v06ZoBnOAa+ZrKg<} z{N;^@YJcdGqOG|h0{-qEm)UNO%d@pcuhP=TT|(R?fIUUicG2&R=*STXQ(vNfRK>py z*qU4AoV!p%i^Z&h<}Qzq`Sb=?og+4u;sTgkpcUiYh%*mH1|;Z%SK0r(lGA{PQocqr zDX!3b=aFT%6ibY=udmeE4Rax92St;6+SNH~Ec`A0+*|!|wg8i*NWkE<+Y4^0&DsMB zVCg8sFroI3??tEKNhgrmDXvQMpsfPD`C3e8@#DKSzQvfSY69<&yJZNt zdUcvxH^#Nf;*)>`9W*_sU;Opt9WDsdmVY`Ji7PhAdIfLVl>?6DS}8Lm(RR?SA~56q z%9uAlqy4Y@wkcbNseXbD_BrVVizvX1&~KroAGY3ME)`A0T$7@E7vYv(cmLG5{J_WW zcR-7`&;W4mP{;xyUt9!^UJpq>dmM(Y27T6`Rj_+E=EbP&rBzI4{tZ-L2nO_Ul`s|_ zVk1EdTwTCvDfVKVPJN<|U>`pM7-XC0fXLLPm;bf9qW}u{?h6MEfSGM*R-ZJuVifFPBac)OHcgjTglG=45M*^+uuMHOqwI3kx{y1rlidJ^KMU ze(z668*(0jb2m424EurNVBiVXa?phXyst*C%?l0Sk*Gp9=Ic+!=$8|H=d1*JTgoGb zipP_tsQSWin#Y8z=ql;k(!oMaS#P_EE_rjJgl*`f%l7iiu7wOi8y?eUsEsD`wtfx~ z>766FO0)XQ)I*KyZH{GZb_vC`&WU!B@I)+~fd2C`?f{s9uuITgj;&9Z3(Ek+7@w^4 zH|=`rEQ^gw#ySchNgXku(FHFzBSDn<9nk>;OT@(TAX|)S7M+TTK|wVQyi1RyYGhl% z8A)8?WPlEK2q-zaUi@_*)I_)5N3{TyH;2pDxSs&z(C7HHf`Ttqbz^!VYv`)EdcK?8& zKhG)P#m9U5Q#*x6$)>_fpjn0{xp3rmNU6!0E#C_AfDh?;TKl-7&1L^DPX@%)8#Dga zk~bpB(Zch3SC@oUCfn2;$Rs6vOa7AiCLm`vnB5)&XsC6w1JRqyu|p@XH$O`^m&jAd zVQu6+pMR0#S}Aq$07~GJd#eZ{eIP`XJ>k&5hTL+G#Fb zVoHi`)EbnYV~_R@cP9G>4sBi5MgLccacTec*{?u<_b6}F|9(Z=te77C8A+&go~Cmi z^L6mzexvyjg^~Bs9h||GOws!JQhzPN6@sqxX1d`*Y*O4oW^^9(ptL?43YsZu+{onI zt}4wNxwSsZxYApxl{fFCil>m#;i(9I;DlGz_+3~y&*$a0FK0^4H3I%8duG{C>3rVJ zSGKovJ~_u@oza%FKkPVIFzJ>PLSSyW_Eskdu7aP)OXP#O@8xn=aZm%HRFc{XoXwzzZ)(P?_6W?Y~f z*E3qGzD1`@^Io_UQzrIb)ZlVU+n^l~Y7-w4??UNJs=@RDDHO12a6OhB*W@R)sM2X8 za`Hq(f>9vuM)}i2Zrko)_9VB+$J$*V=zcr>Zfk+L^Ab2e9r|`?&?Cdn+)cLkOOd)U z9KHG+6E*z8mTRn1oRJ0oX=1-l*zoyWp$n_q_e5zeZ9e zvlP?-Q-GAJ;W8{T0h2Hh9k8)L$)U`lo|U06dxE7LmL=losvgTiqLymj1_jDol=XU11CKU8CphzD?T+7b(#_r+2aU zsxWMB53+Eq1|769nqyq2I5<%sfn-a;bzP#$LuLo+Uz?(e z&th0AhZnsWrzzGZ>?(5Q;b$UBEBV z%MXEI;hH{aLYwY{K?720usF{U@BL`>wa-e?xY!kzhbgd*;CN1Efk$}uhNUd2CkuYC z4b^5dVhq3FU&^Gqct6=);w?=FasQXCfXDPi%ygIq{jr{$ZaA73BkfflfD0ttL=S_` zLnwMUwt|0YC(Fte0&NveODGgG>Hzwv=>R2M$nP&{^1N*fdq~hlH`7z|OE85ikev!p z_mnVF_Su~rJt*-Eolsni6DlyT!Q{eT$LPANiy5z{=GDEH8IB(jQ*})MkJ$nxHQ7~H zQvxG>w)_D`4Rd>X6?|UAgh;{83#~}A9{_cP#&`pCzW^Y*}6f;M9*zbna%d7KL4NWC8eY zE%O>}j`mZ6{SSf8U`&-CXnep+PT;f4_raWDQ8~)3;%uFy+~;XC$|sSF)?rT~+5%&X z%C%M}*GhH6eSIXLYx$iDt?xmgqXlllR50S!8xNWr6vO)&h_^PS)^@=QtBb&4F}i<{dq3&|>Ko|W$qoA6Gs-c| z=TE$w1=(|&WZ8>~4zqS>Lzj)?i4@A85GDZ2EaMA62QDQyrfzeo2aPjp%9GRfx>VUX z1>XjztlR?47@9Hyd_g(Zrg$Q~#g$)>Ep;4QZj2T%9mhLi%&E0*a35p!?tjXlp7z3E z=aH@xve(DcbGorf)$OxST1$6R*Ow@rCMdi#CPaF{Dbpun)^+xm_N_YYd`|222zu4_ zPkYcYi~0KhEQ{urb%US47CHew@~_KRBJtEYZhxbOKIz+yG(Q9MfB@+K`INLYn7K5y z<#G6t|I&J)}p!Us9pb**?R&A-*Ql@vh!gwV=_((~nc4p6zkI5s`jU zH0A4+k!kkj8Xr&qpiovMSpW_;MV>CFQr}e1QGlKa-DJPCH2+X^%UQ^o(t8?5mRGT` z8%}8{ZC$)QQr%=H!R4p2fZDG6NP&fpUp2#UmF~ib8=lT%1RTuu#!ihsXr6gmt_igp zs>;lY8~xaq1^{AOJLa2Zj2GN!8$a7vbfY)5`72&nm=5(j29O_C7?37`CE4c9SJ4ar z)Q=osJjw9Kv5$zX|IG1N5&Jmh)w7}fgST|_PPF<9!u$rR-}q+ZdhyDg-_;ki6VRmy zZ^TCFl`b`RX$7T3Cs z1w|EqLB+40ZGAG-VW+vXd|=nIwk81ZRDk*ff{{hbZi`UN2jN8j9Ti>t<}?M{B?TfS zUw3i$KUZg*W48D`7?Sa9P6M(T*{$EG_R#>$u?@EypEv<4Sj0i(ac2ucd-l= zh#qMQPKboWD$ksa)MpeBJ;*_uX=<*6NS^u3(AYF-{?Ih8$Oz!_M?6Spv#p&?t7^;z zpOc}dE`AWct6D`NqVMcOx&&m>?64p*c>Ywfns0#27DoMGx-rgbgnfn(h_mEmoC0)~ z38NZBJp&>Zu97x$rEOG?Yh<&pVM#Esv8Xj*S}RZmg0kz2^r=%SrG5SJDS zZP~GHS#MY-0jY)3$6WaqRB5*Cje)qcgV4@kD@LSH(OQokbemreF=P&?{nCP!?S{Nd0eK3T zR|9X_roqt05$F)BY^zv*?JE3&te*3zyda!~-h06CE#N`7!eKhyShbyGCU<`Zy(Wk5 zrY3&nMf0n1mxFFJc8b7S z?t^GGV>oiF>zO6a@+n*TS;lnXo0-Z`8M&Da+76xh)o7p`=l%X|`CI{g;=*RCt)?Z0 z-1&3-@y*1GA#U<2U&O=zEtNKEUnA5*qJ&jR3%+G?gFrJpa0?h)h-ysO*q`a*c5j3v@P5^4egVvp2sPn0v+?beTvWb}GZ8m2hdN0q=4> zkB&{LOBczQ%3pYR_n!$V-tGSD1GJ22x;*j8=W>^3J=I%|Z0PzfqVW+Piej}+3wCHPjO(X{# zXAKdd8}}qk=YYe+XGkEMzDr%AHv|-rm1J_lx?%ObX!nyQ+Cx2W4%l$rtk*m5`E)3& z4hao4PqUbFY!R(Ig!L(|45d@g;Of$Yo}~EWw!$_Lhae8X134gFQcm30)u%_qoeajw zc0Bv;^1qt2gSO>s^wkzn;Pw1EH5f-ASgv z&KQ&Nx>;K$Wq8dX&{*Vngj(uN8Zw(WyRxV7-0{hBPIL`I+v0%LklXyapSy>47jwCu z9Cc=-p-%-Mdw>$W^Ro`R#R=JnM;;XDLta>9>;vV>c|%guHuN@6E{?Tmc61F98Dy;o zvPr{aey?I?k;lxw0UOx@nvEm+I9{o_u-3nG576xwfcuhK-tR6=XLyqKA&%=IxY5VX zeQ(1Z$8^x>h<778tc53O8i0$%=P*bwC)&Cne(#MjDc;I`ER}CX+1@&^G;veq)kNp^ zI{V$NXdf1NSa1S5tM}(_IA0&TvD0>#Q3kXWsa$gVs>#RJe0$R+z8^ z4c)XvZ-96Y`}6pp1cW{HW;Wd-1+?kRvD32O#WvI!NUBDeWBqkyj<+|1a{bM>omuF} zqGHZszGO%(jy@BFfJQ^1G&=prb$w?ttFRa_7$I~p+SBQvg6o58Kp#Et+fA_esXGPc z67@)#^Zqa-2?}(3DIj!2lO9)e?g83GQL~eUJ7SFnF%PGn+`e`@3bn}{lrccd`zGCa z2_z|zCj1xQ34iE&>ICB2=g|u5oRrW^g>`Sd+aR!DLh7x z?J~YnmZA2R7v0a#l+dZgTv!rmu=9yeKiRRE_v>aO*#jy{IDF8Gi@q zD3$Cx#&A)i38RZ9ym`^j`Z072D8%Wqh9}fA*5T*xbbwaRMtAxe`suM6<=07%W!`w; z4oc9s{=AV6_JHPiXcwxLb60?_SrA*Q0056hv{2BNANaTdm~=;mVKxvKS9OxY*)cl? zIGKFE+dtx0N|n1Yxh~5j0h7<7sY08M&N0U$iaauSQU)Fd$Q=GWhq-pP8=U|Y?-_tw zB7DiK9`L(`?4gO%(Wx3ml&1R|5~k;eLjBf#7v@(=f&*ha){1&FBZpEHwhR$GwR_SD zspY7_d?VZM<V)D*?T{odIYuBLlR`SphNWnTyzF{)HD+{4ABWOL!;3sn!_z z`2I`}PLWO3OGLaAf{JOO%WH=z9$!EK0s8l}0$fdsZhH_&O6!W1j4lw=*|(kMyw7U_ zQ{IkGi!uN-F53@*{we@}y{DvO_=X4kX5&E8zG2Cg&l6DCPr1*B+yzi&SAnvF4z2Jz z+!pI*6XU?V_c#+nU^sW9w%!V4)7|U8kd-dO)sIEFz8A;KgN$#ig_S@x?%FZ2sR@_ea6)~epQxByz%3bSgP&4 zjqGB@{VvWkaxrZ^8jtPq+vo?V*9JksQr@N;iUi%v`L)#?uvL;INk?ULpC-%VUP)>z z3J{F4XBW^zi>Z|3AOZu-c#@KSuG!X@CYsvQWXZ&2iv9hAf=F2#UalM2sXdtM-`o$P z%J-lR3f|lLYt3|k99>`4FMRXqMz)!_05_v&B>I*;C9|p?7XK=E-OzyI>M(bBkc_N? ztk8po5$I4Z3FO73JwV5pUHPEzRR5GQ;%A<-ksgCrI`#ct*i@loYb3lpRYniih$K8}g0dFXDb$ql6@f9jj$Z z7|mdQ3Mi+T<1~R{5HDg@m;5QKVD^Yarh-lnH&>mziawdO&gF`GHD)Vw)J&2K3dQLA z(mLXjdNv!uRzzUFj*U2}8D&4&E}afx|C=`M``wi0#lB;yHS56vG_GqZj=fu5{scSg zz(U)1N0CH0Etl(HJcunVwgYIRVk+NJF`Mak!0TMgHp9F?|7|pg5QNvBZz{Z(r!cig zd-Uwr8*{2`%P9viA&D8RT_(--?Mg;xJFtVMY+wcvBrN2VW(^k1)f|gJ*2Q$r?bmj= z(%}Z59hV#!93j{(;j{>p+b#JICep$102vqV7y$A9Sf&ih@>8YP)uj$^@;o=oo3##<1%7-M}% z+rdBKV6V>;<<|rI&CbqlW7KG261C}M(Sx7U5K-HICqNpA@u5b!dKCspAMs4WK z>kuCazYwPo$ZvgamsJckTXsL*yEcrX# zN7Lz08#&Q^N^7y0FNk71SamsXv@k4sgmR41FJF4N0DE_okbI%fWsJudtLGV`xuyGx z{WrUqz85XCp4z+IuK4S`Nyo_Z%9VjGeZDsRsjNWa1E*qR?$U5<20@*bvCIJlZ*bd*yg6 zA!pSYAiLz>GeP!IHQC+oeg3K=r;_)S$Bl{4u{CFQ*DjBN`{XmIyaUp-jn z|F7~3##X=gyolMZmK;^`Z1qt#*klWg>-hpIG>U-+JEXuhs*F!b`^I= ztlCOCym?6J>(4P`+%7PW3a_GtEbBMNe45+jxg~NIbI4hbm&gl-oFOm3FSk5jC>c{{ znE7Or7u6oH(S{AH0YN`XMXHiI$n6P4r&jkDnVtf<6NJG<;mO38GhdE&%-*@?LpfSH zY`HpOjFO>yCQJmb+1WpcZrWA0TWoz#Jjz@!K;uZGoM4CWH!2~`WNA8)@%CeR9-$>f zAiw3SmFb25ve@OBXnxct6qkzPmf`EhH|d#$cWjQ9<#K3Kv{cUZ4p&hTB}THi8*bE{ ztFpT9z|24+E0{w$wCFf1bco)dqv9wZaESGA>>&`>$%ZgrTnfg;E~EQ_JQ0syrVW{C z7D7pNW_CZ6y&f`rHyves=!Tno;!gJm5&+QR2Bpj}w9AW^0S%~81nnQ|)a)qf&~JtX zW?skJ4sZWNmEEP{$zmV03uQySftonAK8HXNJP<$gI4^!gh~Fdc7yk!-pytAz{p76V zSiWH9xbqXysrCs-7@nmx)7#Z%)QlGhT?1o}8+T@{4+sYH%q_Bu!-Wd*x&Ahl-IeR8 z;V%vZCXHDL^tTnG4WD6f!tQ<@T6uQ+nC$KHjJ*$Gclp_2pk5}Mn(?!|1Hsq zn8Jv7AJ=H5T)-_$P_@+)u9>-fntzj!>Y{Fu_Ek2#g)ku>?@E)#4kFgvUJLy0om()j z>^8+0L-I`ecf86tBHMg~Q?^-_-^EqQtxvlk8525M^7fuaKE=P<<9{li-`MLR#iduJ z6(*9t&M5?Z%?WL9Vh-tB>>GU$N-?%uiU%Ur;~L<%bavf9H-wEPM~C?tRkosvCRB7p zNtu}w>jhdm0a|l8QeVT_+e&L%@liKN_m1=>^|&4wEXhquCim`8oL9KQ?1(Lp zUCeN4Ta0LUxmP{^V<$erK>;VlK5(KsA8tH%s!*Z58RI^dBBw1rBla{}M`b^KbWh3P z)tH{^p`-X1jeot@tN}ItX0wxm+LBEhEk;vU<%pkI2>)Oy-v4PoDhU6X*8u&sw-}MD zTV1aGdNt>sj9JyqqqpkT2|CNVqlXs{0L|>S-+I>?tXMfy`mJvpWg}aW##!i|&%Gzx z$482e)gxj`M)6U0VC-&JbDB|JHKOICKu(SazTGjtw3B)c_S`$Oy;_y~)l3+gtP>!V z?qBnUh$QhK^LuQi=x*DsKJ8<2|35@aH9?IYAZ&Nv$bQLI@3gt86*WA}b}Rzpua?V$ zr~_WrrNalmONiO_)^O*JIO3dy%y%VKQPCux$>Vo|5h?CWkukP0L)AemZmKg4n^M+f zDnWOM(={;ljpA9+swb+3ZrnZWSEtnGu0-LxB6499nP<$pnut8*L7FVP5uFZf!#<#n zxVAp6+2@Mp^zOyT^7xtPk=FJly3-+c%U5i^nHj9~-6(T7)x~`LobduSv4@I^>6wxW zYx`5adIxAaBBR*or?8v6?q1{c+7!|!XEuNX;+_Ci^nWpOrK z=h|B(6%p$5gzd{XpDQ~(b5B+i(ITZ9c~K>YaY5fZ&MwwIC+X64+M>%xkA2dobR5m3 zip;m~Mj@#iIpC`4cnGxB4HtkSav8qQF4~gAc&xt=OLW%q74N^qugeK~(Yh_xy>liJ7;Dg8(po7E z*})CD8P2;HzsdzuUP9iM2Z`yO|V;ZnHIzc-Z^PT=WiJ(at|90Ewj5b#F902bv6hi|Yj2<_(<3 zg-kNLt5(5YIimSM5`?WGpyx4VEPBtXab;Jf{jR!*n?>D{!$^M+uU;4qFxkpY)f8vG zB?2*hBET2s^QUeVj0Jf;uM69s+VTOkC7i?sJLcoCe6FGND_}r(8VvE$=a*gzf}gbz zJ(t}LBU4>#7iaoS7-j3=Lm};KzEP700{hH|@!-R8uE5f3_dNR9^Z5QVSoe2AzS?=4 zXX;YsoA0;BXa6gj7*};5aN@b=z)Qd>V5gY!Qd3mFnt%FHmsCuzk6tkHc8K24q;vGe zFmwPVG{WYkK#O*JlJm`@fDifhVWrbq?SObaS?ZGa0StXvN%*0O&&h{i5FW@maBX<( z{DpPkKklX6Gp4zu-?Je3!J?XzdHymzom^rNZTS(!^ z9zaaYxni=e36PRRk-NehWDIEh@#DCQ|G1@_Tkc0iwN;!p0ZPz>3`xqkzA+L#%}Kq# zQ97};>bZ_eOggJ?^IX2dp)YfoCyvX7*l($XP&g#@x;fZrt=S3bvn(T=aW#RbQJbz8 z;}A@E3U{TGCN$)s2!!oB%t~>Fp_t?doKXF6AiL!iPe_;ZSSWki6ze~IOr8Mi-Z+i9>__K0 zcAm8GXFLade(IDgt6VP?8=ZFI-lzVHs`R}?BM%lJtI_F3XH;d;-3-L?SIQ)TQK$T) zQCVL#91z$fq(s6J)|`nD5dHUXg+NQ$eN*UY%ea#1@Y63w9zu=$@>4_eRy+bR*PM0U_kbs?FREjUfi@$Rqj*oFRJ$O`G?@=JS#>rNOZ$jHp}9% z@A&3n^leDWS2W{geq!=a7%29I9Aj-d%7xbjgw5n69GH3BD4X@Q!GH1FgThPTI|-)` zpCQLm=T1zpopuKSqu4yC8+PF@X2|Mg4+^e`%h8$8+kRn|`wRF&lseR&S%+EG+q1wS zIIf_9DeBFel2tqQIBJ_@)jBG_z_FuWmLib;P`_#y13oaQc;ct>NMZSh=YW__<*4EM z@*uc;`l2AbWY=|5Ss2E468U`cIS?-ij6jA!|9;+YDx`M_HcjET6dcPrfOzW`nh%-D zJ-5<~#UQI1v(<1mp<@R~+1jFJXZ_A_rU=n?+i=;glm1+L&s>1o66!v@Mdy{4DOuwl zi4vZTz4~B&&<}oW+O9AEm*RX)z$1|9K0md!Yk~O|W3yk701Mm5_M(mPkq_DQfXUJ+ z3RcDke3?_Gm@xQWZv#zEA|j>jtfl*>2AzXN>TvL*H^wxyTI7VnDeSXr6(gjgN?D+$ z6ugiMPhdo2`M4IuX~H@=R8k>BwC>bjQ^S_W3=%hbT_UreqK-viqj*>RHOvt);r@Q(AJ{9nsowz zPl{FE?5#YCj@p*5rQ%FBi+R=!kM4~Yozq}j#-~4jh((GG(-Mgr@%#t}&18+V-l)O~ zy)qYzn5GxUQP{?=rn8pqgKV!{d-ZhpRhn()553h7tig(M-9V3U9VE=Kn9;lR7meD^ z3A>s?q zoUTcBC-%ET6h3NQwMy?CKWGE<>!<&eYyEIZ)r}wz;EA~Wpo2XN72-97RR=KKF4~-N zS0%ttAq^{jtL0d+$K9DMpwqQ)b4d%pap}4y*mhN$5SQJPH^{Xq3Mk{CQ1(d^HV5e) zEOKCAy)TQ&3;kAHs;&nbxB~Lwn3kFCj86`sGs=jrPv+FTA+=V(bd#4ki+v9e{asT7 zLe~7N8|dEFe`YoAWahArK`;*@IiYk4n+2P{KIT&VYJV;2ZvB;mBhy3~d1>mK(6~Yf=TXZ1Im(cL})vHCO2Fm|T zcBl2&D(#jeJ0cL=m{Mvr@>0AD_CMPnxu;ZsIweZJvb-fts8pRwxw;$$xw8vCe<1+ogi#>_JO;Wd zxL5O1W=7*%DX|mOaN{LaUd-<6*_RwWE8p(yf0j+x)pM?i1wuY9Z;vA6%F6o!ztgj8 zZN@mV%X!H}A(U>to!+3ryM3{*cBkcb2bP&Y9IHIN{Q8IR)hoQ{^iiGwF!XHA9WiN- zl*hX#f$&wrSPQFBV^)PA1VrkX@I&dmUcd@Y2jZIg1JTG|(=P?uO!9L3JczX^eIvEv z^fap~3*T7uhjDmQ&m1WmeeyJP2_L9{LW=R7+xK{~9HU#g!COAK{1t8;1p?L?gOhhk zmK+~HHM$MW1#de>A7I7o4AJKN{9qSq(v?I^+8Ol0lN;i?EZrQVCPgyJb%!sJ0AxoAa8C%R?m@(^f>Ha*W&+|Ngz;hhm z9~_QjuH(GU{q=sm-{<*$U1Aq|hEdoLpcc-5F0p_rG~gM8`AV-j<3#me)23q_PTtTz^^iyXNk?ONP+tazPMQjDs9~T^dITJ|sDHpd) zLM_1OANB^ig0}%%3ps<#aK1c~B)D>I58HB;#)EqE+mLVFSh4V$FiiPA{RUh8xrg`r zHFOL zgEx~DVqXX2t~&B_9X?Oy7qMx(imznW=0$X|i zXYld)Tr_T{I?`yg&=||MeFz4U8+JN6Vt_WP+?8+tfA!# z(>MZ$WsO z+cVx6AM>Ux_iLo|<@K`PQqUv-hA7n}eW-8W#IV{hkNWJ6uXDn*er%*}HS+LCqyYD8T+(en< ziemZC6iQ2SHoIS365QVHYYBjQ1$53FXCgBvDGlLfw;G=NEFRIqetXM&h7AvAa3H_S z@joXy2kJ0-OmInyb5d)Ay??8f<@Me2Dyj9XB;xJ2t*gVMP+S_{r9A1$wFZk4C9T;V zYD$_%U((VR;B$YVK#>+X@X&#mEsT0`XwstG?re60o2byO%V*zp1tyR>nVj4EiUg0_ z0&vU_P4Hd#!-i z0cCs|`%G42zfP8YK4|H;=7@0+=HBK-LzEPl? zFZp~G^;l=)b5z?+dIFaT&YIWMivqT>_NF5_G4~lPj;iO zI5v5dwG65Nf(^u6J%QYaylq{H%uEI-suZzpd)Cw!ioTo=wlJIN(>r?y=BkO~oejX< zVn4i-nYU9sx=$v2RT9bY67&L3-jdOqUUP33hd#xQ^IL`oeB$mIv)?{)&AS2jza0Bo z@qEK3**$&p=m1+r%Ot5>Gp~h>V$B89s=dVX;h97};|8e6 z$8u4)`2CW>IfV&P&h23gmmTP5OMLaOf<=*2aZHfj)I|&^w(^mT)=%rWzO`rG0i6b) z@W(7hDSy9#2I(@uB`qeG5od(R_d7q)!F7tx$=z=D6&97dy1{q|};CzcUJ@U^Y@0Z=Bvl zS^9S~fZ6uA2r8xFBq%$YbiBY-`Ft2CM_&JOHn_gQXAM**U+HiM)6fZCMl>+7eJde9 zy}u5O>1|X#HMSEkQXFbDLQ$$vg`6syJ>mwSNQ;HfgN4s5)SdMZ+MJNr_>@loht=z2 zx)v~p%5)Y*fxqw7Eq+V4McMR)+`!Bq>fDqinQ`o=sjX_Ro{Ro(ZSH!P%j`S#v%@Eu z(?6sD{5N_lQIX%l>Kebe^bFdCW-%nd^ zzL9P>q|c`Ig=VquA8i3IQUrE>TdTwoR%1H#MDu3Ztt0JH2$?nQ#uepcVuzMK$rf6?1Du=?{hwq`FXx+bO zu0J3na_wQ(zIj;GMsI9L7GKbiP}}^W@!5@s#c+P&8oM)Im7E5xoD7=MZYYTu6` z$ThF5nyd-h^=#^~`bxSHxH6{T4Pr&0&Z+LXTuoY3ibXw#=1A*vq+-`vdoSwEjd#g` z^ZkpXbAoD(hN#>#?CEOpoP;jNX>J@;S|aHJBsPn$7DQgG^C^AjaTc%RKBTOaEAT_y zpE&xFB^pp2vTsZ7AHMJZ(5I+o-&?HD6kij{EG3`ZQE?x0n|k_IBA8_%+QvW7l>Vu5 z0F1)dJzvw2hFE~#7f=k%&Z~pj)|c_`zVIdG!j%p#THoC!a$u;rG%^rv%Zb;EV!xrx zCoX=OLroOFb^iOdJj3B6F6&W^<-A8 zea&F_^A$AO@=rJP)5PgJh&*NE*s2olT8U2dKTli7g4`Zol$6z1e=qsqJ;7A5CC3tX z2rb`&No^>8kd-Q@q-5CYqU#!~9BpLoy*d{1yum$WVj&H$Wik|C!DLZI60%m)?ahYP zUe+WZW1FmYVjWg@l%_EIt9a3^QujO~Q5T`tyoGdwEnsA(UkMpc(8Fmpp944nS77)G z0Pq5_5cIB~z`J1-Ylp%t<1u0CXImZ0t~-Z3xUe2XY<~Mj&&=ClzrYbVarrZ1BD0%> zm1B;ekhYKoKC~V*HKO6DC-f;jGc{~xrFLvi4~J{9_^=KU5flc5IdOcPfD7Ql3z%|F zh7t|NiZ}}~Sm#I#v&@0^5Ie9LfL0^$aqeUz;t*e^)>^2j;@lkar%MhO*JT?9V)PWH|f# zL53Lqe3uXn+r;SUCIxmgihPpd^CY{|P<~y2;XaNwc(oG`>5POK5L5~wOnMvNdU&;O zaFbn0ky5U^Vp7S=z;`MKImJbNW{gQXfw z$iB2eoa3EbTMil&WgSxmI=KxSc0U>y$SLRbo@P+AV*Mm1KV6sPPzlob@v84i0Kf&b z0k}@!d^LPbvLBC^u@wz52w7q$I=rH@8Js6lYCBlj9e)%gtroy)>RaH%_|`PkE_Wb5 zQa4?qI0ncN1`@bWuFrr+nOP_Qwp8N)N9jXNji!L_A=MPl-v&wE5hxys&uvFZ+BU8f zk~K*s{)Fs2ft=F4AKci-z`s{5@cn?NB5XhavTnCa7o3DgL$(W(<@+JZp0>p)oL^O3 zLiM=BoFvtb`$3feB`&lm7k~qB!oZ~^NQKd|dYx&R_JNcReo=(vq(z+&WSO5nH_j^Q zU@3c0i{$AU|FmGbxk+bm5AHq(bpJa4#GR@JUQ#@Z9~j&uW^0|4MT#ewuvZ`O>Qv<$ zDZ+lQVH{F1Fyfx&U@wql!q55`jqZ8MO^regyGu0@uxsTPJ6M|&B#Q~M?LmC6TES&V z@sKR~AjH##rjOnh(`|DRBPmsx4<1pyY}RGnq`Cj6&UjK2<%u zFd;bU#Hap+TJ-z$cIp5GP0p)XVbzk7DWYNaJE~R?=qx6Y*5Hss+{nh9TOFTrc0dw* z`nYRV&47WERI`a2y7k;jk=W3-@)n&gz~_j6@sRDPWL!cqeH0RLN6!scDRWQ=^4mb! zWCJ7zdrL`M5zW*_kw?-3IUX!pX?Q_WpWEu;`8i%ve2cA7`?o&SOM%HqG>S^Mf!^48 z?+LeI;L)732&&qKJl>UWrR~PFo>hjWbf2rSwfDsQeVipyui{EO|8HaEWe5bRaovFK zXNiYBZF4+2Dzg;~cusB*#_gh>k?Ky=mD4fhZbrR8OK&xLkQ zjawh*_>vHB+j{1G-VKHtX-wc=AmQo!^J3*s)?~b& zba$hB#OwPs=oWnJL!yjmY+;=^?vAvCG;rfSI*^dv*nlm8VcSK<%#2W4Im~g(`E_3h z@9~2vcV!mX%-;bc5~ln1wa`1nOh&m;vs^Y5rGeYe(hg*rg|x<-)X<&&>29$xX1)9{ zMKl6eY$OUPDWO4aa${}e37#Dg88&Mc8Auy&4=}Y$hO{%D-jcl5&DhJsLtwAm2$Qg!{z#obF zaH29s`6K*Q#y=YQs^@HhFY0!S{M#@d;5JM*Y33smvQCaG9gGRK?SMxoujj6_}I(cB%ok? zdh_hlDfn?WYLWdP#ksV3fQUd-?xVBT7bl5IcBnHo$1AFt)?i(GL>XnrTd=YmJ6!uh z^eV}zdy?$$w2g6-P=wFF!SM@EPF)3GB2O)&_u%qD&aS^ETxd_(ER+%D5`wD5c?xCt zwGextgMHXvNW$%JTob=;RQPHnrZ7kbbvCs{BXQvX)l*1AK&dYp{lT*CmhB>m?3;M}jTT z8UweM1n27(iG5NC)B3s&mfW}-dtl1>-9x~i8tOrpGUf<&!bfU6Ro$gP89K*yq-3EV z3mm0dIz-O(L)wpX+z|8lZJgx&A(O=pb9%a`HXlrSu%_Z`1LH#Y*Wxbh$eqwG63VKt8myAs!vv1Ph{+FO+az;i2Gj^iA= zQ#fyC@y#voVvnN|mq8F)f_W9JkuHKWzKno1Ik73rkX|7O#T}QlJc7|_D;io~*JjkW z5}k&82+c(0DF4C}<0K2&7^8+~4+65ki6jKJU-Lb;?(<*PtBq5)P7YE!6Z1_QLcmc* z)-37_@uVUTmf%Ul*<88&{;rPF@hZv6-Aaf2mYjW-wG=n0S(G`ale>^^d<4^~x)!W5 z8KLVXQxVb?+kpdZq~<@hB0p^J9bo|2TFNeWq3As4nM7}>L-<^dgVj(!B&3F&g{oED z)Nqc%9-|KlvpPz<8RHaMg9$j#aLtBDOuI;L+F)-6bD==#@U4en4W`~-#1bJw55FCr zrFH_v2Y-<``C{Nab1VsHQYM`^s-7bUX`4Ye#XF*sc23LWkD?gX_0|e>nPloZ7d&vT zL2=sLh#wrT)HQ=F^NZz zNn?H7%!D=sZU2w#Gb`{3nn4trLbmfevwXR^Ha|*#9(%$zAjx^VDsY(t2z|1LuHov z@&rp>8F;>JQKd@*=0PA!Ld@h26;LKr5#fy5fV4)VRfBiCJ?JGpi$(k2jI@b#rzL;L zU>rCjmD8eaS%(;Wh+tGaU1_0*PKu<9{KOeQrlK`4?t~ zNtbK5RHuPENMSS*+wRCCESgx}#r(%rFbK&!cMJlYb+92$TNba2eM_>hY%VeJ;jy%`ZWM$a|J>5?mw-NLy zp>99VETTXE!EJ4M14SdGCMP-OtKCb!#U;2qLQ~Iba8KAXJ0TfMV+PRm$nFML#C$@> zwcf#0-cyVxMA-eek-vyuvKb_2j9dMISrOwV0O}2_jjr6>}zi`}2FvNKkrj$QzSq+GV#5)JYh+y-7xb7W>U2#xRQal;m~3ZxXM`xjud1&Fa1SAV*Cl<88i92n!cZ z3vHXGeH=N?GlGcEi#rP>>aADX&ZTc*mIR-bNnLY!u3cP=G5y&Ca=7||`VNqP{It^! z+`tTIJPBd*bzy1W%zBGB5A1~yl)U+_Xf3MEKfGrb7a*Bap+`Gp%fV$WzvCR}K>UPb zgfws}L}PL{Xj9LD<5^R8e>2v3zE{l?`bx}FQoHD!8!5iHVRvs|g5&lYcWz6IuFHl7xQWkuEtY-FE|4d{^QQaoa#(h+vfSXH(~zg)v2Xv zE#v8|n8~>Zdl*NKwQM9AvjumCWd|SI=G)JN072xqyR=Y z=FuN+g?4;v3!L35)v~QdOGwUfj)|u-$iY(znMHd|=tOE%kgG3s=-a_zvzNWfRX>;r zFW&ZWgxtC|#8ZbN(!8y>AH-L3vnnSdL<1L%J}MpO#4~Ay3c*~-{ELuJ-GQGM}vB#7DP7g>lZFbrkEytSc2J@um$Ua zLH6_0X&kfy8J00xA3Y&F92{cQbPVQO0@vPRAQ!KgVlJh|q904I&d~Ez0-PPVL_3;> zxKw{FdOHLF0$%OH>p#4q0qJ(~OUoPlbZY`G?*_qz@17b%`vAnbG4E1{nFRygI~g+; z18m#eCj7u{$9IC>&^@i$et6;Q`sl2swOH&O!g;NfC7Uj9*6JW6=#UGjCy%DnTB4TsHFE(bHnva6x`+ zj6%;~SPL9SeI+IE(dd&7s}>z1?@xPPeB$0a^e!4b7`WG@`K;xW{vEX7D7R$^0mhsFGCIjYu$-~XD_ovy$UMG&VK zv?0>D&OBRCdmxP9gYe;vHN;=`tMjvu<_$BDasdsDkN39iR>6fvD8d*$XJj~bTfpwG zX91vndbi+?rTI$cw4{QNav+g4Q@{HWGJ#v=*L1!W0gP=q%D|$hq&6?a6f9}8AR|_3 zoEnB^cL+YlPJFf3+)Xh}uPoL;X19jJF>E|2&d=E}eZ*KNSwZ@E?P>mctj7q6>WC~mc|MJojpWvFm z4`0a5LDyHC$bQ#4@RMUpEyf;A-C>zbXWzg+BLDkD@mp(27cRYI1SPy+lXGs;zP~(h zHM>#LA3pYdR3|ozHhw3V#m`t_nFEkZYWT}QB{KdRWU^bLt>4}%9~$Y72l_t!4vlj9dzry%$^lH zu6=S*`3nOxU+DmTX?EjELA8?yraPQV_rQ;!B}lzIp{80@r@h0&Gs#bF4vX3i_d~#i zVU_4itmy^gL;f+(`n(oy?8k&>(nl6NZiX+PzWQrbDFZjskp#E2@PG(j$5}nJ6W{f} z$o;-vN(1zix9hQ|ADbh3n`Z`kK+)FUv96?M7wE- zZk4sG=40=nEzI6a^BUvsO+pjux6H-`DIjYzC`JA@pMFB-xP)r=3z?|poGLgY5J`LIWZULH&IPW;-Z)1LLi_N6mB;k%Gi{qIyiUVCq%_>tPOIMdwE>e22e55E9) zyXl4P2<^g*(Ws>Ekjza@I+i3gD?XQJk4Iwl^t0^DXwYw~RQy0)iwGhsD@w2jB%E8*1e5+Ax!-D1;>%D1H%#AbR@ z-))3^kqt-ZU6Fj8H`xn4nCFUMy-E$6e)oVE>6J8gTV>d_KrCZj_*OWce5tHGz@J{x zcez~EnIeSee8h$4M6YNAmxjUr05CL8W&oYSOcT=@C| z&P{MBPZ*@M=J%653VPN|zAcckw7E$p zCqh;Ci)KsNt=t&n48n1hf0Ul51+kg=Z(b|ac*PEW)JRklS9nEWG~8;_&*Z)&jYNT# zXJs%X`OXdBk-xL=aaRkY%NERmygQ59ps0^_z0;V zenA;%&_5xS>E92hg#_h|H3a6Fj$zFXFDa%}HVk$2ik8k0L|1wbzNt1{9u2>RY z5g0L6xu${N*!9`Rzmgoh>^a}$Zj`s@i3SQ89_{dE+K5Xx`G3d%L6EM6Onw(c>iKS@ zb*T_L_YNV8jNRTxzf-9|T$$SyO7TqFY_=%fi1VP$zgGGBO$B`K?Ut24mT}&%0tZgj zEzb$|Ddy0@0OwDd4C1L1kV-eAWGnlRt3wKJGYmgUfsxT| ztmVg3Fetk%Zu;XX7#G?Wviv;n67L^YyUsnmF96k5N?z6_!QY6F%;S{lbrbQL#~$l#)w(f zT;R-!IZXZfw+o=@E1nxL4xZ~Y!61(>e(#y-rX+81uhDSktF>{v=~087@Gplcjg%KY z<#r}l0RR{@(mQPp+A?G=y>-l@o){pWJ{t8n9Q;7N+j3r1_lrRAt7scn^4s0D^)u*( z2{R$4YBl_Fnd_Qsx1EuvcY4NGM;z8flP%Pt%Mxs}=G z + + + + + + + diff --git a/example/test/android/app/src/main/res/drawable/ic_launcher_background.xml b/example/test/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..ca3826a --- /dev/null +++ b/example/test/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test/android/app/src/main/res/drawable/launch_background.xml b/example/test/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/example/test/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..c4a603d --- /dev/null +++ b/example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..c4a603d --- /dev/null +++ b/example/test/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/test/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/example/test/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..dd10e4a97ea470eb01db7ba1df2a41f7ce0971aa GIT binary patch literal 2065 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 literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/test/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb17563d1363ea78713b94aaa9f58583b06869c GIT binary patch literal 3056 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 FV1h{}^Pd0! literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/example/test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..0db9595ca62149e240dbc94b44f9863ea177f22b GIT binary patch literal 5290 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 literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..192db958cada7e1b6aafb89965be2313664d5221 GIT binary patch literal 10771 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 K%2rF8h5a7_2jk5E literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/example/test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..de0bc91df93a68ae6072bd921f613ac13942ae0d GIT binary patch literal 8594 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 N!UAPpbKdLr{{YJ^>|_7{ literal 0 HcmV?d00001 diff --git a/example/test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..91a969188f4165b77311b99b7f94a760ec819855 GIT binary patch literal 15647 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 + + + + + + diff --git a/example/test/android/app/src/main/res/values/colors.xml b/example/test/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..7eacce8 --- /dev/null +++ b/example/test/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFFFF + \ No newline at end of file diff --git a/example/test/android/app/src/main/res/values/styles.xml b/example/test/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/example/test/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/test/android/app/src/profile/AndroidManifest.xml b/example/test/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..b56a811 --- /dev/null +++ b/example/test/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example/test/android/build.gradle b/example/test/android/build.gradle new file mode 100644 index 0000000..83ae220 --- /dev/null +++ b/example/test/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example/test/android/gradle.properties b/example/test/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/example/test/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/example/test/android/gradle/wrapper/gradle-wrapper.properties b/example/test/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cc5527d --- /dev/null +++ b/example/test/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/example/test/android/settings.gradle b/example/test/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/example/test/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/test/assets/ic_background.png b/example/test/assets/ic_background.png new file mode 100644 index 0000000000000000000000000000000000000000..bdf0d4c2d91b47be03fdb48703916d40195411cb GIT binary patch literal 247 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 literal 0 HcmV?d00001 diff --git a/example/test/assets/ic_logo_border.png b/example/test/assets/ic_logo_border.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9f70318eaa8a4ec9fcb9092e2781b3236f5022 GIT binary patch literal 14616 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 literal 0 HcmV?d00001 diff --git a/example/test/assets/ic_logo_rectangle.png b/example/test/assets/ic_logo_rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..f44febfa23eff58b310de282052e2c54da2c7aaa GIT binary patch literal 10138 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
6UqtB)dzQs9Q|KKRq=vKMy5JhG3dik%vqwzh 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 literal 0 HcmV?d00001 diff --git a/example/test/icons_launcher-dev.yaml b/example/test/icons_launcher-dev.yaml new file mode 100644 index 0000000..71bde0f --- /dev/null +++ b/example/test/icons_launcher-dev.yaml @@ -0,0 +1,12 @@ +icons_launcher: + image_path: 'assets/ic_logo_border.png' + android: true + # adaptive_background_image: 'assets/ic_background.png' # only available for Android 8.0 devices and above + adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_foreground_image: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above + # adaptive_round_image: 'assets/ic_logo_round.png' # only available for Android 8.0 devices and above #! (Optional) + ios: false + macos: false + windows: false + linux: false + web: false diff --git a/example/test/icons_launcher.yaml b/example/test/icons_launcher.yaml new file mode 100644 index 0000000..e1c1e7c --- /dev/null +++ b/example/test/icons_launcher.yaml @@ -0,0 +1,17 @@ +icons_launcher: + # image_path: 'assets/ic_logo_border.png' + android: false + adaptive_background_image: "assets/ic_background.png" # only available for Android 8.0 devices and above + # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_foreground_image: "assets/ic_foreground.png" # only available for Android 8.0 devices and above + adaptive_round_image: "assets/ic_logo_round.png" # only available for Android 8.0 devices and above #! (Optional) + ios: false + # image_path_ios: "assets/ic_logo_rectangle.png" + macos: false + # image_path_macos: 'assets/ic_logo_border.png' + windows: true + image_path_windows: 'assets/ic_logo_border.png' + linux: false + # image_path_linux: 'assets/ic_logo_border.png' + web: false + # image_path_web: 'assets/ic_logo_border.png' diff --git a/example/test/ios/.gitignore b/example/test/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/example/test/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/example/test/ios/Flutter/AppFrameworkInfo.plist b/example/test/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..8d4492f --- /dev/null +++ b/example/test/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/example/test/ios/Flutter/Debug.xcconfig b/example/test/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example/test/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/test/ios/Flutter/Release.xcconfig b/example/test/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example/test/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/test/ios/Runner.xcodeproj/project.pbxproj b/example/test/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a324004 --- /dev/null +++ b/example/test/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.test; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.test; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.test; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/example/test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/example/test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..c87d15a --- /dev/null +++ b/example/test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/test/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/test/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/test/ios/Runner/AppDelegate.swift b/example/test/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/example/test/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..df3b2256ac4510b07c90deca012f64cabbd11bd5 GIT binary patch literal 26033 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 literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9fbc865279ebba1f73219e70bcd6a022d70ad0c8 GIT binary patch literal 934 zcmV;X16lluP)~})4PE#A|o4aWNaGy zG5O7-EI;>?11oWu#gX{dfju>g!5+FpT?CsJ%KsEwteG5%!FHb}ZdBdn#b^y3F< z{$1WejB2lNBDRkv=?oW%a6)l|Nj$#H&!o9X2=?zai}$g3$C=m>8p`$lCNe!$Vsd<4 zP?Ys$w=O>DOzad5YQ6QgCQhceuel*8pTw<+M`(zF;wq1b$B1}^GfgPOO-{wabZV@H z8hSC$JWU5oV!|aoer;1s2wxAi#%SG(8v1Yu@3s|gEtSR-ZSkZOwjlnRdpnxV#^m;M zoh?-EMRVtJGOCOxHL{>5wQ zdzJ~X$S|^uL&+4-aMRz7lX{cS;YARhzY;gri@^YvdwNlZYtt!2Jm1yoS|0lq!_-L=qtyqW}N^07*qo IM6N<$f>8*`-v9sr literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..5f91155f7e8fac5329c579c41c24f8c5c0696397 GIT binary patch literal 524 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 literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa19637fda7aa067944f64f555124a844d17be8 GIT binary patch literal 1340 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 literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1609d7b302b1a8b1f2843e3a30d486bf9e863c GIT binary patch literal 879 zcmV-#1CacQP)){90%~HFI&NYBj|t)@nRIBCK@ij#fV}j85CiI&f3Z&hK@6+e$v+0SkrOv z3j1)hUM~JRG+9$3)1449E2ezFbiZDzCV4ArtVxmWN%*sNrbxX^WTM8Jl9`UB85H5@VIYAIcci6_)pw+k)M( zu<_`%f>2>kX%%(Gh3_(J9Z18Z-3!ZmiZ+q4n#%CqkPL$;YRiQM&3k;MCtH)B(Kp-bbs3666rN~BOIfH+R?2~5q7 zOb%I)yy?Q2FqvH)IR&Fc8Z}gD9ow9noU_b)71f{%mg)+j1T4sb0DjUaUm5p{u*@pT(%^^Obe!SY z(Rix$VeIwImf&V5ol)4G9tz;+P4eXtcJBS4G&7_6ICEVaolc*5^zrTO;|@BbvzLd? zp4QEt&!!YVhgNPfT^3KD?u!lFBJPaZC!Zrbs$X6|+SWh3D5>PG(RUE-c|GJ#<6q#!waHfn#|2Kbav{&&_H`jZJ@jaEXcu~!QrlxGbwS+woAp@ zlB^bg9s1uvY~NY|FP9hDFyGiviN_*|$0CWxB8kT$$zM3Jf;qYXF&+Q_002ovPDHLk FV1g{1qqG13 literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f5994b8159c153beb2b211120662c4c80befa323 GIT binary patch literal 1754 zcmbtV>01&895(YlNfB-3L7IkuN6Y0gB^gddMU$*NvJ4ILK+T(lI-2FJscA8fJQKwO zSxwEO2*b<+nn`(~ZB9fKkI?0jbAQ90=RLl>U*6~WJ-;{83*)S+^o^2~l$5Hg3(EVz zga4y~^nvcDNgtMylB;q>IbKLQv^?b>0rb(4UuE!oAH#c;U~&q^Kh8S3=K#0>9FXMo zL&J}*044G*ZpLi3B{H*LSrM#pq&S;}sxYvWd76nj(&XcEJFNsoaEOK&ydxz3ZuguK zyL+SFu6(-u(KOClyKqBY-GXuRNnZ;8cl=0%f=Q995%vnR+k6(2#X6DkKQN%1Rwon) zuDP%couk*3(O-|A6RdUZ3TBu4G`RG0!kS(|<8)dHZ@2|WGA<-;jH|sI zQ?#y-vez?Szku2tk7D$q~hEGb6VMP?oR+*%}$alIPWrtl`m`DkcTTXpSD_uryj{g)qiF?t-JzXe+Pc*xOi)%_}u1 zR?sV~3k>5_L~*1K8S^eV=>&DoY<(GpaBBg_XtyBx#v2_O-Wi8V)>u{1{ClSGdQ=JW zH@c`tCj4e#e<3;mg3@|B@y5=l9~0;VX=Z-vJ+lhG1MIjNMEx5}3)}o2iY|ATor@eJ zq8mypVEeYA?c}rU_Y`5GWuuxFZ0Sv?6J%jJCm(p5dR*68L`7#Oprtvnlk> z-o)d7*sslrE_)>^k&D@X<;t)7Je?bBn6W(HTxXbmDhT5Ec_c~F10CdltX>ch5N%)y z@+38^E2^Hl-U@*qD}>))bU z?$9m7_H}s_ZwjHT?okbLBYRnN(?BLP*KFWE5 zILqS6cx7&=UiODyA-J0Al+OcgmBAxaIXzE5YecXtH6EXvxgwFaj)6u_Y4IqMkYR|~ z!O4N*_{6IasFyEqI62j`nM>-f1vtYDKE!`y?1%*E!;g+#(#-beu{|CQ%uaMORh3`w znrt;j_6&XjZ%OP!^QHtwavJ=^-e2{?REGR4!cRAa!&FDVi^zFA{l{1czF4_G(8;~v zCF;}jkpNrO7g3`98e>pJBBFBp)AzIf)uH0Jc;BjCn(lVBmZR;1-Dg<0`W$bS#{qig z(~_kMEp>!d(H-smQM{Eir*~1f{w+GHk*2SCm}*$=cijSTrd9>@O8IBr=1FzB*!k<_ z0TFxj3Du2Q96ORC5_^(jQEqjr5Zxdg_T`i;OGg+!UqSfC4rdN-Gw|@b`mIXqTypBt z#cj^qu9sZNW#TD?)Vt6oKvHQyk9f-x{V)WPMNU`R3++Y(>K?aEvM$AL&=u5F`T9X@ z`Dq$gPV)X4Bb*-|`!HGYm-M0JzSO(h>-i>_U*dpye)4Z0iGnwh-i)+(PU_g+li2Q zZP9medHJqHdpQMoMEPBSwp~ZU3b`2}3HaumgQv<`^qM0HKEsvF588Ml&T-wmU@ozd zB2E_@L_nmhGl$n1phAWRBbl^@?-O0NZHnInqDzg;K(&h7G0Riqk!(zv`Fgu@qmkED zXs=)-Y@6v^|E@!?if&*mE#GvzM^7;vjAytvyqFOQJlEa{W`HJN$;6(-J* nx?7nCpZO%l2;}&G@b&PC1n|%_?t0+CW=Xj^VNfl|Yvg|c8_G{! literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c6e99664718f6dbd98763a9cd0f3e74d0f9729 GIT binary patch literal 907 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 literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..42a4bb54de71fc241334ce66420d62b03275c7ce GIT binary patch literal 3402 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 literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..b74e7e9ea4b9c874b0a1771dd1d84b33dde86bba GIT binary patch literal 1302 zcmV+x1?l>UP)bAOQ(Ev^QEgq>cD-fr4t8g8$1jB}}<}DRyO9j0}gfkUl2u4@o z>TF?GfsaVg2jX3fdW-sE1D4m&nWeSa!WM}bRM0W)bcG5r0fSrt)x5F4vPD8h1twjj zLe9a!S8prQ+^W54tiG~V-~twAiuON*sr@^(sDtPnfvxX_Z4zNdT#=tyhX>Z{+f6{><(33;`Qma^!f z<|-Sd>Wx(@kX0m9EPF-pTmPQ2bp&$NH!BtOY9g>&VQXtf0dbA$#g~p z_4-CCD#~W$twPlkV_AWwc!8yI;wu>`r`d!Is~^;)@-I35aH%Jz^Pocfz}mxldzfVM zHOn_abP>y5yYa)ga;R@_lf)$kUSKfSfBqysnwIAZ)$N(NE|*iOmC30wLFoN>{1P8F zjvfQH&z`_X((*!4w6+@MsT;Z9uL+_+L^L*g7ude++ZUD?cm90O6?aSMe8(Ca9Z|1O z6@HljDtJ!>=orapX8G8sKVN)pZz#xeU(Nj_c#nj>=)f;$26Cjgf2XrcrFv2Q?m4&k)l~QFQc<}yU$&{%!tjs`(qC_hrd1k^uhN>fX)6~gpiT+ za`%Tz{-z_4JhE})`O}Qjb$0CQf&G#2y@%I;rv{=C>Bl#pQMD}(a#T&%36esNX8*=K z=MfaedW%+w!KCj$nd3G2U|y3C<~8|XUXu^zHThs(lMm)K-M3)>0mX$WocNI(ApigX M07*qoM6N<$f*&<*I{*Lx literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bad46bab62018401a7e86a10dd837d9c65bc85e GIT binary patch literal 2568 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 ItLO6YKMq?Ee*gdg literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/example/test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3c8c0c3d45fe1ad357d804d732426f8404e011 GIT binary patch literal 2951 zcmcJR`#Td18^>2YJ*ARLD5s?`QdW^w=1~zj=UiyYp*4(w90Owb6ovK6Cy>hffl6XP2X?|-m8@4oxG}6+R&C(;3X`ea{8Ear zxbN?|Gj=hjNCrnnl%m;T;AIom%At`A7s;PeKNbn zNHnRfUwaT=UPy-8-e+{P+h7N)Lc*PvOz+apr^huOb6Mk60C0IP?TM^ay?xf%%s+~5 zsBp~h!Zh216Vf>U#N+|&tYn#4UKEV;$w9$c(6?dr4Zh)Pv&+=q($VVI7d2kMUk>-h zO(=hV(&-Tvf-erL3DD{3ds|GyZcN^?qS!-?K2s<~`scXDmM{Mm`}ZJvD%|o5rS!5m zbI;tsCow^FV2)z(EETHgfa29)Dy5zUg=i8bLrK{UUrid{djPsjK8>iO9dFC}=k=CK z$H!CyQgDD$ka$3#E9|!q(X0DNK+?eMXk-bY%4f)Hs0EOUyGf#1&N zs}am0Ow?SNygNu|v&}$Wq?P40dtyPuO&FcQQp@)@(bZ1LcbIbeAs`gEo0r(2 zAl@7zVtlKcA)V&z?(|U9M{Ax>pRP0EWoO6_Q^zm97zu2`W#)|V#_(Bgb4(XYqFO|u z4A9+fBKY{HVuos;yTfEQd^Hf^KUEmJMo1*%B6xCDMpZFyX3@p4zj(6|PYirR=lig= zGOO=ChLx=c)XXO(P3gU>&Wx>7BIGz$f)+Y$ZE*O5PL9JO!9&>vMZ`;8$@V6u5w|Ccz&tF=5;@Pw+5Un&`%ocF0n@x)zY zC@mwU2f8qr!a9;kwjkZ{ljMsFmV8;kxcE0?KW9TLDeK$~?2F_=*nLG)>81G!}K>lSs} zD}{r^$wb|UW;wgt;ZLpTI?Wdo@a=7u z!K$F8QW{m-cCI?5^T0XJqL3Rs>Kl%38Qr18wymw-Q;A;XAe+14y%)Ou{!>v8M#b+7 zqGz$w@kl3P?{xpJ*H#n%ou)wNSIuHWHdeQlrVhC8=s--Lb5qOLMR(?O{u+++PnvqX zG=p53T%QF#=t4Yrt=wT^wolB_d-UY!yc#Ph@7V`S(}#a^sbC^ge*h;#h{D--zXS#^ ziXJ3BMxwlLz&6ML_sfJ~lQ5v)uP>NXGAbn(9fL}v1Z>q?=aophuNhJT4@4^`Q|#wg z`{ZYR2P%1cIm&)BnRzS4mRoN4&0!+kO|fX!&}r-&5m)M&*pMtx?KiGHoyFD$GqJR3 zY~zs151N$XAuAcw=8JNH(&w_Vh3lTj^H~Aj4J5}U1NRM`Lcy0erNy=OSZz`9ee^=w z``lIwr|!rSVY8G!maHG374oY|`(3N?ZN9bQseluAgRtrArZi!9-^tGF1VS%`TMI^M zJZ0Bn(bdehQ@>8{p5gA|UIkcq&YRKafd1Lhy@i$#ggy_gNhzE|p-$V!h;E--&#g+^ zZ@SZjP%5+&EqHOGVJ3w|lfiz?6K4DPYN;=Gpi{NC7Q8?Y;Tlt!)py`Qj9JCUs#iBQ z7m48HGC81rgTMU++2RA|@97^|jQC8KoXNMt;6WX}NlC>@KNo4#4T9-u4txj{si#P2CY0-r z@v;sy9nU@vOaZozI?4?jm@$va2-0R4U$e)oJc?}UY6RUZ;bO}?eV?AO&VCP)M9aXv z3Mp|m4$`a8c*lyYIb$JdL!&)UPfoH8hzPrYKXhS*L$LVsPr?@Pt$FX_hykQmE~GGL zTby!5_Y!_PV`g>sv;1}SJtE8SfQbk~>vk&-`&+7DrJk-OK`8k|A~H+d$vMpTML0=~ zhMTKRVdeN=Kv=zKc(AW@F*uqf_@-whgObcw(H*A*-q`3R7aALh)AO!&@0h7!(lSLE zd{n>cclm2U9yG5oV<@?ES&xK*yC4qY%HU`F+wqrlGDBv`t7B0~J`K%L-wof#xjjzz zZYM)6h#__OP`)sO8;$V2DHV%8q{%J*sZcT-7n8=8JquoxO3Rf^w@qCd7HEErB5Ki zK-;v2m8!hJ?h+u7jb6x_V)~L;OV8k^Cpz^#%h@2?lB^{7m5LMbq{q5C{=n%P3N>7~ zD(mjwDFe0Ybi%1^bNo^{*rh&odsUv9i$@SowGa~4vLIAOt&Gb*6?b+Z3;+35=zWxL zUQ}6wLd#Fre0jy1QS+XxXiv17s@x{PE#W*kBHv(K(RD>$e%hYRcV_TKziax!g>WPF zoev@5WV4S5zi?>7T%4^j@F#$mNW zkbFkN8!n^b?Z`q8K1slWlohcAadsV;f+;0mU9E4}ZM;<;X2WsH4c%55>hb*}gDxk5 z`sft;2@aLuTn5$t*kT!T=&03=i>`3KlU_kgP@*$6yM^o$I$tI>u;R;n@|@HZ|4$$^ zzEc}i_N8QDz9Yl?s6#ZEgH%1(;tZ6q7Ql5KG-FM!>h{RKX6IL7{Aq!?4ile6=}3Ra zu3^5w@uiI*Jnyt{kctEQJiuZT%Gwo3GSwd&xjCVZ&>adj4dSVh%*B)>xWUBkT}86u zfqHx#IL0s<7JO`Ed4gJ%D70+_chOzNZr|LxLad!kg~ RyMPTaxnpTqe*016e*p-*3+Mm< literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/example/test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/test/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/test/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/example/test/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test/ios/Runner/Base.lproj/Main.storyboard b/example/test/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/example/test/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test/ios/Runner/Info.plist b/example/test/ios/Runner/Info.plist new file mode 100644 index 0000000..dd23d06 --- /dev/null +++ b/example/test/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Test + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + test + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + + diff --git a/example/test/ios/Runner/Runner-Bridging-Header.h b/example/test/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/example/test/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/example/test/lib/main.dart b/example/test/lib/main.dart new file mode 100644 index 0000000..202509b --- /dev/null +++ b/example/test/lib/main.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + // This is the theme of your application. + // + // Try running your application with "flutter run". You'll see the + // application has a blue toolbar. Then, without quitting the app, try + // changing the primarySwatch below to Colors.green and then invoke + // "hot reload" (press "r" in the console where you ran "flutter run", + // or simply save your changes to "hot reload" in a Flutter IDE). + // Notice that the counter didn't reset back to zero; the application + // is not restarted. + primarySwatch: Colors.blue, + ), + home: const MyHomePage(title: 'Flutter Demo Home Page'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + + // This widget is the home page of your application. It is stateful, meaning + // that it has a State object (defined below) that contains fields that affect + // how it looks. + + // This class is the configuration for the state. It holds the values (in this + // case the title) provided by the parent (in this case the App widget) and + // used by the build method of the State. Fields in a Widget subclass are + // always marked "final". + + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + int _counter = 0; + + void _incrementCounter() { + setState(() { + // This call to setState tells the Flutter framework that something has + // changed in this State, which causes it to rerun the build method below + // so that the display can reflect the updated values. If we changed + // _counter without calling setState(), then the build method would not be + // called again, and so nothing would appear to happen. + _counter++; + }); + } + + @override + Widget build(BuildContext context) { + // This method is rerun every time setState is called, for instance as done + // by the _incrementCounter method above. + // + // The Flutter framework has been optimized to make rerunning build methods + // fast, so that you can just rebuild anything that needs updating rather + // than having to individually change instances of widgets. + return Scaffold( + appBar: AppBar( + // Here we take the value from the MyHomePage object that was created by + // the App.build method, and use it to set our appbar title. + title: Text(widget.title), + ), + body: Center( + // Center is a layout widget. It takes a single child and positions it + // in the middle of the parent. + child: Column( + // Column is also a layout widget. It takes a list of children and + // arranges them vertically. By default, it sizes itself to fit its + // children horizontally, and tries to be as tall as its parent. + // + // Invoke "debug painting" (press "p" in the console, choose the + // "Toggle Debug Paint" action from the Flutter Inspector in Android + // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) + // to see the wireframe for each widget. + // + // Column has various properties to control how it sizes itself and + // how it positions its children. Here we use mainAxisAlignment to + // center the children vertically; the main axis here is the vertical + // axis because Columns are vertical (the cross axis would be + // horizontal). + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'You have pushed the button this many times:', + ), + Text( + '$_counter', + style: Theme.of(context).textTheme.headline4, + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: _incrementCounter, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), // This trailing comma makes auto-formatting nicer for build methods. + ); + } +} diff --git a/example/test/linux/.gitignore b/example/test/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/example/test/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/example/test/linux/CMakeLists.txt b/example/test/linux/CMakeLists.txt new file mode 100644 index 0000000..29aecdc --- /dev/null +++ b/example/test/linux/CMakeLists.txt @@ -0,0 +1,138 @@ +# 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 "test") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.test") + +# 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/test/linux/flutter/CMakeLists.txt b/example/test/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/example/test/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/test/linux/flutter/generated_plugin_registrant.cc b/example/test/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/example/test/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/example/test/linux/flutter/generated_plugin_registrant.h b/example/test/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/example/test/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/test/linux/flutter/generated_plugins.cmake b/example/test/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2e1de87 --- /dev/null +++ b/example/test/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/example/test/linux/main.cc b/example/test/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/example/test/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/test/linux/my_application.cc b/example/test/linux/my_application.cc new file mode 100644 index 0000000..4eb1024 --- /dev/null +++ b/example/test/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, "test"); + 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, "test"); + } + + 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/test/linux/my_application.h b/example/test/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/example/test/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/test/macos/.gitignore b/example/test/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/example/test/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/example/test/macos/Flutter/Flutter-Debug.xcconfig b/example/test/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/example/test/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/test/macos/Flutter/Flutter-Release.xcconfig b/example/test/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/example/test/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/test/macos/Flutter/GeneratedPluginRegistrant.swift b/example/test/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..cccf817 --- /dev/null +++ b/example/test/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/example/test/macos/Runner.xcodeproj/project.pbxproj b/example/test/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1347ba3 --- /dev/null +++ b/example/test/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,572 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + 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 */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 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 */ + 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 /* test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "test.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 = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 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 */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* test.app */, + ); + 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 = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* test.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 = { + 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 */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 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; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 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 */ + 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 */ + 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.11; + 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.11; + 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.11; + 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 */ + 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/test/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/test/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..225638e --- /dev/null +++ b/example/test/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/test/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/test/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/test/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test/macos/Runner/AppDelegate.swift b/example/test/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/example/test/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/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..d119f4c9c61527e57898622f1c235dc511e0d1a3 GIT binary patch literal 35866 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%0D|0j!QEE1j`9W`r zAw4iK{}iAPYng8GX&!28?sO065gjS~vIIH8F$8D=zWC;dr}rODYi1uvY)jkTd%a91 zI?QA#a)d1!4EDj{5ItBe$n2BfVg}aX4V1AW@SB);N-*W{b zIb@akRNnyHhC62nA!Oxc{YtxM|O%rE!YGM)N&yGX`R0DS6 z?;(yj`EDffFx~#C0qxJj>WtbE&xDg`wJ`Fyk@wMW&m#AONGz9HA7hwg-8=1|EvBP| zw1M(_&m|FcBhEgP=z-12EhfJOAtIQ z%r>R-jI}W9b}y!V9A)DdPRZh^BKef}eb&?|Lud6L!i#fE+ElT|hQV_Hwx3r)tW)Qg z#i)FK&>WL`6zDeMzrJCCq92s)Rf7H!Mp~1&cjw+f|7P@xEkQl^45GgHoPbvR zXV(U8F-sJGG1CT|Ip)nr-g1$&u0r)-w0M}M#6%cqYDESZ6SXYCrXfKHv6@M@~P$};QnJ&HyS|E=%kI&Z_wMp^xmEfKANF^ovgC1rV?d0c=Eo6%T$jrSW znzfm`rR^78kB_WynbaSwbuc>Wg`2}_8#|miZE-pw9>-W8@W0G=e$SZ`K!O^1`zkgV zfW6Vq+s7ZQ0lH%c(2j^6PNO+B4{0{pjIdzR>-oqA&ZL_Tz~;x(jE)gcd-o6}*gcu= zI}sd{Mw7Z^=jGEA@oFuOXx2%en2aN%_ba%m(|+e!oXe~`10`C(^6{My4N!Adpn6b6 zT0Oymj~the^3R(DMyo8mnPxCw&`{YpDOlt~t2hQqADQ}`H`ozBcjn@9WaR-i;f{D{ z>-+2I#vnErn68njDZgy+HIA~p^+5*l23G0$^^Bc4A&@!{dCgU<(=&25{Q(=rjZ}DV zsdvPvI2&RcrCWJBgpIP|d6a{Rw6yJYvvDyWwhAF8NnFLIfWBr0Nnd*wr){=t|Igwb zK+L1FX*9wM8a=HVm602?+QLVUz7!>V&Pt@UxzOA!Q6`lZ(LD6(eaj6X*W8EA?232; z2a`mKdEy%R0V{hx@(O1(Y%YFQa{rQ#O@-;Hv{xgZ{ukv{iVP@Hz{~aT2zi|>bZgL+ z1Bs(eCH=&TL(fkMAp9@5ii1|2=EK7hx~bf_Z@f1aK$6?lJW6P5XkTF`jndhxXv;^& z?Z`1w>M4y4;fp$ys2XCqYU0E6LdPsk7$BMB#0Nt(Y($bK&5ml^#6mTAac3wt0*F*I zPdqSyyPs(DBCq0XS~~$N&HU literal 0 HcmV?d00001 diff --git a/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9d0da43f3751811d96cee59eb45dcce1b9c061 GIT binary patch literal 3005 zcmV;u3qtgXP)0h>(!$#9+wXHu|1UzjM zYp;LYUG+Sg*fv-7xRXW_Or!!wD;7Ly<#M!~i=ro-sUn_>vdAudp51wI+@0B-S$22k zo%j7D8`+)N<&EFZ`@HYGGqXq}22xW~Nls3VD>pZHnakx`oC(aFIdeL0iskbJhVcy! z4&Ltr+-`SQdwctZOP4OWeLkPz50Z@RymaZ(1*N5>8w(2yUzt67w#)Eu6C{k=w{N@a z>grBbS69E&(b3VP_kFqqz~B!YIIu52KmU6~^m0pr9dg5l4ZGm+vzC^Y6T5fs{-quf zA`0MeI3|^sm+#oTd2@v%NmJw3TtNa!g^v3D#>U2VM~)n+g!~SAyPf* znwsO;+1cMoOgjaM1UoEr++TwX&lMLJuZQWvUDf^6UR<R0fO!?czOl7$1aexab?WqcA4VEOXpi{Wr#t-0+IBn!+M zGjDBe?FtA`T3Y&Q3L%rsZkQlBVAha%83?ddf|-8`uI-!MC_!?8%u68qZBkxdUbfTe z%rv_}g5-jkWA+lv{+FBG7=bxp_Rf&{iARfNwuLIBPY0&tEHfOCWZoFfF_93cSb2mv@p2*5c)0L~Ets4(OwyzEC<+c(R4KUK-urtzEM*zB7AKuD*%RH5r^yc zV+kL()(uMVyHiv@$H?!bOoorzknzZJ_Y7E4fOy=o6B>e%@J|d#zxdP#+j+qI*GW3=q^7CvG*0T4V5yLX;9Y#xw^<=u&n`D(Bd zK4M7$5S%bofCLpW%mNMegWh+7z`g_MgW8k2jz-NU?lt_5dK>? zg5lGW@Am~In3t|!0{WXU{GAYf-ZVDDN0<@-!Qr4%K05dU!h20`&xf-A7W8~1^cy{C zCD0>5X!ze`IDCXT0T8Dw!H_@2aQIq#>ybbi{w~IQK7~mE5Ud2#QuUSnH|6l7p(R1+ zgwHPFBg_gA4LaL@^Ty-jd_AB9eIP-mEJ0}aKeti%h%E((HGGPX9vvtufnCP@P;4gv z9rI%ipYjMMn0l^3Z)P7=AEzc%1|! zAW8|Y4Um%8L4s}UOJI8e5R~8#OJGg_640ZACujRU^62b2GJNG4gbg_dw#yP=`1k^Z zKc@Jip^o051U1{(9uBw=013eyUvZgQx|soJ*ht#lLMLH9uL! zqy$_EfQ%0ZAE%LzYhld4euMa?JD|6#eeXcz@F|yYV#ufj+zEip1_}Q7)d%FIvJkV66yR|1{OKYv6HZ(K&Eq*?2GVuS!H1cn2UAl_K{bZO0kfC7ySx8m zc0&Z_fZ0oJZEgQFyCDK|!0e^g*4B%|!^3x`Oqr5lc7p`T12P}L?4_ZhA>Y}vXHOLs z6>T)TQG(Q?oj-s6*OT8gL89sH?fn;KtbFYW0q)(q_prFQcx_{2<9Vmk znVH_B(V)^02hYuAL6ue5r z(E)4t>+9>^-n41c_B(g(JkZ)H;sqi2#*&hf9~BlB{%QaI{Rdqx*NXVJQxI?5Zuj{; zd-nXauCDHUw0(755riKEHa$~RRJ5|Rw6rWgKfg$lB80HC?>FMdyVK;q$oJTNG z9>Hw>K8){uJv}{LZEbBAnwpya0Tp}L=m-5Dc_5{TaZVhf00000NkvXXu0mjf>gAmc literal 0 HcmV?d00001 diff --git a/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..23384243a2d770465e52282ee009cc49d2e4285a GIT binary patch literal 426 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 literal 0 HcmV?d00001 diff --git a/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..7878c2c612371a0d01b4403db169aa8ab122e1fb GIT binary patch literal 15291 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 S$AKw=jvcW-Tx#hN^M3$opYtRD literal 0 HcmV?d00001 diff --git a/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/example/test/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..f96b18a4c1711db874e693b8bcc34b4158f2e200 GIT binary patch literal 1515 zcmVWX6Rqs|h+UU@?J7kOU$uF$`9AK{PRQn4ue9fXdiJYL`?p zhGZ-0<^@7zqYIf)nKOilVDwgRAaE&jEMf_z&=1;ke4nxd?co$QbI$vg$v+`EA8!xO z@BcpU*ZJT;MkbTVP*G9wMsaa*iP>znq!Y=NOLlpQrlzLGhlYmk3=9n1^7(uLX&Ekd zN2Ad|ZEfw_O-)U!1KPft&G zX=!OSlSow-R;a__xK>nDR9sV2^QPbL58?5s0a)_{{wo4+WgDjY!V2!~?bTFPR#sys zL=C8`t9$4F057Vfq{K>?hdVnvT^#A((i$5ZZLEW$EoAQQ?(XHPs;Z8X_L0dtAlgD^ zWamhyP|7+ORzh~pVzIoyIuKSub}ltF^$FI2uoAN4D4<~-2t#SO&C5LA+BSf70Iaob z0P6rmO$4-X;hr9X4;E^C%sD(HF5rw>fOEToU^WQSOZ+D#g#ifv>0f&A3u^;XoB_g$ z2}X?oA7_OWgGVtp0O4B+d_dTEG)DNA-660T`3=iGs+bxe*8HaMS^>`QQXU?~%m9S9 z-P;`AKx+OIta*d-@F*q*ApB)9K4>ue@Nh8W(1E?+yJrW#Yv7_$|nmvN>KyG zCGc_*(_RXX$A4eaLV!;^M2gy@7htbG$(F;>nwKnTV-17w9wkHTXRDwsTHWS3=;MyAigLdthSo2q=b#ce; zdm)+$Y5KLa-}eAMT}615s%rr`_{)FlKqKiRMH9qKpaqYjc0b_SU3qv>IAxw8%^~;c zFo9pD0*|6*z`-3nq@@V!W{I(jBz|rVez`Ra6DRT@FZ&rPaZxiMH=T#e2SRXaVr8l< zT_o`y4|spL1L0s0s=xRduD^eniV0Nj3FZ+Kt`HO6B_=FI))q?wf%koP8+ZZ_DO&Ia zmZ_OQ{jPAXXu>!#0W)FtA6We6dx(TWWX7b8zOI3$ED#f{9V2k#^sB0xz~s3AW`ffa zf|FxDnEiGTmiaL71}^?q8QJj$!ccW-1l(uTGlAKYAvB?D{~}bAu`&=?8!x4Ij(kCN zOsRPGl@BjH_mm?4 zJ1Go6p$UIDjyzOZpO1{{*B@Iwg+Xk=>fVI#7CHs`ECV>luLJO>;U?pVd zCMPE+%x3e8tb<`8Waoy5hkq<9D?7$I7#2cy&h2*hx3si;ZZeskWE~Jq`Fy@PWam5{ z&q8~9duwxZ^F`J{(G)Txdvq9VYisK$EG&GjprD|Pbzn3!IyyRt%(xvjAQFl2R;%?` ze}BI_KR^Flo^8X6itsIRX-Ycv`ktB?m;-EMDlxm;I|6G=Xw-)bLM39+Bg_Yuv`&dy5<{R=FHyx)Wo RLn;6O002ovPDHLkV1i4Zwe0`^ literal 0 HcmV?d00001 diff --git a/example/test/macos/Runner/Base.lproj/MainMenu.xib b/example/test/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/example/test/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test/macos/Runner/Configs/AppInfo.xcconfig b/example/test/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..c571568 --- /dev/null +++ b/example/test/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 = test + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.test + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/example/test/macos/Runner/Configs/Debug.xcconfig b/example/test/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/example/test/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/test/macos/Runner/Configs/Release.xcconfig b/example/test/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/example/test/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/test/macos/Runner/Configs/Warnings.xcconfig b/example/test/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/example/test/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/test/macos/Runner/DebugProfile.entitlements b/example/test/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/example/test/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/test/macos/Runner/Info.plist b/example/test/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/example/test/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/test/macos/Runner/MainFlutterWindow.swift b/example/test/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..2722837 --- /dev/null +++ b/example/test/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/example/test/macos/Runner/Release.entitlements b/example/test/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/example/test/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/example/test/pubspec.yaml b/example/test/pubspec.yaml new file mode 100644 index 0000000..b14e6e1 --- /dev/null +++ b/example/test/pubspec.yaml @@ -0,0 +1,91 @@ +name: test +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.17.1 <3.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + icons_launcher: + path: ../../ + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/example/test/snap/gui/app_icon.desktop b/example/test/snap/gui/app_icon.desktop new file mode 100644 index 0000000..92a01f6 --- /dev/null +++ b/example/test/snap/gui/app_icon.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Flutter Linux App +Comment=Flutter Linux launcher icon +Exec=app_icon +Icon=app_icon.png +Terminal=false +Type=Application +Categories=Entertainment; diff --git a/example/test/snap/gui/app_icon.png b/example/test/snap/gui/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a06e72f22770db3868e5e0334183f80640987a GIT binary patch literal 6306 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 M;I4k9u2ana0m46PqyPW_ literal 0 HcmV?d00001 diff --git a/example/test/web/icons/Icon-512.png b/example/test/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..7878c2c612371a0d01b4403db169aa8ab122e1fb GIT binary patch literal 15291 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 S$AKw=jvcW-Tx#hN^M3$opYtRD literal 0 HcmV?d00001 diff --git a/example/test/web/icons/Icon-maskable-192.png b/example/test/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..6184f2f51c24f9f42d8dfa88a192d3f02d891015 GIT binary patch literal 5403 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 M;I4k9u2ana0m46PqyPW_ literal 0 HcmV?d00001 diff --git a/example/test/web/icons/Icon-maskable-512.png b/example/test/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..7878c2c612371a0d01b4403db169aa8ab122e1fb GIT binary patch literal 15291 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 S$AKw=jvcW-Tx#hN^M3$opYtRD literal 0 HcmV?d00001 diff --git a/example/test/web/index.html b/example/test/web/index.html new file mode 100644 index 0000000..6a7b8f0 --- /dev/null +++ b/example/test/web/index.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + test + + + + + + + + + + diff --git a/example/test/web/manifest.json b/example/test/web/manifest.json new file mode 100644 index 0000000..40201ee --- /dev/null +++ b/example/test/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "test", + "short_name": "test", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/example/test/windows/.gitignore b/example/test/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/example/test/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/test/windows/CMakeLists.txt b/example/test/windows/CMakeLists.txt new file mode 100644 index 0000000..dbaaf59 --- /dev/null +++ b/example/test/windows/CMakeLists.txt @@ -0,0 +1,101 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(test 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 "test") + +# 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/test/windows/flutter/CMakeLists.txt b/example/test/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..930d207 --- /dev/null +++ b/example/test/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/test/windows/flutter/generated_plugin_registrant.cc b/example/test/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..8b6d468 --- /dev/null +++ b/example/test/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/example/test/windows/flutter/generated_plugin_registrant.h b/example/test/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/example/test/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/test/windows/flutter/generated_plugins.cmake b/example/test/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..b93c4c3 --- /dev/null +++ b/example/test/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/example/test/windows/runner/CMakeLists.txt b/example/test/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..b9e550f --- /dev/null +++ b/example/test/windows/runner/CMakeLists.txt @@ -0,0 +1,32 @@ +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}) + +# 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_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/test/windows/runner/Runner.rc b/example/test/windows/runner/Runner.rc new file mode 100644 index 0000000..eb8a220 --- /dev/null +++ b/example/test/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 +// + +#ifdef FLUTTER_BUILD_NUMBER +#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#else +#define VERSION_AS_NUMBER 1,0,0 +#endif + +#ifdef FLUTTER_BUILD_NAME +#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "test" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "test" "\0" + VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "test.exe" "\0" + VALUE "ProductName", "test" "\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/test/windows/runner/flutter_window.cpp b/example/test/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..b43b909 --- /dev/null +++ b/example/test/windows/runner/flutter_window.cpp @@ -0,0 +1,61 @@ +#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()); + 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/test/windows/runner/flutter_window.h b/example/test/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/example/test/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/test/windows/runner/main.cpp b/example/test/windows/runner/main.cpp new file mode 100644 index 0000000..01e1db7 --- /dev/null +++ b/example/test/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.CreateAndShow(L"test", 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/test/windows/runner/resource.h b/example/test/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/example/test/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/test/windows/runner/resources/app_icon.ico b/example/test/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..38ea133568ccd0254c4d6254da23eb02b5ca5688 GIT binary patch literal 3027 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 + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/example/test/windows/runner/utils.cpp b/example/test/windows/runner/utils.cpp new file mode 100644 index 0000000..f5bf9fa --- /dev/null +++ b/example/test/windows/runner/utils.cpp @@ -0,0 +1,64 @@ +#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); + 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, + -1, utf8_string.data(), + target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/example/test/windows/runner/utils.h b/example/test/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/example/test/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/test/windows/runner/win32_window.cpp b/example/test/windows/runner/win32_window.cpp new file mode 100644 index 0000000..c10f08d --- /dev/null +++ b/example/test/windows/runner/win32_window.cpp @@ -0,0 +1,245 @@ +#include "win32_window.h" + +#include + +#include "resource.h" + +namespace { + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +// 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 registar 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::CreateAndShow(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 | WS_VISIBLE, + 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; + } + + return OnCreate(); +} + +// 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; + } + + 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. +} diff --git a/example/test/windows/runner/win32_window.h b/example/test/windows/runner/win32_window.h new file mode 100644 index 0000000..17ba431 --- /dev/null +++ b/example/test/windows/runner/win32_window.h @@ -0,0 +1,98 @@ +#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 and shows a win32 window with |title| and position and size 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 to will treat the width height passed in to this function + // as logical pixels and scale to appropriate for the default monitor. Returns + // true if the window was created successfully. + bool CreateAndShow(const std::wstring& title, + const Point& origin, + const Size& size); + + // 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 + // responsponds 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; + + 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_ From 9d478fc875ed636da28604bda8424b2d802dae50 Mon Sep 17 00:00:00 2001 From: mrrhak Date: Mon, 27 Jun 2022 13:28:12 +0700 Subject: [PATCH 03/21] update readme --- README.md | 4 ++-- example/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 74dfbd6..dcd72f9 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ An example is shown below. More complex examples [here](https://github.com/mrrha ```yaml dev_dependencies: - icons_launcher: ^2.0.0 + icons_launcher: ^2.0.0-beta-1 icons_launcher: image_path: 'assets/ic_logo_border.png' @@ -159,7 +159,7 @@ The configuration file format is the same. ```yaml dev_dependencies: - icons_launcher: ^2.0.0 + icons_launcher: ^2.0.0-beta-1 icons_launcher: # image_path: 'assets/ic_logo_border.png' diff --git a/example/README.md b/example/README.md index 1f2b6ea..68a1464 100644 --- a/example/README.md +++ b/example/README.md @@ -1,4 +1,4 @@ -# Installation +# Installation (2.0.0-beta-1) ```sh flutter pub add --dev icons_launcher ``` From 8e002e57c2ad4797c8e7a704f3dfefdc909d64eb Mon Sep 17 00:00:00 2001 From: mrrhak Date: Mon, 27 Jun 2022 13:54:50 +0700 Subject: [PATCH 04/21] update readme --- README.md | 48 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index dcd72f9..bc8200b 100644 --- a/README.md +++ b/README.md @@ -106,33 +106,27 @@ In the above configuration, the package is setup to replace the existing launche Shown below is the full list of attributes which you can specify within your Icons Launcher configuration. -- `android`/`ios`/`web`/`macos`/`windows`/`linux` - - `true`: Override the default existing Flutter launcher icons for the platform specified - - `false`: Ignore making launcher icons for the platform specified - -- `image_path`: The location of the icon image file which you want to use as the app launcher icon - -- `image_path_android`: The location of the icon image file specific for Android platform (optional - if not defined then the image_path is used) - -- `image_path_ios`: The location of the icon image file specific for iOS platform (optional - if not defined then the image_path is used) - -- `image_path_macos`: The location of the icon image file specific for MacOS platform (optional - if not defined then the image_path is used) - -- `image_path_windows`: The location of the icon image file specific for Windows platform (optional - if not defined then the image_path is used) - -- `image_path_linux`: The location of the icon image file specific for Linux platform (optional - if not defined then the image_path is used) - -- `image_path_web`: The location of the icon image file specific for Web platform (optional - if not defined then the image_path is used) - -- `image_adaptive_background`: The image asset (E.g. `"assets/ic_background.png"`) used to fill out the background of the adaptive icon. - -- `color_adaptive_background`: The color (E.g. `"#ffffff"`) used to fill out the background of the adaptive icon. - -- `image_adaptive_foreground`: The image asset used for the icon foreground of the adaptive icon - -- `image_adaptive_round`: The image asset used for the round icon of the adaptive icon (optional) - -#### Note: +| Option | Type | Default | Description | +| --- | --- | --- | --- | +| `android` | Boolean | `false` | Override the default existing of android | +| `ios` | Boolean | `false` | Override the default existing of ios | +| `web` | Boolean | `false` | Override the default existing of web | +| `macos` | Boolean | `false` | Override the default existing of macos | +| `windows` | Boolean | `false` | Override the default existing of windows | +| `linux` | Boolean | `false` | Override the default existing of linux | +| `image_path` | String | `null` | The image file path which you want to use as the app launcher icon | +| `image_path_android` | String | `null` | The image file path specific for Android platform (optional - if not defined then the _image_path_ is used) | +| `image_path_ios` | String | `null` | The image file path specific for iOS platform (optional - if not defined then the _image_path_ is used) | +| `image_path_web` | String | `null` | The image file path specific for Web platform (optional - if not defined then the _image_path_ is used) | +| `image_path_macos` | String | `null` | The image file path specific for macOS platform (optional - if not defined then the _image_path_ is used) | +| `image_path_windows` | String | `null` | The image file path specific for Windows platform (optional - if not defined then the _image_path_ is used) | +| `image_path_linux` | String | `null` | The image file path specific for Linux platform (optional - if not defined then the _image_path_ is used) | +| `color_adaptive_background` | String | `null` | The color (E.g. _"#ffffff"_) used to fill out the background of the adaptive icon | +| `image_adaptive_background` | String | `null` | The image asset (E.g. _"assets/ic_background.png"_) used to fill out the background of the adaptive icon | +| `image_adaptive_foreground` | String | `null` | The image asset used for the icon foreground of the adaptive icon | +| `image_adaptive_round` | String | `null` | The image asset used for the round icon of the adaptive icon (optional) | + +### Note: - _Android adaptive icon will generate if you provide `image_adaptive_background` or `color_adaptive_background` and `image_adaptive_foreground`._ - _`image_adaptive_round` is optional, if you provide you must provide two config above also, the plugin will modify your `AndroidMainifest.xml` to add `android:roundIcon="@mipmap/ic_launcher_round` and create a new file `ic_launcher_round.xml` to` mipmap-anydpi-v26`_ - _iOS icons should [fill the entire image](https://stackoverflow.com/questions/26014461/black-border-on-my-ios-icon) and not contain transparent borders._ From 4e6244efd881aa84a8c69b438890d509f2a6e42c Mon Sep 17 00:00:00 2001 From: mrrhak Date: Mon, 27 Jun 2022 14:05:43 +0700 Subject: [PATCH 05/21] update public workflow --- .github/workflows/publish.yml | 3 --- .vscode/settings.json | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 31dc6d8..96be87d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,9 +11,6 @@ jobs: - name: 'Checkout' uses: actions/checkout@v3 - - name: Generate package version - run: dart run build_runner build - - name: '>> Dart package <<' uses: k-paxian/dart-package-publisher@master with: diff --git a/.vscode/settings.json b/.vscode/settings.json index db79f3c..1e89b83 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,7 @@ "mdpi", "mipmap", "negatable", + "paxian", "pbxproj", "playstore", "pubspec", From fa5e46cf31489839f734a30ff9d3528833e9f7b4 Mon Sep 17 00:00:00 2001 From: mrrhak Date: Mon, 27 Jun 2022 14:17:02 +0700 Subject: [PATCH 06/21] update beta version --- CHANGELOG.md | 2 +- README.md | 4 ++-- example/README.md | 2 +- lib/src/version.dart | 2 +- pubspec.yaml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86f9c02..fa7b7dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 2.0.0-beta-1 +## 2.0.0-beta.1 - Rewrite and improve flavor support - New flavor script (E.g. `icons_launcher-dev.yaml`) ```sh diff --git a/README.md b/README.md index bc8200b..566f323 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ An example is shown below. More complex examples [here](https://github.com/mrrha ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta-1 + icons_launcher: ^2.0.0-beta.1 icons_launcher: image_path: 'assets/ic_logo_border.png' @@ -153,7 +153,7 @@ The configuration file format is the same. ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta-1 + icons_launcher: ^2.0.0-beta.1 icons_launcher: # image_path: 'assets/ic_logo_border.png' diff --git a/example/README.md b/example/README.md index 68a1464..aab2b1a 100644 --- a/example/README.md +++ b/example/README.md @@ -1,4 +1,4 @@ -# Installation (2.0.0-beta-1) +# Installation (2.0.0-beta.1) ```sh flutter pub add --dev icons_launcher ``` diff --git a/lib/src/version.dart b/lib/src/version.dart index 2587031..2b5968e 100644 --- a/lib/src/version.dart +++ b/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '2.0.0-beta-1'; +const packageVersion = '2.0.0-beta.1'; diff --git a/pubspec.yaml b/pubspec.yaml index 23fc5c4..8f36484 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A command-line tool that simplifies the task of updating your Flutt maintainer: Mrr Hak homepage: https://mrrhak.com repository: https://github.com/mrrhak/icons_launcher -version: 2.0.0-beta-1 +version: 2.0.0-beta.1 dependencies: args: ^2.3.1 From a57db65e44ca00a116ac3390ac9ba404357e2aa7 Mon Sep 17 00:00:00 2001 From: mrrhak Date: Mon, 27 Jun 2022 15:01:03 +0700 Subject: [PATCH 07/21] fixed iOS/iPadOS icon alpha channel --- lib/src/ios.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/src/ios.dart b/lib/src/ios.dart index 4648b72..6d474ed 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -10,6 +10,14 @@ void _createIosIcons({required String imagePath}) { exit(1); } + if (image.hasAlpha) { + CliLogger.warning('App icon for iOS/iPadOS not support alpha channel', + level: CliLoggerLevel.two); + image.removeAlpha(); + CliLogger.success('Removed alpha channel from icon', + level: CliLoggerLevel.two); + } + final iosIcons = [ IosIconTemplate(name: '-20x20@1x', size: 20), IosIconTemplate(name: '-20x20@2x', size: 40), From e1d6c646de7246347ed727177d4196fe3fae12a5 Mon Sep 17 00:00:00 2001 From: mrrhak Date: Tue, 28 Jun 2022 00:11:23 +0700 Subject: [PATCH 08/21] improve pub score --- lib/cli_commands.dart | 5 +++++ lib/src/android.dart | 22 +++++++++++++++++++--- lib/src/ios.dart | 2 ++ lib/src/linux.dart | 3 +++ lib/src/macos.dart | 2 ++ lib/src/web.dart | 3 +++ lib/src/windows.dart | 2 ++ lib/utils/cli_logger.dart | 3 +++ lib/utils/flavor_helper.dart | 26 ++++++++++++++++++++++++++ lib/utils/icon.dart | 3 +++ lib/utils/template.dart | 6 ++++++ lib/utils/utils.dart | 4 +++- 12 files changed, 77 insertions(+), 4 deletions(-) diff --git a/lib/cli_commands.dart b/lib/cli_commands.dart index 0ac66ec..3acdfcb 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -29,6 +29,7 @@ void createLauncherIcons({String? path, String? flavor}) { _createIconsByConfig(config); } +/// Get config file Map _getConfig({String? configFile}) { String filePath; if (configFile != null) { @@ -57,6 +58,7 @@ Map _getConfig({String? configFile}) { return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); } +/// Convert yaml to map Map _yamlToMap(YamlMap yamlMap) { final Map map = {}; for (final MapEntry entry in yamlMap.entries) { @@ -77,6 +79,7 @@ Map _yamlToMap(YamlMap yamlMap) { return map; } +/// Validate config options void _checkConfig(Map config) { if (!hasPlatformConfig(config)) { CliLogger.error('Please add a `platform` target to your config file.'); @@ -152,6 +155,7 @@ void _checkConfig(Map config) { } } +/// Create icons base on config void _createIconsByConfig(Map config) { final imagePath = _checkImageExists(config: config, parameter: 'image_path'); final imagePathAndroid = @@ -241,6 +245,7 @@ void _createIconsByConfig(Map config) { } } +/// Check image exists String? _checkImageExists({ required Map config, required String parameter, diff --git a/lib/src/android.dart b/lib/src/android.dart index 0912b4d..9edec91 100644 --- a/lib/src/android.dart +++ b/lib/src/android.dart @@ -16,6 +16,7 @@ final adaptiveIcons = [ AndroidMipMapIconTemplate(directoryName: 'mipmap-xxxhdpi', size: 432), ]; +/// Start create Android icons void _createAndroidIcons({required String imagePath}) { CliLogger.info('Creating Android icons...'); @@ -38,6 +39,7 @@ void _createAndroidIcons({required String imagePath}) { _updateAndroidManifestIconLauncher(); } +/// Save the image to the Android directory void _saveImageAndroid( AndroidMipMapIconTemplate template, Icon image, @@ -52,6 +54,7 @@ void _saveImageAndroid( image.saveResizedPng(template.size, filePath); } +/// Create the play store icon void _createPlayStoreIcon(Icon image) { final template = AndroidMipMapIconTemplate( directoryName: _flavorHelper.androidResFolder, @@ -61,6 +64,7 @@ void _createPlayStoreIcon(Icon image) { '${template.directoryName}/$ANDROID_PLAYSTORE_ICON_FILE_NAME'); } +/// Update the Android manifest with the new launcher icon void _updateAndroidManifestIconLauncher() { final androidManifestFile = File(ANDROID_MANIFEST_FILE); final androidManifestString = androidManifestFile.readAsStringSync(); @@ -89,6 +93,7 @@ void _updateAndroidManifestIconLauncher() { ); } +/// Start android adaptive icons void _createAndroidAdaptiveIcon({ required String background, required String foreground, @@ -109,6 +114,7 @@ void _createAndroidAdaptiveIcon({ } } +/// Create the adaptive background void _createAdaptiveBackground( List adaptiveIcons, String background, @@ -150,6 +156,7 @@ void _createAdaptiveBackground( } } +/// Create the adaptive foreground void _createAdaptiveForeground( List adaptiveIcons, String foreground, @@ -176,6 +183,7 @@ void _createAdaptiveForeground( ); } +/// Create the adaptive round void _createAdaptiveRound( List adaptiveIcons, String round, @@ -204,6 +212,7 @@ void _createAdaptiveRound( _createAndroidManifestIconLauncherRound(); } +/// Handle colors.xml file void _handleColorsXmlFile(String backgroundColor) { final File colorsXml = File('${_flavorHelper.androidResFolder}$ANDROID_COLOR_FILE'); @@ -222,6 +231,7 @@ void _handleColorsXmlFile(String backgroundColor) { } } +/// Create colors.xml file void _createColorsFile(String backgroundColor) { String color = backgroundColor; @@ -240,6 +250,7 @@ void _createColorsFile(String backgroundColor) { file.writeAsStringSync(getColorXmlContent(color)); } +// Update colors.xml file void _updateColorsFile(File colorsXml, String backgroundColor) { String color = backgroundColor; @@ -273,6 +284,7 @@ void _updateColorsFile(File colorsXml, String backgroundColor) { colorsXml.writeAsStringSync(lines.join('\n')); } +/// Create ic_launcher_color.xml file void _createIcLauncherColorXmlFile() { final icLauncherXml = File( '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_XML_FILE_NAME'); @@ -284,6 +296,7 @@ void _createIcLauncherColorXmlFile() { ); } +/// Create ic luncher xml file void _createIcLauncherMipMapXmlFile() { final icLauncherXml = File( '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_XML_FILE_NAME'); @@ -306,6 +319,7 @@ void _createIcLauncherMipMapXmlFile() { // ); // } +/// Create ic_launcher_round.xml file void _createIcLauncherRoundMipMapXmlFile() { final icLauncherXml = File( '${_flavorHelper.androidResFolder}$ANDROID_ADAPTIVE_XML_DIR/$ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME'); @@ -317,6 +331,7 @@ void _createIcLauncherRoundMipMapXmlFile() { ); } +/// Create android manifest icon launcher round void _createAndroidManifestIconLauncherRound() { final androidManifestFile = File(ANDROID_MANIFEST_FILE); final androidManifestString = androidManifestFile.readAsStringSync(); @@ -355,6 +370,7 @@ android:icon="@mipmap/$ANDROID_ICON_NAME" } } +/// Remove android manifest icon launcher round void _removeAndroidManifestIconLauncherRound() { final androidManifestFile = File(ANDROID_MANIFEST_FILE); final androidManifestString = androidManifestFile.readAsStringSync(); @@ -373,7 +389,7 @@ void _removeAndroidManifestIconLauncherRound() { } } -// Retrieves the minSdk value +/// Retrieves the minSdk value int _minSdk() { String? minSdkValue; @@ -402,7 +418,7 @@ int _minSdk() { return int.tryParse(minSdkValue ?? '0') ?? 0; } -// Retrieves the flutter sdk path +/// Retrieves the flutter sdk path String _flutterSdk() { final lines = File(ANDROID_LOCAL_PROPERTIES).readAsLinesSync(); const key = 'flutter.sdk='; @@ -419,7 +435,7 @@ String _flutterSdk() { return ''; } -// Retrieves the string number only +/// Retrieves the string number only String? _getLineValueNumber(List lines, String key) { for (String line in lines) { if (line.contains(key)) { diff --git a/lib/src/ios.dart b/lib/src/ios.dart index 6d474ed..f283583 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Start create ios icons void _createIosIcons({required String imagePath}) { CliLogger.info('Creating iOS icons...'); @@ -49,6 +50,7 @@ void _createIosIcons({required String imagePath}) { CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } +/// Save ios image void _saveImageIos(IosIconTemplate template, Icon image) { final filePath = '$IOS_DEFAULT_ICON_DIR$IOS_DEFAULT_ICON_NAME${template.name}.png'; diff --git a/lib/src/linux.dart b/lib/src/linux.dart index b8a4d93..1cca354 100644 --- a/lib/src/linux.dart +++ b/lib/src/linux.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Start create linux icons void _createLinuxIcons({required String imagePath}) { CliLogger.info('Creating Linux icons...'); @@ -19,6 +20,7 @@ void _createLinuxIcons({required String imagePath}) { CliLogger.success('Created desktop entry file', level: CliLoggerLevel.two); } +/// Save linux image void _saveImageLinux( LinuxIconTemplate template, Icon image, @@ -27,6 +29,7 @@ void _saveImageLinux( image.saveResizedPng(template.size, '$LINUX_DEFAULT_ICON_DIR$fileName'); } +/// Create linux desktop file void _createLinuxDesktopFile() { const String desktopFile = ''' [Desktop Entry] diff --git a/lib/src/macos.dart b/lib/src/macos.dart index bdc295d..3fcfe28 100644 --- a/lib/src/macos.dart +++ b/lib/src/macos.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Start create macos icons void _createMacOSIcons({required String imagePath}) { CliLogger.info('Creating macOS icons...'); @@ -27,6 +28,7 @@ void _createMacOSIcons({required String imagePath}) { CliLogger.success('Generated app icon images', level: CliLoggerLevel.two); } +/// Save macos image void _saveImageMacOS(MacOSIconTemplate template, Icon image) { final filePath = '$MACOS_DEFAULT_APP_ICON_DIR$MACOS_DEFAULT_ICON_NAME${template.name}.png'; diff --git a/lib/src/web.dart b/lib/src/web.dart index 1e94c56..4de596d 100644 --- a/lib/src/web.dart +++ b/lib/src/web.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Start create web icons void _createWebIcons({required String imagePath}) { CliLogger.info('Creating Web icons...'); @@ -27,10 +28,12 @@ void _createWebIcons({required String imagePath}) { CliLogger.success('Generated favicon image', level: CliLoggerLevel.two); } +/// Save web image void _saveImageWeb(WebIconTemplate template, Icon image) { image.saveResizedPng(template.size, '$WEB_DEFAULT_ICON_DIR${template.name}'); } +/// Save favicon image void _saveFaviconImageWeb(WebIconTemplate template, Icon image) { image.saveResizedPng( template.size, '$WEB_DEFAULT_FAVICON_DIR${template.name}'); diff --git a/lib/src/windows.dart b/lib/src/windows.dart index 2997051..3bfbea0 100644 --- a/lib/src/windows.dart +++ b/lib/src/windows.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Start create windows icons void _createWindowsIcons({required String imagePath}) { CliLogger.info('Creating Windows icons...'); @@ -37,6 +38,7 @@ void _createWindowsIcons({required String imagePath}) { ); } +/// Save windows image void _saveImageWindow( List images, String fileName, diff --git a/lib/utils/cli_logger.dart b/lib/utils/cli_logger.dart index 2db57e9..73af91d 100644 --- a/lib/utils/cli_logger.dart +++ b/lib/utils/cli_logger.dart @@ -14,6 +14,7 @@ class CliLogger { print('$space⚡ $message'); } + /// Logs a error message at the given level. static void error( String message, { CliLoggerLevel level = CliLoggerLevel.one, @@ -22,6 +23,7 @@ class CliLogger { print('$space❌ $message'); } + /// Logs a warning message at the given level. static void warning( String message, { CliLoggerLevel level = CliLoggerLevel.one, @@ -30,6 +32,7 @@ class CliLogger { print('$space⚠️ $message'); } + /// Logs a success message at the given level. static void success( String message, { CliLoggerLevel level = CliLoggerLevel.one, diff --git a/lib/utils/flavor_helper.dart b/lib/utils/flavor_helper.dart index 7843f73..2094e35 100644 --- a/lib/utils/flavor_helper.dart +++ b/lib/utils/flavor_helper.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Flavor helper class class _FlavorHelper { _FlavorHelper(this._flavor) { if (_flavor != null) { @@ -15,62 +16,77 @@ class _FlavorHelper { final String? _flavor; late String _androidResFolder; + /// Get flavor name String? get flavor { return _flavor; } + /// Get Android res folder String get androidResFolder { return _androidResFolder; } + /// Get Android drawable folder String get androidDrawableFolder { return '${_androidResFolder}drawable/'; } + /// Get Android night drawable folder String get androidNightDrawableFolder { return '${_androidResFolder}drawable-night/'; } + /// Get Android launcher background color XML file String get androidLaunchBackgroundFile { return '${androidDrawableFolder}launch_background.xml'; } + /// Get Android launcher dark background color XML file String get androidLaunchDarkBackgroundFile { return '${androidNightDrawableFolder}launch_background.xml'; } + /// Get Android style XML file String get androidStylesFile { return '${_androidResFolder}values/styles.xml'; } + /// Get Android night style XML file String get androidNightStylesFile { return '${_androidResFolder}values-night/styles.xml'; } + /// Get Android v31 style XML file String get androidV31StylesFile { return '${_androidResFolder}values-v31/styles.xml'; } + /// Get Android v31 night style XML file String get androidV31StylesNightFile { return '${_androidResFolder}values-night-v31/styles.xml'; } + /// Get Android v21 drawable folder String get androidV21DrawableFolder { return '${_androidResFolder}drawable-v21/'; } + /// Get Android v21 launcher background XML file String get androidV21LaunchBackgroundFile { return '${androidV21DrawableFolder}launch_background.xml'; } + /// Get Android v21 night drawable folder String get androidNightV21DrawableFolder { return '${_androidResFolder}drawable-night-v21/'; } + /// Get Android v21 launcher dark background XML file String get androidV21LaunchDarkBackgroundFile { return '${androidNightV21DrawableFolder}launch_background.xml'; } + /// Get Android manifest file String get androidManifestFile { return 'android/app/src/main/AndroidManifest.xml'; } @@ -78,34 +94,42 @@ class _FlavorHelper { // iOS related values late String? _iOSFlavorName; + /// Get iOS flavor name String? get iOSFlavorName { return _iOSFlavorName; } + /// Get iOS assets launch image folder String get iOSAssetsLaunchImageFolder { return 'ios/Runner/Assets.xcassets/LaunchImage$_iOSFlavorName.imageset/'; } + /// Get iOS assets branding image folder String get iOSAssetsBrandingImageFolder { return 'ios/Runner/Assets.xcassets/BrandingImage$_iOSFlavorName.imageset/'; } + /// Get iOS launch storyboard file String get iOSLaunchScreenStoryboardFile { return 'ios/Runner/Base.lproj/$iOSLaunchScreenStoryboardName.storyboard'; } + /// Get iOS launch storyboard name String get iOSLaunchScreenStoryboardName { return 'LaunchScreen$_iOSFlavorName'; } + /// Get iOS info.plist file String get iOSInfoPlistFile { return 'ios/Runner/Info.plist'; } + /// Get iOS assets background folder String get iOSAssetsLaunchImageBackgroundFolder { return 'ios/Runner/Assets.xcassets/LaunchBackground$_iOSFlavorName.imageset/'; } + /// Get iOS launch image name String get iOSLaunchImageName { if (_iOSFlavorName == null) { return 'LaunchImage'; @@ -114,6 +138,7 @@ class _FlavorHelper { } } + /// Get iOS branding image name String get iOSBrandingImageName { if (_iOSFlavorName == null) { return 'BrandingImage'; @@ -122,6 +147,7 @@ class _FlavorHelper { } } + /// Get iOS launch background name String get iOSLaunchBackgroundName { if (_iOSFlavorName == null) { return 'LaunchBackground'; diff --git a/lib/utils/icon.dart b/lib/utils/icon.dart index 1ba80d3..be4d934 100644 --- a/lib/utils/icon.dart +++ b/lib/utils/icon.dart @@ -13,6 +13,7 @@ class IconTemplate { class Icon { const Icon._(this.image); + /// Load an image from bytes static Icon? _loadBytes(Uint8List bytes) { final image = decodeImage(bytes); if (image == null) { @@ -22,6 +23,7 @@ class Icon { return Icon._(image); } + /// Load an image from file static Icon? loadFile(String filePath) { return Icon._loadBytes(File(filePath).readAsBytesSync()); } @@ -30,6 +32,7 @@ class Icon { bool get hasAlpha => image.channels == Channels.rgba; + /// Remove alpha channel from the image void removeAlpha() { image.channels = Channels.rgb; } diff --git a/lib/utils/template.dart b/lib/utils/template.dart index 4396b92..0f307a0 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -1,3 +1,4 @@ +/// Android template class AndroidMipMapIconTemplate { AndroidMipMapIconTemplate({required this.directoryName, required this.size}); @@ -5,6 +6,7 @@ class AndroidMipMapIconTemplate { final int size; } +/// iOS template class IosIconTemplate { IosIconTemplate({required this.size, required this.name}); @@ -12,6 +14,7 @@ class IosIconTemplate { final int size; } +/// Web template class WebIconTemplate { WebIconTemplate({required this.size, required this.name}); @@ -19,6 +22,7 @@ class WebIconTemplate { final int size; } +/// MacOS template class MacOSIconTemplate { MacOSIconTemplate({required this.size, required this.name}); @@ -26,6 +30,7 @@ class MacOSIconTemplate { final int size; } +/// Windows template class WindowsIconTemplate { WindowsIconTemplate({required this.size, required this.name}); @@ -33,6 +38,7 @@ class WindowsIconTemplate { final int size; } +/// Linux template class LinuxIconTemplate { LinuxIconTemplate({required this.size, required this.name}); diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index ea47e73..44c1578 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -86,7 +86,7 @@ bool isValidHexaCode(String hexaCode) { return false; } - for (var i = 1; i < hexaCode.length; i++) + for (var i = 1; i < hexaCode.length; i++) { if (!((hexaCode[i].codeUnitAt(0) <= '0'.codeUnitAt(0) && hexaCode[i].codeUnitAt(0) <= 9) || (hexaCode[i].codeUnitAt(0) >= 'a'.codeUnitAt(0) && @@ -95,6 +95,7 @@ bool isValidHexaCode(String hexaCode) { hexaCode[i].codeUnitAt(0) <= 'F'.codeUnitAt(0)))) { return false; } + } return true; } @@ -106,6 +107,7 @@ bool isImageFile(String fileName) { fileName.endsWith('.jpeg'); } +/// Get color xml content String getColorXmlContent(String color) { return ''' From 0ae0c9ba2ad3d012901ba2914f849ea1043af1ca Mon Sep 17 00:00:00 2001 From: mrrhak Date: Tue, 28 Jun 2022 22:42:16 +0700 Subject: [PATCH 09/21] fixed ios alpha, flavor, improve pub score and update beta version --- example/flavor_app/.metadata | 30 +++++++++--------- example/flavor_app/icons_launcher-dev.yaml | 2 +- example/flavor_app/icons_launcher-prod.yaml | 2 +- .../AppIcon-dev-1024x1024@1x.png | Bin 26033 -> 0 bytes .../AppIcon-dev-20x20@1x.png | Bin 361 -> 0 bytes .../AppIcon-dev-20x20@2x.png | Bin 657 -> 0 bytes .../AppIcon-dev-20x20@3x.png | Bin 934 -> 0 bytes .../AppIcon-dev-29x29@1x.png | Bin 524 -> 0 bytes .../AppIcon-dev-29x29@2x.png | Bin 979 -> 0 bytes .../AppIcon-dev-29x29@3x.png | Bin 1577 -> 0 bytes .../AppIcon-dev-40x40@1x.png | Bin 657 -> 0 bytes .../AppIcon-dev-40x40@2x.png | Bin 1340 -> 0 bytes .../AppIcon-dev-40x40@3x.png | Bin 2097 -> 0 bytes .../AppIcon-dev-60x60@2x.png | Bin 2097 -> 0 bytes .../AppIcon-dev-60x60@3x.png | Bin 3402 -> 0 bytes .../AppIcon-dev-76x76@1x.png | Bin 1246 -> 0 bytes .../AppIcon-dev-76x76@2x.png | Bin 2737 -> 0 bytes .../AppIcon-dev-83.5x83.5@2x.png | Bin 2951 -> 0 bytes .../AppIcon-dev.appiconset/Contents.json | 1 - .../AppIcon-prod-1024x1024@1x.png | Bin 26033 -> 0 bytes .../AppIcon-prod-20x20@1x.png | Bin 361 -> 0 bytes .../AppIcon-prod-20x20@2x.png | Bin 657 -> 0 bytes .../AppIcon-prod-20x20@3x.png | Bin 934 -> 0 bytes .../AppIcon-prod-29x29@1x.png | Bin 524 -> 0 bytes .../AppIcon-prod-29x29@2x.png | Bin 979 -> 0 bytes .../AppIcon-prod-29x29@3x.png | Bin 1577 -> 0 bytes .../AppIcon-prod-40x40@1x.png | Bin 657 -> 0 bytes .../AppIcon-prod-40x40@2x.png | Bin 1340 -> 0 bytes .../AppIcon-prod-40x40@3x.png | Bin 2097 -> 0 bytes .../AppIcon-prod-60x60@2x.png | Bin 2097 -> 0 bytes .../AppIcon-prod-60x60@3x.png | Bin 3402 -> 0 bytes .../AppIcon-prod-76x76@1x.png | Bin 1246 -> 0 bytes .../AppIcon-prod-76x76@2x.png | Bin 2737 -> 0 bytes .../AppIcon-prod-83.5x83.5@2x.png | Bin 2951 -> 0 bytes .../AppIcon-prod.appiconset/Contents.json | 1 - .../Icon-App-1024x1024@1x.png | Bin 35866 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 529 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 980 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1479 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 760 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1524 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 2378 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 980 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 2137 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 3211 -> 2665 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 1373 -> 0 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 2617 -> 0 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 1446 -> 0 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 2888 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 3211 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 5018 -> 3831 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 1989 -> 0 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 3901 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1976 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 4189 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 4474 -> 3612 bytes .../Icon-App-1024x1024@1x.png | Bin 10932 -> 26033 bytes .../Icon-App-20x20@1x.png | Bin 564 -> 361 bytes .../Icon-App-20x20@2x.png | Bin 1283 -> 657 bytes .../Icon-App-20x20@3x.png | Bin 1588 -> 934 bytes .../Icon-App-29x29@1x.png | Bin 1025 -> 524 bytes .../Icon-App-29x29@2x.png | Bin 1716 -> 979 bytes .../Icon-App-29x29@3x.png | Bin 1920 -> 1577 bytes .../Icon-App-40x40@1x.png | Bin 1283 -> 657 bytes .../Icon-App-40x40@2x.png | Bin 1895 -> 1340 bytes .../Icon-App-40x40@3x.png | Bin 2665 -> 2097 bytes .../Icon-App-50x50@1x.png} | Bin .../Icon-App-50x50@2x.png} | Bin .../Icon-App-57x57@1x.png} | Bin .../Icon-App-57x57@2x.png} | Bin .../Icon-App-60x60@2x.png | Bin 2665 -> 2097 bytes .../Icon-App-60x60@3x.png | Bin 3831 -> 3402 bytes .../Icon-App-72x72@1x.png} | Bin .../Icon-App-72x72@2x.png} | Bin .../Icon-App-76x76@1x.png | Bin 1888 -> 1246 bytes .../Icon-App-76x76@2x.png | Bin 3294 -> 2737 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 2951 bytes .../Icon-App-1024x1024@1x.png | Bin 10932 -> 26033 bytes .../Icon-App-20x20@1x.png | Bin 564 -> 361 bytes .../Icon-App-20x20@2x.png | Bin 1283 -> 657 bytes .../Icon-App-20x20@3x.png | Bin 1588 -> 934 bytes .../Icon-App-29x29@1x.png | Bin 1025 -> 524 bytes .../Icon-App-29x29@2x.png | Bin 1716 -> 979 bytes .../Icon-App-29x29@3x.png | Bin 1920 -> 1577 bytes .../Icon-App-40x40@1x.png | Bin 1283 -> 657 bytes .../Icon-App-40x40@2x.png | Bin 1895 -> 1340 bytes .../Icon-App-40x40@3x.png | Bin 2665 -> 2097 bytes .../Icon-App-50x50@1x.png} | Bin .../Icon-App-50x50@2x.png} | Bin .../Icon-App-57x57@1x.png} | Bin .../Icon-App-57x57@2x.png} | Bin .../Icon-App-60x60@2x.png | Bin 2665 -> 2097 bytes .../Icon-App-60x60@3x.png | Bin 3831 -> 3402 bytes .../Icon-App-72x72@1x.png} | Bin .../Icon-App-72x72@2x.png} | Bin .../Icon-App-76x76@1x.png | Bin 1888 -> 1246 bytes .../Icon-App-76x76@2x.png | Bin 3294 -> 2737 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 2951 bytes example/flavor_app/lib/app.dart | 28 ++++++++-------- example/flavor_app/lib/flavors.dart | 9 +++--- example/flavor_app/lib/main_dev.dart | 4 +-- example/flavor_app/lib/main_prod.dart | 4 +-- .../flavor_app/lib/pages/my_home_page.dart | 2 -- 103 files changed, 39 insertions(+), 44 deletions(-) delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png delete mode 100644 example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-dev.appiconset/AppIcon-dev-50x50@1x.png => devAppIcon.appiconset/Icon-App-50x50@1x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-dev.appiconset/AppIcon-dev-50x50@2x.png => devAppIcon.appiconset/Icon-App-50x50@2x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-dev.appiconset/AppIcon-dev-57x57@1x.png => devAppIcon.appiconset/Icon-App-57x57@1x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-dev.appiconset/AppIcon-dev-57x57@2x.png => devAppIcon.appiconset/Icon-App-57x57@2x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-dev.appiconset/AppIcon-dev-72x72@1x.png => devAppIcon.appiconset/Icon-App-72x72@1x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-dev.appiconset/AppIcon-dev-72x72@2x.png => devAppIcon.appiconset/Icon-App-72x72@2x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png => prodAppIcon.appiconset/Icon-App-50x50@1x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png => prodAppIcon.appiconset/Icon-App-50x50@2x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png => prodAppIcon.appiconset/Icon-App-57x57@1x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png => prodAppIcon.appiconset/Icon-App-57x57@2x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png => prodAppIcon.appiconset/Icon-App-72x72@1x.png} (100%) rename example/flavor_app/ios/Runner/Assets.xcassets/{AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png => prodAppIcon.appiconset/Icon-App-72x72@2x.png} (100%) diff --git a/example/flavor_app/.metadata b/example/flavor_app/.metadata index 95f73f5..ed0b518 100644 --- a/example/flavor_app/.metadata +++ b/example/flavor_app/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled. version: - revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + revision: cd41fdd495f6944ecd3506c21e94c6567b073278 channel: stable project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - platform: android - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - platform: ios - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - platform: linux - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - platform: macos - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - platform: web - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 - platform: windows - create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 - base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + create_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 + base_revision: cd41fdd495f6944ecd3506c21e94c6567b073278 # User provided section diff --git a/example/flavor_app/icons_launcher-dev.yaml b/example/flavor_app/icons_launcher-dev.yaml index 525ba38..1bcc1d3 100644 --- a/example/flavor_app/icons_launcher-dev.yaml +++ b/example/flavor_app/icons_launcher-dev.yaml @@ -2,7 +2,7 @@ icons_launcher: image_path: 'assets/ic_logo_border.png' # image_path_android: 'assets/ic_logo_border.png' - # image_path_ios: 'assets/ic_logo_rectangle.png' + image_path_ios: 'assets/ic_logo_rectangle.png' # image_path_macos: 'assets/ic_logo_border.png' # image_path_windows: 'assets/ic_logo_border.png' # image_path_linux: 'assets/ic_logo_border.png' diff --git a/example/flavor_app/icons_launcher-prod.yaml b/example/flavor_app/icons_launcher-prod.yaml index c4b2afa..e913792 100644 --- a/example/flavor_app/icons_launcher-prod.yaml +++ b/example/flavor_app/icons_launcher-prod.yaml @@ -2,7 +2,7 @@ icons_launcher: image_path: 'assets/ic_logo_border.png' # image_path_android: 'assets/ic_logo_border.png' - # image_path_ios: 'assets/ic_logo_rectangle.png' + image_path_ios: 'assets/ic_logo_rectangle.png' # image_path_macos: 'assets/ic_logo_border.png' # image_path_windows: 'assets/ic_logo_border.png' # image_path_linux: 'assets/ic_logo_border.png' diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-1024x1024@1x.png deleted file mode 100644 index df3b2256ac4510b07c90deca012f64cabbd11bd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26033 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-20x20@3x.png deleted file mode 100644 index 9fbc865279ebba1f73219e70bcd6a022d70ad0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lluP)~})4PE#A|o4aWNaGy zG5O7-EI;>?11oWu#gX{dfju>g!5+FpT?CsJ%KsEwteG5%!FHb}ZdBdn#b^y3F< z{$1WejB2lNBDRkv=?oW%a6)l|Nj$#H&!o9X2=?zai}$g3$C=m>8p`$lCNe!$Vsd<4 zP?Ys$w=O>DOzad5YQ6QgCQhceuel*8pTw<+M`(zF;wq1b$B1}^GfgPOO-{wabZV@H z8hSC$JWU5oV!|aoer;1s2wxAi#%SG(8v1Yu@3s|gEtSR-ZSkZOwjlnRdpnxV#^m;M zoh?-EMRVtJGOCOxHL{>5wQ zdzJ~X$S|^uL&+4-aMRz7lX{cS;YARhzY;gri@^YvdwNlZYtt!2Jm1yoS|0lq!_-L=qtyqW}N^07*qo IM6N<$f>8*`-v9sr diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-29x29@1x.png deleted file mode 100644 index 5f91155f7e8fac5329c579c41c24f8c5c0696397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)G?`5|2t4FnA;qiNR)( ziiWgE+uWi@Z$GE!dUU9^S0gd_ru!x5{?7M(_vBnfRaN+fP<{jbcmJ5HA>1&DKcGkp z2->~@47ePf_0dB${z?qNs>H^e>|=|cx``+cE5T6*E2GKLOx-BLoX>Qm5g{thCQ?4rK}RHY`{`Zrq2Aj^ zfes5a5dB(1B`_0%?oNmti}oP_U4EeJ0Y%>_U&c{qq?#B!XDx-=#j|!ACYF!(m;7`y z^p2WkKIlkwj`4G*NYGcx7VoL6DC(p*;i0QOrK|`jiC4;Zs>}W9IpgE&E_p?SaSvU& zi?6&5LQQdeCbcQiG_D>RfHxxU1O)cNyzY~{jt0oh%hu%snXY9$m!`eD=+pM@L*TJ( z%D>jzRAo13-(^4 z^1waNTwzOIwSjw*D)Lfi#(^-rS_F*aNj5;k*SakmX_zbfGntmswQJ+F;EJ1i4t(gf#<;Bd17MffN_5 z-Ky0%sIis0dWD7(0#+cx)q4O`oUyox9w1}|>s-ADAl0fJ)DY?cJ(jq}9>}yFa|?|` ztzd<_aUW21X@9WeZlTE+&m(GuoVlAl3$$ajUi1;JtCn22TEBkHcoyhA(3G^|nr1G> zWZs6g_*l7s_KGa)dO!ymdq9-oL6{p^Vbi$U>A`&QT3O8O)lGBpVuGAj#^Sl9bu zZgeGme%;zy9^?MPip=eRj*2KQWT#Re3dSA~RqGqon%UWvE~TzHSaacO;`WMY>pVXj zPl%5e373*RfOWk!$Gwkc?|}m@v8_DDXIom*;zF{jH75Kfj5U6|H+t^X!r03pfd!dKEMe4EW_tPpU`^Bs+?!u6;Fhg zL4|_;C}x;$6w69iY?W;hOqs{k-%?$F@9p^PV(P0K2D*C3u+}X#`?kua6UJBMe0KS8 z?cLGO!6j`(vw~7$rn@(Q$5&5cjm?oM?m(irucdlqJd`r3iY1UmNnTiul@#)(=A^s7 z>nq~VR_!7pRm80R8RPZ~58CWn(2VBTeO6s<%C5(`?PdVn|ZRB_niEQo>BK6;bAXzsxNm zHMt8DkxL>W*K&KMBvP+~?oXXlz+kXLr z8@yh~Bmn?&fkCBM`y=L)Mo%c)U|YVv?%sy#MGCd*AA3j{32>_t&z30O&h|rF0}T(< zWbjXuv&$#LjXYnJe``+Aj11-sIv!<5D0=NTDcT&y@iSvO-Kcj~PzMB_WPZ9@l01^joq|{2n^3(2# z7ZU4;2Ii1eF$>V0k#5c1asIeOx(f0O9`D2A^yHH=b%2est1W2xN%^qK{O%pmp-$lk z4kq*u)5#w)0r>u`@D1%c8v}Q1E?ZYcaw^CO3}uBY1xGwLA9}`jf?%nu)hK+Yb2??JJ^nc@`QYdZuYYnYvi0wEyP-9%*iN_%^0;-| ze#MtU!6k01g|_9i^dHS%eP8geM1Z%6Qd{C)mc~Jii;m`VNY2>OUc&KOqe)*qREh~X zrGrOD8?q5j*G`r3VUjKY*&0_8-p}m^Cn`ujwxu|3v6=$)H1uGZ+PaWfBqyu5$1T#V zdUs!T&`y0rY)GAz+!H*{a&gN0m#+El=rVf9M~7&lrVWNlwROvJA6Cbs0Lt4bjs8%o ze}M7259J}1^$i#hc;KIjQq;i4V(#WB{}R*rEksMxo|_H!n8p6@39x=76vqgQYSnVl zZ|i)w_&$Vn2ZrDJv@P&#B2UTYE6rByl+iJrvf&uSfX+K80zM3(r7Xg)w2!hX) z4XSbU2*z4JyU^6(E$PmQaPFDmKqSelK6Z16nzj~!ooo;DlCj-r9~Xja6DN%HGdvXBQ6Fobixx7$OCb(to;}Ub$fAdPHgXOIw-i*sM1SQpm=;56ve)oqvEgQ8oN^0 z$DQ5V52X91X4ifQGG6hQT+31G`H`o5SCV0a6}}lC?;CA_EORQn$-6=`*VZ;U*44F# z@fOBB<~y|q2WX;Ynz1Lq%^dH0U`fG3(qlYpd7?1JcTZQEaz*z@qtfkzC%&i=j$U9n zD%mO`AmNkrJMU;TK9QZ3&j7E^o=?#TGyGqlcys4&ergYHqOBFwr@kzc4kGIbdt!p;QSKI?ln{~9jk4v57S9b3U zjPFuCC-U^aRW-*ioba93?h3x;7Ub4Zlkj7_`IB!muFuum9pQtO%&ZLFrtvLjZ2;mK7%+z=DmpkTQCd^31#Ob!75fOy&)RecKs+K-U*B8l-cqj33=F8Vz~A&dGsFJnJX37vly_ti)6b6R zxk$?$N-M%CAC^m_W62#Nw}p@ED^oaR$^Tr>-g*S8-`oJJ-?woA0KZUGMilW?=(S4mW);Dkrih55^>vVX@Zf`Di%&dQ5IlQOJg7&p z;H^rpq89BzDi%Dn%{J0%tZ9s2}s>$z0fSh903XMi*O+P4(|wtfJOpQJ1J=d2&}%i?H}jVGIL_+NuVl2%>7ESf_0_3bax`$g5Q@(BM}Km@_yR-@C6 z>JApMPKCx0(yj7;5KQyi(8#CVEuH&z_zQ1ofXD6nna`1ofstwEhu`RvQv;JzA%f3# zZTArt_M>+F#F#SuYFM96gF*nH@A)WuByW5CAKUikpWVgmLYUZN&e!eLXQQlfZm*Q> z{RGn1+W7KvSL*&qI$J>YKEncCdHR8x*7^NyKEf=vC894b?Roh6tGET8_{7ZbiJ5u! r$VXV%gU35Obo_76)d3v90qn#dCQd61xF6(%00000NkvXXu0mjf8fi^S diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-40x40@2x.png deleted file mode 100644 index 8fa19637fda7aa067944f64f555124a844d17be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@2x.png deleted file mode 100644 index fc455d0cfbd3162ec649441b5ed3c8f07604fd42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2097 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-60x60@3x.png deleted file mode 100644 index 42a4bb54de71fc241334ce66420d62b03275c7ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3402 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-76x76@1x.png deleted file mode 100644 index b8005ef75f3c2870718cd276a2f559fec5e7c4d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1246 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 ItLO6YKMq?Ee*gdg diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-83.5x83.5@2x.png deleted file mode 100644 index ae3c8c0c3d45fe1ad357d804d732426f8404e011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2951 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 RyMPTaxnpTqe*016e*p-*3+Mm< diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json deleted file mode 100644 index 7f86512..0000000 --- a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/Contents.json +++ /dev/null @@ -1 +0,0 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-dev-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-dev-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-dev-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-dev-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-dev-40x40@3x.png","scale":"3x"},{"size":"50x50","idiom":"iphone","filename":"AppIcon-dev-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"iphone","filename":"AppIcon-dev-50x50@2x.png","scale":"2x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-dev-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-dev-57x57@3x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-dev-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-dev-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-dev-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-dev-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-dev-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-dev-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-dev-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-dev-40x40@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-dev-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-dev-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-dev-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-dev-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-dev-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-dev-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png deleted file mode 100644 index df3b2256ac4510b07c90deca012f64cabbd11bd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26033 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png deleted file mode 100644 index 9fbc865279ebba1f73219e70bcd6a022d70ad0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lluP)~})4PE#A|o4aWNaGy zG5O7-EI;>?11oWu#gX{dfju>g!5+FpT?CsJ%KsEwteG5%!FHb}ZdBdn#b^y3F< z{$1WejB2lNBDRkv=?oW%a6)l|Nj$#H&!o9X2=?zai}$g3$C=m>8p`$lCNe!$Vsd<4 zP?Ys$w=O>DOzad5YQ6QgCQhceuel*8pTw<+M`(zF;wq1b$B1}^GfgPOO-{wabZV@H z8hSC$JWU5oV!|aoer;1s2wxAi#%SG(8v1Yu@3s|gEtSR-ZSkZOwjlnRdpnxV#^m;M zoh?-EMRVtJGOCOxHL{>5wQ zdzJ~X$S|^uL&+4-aMRz7lX{cS;YARhzY;gri@^YvdwNlZYtt!2Jm1yoS|0lq!_-L=qtyqW}N^07*qo IM6N<$f>8*`-v9sr diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png deleted file mode 100644 index 5f91155f7e8fac5329c579c41c24f8c5c0696397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png deleted file mode 100644 index 8fa19637fda7aa067944f64f555124a844d17be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png deleted file mode 100644 index fc455d0cfbd3162ec649441b5ed3c8f07604fd42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2097 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png deleted file mode 100644 index 42a4bb54de71fc241334ce66420d62b03275c7ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3402 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png deleted file mode 100644 index b8005ef75f3c2870718cd276a2f559fec5e7c4d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1246 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 ItLO6YKMq?Ee*gdg diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png deleted file mode 100644 index ae3c8c0c3d45fe1ad357d804d732426f8404e011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2951 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 RyMPTaxnpTqe*016e*p-*3+Mm< diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json deleted file mode 100644 index 1a0e76c..0000000 --- a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json +++ /dev/null @@ -1 +0,0 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@3x.png","scale":"3x"},{"size":"50x50","idiom":"iphone","filename":"AppIcon-prod-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"iphone","filename":"AppIcon-prod-50x50@2x.png","scale":"2x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-prod-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-prod-57x57@3x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-prod-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-prod-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-prod-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-prod-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index d119f4c9c61527e57898622f1c235dc511e0d1a3..dc9ada4725e9b0ddb1deab583e5b5102493aa332 100644 GIT binary patch literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_L`4Zj8mCPwN@X`r4$2ZOmQeR}vXnxLvXp3%E&G~n zL^y?{EM;O0rNS_>4Ks7UpX=87Jm2p>@cj1tRNeRcelOSiT3*-dx~6LuW~PfJR!CqN zws_y(T}Lo%9{hD4CcXgvz?HSGVAyr`zFmJF4WJBnOW%C(%|V@)ikkMSGJYm~ytgNR z*|(OJ>GQ-R4%gkkiA(+dsmxhkBZ68~-F|}0e&ttT_RpA0`XVbaE6Rq2W`El`{$bWD zCoy&J#HTBE`XT*JTI{|er8;|uW7#7gOZ)O&_bk25$=j3g$aSqwiXJF8Q(4>P+)&?0nLxa;7?34Nd!~OFD?CewZvhp%+S%`l}GV3 z?sdI0s)y=UiNhHEZwD*nf>3bA^yq8*iYnP0`M#o?E;i-#yp7Lfuq|3)eB-gH!GP}H za;)lxzCKdqez>~>`Hqzp=Tby4?Ax_bws}4CTEO~{(`QyWux@nXQJuPDv*qg=qvQ;B zyxB!bJ`t$PL#rHFvN@wsokRVTUGEkPj20=az_8piom1IX4#U!~BySpu6Rd!X#*WCp zg3xzFR6?u1_w}fFCZQ~YVLET$&+FqCaiiVt08UARo3g~(?N*;7?1gxR$SWPn4=l61=OharrH+#xxesR+?DN$qtVQ5 zxe5}PsvM2WlJ}kt9eH*sYFHG*GS(alCfqBwuQ=Drh@1}3U&lZ4(m6wBK7Hx;q8YTS zV*8Tk9MHIo^@l?I%0vQ#<_Bv!;!YQ;xoa`W!@(O{LQY>tVpsHWkk91%c|S(OM(Qso zU7c=mwJAQzjZ?cPQoZDr{K(sYAiQF`OpfBBl~N#>PbmvOm^TbDu3s4JA0zhObJ3RD z_UzgdOvj|MH>peTVFmtD1%%>!Bx=?gJ{xb}IYz7vrN2CkDbO7=k@l-0)jzqgtB)Bm zneW3cPuEpUQtSE7_ZE02id4%@=uh)M1zgc62R*>YYsILM=CC9x)$RPT|TME87JpkVx=LxHC@ZRqw9ylBUUbg zEy>5IxuZi(-ni1}Xk-5H$yQNKt@-rpSG6A|Np~M2veyT$gHiU!6G|_ddf%yTkui?j zbOf_bEqP5#m}FFb&x5zQt51ncTQvEi&F9N0p1*xGr6ijN-}=1Fo3S!Sd3W@Dkj|k4 z%gRho)bqXjg&%D06fqD<&hNGxFComk)Gfw8&4RBkLM3<$QlBlb%1H&iexDq4!<>*Lil{om#-_juT~2 zdq!X9d!~P<$UeF~pWd?v$7OOlWsT)vzk3Fv0xGw<)~KZSEx3GF3wxzLYr50F61{!g z0FJBr-;`^;NTz@d+BFrvTiP{7(-OOCepJqp_~TzgEcF{FfjlZZ#U(*CX$AVi7iW?Ld~2idG=#8g?Ue^O*-z z^LbxE3|Ze_O4h!T#RBgOg^llwdq^j*-)H5V9qe0y4DJ+f?cF7d_1%f_J1d~|P4@gc z;>Z2V-Wb%~m~pnbS7|-rw7}(r1Xh_ypx+%!eu=2wF~OP`kJH0_j+lwZT@^72-ZAxx zNqaTq`|BdE-BOD~hOTc%TS%R`@+l*aJYV14u_;Ew(6RZ_N1uD)9gqOh>94DOgJv`x@m%($;uKw@Fuf?i8v|QS2 zY;#X}ZJ^HmjrZo$9eJoRz`<@#OldbZQ-rY_@APbs+D*^X!X~IiA6!M*F$;T0~`9B!ZHk17NuUD({ zG_Y4<6JY`T>%D2@%QvbnZH%k&lN@lxncrX9oBbd+`gwU78~qXp*0IkIMb9n`ZoW$!-Ug@XKnN8-%I*^gIWPEVD!el zpC+Z{<>m3h=ez0e<*>dhQ{eqAcSnQw#IoN>*OAs?(klAm<`FsU1P`T-O|?F5ATL|- zymwO}GQZ~{7P0c*z!Xqtu|WvTGr!*6pSb3@w0F^N>8G@G32clK=u#p46C&A4625pI ze^ZDr(H&6)E#1?4<@McX*b@%Dx{;GaJv0o27A2ogEozs=#n2VMR z2-Dq*lXFF?`}+E*(IwMzlR}Vy)2p8Q`96pF6qzH~RVueCfN#B&r3mv$OytE~L(u>@ zZp)+@cYA1h?Ll|iL!Ui z^(qQq4U|t&oX(sXgRnQM!BB@+G4Cojs-k`1m=)R$lx!%g2q&X{PQjDeOYqX-Y*M7n z%p{oAmI!bCH&XP%#z(3MULpO#^H{thZUgp{A~9O1dno{_8ZGtztVWSqW( zo61IF;lhjX-07h5jZZU1;TJWlH4L%sD{`zNd-?FZddvR!tuEih!e0vFayd2`he1!yEdU*!**E-i@w+=eBd_G41C}{dJLC zDNd&(bzLGv2&w+-(ka+GCU3MPY^;bB>_5WeO>Ky&qd!mSxLCDz=*WdIatn74*ciGD z(w0xiuM8k3J7bso2c!@Ky>pbF6D?NDdihj^(PJFPLmu{PVh0 zA@eq{vXsr=(iip%MMd$--2kJRmHIa`0-cU94n zOV9Pww8`6PpK@O7;b!Ca_Y#`tO=XO+MgYgJHWBWxxD>F2c5>Bx`q5igOH@|8>I8p| zy`6pZr!Pe^L$udfbk-0aRL>k4AWZFqYwR{)>o#n-M60Ou&!j;V!b+2;pACa7VvB$7 zUH}KUF3JNmidEO83_IA*$*ss^wcuv++!g~m%7Q2r`i=QH-cuf)MWVeFHYtU$%-Bkm ztDP-g@UVoG zVZ50`msY~lT)nk-q#4-FDCMgqOoLf~#vq-~as@M0U<;mK?&yD@a0~A9$WY?sGcxF4 z<+*ci$vqX_dAC~NTCfEp>L>OvaMk;i(}kkF;aBEPoP4q~Y-E9u;h&O}+bU9>s3;gG zXZCs8jET`mUHn`iR}3rMSD#{ad@r~?zjhC3lMhP z70g7+V3z{>Nic(jeOIqtwFs-6Ld^5A0`MPy*ic>V>Vpw zDPMh84!d;LgM>?1*q4ZV6#HWArtQK$PBBH2)DVRVE!zb?e<)+rEpcP;Z*1r7eE#JF zLJ9;Xc#GRMQcfbtbiEfv4tqU4e?@ zu(W+P#vQpVMP8P|y%@HE0~XNYL?Q-E^7S9Og58U->({U6M3z`B4knRtwN8bm%M5tB zOOMd_5oOF<@jV?L)7g7%F4fMb`%AfKkfU-dbRCmkyhCTwMXHU$HbH`cIazN=_^NF^ zXWcFp-P@kG!b5E5nR9O@ApSTD(V09cdWod}HuC$MPY!U|8+lqxbPe0upXTR67gX>e|mi)cFd=bu6Stz|D>~Liam447vTQi z&*_q4AE*A-;yGc3DO%P8POzI1>+r`a{9cKYG7D365nPwU91XgDO?Z0~5&ILjp-_%BMKC#^ZWZmb3jSHmeGogwA@3Wz^P}PhqYBG)3lW{W|8EsH@M7|8Tb3zN z$lJfOMtT00J1(D&%*GN@bSs(7tKgy2mLnY~a5kI}sa{`qgVY0s+cA?M6rY_N|I;JS zj!|uFSks9d4(m0~3g^>37AcTZ>TD~Rp>Ecm_!Iu_w8lOb?Zhd)F7qYH)L-G@A~`I3 z!~gkg3LXOf@zo!imd9Kr{+qz9;1W)8%Aj8+-_{oBqVR#x?d04CL)O9HQwZ|zbvoYq z@!_ldMS{7dM81=wVXk9@bn~K%OW+@I;_~()z2sml&f*^Vhsk`6|NoEwUj+Z3X@Rqs zUR%wb1I^s_SohVLIdaBIny1ect+e%6T@h>;QsSb;E~~d~-6^u=00peUZmodoTeh6| z`;i>bI)7;rL6yfR()6<{)qXeo=XhH9ovbB(=2@ZBBc7oiD|SbV_XYzNt+sySMyMos zgg9qy=Bw1$D%4J>yl>fLb6m^1maU@k2N=B5^QZAB=i#Za2Khnu z_xuxh1lvyC2Gl9PJeotG^9S zOGp2w9*S-O^=AX76yGfbciKj3amu}#7-U;fG?jijMx=jQhcpm>bl-4BZpp_kua4 zEwGFcq%k@@X^Z?hj+{`mud8Zl+<6d|$=a`82rj4OIVb5v3Kv&%H1J-;e(R9QE?#ab zr1YD@?P(-_wU9PXI(;4zsnh7x0F9TrH=TpK1uwl65Zz5&9!r4@#_Ug+q2{-JZxSp* zGU<-ja~k5t%?rzPk;((FPy^d>=^GnC7|EOAaNz?h*a4Yx*|!91_evnG%|bu8<>3 zWe7(8X4#e0(F?#GyR8B~)zhQ{jlsjKcEu0*dCPO6IyN8LM>yF30kjx+6 zd~-$OVndT{X@7nDNEi;cv6_@!%@;3}l;Cmxtrf#v)C=jHoJl~jdgZ3V$_uV9zOSZ8 z#*njJJ>SM!mYR^LhZ^i2eVC$^3sPTJe=QfL#-pLW@_t%Xx@?u(GcU`9PJQI{sdi?! z*WR*>eA|Repta|-BmE)_ykfc61LjSMmy} zYky}mt}SR-)m5G&XBgrBgEr3a&^%wmD8`*`uO+9x(?u`}KT0Oqr1{t2h9}m0Gr|sg zOv7CzAhGFULtTX3IY`>zwL&(FopPF&WVf}1$>6r6!Og4Nf$;g$h2>sIPAIy}j2u_i zHkG6=;PYBXPNNP`oB}Vzv6V!b?1!J)b8-Iu)>;vTg`{Gq8I}tfZIaP%JB`?Q{b5|@ zDc+10f9Q@!c11!_*~hRs$wNI;_+BP;ej}5xT`CPyYe{6)zEdE6!*L}sUW}wiPx*F$GMXGCr6hW%23e-wXZP+<-F9x^a{{hV zGzn(;SxX>F-jC?5nhv%Cq4Ll>WajQ^CROGUK7j6dc_cm|LU4>+2ZMDw-#+ao6xpzl zZWpoEqG|waI+cqvn>#d05l&g7l~S*O2E zKyI-fYBdko4!(zwqQu-41Z59}eRdF@8B5sz->=^oU=;ho=4D<~58#NWJ;@b{Z?$ zxQ8@2^UOU6OJ3)c`Qi7&Xgq7l={O1Y%gQWneY{`p7nRbMhwTW4Z`w|ESr_aObSkOh!B&aoaKI)Bs9&26AkM!VFdgI+^53d^_&W zF6%K`z)m`R;3d_I7aKKu0PJ@$Din%(M!|jgJcI@Bm@2aWPB`NwPRKk#X^i_NzD$BM zC7pYLl#5L|2VJvl=6)vwO_9*@>E?0VT`wfI&i}be&xgS#f#}>g6VvkJ(xAq0E2;4~ zJ82Dg7%;qeWX4N61-9^U4ahDTB-?}BVe6oW?2F}AwFE~?Um&VL zs$*KI8513VDP)M840+=<85vYT>Jwt*zE`*qbd$1RH(aphIyjZeWGW|V4VZemxSmnB z@nB8?laY?oFM~$WBf!tR2CXMUtQKgr+4k|I8r+@FaPvFH6H^c&7fJ?i;7Uk0wHqmB zIdp3T?mGBbYpvR32`Qjo$r;mE4}o9tCrxn=30TyQlA=KN z-UBKT?^shwIWwJ8(mH`~={lE>@bJO&x=Imj^g@PEoI@9!A|Y)V>jK!K@{~7iZQx$) z?o-(GGPNQboO4ijn?6gt1!%}ed(~}M4<|~oFGKV=XcWg2(;!cM@FwU@X~_WE3UO(j z?31^zhDalHC=W6fX6-}RZt|`c-pZMw#^lTxjGJHn$;A%^D?j6+f%vbF!{=F$%BVvD z+uL@rtaTx3IqEaOdT{o|(^%Fxr{^$kP*kG`4msu@SnI|MQYc7uyt^3pAl4q~;*t)7 zi4w~}?PIQyBl5^AQXrzUPV!T&f21*vR{)$bu(#Jw(pHe4k1_v1&i8CAu$6SJ=?K#3k%e3{3bP>3gq)#SH zlwna%&ze%6^dI#sF94F|YYMrsHDF?TC_K=EXckyLl_AVuRWRmYKyjcK$~cI*JR?V~ zV*O{>Mj;-GKb&;}(|`Q^$AF-&Cjm`!{MuBiOTnAcZx0m;lOPB;>(wmUcs`|@2*o4b z4~8PeXFE#0iVWm%`2Y{SKNYVSiEjrLiz1CF1dNGQaXy;^ZmIKj z(T0C(H`%*&3QFAn8lA9JCl&rNN5x4J;+o0pr(E>a(h`=ka0s zK?$&P4Tw)@Fy1wwqLXwVk2KO1?$)5imXFT0v9<#uS+)}vm58Z9w>~s;{|#2%R=y7I zzP(BhovNjRPss;MHTm=X!68sY=?$A}>?Kh=s8Qj24?e@iZaR&O3U^2alDJtSRQY9! z;hV>)ukWKn+-Uu?nU%!|+;G_R=&5ia(<)-+Z`jUckiY6ZSAro|i=4+Jxi^Z@8?D-< z(b~m3KkBs`4SGMzDifIlU`}uWc+V7iKx%Hp;p-bmS)04P_@hdbC2DX$O*o*!Er2eD z@Q`Mm9;&=i(CM)|IwE5~8&5A`0>txvXtM#lfMh&rP}OJC!c)x+3Wb&{P7P4AX3$>4 zLBM(@e~|9zW=cHTCcq2iiJ?bI9*p#dg>0Jbc#|2+(GCLf#bvWa}W zs?ByN41odxPWVXuu;Qiv{N(4L;7%r>;DDalW6qP@;j`=i-Y78ec#7eNx=Npan8%WgOFAgBdoDpF+jegDvCD86TX5+JZSjJOz0o#Kl* zDU*8$**uO6wDoFJA;$^z^N;m~a1Vhh37md*cjXfT`!y{2d>ak&r9z9*5CAZYbzaB} zQ;@zAoCVGx=lba2_KMW@Pe5+Y0X6+q%>orbRi@tnrg!T9jIKRN#$Qrzm|SW4buv6? z#i&e9Uwh%|R?85iQQ?~WZGVKK`_DRmC7M_)c|lgIAnDOX+7o_!x58b_k>@yRx#0C6 z0{|j6`zmOw{T@(!WFsVB#lO-Rw z%M;Tr(5&EjgPhOgKX(!QXk}DZTMa}S$!b>`6`(;nhn0Y1`eab<*aztP`W(6raD7oe zKway>OPZKM3(?qywc3VXNjyIUwK;ur7(5GkeeEy6-!vHta9@V7gOt&UPCD4s0wykr z!cXu>>*e@@N~uaCw~jJXA*8@_aK8E;>4Cl%li?)Es6(7(pB?%f(9DZ{-Y6$yqRdDZ zsrx2x8I-2~3F1%w32E)-ah3|Pw&(ZVJphotDyz4Yye$%r-ai#S+x5HgZR+0MiPkG z=fUl@-d%>K_!joN*S znpI5Yw)_oA6h1js8P0G8GumyY?BNlUG7tIaDMV1?l_;By!mD*=jhb#rq# zD)iOlVK;&K{7g^hG8+cjpB$NZ)zIvg^c_R!ci~m}z>A=oqY1yjzA;#k0%^XQj~p_? zYg1RSTW12d^kjs309Xbjh@UEAPJydql{i2dwia@r>Q@JJk@*8MO`r5x6Na9z=2<>C zt}URcutHP*hj&bN!`4km%2C65bzs9zLIx!eSCY zyOwE@_A^*4RQWJve)&l2+PSQa%(}_^rB)we$&GvDxV3;{fUux;iC^D%-oa?K7t+U+ zw14PzG6vAIA0r9Kp!vCs@n%eOFI?rd|2ywSQL|sEVqvS3W?DK0_(}6QNFwtmIqWv% zBj6CeMV|sVRTNOPvxI{~9!#dE{`{o0m10;u3A>i5QU^!LY$H^m%&`Nof!RNrg@pNS z8Nv$Cj3pBRVZ=VpR-yj`0bOV5T;-}6z%@^5hu0E-s6H&f?O7tnM7erTlMC$;g86{f?dt^|zg z@Bu9M4OlKc@4xK(9c14H+v2^@jc`C8euqN2y^f&K7LK5)H}3j19Se8nQ59;@xyC!p zDOyoHIwLsKIfrIysB_q@`r}^k0Y)DZXTWlOqh{~FD#q(~qQm(A(f|v0a;nha63C1g zFNV{o5qBN^A^vqf0^h434=-bSW`RvI_!({fOtT0@GourLDv1NafQ)_}@qTGJkxX+D z6Il?mh5H2_{&yAVXoq0u(w|QVK;~pJ2K3l}X5$H(Xkjb#LM@X3?=?=aUI z^h5R0aIY!n9~Gm0v~gNW2Rd_Ps9T=7+FpgV)fkAxo;0wijgTmq{CLX6e-A_EEqXP1 zcVE-S%`aqu;gP%)*|<=x0EjyID7cs_iz0n0jx93Md_P62`-IN$Zo$5fhV1tsSlbHh zCvIX+AK=n7B7v_17yyuQG|l`Hllt|pD*_Gj9qWE?I#paV-Bj4{#GQi4KZ2##0;}iD z!vm_84uDZ6%LqP@&SvH`;v0Gpl`AL;-XJrX4d5_NW-m1>EGrjU{o#H}sGS5XgF}I3 zw;oC?M)}e!eg%fm{Xp0l0S+zqAQR$T%dtBDL#iRt95T;!dQ3_y4kCGPurZnP|K|qK z%<&Qq%I?nmE2*2H#OaU=t_ejs>ka`JHLri?>lNBXoa;i3s{y1o3%+@f8F=;YAQY!B zWL^M30{n`)Ahj52rk~(yX9f?Dx(*P^zgYQncaLVEHKrp&>c!Cn(mqu@!1784ATUF0 z+gvF(!dg~~yOrRwD=@V?aAm3=fUIL%Msi<2iS*f|mJ?gY2(|U7!DVCCAIX6T>Oo9H zlE*Tk%movLYjdf1F*;urm@t!bLMvDnAISe9jXE3rcleK<{*{o&k%YEnVln=bu?{X$ zz8?*Ple}D+1$3210<16_rU_z6=F2rfl~~UlbyH7OoUqcP8`x@h!c7q?GI+GCN#_> zh#zc74o(44XZZ-|(s)>!^k$dIz*NUYfX3{Z|5Bx%#5(%_NTYfXlr%$d;0rWEQL33i zZS8oZ4&yzeMV5Um4!dlm`K5OJWgZthhH9;sFya(t>POV+T-;YK|qIcEE9uC{L;jL`_KI z_kIU!idv#XN>l=pQb?0h%|74n5d6y1Ei}m$-<-WMOA_2QB(c|$;XZ^P`4at*G#b2% zn^Q1=KXVWS&cig8gDCXZk>LaV8|*(ol}0-5LLiNbk&%CvpMl`Rlr+ZL15#KFj9EIQ zHXj8qit)0HZG2ixa5IXud{pp1whG%%Iz}x>jHA~92iP*$AyEGZ-`G8MY6@6IT4x(f zWkot_t=oY0x{0KrA~JIW6Y$RK?wn$69c;;5iftf4MdKTPK54*FCGM*W*en}YWSU8G zRjHjd$_4;7jHNLjXcWclkKjxs*uQ@G-IRIK;cp`o!XrF}W|jEpeJ`+1`eKL~y^rUx z2Jl)o0E*HW9M}u1vOJ5Ug6WfLvWRr`Ko>2`vMnucT}<>HkL^IMhbn%V1#5G`iGlw{ zdP8`WZs0<)+p`cchjvG&*@vK3;77q3OU1xl;?Ite4r?9wS)Ye$^VcGUo6me5w#2RW%(v*im~x$nl{72V}~QdQ#Kr z@GH$;EfB3<1(G~^5a8YhkW6%mJLznYQUQ|Jj|l&I??*c~JF~NfnGcmOEDXexyrXNQ z<^O>BvW-B%Q%$*y+{4D}w38f{fmr?pv1qPo7T}Y>U{zU2k82g()C)lmxU}c7P+kCo zSJ*Hgqf6{%qkn(62K-&M^r6E@_6%(?X|y!Row2xepmobO(8h6}M@t7z@LHf2Cte0b zQ}s#M>%m+g>nyYdqwl8hd-3SHV%^RU3y~3Xqo4#hcZH=e_rkkSi0A?u;XF)kGcq!j zB#vY__E5c$#-2dn)VU0aB>MyK>fdH-s50w84;qgF=yYm>y{nP3fUqndSS~yl)qxHu zcGOy4?`*yZNt6V_bk35S`+I9!?T1uFb{-@F=NBS*gW>Q2*$9+2hP!_!Z#bBJXs$@vKQHC_8IJS zHw;iX2S6%mCW!`Y0c6KVH@G5gZ)@pRt&*&;5;r&iWP$omM@2Dv@G2?3xS7tV)WZU1}Q9qV?(O@SDy0Qm6KM!u7ttqo67n6Nou=e$aJa{5)et6MW#w2@?~hoK(n-IlD94T0dlt(d$n@|g7ba#VGjAx*jg zxVnAqwbVLrHZ0#s+kjtpsstAiW9?36umI7$_z=mh65~;%;&~>nE*SL;FNvQKqvrvr zu{Z*VtV7_xkWe(Z5x!0u{w`V_0H&nz2$)ugo(mDgHmJ}1nJ~jrg?As}hBV@#lE6*h z6L2#7OwVEbnCk#T3A9VvzA^*6Up-X)Os)Y|q5(Qiy2_?NgP3K{=RP1bCuUa|i_Gii8)Cs5Y5BO$-~9r8u#()C#Tx zn%FUmn}8@wNswR-0@xI!C#=lU2r-z zsCQIfg%xrVPx*nx99Nn&y)evKgbX%=na6F0ovA|XWCRW{nM7vwbJV-|=juuq@IL3h zWsrvMM2@%((Upmlg(=2~R{{?7C_wva z>_44Vii2X)dQhjG63Afs7xK^p2Pe7LosaIvCa^8fMRIo-9sHYTFis7$yZCQ2^d@eF zqfqvGL9z?7A`7Ul|A0>=PDqwjS|Lu7|&)lF`0i!AhL+@{O~5%5XeyDTKrq>Xpa2T1VC2~&q`l(7k9y)~7#W>YIncotDIVpje zq=4GBgy8#o1!TPsBMW&X2ZW!62nATMKkJ;Sa3Qi!KRlOzROf=2@7|n4e=Mj3zMpEj zt2l4~0to<8(iN$~9UrWiLwuKC1jgAx9=M{0TGv>M%9{kzH%xElr#leQ*bVTwI<1f^ zMXPv)$ak%_?;KtL#Z#?~&tvzkBv>yB{t!t2d(ChCwxDM#6MUopsPo9`s5z3glDPik zcxg6UZ($6ef1SMlJ3(w|yS{R1{|On=Mp#t^>y;#{-6d`D$rGxA*4KMVYE8APciAf6 znVH~q9@_Frf~_~%&aJ9E({!of@^275)Q*t#dB`KOUuih5SX(vxgRI?`WGmMqdD;UB zG%{nmMGo&oRd+9Snkvc&{atwVUss>5ySxF2DHoSJ&l6D6(5J{e<_%q6Is>u%g%Tv=kjCXrT%@e)!6qP0sSW@Ot+$mxwC#HB zUVQJl3VlnROe??)={>U!Xk0$E#u*BpXgTBx8kGxTt;%)LC<~Gr1r-qB$NiUkU#GZ| z@OoQ0v_UP>>ie3^!E=G{SqbeCGxvbMv6^DVLE@b;_k$6g(*jwE8!2-IAW3N`59S>| z#H6yGrNv(1Qmr92!F^^y!Pxxpk=lLbIUMw`8=8wQf#K%e>7oA*a`$f(&{8-_x0euN zTA_$K3Lfv?(DTFgOe&Zg!?#=yRr5gU>h}Ys4>5f%2&IP}UMAp92jOO&RRO?r4o>rO+}@sN63e`sGP5Mj8L-c_ z0@QwDd^iDTGgiFe>7>RwtgyP&Mq5e7>;C-|OkvSX6A5W`7)KUa$yZ1zoCV+Lp$3bV zL#cY1sUpxzb4@#52ztsE^OYvWZa`2=p7_}f-E8M;5s>&3GQ!_V|APtfh+@OxOeIZC z?}f&d%cjCVGvx`I9BVzx2(oeTdiC(@Qw#UTM=Kw0?%W{*j^DJs4M6sQ*XnJhB`F*g5ITgW@Za(0k>(!sKmp#mCZP9pG$BV zZDZw%o~i=n)6q~pD{{Ip+W~{9#-Ah^=PG(mmAow!TA9VK9GQ3zoHqcHiD$=oX1b_) z9)QvP;DW)HPBr5@d8zZDj!;qrE&+785kRW7amB}uDf7JdVK_O4ESSa}CCcXS|B8&1 zYZ@MUgw+*FeGJ3z9xYBaYL*z#MNrdKg~~V=jXmiuGIm*r2s>R{mkXt_&`jt3sbet$ zzFdyDeC^n6##zeSvEt0YH?t3bXM-pjB#8{fk=?x#AwFU^`7TQO+rfoX(@O-I>$7H9 zMu~GZ`h(!kl8-tT7>9`U-OoKQV{I#PvtwTD-{v|Co)3HH@eKq)N(TWY0fn~95gIRPmDsm~;qBZ?-K=*X+q>s+h%`HpOW4{gm|45YQgObn#qVt!gP#*02G4n{)m;=4Y>h z_j9Mp@Bu*VaPL_FuyMb9vi*ZE^luAA8Je};ANG%uCTJX%JW_9n13g(##|FA`w=?qe>GJq-3 z$eMWO2|XU4jTFK6L~{M7<~d!32rM+RON2;`5B=0bVse9t%dNmCxm+Y`#w_E?-}dK< z{ZYLa>^9}zJ<-oASkJp(Xg%m&W}-#}+|P!9CF%|NcJktg=HOeN+PBMBmW>&niX2Z9g=I zh@(1l$NbP zu<}TVQ4QR4-v0jE!rF8ywjl+U+pTe4Br)Cx$K{@Y)p z^A3lW{0rzf5l(Rs*rL6V!yhacs@LGYq;q%kHyQ@2kn2T$e=h>_{*?FIit<#$Mv7VS zm9Lmpn)|1J6VS^++MGja!fk38y|m|RRuX>N0@h}TTfIlfFJs}$uGR?e*^U~((mEwa zhE^J@%{w2UFbi}n`tu}^G%8DpAC^a%_|F|I@}?;ppu;mxJhBKHIbGL(*0ozCHZYhN zN%?S=o}OT0;d_C}Sd12^(#Fw!C`H5vcLvEzvAirw0U80jUqwAJ)5x@1Dm1B}Mgav&`2+5*OR=gpRp30DeiZ{3u8*X?^b$Av6Wir72}I!wZhv0AjB|q6uB4K1Ng7E5X73!Zr?UjV$b0n$Saa*aIQQ{9CdWA(BcS>F#JLEh#Ps9172K#3H`{qh6 zIFpyw&}6-HkstpXQ+7-S+&*|0RRib}_$UcT>2ZodIN!~dEkFIxPRi#H#S80sEXC@9 zM%x;+3Q&~Tf#LxgH|OC*{sHr#K;>s-V;?jJm&<)1;mRuXsNV<%zKL zCEE+3%gqZ~vvOr2@VPuSh)frM7w1Jb10wJI~6cQ5Tj z`~g5%+C@V2={1m)k5;Z2qx2ltGUplaX)B)uYIarXA!v_<0tMtIlE8yl?3?+4r7!D+ zz85!hdgf7Vzc$2T=zl^TMG!8*k3Lxj9HwOqs62Fd)H0ySy4D|HZLb@@NY_WuR=il@^bb3^dpoGn(d4)>79h~m3*eP>*;YKH0 zsbq1B4MWkh%ZQQ<|BKljv75(f_qg6ujNq`DmU^r#dY8kE=2zhX~F%G=+AuM!7*cpYH+ zZzp(oReK`9yf3;Wk0A{pQemw(1>3MnmI8G@3IEaUB}%;sd!_-dh7Wypb0gg%uyFrZ zIO2K_Fdl@B6@F19AX=!z`9k+!+TCF<%;bXo$*pu%k#LV3F4ZD)<5_@~@Y?~1-ARqh zJ1pO`rcjw9G&uk23XQ!Pf$?3tpfX%!cGa-s?5^J2lYEuupdxuQfdP5SHE+Y75E|s= zYY(3e?=*)x-ENWxx$z@+#c8NRM1FDw-f`)`@v=tBuC|x2YZ>wAB}rqn0?WGzWXRFZ z`D=74sp=9qv#J5wQrTpMKLQQ_Njr0v&Uf7zK$d^9t)+A{07&AJgm?4s6jeMEvZQNJ z!*nk)8mDb$Bji15mb|WfD6ka`J+O2**4@6`(o!K+Ii<~Tl+rs zAKlJ}yiv>6^4aq#8D(MT-uCc^Timj|5+7y|4#!>+7ZHPnXe6H!VG5n_2TdbIKif%9 zo6lcey~3pqEzh1Eig?aJ`3^;{V~nb2oTT9Ma)|nn@V_+j1XNDuGSqtK_id?8A5yO^ zYli=aVdQj(vE}LqA5SKFHotlGfk=A78%?klpvhgT!M!84amrHcTeVpQnyzQ;;ZAdZCP*W>@6FssP#r18WZ<_)rZD| z2HDCbZM8k=h2IS~guI>zI=iJI;=mZqvvM1Uy5O<2ul?loc=oKQh9m{6)_jFGJ=~@* z`E>b*-C6R(>LS&Wm_wZ#l122v z@1Fc61{)cs`0VLUwkm)M8Vy4P2-SeA+&^DTuElwpB9O`EYRkB9G?y~wLyZ^?do*a&n^ z6~nBr%z6$*R8zZFBv{QeJGgQoMNlw((vDe&e!$FYJowRdXk@2p1RB;g+N!+cy%gny zx=Bt0MTV&BY%E5+s{VKl>efw)J-IIAUM*m+dLTx}^0m-;!!%sB>S5JsrR0jpAm`~l~#Lmmb#A?lIfKQ%Ndn2G$~C88mR zYT3f+w)`KLn(Hag+{$#NoW3!(1&*b>86f)GQ?>D1qpZ>Wz85R029KdPeHq9v`V}tIAexu4N$O^iu%VAyEYu=8Hxvu;(~ny}&zL{6 z>X>50T=~II7=9U#9j!ex`H8#e2j0&(`=G!Wcv1{|w{zpXtDHP`Yi;uqr*G_+N@70k zwCTD;WG!Hv2^#wSbwE4KV0&g_KW3v|eYT!5OvE0@sj}brYTL#Bg8}R_md&SCus6G5 zB4--8();?RYYFOK6#8GxBV= zA!zN__tC|OW_(H0bNO)){Vfo^bV7;f4YSZrPYL#WhshUb==tGTVyduwFvlpr7#+A| zEiG;43rX6>v4ix`(_$994?lRb!=K+W`c#rDKp!stwv&FxRJ}ISAe7r0G{o+>4c~hq zKcf7JjbL>9`zdr4LbtYS9+PrHduz3DH%XKTe3aC z+xW9@sh*TY{S^u{$Xoffvx2-mcJELe6bgBZd_}}5Z+4DJSDzJ!md15{BHLX4-t=Jl z`;zVF;X7lS?75FWtjk#OsdB_yzmrYv(230aWx7?ET+Ahv!}G$K*Yw*tOHe zZ|7~vZZWFLOyMxfPmG~DvBBm{Lh7y3DSpe4uGTz_B*)-W!vaxBHMo1T{4?~A3ztYQ zXv!8}_j612@jBe9Iponm6Jp}l-f~EInooP4CNC0m1xi52_hZ=2Cj%VJ`9t%PRgO!y zY&=%6WEC+^jZ*)+j!}$8uIeJ(xK(_#EX%hGjYS^UXv=9C&WpIP+C*r9pw^5#wzm!o{H;K98L2Bb%>HRSoH!yphG+gUFYR7{)-`B- zeyIl4JJ_kun~z6z=Uo*Otv^HOMUOe27kNIBG|7}f4tHe{E~wnIMdw4;%xHs~Z_#f4 zqx1CouUb{zzFET3VAH7(2daK_G~raR zMO8VzA!UJG@pumWswEiwpUAcU`D%k2{z!H>zt5AW*+A)-Z3(Eu{e9)oSO()#lfb{g zL|)`ej(pOfwV(mjLtHz01+>v=ut1mn!}$(dx}-_JWnSqx*CJpSAJ3B4!pej#Q(jVn zp$uyQ&c3`Sz|>YSdP*J@t&~HRnr}j}neXkXB?UZm%{Kz4Yc7GlDGPlm?i=zLoD4nb z1;g#}*f^|D?XdWib*y+?lzP5w1La}mUz;So zS4hdT9HgZWh5Oi7^2>#Zz_@iDY&eDo1%94lMT=~cn{5@C(QgHqKV6cn9yqqvfmQ&& z(>O*7;(8(mHdEpWaC&@X&&RuRx748#znqCY(d$AU9tE!VwHbf3p$T6Z>hC7L-8@;cJmIO1%?f5URaHsEqQJx8sjLk~PXH_wB;h5i03CT0wl&2k_J? zIkVRj$FJm%vtG+yu57(--hDFbn1I3Kf#Ybq5=}7~TS)#I!cXKu*`-ZwC1C^cSWt)0 zZYMPl_%RAg`O{^5w6fCQ3+-O_JQVA0Z7jy?s2J%}cJ;+$V-eM)PtjI)|EuBAquhs z11k+VthZDw5w7wN85k~=d-|NJ02XrUP^!#2Pt14{Lau7y@DSw(B;bgND8*Ja0&itR(j-fMMBdcWkQa}y3tavuc^{q>FA zA$z&#(G0_!iI?bIN8OR!dQR3I1(nviVzf#Ajm;zNd0UDdIfA)3gF-S1EDq43#aWQ6 zWxeZtF;Ulk%vqUYvJSF!e=GfQ)WdXdR`Is(_mYhNb8S=sHu&!7EFOX_8vK9S`|^LN z-tg};C~HFrDQhVzqK}FaGm#bvZAi9O6+&cZrUiW{N{f^=p|V!?Z6=b+G9r6SmMk%b z?6aNcI_mShzTY37|KREMDmmvq_j0Z8>$DG(SIX zDU|CvZ~%HGF`im+^)1BR*n6CZ2q2lYPTu!KPxm9@Z5i>HFw}xIS*6sWORd;17D8jn zim2u!Vy?G!R#BW2(F&EDsg-TI)aB(aY_z36z4GyCc<2y#1+ga=RH?(~+Bs*9dXHS{ z&6x+GXP|xZS*|6%beLpYv^Tu! z)FtNlV7dR?qfj(wO^kyx_(~ZBY1CtowB8lHX<6spl@x}AlaTNO@G8O7Uw~{^_^r|& zaNdwNxn*QG!vS2?WuSUem1*fbsn%zWrz?tQk5=rF7tEa!C*B9;O41l#gz06Y1*~w$ zt=VKs?@^x>TrXh3;kWRDv4!@_przs=?tSh;9uNGJpJ%&-T#~I*6kPQxWKbqaEOFF+ z%Mq~J-73)6Z}4Fuf~$KOgv>C(^hhvmC)*z-OK4<-e8d?Z+=cTm-e$$cHM&B#n_M@D zZFk~ncG`=x(@s^RCT8sP(xvC+9JBfw&{zGiu#!Vi4}1Pv0hdl#nCPQiHg@Xy;;l!_ zdHl|R%T9RX0dSYt1}k{^V(c}AQ2ukck5uAle4$1CnjZ1UwErNQ=K-uN2mU8recOjd zQQDq3vvV%7HREm`Q?46xEANpoA}62m=JPsaiJ6>N6RV)TJ|MTGqkub#F!Su&LRXS` zbpC|1&soz3Ia$Hm%G3i5%0$gBo?Zl+tPmuJygrQ0vMzCfZVfdg=VrW=i>4>O#{qmX@-#J14R+hUSk>HJC-8HK1P|8UFJ0q3{ zeyOjg*L^b5rd_YQ(_{OTgMnxWQeGxc1POf0Oy zu_m+b$IoJ~6a<6lYu$SaLB~Gd{#pO28dZFu$lhvFaech7R?vVcxe<^1A~CKDO?LzF zSLwpco9FOhgwm}1?Ymotj`fdZh3vu^?pLK=#$Ll|#2Tr241wsrVUPg(UB8wo;aKdz z3=TRa=a9H8J(310{^=3CG;{raK9|A}%-4Ek=^eG|irrNDyrQY-UH<8QZ}OvXZS>?M zDtT#A9PtCQs3mcs(-mcwrRFawd(%Vdw)=g|*)3JkwwHl$Sv|v0T?^(@2gsP()-juC zS{RP*%hJ`OPTSYv@Us)39k=yRCzm+9=58|(qphGLYTI4Wy?}eg8E)vg$U^>eR$Kr= zYAdilq%b4vG4Pt=`-7fWNqPI$kYF%H6S&Qq$+|CvQamb;xBrs~CBeGDg@;GWelaB( zivrZei}0FQvtT{!O>XcY+Y9am*OQ|FI3>v!Yiah5L3+Nt=h`8SvG^;1=S$2c&A-X= z)zz&Ld?`M&Mc~geEcSxBn5+kB@GyrLGY)+*Bv)yR6C{-sR<$$SV*5wm^-kZ__J+BF zl}A#)cFZc?l^Uz?3BQyqp%hH>8tvLJ&Pm*r4WrIuqZ+F7Q2*y&)giUx!r*M??R@M~ zND3Cx+Wigkg=18T3`n3F4!R1Fi9l)0S7C&OJ^CumS$%|~9BsNGT@plUO-Z9LL?ET` z!p&R2ITjZ?8ZZ88Z#3=j%Uof zeH-I==KTyNoKvQr+pkL0h~&@I60mk~uIJP&y7BXCK@;!&)kFxvylfbA@6Yrjwfd4t zo`Yc8h#eT);ufLE8h97;KK595?zdRv>zOu_O|S|*Y!yu)08)@`|Lir&PSO@QfG;3j z{nw1#j$Ms{@XrFXup;X=Lvh=wa=#V_bzXnq>>0hc$Bl9-6EhnLx{reI_{AgfbWe!i zXZJze{xA`w)zI1nCgI>(KF+beD5o?kaC^r$28Uk@lYxP8_m?5G!`mv20a)-eGI(b$Vuwkn9%b?DCaKO_-ws=khJ*e{SVlqhVWs31ZM z`fz;yu4EcSm12!9olD#MCPo9d*oN`+h#w^qL&ehiLbxJ7O_{|mN*HXf! zzM=Jmx!g0nlUw|2Jr;$cupygF5A1g(|F3E<@e_G0ZGY?75Tu?u)ccA8_3T+l=cm zfm<>9y5_D~Sd8oC6XAwP$)#8EXzaf7lM^%@+nkWz$@{t7Nd4X!tDaRK_a#UruwT?0 z!lVIN5tXYw$nSO>){}HZR-SJo1y2%Mw(#ZvjdeEOs3vXG?qZ2%5`r^3geQKB+sPR4 zo;FubC6sl*QD&)_uH-5>$t8UYKRWLuy@~e>kn9)-j_%mNOJE&XH+BdgBAQdSv5Z~! zpz4rW#|8m7`~_1<8!=o%=Qn>10mtpqT?=js^E%&!^3PHt(pCxG!M9bJrbv$$jb5Kf z%eaESJDtCo52q%ItuZD9`G^b8xme2kdd3yaXH^|S7fN{%TvoeBN^drMF3c);xWv6a zgyvzagrs6VbtQza2ZSt4jW_dTx)t{u76O9j&T%B2-CT zM^+|)N;J7|Kx*^PO;Ths}Jnj(@rXH3Wt!&!xFv z`}EKeor8=|73k#%UbVsCMCi48XtFSIt+#3F|1wDgW75WJk^F(dR{Ex9L*>setGP}R zI1{nx703_fze(2eKzS1-wO1}C2s_FlHA=sb~;VH862KHRUwG(oJx&fmu7sa+$ z%6KmeiR}msr@Y-*SCmhKx9(DghvCUEhVGgJH{&N9g*1nm>#9p2H!W82NsWC+1ij?}v;y^*B~K(yQ* z5ayj21kpNUH}m0*r7BUV3Uu&W)dilO5AR(D@67WfwS`TQ%0zv;D%RZ;NY?d9U5}x# zwkd~GzUK7EpfVv$354@Yn7e0 zYv=xWKk>BIO^j(UH82r)1(AG!2p!T|Aki zn~6eNI(RtVX}pO2ej?I5Nbk+U_N^lf?vk$q)s{#09+W!Xd+JKtlL6q%8^BO(pV5tj?gBFJ62Pi-(!t{5nYm zQ>2S%Z>utCv+h`qP(N}6p1z35n6VXUGdK2FrD)>Y6RNO#1b-cWoR0^U{&M~e(0G!* zX`uGxR;PYs&By&uAzNkZeG_zt1%`^a{zJ*H&!g#883i8|w=bOyr|#*PVFGbq&zs{z zI{aPO%$E-jwJ(vVR&sRdKj10%!^gngb>1OIUw=3A^Rq*%oe_(rAQ+o|zDdc_#(n&C zcOv!Q_p1a~J$z1SzM+RQ`bgdvudmq2R#8tW(mX0;k<(%rRHT3(gCN_#rM{PXDDhV~ z5%GsyCNcFx`1L^qvAtQH?6@tr0$K&bpF;vx}ODU zq_UCM&+L{95ov%MUcOkx7ngr&mubVpIY;Uq2&cnQ8-Hc2|Z%1TXgxZKMab*n-ulPiaG##T8Qi#b~Ey&vOzgAe@h!%hYjE;|BT;F_BEYmzLC-@{wJdEKpChS%`m}s<)`vz?Bur#p$5!hm5dBIf!c4$gC zD!(5}JwFzpy{xYkAMb*7V%8s3Q(yEWlb&yR^KWu7wOWD!_ci|EUM{`5=5DCoxWAIEd&jcg-&Tniz>=N- zn?T*oT`l+$OnlzC$wcYycc<0F@<~2ZGee zQLBPo@82hn4V|L27C$$B-M=K99c$d`@Pc1pG`|(wo0up&L>Yn8KP~q{H#HOUUt`@H z9z(wWCeG@@8}J3mBkO>9E8FAOAxDNrQ^8Gn9lUNx9@M4IgBn5(cpeuI>v#Z9M=H0T zsPDoRBg{H~ITDe_DnQ)x;0B$pgvTQ@6Zvez0~@C7j~G0D z=BZvVMX<||-*{Xv;@5gZa%+tpZyBzhP*_)m3+r?S_oCPonIu@Ox|}N z(ih)O6R<{KJAo&0JO~EE`nqal{w`eFg|JF1W=6weVdusE$ulRbwxh@hX|3+LA;UyrYkHTk9v*iP9mkUvEfU@M8yvb$7 z-e1>`kP0()Sm@x?=W?z>ArXXfT>7(Wbm01{byi#rD|j()Md@gUyr6DtGC5P_;R6tMZVWXJq)un#>cI+>nB!XZ$18r2Z-0t%4 zbtuhIm@UW=k{ftFdK!+b>!Uzi8i8Kn{VdgWri_i^^nz=Sh!`|T@Zb7+ZD!i}7-pY& zU)EH$-v+-1F(uKePF}3&{A+MmRvRv-jtE%S2YXs_+L|cmxch6}*orn+oP&lM(5-`; zEVc3XxSyp^M!<1S&b2nun>n4g9(kaEzr}6W81PD*0J3g^r~t8x4#5)QA1&4eUh>hG zi`#TThH6t=?=nd7uFX2lV$=1&V)HGmQdQ2rEa%7@U0`~K^dmJT3ho=Yy6+f@cn#UL znRbN{s2SuyF;uOmCHvPa-Q`D)1AIbC)TAxVFZ%F_wHeMgeQ>Vo zME2)%J)3RV+2|2hRL{H4Zl>)dhsMaP`Mt1e$%U;SaiNhbxg9mbH|@t+nzL_!Ck=K1 zRm`9X#VS>YITtGdzT@|xL;nGfl;++zjnmnZN>LI?&(2@4=r!Bg2HhypkZhzryn_=0*WV#;DSkmbB z{H2p5jx`3q{)Y=Bhhws)2;m|}(M>9+TnOi%U%0z)3a#pj+QjQ`K#!Kr#%s@QmKD^s zl%cw?FIOio=q&TTBk&<=jVQOMnSiRG!EHsx?K2JsY}+7iIPGv%EpDoJv~oRIetWMb zOP~usCVWA^B}Xq*?mU$iRU+@0wZtmtOKnOgkL3G;LDnJp!(QzNvvGjfO{ z6`*HQ)FAkk4<6)(W}coC5EuW+YQDpdh-raUn(nY^5E!0G_}Me){GJa-!%IdLHN0;2d9hv3_FsHbL?VH=2}PVZ-#6eys0fA>@RnDN9VsSXe&%s$ zF;YCRCP$TtdBeKYGRip(UP7`rRf0}p4P97m;ACV zZ`|p^bo(~QNA8HupBF#Vn|SG?#iTd6{ra0=yP~OtutBH<0TBehzaB6?`343)=Ck%6 zPOm2Eg9#j70K1;f^{HwsGx6FW&0+9!Y|`i2B5mn1;oW_TQpLlx%=~%gw)l#7zFLmA z`ypBF$jwL?2`7@H0gw@|@4gh2A?bM8TP<*=!p7W?d=`o>yyqy*-*=O~|5VIQC*bR) z(YIs2C25z0lI@+t5Xpm6;nYL4088KT2Rpzln_#wX31m!sH&8oH_3uHddYRrWm0mJF z-Z7Wiq;_Wf(<`C4j;^1dvIXvF@U$6ryv%Y+=JvB+ebCb4Df*=n?v6ErPm0_ee7hkD zG#59MhXrwuW=DlB&I3!-o~R4xI!_(HDArOX2M%$R4Y zvz&}ZXG}}G32gSm!(StKFRen*Ku-vN_CfUX7jWC?Ng_#s;5aRa5Z+-pN5oE65UPc8 znC;8cEOn;{gq647RuXu&qpn#C9v4h3cE9^)s|#!yG(t`Ui*N0h7x7xsA-qjGhjn8C z{&%+3+9D?yd`%sCw3^iVo6hl+&qCuvNK-`0zKn7b&z2M$K`Q0d@Y?ULV&&xs-Ercx zy*mCXTS!1{IcV$3c8&*`MnC1?A(Z<)7FFBKi(*a5>v28yyqj64IxlY6Z53Kc`0{R^ zX=^kl@I+SrN+=>@$Ia5(K6BiO55Y=b5RohS{Rp^!&8gQEmvo9}Hi5lhJ?%WH8j7r| z%GWyKAXC6BB4EK&Rr`S|2FQ{U$kK`@1pLI$e>9!INP>tfSu6Dwn z46m{5t!98;y9V!k$BgEoNyYkZyjG`>&)9cuz=Duc2|oxAuWy#+^GXobLi5muKGOI$ zw5XO~>nzRHW-Rc`ZrX5~^}s^43!eq1DT+Cf2B2C#C!hf0Es+D*(4KwsVOEq+eu8p#nU<#C(E`1XZWT@MPYT2L%EC>zR5hk#EF zgMJU&&+bpJI(h1XkqteJ)}y^rp)=U|B8N@71)jLq!ez!>^zE1csy6;DG~evQZsghqfXEBzGNBq&mA#^{O3z)~t!mP9bvExCgeQxmG^-6M0Q zm_%BY5G!nC)bhII%iB@KWlasJ;c8HcLjFYumpY`s8H?$mj{)qf1pI5qb3X>OSDiE$ zCCyWK8^@j;s2ncw@2UN@)0niix(io%V4dlA3ZZNUB05+`pWZ!Hek6e?DS~FN(o(%*EfYLG6t$~lb+AO%?%K-$zE)p zOzGt~@H(`1*@{~^kh-Y1kZ|5rh+VW(s+14nL)vVE&-%{As;&`4K3#_=mcmXv)ZT47 zpp5)nnIjbUI!6@bO0vhRr9S!V%MclZ^BEH0f3XEo6{bGTq>AIP#M2u#DQ|w^C8X(l z`}bAFm(GS_snJ1QGRPAP5{d}_mQWWCsnl z&>B@?#V@f79%07a!E|L#1_)bC5UMKF?LBs12~O~QyAXNw=oRdOz3?r4|;`rLs*Vz zOu}5|#CKI!X+C87HZ(Yl>)W!zp4;8 z00}>0b+v@j8o{F9&UEnr{NZaqxsUzY2vAW%&}J|n6-zj}*gbi2;3S#CtO3wYL# z#DE)ctOqVrugTfI3#2O0FklYsy5<9XSCGvVYxab|kxMG^cE< zoX#M0{S)vWQUg+8wR^~;zU@2|zp{o>p26P0E7w)RrHZ>(H3XtMl{F4?V-sbnZZLIs zF_^mJ$sO{9PBC2T_RGCroZU7C3MI|c_7lQUwKakVqK$g9th(j!Wz(;E*QdKk@*(Pb zU=;OJVps&)`zrS6H9jq0z&eXz_TMbupKgucnvq{#R3_V@oN4DFl5!Q6TY?>dRyJk1 z!K9#*E--UBHhy*ZHhj`B%{;-Fl-}8B@$xP{EQl>01}6jr`O;3BYXga)7zoMT1lgU3 zK0?I&YNfT{LdyT(EYQ}w(>0obUofa8j|s=?pHh77Gc<=I-l(>RzR{&O^mbiXpZ!Ae zXeHR98jvtStiKJ=Uyk_Fwc z`3R@|*Bgd+wu0cY{o9_dLCCxpJl`M7w1CpHHYUA)`W?|;t?(DZUxTG#9CdMq_#C1>e zYa0-YjaZ{};P*}^&d{RG4rZ`V&t3mq7PB|(?HJ3c_3d|cfhY3vS0ee(En@Q5hA_El z+a36O*Z9UdGbEFQz8vTHIKP_YZfk9+@+xl?!(rq*4T$!V9P&~Co2d+>KI4)566D?0 z5=oYNSG9gDCK1O?kt9BhDs&-Sc(SP;dL-wu9@wZL_ETjl+kW!SqOR8q!s+!`FIFdo zB%nN?kY5PLGWtrHsJR%5fJqnRujoHU$KTzjQ8uyh)HObYA44P4-8-E4EF`e3VLxmR z^z$aZ!0ujl@x;!LIP!HBXu;ajdSVxjm2O&!`fbTCIIW`cIoW*>li=B>&EN5em>djx z@7b6)Y_P!|(I!^J^PPCDU2@UW?1|?Y6sfc{h(s6B0+otse(^6cTy_Poz`ZSjyEEtZ z>n{xgFQcMB_w7kP@1AxUIN4il-l;BtEWH7ZKiPrQPR7-2cM!$3X1kQ4#x_?99z$r3 zZFM!xk=6zNsvHu6nJPhJk<;K+p|aR6MS2UnQ@nC~z|rQ@VEOCcYNx&`O8I?$BkAZ} zq>v_lIHb`2n&77IG-(x<5XL>O87H}&bIy!{l=U>@5$bzL_X@XU zkRj#avLwj`<6W;8a!R|Cbo=(4WsjJe(xuYjMPv5f>%n*9V}fVc^=(7w zZyKaYv8_#PD|7?#VF(ho!Krd=+O%Qwsg#fvNXdnZMGC)Wk`tETwhDY|5b&)RRZ!$L zr|byz$K8}j>ckd40^|wgbe^ij(nn+8yc#lW)`yUoEul|w#2j!Vo12(5g5sv3g*?^+ znBmGuY=)`2&ai0#!J!u?^gcKelapLR9+f6#EBjcsX1T(5AGNVEH-~px%zQS!A+*0H zG=S%USYl*)XbAiJ`J&DAqOJL1}F znitMG-I^pN-G+%mkwG{q=_U3*!~zGT0~mp69c-hJv47$4zQrF>O4tvw2qy9H{Uz}D zKxIsc|NmqEpCtb;De+ng-!9XRYcm8XA@_`kA+xD8VLuH_YKBWbkA(o>gwVs5{Z=L( zM_l2B{YE7=ElS@_=l9FWU!+#LR+&_Jm z{;xiB^}<51yXD$eqcEV}|GGJm@?R&mSp*s6PE?fQf#`EyOf`}!YUxJ`be-|{B+ZmjU{5Tc#mxSUO3^+TMw>=1-N;^P{!JhT%I(M;U zcE2B-Eoxw35U=vtrzysqS@Rlhk+WIenT#QHz)&9fTK{Kp=e?#33B}fk`&pK4V`)A% zr2f_ZKbMTeW&VTqRrBpU1PN~f$dDe?M|$!1(Gm(CeoqRM&iW~{4Eb17Q>c3I>M7RmbpN+1*o|jb zBJw$BC`HGC7>}m?PWZI_A%@jsR`uB>2uTs6HSC&`DBm=~K&V)lt_$iq0{du`B)q zZc#I9B4sgIpeLw&K0H#J?sFbPBt)I=mCkc#xoJPWkiCf*JO@kv+kKqbmz0qHKB-vCc|{u1_yKd&IdewFK$!?{7XBZF|2Wu-Sx%k*D!QqKWe~|K3|%ZJ}H(?4Z5bKgO8>eKFrt%LNFBZ@YM1&J%gSO2k+Xx8uqrS396 z*|(9}Fx^q`g&+=%Gi@`gbL{ICZBHN);;Rott2C_Pj9lhn-+Rp66q7xTJ)(y^k4mGR zYIfqT?!hD^cQ@N8L)zid2|;YGug= z;0u#B0bzNwyhfXznx}l^*+*p3qY6$|ei`;5Q%4V=Rk8KWoS#9N`TR<(2qn0PknR1M zHuU#T7l}Lim$=SB4seTF6}Ypt$2mx~dl~ZEMCD31&P_J_sa%p9OrXiw|J$-;hOUt;nxM=d_jjqu=C4W zCLH*PyjID|>Te;rjSjNME+Z0571QW}@adl&-GLOiYq9>)B*{4QP3eL`X*W)S>%rof zu`-$O*-K#sdkP78mq)XI`D2p`_K8+u9(J(*#+X|M4@yn+SfBD?$Im|JSMoP!#XT_S z@}Gud*bqkvhFI3ql2QK^f6d!K<@8UqJ7NxF82_(I>tl0$@^i2GVRIt!VD!M~NUgU2 z%vQMPNDkC*Z7TO4(icTK8_W|)hZB1hNSFwzz5CqwIyoRM9Y zw9+63J+OQn=$K$Yi8mm$ghefZJLf%5U2K6})+r<@Na=^)NUi1^3;TE_Q8>OW<0iUm zCIy>-155y;1$W*Tp0QYA_2Fr;qT)+U9Pw0{^n~BYyR0ZhNRcApmz^%QdrhgkJ>4&VPgy)a|VKU93XOb>zb%^(<0tO3(!N3HU$ ztrdQnYv&N9%ZY;SCam8+Q})=mM!mka_%(2SHtj_ky|1u#?+gkyU}D~mD8o5)v85!$ z;t8VEbNz|R=R-{~r~@nR-kd+y-!g>*i7_8+beJLML?n^DBdUY5DhKVKR&ct0SP-GX zmyHUnxhCuW!SZ`%AtK20Y02qFDhGKv(?47MaxivU_KKfzeKxmtaI-BUk(&6@Ia=jk zCtTS^CgwA!BDT@3d5U!b%SAVy!*1v5s2+T)Q6vlZ$XDlWS!D)HWA(IL9I>mm*~ys| zcYhA^jE=%OskB;f1nE=upU#NLBOlCd*%!!eOWXLt)>@cOmQWnFH2sT;ZuG)BrGjxU zQws76VsVc5i~_^R_`+10=o!Y-Im5`*2^{fZ@LHx>^gzf+ZB81kpls27yow*0s-wo?jP=q8PHeYMke?lE_a^2H%);W5kO>Pro)Itz7csSRkJ?`YF6RTZ>ZcJ zdh}{O%0vny+q@n`{i7qEhKmzOI;tQ9<%fEHn&(nYWRSfKc*StpOH5wL!JoZ(hpagJ zQ^k>>zRR3Rwc^y%Sn}4x&`_4 zLDM=~#pi`)j!EK-Uk=y?vSC-EH0qR^Kj8G+{y>hH3nEdiX$#%F&?F=pbp2UUNS=0( zeO&83`sV=U@@@plBt|HKh1;V$; zKOyG9M0Cf+Fs?@03LNnp??%PWgV7`tx_zv{nm?0WxNXHQKXY%0D|0j!QEE1j`9W`r zAw4iK{}iAPYng8GX&!28?sO065gjS~vIIH8F$8D=zWC;dr}rODYi1uvY)jkTd%a91 zI?QA#a)d1!4EDj{5ItBe$n2BfVg}aX4V1AW@SB);N-*W{b zIb@akRNnyHhC62nA!Oxc{YtxM|O%rE!YGM)N&yGX`R0DS6 z?;(yj`EDffFx~#C0qxJj>WtbE&xDg`wJ`Fyk@wMW&m#AONGz9HA7hwg-8=1|EvBP| zw1M(_&m|FcBhEgP=z-12EhfJOAtIQ z%r>R-jI}W9b}y!V9A)DdPRZh^BKef}eb&?|Lud6L!i#fE+ElT|hQV_Hwx3r)tW)Qg z#i)FK&>WL`6zDeMzrJCCq92s)Rf7H!Mp~1&cjw+f|7P@xEkQl^45GgHoPbvR zXV(U8F-sJGG1CT|Ip)nr-g1$&u0r)-w0M}M#6%cqYDESZ6SXYCrXfKHv6@M@~P$};QnJ&HyS|E=%kI&Z_wMp^xmEfKANF^ovgC1rV?d0c=Eo6%T$jrSW znzfm`rR^78kB_WynbaSwbuc>Wg`2}_8#|miZE-pw9>-W8@W0G=e$SZ`K!O^1`zkgV zfW6Vq+s7ZQ0lH%c(2j^6PNO+B4{0{pjIdzR>-oqA&ZL_Tz~;x(jE)gcd-o6}*gcu= zI}sd{Mw7Z^=jGEA@oFuOXx2%en2aN%_ba%m(|+e!oXe~`10`C(^6{My4N!Adpn6b6 zT0Oymj~the^3R(DMyo8mnPxCw&`{YpDOlt~t2hQqADQ}`H`ozBcjn@9WaR-i;f{D{ z>-+2I#vnErn68njDZgy+HIA~p^+5*l23G0$^^Bc4A&@!{dCgU<(=&25{Q(=rjZ}DV zsdvPvI2&RcrCWJBgpIP|d6a{Rw6yJYvvDyWwhAF8NnFLIfWBr0Nnd*wr){=t|Igwb zK+L1FX*9wM8a=HVm602?+QLVUz7!>V&Pt@UxzOA!Q6`lZ(LD6(eaj6X*W8EA?232; z2a`mKdEy%R0V{hx@(O1(Y%YFQa{rQ#O@-;Hv{xgZ{ukv{iVP@Hz{~aT2zi|>bZgL+ z1Bs(eCH=&TL(fkMAp9@5ii1|2=EK7hx~bf_Z@f1aK$6?lJW6P5XkTF`jndhxXv;^& z?Z`1w>M4y4;fp$ys2XCqYU0E6LdPsk7$BMB#0Nt(Y($bK&5ml^#6mTAac3wt0*F*I zPdqSyyPs(DBCq0XS~~$N&HU diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index d4362e69775de6db2d1dc7500752720e1dcbf26b..28c6bf03016f6c994b70f38d1b7346e5831b531f 100644 GIT binary patch delta 540 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

V@$v#>H-Tp zjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4 zpY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5>ao-}771+xE3um9lWAY1FeQFxowa1( z!GEEtTZKB&n8Thy*i}CTVC9LxOwcQG7}k=ZC2ii+ts()n&iOe28+~E0 zA_rkDn>_Sj5c>0uv9lDGg3{xx6WY*r!&)*u3~4;RWDRFmGgzwZC}<@H_*Jk0dtfa~ z01(yqme*%*&pNAy)q>9RO)34l90xUaIe%+QPK(2~jmS!HTB&NrS_(r?Le@zUD*ljQ zBp7ZpBo%U6YT%BWL;=m52RN%`0#>)m@Z`~9c&e%idM@7z_kWqB2Cy2sdz8R42)m+1 zyGc{n>{Bvi9vgxC%W6SbUjq+rZ-nkk_Cnj5h(D(Toz-#=a#|_u4M_Lw1tG5n(tox# zfKX5i4{iGzx@~mYwx3!g9q2GDfz0M%NYC31LhdKv_SAu^#0zO#>Jhpw3~iIsw*HtF z4ZZxw30U(hK<3e_kpBD*5T2_7cYZaviVuQo)0c|Uwj7#;w!vxJe=ePcmSN4QX;{{D z36{L@Itb5Jg1cZJxIEq&SWRe)oqu-Z2k|g;2%#m&*jfX^%b!A8#bI!j9-0Fi0bOXl z(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twVXd^Tr^mWLfFh$V6P57%1-m2(NsufVZ9>Qc_NFKy$YDDex1hd*JZWLk{h~ zcmt}uK6vM=PN-_|YwB%QzuVXaZ`8KI?&fnKN^-0#@i=An>-pg8$|DHVK2DZ@lMvK)nT0^DLmiCqkgQ?(c^oJ z#SL29cr>81P~WgeR;rW<)VHXdd0`E<;;lk`K*tHF+mL)4wdl~R103}s2Q}K2_8)U< Vj0(=c-2wmr002ovPDHLkV1nf={l)+Q delta 1461 zcmV;m1xos~495$QB!7-cL_t(|0qvV_OdDkwz@O49Obf0sBrOxOk(n8n5E`kF0!9%G zL$;&}&FC;83=;@ereAb^GA_}~Wm9GhL=)qfCVY?y#K{CQ5+KCVhLRxl14{^V0VeCn z3?LM)=lirhxR&cA;k~;J`6Uf^Z(q3Q$MfF%?^*^#$jHbzTz_6(UXh)hZ8jJT`x$~* zy@w5!W!GkBXJ?#Fr=zW{t<~jnjYZZ86VdDS$zKpkOG_)rX^d=d zNr_eIprj@*FRz%qUSO8JK% zr=?Lk5E*$iW>7TQ72fIW3d@aSF$P+^8sI|boZvlw=zjz!36=ZSATOTX_VpAM9$HYt z#XA~cL-QUE#DqC`E18ZgqL?tseokclf=M18abdNBvd496)UK6RpL;seSZi5m|*%_B@eY4eKN9w1>Mjyeq3Kd~o;(uKrnOzf+6%IX^S)nYhhQ7J0fot~} zQDMGJ8^ggz1|Ot8V9K&ps0gz})E^N`ho2B;8`J%39BS7sPU(gHm3*yg{1dXE#?k5hfrWfAJ*FrVq$r00z$i|>0EgK~QX z(n8t8d;GLR3n0l%D>q{QiI;7e3BTOE#o$kr=4H=HD2qtGT0+^+Pz4kaQccfP%fpkYGqt|ev~dEW!D*!c_iynkL` zW7Pp!9+vc3?_3@x{~Qi%x#`qnkbPeorT@`R!`ln@fr}$!a%j;Uc3+c&hRe=Cfh~`& zv?5O)%AZe#mC7u5@B83A8@VHbu%vn0i8PjNcCruPPmol#Gpy{np*xeSag+OV`)e z*Y@}KyAl!-l9Uci3YM3b7wYQjPT?FqAUrWKF=?~ej^{^}(w)XrNO_X?P7(UHb P00000NkvXXu0mjf;0VOy diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index bb3007ab407621e24af968079bc3d17d0eb72694..4cde12118dda48d71e01fcb589a74d069c5d7cb5 100644 GIT binary patch delta 1004 zcmVU6E9hRDZsKRZ8`ICh6f+zh_Ab z(jRY2a{B+|os<)hT5u?RkVuNN!js0QT$N5qdKbV*dH@&&Vjutv8ARzpRqqL`fs%v3 z_*Hd00YYHFNIC{Q1h^F1P!f5C!xIU|E+^yzaDu?XOc`!nZ+PjJh~`vV%1!_aj2TH& zKwB1AHSp7kgnyx5V{+EJ5gM3@MPI>kpg&?m&MZY^mCPDRTDzYO*c$nehN*{r1;b!} zL~B$N2&udO8tBp-PM4v#VA!7mo$41xCTJ~SU|=SOZ3V-D{)qMzXd9GbL+F1E1Yg28 z1RU&-XuA$zU1(Mh+ag0OA2L@}lJyL@X7yGouP$&$M1OlzM%Nm7TCsNcLSx`u3}=gu zz_8*kvf$vZc1ylSt62f92V^XU?#Y zz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#YwqkoqZx^jlHgV2aMo8z}1PBGB7;Ej|r zUB(UDU}Sw|KG_{Ict^w^3nDNEn{Q#}yRSHTWQ?6}jPTd&B7rp|u4dqtoymH&RdRgj zT#2{N3mqTk(vPPJH*F&>&U5!|8yVTRi>^YB#EGCzC1t+ajDgsRm$x_ZV)O4@I&qfh zrhh)<9J$s!Kq@Bk2*~DAzd+ItgnGi{)g+zGbzBzZYX#nnI#*DSOq^;G=#=I-Jg>aXP1F zlEh^jkE`b1p$afa*ZWyv)#99=s8_FR$dIH^l3o73@CH04X-v{g?RT@=lj`|W(&I~U amdro1n%BYy(FNklyt1l{y*{lz4d&WRvHk-Hi_4RprdV0>*)PK}CU~ov16b=Le&xePH z{fR^($t)I&ITQ+wx3#q$G#b;xYPE_km+N|GXXnX|j*cVD?RNJU6U>d4mX-q^kH^a> zrRPck>e1cZeTLcX_S#aSq9{68DM3B9gr-$sTH&DP)a~F^h#T~}X;cI6hXuS#Ff377 zrLxGDaJyd7N`J)K$|A2MFAi2UswgUIstp zfOZ0J5$MPhEC|hlLI%{j*RCqMX>Jw>=8dLuW~g_+lfWBw3wfusAT)c^tfo|51_zcw zIrZ=F1rD(AYx^k(eKXImnV}9oi3)fnvz5VAnCK3!Uw^7$5%V0;y{n6&jJaGL>JhEck%I+P63WlN!+K>v3E&%z9~HcBU-ouM|E#&QFK&B^MzKR+*}+~OZD9b z1y?4^Fn>OmLh^M8(O4ADI}%1+N3qv#F&@>T%mmzPRB-9@1OoC;s2qoHQWB>|#u0RD zaE0-x76QQ!&o^UnK8~?3Gn8r-KcY!=jl9K}=NNX2>(6-8uQq|1@c7~(OwP`))T#90 zIBvtXTY8CWaPywZg4_L{<4P%Hc5I!_nlzf2?&k!XgaLqkIYw4Cx^j#(0j T5xWU?00000NkvXXu0mjf+c;?O diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index 635436a40e668ce5ed66d9ea8b41472f8ee38680..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 100644 GIT binary patch literal 1716 zcmds$`#;kQ7{|XelZftyR5~xW7?MLxS4^|Hw3&P7^y)@A9Fj{Xm1~_CIV^XZ%SLBn zA;!r`GqGHg=7>xrB{?psZQs88ZaedDoagm^KF{a*>G|dJWRSe^I$DNW008I^+;Kjt z>9p3GNR^I;v>5_`+91i(*G;u5|L+Bu6M=(afLjtkya#yZ175|z$pU~>2#^Z_pCZ7o z1c6UNcv2B3?; zX%qdxCXQpdKRz=#b*q0P%b&o)5ZrNZt7$fiETSK_VaY=mb4GK`#~0K#~9^ zcY!`#Af+4h?UMR-gMKOmpuYeN5P*RKF!(tb`)oe0j2BH1l?=>y#S5pMqkx6i{*=V9JF%>N8`ewGhRE(|WohnD59R^$_36{4>S zDFlPC5|k?;SPsDo87!B{6*7eqmMdU|QZ84>6)Kd9wNfh90=y=TFQay-0__>=<4pk& zYDjgIhL-jQ9o>z32K)BgAH+HxamL{ZL~ozu)Qqe@a`FpH=oQRA8=L-m-1dam(Ix2V z?du;LdMO+ooBelr^_y4{|44tmgH^2hSzPFd;U^!1p>6d|o)(-01z{i&Kj@)z-yfWQ)V#3Uo!_U}q3u`(fOs`_f^ueFii1xBNUB z6MecwJN$CqV&vhc+)b(p4NzGGEgwWNs z@*lUV6LaduZH)4_g!cE<2G6#+hJrWd5(|p1Z;YJ7ifVHv+n49btR}dq?HHDjl{m$T z!jLZcGkb&XS2OG~u%&R$(X+Z`CWec%QKt>NGYvd5g20)PU(dOn^7%@6kQb}C(%=vr z{?RP(z~C9DPnL{q^@pVw@|Vx~@3v!9dCaBtbh2EdtoNHm4kGxp>i#ct)7p|$QJs+U z-a3qtcPvhihub?wnJqEt>zC@)2suY?%-96cYCm$Q8R%-8$PZYsx3~QOLMDf(piXMm zB=<63yQk1AdOz#-qsEDX>>c)EES%$owHKue;?B3)8aRd}m~_)>SL3h2(9X;|+2#7X z+#2)NpD%qJvCQ0a-uzZLmz*ms+l*N}w)3LRQ*6>|Ub-fyptY(keUxw+)jfwF5K{L9 z|Cl_w=`!l_o><384d&?)$6Nh(GAm=4p_;{qVn#hI8lqewW7~wUlyBM-4Z|)cZr?Rh z=xZ&Ol>4(CU85ea(CZ^aO@2N18K>ftl8>2MqetAR53_JA>Fal`^)1Y--Am~UDa4th zKfCYpcXky$XSFDWBMIl(q=Mxj$iMBX=|S|tQXY>5x1l~AeGq=|_J0)8~|L`b0QBA}GDf+m6q z8g`)?TA_`U4`~!AU+(94&n^Q4?1EJe8A^ zb22V2?r2z8SSV@o^Yq>}68k5S$z=LTuh%ykjmGa-mR<7#!+(g1ih8`dy84sE#Kcrl z%@jc4;o%S)8=IV$mseson|~-ODtf)YzyBuJzXF#lD)F znyX1kNeN6^TG}%S2?;4u8%0YRjV3-LBO{$5*)>;cV`xjK)8#P4n@6QKgto{sd4y4^ zRAEvZLR%#Ns4*FB_hLW@$(XI**&TWay4xfv=%N##Z-2pm<(c*JUhG~6?DzN5`7b3I zC_+|@E8v#JoeNo51;vdAyL`<)V25V|9X^jI2`ECoJE4Hv7VilkA#(`iYoRuf$$TGE zbkI5CoQnip|WKrvj= zlOt9?uYZ}9CM1eFD0;GzgY-hlg)1#c6jjibaJ6m>SN>9xMG{Y52t7y?HBf%IqPVq@ zFV2&+AyHI7x$NoYg2JtO34wRoQ7BnT+Cg#6~E7=Pf0YXJ|^NjmP?WbS@%3oMbEVPT)t zyO+&sSHA7*!_`4LKc14qjXB11DY$$+LbhmcAGG>vrthF=ke%Jw#@G6AMNfW2AiL&0 z56_1@|ELw@+hO;jA|X|A$l}^tj(8{x)`zQO8S>jX_t4(va%_OxlR`kE1ev1#ACfajBfWnIp*<;1hU6Ik?Q;X25R zcjVAC#lZdmfZ)C0G4md#0ErTG9X&vPt@1GoTz|ko4yk(hiRZ$I9KO8o_TZn`CA{3Lf?E?0Tx}cn zt%UA9gk_gKyPZnF|DuDz0bnRgg?|$tcEjN4jE8e1*40+2Hv`_4Wj?txKS`j}K}u+R zGX=7)biuFVvn%Z!q}$6fxYRu0T8rO$5k2c0tz=)*5LQn-dt-3IW50XOvfv=3(+gGz z2~_wro}}ML)jU|^u1F&GSuxw*LoQX4~4ZEbBW4EfVBG&Iy785tQXwLvsAIy!p0xw+ZE zI2;bPxVZRCdwcu$a=Bb7wP8Yvu-QsVO3qlVR=aC?>FMd|D=aL0rM9-VfngZmYOQS| z0%PEH=Ls;asg5fKq3or%6{Y;0_}w6yeeM@L5&*S4l$ z=^fDmF(5(5$|?Cx}D zKEJa&XZP%OyE`*GvvYQ4PV&!g2|L^Q?YG}tx;sY@GzV#^0C$Z`m}blr)&(OPMHT6T@%AxHOWYGG zm>@=0?<)?0r0XK9>leRXyD^j4O4bXT!@LESVI<~>`yB+S2b_f__vvyMHkwGyyXedq3usx&X*}E{O;}+nJ#G_xm zJbQX5 zuFrVK*|x9RQeZ1J@1v9MX;>n34(i>=YE@Iur`0Vah(inE3VUFZNqf~ ztSz{1fz3Fsn_x4F>o(Yo;kpqvBe-sbwH(*Yuz!}~S^-;|MX;9Py1im8!}VY-!u4P+ z!nLEvx?+Rogo+Kw9OBXy&lGIvJ51_7Hl6Q>*MAJa!lMDGGML530`Te&0ciU({DC7` z;RKg{uC>($*mdXnVQQBjiVyqYC7mf!Z%e-Q!?Oo{ufu`G3CAC=UjiTpU<94UTFz2KEDuNS@KKkg)K8!v1L8RUP$_! z({LG$Dy&JLEVpiNVe^G(HCbA*SpsX?292)#=JVQDUMp-cOJPl`+yTHTD!AOit-zAD zptXYa!q%OVLa^mo25b7^Z>kE`3rqgr-G4i;Lw<+P(8khESW8aaBmxfY`WS#6j<92Q z-++&Y z$gbH4#2sT0cU0SdFs=*W*4hKGpuR1QGacHFy;`# zR&NJkbTNp}Ee5f08HmLzK%D(q3@lH;Tzx$?VT;&xJq-KyHV__o3dD)?KrE<6*iXV0 z8;6<{IKw@dyDwJ90H5^3h;|9?twz{UGr|>1Pzhdn6W(r0ifeZd=JI+AAz<~yL(QJk zAWW))+=`8mGj|J!70oF@d4B;WxB=jBM1bWWRBb&1!ie3BUzOdm}yC-xA%SY``k$rbfk;CHqifhU*jfGM@DkYCec zD9&E@F9*za0?~OQZiDE|Cf;;0 z`uZ%H=IeGyG^H0ruev{yIVARgwZUG)j7>F#3~dh+8DOtPByR=(VDhz2enf#EjcXCI z=NUPYr4@S)GhX!?s(0Eh(nGe!y$#$r1B$||I~`wPhUuCQEo;#Xb$EXk=6HgBBRd#c ziK|jN$e~{zV~|;*E@Ij-Z(+tI^B8RW51ptE!nMnPyZ`_I07*qoM6N<$f?KYPGynhq delta 2368 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 DmH-*N diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 76e933274fd70b89850c79f9e56fe2660fd4816e..a6d6b8609df07bf62e5100a53a01510388bd2b22 100644 GIT binary patch delta 2657 zcmV-n3ZC_g8R-;|BYz4oNkloFh3q0M zFesq&64WThn3$;G69TfjsAv=f2G9}pgSx99+!YO}2Uveik)GA5ewEg1Va|1@=x;Pyj3t}zC)T-c zzoz+u9TyK|)jteh(` z;D6}gLagCR0hn*76kN#wCv*`b8GyswI1s7kNaT!{fEXv;5ofK|nu3vU_1cRKLBd@TQ@Ei6F6QJ?HM!O!+{x(L<6rNAv)=55QOzlPWhqI{ zjSR5c$#aW1xy}c;$06La(Y*xlX>0w3EDGGn02k}7*%ZplRLFsw%E3MJO@BuPkU#Ja zcbp(_BL!RxGHHe;wff^+2G>u>ah(dq7O)#K0ekx={yBF*$P%aJSOMmjHHmAxvW0cp zt8@K;ETVH`1(=8Ie(Z;Hy+9V#xv>Mxz*+%0w;aeKJ2#eqVJL7nrpksp7|5bKS2)0a zId?FSYb0>4P=MLsl6(J^Q-5;@54jg=+fq2sO~Hz-hVXEO0L<$0j+BKdGX;Npqt{os zJmk~Y_Q1L83|RfW)5G^!;(u>i7{EI*HIqAp9`Cbzna*hHhI2Lm9I{{?%y{Hgdzxli z7Fd?00Ed;L$qk&zI`y$@{Dn;5j(iW`=!aXNV*G=kjb8%Qi`UtJMSq7ZT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah-w13P)xT`>~eFoJC!>{2X zL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw>F+gN+i+VD?gMXwcIhn8 zrz`>e>J^TI3E-MW>VM=sWZual)ns9B%8_$25BcpOz+KP;+J(1(UiAp*Q=dc!FQL}*R43bTaVm7wy#IrC-VD&k-4FWYMd;wg6!1z8a3SP;O>P#-$->_l zEAM2>hI~v3$Y(TlIdJE^0@|6AK_7#uc{~E1^f2gGJ^}i)rGJ>FDPRt4F~}m-WGQZK zw?8N6;NJH#XeW;Webf!0kG=!+v2#G5xX^L14Y#o*Tz9&z7NjOib92f(6aq==Ntoo74a!u6w~r!$mq|FDi7h6+6fTa4$$0Y>@Y*O}J#< z8ic&ucAQ^e_cw)#3uFTLcly|p7IMmPAXha6205mSA%EQja0eR?DV=N%;eS$2zHI*MpiObUuA|j7`m5?j`@^G6SO!-;(G1aCOu{sGli$ zGck~Eqx{gt?U$`9P3JRJO>}Ku- zRew#6AKb$jGi@lro`A;#P%m@cnyJP&(r%f}Zq^V3mIc=hnLfVXHRn=pj;2#4v8WiM zav|%So5|ksmkM-bV7H;F_%f>b72G`eFJ!d@wTC-#ALO^GRCtHl=K|Y}dX%fTm0A$N zzc4;N3AGsYM~OOND&T_#%8wZzWYfL@by`|620=mAU7(LZ-At!cdlWCvu@AK#bt~#< z9;~k^d5}}7VXmK@h?&@_rUHYJ9zD=M%4AFQ`}k8OC$9ssPq=LnkwKG P00000NkvXXu0mjfAM+Ya delta 3208 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index 1a3c0e112b0eaab3f362639771efa2ab060f1d55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1373 zcmV-j1)}4jnkdl&; z)X~xLRaI5hemsqebdc+j!C-)#oSb}o(5)jQBR{pawzfDNjw_^%1tAav0|UcZSy_*& z8tEOVq@<+UYPJ4qGMS3)cKhEfNM~o~*P97~S4Kugc2`%|@yg0d6IEVbUR+U8QKNQH zVpUXBR8d`BT}7GA=4WApj*0cEp`qabRZvi{TkSxk%4jqeQ1S8c$!Z58RdI1~No25Z z>a^lT-Tsozp}QbrwBV0|fBf8WAWVCr7GQgHxR%>1VjzEdqu_{L2iKV>7J?5q5a5o} zqZxQ-hfj3>5dpdAL5O)B{L654g?tL1JArs_hZmA1M58#!1&;=f&d0zKbE7zhLbRh3 zQXq&F1-XdnbSwlyC<8*gn=Z`>UW$PbC)ypih9FKHOPB5hFGWCz6FkJqpcb^V=_HdA zykrLvIuQs{Nl7{#mC*@avUa!1iNMWsg+T!)c*)jfs1rg6a;&EqIHG_PykzNiEhorv zD#ZP8g6dwooTr z2yqx8roEb*Dj5e6fVc7bhebjVi3Z7uW#BD?k4-I4;D#%DeqalnSPLQsAr2d)K@dqA zBM;%t-^3u=5yp!!`k)i3L5Qo%054DJz)5L9qgnmG4uWVI z(`(*|Gdsd)wVV?K!YC62k!;=b2EYEmC zN^)?v_j>){8axd<&DnSsE9-q_2QhAA;PY%BymUSW+``$OreSe#2+q#ULA}EP-@Q=^ z$y;@@-B*z%++zt0d`e)>Aq<%?{eEzt`~{W~0<;>i%{ig=!y!2FS}Ex7k;fUu-Vlor z=8GI3yf~?Wt9>WId-*cZSiblv$2RMN{T~g(4~NQRaYoU1cH+!uX$x>*$qD`#E&Dg& z>ex2tf|?J8p!ap@&M3Z%viJUE_~w;;VE*J3EPCnHt7D{^oaNH&$3suTz1ze)6Onzb zJrATp&#NWSh%nbZ+*TujU^nXU;}1-;r`{iA3&8e-Eu!ubv7N@pv-EJPtqL4YPuO-E zSDYCx1tf?=}Tcq%Ng00000NkvXXu0mjf#SVSV diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index a6692df140a59e27282c555fb30d0638bca23b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2617 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 P00000NkvXXu0mjfAM+Ya delta 3208 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index d3f604852a754e7e61d19a085cb7017492e2037c..75b2d164a5a98e212cca15ea7bf2ab5de5108680 100644 GIT binary patch literal 3831 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 literal 5018 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 X)B6(p5;c+@00000NkvXXu0mjfy052J diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index ae0059c21c0863e6bd6b2b092b87c9794712d329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3901 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 A6#xJL diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 4f1b8bc9151260bec0b371bb93e7964c98ef95d0..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d 100644 GIT binary patch delta 1873 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 iW8SQGTYb<9@ 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4725e9b0ddb1deab583e5b5102493aa332..df3b2256ac4510b07c90deca012f64cabbd11bd5 100644 GIT binary patch literal 26033 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-20x20@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0bca859a3f474b03065bef75ba58a9e4c..9fbc865279ebba1f73219e70bcd6a022d70ad0c8 100644 GIT binary patch delta 923 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-29x29@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118dda48d71e01fcb589a74d069c5d7cb5..5f91155f7e8fac5329c579c41c24f8c5c0696397 100644 GIT binary patch delta 509 zcmVxE!7J(L*)%!BGb*qsh@s-6+DG&vc{`J+&*bAqOk}9?i(r1bUo+jyPCpN;JL8 z(Rm*|Q3;Ac784xG08QiS?Q=9HQa;l`M0R-m-rGlk4hu98{aQmMFcX9BPKX?f z_8|dXexU0CMStHZU&c{qq?#B!XDx-=#j|!ACYF!(m;7`y^p2WkKIlkwj`4G*NYGcx z7VoL6DC(p*;i0QOrK|`jiC4;Zs>}W9IpgE&E_p?SaSvU&i?6&5LQQdeCbcQiG_D>R zfHxxU1O)cNyzY~{jt0oh%hu%snXY9$m!`eD=+pM@Lw4Y?ZOXsa+f-#YXXWxR$uLvL zy3Q^(f{!S{l|S4%xxdxV>HMr*9#n>f_WIXQ(0%Sj#OwR8Yx2N7&|G0lUbTUHk}C32 zXXE8qy*J!)}JWs~uMLsEI00000NkvXXu0mjfcb5Dj delta 1014 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-40x40@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..8fa19637fda7aa067944f64f555124a844d17be8 100644 GIT binary patch delta 1332 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-40x40@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..fc455d0cfbd3162ec649441b5ed3c8f07604fd42 100644 GIT binary patch literal 2097 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 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@1x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@1x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@1x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@2x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-50x50@2x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-50x50@2x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@1x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@1x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@1x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@2x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-57x57@2x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-57x57@2x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-60x60@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..fc455d0cfbd3162ec649441b5ed3c8f07604fd42 100644 GIT binary patch literal 2097 zcmb`J`#;kQ1IIvpOjEOfH3%+sU=LwYhHQ7N*H9V>7pOb%fHP=j%Q-k&?M@ z&D@pILW_r7OEcMFB$jf0dj5y=dc8lN_aE^2<#QM1>Hs+iJ18L`0YP4{b^B$?|8qd{ zS2IA5??_1O|ADkU??KrkD#1k@@q}^)-;tSiK8{k=eunQ<*Q_6Asy^C>PL`8)`SO2ON`cPp5o4f7tC1{BGdhyK){UP7ov;wU=Q$MT4*~5kmur3X3O`d!pxRC&q+} zOA%r1v7kYHb9gK$@!Q1iwJ%1Ok6Ro%aH#V~?m)BDuHtQi`oD-Wh*xr4*g(y?TI}VL z*#hOMBSUQb2|#=Z_X9tXC#v@toe@Et7}bG@E9iTXIq3{tl|G{w_PhypJbq%LW*p}# zfthwclz7~1niIGfQ%C3}rf{_NmIoY~oF{c*@MRJb(4ilhntKj+pVVsJ-t*5l_P)o8 zSd1oJ9&(zMHh}g?Lx6O-ul#69M_Pl{PL|be$z(Q1^cd5QbHydo%Iu%S&jkjUYei^3 z6TS@Z0lpGyVGp?b1kRVKEWq7;Rhw;UxYSL+9mk3J8-H+_){k`sQ=Cpd)u|%BtaU!C z=<)?R#~Zx#=y6a)LB$K|i!67J{hoFjTX;+jt^t_Udk!@^4#4H3?1m6&_=^MB8zXw{ zZwv5UPYIY!V{+p1?ch1+9Ar=%&_x-N=l=3qG2Fm@a*Zp3|2K{z^_--cccwp1C0HX5 z07uipfJpd6m`T7;gZaGx?rmM3$R5}f!L|H0SBmim^=T7Xa5H8^bLA+0Ku_M)mdUB& z_SH)>J)F_dr9Q-8t%UqOUUNiDVFz)IWrFcH)ew8C{RYjfsLC-@^U~14kne;tXnaw! zWikM^;W5~DG8slOW%w?~#=2FdV8pYa_0WQ@KjYq>YMapy%P2E#DO_;m?hR=4&ogT= z0G<2TnH{PGkA53lj=u?qZH#dtLMO?cs0jw*~d^GcoVLip5fZB>~GlL*p z_x)LHR7^2Gb|HBU?vA?rhn;_QPcKQeZ-%8#LX^X0cgwTtoja)xHuR$@ohkNo{v^$F zR%e084^2qTAR!W^F!a?vVOGVAv{%|`H5MZ_G6c~k=xINFO7@8$1lCUa+E9r<$GHw~ zsCUMQNN@W*KCbVpQY+d%oHHyK$0>dMA^vI9Xq8j2_0+b(+*DUOx>_+@^YU*EQ)Yz= z8#BIIb(7FK>6Nwpy&l%}^3BSOVkLTLWI^pzw#h$DzEgYX$RI9>X*94gBn)@F_~)Sb z$ys_Cz%}X?TOx9s@LgMAr@y_c^&X}kEv_}W<`+29*#P^)B>Ar>U z@;zfn{39BtRVbjiXDahkCk@#5r?Io>g_KTYSnw!s|E<<}$~$=JidKQn8kAMB`k+!U z=08O=F$KU(S|_pJ#e(ZfE=>wvFzzSHTm-lBtZ;PK!xiw)OW+#aao~xW zMr})uokn_J4NP3MY#??pE7F*BHZ6cF8!+#3G<{W8As^kJ9hbzep>7Dj6=jaVi!G_G zM>WhdsHVuslR*5A0Qu=0Y<6>vyzaMw1;2?l4zO}##Tlp46OKUOZ_wEfdna}pV%Z$;-kqDGjJ zx8>^}R>8Vz2tl(OglE2_Zh4gYriKf%eRop!xnz|im`JztnRvT)4{?^(|czIobMM; zf+Q#TLxiM)dA5=qGFO_Lqww>DJqm5A5@o>(f1UAOQq#heFUfn=D}F4OkaT8rH*QLb zYcwnXUuoWP8r9>S4(&ER<}Z^roFV0XaWSwoJU$(y@TIa8c!P_kfTA{+OAv}VjaLB& zC-!pQtCN})?zuJ@%|g_|v#G3D5scSyGeS&Qd6zci4brNRAL>FMT`AY&j(J>#uq@lk zwlv5raxNioCgiQsY}HtO1K zF-p5-r{h0^@z(Sd{El0Q4uhyn;S6g@ZRf+Uc>;5L3oqSnZ@%Xm+@Iu=MSWp^hOmcX^ zw9u!h3aC!lSXmL#z>1k5z}!&0n4~*;jlx={-V4WZj|A(*ih4)zHTngHZGKswqIexG zN(rb~s~=18;kU}KaA2}&o}NQ(gjPiS#_W3zk;BS9M^}Wvsm9_e3tjB`39#%fg14%z f+VOvn6%|>d^`+k*kn?|C0STm?t1aC+@aF#jUG?uI literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-60x60@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..42a4bb54de71fc241334ce66420d62b03275c7ce 100644 GIT binary patch literal 3402 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 literal 3831 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@1x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@1x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@1x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@2x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/AppIcon-dev-72x72@2x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-72x72@2x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-76x76@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/devAppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..b8005ef75f3c2870718cd276a2f559fec5e7c4d7 100644 GIT binary patch delta 1237 zcmV;`1S7sjyUe*Yn0p}k1XV^4mD30S!18%4tb;?106!l`F}=1hdknufes8W!x3zkRe|z12k%UO?S>L?WAaCfr8S|<|SUl1sY~Kc&PzXYrtlJSA{ogyH!^Y~uyer&Ti2Cn$nWRV@2Hq~y zk1rc%m!iw;Em%84!aWyP5#|WnTNWb(Ax+|8^KO|QykeZa5p?2+kKy@jA~dYSAvZ!&`biM_DQ0e{<5roG~XAaI-v^cn8({1SQPcXN)C z&NZ;U2;pTo<_g~tEd;SM9d40AxajPol)oBjus~uzE`G?cL)}O@VP7R6Q|vQ z4hLMJx20BhUOlJRp$s9&xC${_hc)bQVA7mx1ouvKqOH{7tR>6qkVo$F2X?q^(wq+o zd4Fol&MbGsT8SO<$VDEV$;SzihpcN$_NFU;Jn_&201{`ka*^*pNEfJaX0c`bU}+SrM6sNFB8PZcZZ*yoWRIymJx zo%gm?uY8X}a8`I66335@SFz6n68cnhF9iD>?xsUk$h0IwrX~LaXt+sLl6ul900000NkvXXu0mjf52j?~ delta 1884 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 ItLO6YKMq?Ee*gdg literal 3294 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 RyMPTaxnpTqe*016e*p-*3+Mm< literal 3612 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-20x20@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0bca859a3f474b03065bef75ba58a9e4c..9fbc865279ebba1f73219e70bcd6a022d70ad0c8 100644 GIT binary patch delta 923 zcmV;M17!TP45kN=8Gix*006a~P9*>U18qq}K~#7F?b%OE(@-1-@L#)js9OZaF57_w zg3-jIasfPeR*8$jpyCDfhC<>2^<*T`009$?CoeGcu8Dt$n0PaBBzQ2vgPe#m=76BC zQ@XA{U)!y8T_sujT0_$BVR>tp_R}9P?@!@!xg6}aaQ_=%Cx1TLtN3WI;-kHakM=4) z+N=0zui`rTgTN-&c`ScLwI!=<2B5D=>IxTYy{5b9_qo7ihA%3-QsiwkUWwWfgR5vF zzMtV`gV+#7+}$AAyRuv8l)z59BL#7oY^;0F3*o*mBw3us;A%Tei+ zGciy{6Y-cTu74^p3HCQp5CdJbB3=y^fI$l~H8D^`mwH8IKQ1?Dih&kd?-fvr8&}vNIF?P^owK*S<;7=(nDpZZY5rZ_LX2v!a3Z#kCg}_p ziEu)3gMUdpzRb_0xkw21?=_3}v3SRs*by4a_5LO@Jyl|Id|gnK^<}p%KIlyB6b)*< z^|mHXrnj%TAt;~3t%*lyh=JlNkBG;Jc!e`fD8x-p#lm!Itc4nSG0!|r2TWqZB|Uy^ zQ%ne754FZ<-HRIfa0u_V6>cq+#uIJvq!hLw{(qW#JDSbLy-g)^Vt=we|f0 zX@3kRm44#H?baKno+I(CzN6Ql%wy$_29$c^)hS1A7vJUe9c$$R%;5CAWZ3JX67mc< zFqQgKko%9f*|@U1Z%unUTI%?~y=R}auL{@j01szBN5a9=?aj4b*7f((iT371?W~>S x|0lq!_-L=V5?1^Y=vK~!ko-J4%*6h$1z_l{zTu}>N$Y77dN z(jrej`JjnWDIm3fj{j>}J%k>VpVM zMunJ?rSR(^OuXDgm2)PP%Lw)()f=TG1B~ScNUFa-({vjDk;dweRiFe?w-6Qho(O1_ zv!(2WV2ZhFC1SqPt}wig>|5C zrh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)yRAZ>eDe#*r`yDAVgB_R* zLB*MAc8_?!g7#WjJA zNf*S~m|;6j!A4w$ko3-C-D?f3QiNoOywjDS!K#57`tfjzaqOr$8SWAG-j-YxSgf$JEO3s=FUciZf^T1|d zdlv{cAz-VWC8|7CEV-;Wb6Vzrt)AkMWOkTe+ZBtZc)X@JVej7(9Qa3q{qv~yUkR%F zgV1zYf*?t3UMs{3OLcKP1Z6m=c&$AQlc=-2K7W6gDCe$axhg&7qBi(Mc=7aOu!`S0t-8gf#ZQK=m_VkJUaO-56fxM&#U}>8ioQPQ~9Xan>71|{&AvQNWKoV z(G*V$cD|NEzl(OC?HDr#Cqt&AdqP30PY2p48uOaogm_>#S_o_EvD7yf32g)`v6|+S zX@6g&FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zmZQj(aA_HeBY&OC^ zjj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5KhX*|AU4QE#~SgPzO zXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&f`88QO)34l90xUaIcrN!i^H~!$VzZpscObr z3PVpq)=3d6{*YiK7;ZBp6>?f?;EtO_0nMBTIICp>R=3LV88-e@FYC%|E0}pO*gziiBLfe{%Kc@qo)p8GVT7N0* z4M_Lw1tG5n(zZ5$P*4jGZTlL!ZFJhUpIRgx=rAmS%;sT8&)W?`?kC{()PbwS3u#;G z5xOo6ZIjcs{+JdGz5K@sSo14D=FzK={`?LQo~r_Pel@s?4}xpcmx|K19GZo;!D-un zE}eyzVa=&&Sk`n2mb~yf2+vl6yMJIGxIEq&SWRe)op$60@i246YB3>oE(3e2L-^}4_|K@$pmRb!NBBQzlNb;zJF zMc&w;%{On(HbQ| z@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)yI9C9*oUga6 z=hxw6QasLPnee@3^pcqGR@o#L@+8nuG5suzgA#ZC&s z|EF-4U3#nH>r^ME@~U|CYWRjZ`yN=c=Fr}#_Mgg|JQ_F~MDJ{2FSyz9PS&T@VVxu? zJm1Eneyq~b<9m$74O-iHG@!Fk->^qks+0-Tx2T+XVGXw8twMc3$0rG>+mL)4wdl~R g1N9*XHQJT-A9HGq3eLdY0ssI207*qoM6N<$f_%^bJOBUy diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-29x29@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118dda48d71e01fcb589a74d069c5d7cb5..5f91155f7e8fac5329c579c41c24f8c5c0696397 100644 GIT binary patch delta 509 zcmVxE!7J(L*)%!BGb*qsh@s-6+DG&vc{`J+&*bAqOk}9?i(r1bUo+jyPCpN;JL8 z(Rm*|Q3;Ac784xG08QiS?Q=9HQa;l`M0R-m-rGlk4hu98{aQmMFcX9BPKX?f z_8|dXexU0CMStHZU&c{qq?#B!XDx-=#j|!ACYF!(m;7`y^p2WkKIlkwj`4G*NYGcx z7VoL6DC(p*;i0QOrK|`jiC4;Zs>}W9IpgE&E_p?SaSvU&i?6&5LQQdeCbcQiG_D>R zfHxxU1O)cNyzY~{jt0oh%hu%snXY9$m!`eD=+pM@Lw4Y?ZOXsa+f-#YXXWxR$uLvL zy3Q^(f{!S{l|S4%xxdxV>HMr*9#n>f_WIXQ(0%Sj#OwR8Yx2N7&|G0lUbTUHk}C32 zXXE8qy*J!)}JWs~uMLsEI00000NkvXXu0mjfcb5Dj delta 1014 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-40x40@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..8fa19637fda7aa067944f64f555124a844d17be8 100644 GIT binary patch delta 1332 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-40x40@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..fc455d0cfbd3162ec649441b5ed3c8f07604fd42 100644 GIT binary patch literal 2097 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 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@1x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@1x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@2x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-50x50@2x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@1x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@1x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@2x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-57x57@2x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-60x60@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..fc455d0cfbd3162ec649441b5ed3c8f07604fd42 100644 GIT binary patch literal 2097 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 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-60x60@3x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..42a4bb54de71fc241334ce66420d62b03275c7ce 100644 GIT binary patch literal 3402 zcmc&%`8OMi64u(6l9nPB!ljnlN~GkX_E?^MtEHj02#K~dYTv4{6}4Ox(W+FCs=Zaq zB}$7}f`*{AT}x_>y%fRo{)+d*%$#q|%sJo8nKN_dxvjP7C7x?MEG#US%*~AL&+W(m z3D?DQU0;*sbMC)vZfxKfc7gFaJTQkY-t%TUJ~Znqo0N>qM9S-kr?2Z`CkoJ}d}e2U zrB~Us{kjbO1v*&m?A!!E4O)G8n#9No)FD!fJ>xODd_>s(BTty*C)k!SH$YO~tiHF% zCU)~Uo>Dk{!XRyKa2$lsZu*KMGeT!uvk$Uo51MB}6_1aO*jT<3nFIlr9Mw$LT7CY{ z7hx>Ci!4h2AMoWe*1T@T&&T-ZEVV=S3tN1CtlQg9owOutiA-rd?{3y(qbjU{oS2+x z(Xvdtk1aVj+sns4@hK>rTdphPK&*<@V0WnXi6d9|@!~{Yg<$Cv>RlYDdD$iJ7=6^vzo)~;-f;8K_f!It0?5RAeO51t{#*&XPUuu$ zc)MerEtDzE%j%446;o&f>Y-Dj4U%y9r=S%gZrkJCh%t@t#Q-2v`b90xpAk6bA8c*= zUc>wXERowCWvDz%-Eg*Ou9T{N4ZMgU6q9;!tfiV*syE7r*$>^OZtO3zz$^zm*5Yg@ z^;bp~LoSWTurC6*6~;nj=pK!Z^s{>97CeuRT2?lMqWU*7zP6=ty0RpqxV+dNHoED%Swx2$Am#kjUr zM`v3y<$Ipy%8Fy9;XSFLSn8s)MfMHVQND!D#hc^4ATEYPf|_kcffQ4gla_W|Pbpj+ z%xN`A7;vExdz4xgqhykx9B6rnMH9x9#QIMpUh}q-j2cpbLCkp58EodZD73_BCm7 zKf4PteC6i+kezo~ha@@E7R;%8-n6)U0 zIYP*M)8oEPT@DyNq6Ux*DfxNJwpEv!%eqN6K-CYrG4jUw8sjju_$GmKrddW+L*!}A z%Yy@=&2g_B3iGvRJW+pl@?wZ2b9WLghCToBulV23wzsJ&sx&SJoy$F_N?Z=!!lNRJ zVvBF>n?-U>(`_MWFr1RB-6fQUSGLjNa)El0+9?3Hemr#%>sJj$u;)uv;x0hqNf>@m>fhk}P>v&blcBCM#vrc^nF*Z5 ziDH2T%Th_Xvhc}!CfomXiV}k~GS7!2tNPo`FDAHQHJxy8%bJJ#RmuA=7$yqUTFR#i zC6=3khz*P_MG_)!mBO4H{Qc`6Gr@)kzqRel{>GT8(WwrbMvt7G$zZyFqI?j{arP_8 zu<52cC9p`=ySoI46pFq54yp7m)#1B*giVRrVV~L))1&zTvQBC>yrt5$ZMgb$5Bf&} ze<|N(p&gDj6^zf!sDdZ#Z~Hx2-T(#lrJ)3%BV=q{fYIl2$C&`kk=2BLMUMN`Mi8Uu z#A?8S27GhI7nI!GgfQIbry~js7-@*Pw*zDho3r+Uz4!otuEeQUXFoG5glHR@5bGCI zu_hTlA84W$0MYRzvPQ2?1&>s~C;=(o=f?lnVI9)K+sT&*DT&e2bE^IUMB*}mCgW)X z@7EsP+*BpL0KR3?0nVhUNujoXMzjE`>mfQAe7{Echfye&8h<4F1M$5$4rGidjk;&C zM~d$5dGrG;tP)X$ob`_7M#GOTyD<1x8(xOb$_VN%0&aL(XH@vN?H@dv%)Qh;=qp0<3urm8A5F&D*ibmzb=Yi&p zNmDf7YM%oEv1dh21CxAPhY@z3$`wXNsx8;V!Kd$}i^yF$vVRV(qGXe5nN2kc7+>FI zmuDwc4wOJY_}!Gr8MV{kuOM-~QMu)_$8c`p-XmJXj9%*vrQHiAsZUS6til z)_&*zqk+fa2W&y>SA%J9Z{+NH9cImHDaTOQ+9&{ApOli`#t`*1@U?8LwvIO(ohx-{ zr#f|*lf*F@FtAQr&WD@b{A28W_2&%M*I zjC`q&FR^|gY4B~``Uo&BgQcKu!U`u3X>uYWdQ48R=QVIi{hW9IX}rs6h@ZPn zwZA_jpW&cjEnY}hKJLMGf`*z}#~hGc0pvM=MK*m?v}UhK>}mO_^3{Bt1Lnc~!NRZ| z35l32qtf1fQ$%c@*u$A=)n^@Z+jSpFz07Uy=pOx`1zy-%hK)e z{v>N@@BH(htU^ zw;?}cJ^$9H8@6}ujK&0i?#Ebyq+`^SF$i~}qFb`0(Deer159Y-(5E{hZFbF%53euT zytZW;yo7kX#A*dqGJoxnL+>8p-9%kgVBe=h9!&b1D@1bK=e@;@Tu_!c__BZjIP~gG*KEu|tjsU%2ZhB-=s4C;L;{Pjfy0~o3JyB#Nd_$YEes`p2$ zXiQ^O!&0vJN6N5Lb=C7of}X|UP98lkY9{q?UIdmr^y-gTB)$K!JIOl)PDKUio>D`A zfU(AJ9F`#q_mes`yw+}206RxJTZW%r1DSt_VtXdd zEDmismfqF;_`vPkdg*@B=6ME*84|I0EZ#k1fIKQ1++V9XU`(KLUw#fuC*wI$BIQKR z9M#?NMxEyMdDS9al!n0B;+!cgp5BwaWFpdV4eYyXv=K(r!15%by|~^>S zr5V^Vu$bGe8EO<>j=A*?WQ>)Hg(ko9LQzA+wt$qTGK1`2T^e#Sx3DX&B*zy0kn;k zjiIRVDq)2uLn36gujOkMr(p|Sc{S72X_2~ik6Iv4)h;`RFDS%|@}cpT=gIF>Fqk{_ zZG)M?NnXHh(ysz{Uv!>orWf0i2JKO6X?RD8awNYmMdUz}6LQ(~OI@>nqfTTYGDbiB z$zWy8>BtMn&+6$YqNcLv-I=1X8#>gnc0?_no}lgPuc5~YtJgo=nPPkpzWvFm!G`zz znu9h{V|*xjn$><|J~3d7_flmqw9r{&$i30WCUk<~`vHev-pCjnk@J+~>>o9!+0^7W zZ^^mOGFF3sXMx-Z#ZmZu&R=ONI_0DZBan}zsS5FAo7v~;8SA~P&AD?t_mwYUrKd$X zmW1ja7=j8%CYNw8l8vG%6XlPJ)B+Iwrr(cLd6wJ=$+C+LdS?QR!?z#$8_&yOzOuV> zGLZ69?sTT3#yX^~F;MBUo|@^wUb^l`c^cT$Y4}nZ988`|hR8bUVJPfx_Uv9gkmS4< n2YSkmVG$-@aQT0ML%p51@}bw~aQ`{~kyy-4tc|M;?>+l34Dx?p literal 3831 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 diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@1x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@1x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@2x.png similarity index 100% rename from example/flavor_app/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png rename to example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-72x72@2x.png diff --git a/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-76x76@1x.png b/example/flavor_app/ios/Runner/Assets.xcassets/prodAppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..b8005ef75f3c2870718cd276a2f559fec5e7c4d7 100644 GIT binary patch delta 1237 zcmV;`1S7sjyUe*Yn0p}k1XV^4mD30S!18%4tb;?106!l`F}=1hdknufes8W!x3zkRe|z12k%UO?S>L?WAaCfr8S|<|SUl1sY~Kc&PzXYrtlJSA{ogyH!^Y~uyer&Ti2Cn$nWRV@2Hq~y zk1rc%m!iw;Em%84!aWyP5#|WnTNWb(Ax+|8^KO|QykeZa5p?2+kKy@jA~dYSAvZ!&`biM_DQ0e{<5roG~XAaI-v^cn8({1SQPcXN)C z&NZ;U2;pTo<_g~tEd;SM9d40AxajPol)oBjus~uzE`G?cL)}O@VP7R6Q|vQ z4hLMJx20BhUOlJRp$s9&xC${_hc)bQVA7mx1ouvKqOH{7tR>6qkVo$F2X?q^(wq+o zd4Fol&MbGsT8SO<$VDEV$;SzihpcN$_NFU;Jn_&201{`ka*^*pNEfJaX0c`bU}+SrM6sNFB8PZcZZ*yoWRIymJx zo%gm?uY8X}a8`I66335@SFz6n68cnhF9iD>?xsUk$h0IwrX~LaXt+sLl6ul900000NkvXXu0mjf52j?~ delta 1884 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 ItLO6YKMq?Ee*gdg literal 3294 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 RyMPTaxnpTqe*016e*p-*3+Mm< literal 3612 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 iW8 show ? Banner( - location: BannerLocation.topStart, - message: F.name, - color: Colors.green.withOpacity(0.6), - textStyle: const TextStyle( - fontWeight: FontWeight.w700, - fontSize: 12.0, - letterSpacing: 1.0), - textDirection: TextDirection.ltr, - child: child, - ) + child: child, + location: BannerLocation.topStart, + message: F.name, + color: Colors.green.withOpacity(0.6), + textStyle: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 12.0, + letterSpacing: 1.0), + textDirection: TextDirection.ltr, + ) : Container( - child: child, - ); + child: child, + ); } diff --git a/example/flavor_app/lib/flavors.dart b/example/flavor_app/lib/flavors.dart index c2632b9..3eb5e4e 100644 --- a/example/flavor_app/lib/flavors.dart +++ b/example/flavor_app/lib/flavors.dart @@ -1,6 +1,6 @@ enum Flavor { - dev, - prod, + DEV, + PROD, } class F { @@ -10,12 +10,13 @@ class F { static String get title { switch (appFlavor) { - case Flavor.dev: + case Flavor.DEV: return 'Dev App'; - case Flavor.prod: + case Flavor.PROD: return 'Prod App'; default: return 'title'; } } + } diff --git a/example/flavor_app/lib/main_dev.dart b/example/flavor_app/lib/main_dev.dart index ca3497e..e3558c1 100644 --- a/example/flavor_app/lib/main_dev.dart +++ b/example/flavor_app/lib/main_dev.dart @@ -3,6 +3,6 @@ import 'app.dart'; import 'flavors.dart'; void main() { - F.appFlavor = Flavor.dev; - runApp(const App()); + F.appFlavor = Flavor.DEV; + runApp(App()); } diff --git a/example/flavor_app/lib/main_prod.dart b/example/flavor_app/lib/main_prod.dart index 7a2744c..943cbb1 100644 --- a/example/flavor_app/lib/main_prod.dart +++ b/example/flavor_app/lib/main_prod.dart @@ -3,6 +3,6 @@ import 'app.dart'; import 'flavors.dart'; void main() { - F.appFlavor = Flavor.prod; - runApp(const App()); + F.appFlavor = Flavor.PROD; + runApp(App()); } diff --git a/example/flavor_app/lib/pages/my_home_page.dart b/example/flavor_app/lib/pages/my_home_page.dart index 50becaa..b6703ce 100644 --- a/example/flavor_app/lib/pages/my_home_page.dart +++ b/example/flavor_app/lib/pages/my_home_page.dart @@ -2,8 +2,6 @@ import 'package:flutter/material.dart'; import '../flavors.dart'; class MyHomePage extends StatelessWidget { - const MyHomePage({super.key}); - @override Widget build(BuildContext context) { return Scaffold( From 1402e9c63f83ebc9127940a54cd6885859aa9714 Mon Sep 17 00:00:00 2001 From: mrrhak Date: Tue, 28 Jun 2022 22:43:14 +0700 Subject: [PATCH 10/21] fixed ios alpha, flavor, improve pub score and update beta version --- .vscode/settings.json | 1 + CHANGELOG.md | 5 +++++ README.md | 4 ++-- example/README.md | 2 +- example/simple_app/icons_launcher.yaml | 2 +- .../Icon-App-1024x1024@1x.png | Bin 35866 -> 26033 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 529 -> 361 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 980 -> 657 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1479 -> 934 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 760 -> 524 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1524 -> 979 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 2378 -> 1577 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 980 -> 657 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 2137 -> 1340 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 3211 -> 2097 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 1373 -> 879 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 2617 -> 1754 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 1446 -> 907 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 2888 -> 1833 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 3211 -> 2097 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 5018 -> 3402 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 1989 -> 1302 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 3901 -> 2568 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1976 -> 1246 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 4189 -> 2737 bytes .../Icon-App-83.5x83.5@2x.png | Bin 4474 -> 2951 bytes lib/cli_commands.dart | 3 ++- lib/src/ios.dart | 2 +- lib/src/version.dart | 2 +- lib/utils/constants.dart | 5 ----- lib/utils/flavor_helper.dart | 5 +++++ lib/utils/icon.dart | 4 ++-- pubspec.yaml | 2 +- 33 files changed, 22 insertions(+), 15 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1e89b83..3c1d162 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,6 +4,7 @@ "appiconset", "hdpi", "Hexa", + "imageset", "Mainifest", "mdpi", "mipmap", diff --git a/CHANGELOG.md b/CHANGELOG.md index fa7b7dd..f959a8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 2.0.0-beta.2 + - Fixed auto remove image alpha channel for iOS platform to follow AppStore guideline + - Fixed iOS flavor + - Improved pub score + ## 2.0.0-beta.1 - Rewrite and improve flavor support - New flavor script (E.g. `icons_launcher-dev.yaml`) diff --git a/README.md b/README.md index 566f323..b17e4d6 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ An example is shown below. More complex examples [here](https://github.com/mrrha ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta.1 + icons_launcher: ^2.0.0-beta.2 icons_launcher: image_path: 'assets/ic_logo_border.png' @@ -153,7 +153,7 @@ The configuration file format is the same. ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta.1 + icons_launcher: ^2.0.0-beta.2 icons_launcher: # image_path: 'assets/ic_logo_border.png' diff --git a/example/README.md b/example/README.md index aab2b1a..76000c8 100644 --- a/example/README.md +++ b/example/README.md @@ -1,4 +1,4 @@ -# Installation (2.0.0-beta.1) +# Installation (2.0.0-beta.2) ```sh flutter pub add --dev icons_launcher ``` diff --git a/example/simple_app/icons_launcher.yaml b/example/simple_app/icons_launcher.yaml index 9502424..4ad7db2 100644 --- a/example/simple_app/icons_launcher.yaml +++ b/example/simple_app/icons_launcher.yaml @@ -2,7 +2,7 @@ icons_launcher: image_path: 'assets/ic_logo_border.png' # image_path_android: 'assets/ic_logo_border.png' - # image_path_ios: 'assets/ic_logo_rectangle.png' + image_path_ios: 'assets/ic_logo_rectangle.png' # image_path_macos: 'assets/ic_logo_border.png' # image_path_windows: 'assets/ic_logo_border.png' # image_path_linux: 'assets/ic_logo_border.png' diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index d119f4c9c61527e57898622f1c235dc511e0d1a3..df3b2256ac4510b07c90deca012f64cabbd11bd5 100644 GIT binary patch literal 26033 zcmeFZ_gfQd)HOVah>D7ef{GYB7Mh}hw4fe91p!4xqy!r%RiuPIpvQ`cihxK7f;15j z=`~mY5h2ohks^c^2qmP=d^?`!xxVZDAD&-4=Q5ehJ@>u$+H0@9#>d8ndMlT2T8<#d z%2Ox*Ifo#N;eQt+OBca^rqGfm1i9gP>YrohJ%z@*eV*Q6T_McR6wGwU>fBdX-hb}U zCFvKNFRZ=Q@bYH0cbogUrN@F#ir_4OPx-}>BNifYS_uDTai0>Ct{|+l~$@b9NS&2J-yWD0hh=V%5rID!#ls)k+UwxYrH=%w7di`n zY~3n&w8j4jAxJ>L9{AtYtN-uI|F;|e7aRYVDgOrr{{ds%fz@0p8NZR44t5RN(hPD_er(75id<{2&-Mt-sGNO_YDsmU70dWE)Vwv_t~q`+7Q6XhNA@DfQ?nL* zT=orJIep>wWu6S3T3KgP|HW-qx`FsKWD!!X8b-!6KEBdweIkAdYr5<;j}92H+K%gS z9v*;dxFI>zp8mDwR(3u&^Lq?&#feC)x9!oS#doJpS^ig5!SCx8^1N>E^|RZd^{QpM zl92bk5kGuuHp=-EFL2rfe&HTANwvUE;)h!%CNSq{dd~r8ws2S+f+#Jy!O7>PmU^hz zxhGW6C##;h^_0?rDaOm7X6B94 zi?S&q9PO_(N>P9%Z5wq2PQDKiTA3#}?NwBDsQ%kxSph z{&RUitfr!!n(Wtn$!nO_E?1PdhTo`?+j}756mEP2w&=uJIrL&9H~h&g{y?|3cYf0+ zj5%BxIhn;Cj|nFld%;)kMI__SB@GMXsk0W6GKPtG$3ADC#l$)Wr}SFcHMX$CF?gi% z%V(K$uE7t(LpAucT@@7(%e5_Ul-lykvex+Z-{it?DQ$yiTas#l4brJzzv~EeYWR;K zn*PL9wrgwrkhpE$D zN(Fr+HeteC4z>RK1zmU;`8q5rs)G5jXkP@;HhV_J|1@qa44Yg${p~Vm>dp(yR-%TY zwm*U>)>t1S*6zrCho%U_&cy7EAc`v_8aaOxg|L`(khJW405@iE-!6U2q%(@rX@yoVAZ0rm(;0T@~}~GSTW9{GH3DqGcq-Vl#TGC6W(r)qrZn{ zZ1Dy(*xg&inzXjNxp>-y^Y9JqSV57YinnjVN!-Zs+rx%E!J1QPu|K%cRzKn)&$=6k zO|M|foB7<})PdUmTcjaB_!arN2*?dL;+=1>G;>&*>GVj)dG?21GZw$~a?5_?VZ+EX z_PC{MRP3CXdm@6|)=A&vbw^X4jJrM_GK$$%Iz)3fsdwJ&*sCE3(QEJ%5fQfh&@uYs z#GLkhlU$>B_?y$-wzwCEdMk-r?*)%Sgh#3Qo{f<*j3_sECwC50=6CU1FJ$rP>;8Vv zFJow&U}q$R^j(FUIh0QSI``?5nH(C;Z@pB=E6lsX78YCPx~8W#$qS4Fc#m#<^3u7i zp#V)ii4VmPBaJVan5|3qh*voh&%8xyATEX@i8EF}nX|p)niKn9VD_UtX0nVWalnka zdJjCuc0MuhjX&r7z>vqZ|1S-WG~RTskY_frt{5jpGX7@5Hh|RQrV1zk0CSc~lws+8 z{k2mnoCqMIF7>H%-VD=@TZaV1xfj)68w*yHlOkgP%9l`fwvr5>x+7b78$jxp3vy^n z1GA1$L)kQzj7!@VkrmqbCr02(?cDf&ODgL~qw<6&YPaHGyOnHR1RZy{STdF`0O8fD zBFI)_+13Wp@P@`H9gdOaSpKt@J*Z+Mo-5_VdxZ(X=c@4dUK})IJ;4c1p#ilFtD)!= zqt;^ZnH=O=P&ZoC;M0Bh6}KbsYwg)|bPf2+=iyesx>alXnnG2wUP{chJ; z;uetqOLb!B2qYtd6$H5GIXbnDQ;ZvJcBD486Q?dON3>T%5xxq@Dc69%)m_6+#4nF3 zq8Su=Pww+mczGf`8fT0;mfzmVH!%eqcMr1VhZmzYguYLLkJJk<%As#crHKRI!|>c@ z`uYHS>3Ykc_Vny1t6P7+qP9PrXivYVPj8g2V9LJ4>?bPZRs6jZ1NTGt*wrv)H%~aZ z%%hDCtY=;-{)T7_r37TUYyJaCB!ti8$_nzPHBE*Y)=j^HGAi? zBgOUYJ(Kt~C*IhA?9#d;-Eos!OX)=_N)f{MQXnpHGd)$3)F@UAsmZErT5oSPI59c<G)^urHA{n^>HZ`eFP7|DShnImoV2@uxoGm4cbL&o zh%5oaoc3|P)z7QP@P)rZ(4D_5DQom0S@zAXNNfk4TBauDfs++aeI(1-`PI3e$p8P+#@Y{cT zzzbspd7p9#`;hpzCIP(k)|fl-W={)$O@iAS#$rbE4S06?RrZPCFyIL;Nj_BoqJeAR zX!a!=;K@e@3U{8qCi^A#!Xy@ApaWnIARV?u_XLFC^NX)E3b9dURk8orgo9*hmJ3#C zlzB+$AjIzlsPLiE!x6*=wA9_Z7{9|Fs5G+v2GMkSy5w`-qGY$D$+KmDaB@{d^5I(foK4wJwT-O4*GW*K2j}IXrxe zRNl7WB&>8Kea}%yqmQp*oy2djPq^n4S4`r@n`F#C@`Nf4gpds(hAJFjXF)a9u8>}d z=1D~16%SkR_4Q~==8(9O$8w~61B5}_W$)f|caj|0Ca(M;nx5vERLYWG4@5V;F}N(N zV^1TFxpfg%er=je!~v{iX8sa}xV5m>7o*>*O-Z+WZ|pi+3bpQT>5Oe!QQa$M5{nsb z%Rh~4>p%o2gjQ5TK?BwXEk;MGQ%e|bpVqC31DTXMNGGJMgJ}Fm&4n3kx(RUjMk8uT z`*Ol$5|c_UCjTTm#kdd18q32{_W-O!WgaT~sL{|(-5*dH5A>=t+duF$l&S{`L6GLR zAQ|MzSd#@5v*^iidM{HnWoz%F|H$s)zlmOQnnOOPQQzOglr_RzjmRPL1=A7&#%uiu z5|*!DUHAc#UB5YLevppl=5whv?L=coxckSyK|wdY2<#BZQMv_Yp|YOOiC0Gh-p|M^ zv)=Qh8~64uiF9&h5!>$FcE)8A=kE{EEE|YQ%V4KI?t(o`O5HjEx&~JFORp<0*QhtgqC1`r zuLa^)(}?Q=u3!7_Ag#Z^83`MAv9rVdy%JTq1jZzKZk{ONm@6T38fdA2x>{%cn8o`V z6dKXjkNu9LtzJ}b`j>3~MAZ5?q_fZ5HvuKh$dO0woU)~J)gTOktuT68!?D0+z`w?; z6YNcff+=1cqY9ieI@^F7tSw{^Uc14*D!BI#PWKf1Q+oEq&gTZr5~nskRY6u574m?l z*TU}ohTZG_o-jW!MxVCfT=fxU@s%ILS)Ebt4%tjEm=R48>di$wK1j%-g)N>p_a5zj zW*h2)9$H~i$ZMzQk_G1re8Ae4`Om^!bEWCUm&2DUn6|CixDo}EKGVS`D$d2uaUUm4 zkS}3~J0RP*_VkC|+*z@j>K{o%MzxL}3AsJY;e;6|3w9OxiUAYQ8|k%fs*0+P^l+Is z3eNSR;~l!MlJU;r%M$a~!~$C3nH}`^pDrtGS?CA4Jv^VsmD-)=oGVfK7Fwa6qY+-8 z0|e|hBg3vh{k02tsCpeSP8ICIxmJOdk3V`&o z`|sQ-l410I&Gt_%yTf+9zOTrfBYGEhxJ0**cQotO5%UYZ{7!sar;v-L=JQxPJqcl1zh@^aR({w#_c%e=Q_Hg z1BPfjWBI0oCwhvw#JpcGus|jFfqDshh?7L}z;IkR@w_o!N&CxuPvHXQyY*&_s#i%q z&nxe6pEPm*oj zeBi!145H?|GmE%}PO;qM%6BHtd52fq%hSl?FxgS0u9C)~O=_$aB zV=;;&oP&`u$2PfNtcD_B!PgXKz90?|-^WJW5<b+ zND5VhkJ|fr_MY@G$&kBQ)qI zN}+}MdTaJ?(3Xe6!^8kI3<{2@!J*)Q4UWD%7~5o-)f3W267bA~)it@(C-ffaO}!FQ(#e)v1bq zAkhhZb9)i(l^`$qUO8&kKAV%NHYT9-lRdewy*i}IJzy=}>uM;uKw`X=%RJskxjziU zWe$<-UQt5RYbfe})br~uV~9i0BBbd@%Mk6Y?xB)d;`w=^X)_d=Bk_NcRt`n-pu-UPch(agSFul!)w+@8{iU^?5_$<XX>ifPe6C{e++iAE8k-Q1AYjjJheeRr4qi7g;PGE;=&rGI=H!^3V2THh_zV{BQu+))xljod zKgYL~VZ4&-=6@#y*DK*=aYfs9z@^r`mnqQllnm!*a8&#i<{PNp#PThBk@9!mZs}Sz zlxj_k5O{}$ss{V}9q>tp$kmMEIY()G{;g!SjX>GnDx%v5DEp=7MXk!FS&3pb1X%jk zb%^zsbu50SBpq)8;EjQ1F4)iwdgH&1&Wfjt5QEpDQgs+B8T0}PA2s6iCo2xI>#xWc z(>;3{S@8tE@>Ia=VzmlhLCYhDK8V5eR;$XAc@itxGZL(DVo+oE9Tu?U70=a}@ z3tzpkP3Db=3F)JZq$Pft^IZDj@hu=ixhN1q{y$nxTeb2HLi`&T&(v z>^_|QhmN9~_@j5>4!2VVxSsP?9H$yGn74(1b{6_#tkBnjL`xhyaj-(@sgOR z>)LN|Z<=O}iVBdyr-nkV6@>U6SZFSUc=HS$U0eg*1cAadqdwg9AKQb_)dh~R4_c9s z^dnm?pT2k`h|Etq5sN*-I#s5!@kx8i9LQ$^_H4Yqf(dPrk)iXmo9wTbW+`(%aDuC# zQ+*oE$kN^gG)m>7G)sP$Z3i^y5A9ybGUrq=!Urb?wdauKJDkk0*T<0^!0-nmk_R(0 z4AC0`QZk?IuP6C^Y#m>eYwooxC?jSxTp(*934m$W!hvAg1CBtuA1jufp-vo=L)}%1 z>g!V{J8crtfN5i()uRGJ=TZVRb(KoIAb0R$rK#Q@KqFX$?@Rd3BG$zafDRxr)|zf2 zT~cU39U(K4M~EwcCK5eA^2_eE=a>_PDq$xocLarkG@+;oc-_#(QFpsXT}RmsPeQBqAL$6Nw|Ev?)q0t ztYFeraS2zt=t@ykGR``MBkQ3E>QT_ix?; zEl}lWH~vW3M!u0cB(5C{nfM6qpVd4YnCO4Ny9-bEPwXXqf|X%Z)HL=M zR@RR9tej$9XA2uc+pgpW)lR+?1){k_t7*e&j+9bbC0qxxg>}IXX`<1gplp0wBKltN zmp=r52{NBG6tJg5w1S2k@>Rt8ty&Zph8Z<>UPK`K3dCWrJEbS_6PH2H5k8dC+qkkZ z2DE$ReAFUjg$}fj^L0>SR;uzt4w$wamE-fM8&jaVF6`Ovk8&(5{7n`0H;#4M34>dnBznv zT)2xLqIvcSmdU7XjA0S>)L{@1k709#O(3sg{}UOmphb(znWENf*^(<)=q5}1UCW)m zKeW>bzjqlszwN9VMt$j76GN=SgmwcAuh5QtNi9<2hlRas2R$@u(vf3wU(Rfxi@5p* zN0GsU^W6=lVElrhHYJMB)nW4JabvBCu@m7$B($1kXKnOfy8~G;{7I;5!R)@=#_#QT z1{%R13bExcG60dTt@Pq6U%th_{{7XFr4v|M==KvQaUZt)JhY|6@V_J9w@?QAa*X1F*Q|x-bMv`h*(abl>p@x915Hj_lB6oN~0yAOAeQ3E=i6 z#K|*&SjF_6KpLqt-DvZdgb}LD4Gv0~6<1=z3ETd#<@=|S2a<=3miF(tT=EA)y`ZU&fPk!cxG7YMFZ`3A zsF{R|Lt$?MN@rmO11G!ef@$U0pV_F#I}~Cm_gKS;H+PBO|%Q{V)osiXrAokyN?)a3vJJw_|PzR115UrU59T3`^>I z+Pzg+en*Au4$uOZLV6wpZUzm5U~mT-?t9;PMHb1fm5u|1bqa2fh-eo;J-?HFNzfon zz3XPt6ySe2z$5a_F=VlUP=Ge{901E8WE%i_?R$947LUknq&*oDM|O!I$3d8M&Ny6F zVDS!be-~dvD8x^XV?u4vs@(;_pt^Y$gRW4JI0`8I{hqzZ>hQnqPyy?_w?fb=Q&464 z@Hrrk{}a}fY!vZchb%pr#q&yZ!Oy)+#@nB0j+suPe#P9`*+!fzZqo`I4m5f76OAhr z3nS{sXwMGQt$DG0s5l@Cum1P%^akQO*{2wHy3s(rho^PS*`|~*KuHJ)+JhLQ0&PFn zC7wKB3-gBQwVZrsaXQtr7335o;v5q9N3B#Hg#u~FYM?^WJcHo54N%x*mc=vkn=_*h zSYoORy)R0m`OpXiw7x~O9YF^l$AKw#KNEj^CV_cK>d285LKLKR%i2stkvQ3w;FeeW&e?#1M#-}<$U3+2wFVsMBXW(fTFz(IPf?d zj)ncD8iEVDVLlcE@$MrK;-)h|7=YJ!ld-3F*k21a&t;GhkK;lC9D%}R589WoZ%gJ3 zcBONm9T$ZIZ(AmU*lma8$$N+2%+EU4MM%{2|J3XI+l<;kL^_iZZJEJT{-B^79Z?DD zCT=UZQp63kg6X4>wH_?=-W?Vt8K3A~pua=M=b6h(yo%u5Sg`Tqz_UWr*Y7g2Dwv)r zw+FJ@Z`uMK7yN8-98$ixW(O83eG6I^D-Yb@Nx>xyGA*9~$km_aT(?@` z<9Mmysz|sh$pYIfke-K~Val-I$@sr)oVqIf(R4Xt@Dk`{UJnev&DudUE($C;2)tRq z6(t6~FlD`96cLUI1DuWd7;!)G-u5twKbXW{0WZ!X)(8J;ZJbDxVC9Js5DeTC@zb5$ zAQJ$YEe;QXpv6=W+Z=xCv=qY;mV3Q=6 z%Mc?9#;FZ*=zNBREI#kRM9W@Tg*wfAZZUZ8v5wmG%wKLoP9aG&zOI0{c`0njg;u(5 zNV*iAT6l|XVkzu<21Yxo-F)K|Bkqs>LB%>l{!B!F>|vDG{Y`qi{q(0FVb^c9AKYQSjiw#uAg<=x)J6@N?~-o z%BGksZ-ZVtqF?O2@#(WgAPmEGFs7JK4qx4TxI7}s0ROCjVzuq5MAZw6alZ!q`Gw!( zR0G_Z(mtCk{q*%BWPRAfw^bLVNtX-_Sx!8MZx#6l`)>3peyS-!{x~Ny4KbtYC&}Ltt!{Y>gfBM8)_(& zWrz6@;9@8^FNgk-L+uwUZZ!R)!k zWrBh+9969!IYfK(bSy}2OgAm2zmirg71Rx^?@{K+E zFQBfjgnQOdXoo|yBcZ8+*(vb|OpAMLSmMAjwRgQ@aQv+IYIZA3^0Ii#jzwZ$OJ+bD z#Ye}Rg!QXobn|+Z3;SyuTvsLe$=qfFdke~M%D;cz7IfG2{&5l~^U>R~r7DX{xGgNGf*-X2_sY{-@~1O{q!sL}RvMGWypH(n6j*GTZ>;G>1Q zh1>{C@76bxoeRTsymz799P>ODw+}8##+b>48^wK=oYDE$cfi)G7iUnQ4JLSSY)h;x zv7eyl?9&qpaDidB7YBe@X9ah?C$Mc{(QIonj@Ebbhv{evjdNrClhcd;HHAcG^8$ZB zI%xpkAN1z*o#QlBva?Y-`c!wO5IXFKt8A{s@*|4zhv9lz+>ocJ!hwFp0!ReD0jpIi zn_LG2(Di%48RFG~-brZV6UkRtMibpi-O%4oh#oh<+ry=aVA8ne;>^zOI7$Ul_!gM- zhI`OZ3g)sAlWcrV7faFE%I-SJ)vI3Kna3maHhBz-p9ern0ALXf zuS>?ybHvM6Hg;?9sVd)xj4%=0xz5n<%2BU&X7c1GF&alRudmYRHL@IeTE}WhFw*Q* zjnEM-86z9$viF84M#J{uMY^{YJtU>*IE$jVimw-n>D1{5|EbAn?&SBXn!LmF^>KmB zy&<*ls`cTgSmPE@n{WBv+EpEY(`kX__akZ`w_bjdS2&!KjlSL>xD$F%nqOHzFRWj2 z0u|p`vG~#3O{S9yy>rqF0%bnAGeMObp^|xhG06)W)hc<^I(`qhX&TQC|0#sw{>bm4 zS$c5)Z<3lee^8Nrl~G4giXg&F-Bb?!w5KTV%J4<=%tC?5;8X%^-;hk7rE83vmRgSi zI4jy!&j~GYdK%ft9H!9@X;IHV^`GC>fVVyEljxn)9Akkqr8}sBXs|^Dsq71nti3jK z7FXLUW6gNK`fyD)ZXH21b7tW~VQ#s~Pi*Z#CfR7u7Q=;o3B6Kdsy08X?AB|N(3L=7{!2izNks0mP+_`&_-Xcs}^qbpoi<&&nH7kYT?H;zWZVV$GJ=h+BL%rY`)LrMk0~f09;ifXPSY z-U$zYMF-9GV$p&-W-WX7MH! z12X!@n(KEg2@eVXxgr z{|QSc(+{7W`yceQqp#^iD3H*z%#uXDnq&Wf>w-MjfHusjX?MfTbZ+Ilc9xB_9rulo z{NNyI9=BKgl1zSrP%?gpg-4puFWb7&DfJ*=`v1)Kf7=3Bo${`;&^?2{eY*vlu0uJ2vI zvUKZkn(x8~o@jxzbL^yVpS9#24tVX}T=CsjSvo`mM_aFk9b5P?P{G9Y=5g(HmO&Mg zDTNye@8^8(rqLhJonohx}HRBSeN zSbF%=$gl4Vk>v`!`L5OT%;6Wx!I>q`qqDi0FSq$^`$NaU&G;9;PyKhS6`XOT@woy4ZrJS zIJIYp(lqwfO3(wD(15AA)!z2reF2{A%MzGtUTb)X7I-PBA0cR#L~G@) zA&fW%`ik}@lt&POrK#8^`{V4LK~H22J;&WF9sODuS(K-=TGFgW)E;HuP@szr_-Gj;bz zJWWK~LjU5`%=gGjLfLaCH+gjQg9R2{`-IHz5qOY}zirhu&*o-}-EVSbsXB7h`U#UhnG`Z&o7fX(-zE7-r{fLq>&M8qP7c zW1Hv*dz}HBPLz#28gO?J;(oj4=O3AwdZ72}+Wl;#bG0W&F@i|4+A9DiTmGjV_s-yK zQ*L)qd#CM@nAK4FnvP9B{piof zLtKONMRYqfL^}XEBPU)FMLjELgsi~nfCW=ppV|pj zV#B@SN}>Ol^oZX+8U!f|)fb3s*HSXE0e|G!&F=+zj3^i*aZXN=?HVn`(uWv`XbGWj ztzL35QQD592wR@mlkK0GC6SiP9LFmo|BA)nTM8(umOy)iCdc`k`ywy;7DUYWvJ|^l zPYI+msz=7OX!6U8yc%mtF_FtX!T#Tsz5f{l}Q77QBZ zATS)y5_vPxmAe6KfVH(-VaS>LK4GZ}A7vKP+dbU)pKoTL)mW?W_+hiqJG^@% z7?Ro4!3qzTf#hUAAwjpihsh(4S#T5dHi^qgna6D+%Bl*ehpl*CuN0hFBxW0WGhuz{ zX1#}h9&`$AC^d~BDtCkVHvcEgv)iC*FFGjW-b0Slj5(w=NHv84Wqz3tdx)mUYbZ5vXmi1)y%IbQaq((C%V{eq2JE)D z9U27z=>w{|jz`H28v%a9(BNF2Hn^f+7vmRS@#uF3$duD{H|j}Idsoeo-+O9lGoU;; zxMVnpop*WIFljW&@Le$GzL_fP2n;kq0*=SxJ%{r*3g~O$MU9B@@qfI&!JKf3&pZe~ zK4q3q{d<&hqh@=17o|I|LtoVCn7&zb6zeT6MFY2-EGD|g&HVm4A)Q>hwH$#VM;ddL zQtoR0F~-I#*%#yymo^puaF|5naVN(+NmHb1JN1rnzvbe!I#Q*NwHvyM1AX10$e$1e zLt@h2%wiIu)s=T3UWinZu*>zg=fwrGkwdFn zlNSw}Z#phe+!`ltdYW&A{?-3^S;5io-T1sXrWh}5(Y%GK3%RllhNZeNo%h%Z6+LRA ztMn2S-S&&T${xbDdn@UI$vDyHEsP5Irijk_PoZnfb1F(t3FFe#4 z9j#b!Lbp#8J@umRL@X{>2$Jh(<3=3fOxOtDMO(Tbs`LL|@M?Ziq$nX@#LlUbJO5Ec ztwSH*rif}yPrz&7%1LaWv;neMX z2I1RFyOXxKxk!)D{KB$W{q4YS+F<>$@4DlKf67eEGnRCpJuVn`f&in`h=Ou!8@r{P zX}h=(O;gI(4kv0mLcmysk?(DZ3Zdq_)F?fxAzP4DD(B-S7=A(@4U!yS#gF z-^*)~vS<<~EmocHb?0P$`Hbt>m56k3+i|0#T+#P14_o4(w$Fdna|J=Cm_7Ffa?6Oz8Tiwb zj6Sa#uv9?zZQyh53PnEggaiYwC5q5k+8kk6JOU38MR@b+1Q;j@`*)cB_0t7K9X7)( z_Du~7TMXXr@WVgX^=j5hi|_j zI`W4w)pZ@;Y`s-r*GQ3r5oh#tTm`~B`=&s5c>8u_7BHI!vP_~z;P zLHL#`33wtO4*u)&Rrbto7Tgc~LnqDymAAQuWhTy;bi2rI6otxVBTSo zlF&kYF0u4(69cKYa5*q?bA=rXZxn@+)DKH2KAVK29FU4+)Ttt)N0q*;`lxqRdOVn&4d_+{&UuXvv&^fKaSJ#$;HTyhEL5kiR#BaU!1mr^%Lbs_sTOQCRuuDr>gz z6xiPa((HA>%LoZJ%K%YY^hSV;bwK7Rui+4IQ|iN7F07-Yi7vGKMqXyGQnQao*euc5 zoU%r;svc`U(7W>Tq+rbE4nbZL3$^nrKM)$WG7NWmKra0cPT zfrCG6{~Z!AC3SR05RLFkh3Co|%Dy&lMdL$*tBeKv1yj$Z|1LtN-W!6e11@_g9gnMq z$!ski97bST<^$0k-HNt27mt}y!)~|R{#zkjIz0pAi!AVd8^g+u!<4kw?|mDedgc9s zdIP%NqDknFO+w^#C7JR`!qRYf&mfvlWZoSz(wS4&ZV?-$Z}new8wgl$J8?CH-%?9R zz3YY3>PGA7=#ea5YDTT0n@##ckfu{0M*SY6&;u8Rq()vKrf(Jbha-#g(FgD;omoyW$^a)&W(*zw|jWcQ!n%g z)j6(1UD{VEMf?Ni4jq95liy7RU+GmvD4IY{YgYY&7bL~E`~;H+%%Qbck7H>z#&l{E zYIqyC1WZ{Az-W*{h2dmFCqI+?4(}N46?40p;Tb>UGf(!PjGGm|y%F45u4d6Z7uV57 z;>jO^LmD{Tb`K8%(RAGVkh%ol_TeY0&l&C#fFBEBGEH5q*7%3v62*9jet&`bdg{j( zudl3F{*-7Yyx)3zm*Dr(op>4in7QEVx$^whi;E`ww>PEaTwY zv;)AG_^0P!6u-ZI(x72MYCqlP$YjWF>#x$d#YsGdK8%gNv8C8)`Hd#9@Tq*fCmrSf zN%+dyCA1r6vP~9i^-#a08P;&nIIc)KY1(PZr&>RMpvF-Qvjyc1yTJA7y%lqL(#fXR z4}%#;{k5}hV-I`1nrOhSfiKNP=#>*FH5leQ-KwS?GaEr{q(MYYv?ofbbX1=&Lig3G zm&b^semKf16Xz|ItU^A9fsc1P1HnDtsy=HG(zQvc!p$4;KPYd$hIYi%-0bDUao?Z@4hZ134tKO6GOksnJ8bKx!ajrR@m3k;r zO=%{^)`~|c<3(_7d$`%o=D&mxkfN6U0)-6kJ6YVFC9>&b{bn9Xi!VE^LnpSg;F?5&umr;qjQ40sqf(6cfY4Wu@!I%0 z@^td1>PA}WtTeh%8>!35@5xFLM&NzGfZKeSF7!NQ_TisuC=0p2(Xr2XB8pD_8lOov zMSp)Y#YaqueNM((ufrzflnDFI-h9D#4~W^M&tWK{3Pm%rMW6%ehrT<|c*(Mp7bc2# z+xq|Rj$N}vP)(1M2Xa`#=Q|R?sypYQ5jJ_KG{QWNzQ@~%J>E^iYEFs@d@D#aRk}&? zrn;`z6ls*ghnZG82q6inZezsT&DnS>FEsf2gfzB;PVwUEv4LSLvpOP;5d+_vHGpx_<%$evor>djzLFCoNC@EZDUb~y2Z z!rYXlS$ZbBt{LGI5D7Pjp(TG4c{+5b75n#o0y;9r!uox>#1;!)-Sh-JfIw}TtVFTn z@xuRHdx9leaTw9Pd}lLkoYRM<@kr+^2;R5n3;)!R{pixcAw82DuV||R-nK4G7mg1H z?P*);C3dK?i(pANqXzHXXv|TJVIU8OW6ia=(+|u1aYg(UOBe}+H>?!q!`sIrB#X_+ zql*3`!$^Whq%_fo#TVZj39eR8Y<4tLV}YT?s_!f%AWH)mA-A(M7GWa}!%~u+x4Jy9 zA02fg;b*hw4)ol^N1A7Q=?si(#NE`_j*{4npX%DSNoTRmeah6SNvhvWeIR}u34?sJ zuqqV!Q51~&sJ-V)-W&%-W7d*NJJQ;6Btauad>hC4f)-)xQB`v-f;FBazuFk)V&&^g zZye#?ui&9a90DIqG|%EZR~TD3-Z%@BnK}v1^BGTU|GQHfAsiF^o_MO^^)12KnQq~c@kSaxh`Nl;eZ|%b zRUU_<(7YkK@X+~mgDSg~_<<&wvb~<@JrP5c?#1Q{dzi^lR$aNeGp+$lHbRr9@F#Ho zG+%ioW7!fr_@@=%^^HYkj@~oFQVl&^p)aM@}ay+V(8SKip^ zPv5wht%??tohgGSc6N&`ZUS4zM|rPt-k5R>g>=)XU-`?vFs{BigLe!5F@dqnoF`PD z+*I1l9&uw0LL7A7{|`(CbU-lV?GFivmC#r%)h&2KDY&_IdrQ@YQ|&{NH}SwohQ>_4 z03xYy9`HhVdEKCl^|@FHi_dWIxn%4*yojGcZRp@+^giLO-a6VGPiOP?@5 z)omiIMH3%WA+kx`OtOE!w+!<4y`g7AYo^k(V{nhR-6!Mq!qeJ>-ltM|rzrlrxpk-< zNZFuz=@02#d;h}Va1wRqXApJzVQ=)Ucj%Z*kQ$;?56NQrL%p1++F(WNA1xuo{jkMv zaEy+q)0Ju0aRyGF%rtb&DUPWe>t0}Us(1+{>-OX`rn+Vn)A?T|NPHrO&rcrK&B(5k zxNT`z_#@}c!O;5!>EkxSy7#h`{(XL3xbXSo)lcrWtw~$2eEr}ykG1#9+qP#P+ZxCe zsy%%&Xz|q}+b$lD-u5EqxA2Z&N!>WJr7jN9w_jZRaOslzBtxWt;dT-!tUX5kkAsT;W zs68G`M@tU2b7?lp&7*@sM;jVNp6J}?6)F$la||org#l9^L#1EEi;;l!kCn^2O)TSH zOdIrkncA%UhG^1=?xI9#7E~SBT45P?Y1Q5#bF@mftST&oDzUfx2 zX7C>c;~Hgc@s<3QGlqEc9ul`SDbHxL@V?-}QkVVKfeOa5$vmBPVr&ZqbvMsJS0n2A z46CuDpS7LWz+IEfE#ua`p|V3s<3A~3455)rQhU4%r$$vGtfbX`!?$RHZ|yAMtVtXb=_te_ew)nHL6y!HT+rh=HlUc%T6u#frq`N8N!6+AMY$e zw1d)l4!^d4oU>5M85e53trx=k^_m6Lgi{lwPMFH`mPq7?6G zDn8_1C$h-mL8=odq(ngRwY_Z&NsVVyvE5ql!Wgg9vzbv=Chw*jnv$c^Z*^V z0nGtDf zRPCQ6tBVJfsSag1&tqK!U#?JsEyAj-7Q*?6_UJMMnPBQwT$b7sx;N)KQTs>j1fQaA zo^crc6La78LV%?AqVly{)_g2@b|c`pmg&Yls|YfJBci$!kdrF#FAiAtuep69^-gQi z<2_M$RqKG6TjfSozw9YWWGuG77BrXVq;a1&54lGZ<2H8Q4Q=_g$TBW*d|6!%b=5kO z&bA*nmOMG}P%lrTY&b0{10V5e&7YGH3Ww0XnYrIIf>Cft`E0Pi+acwHJrilSLcChA zfxu!dFB&Rp&FuUW%~odQ_5C45lZVT_h$*%Ci{6{4?Afhc{?LdDS=4_N&)Z^(szn{bB1WmA*wy<7M>9_hO6RJ%>~A zm|j|tb-umCUxOm=i{G{>`7|=~(YuOQOEELzUjE@15au5E(zJQuo?55Kdxek6+bA`X zqg)}kzyLRhb+zl){D|5-#UAe^BlFEUU*Iw?d94`IO{tXWoq@aCcM4xuYZAG9lVjwc zRxjf1IZO+xcb^nSQnw?BTb;W8P;twRAI&MP#oBL(LHb47^%ZF>8I4H?Xc-HwbLucath{P@BWIv8v&R7>hf#Lj#oZ1r}%)%$tCoYH3E zrm*_?B1k6kw~bqmO3#XZEp<^aKFA-g+|Rx@9EoL5w-t{^!6F`TMaYv1%yqy2u*|2w z`MnjxU8(s6d2WM)Z87)&+ZG$O*@%oNz(d);%sv)WIO6j)a+a~o&>Jr_wc3l%tDIsG zLrF^caxEg4znEz@N{~ShXs@n%QoCVDO7-9#?9KIj?K~azm!=2#Dub@=DH~!oYO>hL zByT`Ybo@=tMJyJn*#W0y5-s%qwR5F^O#}!R z!6(N?Cai7K8#^R@H__2?x)L^6)Tq(ie{qE&{jH_u?k|<8!*G{7ClF>nJVvir4}t{& zBrc3c{+a9;siT{X6gqiiuZ*GOu*fF^vQj@gG>Pakqfkc*-Ek}(GttX-$;uv7DjQI< z&hYOjGhe%32hM4sHW#Tqnrv&JE+vYm6)?GY2r4=bX6j+QVe;S@@lK}tfe~5MB#C7X zXIXV$xX`ttVRaC$Bs8?WseIH06(^b`bH-#CIDu5G-!-GOUJ0!Qq~A`(7L+Jw^$sarQOm#)$` zKm980^6;9=9~AnxV=geHIT|A0)_cSBc$CF(-lCt9XD(NX1VDn*A**GC2zoIW5jQv@ z{gqY;2}@IY6VvR!Ugk4SOECx4BIud7F%!XT^t4?Y2kT%u@9kU796~jj|i% z1N9nE7!88bj-JBlQ+ij`dyXuX3`o)bN*+&^U3&Yqq$JwB|Dp*-^51W;6Y6QMu0s*y zZwBxp^;n6XyDk$8fNgZ$@L6$q?x@BAKW@-L*xiCrPLmFh4}0~-+pPCvDXQ_ zUuWc6q-G>`N)KjdDjqcv+f$;~6r;bn;4U+_kZE#N+8g0fuBP}X15CoBZIHQ`w6J!n zRc~nJSdtyu(G#npYZA(TFtE+MzxY9eSzMld`FHNjBiN@RgI1lPMq~CW+^wuMWCiL{ za|A1EsY^_}B2uvmnd^Z1$jH6}@Kk%oO6#ss6>FnZBsl}IX_zzA)^G`4#Fe?aQaI8> zEVsv1kBxvl8Ky2Ea(UvZLXdB5HF9U%uJ~hNAuBV2PPjZr)pBPR&3Gn;bcIrDi^@cX zPIFLEDWM0;yGrefgP3L@k=v{C&#k_fLjhS7&PMuVcimwXb7X_;*L=>`K}z3AqxUAq zqk&Fwj^+|$YTUQ&Em~fJo>CQt%r~k}2;9|v(D=*0CEsn=&dS7>^=hPeyYwsFHeVuN zk$8?ujU12t^`6M8ujQR**k$pN=J+${+F-@Kk+8z;5|I>gSdcJUb4D4G+aH0}7bP+} za)V=uE(zVDSbm*`d7|*QQ?Rie2X0G>=HSgPU8&7Pvl>Li8SQjJ4{#a#Qx`x>ukSeu zenBcLBz(1EsIZ`5K_`X0GWpcvAZ#TSXHkVSXDeld>^)g|nA=>bVe%!jvrA7$J?_Ju zet)T*8`Jn0Po`vYJjnJ3dcFp67NW?dnV9x|!SQ;MVV*E&8NtC4zK28M+|AO3`3EOh zlBLGF!vP6iU}@xMTe&v(=fnCvd*lPZ2-em=JT1|%$WnJ^d^EbY?KF*_&knX{y1m4g zNQ|6hXAi;RuD{V?;~-P~%0Ds%G;!~DpcF-x%FYrBjfJOl!?!QmBFRGJkudglc}-R(oX6+H_EBr5trMseMA%=#5QvH0tHUShvwaBR?yPTwvva&5uPD%jqnUTs)e! z4_%1@e~0mF0C@1FOQj)b81CNf@143Dj`mAar;zjiy_;5P_dpyW{n5Z~9B6M#*10YE zc|akbJs$C7%^Y>t^_m7VZ~W^E{C4ZWP0v3G5Nt0BcL_fJ{C%F(Ha=2f&qwl1`dgQY zm4J`{-aE!teg5Rcy)P3sY@VUb%V*#9!qKO%E^)7u6_5I#M>GBTH9;=twe=5kW6s4% zn%=WWezwwe+u1?9`7d&ic^p*RBCE1Y#-oPLPq?CRetwfmO5=v}dy-qlqO^*!V(Ymf zbYB~b)E0Uzh<&AsmxV3L1?6Uh40Zyv&9g^>=ce)~(_(zLWYjZ()f+;T`E2fP zyXR~qg(_LVR(+j3rAT}f7erZ-n&G$H0yt1TzQ&NWbu+RNu9h*ZMOaNB8|za2DYHuC zUlc-t{^kD;z87I{NlloU80G6F_D>h(6%EyaZULQDwU&snJ$vHyv%msC`>1gICUJjI z-6#cO9s^%?jJK4d9pNZ}(%Yu))z4mP&-mbt6ZGr`vAe*8#@!YN4n>Sco&;_-jFgU% z3l{oDjpq$9&w$~*VE96VPE)@GUGS} zNJ+xu1#RbWpaF{35X98$hU!S)TJJa(Kz#OggS)QkO$fX?50-|GHKL%m)NeCRqF1iC zGbMvefTFro_t1;26>9{*o6~%=*gn++hcZ6$>om2ZWeWMt5+{%Y=0EK*=FqPe5ai`z zs_;UKgwt0{CiH;i`U1kQAlFiQD3I!};3?{hsz+x0do&3$@_pFAE3pIZ0)%5&I5i&? z#x7{g?PzUkb_(nter4LV#l-<%!jxnb^We8Rmn&ZfdRm6U+EA33xsMGH2-jsUS)RAS%Rbj*wH)BE7>pYOi)Q_QKYz}oqj9x#oSfW`hBJuE3zUW7)FgU>*# zi^S=lF7yww?q6p3eozRAisd+k)0tTy(tT^#{29-tydX-9E%N_;4&$36%{kPqJR)h% zlf@Yi%W+nz>bwr*H=}OifnPeo;hj0@dcvD!nsl}s1_kQy4?_1@VovotU~hu=C{WtSov}o z-J52fIjmw0-aJ4r8GwqLod8H|+3K#V<+Y)qUPQDFu>ZmU!sHktQ%%tfuo+VrM&JC( zI8+|h3xK}Kgqp|kh~dR3kEnd!Yq^}%F;<|anfCY4t43_=VY5%NZq8_dn&NI?7<)D^ zs=kRmd`~@Xx^)u$Y0&Y9Fz?xop49n7`>`T5MPEH|i)EI_xef?u&@WvOY$i7TZc3p= zYy534k)iJimn_tG#zEG2klMpG^Vsh=Um^3OSd~=9v}jW=Avu&TcPm`rE;WO~4(k^I z5+U*8hn3cNud*-x5HS6+t(qv6gi_H#S8vGrTM*@p^+D1rrK6??2gGNCX`!e(YqohX zkwb)EX&VQ8$fb>bwTE|0jb-Qp+59g3)Klw-7dfDKr>adzyR)Yp!_kW;L|CjuYN-D&0Gha z1bR8_EHRw!eEkS^_Dv`Wr&?zXD%`=pN_UKO=)AuPbvsI^whB6NN85n-scGzm!938R zc`Rv4K5`7i4_4k{V!Svz@1&8tb=$TafoM}#Z%*OWj*~3|cI$$bfs*>O0^UsqUA&oM zs+12VZXFLys$8P%;mEP)T&uE;lYySSnuSyg(-K^v8-bT@qJe**_ZWRYd6WEty!@-{uDP_b)$-kqhVu(i(f+c6{`kVe zsfx?}CJMG7D``6bPJZ<5&-rBYZRwIF>u9Y1qsbsC-*}S?k|#GJ(5sfO7E5dN+ADm0 zo$$V24?>VO=tF4ahvfwMrU9g@3&L`4Zj8mCPwN@X`r4$2ZOmQeR}vXnxLvXp3%E&G~n zL^y?{EM;O0rNS_>4Ks7UpX=87Jm2p>@cj1tRNeRcelOSiT3*-dx~6LuW~PfJR!CqN zws_y(T}Lo%9{hD4CcXgvz?HSGVAyr`zFmJF4WJBnOW%C(%|V@)ikkMSGJYm~ytgNR z*|(OJ>GQ-R4%gkkiA(+dsmxhkBZ68~-F|}0e&ttT_RpA0`XVbaE6Rq2W`El`{$bWD zCoy&J#HTBE`XT*JTI{|er8;|uW7#7gOZ)O&_bk25$=j3g$aSqwiXJF8Q(4>P+)&?0nLxa;7?34Nd!~OFD?CewZvhp%+S%`l}GV3 z?sdI0s)y=UiNhHEZwD*nf>3bA^yq8*iYnP0`M#o?E;i-#yp7Lfuq|3)eB-gH!GP}H za;)lxzCKdqez>~>`Hqzp=Tby4?Ax_bws}4CTEO~{(`QyWux@nXQJuPDv*qg=qvQ;B zyxB!bJ`t$PL#rHFvN@wsokRVTUGEkPj20=az_8piom1IX4#U!~BySpu6Rd!X#*WCp zg3xzFR6?u1_w}fFCZQ~YVLET$&+FqCaiiVt08UARo3g~(?N*;7?1gxR$SWPn4=l61=OharrH+#xxesR+?DN$qtVQ5 zxe5}PsvM2WlJ}kt9eH*sYFHG*GS(alCfqBwuQ=Drh@1}3U&lZ4(m6wBK7Hx;q8YTS zV*8Tk9MHIo^@l?I%0vQ#<_Bv!;!YQ;xoa`W!@(O{LQY>tVpsHWkk91%c|S(OM(Qso zU7c=mwJAQzjZ?cPQoZDr{K(sYAiQF`OpfBBl~N#>PbmvOm^TbDu3s4JA0zhObJ3RD z_UzgdOvj|MH>peTVFmtD1%%>!Bx=?gJ{xb}IYz7vrN2CkDbO7=k@l-0)jzqgtB)Bm zneW3cPuEpUQtSE7_ZE02id4%@=uh)M1zgc62R*>YYsILM=CC9x)$RPT|TME87JpkVx=LxHC@ZRqw9ylBUUbg zEy>5IxuZi(-ni1}Xk-5H$yQNKt@-rpSG6A|Np~M2veyT$gHiU!6G|_ddf%yTkui?j zbOf_bEqP5#m}FFb&x5zQt51ncTQvEi&F9N0p1*xGr6ijN-}=1Fo3S!Sd3W@Dkj|k4 z%gRho)bqXjg&%D06fqD<&hNGxFComk)Gfw8&4RBkLM3<$QlBlb%1H&iexDq4!<>*Lil{om#-_juT~2 zdq!X9d!~P<$UeF~pWd?v$7OOlWsT)vzk3Fv0xGw<)~KZSEx3GF3wxzLYr50F61{!g z0FJBr-;`^;NTz@d+BFrvTiP{7(-OOCepJqp_~TzgEcF{FfjlZZ#U(*CX$AVi7iW?Ld~2idG=#8g?Ue^O*-z z^LbxE3|Ze_O4h!T#RBgOg^llwdq^j*-)H5V9qe0y4DJ+f?cF7d_1%f_J1d~|P4@gc z;>Z2V-Wb%~m~pnbS7|-rw7}(r1Xh_ypx+%!eu=2wF~OP`kJH0_j+lwZT@^72-ZAxx zNqaTq`|BdE-BOD~hOTc%TS%R`@+l*aJYV14u_;Ew(6RZ_N1uD)9gqOh>94DOgJv`x@m%($;uKw@Fuf?i8v|QS2 zY;#X}ZJ^HmjrZo$9eJoRz`<@#OldbZQ-rY_@APbs+D*^X!X~IiA6!M*F$;T0~`9B!ZHk17NuUD({ zG_Y4<6JY`T>%D2@%QvbnZH%k&lN@lxncrX9oBbd+`gwU78~qXp*0IkIMb9n`ZoW$!-Ug@XKnN8-%I*^gIWPEVD!el zpC+Z{<>m3h=ez0e<*>dhQ{eqAcSnQw#IoN>*OAs?(klAm<`FsU1P`T-O|?F5ATL|- zymwO}GQZ~{7P0c*z!Xqtu|WvTGr!*6pSb3@w0F^N>8G@G32clK=u#p46C&A4625pI ze^ZDr(H&6)E#1?4<@McX*b@%Dx{;GaJv0o27A2ogEozs=#n2VMR z2-Dq*lXFF?`}+E*(IwMzlR}Vy)2p8Q`96pF6qzH~RVueCfN#B&r3mv$OytE~L(u>@ zZp)+@cYA1h?Ll|iL!Ui z^(qQq4U|t&oX(sXgRnQM!BB@+G4Cojs-k`1m=)R$lx!%g2q&X{PQjDeOYqX-Y*M7n z%p{oAmI!bCH&XP%#z(3MULpO#^H{thZUgp{A~9O1dno{_8ZGtztVWSqW( zo61IF;lhjX-07h5jZZU1;TJWlH4L%sD{`zNd-?FZddvR!tuEih!e0vFayd2`he1!yEdU*!**E-i@w+=eBd_G41C}{dJLC zDNd&(bzLGv2&w+-(ka+GCU3MPY^;bB>_5WeO>Ky&qd!mSxLCDz=*WdIatn74*ciGD z(w0xiuM8k3J7bso2c!@Ky>pbF6D?NDdihj^(PJFPLmu{PVh0 zA@eq{vXsr=(iip%MMd$--2kJRmHIa`0-cU94n zOV9Pww8`6PpK@O7;b!Ca_Y#`tO=XO+MgYgJHWBWxxD>F2c5>Bx`q5igOH@|8>I8p| zy`6pZr!Pe^L$udfbk-0aRL>k4AWZFqYwR{)>o#n-M60Ou&!j;V!b+2;pACa7VvB$7 zUH}KUF3JNmidEO83_IA*$*ss^wcuv++!g~m%7Q2r`i=QH-cuf)MWVeFHYtU$%-Bkm ztDP-g@UVoG zVZ50`msY~lT)nk-q#4-FDCMgqOoLf~#vq-~as@M0U<;mK?&yD@a0~A9$WY?sGcxF4 z<+*ci$vqX_dAC~NTCfEp>L>OvaMk;i(}kkF;aBEPoP4q~Y-E9u;h&O}+bU9>s3;gG zXZCs8jET`mUHn`iR}3rMSD#{ad@r~?zjhC3lMhP z70g7+V3z{>Nic(jeOIqtwFs-6Ld^5A0`MPy*ic>V>Vpw zDPMh84!d;LgM>?1*q4ZV6#HWArtQK$PBBH2)DVRVE!zb?e<)+rEpcP;Z*1r7eE#JF zLJ9;Xc#GRMQcfbtbiEfv4tqU4e?@ zu(W+P#vQpVMP8P|y%@HE0~XNYL?Q-E^7S9Og58U->({U6M3z`B4knRtwN8bm%M5tB zOOMd_5oOF<@jV?L)7g7%F4fMb`%AfKkfU-dbRCmkyhCTwMXHU$HbH`cIazN=_^NF^ zXWcFp-P@kG!b5E5nR9O@ApSTD(V09cdWod}HuC$MPY!U|8+lqxbPe0upXTR67gX>e|mi)cFd=bu6Stz|D>~Liam447vTQi z&*_q4AE*A-;yGc3DO%P8POzI1>+r`a{9cKYG7D365nPwU91XgDO?Z0~5&ILjp-_%BMKC#^ZWZmb3jSHmeGogwA@3Wz^P}PhqYBG)3lW{W|8EsH@M7|8Tb3zN z$lJfOMtT00J1(D&%*GN@bSs(7tKgy2mLnY~a5kI}sa{`qgVY0s+cA?M6rY_N|I;JS zj!|uFSks9d4(m0~3g^>37AcTZ>TD~Rp>Ecm_!Iu_w8lOb?Zhd)F7qYH)L-G@A~`I3 z!~gkg3LXOf@zo!imd9Kr{+qz9;1W)8%Aj8+-_{oBqVR#x?d04CL)O9HQwZ|zbvoYq z@!_ldMS{7dM81=wVXk9@bn~K%OW+@I;_~()z2sml&f*^Vhsk`6|NoEwUj+Z3X@Rqs zUR%wb1I^s_SohVLIdaBIny1ect+e%6T@h>;QsSb;E~~d~-6^u=00peUZmodoTeh6| z`;i>bI)7;rL6yfR()6<{)qXeo=XhH9ovbB(=2@ZBBc7oiD|SbV_XYzNt+sySMyMos zgg9qy=Bw1$D%4J>yl>fLb6m^1maU@k2N=B5^QZAB=i#Za2Khnu z_xuxh1lvyC2Gl9PJeotG^9S zOGp2w9*S-O^=AX76yGfbciKj3amu}#7-U;fG?jijMx=jQhcpm>bl-4BZpp_kua4 zEwGFcq%k@@X^Z?hj+{`mud8Zl+<6d|$=a`82rj4OIVb5v3Kv&%H1J-;e(R9QE?#ab zr1YD@?P(-_wU9PXI(;4zsnh7x0F9TrH=TpK1uwl65Zz5&9!r4@#_Ug+q2{-JZxSp* zGU<-ja~k5t%?rzPk;((FPy^d>=^GnC7|EOAaNz?h*a4Yx*|!91_evnG%|bu8<>3 zWe7(8X4#e0(F?#GyR8B~)zhQ{jlsjKcEu0*dCPO6IyN8LM>yF30kjx+6 zd~-$OVndT{X@7nDNEi;cv6_@!%@;3}l;Cmxtrf#v)C=jHoJl~jdgZ3V$_uV9zOSZ8 z#*njJJ>SM!mYR^LhZ^i2eVC$^3sPTJe=QfL#-pLW@_t%Xx@?u(GcU`9PJQI{sdi?! z*WR*>eA|Repta|-BmE)_ykfc61LjSMmy} zYky}mt}SR-)m5G&XBgrBgEr3a&^%wmD8`*`uO+9x(?u`}KT0Oqr1{t2h9}m0Gr|sg zOv7CzAhGFULtTX3IY`>zwL&(FopPF&WVf}1$>6r6!Og4Nf$;g$h2>sIPAIy}j2u_i zHkG6=;PYBXPNNP`oB}Vzv6V!b?1!J)b8-Iu)>;vTg`{Gq8I}tfZIaP%JB`?Q{b5|@ zDc+10f9Q@!c11!_*~hRs$wNI;_+BP;ej}5xT`CPyYe{6)zEdE6!*L}sUW}wiPx*F$GMXGCr6hW%23e-wXZP+<-F9x^a{{hV zGzn(;SxX>F-jC?5nhv%Cq4Ll>WajQ^CROGUK7j6dc_cm|LU4>+2ZMDw-#+ao6xpzl zZWpoEqG|waI+cqvn>#d05l&g7l~S*O2E zKyI-fYBdko4!(zwqQu-41Z59}eRdF@8B5sz->=^oU=;ho=4D<~58#NWJ;@b{Z?$ zxQ8@2^UOU6OJ3)c`Qi7&Xgq7l={O1Y%gQWneY{`p7nRbMhwTW4Z`w|ESr_aObSkOh!B&aoaKI)Bs9&26AkM!VFdgI+^53d^_&W zF6%K`z)m`R;3d_I7aKKu0PJ@$Din%(M!|jgJcI@Bm@2aWPB`NwPRKk#X^i_NzD$BM zC7pYLl#5L|2VJvl=6)vwO_9*@>E?0VT`wfI&i}be&xgS#f#}>g6VvkJ(xAq0E2;4~ zJ82Dg7%;qeWX4N61-9^U4ahDTB-?}BVe6oW?2F}AwFE~?Um&VL zs$*KI8513VDP)M840+=<85vYT>Jwt*zE`*qbd$1RH(aphIyjZeWGW|V4VZemxSmnB z@nB8?laY?oFM~$WBf!tR2CXMUtQKgr+4k|I8r+@FaPvFH6H^c&7fJ?i;7Uk0wHqmB zIdp3T?mGBbYpvR32`Qjo$r;mE4}o9tCrxn=30TyQlA=KN z-UBKT?^shwIWwJ8(mH`~={lE>@bJO&x=Imj^g@PEoI@9!A|Y)V>jK!K@{~7iZQx$) z?o-(GGPNQboO4ijn?6gt1!%}ed(~}M4<|~oFGKV=XcWg2(;!cM@FwU@X~_WE3UO(j z?31^zhDalHC=W6fX6-}RZt|`c-pZMw#^lTxjGJHn$;A%^D?j6+f%vbF!{=F$%BVvD z+uL@rtaTx3IqEaOdT{o|(^%Fxr{^$kP*kG`4msu@SnI|MQYc7uyt^3pAl4q~;*t)7 zi4w~}?PIQyBl5^AQXrzUPV!T&f21*vR{)$bu(#Jw(pHe4k1_v1&i8CAu$6SJ=?K#3k%e3{3bP>3gq)#SH zlwna%&ze%6^dI#sF94F|YYMrsHDF?TC_K=EXckyLl_AVuRWRmYKyjcK$~cI*JR?V~ zV*O{>Mj;-GKb&;}(|`Q^$AF-&Cjm`!{MuBiOTnAcZx0m;lOPB;>(wmUcs`|@2*o4b z4~8PeXFE#0iVWm%`2Y{SKNYVSiEjrLiz1CF1dNGQaXy;^ZmIKj z(T0C(H`%*&3QFAn8lA9JCl&rNN5x4J;+o0pr(E>a(h`=ka0s zK?$&P4Tw)@Fy1wwqLXwVk2KO1?$)5imXFT0v9<#uS+)}vm58Z9w>~s;{|#2%R=y7I zzP(BhovNjRPss;MHTm=X!68sY=?$A}>?Kh=s8Qj24?e@iZaR&O3U^2alDJtSRQY9! z;hV>)ukWKn+-Uu?nU%!|+;G_R=&5ia(<)-+Z`jUckiY6ZSAro|i=4+Jxi^Z@8?D-< z(b~m3KkBs`4SGMzDifIlU`}uWc+V7iKx%Hp;p-bmS)04P_@hdbC2DX$O*o*!Er2eD z@Q`Mm9;&=i(CM)|IwE5~8&5A`0>txvXtM#lfMh&rP}OJC!c)x+3Wb&{P7P4AX3$>4 zLBM(@e~|9zW=cHTCcq2iiJ?bI9*p#dg>0Jbc#|2+(GCLf#bvWa}W zs?ByN41odxPWVXuu;Qiv{N(4L;7%r>;DDalW6qP@;j`=i-Y78ec#7eNx=Npan8%WgOFAgBdoDpF+jegDvCD86TX5+JZSjJOz0o#Kl* zDU*8$**uO6wDoFJA;$^z^N;m~a1Vhh37md*cjXfT`!y{2d>ak&r9z9*5CAZYbzaB} zQ;@zAoCVGx=lba2_KMW@Pe5+Y0X6+q%>orbRi@tnrg!T9jIKRN#$Qrzm|SW4buv6? z#i&e9Uwh%|R?85iQQ?~WZGVKK`_DRmC7M_)c|lgIAnDOX+7o_!x58b_k>@yRx#0C6 z0{|j6`zmOw{T@(!WFsVB#lO-Rw z%M;Tr(5&EjgPhOgKX(!QXk}DZTMa}S$!b>`6`(;nhn0Y1`eab<*aztP`W(6raD7oe zKway>OPZKM3(?qywc3VXNjyIUwK;ur7(5GkeeEy6-!vHta9@V7gOt&UPCD4s0wykr z!cXu>>*e@@N~uaCw~jJXA*8@_aK8E;>4Cl%li?)Es6(7(pB?%f(9DZ{-Y6$yqRdDZ zsrx2x8I-2~3F1%w32E)-ah3|Pw&(ZVJphotDyz4Yye$%r-ai#S+x5HgZR+0MiPkG z=fUl@-d%>K_!joN*S znpI5Yw)_oA6h1js8P0G8GumyY?BNlUG7tIaDMV1?l_;By!mD*=jhb#rq# zD)iOlVK;&K{7g^hG8+cjpB$NZ)zIvg^c_R!ci~m}z>A=oqY1yjzA;#k0%^XQj~p_? zYg1RSTW12d^kjs309Xbjh@UEAPJydql{i2dwia@r>Q@JJk@*8MO`r5x6Na9z=2<>C zt}URcutHP*hj&bN!`4km%2C65bzs9zLIx!eSCY zyOwE@_A^*4RQWJve)&l2+PSQa%(}_^rB)we$&GvDxV3;{fUux;iC^D%-oa?K7t+U+ zw14PzG6vAIA0r9Kp!vCs@n%eOFI?rd|2ywSQL|sEVqvS3W?DK0_(}6QNFwtmIqWv% zBj6CeMV|sVRTNOPvxI{~9!#dE{`{o0m10;u3A>i5QU^!LY$H^m%&`Nof!RNrg@pNS z8Nv$Cj3pBRVZ=VpR-yj`0bOV5T;-}6z%@^5hu0E-s6H&f?O7tnM7erTlMC$;g86{f?dt^|zg z@Bu9M4OlKc@4xK(9c14H+v2^@jc`C8euqN2y^f&K7LK5)H}3j19Se8nQ59;@xyC!p zDOyoHIwLsKIfrIysB_q@`r}^k0Y)DZXTWlOqh{~FD#q(~qQm(A(f|v0a;nha63C1g zFNV{o5qBN^A^vqf0^h434=-bSW`RvI_!({fOtT0@GourLDv1NafQ)_}@qTGJkxX+D z6Il?mh5H2_{&yAVXoq0u(w|QVK;~pJ2K3l}X5$H(Xkjb#LM@X3?=?=aUI z^h5R0aIY!n9~Gm0v~gNW2Rd_Ps9T=7+FpgV)fkAxo;0wijgTmq{CLX6e-A_EEqXP1 zcVE-S%`aqu;gP%)*|<=x0EjyID7cs_iz0n0jx93Md_P62`-IN$Zo$5fhV1tsSlbHh zCvIX+AK=n7B7v_17yyuQG|l`Hllt|pD*_Gj9qWE?I#paV-Bj4{#GQi4KZ2##0;}iD z!vm_84uDZ6%LqP@&SvH`;v0Gpl`AL;-XJrX4d5_NW-m1>EGrjU{o#H}sGS5XgF}I3 zw;oC?M)}e!eg%fm{Xp0l0S+zqAQR$T%dtBDL#iRt95T;!dQ3_y4kCGPurZnP|K|qK z%<&Qq%I?nmE2*2H#OaU=t_ejs>ka`JHLri?>lNBXoa;i3s{y1o3%+@f8F=;YAQY!B zWL^M30{n`)Ahj52rk~(yX9f?Dx(*P^zgYQncaLVEHKrp&>c!Cn(mqu@!1784ATUF0 z+gvF(!dg~~yOrRwD=@V?aAm3=fUIL%Msi<2iS*f|mJ?gY2(|U7!DVCCAIX6T>Oo9H zlE*Tk%movLYjdf1F*;urm@t!bLMvDnAISe9jXE3rcleK<{*{o&k%YEnVln=bu?{X$ zz8?*Ple}D+1$3210<16_rU_z6=F2rfl~~UlbyH7OoUqcP8`x@h!c7q?GI+GCN#_> zh#zc74o(44XZZ-|(s)>!^k$dIz*NUYfX3{Z|5Bx%#5(%_NTYfXlr%$d;0rWEQL33i zZS8oZ4&yzeMV5Um4!dlm`K5OJWgZthhH9;sFya(t>POV+T-;YK|qIcEE9uC{L;jL`_KI z_kIU!idv#XN>l=pQb?0h%|74n5d6y1Ei}m$-<-WMOA_2QB(c|$;XZ^P`4at*G#b2% zn^Q1=KXVWS&cig8gDCXZk>LaV8|*(ol}0-5LLiNbk&%CvpMl`Rlr+ZL15#KFj9EIQ zHXj8qit)0HZG2ixa5IXud{pp1whG%%Iz}x>jHA~92iP*$AyEGZ-`G8MY6@6IT4x(f zWkot_t=oY0x{0KrA~JIW6Y$RK?wn$69c;;5iftf4MdKTPK54*FCGM*W*en}YWSU8G zRjHjd$_4;7jHNLjXcWclkKjxs*uQ@G-IRIK;cp`o!XrF}W|jEpeJ`+1`eKL~y^rUx z2Jl)o0E*HW9M}u1vOJ5Ug6WfLvWRr`Ko>2`vMnucT}<>HkL^IMhbn%V1#5G`iGlw{ zdP8`WZs0<)+p`cchjvG&*@vK3;77q3OU1xl;?Ite4r?9wS)Ye$^VcGUo6me5w#2RW%(v*im~x$nl{72V}~QdQ#Kr z@GH$;EfB3<1(G~^5a8YhkW6%mJLznYQUQ|Jj|l&I??*c~JF~NfnGcmOEDXexyrXNQ z<^O>BvW-B%Q%$*y+{4D}w38f{fmr?pv1qPo7T}Y>U{zU2k82g()C)lmxU}c7P+kCo zSJ*Hgqf6{%qkn(62K-&M^r6E@_6%(?X|y!Row2xepmobO(8h6}M@t7z@LHf2Cte0b zQ}s#M>%m+g>nyYdqwl8hd-3SHV%^RU3y~3Xqo4#hcZH=e_rkkSi0A?u;XF)kGcq!j zB#vY__E5c$#-2dn)VU0aB>MyK>fdH-s50w84;qgF=yYm>y{nP3fUqndSS~yl)qxHu zcGOy4?`*yZNt6V_bk35S`+I9!?T1uFb{-@F=NBS*gW>Q2*$9+2hP!_!Z#bBJXs$@vKQHC_8IJS zHw;iX2S6%mCW!`Y0c6KVH@G5gZ)@pRt&*&;5;r&iWP$omM@2Dv@G2?3xS7tV)WZU1}Q9qV?(O@SDy0Qm6KM!u7ttqo67n6Nou=e$aJa{5)et6MW#w2@?~hoK(n-IlD94T0dlt(d$n@|g7ba#VGjAx*jg zxVnAqwbVLrHZ0#s+kjtpsstAiW9?36umI7$_z=mh65~;%;&~>nE*SL;FNvQKqvrvr zu{Z*VtV7_xkWe(Z5x!0u{w`V_0H&nz2$)ugo(mDgHmJ}1nJ~jrg?As}hBV@#lE6*h z6L2#7OwVEbnCk#T3A9VvzA^*6Up-X)Os)Y|q5(Qiy2_?NgP3K{=RP1bCuUa|i_Gii8)Cs5Y5BO$-~9r8u#()C#Tx zn%FUmn}8@wNswR-0@xI!C#=lU2r-z zsCQIfg%xrVPx*nx99Nn&y)evKgbX%=na6F0ovA|XWCRW{nM7vwbJV-|=juuq@IL3h zWsrvMM2@%((Upmlg(=2~R{{?7C_wva z>_44Vii2X)dQhjG63Afs7xK^p2Pe7LosaIvCa^8fMRIo-9sHYTFis7$yZCQ2^d@eF zqfqvGL9z?7A`7Ul|A0>=PDqwjS|Lu7|&)lF`0i!AhL+@{O~5%5XeyDTKrq>Xpa2T1VC2~&q`l(7k9y)~7#W>YIncotDIVpje zq=4GBgy8#o1!TPsBMW&X2ZW!62nATMKkJ;Sa3Qi!KRlOzROf=2@7|n4e=Mj3zMpEj zt2l4~0to<8(iN$~9UrWiLwuKC1jgAx9=M{0TGv>M%9{kzH%xElr#leQ*bVTwI<1f^ zMXPv)$ak%_?;KtL#Z#?~&tvzkBv>yB{t!t2d(ChCwxDM#6MUopsPo9`s5z3glDPik zcxg6UZ($6ef1SMlJ3(w|yS{R1{|On=Mp#t^>y;#{-6d`D$rGxA*4KMVYE8APciAf6 znVH~q9@_Frf~_~%&aJ9E({!of@^275)Q*t#dB`KOUuih5SX(vxgRI?`WGmMqdD;UB zG%{nmMGo&oRd+9Snkvc&{atwVUss>5ySxF2DHoSJ&l6D6(5J{e<_%q6Is>u%g%Tv=kjCXrT%@e)!6qP0sSW@Ot+$mxwC#HB zUVQJl3VlnROe??)={>U!Xk0$E#u*BpXgTBx8kGxTt;%)LC<~Gr1r-qB$NiUkU#GZ| z@OoQ0v_UP>>ie3^!E=G{SqbeCGxvbMv6^DVLE@b;_k$6g(*jwE8!2-IAW3N`59S>| z#H6yGrNv(1Qmr92!F^^y!Pxxpk=lLbIUMw`8=8wQf#K%e>7oA*a`$f(&{8-_x0euN zTA_$K3Lfv?(DTFgOe&Zg!?#=yRr5gU>h}Ys4>5f%2&IP}UMAp92jOO&RRO?r4o>rO+}@sN63e`sGP5Mj8L-c_ z0@QwDd^iDTGgiFe>7>RwtgyP&Mq5e7>;C-|OkvSX6A5W`7)KUa$yZ1zoCV+Lp$3bV zL#cY1sUpxzb4@#52ztsE^OYvWZa`2=p7_}f-E8M;5s>&3GQ!_V|APtfh+@OxOeIZC z?}f&d%cjCVGvx`I9BVzx2(oeTdiC(@Qw#UTM=Kw0?%W{*j^DJs4M6sQ*XnJhB`F*g5ITgW@Za(0k>(!sKmp#mCZP9pG$BV zZDZw%o~i=n)6q~pD{{Ip+W~{9#-Ah^=PG(mmAow!TA9VK9GQ3zoHqcHiD$=oX1b_) z9)QvP;DW)HPBr5@d8zZDj!;qrE&+785kRW7amB}uDf7JdVK_O4ESSa}CCcXS|B8&1 zYZ@MUgw+*FeGJ3z9xYBaYL*z#MNrdKg~~V=jXmiuGIm*r2s>R{mkXt_&`jt3sbet$ zzFdyDeC^n6##zeSvEt0YH?t3bXM-pjB#8{fk=?x#AwFU^`7TQO+rfoX(@O-I>$7H9 zMu~GZ`h(!kl8-tT7>9`U-OoKQV{I#PvtwTD-{v|Co)3HH@eKq)N(TWY0fn~95gIRPmDsm~;qBZ?-K=*X+q>s+h%`HpOW4{gm|45YQgObn#qVt!gP#*02G4n{)m;=4Y>h z_j9Mp@Bu*VaPL_FuyMb9vi*ZE^luAA8Je};ANG%uCTJX%JW_9n13g(##|FA`w=?qe>GJq-3 z$eMWO2|XU4jTFK6L~{M7<~d!32rM+RON2;`5B=0bVse9t%dNmCxm+Y`#w_E?-}dK< z{ZYLa>^9}zJ<-oASkJp(Xg%m&W}-#}+|P!9CF%|NcJktg=HOeN+PBMBmW>&niX2Z9g=I zh@(1l$NbP zu<}TVQ4QR4-v0jE!rF8ywjl+U+pTe4Br)Cx$K{@Y)p z^A3lW{0rzf5l(Rs*rL6V!yhacs@LGYq;q%kHyQ@2kn2T$e=h>_{*?FIit<#$Mv7VS zm9Lmpn)|1J6VS^++MGja!fk38y|m|RRuX>N0@h}TTfIlfFJs}$uGR?e*^U~((mEwa zhE^J@%{w2UFbi}n`tu}^G%8DpAC^a%_|F|I@}?;ppu;mxJhBKHIbGL(*0ozCHZYhN zN%?S=o}OT0;d_C}Sd12^(#Fw!C`H5vcLvEzvAirw0U80jUqwAJ)5x@1Dm1B}Mgav&`2+5*OR=gpRp30DeiZ{3u8*X?^b$Av6Wir72}I!wZhv0AjB|q6uB4K1Ng7E5X73!Zr?UjV$b0n$Saa*aIQQ{9CdWA(BcS>F#JLEh#Ps9172K#3H`{qh6 zIFpyw&}6-HkstpXQ+7-S+&*|0RRib}_$UcT>2ZodIN!~dEkFIxPRi#H#S80sEXC@9 zM%x;+3Q&~Tf#LxgH|OC*{sHr#K;>s-V;?jJm&<)1;mRuXsNV<%zKL zCEE+3%gqZ~vvOr2@VPuSh)frM7w1Jb10wJI~6cQ5Tj z`~g5%+C@V2={1m)k5;Z2qx2ltGUplaX)B)uYIarXA!v_<0tMtIlE8yl?3?+4r7!D+ zz85!hdgf7Vzc$2T=zl^TMG!8*k3Lxj9HwOqs62Fd)H0ySy4D|HZLb@@NY_WuR=il@^bb3^dpoGn(d4)>79h~m3*eP>*;YKH0 zsbq1B4MWkh%ZQQ<|BKljv75(f_qg6ujNq`DmU^r#dY8kE=2zhX~F%G=+AuM!7*cpYH+ zZzp(oReK`9yf3;Wk0A{pQemw(1>3MnmI8G@3IEaUB}%;sd!_-dh7Wypb0gg%uyFrZ zIO2K_Fdl@B6@F19AX=!z`9k+!+TCF<%;bXo$*pu%k#LV3F4ZD)<5_@~@Y?~1-ARqh zJ1pO`rcjw9G&uk23XQ!Pf$?3tpfX%!cGa-s?5^J2lYEuupdxuQfdP5SHE+Y75E|s= zYY(3e?=*)x-ENWxx$z@+#c8NRM1FDw-f`)`@v=tBuC|x2YZ>wAB}rqn0?WGzWXRFZ z`D=74sp=9qv#J5wQrTpMKLQQ_Njr0v&Uf7zK$d^9t)+A{07&AJgm?4s6jeMEvZQNJ z!*nk)8mDb$Bji15mb|WfD6ka`J+O2**4@6`(o!K+Ii<~Tl+rs zAKlJ}yiv>6^4aq#8D(MT-uCc^Timj|5+7y|4#!>+7ZHPnXe6H!VG5n_2TdbIKif%9 zo6lcey~3pqEzh1Eig?aJ`3^;{V~nb2oTT9Ma)|nn@V_+j1XNDuGSqtK_id?8A5yO^ zYli=aVdQj(vE}LqA5SKFHotlGfk=A78%?klpvhgT!M!84amrHcTeVpQnyzQ;;ZAdZCP*W>@6FssP#r18WZ<_)rZD| z2HDCbZM8k=h2IS~guI>zI=iJI;=mZqvvM1Uy5O<2ul?loc=oKQh9m{6)_jFGJ=~@* z`E>b*-C6R(>LS&Wm_wZ#l122v z@1Fc61{)cs`0VLUwkm)M8Vy4P2-SeA+&^DTuElwpB9O`EYRkB9G?y~wLyZ^?do*a&n^ z6~nBr%z6$*R8zZFBv{QeJGgQoMNlw((vDe&e!$FYJowRdXk@2p1RB;g+N!+cy%gny zx=Bt0MTV&BY%E5+s{VKl>efw)J-IIAUM*m+dLTx}^0m-;!!%sB>S5JsrR0jpAm`~l~#Lmmb#A?lIfKQ%Ndn2G$~C88mR zYT3f+w)`KLn(Hag+{$#NoW3!(1&*b>86f)GQ?>D1qpZ>Wz85R029KdPeHq9v`V}tIAexu4N$O^iu%VAyEYu=8Hxvu;(~ny}&zL{6 z>X>50T=~II7=9U#9j!ex`H8#e2j0&(`=G!Wcv1{|w{zpXtDHP`Yi;uqr*G_+N@70k zwCTD;WG!Hv2^#wSbwE4KV0&g_KW3v|eYT!5OvE0@sj}brYTL#Bg8}R_md&SCus6G5 zB4--8();?RYYFOK6#8GxBV= zA!zN__tC|OW_(H0bNO)){Vfo^bV7;f4YSZrPYL#WhshUb==tGTVyduwFvlpr7#+A| zEiG;43rX6>v4ix`(_$994?lRb!=K+W`c#rDKp!stwv&FxRJ}ISAe7r0G{o+>4c~hq zKcf7JjbL>9`zdr4LbtYS9+PrHduz3DH%XKTe3aC z+xW9@sh*TY{S^u{$Xoffvx2-mcJELe6bgBZd_}}5Z+4DJSDzJ!md15{BHLX4-t=Jl z`;zVF;X7lS?75FWtjk#OsdB_yzmrYv(230aWx7?ET+Ahv!}G$K*Yw*tOHe zZ|7~vZZWFLOyMxfPmG~DvBBm{Lh7y3DSpe4uGTz_B*)-W!vaxBHMo1T{4?~A3ztYQ zXv!8}_j612@jBe9Iponm6Jp}l-f~EInooP4CNC0m1xi52_hZ=2Cj%VJ`9t%PRgO!y zY&=%6WEC+^jZ*)+j!}$8uIeJ(xK(_#EX%hGjYS^UXv=9C&WpIP+C*r9pw^5#wzm!o{H;K98L2Bb%>HRSoH!yphG+gUFYR7{)-`B- zeyIl4JJ_kun~z6z=Uo*Otv^HOMUOe27kNIBG|7}f4tHe{E~wnIMdw4;%xHs~Z_#f4 zqx1CouUb{zzFET3VAH7(2daK_G~raR zMO8VzA!UJG@pumWswEiwpUAcU`D%k2{z!H>zt5AW*+A)-Z3(Eu{e9)oSO()#lfb{g zL|)`ej(pOfwV(mjLtHz01+>v=ut1mn!}$(dx}-_JWnSqx*CJpSAJ3B4!pej#Q(jVn zp$uyQ&c3`Sz|>YSdP*J@t&~HRnr}j}neXkXB?UZm%{Kz4Yc7GlDGPlm?i=zLoD4nb z1;g#}*f^|D?XdWib*y+?lzP5w1La}mUz;So zS4hdT9HgZWh5Oi7^2>#Zz_@iDY&eDo1%94lMT=~cn{5@C(QgHqKV6cn9yqqvfmQ&& z(>O*7;(8(mHdEpWaC&@X&&RuRx748#znqCY(d$AU9tE!VwHbf3p$T6Z>hC7L-8@;cJmIO1%?f5URaHsEqQJx8sjLk~PXH_wB;h5i03CT0wl&2k_J? zIkVRj$FJm%vtG+yu57(--hDFbn1I3Kf#Ybq5=}7~TS)#I!cXKu*`-ZwC1C^cSWt)0 zZYMPl_%RAg`O{^5w6fCQ3+-O_JQVA0Z7jy?s2J%}cJ;+$V-eM)PtjI)|EuBAquhs z11k+VthZDw5w7wN85k~=d-|NJ02XrUP^!#2Pt14{Lau7y@DSw(B;bgND8*Ja0&itR(j-fMMBdcWkQa}y3tavuc^{q>FA zA$z&#(G0_!iI?bIN8OR!dQR3I1(nviVzf#Ajm;zNd0UDdIfA)3gF-S1EDq43#aWQ6 zWxeZtF;Ulk%vqUYvJSF!e=GfQ)WdXdR`Is(_mYhNb8S=sHu&!7EFOX_8vK9S`|^LN z-tg};C~HFrDQhVzqK}FaGm#bvZAi9O6+&cZrUiW{N{f^=p|V!?Z6=b+G9r6SmMk%b z?6aNcI_mShzTY37|KREMDmmvq_j0Z8>$DG(SIX zDU|CvZ~%HGF`im+^)1BR*n6CZ2q2lYPTu!KPxm9@Z5i>HFw}xIS*6sWORd;17D8jn zim2u!Vy?G!R#BW2(F&EDsg-TI)aB(aY_z36z4GyCc<2y#1+ga=RH?(~+Bs*9dXHS{ z&6x+GXP|xZS*|6%beLpYv^Tu! z)FtNlV7dR?qfj(wO^kyx_(~ZBY1CtowB8lHX<6spl@x}AlaTNO@G8O7Uw~{^_^r|& zaNdwNxn*QG!vS2?WuSUem1*fbsn%zWrz?tQk5=rF7tEa!C*B9;O41l#gz06Y1*~w$ zt=VKs?@^x>TrXh3;kWRDv4!@_przs=?tSh;9uNGJpJ%&-T#~I*6kPQxWKbqaEOFF+ z%Mq~J-73)6Z}4Fuf~$KOgv>C(^hhvmC)*z-OK4<-e8d?Z+=cTm-e$$cHM&B#n_M@D zZFk~ncG`=x(@s^RCT8sP(xvC+9JBfw&{zGiu#!Vi4}1Pv0hdl#nCPQiHg@Xy;;l!_ zdHl|R%T9RX0dSYt1}k{^V(c}AQ2ukck5uAle4$1CnjZ1UwErNQ=K-uN2mU8recOjd zQQDq3vvV%7HREm`Q?46xEANpoA}62m=JPsaiJ6>N6RV)TJ|MTGqkub#F!Su&LRXS` zbpC|1&soz3Ia$Hm%G3i5%0$gBo?Zl+tPmuJygrQ0vMzCfZVfdg=VrW=i>4>O#{qmX@-#J14R+hUSk>HJC-8HK1P|8UFJ0q3{ zeyOjg*L^b5rd_YQ(_{OTgMnxWQeGxc1POf0Oy zu_m+b$IoJ~6a<6lYu$SaLB~Gd{#pO28dZFu$lhvFaech7R?vVcxe<^1A~CKDO?LzF zSLwpco9FOhgwm}1?Ymotj`fdZh3vu^?pLK=#$Ll|#2Tr241wsrVUPg(UB8wo;aKdz z3=TRa=a9H8J(310{^=3CG;{raK9|A}%-4Ek=^eG|irrNDyrQY-UH<8QZ}OvXZS>?M zDtT#A9PtCQs3mcs(-mcwrRFawd(%Vdw)=g|*)3JkwwHl$Sv|v0T?^(@2gsP()-juC zS{RP*%hJ`OPTSYv@Us)39k=yRCzm+9=58|(qphGLYTI4Wy?}eg8E)vg$U^>eR$Kr= zYAdilq%b4vG4Pt=`-7fWNqPI$kYF%H6S&Qq$+|CvQamb;xBrs~CBeGDg@;GWelaB( zivrZei}0FQvtT{!O>XcY+Y9am*OQ|FI3>v!Yiah5L3+Nt=h`8SvG^;1=S$2c&A-X= z)zz&Ld?`M&Mc~geEcSxBn5+kB@GyrLGY)+*Bv)yR6C{-sR<$$SV*5wm^-kZ__J+BF zl}A#)cFZc?l^Uz?3BQyqp%hH>8tvLJ&Pm*r4WrIuqZ+F7Q2*y&)giUx!r*M??R@M~ zND3Cx+Wigkg=18T3`n3F4!R1Fi9l)0S7C&OJ^CumS$%|~9BsNGT@plUO-Z9LL?ET` z!p&R2ITjZ?8ZZ88Z#3=j%Uof zeH-I==KTyNoKvQr+pkL0h~&@I60mk~uIJP&y7BXCK@;!&)kFxvylfbA@6Yrjwfd4t zo`Yc8h#eT);ufLE8h97;KK595?zdRv>zOu_O|S|*Y!yu)08)@`|Lir&PSO@QfG;3j z{nw1#j$Ms{@XrFXup;X=Lvh=wa=#V_bzXnq>>0hc$Bl9-6EhnLx{reI_{AgfbWe!i zXZJze{xA`w)zI1nCgI>(KF+beD5o?kaC^r$28Uk@lYxP8_m?5G!`mv20a)-eGI(b$Vuwkn9%b?DCaKO_-ws=khJ*e{SVlqhVWs31ZM z`fz;yu4EcSm12!9olD#MCPo9d*oN`+h#w^qL&ehiLbxJ7O_{|mN*HXf! zzM=Jmx!g0nlUw|2Jr;$cupygF5A1g(|F3E<@e_G0ZGY?75Tu?u)ccA8_3T+l=cm zfm<>9y5_D~Sd8oC6XAwP$)#8EXzaf7lM^%@+nkWz$@{t7Nd4X!tDaRK_a#UruwT?0 z!lVIN5tXYw$nSO>){}HZR-SJo1y2%Mw(#ZvjdeEOs3vXG?qZ2%5`r^3geQKB+sPR4 zo;FubC6sl*QD&)_uH-5>$t8UYKRWLuy@~e>kn9)-j_%mNOJE&XH+BdgBAQdSv5Z~! zpz4rW#|8m7`~_1<8!=o%=Qn>10mtpqT?=js^E%&!^3PHt(pCxG!M9bJrbv$$jb5Kf z%eaESJDtCo52q%ItuZD9`G^b8xme2kdd3yaXH^|S7fN{%TvoeBN^drMF3c);xWv6a zgyvzagrs6VbtQza2ZSt4jW_dTx)t{u76O9j&T%B2-CT zM^+|)N;J7|Kx*^PO;Ths}Jnj(@rXH3Wt!&!xFv z`}EKeor8=|73k#%UbVsCMCi48XtFSIt+#3F|1wDgW75WJk^F(dR{Ex9L*>setGP}R zI1{nx703_fze(2eKzS1-wO1}C2s_FlHA=sb~;VH862KHRUwG(oJx&fmu7sa+$ z%6KmeiR}msr@Y-*SCmhKx9(DghvCUEhVGgJH{&N9g*1nm>#9p2H!W82NsWC+1ij?}v;y^*B~K(yQ* z5ayj21kpNUH}m0*r7BUV3Uu&W)dilO5AR(D@67WfwS`TQ%0zv;D%RZ;NY?d9U5}x# zwkd~GzUK7EpfVv$354@Yn7e0 zYv=xWKk>BIO^j(UH82r)1(AG!2p!T|Aki zn~6eNI(RtVX}pO2ej?I5Nbk+U_N^lf?vk$q)s{#09+W!Xd+JKtlL6q%8^BO(pV5tj?gBFJ62Pi-(!t{5nYm zQ>2S%Z>utCv+h`qP(N}6p1z35n6VXUGdK2FrD)>Y6RNO#1b-cWoR0^U{&M~e(0G!* zX`uGxR;PYs&By&uAzNkZeG_zt1%`^a{zJ*H&!g#883i8|w=bOyr|#*PVFGbq&zs{z zI{aPO%$E-jwJ(vVR&sRdKj10%!^gngb>1OIUw=3A^Rq*%oe_(rAQ+o|zDdc_#(n&C zcOv!Q_p1a~J$z1SzM+RQ`bgdvudmq2R#8tW(mX0;k<(%rRHT3(gCN_#rM{PXDDhV~ z5%GsyCNcFx`1L^qvAtQH?6@tr0$K&bpF;vx}ODU zq_UCM&+L{95ov%MUcOkx7ngr&mubVpIY;Uq2&cnQ8-Hc2|Z%1TXgxZKMab*n-ulPiaG##T8Qi#b~Ey&vOzgAe@h!%hYjE;|BT;F_BEYmzLC-@{wJdEKpChS%`m}s<)`vz?Bur#p$5!hm5dBIf!c4$gC zD!(5}JwFzpy{xYkAMb*7V%8s3Q(yEWlb&yR^KWu7wOWD!_ci|EUM{`5=5DCoxWAIEd&jcg-&Tniz>=N- zn?T*oT`l+$OnlzC$wcYycc<0F@<~2ZGee zQLBPo@82hn4V|L27C$$B-M=K99c$d`@Pc1pG`|(wo0up&L>Yn8KP~q{H#HOUUt`@H z9z(wWCeG@@8}J3mBkO>9E8FAOAxDNrQ^8Gn9lUNx9@M4IgBn5(cpeuI>v#Z9M=H0T zsPDoRBg{H~ITDe_DnQ)x;0B$pgvTQ@6Zvez0~@C7j~G0D z=BZvVMX<||-*{Xv;@5gZa%+tpZyBzhP*_)m3+r?S_oCPonIu@Ox|}N z(ih)O6R<{KJAo&0JO~EE`nqal{w`eFg|JF1W=6weVdusE$ulRbwxh@hX|3+LA;UyrYkHTk9v*iP9mkUvEfU@M8yvb$7 z-e1>`kP0()Sm@x?=W?z>ArXXfT>7(Wbm01{byi#rD|j()Md@gUyr6DtGC5P_;R6tMZVWXJq)un#>cI+>nB!XZ$18r2Z-0t%4 zbtuhIm@UW=k{ftFdK!+b>!Uzi8i8Kn{VdgWri_i^^nz=Sh!`|T@Zb7+ZD!i}7-pY& zU)EH$-v+-1F(uKePF}3&{A+MmRvRv-jtE%S2YXs_+L|cmxch6}*orn+oP&lM(5-`; zEVc3XxSyp^M!<1S&b2nun>n4g9(kaEzr}6W81PD*0J3g^r~t8x4#5)QA1&4eUh>hG zi`#TThH6t=?=nd7uFX2lV$=1&V)HGmQdQ2rEa%7@U0`~K^dmJT3ho=Yy6+f@cn#UL znRbN{s2SuyF;uOmCHvPa-Q`D)1AIbC)TAxVFZ%F_wHeMgeQ>Vo zME2)%J)3RV+2|2hRL{H4Zl>)dhsMaP`Mt1e$%U;SaiNhbxg9mbH|@t+nzL_!Ck=K1 zRm`9X#VS>YITtGdzT@|xL;nGfl;++zjnmnZN>LI?&(2@4=r!Bg2HhypkZhzryn_=0*WV#;DSkmbB z{H2p5jx`3q{)Y=Bhhws)2;m|}(M>9+TnOi%U%0z)3a#pj+QjQ`K#!Kr#%s@QmKD^s zl%cw?FIOio=q&TTBk&<=jVQOMnSiRG!EHsx?K2JsY}+7iIPGv%EpDoJv~oRIetWMb zOP~usCVWA^B}Xq*?mU$iRU+@0wZtmtOKnOgkL3G;LDnJp!(QzNvvGjfO{ z6`*HQ)FAkk4<6)(W}coC5EuW+YQDpdh-raUn(nY^5E!0G_}Me){GJa-!%IdLHN0;2d9hv3_FsHbL?VH=2}PVZ-#6eys0fA>@RnDN9VsSXe&%s$ zF;YCRCP$TtdBeKYGRip(UP7`rRf0}p4P97m;ACV zZ`|p^bo(~QNA8HupBF#Vn|SG?#iTd6{ra0=yP~OtutBH<0TBehzaB6?`343)=Ck%6 zPOm2Eg9#j70K1;f^{HwsGx6FW&0+9!Y|`i2B5mn1;oW_TQpLlx%=~%gw)l#7zFLmA z`ypBF$jwL?2`7@H0gw@|@4gh2A?bM8TP<*=!p7W?d=`o>yyqy*-*=O~|5VIQC*bR) z(YIs2C25z0lI@+t5Xpm6;nYL4088KT2Rpzln_#wX31m!sH&8oH_3uHddYRrWm0mJF z-Z7Wiq;_Wf(<`C4j;^1dvIXvF@U$6ryv%Y+=JvB+ebCb4Df*=n?v6ErPm0_ee7hkD zG#59MhXrwuW=DlB&I3!-o~R4xI!_(HDArOX2M%$R4Y zvz&}ZXG}}G32gSm!(StKFRen*Ku-vN_CfUX7jWC?Ng_#s;5aRa5Z+-pN5oE65UPc8 znC;8cEOn;{gq647RuXu&qpn#C9v4h3cE9^)s|#!yG(t`Ui*N0h7x7xsA-qjGhjn8C z{&%+3+9D?yd`%sCw3^iVo6hl+&qCuvNK-`0zKn7b&z2M$K`Q0d@Y?ULV&&xs-Ercx zy*mCXTS!1{IcV$3c8&*`MnC1?A(Z<)7FFBKi(*a5>v28yyqj64IxlY6Z53Kc`0{R^ zX=^kl@I+SrN+=>@$Ia5(K6BiO55Y=b5RohS{Rp^!&8gQEmvo9}Hi5lhJ?%WH8j7r| z%GWyKAXC6BB4EK&Rr`S|2FQ{U$kK`@1pLI$e>9!INP>tfSu6Dwn z46m{5t!98;y9V!k$BgEoNyYkZyjG`>&)9cuz=Duc2|oxAuWy#+^GXobLi5muKGOI$ zw5XO~>nzRHW-Rc`ZrX5~^}s^43!eq1DT+Cf2B2C#C!hf0Es+D*(4KwsVOEq+eu8p#nU<#C(E`1XZWT@MPYT2L%EC>zR5hk#EF zgMJU&&+bpJI(h1XkqteJ)}y^rp)=U|B8N@71)jLq!ez!>^zE1csy6;DG~evQZsghqfXEBzGNBq&mA#^{O3z)~t!mP9bvExCgeQxmG^-6M0Q zm_%BY5G!nC)bhII%iB@KWlasJ;c8HcLjFYumpY`s8H?$mj{)qf1pI5qb3X>OSDiE$ zCCyWK8^@j;s2ncw@2UN@)0niix(io%V4dlA3ZZNUB05+`pWZ!Hek6e?DS~FN(o(%*EfYLG6t$~lb+AO%?%K-$zE)p zOzGt~@H(`1*@{~^kh-Y1kZ|5rh+VW(s+14nL)vVE&-%{As;&`4K3#_=mcmXv)ZT47 zpp5)nnIjbUI!6@bO0vhRr9S!V%MclZ^BEH0f3XEo6{bGTq>AIP#M2u#DQ|w^C8X(l z`}bAFm(GS_snJ1QGRPAP5{d}_mQWWCsnl z&>B@?#V@f79%07a!E|L#1_)bC5UMKF?LBs12~O~QyAXNw=oRdOz3?r4|;`rLs*Vz zOu}5|#CKI!X+C87HZ(Yl>)W!zp4;8 z00}>0b+v@j8o{F9&UEnr{NZaqxsUzY2vAW%&}J|n6-zj}*gbi2;3S#CtO3wYL# z#DE)ctOqVrugTfI3#2O0FklYsy5<9XSCGvVYxab|kxMG^cE< zoX#M0{S)vWQUg+8wR^~;zU@2|zp{o>p26P0E7w)RrHZ>(H3XtMl{F4?V-sbnZZLIs zF_^mJ$sO{9PBC2T_RGCroZU7C3MI|c_7lQUwKakVqK$g9th(j!Wz(;E*QdKk@*(Pb zU=;OJVps&)`zrS6H9jq0z&eXz_TMbupKgucnvq{#R3_V@oN4DFl5!Q6TY?>dRyJk1 z!K9#*E--UBHhy*ZHhj`B%{;-Fl-}8B@$xP{EQl>01}6jr`O;3BYXga)7zoMT1lgU3 zK0?I&YNfT{LdyT(EYQ}w(>0obUofa8j|s=?pHh77Gc<=I-l(>RzR{&O^mbiXpZ!Ae zXeHR98jvtStiKJ=Uyk_Fwc z`3R@|*Bgd+wu0cY{o9_dLCCxpJl`M7w1CpHHYUA)`W?|;t?(DZUxTG#9CdMq_#C1>e zYa0-YjaZ{};P*}^&d{RG4rZ`V&t3mq7PB|(?HJ3c_3d|cfhY3vS0ee(En@Q5hA_El z+a36O*Z9UdGbEFQz8vTHIKP_YZfk9+@+xl?!(rq*4T$!V9P&~Co2d+>KI4)566D?0 z5=oYNSG9gDCK1O?kt9BhDs&-Sc(SP;dL-wu9@wZL_ETjl+kW!SqOR8q!s+!`FIFdo zB%nN?kY5PLGWtrHsJR%5fJqnRujoHU$KTzjQ8uyh)HObYA44P4-8-E4EF`e3VLxmR z^z$aZ!0ujl@x;!LIP!HBXu;ajdSVxjm2O&!`fbTCIIW`cIoW*>li=B>&EN5em>djx z@7b6)Y_P!|(I!^J^PPCDU2@UW?1|?Y6sfc{h(s6B0+otse(^6cTy_Poz`ZSjyEEtZ z>n{xgFQcMB_w7kP@1AxUIN4il-l;BtEWH7ZKiPrQPR7-2cM!$3X1kQ4#x_?99z$r3 zZFM!xk=6zNsvHu6nJPhJk<;K+p|aR6MS2UnQ@nC~z|rQ@VEOCcYNx&`O8I?$BkAZ} zq>v_lIHb`2n&77IG-(x<5XL>O87H}&bIy!{l=U>@5$bzL_X@XU zkRj#avLwj`<6W;8a!R|Cbo=(4WsjJe(xuYjMPv5f>%n*9V}fVc^=(7w zZyKaYv8_#PD|7?#VF(ho!Krd=+O%Qwsg#fvNXdnZMGC)Wk`tETwhDY|5b&)RRZ!$L zr|byz$K8}j>ckd40^|wgbe^ij(nn+8yc#lW)`yUoEul|w#2j!Vo12(5g5sv3g*?^+ znBmGuY=)`2&ai0#!J!u?^gcKelapLR9+f6#EBjcsX1T(5AGNVEH-~px%zQS!A+*0H zG=S%USYl*)XbAiJ`J&DAqOJL1}F znitMG-I^pN-G+%mkwG{q=_U3*!~zGT0~mp69c-hJv47$4zQrF>O4tvw2qy9H{Uz}D zKxIsc|NmqEpCtb;De+ng-!9XRYcm8XA@_`kA+xD8VLuH_YKBWbkA(o>gwVs5{Z=L( zM_l2B{YE7=ElS@_=l9FWU!+#LR+&_Jm z{;xiB^}<51yXD$eqcEV}|GGJm@?R&mSp*s6PE?fQf#`EyOf`}!YUxJ`be-|{B+ZmjU{5Tc#mxSUO3^+TMw>=1-N;^P{!JhT%I(M;U zcE2B-Eoxw35U=vtrzysqS@Rlhk+WIenT#QHz)&9fTK{Kp=e?#33B}fk`&pK4V`)A% zr2f_ZKbMTeW&VTqRrBpU1PN~f$dDe?M|$!1(Gm(CeoqRM&iW~{4Eb17Q>c3I>M7RmbpN+1*o|jb zBJw$BC`HGC7>}m?PWZI_A%@jsR`uB>2uTs6HSC&`DBm=~K&V)lt_$iq0{du`B)q zZc#I9B4sgIpeLw&K0H#J?sFbPBt)I=mCkc#xoJPWkiCf*JO@kv+kKqbmz0qHKB-vCc|{u1_yKd&IdewFK$!?{7XBZF|2Wu-Sx%k*D!QqKWe~|K3|%ZJ}H(?4Z5bKgO8>eKFrt%LNFBZ@YM1&J%gSO2k+Xx8uqrS396 z*|(9}Fx^q`g&+=%Gi@`gbL{ICZBHN);;Rott2C_Pj9lhn-+Rp66q7xTJ)(y^k4mGR zYIfqT?!hD^cQ@N8L)zid2|;YGug= z;0u#B0bzNwyhfXznx}l^*+*p3qY6$|ei`;5Q%4V=Rk8KWoS#9N`TR<(2qn0PknR1M zHuU#T7l}Lim$=SB4seTF6}Ypt$2mx~dl~ZEMCD31&P_J_sa%p9OrXiw|J$-;hOUt;nxM=d_jjqu=C4W zCLH*PyjID|>Te;rjSjNME+Z0571QW}@adl&-GLOiYq9>)B*{4QP3eL`X*W)S>%rof zu`-$O*-K#sdkP78mq)XI`D2p`_K8+u9(J(*#+X|M4@yn+SfBD?$Im|JSMoP!#XT_S z@}Gud*bqkvhFI3ql2QK^f6d!K<@8UqJ7NxF82_(I>tl0$@^i2GVRIt!VD!M~NUgU2 z%vQMPNDkC*Z7TO4(icTK8_W|)hZB1hNSFwzz5CqwIyoRM9Y zw9+63J+OQn=$K$Yi8mm$ghefZJLf%5U2K6})+r<@Na=^)NUi1^3;TE_Q8>OW<0iUm zCIy>-155y;1$W*Tp0QYA_2Fr;qT)+U9Pw0{^n~BYyR0ZhNRcApmz^%QdrhgkJ>4&VPgy)a|VKU93XOb>zb%^(<0tO3(!N3HU$ ztrdQnYv&N9%ZY;SCam8+Q})=mM!mka_%(2SHtj_ky|1u#?+gkyU}D~mD8o5)v85!$ z;t8VEbNz|R=R-{~r~@nR-kd+y-!g>*i7_8+beJLML?n^DBdUY5DhKVKR&ct0SP-GX zmyHUnxhCuW!SZ`%AtK20Y02qFDhGKv(?47MaxivU_KKfzeKxmtaI-BUk(&6@Ia=jk zCtTS^CgwA!BDT@3d5U!b%SAVy!*1v5s2+T)Q6vlZ$XDlWS!D)HWA(IL9I>mm*~ys| zcYhA^jE=%OskB;f1nE=upU#NLBOlCd*%!!eOWXLt)>@cOmQWnFH2sT;ZuG)BrGjxU zQws76VsVc5i~_^R_`+10=o!Y-Im5`*2^{fZ@LHx>^gzf+ZB81kpls27yow*0s-wo?jP=q8PHeYMke?lE_a^2H%);W5kO>Pro)Itz7csSRkJ?`YF6RTZ>ZcJ zdh}{O%0vny+q@n`{i7qEhKmzOI;tQ9<%fEHn&(nYWRSfKc*StpOH5wL!JoZ(hpagJ zQ^k>>zRR3Rwc^y%Sn}4x&`_4 zLDM=~#pi`)j!EK-Uk=y?vSC-EH0qR^Kj8G+{y>hH3nEdiX$#%F&?F=pbp2UUNS=0( zeO&83`sV=U@@@plBt|HKh1;V$; zKOyG9M0Cf+Fs?@03LNnp??%PWgV7`tx_zv{nm?0WxNXHQKXY%0D|0j!QEE1j`9W`r zAw4iK{}iAPYng8GX&!28?sO065gjS~vIIH8F$8D=zWC;dr}rODYi1uvY)jkTd%a91 zI?QA#a)d1!4EDj{5ItBe$n2BfVg}aX4V1AW@SB);N-*W{b zIb@akRNnyHhC62nA!Oxc{YtxM|O%rE!YGM)N&yGX`R0DS6 z?;(yj`EDffFx~#C0qxJj>WtbE&xDg`wJ`Fyk@wMW&m#AONGz9HA7hwg-8=1|EvBP| zw1M(_&m|FcBhEgP=z-12EhfJOAtIQ z%r>R-jI}W9b}y!V9A)DdPRZh^BKef}eb&?|Lud6L!i#fE+ElT|hQV_Hwx3r)tW)Qg z#i)FK&>WL`6zDeMzrJCCq92s)Rf7H!Mp~1&cjw+f|7P@xEkQl^45GgHoPbvR zXV(U8F-sJGG1CT|Ip)nr-g1$&u0r)-w0M}M#6%cqYDESZ6SXYCrXfKHv6@M@~P$};QnJ&HyS|E=%kI&Z_wMp^xmEfKANF^ovgC1rV?d0c=Eo6%T$jrSW znzfm`rR^78kB_WynbaSwbuc>Wg`2}_8#|miZE-pw9>-W8@W0G=e$SZ`K!O^1`zkgV zfW6Vq+s7ZQ0lH%c(2j^6PNO+B4{0{pjIdzR>-oqA&ZL_Tz~;x(jE)gcd-o6}*gcu= zI}sd{Mw7Z^=jGEA@oFuOXx2%en2aN%_ba%m(|+e!oXe~`10`C(^6{My4N!Adpn6b6 zT0Oymj~the^3R(DMyo8mnPxCw&`{YpDOlt~t2hQqADQ}`H`ozBcjn@9WaR-i;f{D{ z>-+2I#vnErn68njDZgy+HIA~p^+5*l23G0$^^Bc4A&@!{dCgU<(=&25{Q(=rjZ}DV zsdvPvI2&RcrCWJBgpIP|d6a{Rw6yJYvvDyWwhAF8NnFLIfWBr0Nnd*wr){=t|Igwb zK+L1FX*9wM8a=HVm602?+QLVUz7!>V&Pt@UxzOA!Q6`lZ(LD6(eaj6X*W8EA?232; z2a`mKdEy%R0V{hx@(O1(Y%YFQa{rQ#O@-;Hv{xgZ{ukv{iVP@Hz{~aT2zi|>bZgL+ z1Bs(eCH=&TL(fkMAp9@5ii1|2=EK7hx~bf_Z@f1aK$6?lJW6P5XkTF`jndhxXv;^& z?Z`1w>M4y4;fp$ys2XCqYU0E6LdPsk7$BMB#0Nt(Y($bK&5ml^#6mTAac3wt0*F*I zPdqSyyPs(DBCq0XS~~$N&HU diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index d4362e69775de6db2d1dc7500752720e1dcbf26b..69c25fed63e388b1e42d069eb1531a823c860ea3 100644 GIT binary patch delta 345 zcmV-f0jB0RJS@X|-441z% z0U7@p81y**u`>~^8K|@U1>42%%>V!Yj}rQ0%KeX6n}7Xd=zIy%3A8mv_)m!7A7Y&i z)YiA6IoGO8qg9s9~`%=tI%8vE1# zOafg0vqgWq@%<&r&p`c-ynj0$uwMSc1ayMQ$H(p}qD1)_4)SGx-}uUSVDs^%ckd{F z)6a3&AVD)HGg8Ae)$h@)pAIoF)UCeo=kLD)FD+s<0|6Hs^Risqqc>jzLl79?-+%q# rWJ6I;AZ-IxyXZ>dk{z^J5PZ;FhJjN|3y*MEj=(ccVi ze1A#vGR#m%ptm|6urgf!!UT4&>Bq+m?kb`<4Z~|74CKrHX1MW{k>SAR;|xpg-eFMs zrq7V$u0g(moWK+_P4zoNH0vjZLqLAr>I)2i{{CYq@O#oC&p;61Vq<1lmTSv!^yX^@ zNK`Q}eE;=_fs+kWJJER=q}fGRlAt=4Z{NOs29{@B#2SnbfXrf9wQAMUtgNgeY8bd? z&6*V~wY9aCj6e_`9v%a%0(i+W2vh~EUcGvGO-)TX00iNuI)?dV+yDRo07*qoM6N<$ Ef}h>-EC2ui diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 6778d67e433491fd869aa013aac67a426f26d73f..d93e7fd71ad1110aad02e2b9bc8f7160f40073ad 100644 GIT binary patch delta 643 zcmV-}0(||{2ayGk8Gix*000A=FFF7K0$52zK~#7F?bb_Z6G0dN;F-y0W3{A>sWe6u z@m1)xO7UhD!JDRth@$m%kb3aogJO$MJXjDsdr&;6N3r0oO0S|8?LjIQJhaU=(rT<} zlHJVi@9a#nO?xo287*2xUdo0DlhP0RER?t%QfN3h*`n z5{-k+bb|^$!kH4jo{r2??5Gxk)A8DBU9iU0Ij&a1R=ZKe`n)hw(03O#Xp$ffEI)*Q96Y?yj% ztryh=Ts@mA>3_n}7(MJsm4%slgU=?Xu0lN$qZt3KV_opF^(yM>s2}s>$z0fSh903X zMi*O+P4(|wtfJOpQJ1J=d2&}%i?H}jVGIL_+NujDeA9=7-^Anu!jjX%Pfr%5dT&ZS|r*FM81*q@<$gMMBW)D5Ich{tJ!XS@WJGePw2~TJD%N+&wkJI+}&;r1VdrWW`DD(uCA^jJ3ITJ76Tg? zFUH|;jC6E#ytLVD?S8+XBkc@%N=Zpc#>NhV!EkgVQLCfV=`xK*;|Z(PdcL-{w%YA> zPct-4Q*CW+oh2nD6>8$7DJ(23?d2SjZ}~rgE*}MbvkdUK&IjB0;7VoE5@cxka35V0 z#er_b-I|Dn=_M)z$f58|iaea+KvxhqgSgNHaMj66viGSNa0+pEg1FEc@z994swDY1 z5=DRnciW{Ex-~S>;Ygwex`LIPUZ-*mQQ}CV0=mU+^?$Eaj+fw0MTsMc80eDV$RT8< zdOXx^QwA3?a7xmx0g_1Lp%!PVNg*7GY@l>PNXMLrtHFg@Jy$jgxZZJ29CK3KmjxQ0 z&&1%t8A7&;!S^nwd13dzI+KvG#)XWxwYXu#-JjHghYS4@F%%EY>GE*0fjZpzJslgU zqA+tqaetqF)9_$wecTPi6>Q~X;ba3v=72L-;8ZO$k5En;5Vw?mA0bF4O zxQKuv^3g62B+#&oyM(w!tlZ*!U??PRAv@=xX=miPh=C-Dn!xLapIAAE7FbEQen%vY zxR$+MD2f6X6;R9$tY$o7S#IT;kN5lGYu^A26@PDsqKYhafqUY3c$UM0btD$1yp(`j z=zkBa(+SProS>m8IBVRm9#BNKBJ%Vw1J1Yoz)nm6ufa~nk~Xys3fn}ARP1_?AfIOb zfNIYy%rkW0{2c7^>$X8*{am?xq@q{U`m}iHy=sK2hXXJ%yC}4gDiY^4+h_3kIk<34 zuYVqpWM6s$yuNY-9={t~ZWD<37@z!w%bc){YCsX$VkuB$U;pRtVkN_H9OqRV5iZ2W zjE#-iQ&Uqj)W)or@$qp7L+%M142Dg21Cykur{@*(0z>Wz=jG)cRvRRZ-EJRh#V|gf z&u=!HE4#Y7-sI-y9#R`d;&3>IO(xSxmO^EH!Yp<=os(r{WyM%YYfVj!B`YiIz()TK rfravpj*i;9ySv+;U_2g=FnRv~wSu6%0J!dW00000NkvXXu0mjfj)&Er diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 7b6f7f56c188734c8d552394c32497bda9724aba..9fbc865279ebba1f73219e70bcd6a022d70ad0c8 100644 GIT binary patch delta 923 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 delta 747 zcmV1o#Dz8Gi-<0035#XAb}X0>4Q_K~#7F#n)d*Q&AiT@bBF{*KD&*yVIFg zFQo`7NH0MIQK&(Y6Qe(Gy#@6kwA|c7J(OviMpQ376ukvKlr<*NUhJVi5ClE=5C{^5 zqU>(%&Nj;H=IwVkuPy}L^ltseg`LCB`JD4R_uPBNKw&nUw}1Eb^?7=Fdd}9=)Hq;p zNRku|1Om^8hll-%L?X#77K=F)3XQk5wH-7X)5B`DiY}MydS_?n$&QYWBh2k~_ZJh) zjh2>{10IjZ%P6JiN&)K8-Q9hL+3oh)Qlg?LI#?+|J+_3VRbX1-pyt%=;8lnl^tx$O z1Mi0gyh|`FQGZ#bvdETjyI#>s#-q8Q9wJjQSf`*?SRdRJnxZ}*gv;x6||VN^(And0b7Pqx~@8u4ANywp`JkhcLC4B47D~&C!d|6 zHkih81GkK}PM50}Gfy2KflueM&1U1k{;F)c8}bD6M)gS3HM78FzH0+e{wSCk`v~)e zR-oKm9Dh_x_1y*qS0>9aK9@rBbqLW|6wW&mMqNj-*KRQ$)uPM<+-p>D>GK2v@=vH7 zhi_66r$)vRbZc;h@u(I8!4JmYFq#S diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index 635436a40e668ce5ed66d9ea8b41472f8ee38680..06d76d72a9ea347a11925f6be7ed79f9cdd39eb4 100644 GIT binary patch delta 968 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 diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 6778d67e433491fd869aa013aac67a426f26d73f..d93e7fd71ad1110aad02e2b9bc8f7160f40073ad 100644 GIT binary patch delta 643 zcmV-}0(||{2ayGk8Gix*000A=FFF7K0$52zK~#7F?bb_Z6G0dN;F-y0W3{A>sWe6u z@m1)xO7UhD!JDRth@$m%kb3aogJO$MJXjDsdr&;6N3r0oO0S|8?LjIQJhaU=(rT<} zlHJVi@9a#nO?xo287*2xUdo0DlhP0RER?t%QfN3h*`n z5{-k+bb|^$!kH4jo{r2??5Gxk)A8DBU9iU0Ij&a1R=ZKe`n)hw(03O#Xp$ffEI)*Q96Y?yj% ztryh=Ts@mA>3_n}7(MJsm4%slgU=?Xu0lN$qZt3KV_opF^(yM>s2}s>$z0fSh903X zMi*O+P4(|wtfJOpQJ1J=d2&}%i?H}jVGIL_+NujDeA9=7-^Anu!jjX%Pfr%5dT&ZS|r*FM81*q@<$gMMBW)D5Ich{tJ!XS@WJGePw2~TJD%N+&wkJI+}&;r1VdrWW`DD(uCA^jJ3ITJ76Tg? zFUH|;jC6E#ytLVD?S8+XBkc@%N=Zpc#>NhV!EkgVQLCfV=`xK*;|Z(PdcL-{w%YA> zPct-4Q*CW+oh2nD6>8$7DJ(23?d2SjZ}~rgE*}MbvkdUK&IjB0;7VoE5@cxka35V0 z#er_b-I|Dn=_M)z$f58|iaea+KvxhqgSgNHaMj66viGSNa0+pEg1FEc@z994swDY1 z5=DRnciW{Ex-~S>;Ygwex`LIPUZ-*mQQ}CV0=mU+^?$Eaj+fw0MTsMc80eDV$RT8< zdOXx^QwA3?a7xmx0g_1Lp%!PVNg*7GY@l>PNXMLrtHFg@Jy$jgxZZJ29CK3KmjxQ0 z&&1%t8A7&;!S^nwd13dzI+KvG#)XWxwYXu#-JjHghYS4@F%%EY>GE*0fjZpzJslgU zqA+tqaetqF)9_$wecTPi6>Q~X;ba3v=72L-;8ZO$k5En;5Vw?mA0bF4O zxQKuv^3g62B+#&oyM(w!tlZ*!U??PRAv@=xX=miPh=C-Dn!xLapIAAE7FbEQen%vY zxR$+MD2f6X6;R9$tY$o7S#IT;kN5lGYu^A26@PDsqKYhafqUY3c$UM0btD$1yp(`j z=zkBa(+SProS>m8IBVRm9#BNKBJ%Vw1J1Yoz)nm6ufa~nk~Xys3fn}ARP1_?AfIOb zfNIYy%rkW0{2c7^>$X8*{am?xq@q{U`m}iHy=sK2hXXJ%yC}4gDiY^4+h_3kIk<34 zuYVqpWM6s$yuNY-9={t~ZWD<37@z!w%bc){YCsX$VkuB$U;pRtVkN_H9OqRV5iZ2W zjE#-iQ&Uqj)W)or@$qp7L+%M142Dg21Cykur{@*(0z>Wz=jG)cRvRRZ-EJRh#V|gf z&u=!HE4#Y7-sI-y9#R`d;&3>IO(xSxmO^EH!Yp<=os(r{WyM%YYfVj!B`YiIz()TK rfravpj*i;9ySv+;U_2g=FnRv~wSu6%0J!dW00000NkvXXu0mjfj)&Er diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 161cbbfd4fd2cded6001dd0db5e571bb68ea7818..8fa19637fda7aa067944f64f555124a844d17be8 100644 GIT binary patch delta 1332 zcmV-41XB1p`S$K~#7F?b_XI990wm@G~=aXKShrn`8?b zF}76{1o1Nkeb7fg5Ntt7K$KM7ZmS~VqZC2XmOiL|fHBrm+diZ%jYf<<6rn<*eG^+j zp`}u#l>KUUvzfg!b3L=OJKf!x*^T7hnJ~^_$?o1AcJ`NZ?th&-cZQV9W%xe@3Ht{G z9WglS5rd;1F*xcGgQFfXIO-9DqaHCh>JfvZ9^r!-gDX_Rzdd6_Wsvt#hweK-ZFnW&WNr%=6=_Z)%P19%l4K6zk4UB1=DUwqKf>qkJ zoUPpQ(n45Z)PH`JCnqg!_fCmg`aC}^gaStG;ap<2NP3Mx{Iw7~*dC?kO1-ta)B1C~ zwGc2EwZ{ttwQY@F8)o^9QXLT-7_}#xqmsrwv*Wrlc;$?gaO zY>!e_CA<1XSJi*0%zW$L z3e+AL*4C~CUK!RrkFf3U+}e@>`~0;|Y$oQR;aWPeignFZ1P3r0aAH_9;m0!Z>%4C5 z4Ff*>J9*V#Yc~!Nwx6FCcx4!i?VZh3m0{kauz$TP8FRZD?ZIK~c79smI7*{AJ496p z+J`O=?X{Zp{$+JZ4nYfikHe_iHAs=xT%hyT?z*7mpIzVJNRpX`%DXM z6N7Zcgddg^x3)mx&5P=l6)U&7ie>9>H`~5JMM!S#;6Il}VKz-4-Dr&VnH}29@5xJ5 z*?)25E7k-)OeBU?snCQAKUXmQJ2+UrMo#w|AVEiLzt#E}_3C zh(1gtICM`fDJN#HlQt??xh>CqM@uFA#~1*6rx&qJs5zi34``m;N|O?txYn}A>T+fF zTfJD4>eq;w0y<-RrWf!ZvSV~a)GrbAz3#x;-nWI~i-x&USw1so6pElIOp&ZdeSb5< zWP3he)TlZ3q>%m`=+#5pTs7g$Wvx0hORE)QLxL&Rc*dHmB=}4jd;9Ru_LDNlM{W;A0w9tHT{E-!E96i@s+pJ@i*I?|e>BX9EzV_6%weK|KJMqx` z@hgwL{`9@g29N5t#%+_y*5W?vb(>S~2>)J7?9UI5q=MUBV0&685rd;1F)cXi5rd;1 qF*xcGgQFfXIO-9DqaHCh>hUjhX@f`c2YrqJ0000>2p~yBK~#7F?VEdSQ&kwizuw-qvQ5!F2=a8! zL>7#qGe9)qVFsC!1u>C~X+(5vFqmkB5h7zs#w!Ygpnoht$8f?(7{d+(G-Tm1g0H`f z;39}DIJfD#2kW}7kL&l{amQ`f+ij`6=U&oZ()RY=bJ@2a-+wvZIj0>DA>etQn>TOX zEPTvQNlBSHZrr#;Ivwhs`v7lqbMwD9Zrr$5S66rL%$YOiTrQVasc}#l7K?>ny?XWX zRjXF58#881a^zywCaI~ZFn8|U%$%H@Lc87m*S>xGN_Xwr^|{00a0RvX-P)D2Vn zOq@7zN^Naz{hBpv-l(XksFuzT2*k{L7Ui8ld9iFl)IL}fEPMCvJ>1gLG9Smr^Wr&r z8Z~N^$!fKJ6_qzM9LJf<%E~IIO`De5-rn9V3dCZua(~jKNvW)Z(+dd+2@?tn3)gMf zu%Vd8ifb$=C|JunD7}Fd`n~Pjx9{LHGBVQ9=tR~5=?xtA9?s0nT)?NNr)RJZMz748 zHR~n*DTH+(dIcxkseD{qToUU*^h#`OY$8?R`+aR2NsLi>VG

CQ*T55)~LGQGsEi zD}jOl(0}MQh_54IvRMFwAu=)PMj%NmZ!GZ{zP)fE7t@c+8@>BOf-p z5J*xg?f&wDL0NV$I|ax`c`uKSoIFDF0?Eg*b{>wm8~X*xt{EUO_Mzw-U1cm5t{C}Bp-F*K!8jE{UXZ&WFVPLJ zs3?!noIuK|BRJ-fykOUq?pl$k&X^a7rUXg_qq?0J3x;o4^S%DeVZ8J0=k6>t{LY7(sw_+JXrkN7QC*-k z<_+q$3i5=z&r2ThK;~$VIzf&ARRv1Rvy+`8lb40^UdKnI_VmI*HG$F! zjmjfb5g53_kP3y~LJ ze}?>Y5|0Ha-UFQ8J`<6aXaA?XkDAQzx0@Tr*x3)s+dAGAF?mEpGtd>Hy9Qg^D#`1_ zsbA4BU&dyQBYnFo}|?1f%+yC!y+Em}ITQ?wl6m zg&8rvpz?Bmv%pO!=htOPA~k(TCQ-T`Z={03MjoO1ZVZiyGh=;&&QrI|!OSCh!Dzdi zi6l`{^@y>5o;ShFMjpX@OP?Tl%V^B&4K7cDB$6tU7_R|&1apBM9vGH9secmx+YJyW zcwp-k4|910bAb;T0j53Z3n@@OjS-wZ@Jr2Exb*6iko5xlzXfM5kjBK#kGsL;Gr-w4 zqu;f_`Jdo)!kx3=dojCnNdR@5O5@C4Xu{AVCsKFcU5KdbH(USfWIf=dgVPo{mm1aQ$Br6fjvm zXnLjfir8w=^vP`EX7W=NAU8$HZt=KElIU=N^Ta9ec64C0I6vg*VHn6xuMZ_2_#S%Q zK3MXi`eUM|1QL?O9-J!L{&az}+6Jy32lyT^Vb=8*8bP+LO^0rLDt|cmgZN%;iJB8g zki;!1xa|AsSE%y308kzgD9&$;#K)RLKZ3=?!D}jZXH5zuXiVJo`cyEudf{;WAAZ-A zc4w$Nuh@S@y!hG-btGz5Ai-moEq&{Gh%p;sf8FmxZ);%#H#W#Ua7BEthD1#ZBshZs zwq`vGK9sY+?t0KRB!5mW*5egmIcB2E6ZyiTd4U9de`ec~=fp}|c`2|v`^%GtN$Sot zPwYd9OJ}D1^j48XB&qrKQbb z9gH5ie*Jm_f8oM~y6o)ieAdC}k;|7aU*c^x+sU0fciLlPW3@HK*En9U*ZDQVcXf63 zTCLVE3JMB}SO=vijvhUFu(`R}E>2@UMY6K8mL?@7vHgrtCvP})YO)jm-jwO{A3X_ zd-m+P$;ru6#*Q7EpmfiDgr~K&)qeBl&4&8=`inI+HOCtp8(Wnc{|9<`hPuGj0crpM N002ovPDHLkV1lQ#8_@s& diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 76e933274fd70b89850c79f9e56fe2660fd4816e..fc455d0cfbd3162ec649441b5ed3c8f07604fd42 100644 GIT binary patch literal 2097 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 literal 3211 zcmV;640Q8}P)8OJ|h0hNcZC?I-#E1LKSH6TVTmUs>}D4HV}Xd`I_jnWXcp4!F-KB7mfCQ(VE z21}DjH7Y&{H5!gYjE`f)YTIa9)JjBodQ_GLmffA+ZWgoLIc4qee&RLh8omnpa z=6~;w`t<4CWy_ZRktDp% z+(u>v&z(DW`nGM`_Vn!8bAV&ZO0g5KxVX5q=;-L#n>KA)x?{(VFHEgyRIrzq7i{0Y z{av!BYyesn3l={=zup@+Zv1>AVgCI2nF@tMZMaSc!6-K;C+Gdd#KfhYQ%s7z%$PA_ z@u5S9dL<<#{n}7+2f-w{tEgP@5fc;hdR|_hV$Pg7^VRA$$L$2Cq@=`?YI$9!myY5P zrcImnThj5mx^?T;-P|&r;J$tP29OTbUZ8ERs9CvkRjT$z=Z7+1a~dV`CH8*Z5CZSl9s4?k;j|(I}20GBR=|5&Tk7QPEXaaC&FNSe9E-27Z;vTc zrbNo3qob#i*B-7e5XJFCL`1wS8#89iSXUQ>;v7ilIZPHB8cHV;BuY?FP(SQs1-QB( z6sO^jg1uZ_3X0S4Fx1!7mYs{+3;s#z0qY+6LY=zfj41=A1#67F;X&5U z>?<6(h+7LrxhpGtL9VfXIvnLL4Qhd@0mkY9*WtE;AG9XdoLqc|PZqi43QaEJmVzI& zCb!-}$z4K{`wIceMchs>*XBA(E+$u~auK%@jLBVPMRLtm&q7Zwhua9oL!tGL9GBd; z1)f|Ew-8*bBGodHTc>i2+;;@pp)!W#1!HniZmk))e2-dD?(h1DM=m01!6@!9ddB3U+*iA+98)+KASuB$D$5-zL(I(3%3Qw51VRFb|yiD(3~gBTBu9||Eh$t4dDDcc2+ z2-Xc^P`Oqkc){Aq`i^7Eh;{8PyME*k4U%n1leFecX?xrQTD38Y${$3yPNHQsRMnM}8yu?x#A|2{3F ziP*LMn)!V|CmC##iSj7gPE{l@DByx0h>coBtw_o7GPV-U4gq1tWNnF9WN|-jC-~ zHJG{jz`Ou{a&c$+pxSo1`s?9#D0gLu@Z=(b5sVBc?bmwJe&J*SN_NH|hNe}nVYO_F zTx7gJlgl9}!N_2eYNNMW;Gf*Ad){!oy7f4hJp8Tv7G(W>;f1bhcE|G-(4mky1T7fhlDw{6o6KJ> zCYO_o>8q*NJ_mH+_xttbKHo*n_VmRf7ZJQ*M88dzYXDM+*d!iu*OKHOtCs0rbJWVU z&z2_8Tuc2ZQ|t1Vx+vXY~dco-QwZ3XNUFQW2R?a0G4plOBHBfTk z8z_Er0>p>+cW60Xh3Ew%78-5vZD#@K(-c*poI9UX_4k zNeD(J1ZrSUm=YG=HZ9rITXH61`-}2u8*S7*Dd< ztNd%K;n~;UfTl?a9-cS{&9IWON-%;+-aASO3vT&<+{|gW>~bQv z{?y+=qf%+_#gAhso~?I@#w4pWkVcZ6Ly|03$&wR{V4J)PlWe5A)(Nk!2KiTCgGQ;X zmbqPl;Uu$@6AY*^$vKzc^F@;(c1%d8{vD1$l7f*4lH{DxN=W~KBw1~c2FlAIwr~V!GB3Z!*+q)(muSNPvuB-yZNm4D7 z-ZFT3f(9QlPi+wpiqovdu10~NRNj`{e@@Qcv*=+

$jxjVmwFEXM9on*HXj6{b8!Dr-<2a}AFIIKGP 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 diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png index a6692df140a59e27282c555fb30d0638bca23b58..f5994b8159c153beb2b211120662c4c80befa323 100644 GIT binary patch literal 1754 zcmbtV>01&895(YlNfB-3L7IkuN6Y0gB^gddMU$*NvJ4ILK+T(lI-2FJscA8fJQKwO zSxwEO2*b<+nn`(~ZB9fKkI?0jbAQ90=RLl>U*6~WJ-;{83*)S+^o^2~l$5Hg3(EVz zga4y~^nvcDNgtMylB;q>IbKLQv^?b>0rb(4UuE!oAH#c;U~&q^Kh8S3=K#0>9FXMo zL&J}*044G*ZpLi3B{H*LSrM#pq&S;}sxYvWd76nj(&XcEJFNsoaEOK&ydxz3ZuguK zyL+SFu6(-u(KOClyKqBY-GXuRNnZ;8cl=0%f=Q995%vnR+k6(2#X6DkKQN%1Rwon) zuDP%couk*3(O-|A6RdUZ3TBu4G`RG0!kS(|<8)dHZ@2|WGA<-;jH|sI zQ?#y-vez?Szku2tk7D$q~hEGb6VMP?oR+*%}$alIPWrtl`m`DkcTTXpSD_uryj{g)qiF?t-JzXe+Pc*xOi)%_}u1 zR?sV~3k>5_L~*1K8S^eV=>&DoY<(GpaBBg_XtyBx#v2_O-Wi8V)>u{1{ClSGdQ=JW zH@c`tCj4e#e<3;mg3@|B@y5=l9~0;VX=Z-vJ+lhG1MIjNMEx5}3)}o2iY|ATor@eJ zq8mypVEeYA?c}rU_Y`5GWuuxFZ0Sv?6J%jJCm(p5dR*68L`7#Oprtvnlk> z-o)d7*sslrE_)>^k&D@X<;t)7Je?bBn6W(HTxXbmDhT5Ec_c~F10CdltX>ch5N%)y z@+38^E2^Hl-U@*qD}>))bU z?$9m7_H}s_ZwjHT?okbLBYRnN(?BLP*KFWE5 zILqS6cx7&=UiODyA-J0Al+OcgmBAxaIXzE5YecXtH6EXvxgwFaj)6u_Y4IqMkYR|~ z!O4N*_{6IasFyEqI62j`nM>-f1vtYDKE!`y?1%*E!;g+#(#-beu{|CQ%uaMORh3`w znrt;j_6&XjZ%OP!^QHtwavJ=^-e2{?REGR4!cRAa!&FDVi^zFA{l{1czF4_G(8;~v zCF;}jkpNrO7g3`98e>pJBBFBp)AzIf)uH0Jc;BjCn(lVBmZR;1-Dg<0`W$bS#{qig z(~_kMEp>!d(H-smQM{Eir*~1f{w+GHk*2SCm}*$=cijSTrd9>@O8IBr=1FzB*!k<_ z0TFxj3Du2Q96ORC5_^(jQEqjr5Zxdg_T`i;OGg+!UqSfC4rdN-Gw|@b`mIXqTypBt z#cj^qu9sZNW#TD?)Vt6oKvHQyk9f-x{V)WPMNU`R3++Y(>K?aEvM$AL&=u5F`T9X@ z`Dq$gPV)X4Bb*-|`!HGYm-M0JzSO(h>-i>_U*dpye)4Z0iGnwh-i)+(PU_g+li2Q zZP9medHJqHdpQMoMEPBSwp~ZU3b`2}3HaumgQv<`^qM0HKEsvF588Ml&T-wmU@ozd zB2E_@L_nmhGl$n1phAWRBbl^@?-O0NZHnInqDzg;K(&h7G0Riqk!(zv`Fgu@qmkED zXs=)-Y@6v^|E@!?if&*mE#GvzM^7;vjAytvyqFOQJlEa{W`HJN$;6(-J* nx?7nCpZO%l2;}&G@b&PC1n|%_?t0+CW=Xj^VNfl|Yvg|c8_G{! literal 2617 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 literal 3211 zcmV;640Q8}P)8OJ|h0hNcZC?I-#E1LKSH6TVTmUs>}D4HV}Xd`I_jnWXcp4!F-KB7mfCQ(VE z21}DjH7Y&{H5!gYjE`f)YTIa9)JjBodQ_GLmffA+ZWgoLIc4qee&RLh8omnpa z=6~;w`t<4CWy_ZRktDp% z+(u>v&z(DW`nGM`_Vn!8bAV&ZO0g5KxVX5q=;-L#n>KA)x?{(VFHEgyRIrzq7i{0Y z{av!BYyesn3l={=zup@+Zv1>AVgCI2nF@tMZMaSc!6-K;C+Gdd#KfhYQ%s7z%$PA_ z@u5S9dL<<#{n}7+2f-w{tEgP@5fc;hdR|_hV$Pg7^VRA$$L$2Cq@=`?YI$9!myY5P zrcImnThj5mx^?T;-P|&r;J$tP29OTbUZ8ERs9CvkRjT$z=Z7+1a~dV`CH8*Z5CZSl9s4?k;j|(I}20GBR=|5&Tk7QPEXaaC&FNSe9E-27Z;vTc zrbNo3qob#i*B-7e5XJFCL`1wS8#89iSXUQ>;v7ilIZPHB8cHV;BuY?FP(SQs1-QB( z6sO^jg1uZ_3X0S4Fx1!7mYs{+3;s#z0qY+6LY=zfj41=A1#67F;X&5U z>?<6(h+7LrxhpGtL9VfXIvnLL4Qhd@0mkY9*WtE;AG9XdoLqc|PZqi43QaEJmVzI& zCb!-}$z4K{`wIceMchs>*XBA(E+$u~auK%@jLBVPMRLtm&q7Zwhua9oL!tGL9GBd; z1)f|Ew-8*bBGodHTc>i2+;;@pp)!W#1!HniZmk))e2-dD?(h1DM=m01!6@!9ddB3U+*iA+98)+KASuB$D$5-zL(I(3%3Qw51VRFb|yiD(3~gBTBu9||Eh$t4dDDcc2+ z2-Xc^P`Oqkc){Aq`i^7Eh;{8PyME*k4U%n1leFecX?xrQTD38Y${$3yPNHQsRMnM}8yu?x#A|2{3F ziP*LMn)!V|CmC##iSj7gPE{l@DByx0h>coBtw_o7GPV-U4gq1tWNnF9WN|-jC-~ zHJG{jz`Ou{a&c$+pxSo1`s?9#D0gLu@Z=(b5sVBc?bmwJe&J*SN_NH|hNe}nVYO_F zTx7gJlgl9}!N_2eYNNMW;Gf*Ad){!oy7f4hJp8Tv7G(W>;f1bhcE|G-(4mky1T7fhlDw{6o6KJ> zCYO_o>8q*NJ_mH+_xttbKHo*n_VmRf7ZJQ*M88dzYXDM+*d!iu*OKHOtCs0rbJWVU z&z2_8Tuc2ZQ|t1Vx+vXY~dco-QwZ3XNUFQW2R?a0G4plOBHBfTk z8z_Er0>p>+cW60Xh3Ew%78-5vZD#@K(-c*poI9UX_4k zNeD(J1ZrSUm=YG=HZ9rITXH61`-}2u8*S7*Dd< ztNd%K;n~;UfTl?a9-cS{&9IWON-%;+-aASO3vT&<+{|gW>~bQv z{?y+=qf%+_#gAhso~?I@#w4pWkVcZ6Ly|03$&wR{V4J)PlWe5A)(Nk!2KiTCgGQ;X zmbqPl;Uu$@6AY*^$vKzc^F@;(c1%d8{vD1$l7f*4lH{DxN=W~KBw1~c2FlAIwr~V!GB3Z!*+q)(muSNPvuB-yZNm4D7 z-ZFT3f(9QlPi+wpiqovdu10~NRNj`{e@@Qcv*=+

$jxjVmwFEXM9on*HXj6{b8!Dr-<2a}AFIIKGP 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 literal 5018 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 Ef(WB=-~a#s delta 1986 zcmV;z2R-2nbs&R*fMk zY6{r)OC@P4LX{M(XbT06;GlXl79=Gk zB)l_Y#*FCD&`=E-_HlLp|4e*OPtT*Krl$JJ%E}98&z?P}*XswI-N-l$FpOgJ=FRJK za&mTPG@8lc$4W;L5fLzJ)~xu9jEpP-=dYroqJxJH9XdKNFfe3&pADd}u&|I*r%s)Y ziHS*&He9+23V#ZkuyyO!gUQLsDQRhGDIFah4}@z^0TDQw^78UZLiTk!VbWK0bo84Q z6&05f6BFaw+uLC->Q$H&h$7!0f#P;PE+HmS$C zw1bn2A|oT;$ji&yv3>jYT})tLpqiNS4%$J5V#&3`?7`0x>C;lhQ&6}4;NI0Jp@iOJG$A< zP;-z!SsXYhSpn*^WX`j|*)y4iaU!<5vH`>rIE7uR(ZliMVD}^z0(`}dOBR6oEO74j zk8ZZ;Ic7taV3R~0kii77w`;hp+^y(R7_u`_1%HH@BfuGrrmKgSa;e~;r~$I~9NsQ{ z?6V2sd@@N~Lv|)AfCSH}9~ki*cjXmD%4(-Xo?|b`0b!rBS7%#R?y?8r`$Ogwp4CMdXwIWf$?E7B`zv!E>C!*=K>nxu7!w2VgnLoD`AZphWQ?G+Km|*Qth%K}Sfg zJm;<@b6C#v$vbAw3Ib>G3r0~tdMny0Hl9o#A>`XZ65!bT#hoV#*wmtefB^T?6@RiP zQvx_BQTw0}0%;$CvD;E^5iSh*x?Ta<4JyzZeV~_A%fui6g_G*!Ex%U~FzFic;h;qC zq|KQ`%I(BMC9Db^a`2qrdxzolnTDr}pHlAX1$b$^EhGWXa)cv6<_MBxFNU79F>J_T z95ZLbJr(rZc@9gmNN0iMs~9P(C4VGq7E6>lf~cJ+qUU5efg@yxI4CNBruuQ@hX<{}MMG(|sqL-31wYm3 zAZ^2J@K;G6E)_ty#D5dX!s>c8H1@eZBO0u$1O4@zP)$;2`Ij~D9R*0#JbwrwefFBvlB@usCIwkFUa2>%|p9fXe zKY(Rlkku_)oEAWKfKZr82r2E;i*UWI=jk}2v3^V~yso&TBS5R6c+(sR@bm7JWC;ir zLX7&C9SLAGc|NW;nmFJHEtS&yOTTOZp%{e%M%C^p#ar%W4M+|e1LQ$tfIMgnkOv{4 zXZUxK=T1DsvaDk_Hh(6w2%E=DLqmf$Dk>_5b}({Ob8~YeQ&m-UAtfbcCGBA3s4G{l zR5NGJoGB|TEY#yS4bToqPBNKHgJor9rOd;J4||UtJN8+2c6J`^pyZ_D;^O1?@85r5 zUgr1j-+y5K{P~L_A|hU+9he-{+1c5O-~NKH&4BcJeSdm-`hTMG^76}}p`laghDTTU zbzMuBE?wB&-ECgopEin(jg5aKB_+j{l$4wc4-b!|7a~1%b#=8ZS+XR#wzjrj7_;f5 zwOVakY;0`IKBCOb%yquLzG~^ilwKUi4V9Lbp4_%=+g1YUZ|iFgTaBKco+nvZSvds- z1qV`7Q$L7{i#wY;ZQ8U*jYbnpF3apQsQ+5rBchg;mWG;|nrZ^4q_ws6PiHs&1JnBw U`w}&h9smFU07*qoM6N<$f)IeMssI20 diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png index ae0059c21c0863e6bd6b2b092b87c9794712d329..1bad46bab62018401a7e86a10dd837d9c65bc85e 100644 GIT binary patch literal 2568 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 A6#xJL diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 4f1b8bc9151260bec0b371bb93e7964c98ef95d0..b8005ef75f3c2870718cd276a2f559fec5e7c4d7 100644 GIT binary patch delta 1237 zcmV;`1S7sjyUe*Yn0p}k1XV^4mD30S!18%4tb;?106!l`F}=1hdknufes8W!x3zkRe|z12k%UO?S>L?WAaCfr8S|<|SUl1sY~Kc&PzXYrtlJSA{ogyH!^Y~uyer&Ti2Cn$nWRV@2Hq~y zk1rc%m!iw;Em%84!aWyP5#|WnTNWb(Ax+|8^KO|QykeZa5p?2+kKy@jA~dYSAvZ!&`biM_DQ0e{<5roG~XAaI-v^cn8({1SQPcXN)C z&NZ;U2;pTo<_g~tEd;SM9d40AxajPol)oBjus~uzE`G?cL)}O@VP7R6Q|vQ z4hLMJx20BhUOlJRp$s9&xC${_hc)bQVA7mx1ouvKqOH{7tR>6qkVo$F2X?q^(wq+o zd4Fol&MbGsT8SO<$VDEV$;SzihpcN$_NFU;Jn_&201{`ka*^*pNEfJaX0c`bU}+SrM6sNFB8PZcZZ*yoWRIymJx zo%gm?uY8X}a8`I66335@SFz6n68cnhF9iD>?xsUk$h0IwrX~LaXt+sLl6ul900000NkvXXu0mjfQzK-( delta 1973 zcmV;m2TJ(f3AhiC8Gi-<0076AQ7Zrd2Y*RKK~#7F?VM{&6jvCAzrC=Fpf$ZvZ7j5c zmzrn_6mP{q!J0;T0b?jhe^?qNMOa$_i*ieWT2`yEwpcH*jcL;Khp`5YKtT)A0zsoo zz+llv)XGH^V^pf_b$Y(p9oSuFcUjw+Gu!U-hn+J6d*;b|&VPJ!W?3b;VfO6Vp~=a~ zDKRlIOTxm!UI+{foaF9!Uq!FikM#ET-q5wTpFMu;SXEb7SC6Y>m3)o!=FJPQsHo7c zSg~R?*;EMDQwgzP!2(#ha%EakVd2h}mX;F*1qEAlI^9L*;~a#^WHQLf$;m1%F5an9 zss58`ngFuc*nil!8yg$n*u8uAr)6bj+bkB#=+04LD66uva$9X>1Ox=q?wC}O%jHU~R=X=ME`KgwNv?=96B84YX?IHML`6l# zEnd7hQn_l?Dl8r3v^(SrBqb%iqg=FT(NfwS@fD(@qZcYeLqlJr-4S15#*7(ZN>YCX z(e8+^Kqmi5ythVvT;mt!C4OOE;uq#6eqmnX6T&PEz+E$d%(l%;;CH4f$jQk(ALlKS z7lw-}Uw_?FLG$p~Iwk{-(kylx40*kBstMMI7zOE%q=lh~-9%RF@WdB=QC1d_B@-ZB zh-8JKtUb2_CL{~p;F@US6l=1Cl7&c87&i=CyhzsTMAk>o8bL0gEJSj`Fj-$a$#OTz z1PRDOL>Fe^k%hPmmlTr4A*wLGWFdS*k!xBUY=&%!$U;OD#+NL z%>LfcQ}u2yYokPEA%Y3Bc(Fv|DOvqS8PwfVuQIm=y98pBxBSr*S)_?aC z82hB@Y|=1Un|Nehc_f33-_>xNBy6$~;OSs+`2+|>qO5!oWdVp(>2pb|7*Mfu6`w3j z7AFg3JQ%T-5YJ2=FO8G6h5XGWlf{z-AmY6w3c?e_n`pjdt+UCp2c;qQ((IEZwk!aV zS1Z&!wGk$3-9;kHIDYJ*q+z{PQh&%~V4v91N)`vzC2CC8S|V$RN0vRqwxms;LN8ey zRD~Vr3-Bn5D=Qv6v_SODKVWG@D2#oMM|`LXE1hY8I|db;xj(*6bEv;87I^sEukh2= z>k#tb4wR)vvj0p*1FFJ;h^KE}GC+3sn6z<)D#~g+4Uew>$p&lRsmts!<$v$ekw*Qw zB;F)f&NYDMk_y`HIX!M8vPK#jLEm!?WaRS7$mQ&XVE-?dS$X9Yl15z^f=Sy;l9ttN zm1dP?27O%v=&xP_wib~)R{r}=USgB>naD|#gfN6lS~f}AnL7*^YU)9MqYo@91z41F zw#Hx_7QYZ@#bhd7cS?Uag?<0)FpOq6C-Jo6NUt-mGDFMGWcMBE1bO0?|zAg z?8JS0>bt>0UVokzC8#t>3PaQZ3OJPcDy%)w3bh^myvJ~|tXPL9s(;!lpft$}Lr~gx zL|Xd37N~QQW=$RAu#N1gzXS#|1KZz=CKuL!Uz((aA!?-pzF)r#Zr>jnYjpE5AA{M# zYBUpRaseKhOI{eFB4x#lr=;<3ojxHtP_=S0iUznGmFg@)~_z(u=z`#K7 zoH=t|rri@?U~q7-Pk*V?>CVQ-$G=ItGrmAaM~6;XU0q$3lao_MyEDE(eSLk6vaPMH zv%S5&DJm)|o_2?%OixeGg@%TPX7(ysTwI(_lGY0UlP`#T44Bf=(tIwlW`ICt*cDUC+6f!iJx zW;7bjsi~=HyLRo`v1ZMhjX?A9vNT|-s;UlUW@cs$4-b#lst%R@$jFE}D=RCP%xA~7 zTJ4wN;o*_u_me(-eSO^}B_*F6K79Cu^FH2NBO>f{ZEbDz^5x5yB_$=j6&V@1@Ogq- zt;R3I{jVjDF)kPk`u_g@zRu3h^W?m%>+0$nO(qlXCtm&rn*1?D+r-}600000NkvXX Hu0mjfX?(EV diff --git a/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/example/simple_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index e9c078bec3b529e611917f9c168c637459681b04..b997fd521218e485b55fdc9b25108304aa1d7204 100644 GIT binary patch literal 2737 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 ItLO6YKMq?Ee*gdg literal 4189 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 RyMPTaxnpTqe*016e*p-*3+Mm< literal 4474 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 diff --git a/lib/cli_commands.dart b/lib/cli_commands.dart index 3acdfcb..4796c7b 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -50,8 +50,9 @@ Map _getConfig({String? configFile}) { final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; if (yamlMap['icons_launcher'] is! Map) { - throw Exception( + CliLogger.error( "Your $filePath file does not contain a 'icons_launcher' section."); + exit(1); } // yamlMap has the type YamlMap, which has several unwanted side effects diff --git a/lib/src/ios.dart b/lib/src/ios.dart index f283583..f2d2798 100644 --- a/lib/src/ios.dart +++ b/lib/src/ios.dart @@ -53,6 +53,6 @@ void _createIosIcons({required String imagePath}) { /// Save ios image void _saveImageIos(IosIconTemplate template, Icon image) { final filePath = - '$IOS_DEFAULT_ICON_DIR$IOS_DEFAULT_ICON_NAME${template.name}.png'; + '${_flavorHelper.iOSAssetsAppIconFolder}$IOS_DEFAULT_ICON_NAME${template.name}.png'; image.saveResizedPng(template.size, filePath); } diff --git a/lib/src/version.dart b/lib/src/version.dart index 2b5968e..ca63528 100644 --- a/lib/src/version.dart +++ b/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '2.0.0-beta.1'; +const packageVersion = '2.0.0-beta.2'; diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 00dd31e..8ba0ada 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -85,11 +85,6 @@ const String IC_LAUNCHER_ROUND_MIP_MAP_XML = ''' '''; -const String IOS_DEFAULT_ICON_DIR = - 'ios/Runner/Assets.xcassets/AppIcon.appiconset/'; - -const String IOS_ASSET_DIR = 'ios/Runner/Assets.xcassets/'; - const String IOS_CONFIG_FILE = 'ios/Runner.xcodeproj/project.pbxproj'; const String IOS_DEFAULT_ICON_NAME = 'Icon-App'; diff --git a/lib/utils/flavor_helper.dart b/lib/utils/flavor_helper.dart index 2094e35..775535b 100644 --- a/lib/utils/flavor_helper.dart +++ b/lib/utils/flavor_helper.dart @@ -99,6 +99,11 @@ class _FlavorHelper { return _iOSFlavorName; } + /// Get iOS assets app icon folder + String get iOSAssetsAppIconFolder { + return 'ios/Runner/Assets.xcassets/${_flavor ?? ''}AppIcon.appiconset/'; + } + /// Get iOS assets launch image folder String get iOSAssetsLaunchImageFolder { return 'ios/Runner/Assets.xcassets/LaunchImage$_iOSFlavorName.imageset/'; diff --git a/lib/utils/icon.dart b/lib/utils/icon.dart index be4d934..c0a19cf 100644 --- a/lib/utils/icon.dart +++ b/lib/utils/icon.dart @@ -12,6 +12,7 @@ class IconTemplate { class Icon { const Icon._(this.image); + final Image image; /// Load an image from bytes static Icon? _loadBytes(Uint8List bytes) { @@ -28,13 +29,12 @@ class Icon { return Icon._loadBytes(File(filePath).readAsBytesSync()); } - final Image image; - bool get hasAlpha => image.channels == Channels.rgba; /// Remove alpha channel from the image void removeAlpha() { image.channels = Channels.rgb; + image.fillBackground(0xFFFFFFFF); } /// Create a resized copy of this Icon diff --git a/pubspec.yaml b/pubspec.yaml index 8f36484..8a73160 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A command-line tool that simplifies the task of updating your Flutt maintainer: Mrr Hak homepage: https://mrrhak.com repository: https://github.com/mrrhak/icons_launcher -version: 2.0.0-beta.1 +version: 2.0.0-beta.2 dependencies: args: ^2.3.1 From be13b0f33889edd6efad9d2ee01c77c75a02304a Mon Sep 17 00:00:00 2001 From: mrrhak Date: Wed, 29 Jun 2022 08:54:41 +0700 Subject: [PATCH 11/21] improve log --- CHANGELOG.md | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 460 ++++++++++++++++++ .../xcshareddata/xcschemes/dev.xcscheme | 71 +++ .../xcshareddata/xcschemes/prod.xcscheme | 71 +++ lib/cli_commands.dart | 2 +- lib/utils/cli_logger.dart | 18 +- pubspec.yaml | 2 +- 7 files changed, 618 insertions(+), 7 deletions(-) create mode 100644 example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme create mode 100644 example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme diff --git a/CHANGELOG.md b/CHANGELOG.md index f959a8e..f120d31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Fixed auto remove image alpha channel for iOS platform to follow AppStore guideline - Fixed iOS flavor - Improved pub score + - Improved log ## 2.0.0-beta.1 - Rewrite and improve flavor support diff --git a/example/flavor_app/ios/Runner.xcodeproj/project.pbxproj b/example/flavor_app/ios/Runner.xcodeproj/project.pbxproj index 449b192..09b9975 100644 --- a/example/flavor_app/ios/Runner.xcodeproj/project.pbxproj +++ b/example/flavor_app/ios/Runner.xcodeproj/project.pbxproj @@ -8,11 +8,19 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 303C4C73CD1BF7D2DFDCEB6F /* prodRelease.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 841020640266C5658663FA47 /* prodRelease.xcconfig */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 58AA590633C0746FB8214593 /* prodDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 64793F633A1B4C8842CFA2F9 /* prodDebug.xcconfig */; }; + 63C00EB346E24003C2606A2E /* devDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 7B89CC50CEF32C35C9AFF69E /* devDebug.xcconfig */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 75C6B49A62C65284FAEC21BE /* devProfile.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 33D4D7AD10565371F5AAD2A8 /* devProfile.xcconfig */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A6AE008FE48608AEA8EF2061 /* devLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 03112234335B3AD5DA1D9384 /* devLaunchScreen.storyboard */; }; + A95ED4503B63A482AC8D79F8 /* prodProfile.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9B939FA0B5716DECC7996056 /* prodProfile.xcconfig */; }; + C5F614F7E2FB2A8DB3F5261C /* prodLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 90A8B5B67B2ED57E73F887BE /* prodLaunchScreen.storyboard */; }; + FA12B17D0DDC7D08242A0CF6 /* devRelease.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = AE4D5F16F284A420F0A6E597 /* devRelease.xcconfig */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -29,12 +37,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 03112234335B3AD5DA1D9384 /* devLaunchScreen.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = devLaunchScreen.storyboard; path = Runner/devLaunchScreen.storyboard; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 33D4D7AD10565371F5AAD2A8 /* devProfile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = devProfile.xcconfig; path = Flutter/devProfile.xcconfig; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 64793F633A1B4C8842CFA2F9 /* prodDebug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = prodDebug.xcconfig; path = Flutter/prodDebug.xcconfig; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7B89CC50CEF32C35C9AFF69E /* devDebug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = devDebug.xcconfig; path = Flutter/devDebug.xcconfig; sourceTree = ""; }; + 841020640266C5658663FA47 /* prodRelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = prodRelease.xcconfig; path = Flutter/prodRelease.xcconfig; sourceTree = ""; }; + 90A8B5B67B2ED57E73F887BE /* prodLaunchScreen.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = prodLaunchScreen.storyboard; path = Runner/prodLaunchScreen.storyboard; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -42,6 +56,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9B939FA0B5716DECC7996056 /* prodProfile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = prodProfile.xcconfig; path = Flutter/prodProfile.xcconfig; sourceTree = ""; }; + AE4D5F16F284A420F0A6E597 /* devRelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = devRelease.xcconfig; path = Flutter/devRelease.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,6 +78,12 @@ 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, + 7B89CC50CEF32C35C9AFF69E /* devDebug.xcconfig */, + 33D4D7AD10565371F5AAD2A8 /* devProfile.xcconfig */, + AE4D5F16F284A420F0A6E597 /* devRelease.xcconfig */, + 64793F633A1B4C8842CFA2F9 /* prodDebug.xcconfig */, + 9B939FA0B5716DECC7996056 /* prodProfile.xcconfig */, + 841020640266C5658663FA47 /* prodRelease.xcconfig */, ); name = Flutter; sourceTree = ""; @@ -72,6 +94,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 03112234335B3AD5DA1D9384 /* devLaunchScreen.storyboard */, + 90A8B5B67B2ED57E73F887BE /* prodLaunchScreen.storyboard */, ); sourceTree = ""; }; @@ -163,6 +187,14 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + 63C00EB346E24003C2606A2E /* devDebug.xcconfig in Resources */, + 75C6B49A62C65284FAEC21BE /* devProfile.xcconfig in Resources */, + FA12B17D0DDC7D08242A0CF6 /* devRelease.xcconfig in Resources */, + 58AA590633C0746FB8214593 /* prodDebug.xcconfig in Resources */, + A95ED4503B63A482AC8D79F8 /* prodProfile.xcconfig in Resources */, + 303C4C73CD1BF7D2DFDCEB6F /* prodRelease.xcconfig in Resources */, + A6AE008FE48608AEA8EF2061 /* devLaunchScreen.storyboard in Resources */, + C5F614F7E2FB2A8DB3F5261C /* prodLaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -302,6 +334,76 @@ }; name = Profile; }; + 82E67C9D5D873DAE2A1CCDB8 /* Release-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE4D5F16F284A420F0A6E597 /* devRelease.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(ASSET_PREFIX)AppIcon"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.example.dev; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release-dev"; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -452,6 +554,358 @@ }; name = Release; }; + B5F173A508C58DA80910C686 /* Release-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 841020640266C5658663FA47 /* prodRelease.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(ASSET_PREFIX)AppIcon"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.example.prod; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release-prod"; + }; + BD75D8911AFA5BAA4D3BCEC7 /* Debug-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 64793F633A1B4C8842CFA2F9 /* prodDebug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(ASSET_PREFIX)AppIcon"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + 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_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.example.prod; + SDKROOT = iphoneos; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-prod"; + }; + C21AF1CE2D8A6B32F1CE6BEB /* Profile-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33D4D7AD10565371F5AAD2A8 /* devProfile.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(ASSET_PREFIX)AppIcon"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.example.dev; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Profile-dev"; + }; + DB07A7643658C2D218AB9352 /* Debug-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7B89CC50CEF32C35C9AFF69E /* devDebug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(ASSET_PREFIX)AppIcon"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + 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_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.example.dev; + SDKROOT = iphoneos; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-dev"; + }; + FFEAE541AD7763F36092F005 /* Profile-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9B939FA0B5716DECC7996056 /* prodProfile.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(ASSET_PREFIX)AppIcon"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.example.prod; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Profile-prod"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -461,6 +915,12 @@ 97C147031CF9000F007C117D /* Debug */, 97C147041CF9000F007C117D /* Release */, 249021D3217E4FDB00AE95B9 /* Profile */, + DB07A7643658C2D218AB9352 /* Debug-dev */, + C21AF1CE2D8A6B32F1CE6BEB /* Profile-dev */, + 82E67C9D5D873DAE2A1CCDB8 /* Release-dev */, + BD75D8911AFA5BAA4D3BCEC7 /* Debug-prod */, + FFEAE541AD7763F36092F005 /* Profile-prod */, + B5F173A508C58DA80910C686 /* Release-prod */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme b/example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme new file mode 100644 index 0000000..aba8edc --- /dev/null +++ b/example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme b/example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme new file mode 100644 index 0000000..3cf80c8 --- /dev/null +++ b/example/flavor_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/cli_commands.dart b/lib/cli_commands.dart index 4796c7b..598ea92 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -21,7 +21,7 @@ late _FlavorHelper _flavorHelper; /// Create launcher icons void createLauncherIcons({String? path, String? flavor}) { if (flavor != null) { - print('📱 Flavor $flavor detected! (Android, iOS)'); + print('📱 Flavor $flavor detected! (Android, iOS)\n'); } _flavorHelper = _FlavorHelper(flavor); final config = _getConfig(configFile: path); diff --git a/lib/utils/cli_logger.dart b/lib/utils/cli_logger.dart index 73af91d..30b9a2c 100644 --- a/lib/utils/cli_logger.dart +++ b/lib/utils/cli_logger.dart @@ -4,6 +4,14 @@ enum CliLoggerLevel { three, } +// Reset: \x1B[0m +// Black: \x1B[30m +// White: \x1B[37m +// Red: \x1B[31m +// Green: \x1B[32m +// Yellow: \x1B[33m +// Blue: \x1B[34m +// Cyan: \x1B[36m class CliLogger { CliLogger(); static void info( @@ -11,7 +19,7 @@ class CliLogger { CliLoggerLevel level = CliLoggerLevel.one, }) { final String space = _getSpace(level); - print('$space⚡ $message'); + print('\x1B[34m$space🌱 $message\x1B[0m'); } /// Logs a error message at the given level. @@ -29,7 +37,7 @@ class CliLogger { CliLoggerLevel level = CliLoggerLevel.one, }) { final String space = _getSpace(level); - print('$space⚠️ $message'); + print('\x1B[33m$space🚧 $message\x1B[0m'); } /// Logs a success message at the given level. @@ -38,7 +46,7 @@ class CliLogger { CliLoggerLevel level = CliLoggerLevel.one, }) { final String space = _getSpace(level); - print('$space✅ $message'); + print('\x1B[32m$space✅ $message\x1B[0m'); } static String _getSpace(CliLoggerLevel level) { @@ -48,10 +56,10 @@ class CliLogger { space = ''; break; case CliLoggerLevel.two: - space = ' '; + space = ' '; break; case CliLoggerLevel.three: - space = ' '; + space = ' '; break; } return space; diff --git a/pubspec.yaml b/pubspec.yaml index 8a73160..e1d6fea 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,6 +16,6 @@ environment: sdk: ">=2.17.1 <3.0.0" dev_dependencies: - test: ^1.21.3 build_runner: ^2.1.11 build_version: ^2.1.1 # dart run build_runner build + test: ^1.21.3 From f21a90dc362f1b1ddbee5fc517a298bf6bb62431 Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Fri, 22 Jul 2022 09:07:49 +0700 Subject: [PATCH 12/21] add custom web favicon support --- CHANGELOG.md | 3 +++ README.md | 7 +++++-- example/flavor_app/icons_launcher-dev.yaml | 1 + example/flavor_app/icons_launcher-prod.yaml | 1 + example/simple_app/icons_launcher.yaml | 1 + lib/cli_commands.dart | 12 ++++++++++-- lib/src/version.dart | 2 +- lib/src/web.dart | 10 ++++++++++ pubspec.yaml | 6 +++--- 9 files changed, 35 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f120d31..42ae987 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 2.0.0-beta.3 + - Add web custom favicon support + ## 2.0.0-beta.2 - Fixed auto remove image alpha channel for iOS platform to follow AppStore guideline - Fixed iOS flavor diff --git a/README.md b/README.md index b17e4d6..d8b5f14 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ An example is shown below. More complex examples [here](https://github.com/mrrha ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta.2 + icons_launcher: ^2.0.0-beta.3 icons_launcher: image_path: 'assets/ic_logo_border.png' @@ -118,6 +118,7 @@ Shown below is the full list of attributes which you can specify within your Ico | `image_path_android` | String | `null` | The image file path specific for Android platform (optional - if not defined then the _image_path_ is used) | | `image_path_ios` | String | `null` | The image file path specific for iOS platform (optional - if not defined then the _image_path_ is used) | | `image_path_web` | String | `null` | The image file path specific for Web platform (optional - if not defined then the _image_path_ is used) | +| `favicon_path_web` | String | `null` | The image file path specific for Web platform (optional - if not defined then the _image_path_ is used) | | `image_path_macos` | String | `null` | The image file path specific for macOS platform (optional - if not defined then the _image_path_ is used) | | `image_path_windows` | String | `null` | The image file path specific for Windows platform (optional - if not defined then the _image_path_ is used) | | `image_path_linux` | String | `null` | The image file path specific for Linux platform (optional - if not defined then the _image_path_ is used) | @@ -153,7 +154,7 @@ The configuration file format is the same. ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta.2 + icons_launcher: ^2.0.0-beta.3 icons_launcher: # image_path: 'assets/ic_logo_border.png' @@ -163,6 +164,7 @@ icons_launcher: image_path_windows: 'assets/ic_logo_border.png' image_path_linux: 'assets/ic_logo_border.png' image_path_web: 'assets/ic_logo_border.png' + favicon_path_web: 'assets/ic_logo_round.png' image_adaptive_background: 'assets/ic_background.png' image_adaptive_foreground: 'assets/ic_foreground.png' image_adaptive_round: 'assets/ic_logo_round.png' #! (Optional) @@ -185,6 +187,7 @@ icons_launcher: image_path_windows: 'assets/ic_logo_border.png' image_path_linux: 'assets/ic_logo_border.png' image_path_web: 'assets/ic_logo_border.png' + favicon_path_web: 'assets/ic_logo_round.png' image_adaptive_background: 'assets/ic_background.png' image_adaptive_foreground: 'assets/ic_foreground.png' image_adaptive_round: 'assets/ic_logo_round.png' #! (Optional) diff --git a/example/flavor_app/icons_launcher-dev.yaml b/example/flavor_app/icons_launcher-dev.yaml index 1bcc1d3..f759e56 100644 --- a/example/flavor_app/icons_launcher-dev.yaml +++ b/example/flavor_app/icons_launcher-dev.yaml @@ -7,6 +7,7 @@ icons_launcher: # image_path_windows: 'assets/ic_logo_border.png' # image_path_linux: 'assets/ic_logo_border.png' # image_path_web: 'assets/ic_logo_border.png' + # favicon_path_web: 'assets/ic_logo_round.png' # color_adaptive_background: '#ffffff' # only available for Android 8.0 devices and above image_adaptive_background: 'assets/ic_background.png' # only available for Android 8.0 devices and above image_adaptive_foreground: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above diff --git a/example/flavor_app/icons_launcher-prod.yaml b/example/flavor_app/icons_launcher-prod.yaml index e913792..9c16950 100644 --- a/example/flavor_app/icons_launcher-prod.yaml +++ b/example/flavor_app/icons_launcher-prod.yaml @@ -7,6 +7,7 @@ icons_launcher: # image_path_windows: 'assets/ic_logo_border.png' # image_path_linux: 'assets/ic_logo_border.png' # image_path_web: 'assets/ic_logo_border.png' + # favicon_path_web: 'assets/ic_logo_round.png' # color_adaptive_background: '#ffffff' # only available for Android 8.0 devices and above image_adaptive_background: 'assets/ic_background.png' # only available for Android 8.0 devices and above image_adaptive_foreground: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above diff --git a/example/simple_app/icons_launcher.yaml b/example/simple_app/icons_launcher.yaml index 4ad7db2..3b16282 100644 --- a/example/simple_app/icons_launcher.yaml +++ b/example/simple_app/icons_launcher.yaml @@ -7,6 +7,7 @@ icons_launcher: # image_path_windows: 'assets/ic_logo_border.png' # image_path_linux: 'assets/ic_logo_border.png' # image_path_web: 'assets/ic_logo_border.png' + # favicon_path_web: 'assets/ic_logo_round.png' # color_adaptive_background: '#ffffff' # only available for Android 8.0 devices and above image_adaptive_background: 'assets/ic_background.png' # only available for Android 8.0 devices and above image_adaptive_foreground: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above diff --git a/lib/cli_commands.dart b/lib/cli_commands.dart index 598ea92..e4de82f 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -177,6 +177,9 @@ void _createIconsByConfig(Map config) { final imagePathWeb = _checkImageExists(config: config, parameter: 'image_path_web') ?? imagePath; + final faviconPathWeb = + _checkImageExists(config: config, parameter: 'favicon_path_web') ?? + imagePath; final adaptiveBgImage = _checkImageExists(config: config, parameter: 'image_adaptive_background'); final adaptiveFgImage = @@ -231,8 +234,13 @@ void _createIconsByConfig(Map config) { } //! Web - if (isNeedingNewWebIcon(config) && imagePathWeb != null) { - _createWebIcons(imagePath: imagePathWeb); + if (isNeedingNewWebIcon(config)) { + if (imagePathWeb != null) { + _createWebIcons(imagePath: imagePathWeb); + } + if (faviconPathWeb != null) { + _createWebFavicon(imagePath: faviconPathWeb); + } } //! Windows diff --git a/lib/src/version.dart b/lib/src/version.dart index ca63528..9237a46 100644 --- a/lib/src/version.dart +++ b/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '2.0.0-beta.2'; +const packageVersion = '2.0.0-beta.3'; diff --git a/lib/src/web.dart b/lib/src/web.dart index 4de596d..2b7318f 100644 --- a/lib/src/web.dart +++ b/lib/src/web.dart @@ -22,6 +22,16 @@ void _createWebIcons({required String imagePath}) { _saveImageWeb(template, image); } CliLogger.success('Generated icon images', level: CliLoggerLevel.two); +} + +/// Start create web favicon +void _createWebFavicon({required String imagePath}) { + final image = Icon.loadFile(imagePath); + if (image == null) { + CliLogger.error('The file $imagePath could not be read.', + level: CliLoggerLevel.two); + exit(1); + } final webFavicon = WebIconTemplate(name: 'favicon.png', size: 16); _saveFaviconImageWeb(webFavicon, image); diff --git a/pubspec.yaml b/pubspec.yaml index e1d6fea..fbffed6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A command-line tool that simplifies the task of updating your Flutt maintainer: Mrr Hak homepage: https://mrrhak.com repository: https://github.com/mrrhak/icons_launcher -version: 2.0.0-beta.2 +version: 2.0.0-beta.3 dependencies: args: ^2.3.1 @@ -16,6 +16,6 @@ environment: sdk: ">=2.17.1 <3.0.0" dev_dependencies: - build_runner: ^2.1.11 + build_runner: ^2.2.0 build_version: ^2.1.1 # dart run build_runner build - test: ^1.21.3 + test: ^1.21.4 From 1df5ed38345a502cb44957811deec88595b6a3ac Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Fri, 22 Jul 2022 09:22:58 +0700 Subject: [PATCH 13/21] add test_app for new schema --- example/test_app/.gitignore | 47 ++ example/test_app/.metadata | 45 ++ example/test_app/README.md | 16 + example/test_app/analysis_options.yaml | 29 + example/test_app/android/.gitignore | 13 + example/test_app/android/app/build.gradle | 71 +++ .../android/app/src/debug/AndroidManifest.xml | 8 + .../android/app/src/main/AndroidManifest.xml | 34 ++ .../com/example/test_app/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 8 + example/test_app/android/build.gradle | 31 + example/test_app/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + example/test_app/android/settings.gradle | 11 + example/test_app/ios/.gitignore | 34 ++ .../ios/Flutter/AppFrameworkInfo.plist | 26 + example/test_app/ios/Flutter/Debug.xcconfig | 1 + example/test_app/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 481 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + example/test_app/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + example/test_app/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + example/test_app/lib/main.dart | 115 ++++ example/test_app/linux/.gitignore | 1 + example/test_app/linux/CMakeLists.txt | 138 +++++ example/test_app/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + example/test_app/linux/main.cc | 6 + example/test_app/linux/my_application.cc | 104 ++++ example/test_app/linux/my_application.h | 18 + example/test_app/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 572 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../test_app/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 +++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + example/test_app/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + example/test_app/pubspec.yaml | 22 + example/test_app/test/widget_test.dart | 30 + example/test_app/web/favicon.png | Bin 0 -> 917 bytes example/test_app/web/icons/Icon-192.png | Bin 0 -> 5292 bytes example/test_app/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../test_app/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../test_app/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes example/test_app/web/index.html | 58 ++ example/test_app/web/manifest.json | 35 ++ example/test_app/windows/.gitignore | 17 + example/test_app/windows/CMakeLists.txt | 101 ++++ .../test_app/windows/flutter/CMakeLists.txt | 104 ++++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../test_app/windows/runner/CMakeLists.txt | 32 + example/test_app/windows/runner/Runner.rc | 121 ++++ .../windows/runner/flutter_window.cpp | 61 ++ .../test_app/windows/runner/flutter_window.h | 33 + example/test_app/windows/runner/main.cpp | 43 ++ example/test_app/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 20 + example/test_app/windows/runner/utils.cpp | 64 ++ example/test_app/windows/runner/utils.h | 19 + .../test_app/windows/runner/win32_window.cpp | 245 ++++++++ .../test_app/windows/runner/win32_window.h | 98 +++ 125 files changed, 4246 insertions(+) create mode 100644 example/test_app/.gitignore create mode 100644 example/test_app/.metadata create mode 100644 example/test_app/README.md create mode 100644 example/test_app/analysis_options.yaml create mode 100644 example/test_app/android/.gitignore create mode 100644 example/test_app/android/app/build.gradle create mode 100644 example/test_app/android/app/src/debug/AndroidManifest.xml create mode 100644 example/test_app/android/app/src/main/AndroidManifest.xml create mode 100644 example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt create mode 100644 example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 example/test_app/android/app/src/main/res/drawable/launch_background.xml create mode 100644 example/test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 example/test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 example/test_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example/test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example/test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example/test_app/android/app/src/main/res/values-night/styles.xml create mode 100644 example/test_app/android/app/src/main/res/values/styles.xml create mode 100644 example/test_app/android/app/src/profile/AndroidManifest.xml create mode 100644 example/test_app/android/build.gradle create mode 100644 example/test_app/android/gradle.properties create mode 100644 example/test_app/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 example/test_app/android/settings.gradle create mode 100644 example/test_app/ios/.gitignore create mode 100644 example/test_app/ios/Flutter/AppFrameworkInfo.plist create mode 100644 example/test_app/ios/Flutter/Debug.xcconfig create mode 100644 example/test_app/ios/Flutter/Release.xcconfig create mode 100644 example/test_app/ios/Runner.xcodeproj/project.pbxproj create mode 100644 example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/test_app/ios/Runner/AppDelegate.swift create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 example/test_app/ios/Runner/Base.lproj/Main.storyboard create mode 100644 example/test_app/ios/Runner/Info.plist create mode 100644 example/test_app/ios/Runner/Runner-Bridging-Header.h create mode 100644 example/test_app/lib/main.dart create mode 100644 example/test_app/linux/.gitignore create mode 100644 example/test_app/linux/CMakeLists.txt create mode 100644 example/test_app/linux/flutter/CMakeLists.txt create mode 100644 example/test_app/linux/flutter/generated_plugin_registrant.cc create mode 100644 example/test_app/linux/flutter/generated_plugin_registrant.h create mode 100644 example/test_app/linux/flutter/generated_plugins.cmake create mode 100644 example/test_app/linux/main.cc create mode 100644 example/test_app/linux/my_application.cc create mode 100644 example/test_app/linux/my_application.h create mode 100644 example/test_app/macos/.gitignore create mode 100644 example/test_app/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 example/test_app/macos/Flutter/Flutter-Release.xcconfig create mode 100644 example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 example/test_app/macos/Runner.xcodeproj/project.pbxproj create mode 100644 example/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/test_app/macos/Runner/AppDelegate.swift create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 example/test_app/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 example/test_app/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 example/test_app/macos/Runner/Configs/Debug.xcconfig create mode 100644 example/test_app/macos/Runner/Configs/Release.xcconfig create mode 100644 example/test_app/macos/Runner/Configs/Warnings.xcconfig create mode 100644 example/test_app/macos/Runner/DebugProfile.entitlements create mode 100644 example/test_app/macos/Runner/Info.plist create mode 100644 example/test_app/macos/Runner/MainFlutterWindow.swift create mode 100644 example/test_app/macos/Runner/Release.entitlements create mode 100644 example/test_app/pubspec.yaml create mode 100644 example/test_app/test/widget_test.dart create mode 100644 example/test_app/web/favicon.png create mode 100644 example/test_app/web/icons/Icon-192.png create mode 100644 example/test_app/web/icons/Icon-512.png create mode 100644 example/test_app/web/icons/Icon-maskable-192.png create mode 100644 example/test_app/web/icons/Icon-maskable-512.png create mode 100644 example/test_app/web/index.html create mode 100644 example/test_app/web/manifest.json create mode 100644 example/test_app/windows/.gitignore create mode 100644 example/test_app/windows/CMakeLists.txt create mode 100644 example/test_app/windows/flutter/CMakeLists.txt create mode 100644 example/test_app/windows/flutter/generated_plugin_registrant.cc create mode 100644 example/test_app/windows/flutter/generated_plugin_registrant.h create mode 100644 example/test_app/windows/flutter/generated_plugins.cmake create mode 100644 example/test_app/windows/runner/CMakeLists.txt create mode 100644 example/test_app/windows/runner/Runner.rc create mode 100644 example/test_app/windows/runner/flutter_window.cpp create mode 100644 example/test_app/windows/runner/flutter_window.h create mode 100644 example/test_app/windows/runner/main.cpp create mode 100644 example/test_app/windows/runner/resource.h create mode 100644 example/test_app/windows/runner/resources/app_icon.ico create mode 100644 example/test_app/windows/runner/runner.exe.manifest create mode 100644 example/test_app/windows/runner/utils.cpp create mode 100644 example/test_app/windows/runner/utils.h create mode 100644 example/test_app/windows/runner/win32_window.cpp create mode 100644 example/test_app/windows/runner/win32_window.h diff --git a/example/test_app/.gitignore b/example/test_app/.gitignore new file mode 100644 index 0000000..a8e938c --- /dev/null +++ b/example/test_app/.gitignore @@ -0,0 +1,47 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/example/test_app/.metadata b/example/test_app/.metadata new file mode 100644 index 0000000..39f2501 --- /dev/null +++ b/example/test_app/.metadata @@ -0,0 +1,45 @@ +# 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. + +version: + revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + - platform: android + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + - platform: ios + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + - platform: linux + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + - platform: macos + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + - platform: web + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + - platform: windows + create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/example/test_app/README.md b/example/test_app/README.md new file mode 100644 index 0000000..5c246ff --- /dev/null +++ b/example/test_app/README.md @@ -0,0 +1,16 @@ +# test_app + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/test_app/analysis_options.yaml b/example/test_app/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/example/test_app/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/example/test_app/android/.gitignore b/example/test_app/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/example/test_app/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/example/test_app/android/app/build.gradle b/example/test_app/android/app/build.gradle new file mode 100644 index 0000000..25052a0 --- /dev/null +++ b/example/test_app/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.test_app" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/example/test_app/android/app/src/debug/AndroidManifest.xml b/example/test_app/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..93f273d --- /dev/null +++ b/example/test_app/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example/test_app/android/app/src/main/AndroidManifest.xml b/example/test_app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..291671a --- /dev/null +++ b/example/test_app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt b/example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt new file mode 100644 index 0000000..1340508 --- /dev/null +++ b/example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.test_app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml b/example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/test_app/android/app/src/main/res/drawable/launch_background.xml b/example/test_app/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/example/test_app/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/example/test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/example/test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/example/test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/example/test_app/android/app/src/main/res/values-night/styles.xml b/example/test_app/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/example/test_app/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/test_app/android/app/src/main/res/values/styles.xml b/example/test_app/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/example/test_app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/test_app/android/app/src/profile/AndroidManifest.xml b/example/test_app/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..93f273d --- /dev/null +++ b/example/test_app/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example/test_app/android/build.gradle b/example/test_app/android/build.gradle new file mode 100644 index 0000000..83ae220 --- /dev/null +++ b/example/test_app/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example/test_app/android/gradle.properties b/example/test_app/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/example/test_app/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/example/test_app/android/gradle/wrapper/gradle-wrapper.properties b/example/test_app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cc5527d --- /dev/null +++ b/example/test_app/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/example/test_app/android/settings.gradle b/example/test_app/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/example/test_app/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/test_app/ios/.gitignore b/example/test_app/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/example/test_app/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/example/test_app/ios/Flutter/AppFrameworkInfo.plist b/example/test_app/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..8d4492f --- /dev/null +++ b/example/test_app/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/example/test_app/ios/Flutter/Debug.xcconfig b/example/test_app/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example/test_app/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/test_app/ios/Flutter/Release.xcconfig b/example/test_app/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example/test_app/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/test_app/ios/Runner.xcodeproj/project.pbxproj b/example/test_app/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8262e11 --- /dev/null +++ b/example/test_app/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..c87d15a --- /dev/null +++ b/example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/test_app/ios/Runner/AppDelegate.swift b/example/test_app/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/example/test_app/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test_app/ios/Runner/Base.lproj/Main.storyboard b/example/test_app/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/example/test_app/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test_app/ios/Runner/Info.plist b/example/test_app/ios/Runner/Info.plist new file mode 100644 index 0000000..3091536 --- /dev/null +++ b/example/test_app/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Test App + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + test_app + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + + diff --git a/example/test_app/ios/Runner/Runner-Bridging-Header.h b/example/test_app/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/example/test_app/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/example/test_app/lib/main.dart b/example/test_app/lib/main.dart new file mode 100644 index 0000000..202509b --- /dev/null +++ b/example/test_app/lib/main.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + // This is the theme of your application. + // + // Try running your application with "flutter run". You'll see the + // application has a blue toolbar. Then, without quitting the app, try + // changing the primarySwatch below to Colors.green and then invoke + // "hot reload" (press "r" in the console where you ran "flutter run", + // or simply save your changes to "hot reload" in a Flutter IDE). + // Notice that the counter didn't reset back to zero; the application + // is not restarted. + primarySwatch: Colors.blue, + ), + home: const MyHomePage(title: 'Flutter Demo Home Page'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + + // This widget is the home page of your application. It is stateful, meaning + // that it has a State object (defined below) that contains fields that affect + // how it looks. + + // This class is the configuration for the state. It holds the values (in this + // case the title) provided by the parent (in this case the App widget) and + // used by the build method of the State. Fields in a Widget subclass are + // always marked "final". + + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + int _counter = 0; + + void _incrementCounter() { + setState(() { + // This call to setState tells the Flutter framework that something has + // changed in this State, which causes it to rerun the build method below + // so that the display can reflect the updated values. If we changed + // _counter without calling setState(), then the build method would not be + // called again, and so nothing would appear to happen. + _counter++; + }); + } + + @override + Widget build(BuildContext context) { + // This method is rerun every time setState is called, for instance as done + // by the _incrementCounter method above. + // + // The Flutter framework has been optimized to make rerunning build methods + // fast, so that you can just rebuild anything that needs updating rather + // than having to individually change instances of widgets. + return Scaffold( + appBar: AppBar( + // Here we take the value from the MyHomePage object that was created by + // the App.build method, and use it to set our appbar title. + title: Text(widget.title), + ), + body: Center( + // Center is a layout widget. It takes a single child and positions it + // in the middle of the parent. + child: Column( + // Column is also a layout widget. It takes a list of children and + // arranges them vertically. By default, it sizes itself to fit its + // children horizontally, and tries to be as tall as its parent. + // + // Invoke "debug painting" (press "p" in the console, choose the + // "Toggle Debug Paint" action from the Flutter Inspector in Android + // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) + // to see the wireframe for each widget. + // + // Column has various properties to control how it sizes itself and + // how it positions its children. Here we use mainAxisAlignment to + // center the children vertically; the main axis here is the vertical + // axis because Columns are vertical (the cross axis would be + // horizontal). + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'You have pushed the button this many times:', + ), + Text( + '$_counter', + style: Theme.of(context).textTheme.headline4, + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: _incrementCounter, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), // This trailing comma makes auto-formatting nicer for build methods. + ); + } +} diff --git a/example/test_app/linux/.gitignore b/example/test_app/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/example/test_app/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/example/test_app/linux/CMakeLists.txt b/example/test_app/linux/CMakeLists.txt new file mode 100644 index 0000000..37a471f --- /dev/null +++ b/example/test_app/linux/CMakeLists.txt @@ -0,0 +1,138 @@ +# 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 "test_app") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.test_app") + +# 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/test_app/linux/flutter/CMakeLists.txt b/example/test_app/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/example/test_app/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/test_app/linux/flutter/generated_plugin_registrant.cc b/example/test_app/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/example/test_app/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/example/test_app/linux/flutter/generated_plugin_registrant.h b/example/test_app/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/example/test_app/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/test_app/linux/flutter/generated_plugins.cmake b/example/test_app/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2e1de87 --- /dev/null +++ b/example/test_app/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/example/test_app/linux/main.cc b/example/test_app/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/example/test_app/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/test_app/linux/my_application.cc b/example/test_app/linux/my_application.cc new file mode 100644 index 0000000..8a7ac0c --- /dev/null +++ b/example/test_app/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, "test_app"); + 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, "test_app"); + } + + 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/test_app/linux/my_application.h b/example/test_app/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/example/test_app/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/test_app/macos/.gitignore b/example/test_app/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/example/test_app/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/example/test_app/macos/Flutter/Flutter-Debug.xcconfig b/example/test_app/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/example/test_app/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/test_app/macos/Flutter/Flutter-Release.xcconfig b/example/test_app/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/example/test_app/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift b/example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..cccf817 --- /dev/null +++ b/example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/example/test_app/macos/Runner.xcodeproj/project.pbxproj b/example/test_app/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6ff3a28 --- /dev/null +++ b/example/test_app/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,572 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + 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 */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 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 */ + 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 /* test_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "test_app.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 = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 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 */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* test_app.app */, + ); + 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 = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* test_app.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 = { + 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 */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 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; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 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 */ + 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 */ + 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.11; + 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.11; + 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.11; + 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 */ + 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/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..bacf47c --- /dev/null +++ b/example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/test_app/macos/Runner/AppDelegate.swift b/example/test_app/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/example/test_app/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/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 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 literal 0 HcmV?d00001 diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 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 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 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 + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/test_app/macos/Runner/Configs/AppInfo.xcconfig b/example/test_app/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..80c4898 --- /dev/null +++ b/example/test_app/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 = test_app + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/example/test_app/macos/Runner/Configs/Debug.xcconfig b/example/test_app/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/example/test_app/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/test_app/macos/Runner/Configs/Release.xcconfig b/example/test_app/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/example/test_app/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/test_app/macos/Runner/Configs/Warnings.xcconfig b/example/test_app/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/example/test_app/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/test_app/macos/Runner/DebugProfile.entitlements b/example/test_app/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/example/test_app/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/test_app/macos/Runner/Info.plist b/example/test_app/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/example/test_app/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/test_app/macos/Runner/MainFlutterWindow.swift b/example/test_app/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..2722837 --- /dev/null +++ b/example/test_app/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/example/test_app/macos/Runner/Release.entitlements b/example/test_app/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/example/test_app/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/example/test_app/pubspec.yaml b/example/test_app/pubspec.yaml new file mode 100644 index 0000000..8bc493f --- /dev/null +++ b/example/test_app/pubspec.yaml @@ -0,0 +1,22 @@ +name: test_app +description: A new Flutter project. +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: ">=2.17.6 <3.0.0" + +dependencies: + flutter: + sdk: flutter + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + icons_launcher: + path: ../../ + +flutter: + uses-material-design: true \ No newline at end of file diff --git a/example/test_app/test/widget_test.dart b/example/test_app/test/widget_test.dart new file mode 100644 index 0000000..2090fb8 --- /dev/null +++ b/example/test_app/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:test_app/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/example/test_app/web/favicon.png b/example/test_app/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/example/test_app/web/icons/Icon-192.png b/example/test_app/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/example/test_app/web/icons/Icon-512.png b/example/test_app/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/example/test_app/web/icons/Icon-maskable-192.png b/example/test_app/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 zcmdT|`#%%j|KDb2V@0DPm$^(Lx5}lO%Yv(=e*7hl@QqKS50#~#^IQPxBmuh|i9sXnt4ch@VT0F7% zMtrs@KWIOo+QV@lSs66A>2pz6-`9Jk=0vv&u?)^F@HZ)-6HT=B7LF;rdj zskUyBfbojcX#CS>WrIWo9D=DIwcXM8=I5D{SGf$~=gh-$LwY?*)cD%38%sCc?5OsX z-XfkyL-1`VavZ?>(pI-xp-kYq=1hsnyP^TLb%0vKRSo^~r{x?ISLY1i7KjSp z*0h&jG(Rkkq2+G_6eS>n&6>&Xk+ngOMcYrk<8KrukQHzfx675^^s$~<@d$9X{VBbg z2Fd4Z%g`!-P}d#`?B4#S-9x*eNlOVRnDrn#jY@~$jfQ-~3Od;A;x-BI1BEDdvr`pI z#D)d)!2_`GiZOUu1crb!hqH=ezs0qk<_xDm_Kkw?r*?0C3|Io6>$!kyDl;eH=aqg$B zsH_|ZD?jP2dc=)|L>DZmGyYKa06~5?C2Lc0#D%62p(YS;%_DRCB1k(+eLGXVMe+=4 zkKiJ%!N6^mxqM=wq`0+yoE#VHF%R<{mMamR9o_1JH8jfnJ?NPLs$9U!9!dq8 z0B{dI2!M|sYGH&9TAY34OlpIsQ4i5bnbG>?cWwat1I13|r|_inLE?FS@Hxdxn_YZN z3jfUO*X9Q@?HZ>Q{W0z60!bbGh557XIKu1?)u|cf%go`pwo}CD=0tau-}t@R2OrSH zQzZr%JfYa`>2!g??76=GJ$%ECbQh7Q2wLRp9QoyiRHP7VE^>JHm>9EqR3<$Y=Z1K^SHuwxCy-5@z3 zVM{XNNm}yM*pRdLKp??+_2&!bp#`=(Lh1vR{~j%n;cJv~9lXeMv)@}Odta)RnK|6* zC+IVSWumLo%{6bLDpn)Gz>6r&;Qs0^+Sz_yx_KNz9Dlt^ax`4>;EWrIT#(lJ_40<= z750fHZ7hI{}%%5`;lwkI4<_FJw@!U^vW;igL0k+mK)-j zYuCK#mCDK3F|SC}tC2>m$ZCqNB7ac-0UFBJ|8RxmG@4a4qdjvMzzS&h9pQmu^x&*= zGvapd1#K%Da&)8f?<9WN`2H^qpd@{7In6DNM&916TRqtF4;3`R|Nhwbw=(4|^Io@T zIjoR?tB8d*sO>PX4vaIHF|W;WVl6L1JvSmStgnRQq zTX4(>1f^5QOAH{=18Q2Vc1JI{V=yOr7yZJf4Vpfo zeHXdhBe{PyY;)yF;=ycMW@Kb>t;yE>;f79~AlJ8k`xWucCxJfsXf2P72bAavWL1G#W z;o%kdH(mYCM{$~yw4({KatNGim49O2HY6O07$B`*K7}MvgI=4x=SKdKVb8C$eJseA$tmSFOztFd*3W`J`yIB_~}k%Sd_bPBK8LxH)?8#jM{^%J_0|L z!gFI|68)G}ex5`Xh{5pB%GtlJ{Z5em*e0sH+sU1UVl7<5%Bq+YrHWL7?X?3LBi1R@_)F-_OqI1Zv`L zb6^Lq#H^2@d_(Z4E6xA9Z4o3kvf78ZDz!5W1#Mp|E;rvJz&4qj2pXVxKB8Vg0}ek%4erou@QM&2t7Cn5GwYqy%{>jI z)4;3SAgqVi#b{kqX#$Mt6L8NhZYgonb7>+r#BHje)bvaZ2c0nAvrN3gez+dNXaV;A zmyR0z@9h4@6~rJik-=2M-T+d`t&@YWhsoP_XP-NsVO}wmo!nR~QVWU?nVlQjNfgcTzE-PkfIX5G z1?&MwaeuzhF=u)X%Vpg_e@>d2yZwxl6-r3OMqDn8_6m^4z3zG##cK0Fsgq8fcvmhu z{73jseR%X%$85H^jRAcrhd&k!i^xL9FrS7qw2$&gwAS8AfAk#g_E_tP;x66fS`Mn@SNVrcn_N;EQm z`Mt3Z%rw%hDqTH-s~6SrIL$hIPKL5^7ejkLTBr46;pHTQDdoErS(B>``t;+1+M zvU&Se9@T_BeK;A^p|n^krIR+6rH~BjvRIugf`&EuX9u69`9C?9ANVL8l(rY6#mu^i z=*5Q)-%o*tWl`#b8p*ZH0I}hn#gV%|jt6V_JanDGuekR*-wF`u;amTCpGG|1;4A5$ zYbHF{?G1vv5;8Ph5%kEW)t|am2_4ik!`7q{ymfHoe^Z99c|$;FAL+NbxE-_zheYbV z3hb0`uZGTsgA5TG(X|GVDSJyJxsyR7V5PS_WSnYgwc_D60m7u*x4b2D79r5UgtL18 zcCHWk+K6N1Pg2c;0#r-)XpwGX?|Iv)^CLWqwF=a}fXUSM?n6E;cCeW5ER^om#{)Jr zJR81pkK?VoFm@N-s%hd7@hBS0xuCD0-UDVLDDkl7Ck=BAj*^ps`393}AJ+Ruq@fl9 z%R(&?5Nc3lnEKGaYMLmRzKXow1+Gh|O-LG7XiNxkG^uyv zpAtLINwMK}IWK65hOw&O>~EJ}x@lDBtB`yKeV1%GtY4PzT%@~wa1VgZn7QRwc7C)_ zpEF~upeDRg_<#w=dLQ)E?AzXUQpbKXYxkp>;c@aOr6A|dHA?KaZkL0svwB^U#zmx0 zzW4^&G!w7YeRxt<9;d@8H=u(j{6+Uj5AuTluvZZD4b+#+6Rp?(yJ`BC9EW9!b&KdPvzJYe5l7 zMJ9aC@S;sA0{F0XyVY{}FzW0Vh)0mPf_BX82E+CD&)wf2!x@{RO~XBYu80TONl3e+ zA7W$ra6LcDW_j4s-`3tI^VhG*sa5lLc+V6ONf=hO@q4|p`CinYqk1Ko*MbZ6_M05k zSwSwkvu;`|I*_Vl=zPd|dVD0lh&Ha)CSJJvV{AEdF{^Kn_Yfsd!{Pc1GNgw}(^~%)jk5~0L~ms|Rez1fiK~s5t(p1ci5Gq$JC#^JrXf?8 z-Y-Zi_Hvi>oBzV8DSRG!7dm|%IlZg3^0{5~;>)8-+Nk&EhAd(}s^7%MuU}lphNW9Q zT)DPo(ob{tB7_?u;4-qGDo!sh&7gHaJfkh43QwL|bbFVi@+oy;i;M zM&CP^v~lx1U`pi9PmSr&Mc<%HAq0DGH?Ft95)WY`P?~7O z`O^Nr{Py9M#Ls4Y7OM?e%Y*Mvrme%=DwQaye^Qut_1pOMrg^!5u(f9p(D%MR%1K>% zRGw%=dYvw@)o}Fw@tOtPjz`45mfpn;OT&V(;z75J*<$52{sB65$gDjwX3Xa!x_wE- z!#RpwHM#WrO*|~f7z}(}o7US(+0FYLM}6de>gQdtPazXz?OcNv4R^oYLJ_BQOd_l172oSK$6!1r@g+B@0ofJ4*{>_AIxfe-#xp>(1 z@Y3Nfd>fmqvjL;?+DmZk*KsfXJf<%~(gcLwEez%>1c6XSboURUh&k=B)MS>6kw9bY z{7vdev7;A}5fy*ZE23DS{J?8at~xwVk`pEwP5^k?XMQ7u64;KmFJ#POzdG#np~F&H ze-BUh@g54)dsS%nkBb}+GuUEKU~pHcYIg4vSo$J(J|U36bs0Use+3A&IMcR%6@jv$ z=+QI+@wW@?iu}Hpyzlvj-EYeop{f65GX0O%>w#0t|V z1-svWk`hU~m`|O$kw5?Yn5UhI%9P-<45A(v0ld1n+%Ziq&TVpBcV9n}L9Tus-TI)f zd_(g+nYCDR@+wYNQm1GwxhUN4tGMLCzDzPqY$~`l<47{+l<{FZ$L6(>J)|}!bi<)| zE35dl{a2)&leQ@LlDxLQOfUDS`;+ZQ4ozrleQwaR-K|@9T{#hB5Z^t#8 zC-d_G;B4;F#8A2EBL58s$zF-=SCr`P#z zNCTnHF&|X@q>SkAoYu>&s9v@zCpv9lLSH-UZzfhJh`EZA{X#%nqw@@aW^vPcfQrlPs(qQxmC|4tp^&sHy!H!2FH5eC{M@g;ElWNzlb-+ zxpfc0m4<}L){4|RZ>KReag2j%Ot_UKkgpJN!7Y_y3;Ssz{9 z!K3isRtaFtQII5^6}cm9RZd5nTp9psk&u1C(BY`(_tolBwzV_@0F*m%3G%Y?2utyS zY`xM0iDRT)yTyYukFeGQ&W@ReM+ADG1xu@ruq&^GK35`+2r}b^V!m1(VgH|QhIPDE X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/example/test_app/web/icons/Icon-maskable-512.png b/example/test_app/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/example/test_app/web/index.html b/example/test_app/web/index.html new file mode 100644 index 0000000..30d1763 --- /dev/null +++ b/example/test_app/web/index.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + test_app + + + + + + + + + + diff --git a/example/test_app/web/manifest.json b/example/test_app/web/manifest.json new file mode 100644 index 0000000..8242090 --- /dev/null +++ b/example/test_app/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "test_app", + "short_name": "test_app", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/example/test_app/windows/.gitignore b/example/test_app/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/example/test_app/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/test_app/windows/CMakeLists.txt b/example/test_app/windows/CMakeLists.txt new file mode 100644 index 0000000..41c46ff --- /dev/null +++ b/example/test_app/windows/CMakeLists.txt @@ -0,0 +1,101 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(test_app 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 "test_app") + +# 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/test_app/windows/flutter/CMakeLists.txt b/example/test_app/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..930d207 --- /dev/null +++ b/example/test_app/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/test_app/windows/flutter/generated_plugin_registrant.cc b/example/test_app/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..8b6d468 --- /dev/null +++ b/example/test_app/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/example/test_app/windows/flutter/generated_plugin_registrant.h b/example/test_app/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/example/test_app/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/test_app/windows/flutter/generated_plugins.cmake b/example/test_app/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..b93c4c3 --- /dev/null +++ b/example/test_app/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/example/test_app/windows/runner/CMakeLists.txt b/example/test_app/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..b9e550f --- /dev/null +++ b/example/test_app/windows/runner/CMakeLists.txt @@ -0,0 +1,32 @@ +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}) + +# 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_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/test_app/windows/runner/Runner.rc b/example/test_app/windows/runner/Runner.rc new file mode 100644 index 0000000..dabfc36 --- /dev/null +++ b/example/test_app/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 +// + +#ifdef FLUTTER_BUILD_NUMBER +#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#else +#define VERSION_AS_NUMBER 1,0,0 +#endif + +#ifdef FLUTTER_BUILD_NAME +#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "test_app" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "test_app" "\0" + VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "test_app.exe" "\0" + VALUE "ProductName", "test_app" "\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/test_app/windows/runner/flutter_window.cpp b/example/test_app/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..b43b909 --- /dev/null +++ b/example/test_app/windows/runner/flutter_window.cpp @@ -0,0 +1,61 @@ +#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()); + 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/test_app/windows/runner/flutter_window.h b/example/test_app/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/example/test_app/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/test_app/windows/runner/main.cpp b/example/test_app/windows/runner/main.cpp new file mode 100644 index 0000000..0d9e770 --- /dev/null +++ b/example/test_app/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.CreateAndShow(L"test_app", 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/test_app/windows/runner/resource.h b/example/test_app/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/example/test_app/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/test_app/windows/runner/resources/app_icon.ico b/example/test_app/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/example/test_app/windows/runner/runner.exe.manifest b/example/test_app/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..c977c4a --- /dev/null +++ b/example/test_app/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/example/test_app/windows/runner/utils.cpp b/example/test_app/windows/runner/utils.cpp new file mode 100644 index 0000000..f5bf9fa --- /dev/null +++ b/example/test_app/windows/runner/utils.cpp @@ -0,0 +1,64 @@ +#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); + 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, + -1, utf8_string.data(), + target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/example/test_app/windows/runner/utils.h b/example/test_app/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/example/test_app/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/test_app/windows/runner/win32_window.cpp b/example/test_app/windows/runner/win32_window.cpp new file mode 100644 index 0000000..c10f08d --- /dev/null +++ b/example/test_app/windows/runner/win32_window.cpp @@ -0,0 +1,245 @@ +#include "win32_window.h" + +#include + +#include "resource.h" + +namespace { + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +// 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 registar 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::CreateAndShow(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 | WS_VISIBLE, + 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; + } + + return OnCreate(); +} + +// 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; + } + + 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. +} diff --git a/example/test_app/windows/runner/win32_window.h b/example/test_app/windows/runner/win32_window.h new file mode 100644 index 0000000..17ba431 --- /dev/null +++ b/example/test_app/windows/runner/win32_window.h @@ -0,0 +1,98 @@ +#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 and shows a win32 window with |title| and position and size 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 to will treat the width height passed in to this function + // as logical pixels and scale to appropriate for the default monitor. Returns + // true if the window was created successfully. + bool CreateAndShow(const std::wstring& title, + const Point& origin, + const Size& size); + + // 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 + // responsponds 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; + + 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_ From 0873d02ec0e67ef5b0dfb37756a998cc658de84a Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Sat, 23 Jul 2022 18:26:56 +0700 Subject: [PATCH 14/21] refactor to new schema --- example/flavor_app/icons_launcher-dev.yaml | 43 ++++++++++++-------- example/flavor_app/icons_launcher-prod.yaml | 42 +++++++++++-------- example/flavor_app/web/favicon.png | Bin 426 -> 670 bytes 3 files changed, 51 insertions(+), 34 deletions(-) diff --git a/example/flavor_app/icons_launcher-dev.yaml b/example/flavor_app/icons_launcher-dev.yaml index f759e56..c5465fa 100644 --- a/example/flavor_app/icons_launcher-dev.yaml +++ b/example/flavor_app/icons_launcher-dev.yaml @@ -1,20 +1,29 @@ # flutter pub run icons_launcher:create --flavor dev + icons_launcher: image_path: 'assets/ic_logo_border.png' - # image_path_android: 'assets/ic_logo_border.png' - image_path_ios: 'assets/ic_logo_rectangle.png' - # image_path_macos: 'assets/ic_logo_border.png' - # image_path_windows: 'assets/ic_logo_border.png' - # image_path_linux: 'assets/ic_logo_border.png' - # image_path_web: 'assets/ic_logo_border.png' - # favicon_path_web: 'assets/ic_logo_round.png' - # color_adaptive_background: '#ffffff' # only available for Android 8.0 devices and above - image_adaptive_background: 'assets/ic_background.png' # only available for Android 8.0 devices and above - image_adaptive_foreground: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above - image_adaptive_round: 'assets/ic_logo_round.png' # only available for Android 8.0 devices and above #! (Optional) - android: true - ios: true - web: true - macos: false - windows: false - linux: false + platforms: + android: + enable: true + image_path: 'assets/ic_logo_border.png' + # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_background_image: 'assets/ic_background.png' + adaptive_foreground_image: 'assets/ic_foreground.png' + adaptive_round_image: 'assets/ic_logo_round.png' + ios: + enable: true + image_path: 'assets/ic_logo_rectangle.png' + web: + enable: true + image_path: 'assets/ic_logo_border.png' + favicon_path: 'assets/ic_logo_round.png' + macos: + enable: false + image_path: 'assets/ic_logo_border.png' + windows: + enable: false + image_path: 'assets/ic_logo_border.png' + linux: + enable: false + image_path: 'assets/ic_logo_border.png' + diff --git a/example/flavor_app/icons_launcher-prod.yaml b/example/flavor_app/icons_launcher-prod.yaml index 9c16950..16011f8 100644 --- a/example/flavor_app/icons_launcher-prod.yaml +++ b/example/flavor_app/icons_launcher-prod.yaml @@ -1,20 +1,28 @@ # flutter pub run icons_launcher:create --flavor prod + icons_launcher: image_path: 'assets/ic_logo_border.png' - # image_path_android: 'assets/ic_logo_border.png' - image_path_ios: 'assets/ic_logo_rectangle.png' - # image_path_macos: 'assets/ic_logo_border.png' - # image_path_windows: 'assets/ic_logo_border.png' - # image_path_linux: 'assets/ic_logo_border.png' - # image_path_web: 'assets/ic_logo_border.png' - # favicon_path_web: 'assets/ic_logo_round.png' - # color_adaptive_background: '#ffffff' # only available for Android 8.0 devices and above - image_adaptive_background: 'assets/ic_background.png' # only available for Android 8.0 devices and above - image_adaptive_foreground: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above - image_adaptive_round: 'assets/ic_logo_round.png' # only available for Android 8.0 devices and above #! (Optional) - android: true - ios: true - web: true - macos: false - windows: false - linux: false \ No newline at end of file + platforms: + android: + enable: true + image_path: 'assets/ic_logo_border.png' + # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_background_image: 'assets/ic_background.png' + adaptive_foreground_image: 'assets/ic_foreground.png' + adaptive_round_image: 'assets/ic_logo_round.png' + ios: + enable: true + image_path: 'assets/ic_logo_rectangle.png' + web: + enable: true + image_path: 'assets/ic_logo_border.png' + favicon_path: 'assets/ic_logo_round.png' + macos: + enable: false + image_path: 'assets/ic_logo_border.png' + windows: + enable: false + image_path: 'assets/ic_logo_border.png' + linux: + enable: false + image_path: 'assets/ic_logo_border.png' diff --git a/example/flavor_app/web/favicon.png b/example/flavor_app/web/favicon.png index 23384243a2d770465e52282ee009cc49d2e4285a..f023d85d3a2fd5e591bda66b0abb382090a08f26 100644 GIT binary patch delta 646 zcmV;10(t$a1D*wtBYy&ANklJ&iS4D9UOQ#f?zZnZ|iirS%pHOVi2m;>SjKlUw_GDG9SAL+fsS5Dj2bC=mF3zL({4c_W+6W^geA+x9`^HX=W(6HrA0*N)Qg z_~c+1XLCcL(0}V(F82vHo6U1lsZ@3ld9gu2t%t$&Ng8aj9tb%lkR64=V7P_r_4*r! zlG)1Q{p1l?F0N9k&W(|2)bJA<-WvW4uy zLR|#kX$)>o(WsjNKUILEN3x~SXr@OIw!-t%U1;|NFn_-$f;NM}-7_>iIMD-ssambJ zg%^v(Rg=kN;a*G$0e1Tg5Qy;O>pFb<(t!TGX~2cpm_VUWSj7{G#5=Fo`+_7%Dfdz; z0$95E7mUkmkZSyd0rK@`{>q+6v)Qbp2f2(>6!pvHa@ix1$P(*mOk@IstYZc?cBtVH zsSXXKSbqfUemESCN1aZmJDh1W8hxu)t1sAWwx@g%QcS?*^8{zW3=;?h+^JM5$)35p zuuv+M*8P5eNFtGp*%_hLYBkx)$oBhDY-}52u~;;nPN&${snu#{l}hDsohy~fCK}jE gGMW7F2Z77^2gAPvh;RhvTmS$707*qoM6N<$g1av|1^@s6 delta 401 zcmV;C0dD@D1*!v(BYy#LNkl9qZ!>+I;NmhrVQ$dhYfo`dtI(F*V zrJy`W$2xTAQinc7Dr9|t=+Kww5?P7_oibE91WOW?JG;}2(jRblU7ypy?DLy<-o^C8$P5fGJkX?VRM3FXT*Trec4tJI!jv2jPH(tNj%`Hk#mVLGzO$q{>|Z%q=9OD$u4Br)@^c<#I6= vizVDboDeP%Bbm?V&-pmd_c_i*;eG>XON9r)|KL6V015yANkvXXu0mjfk=VHI From 330ae0774170218cdf0546bd7c62e16fc5364c9b Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Sat, 23 Jul 2022 18:27:39 +0700 Subject: [PATCH 15/21] refactor to new schema --- README.md | 117 ++-- analysis_options.yaml | 1 + bin/create.dart | 2 +- .../app/src/main/res/values/colors.xml | 4 + example/simple_app/icons_launcher.yaml | 42 +- .../AppIcon.appiconset/app_icon_1024.png | Bin 46993 -> 35866 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 3276 -> 3005 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 1429 -> 426 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 5933 -> 6306 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 1243 -> 751 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 14800 -> 15291 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 1874 -> 1515 bytes example/simple_app/web/favicon.png | Bin 426 -> 670 bytes .../windows/runner/resources/app_icon.ico | Bin 3027 -> 16694 bytes example/test_app/.gitignore | 47 -- example/test_app/.metadata | 45 -- example/test_app/README.md | 16 - example/test_app/analysis_options.yaml | 29 - example/test_app/android/.gitignore | 13 - example/test_app/android/app/build.gradle | 71 --- .../android/app/src/debug/AndroidManifest.xml | 8 - .../android/app/src/main/AndroidManifest.xml | 34 -- .../com/example/test_app/MainActivity.kt | 6 - .../res/drawable-v21/launch_background.xml | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes .../app/src/main/res/values-night/styles.xml | 18 - .../app/src/main/res/values/styles.xml | 18 - .../app/src/profile/AndroidManifest.xml | 8 - example/test_app/android/build.gradle | 31 - example/test_app/android/gradle.properties | 3 - .../gradle/wrapper/gradle-wrapper.properties | 6 - example/test_app/android/settings.gradle | 11 - example/test_app/ios/.gitignore | 34 -- .../ios/Flutter/AppFrameworkInfo.plist | 26 - example/test_app/ios/Flutter/Debug.xcconfig | 1 - example/test_app/ios/Flutter/Release.xcconfig | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 481 --------------- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 87 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - example/test_app/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 122 ---- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - example/test_app/ios/Runner/Info.plist | 49 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - example/test_app/lib/main.dart | 115 ---- example/test_app/linux/.gitignore | 1 - example/test_app/linux/CMakeLists.txt | 138 ----- example/test_app/linux/flutter/CMakeLists.txt | 88 --- .../flutter/generated_plugin_registrant.cc | 11 - .../flutter/generated_plugin_registrant.h | 15 - .../linux/flutter/generated_plugins.cmake | 23 - example/test_app/linux/main.cc | 6 - example/test_app/linux/my_application.cc | 104 ---- example/test_app/linux/my_application.h | 18 - example/test_app/macos/.gitignore | 7 - .../macos/Flutter/Flutter-Debug.xcconfig | 1 - .../macos/Flutter/Flutter-Release.xcconfig | 1 - .../Flutter/GeneratedPluginRegistrant.swift | 10 - .../macos/Runner.xcodeproj/project.pbxproj | 572 ------------------ .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 87 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../test_app/macos/Runner/AppDelegate.swift | 9 - .../AppIcon.appiconset/Contents.json | 68 --- .../AppIcon.appiconset/app_icon_1024.png | Bin 46993 -> 0 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 3276 -> 0 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 1429 -> 0 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 5933 -> 0 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 1243 -> 0 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 14800 -> 0 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 1874 -> 0 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ----------- .../macos/Runner/Configs/AppInfo.xcconfig | 14 - .../macos/Runner/Configs/Debug.xcconfig | 2 - .../macos/Runner/Configs/Release.xcconfig | 2 - .../macos/Runner/Configs/Warnings.xcconfig | 13 - .../macos/Runner/DebugProfile.entitlements | 12 - example/test_app/macos/Runner/Info.plist | 32 - .../macos/Runner/MainFlutterWindow.swift | 15 - .../macos/Runner/Release.entitlements | 8 - example/test_app/pubspec.yaml | 22 - example/test_app/test/widget_test.dart | 30 - example/test_app/web/favicon.png | Bin 917 -> 0 bytes example/test_app/web/icons/Icon-192.png | Bin 5292 -> 0 bytes example/test_app/web/icons/Icon-512.png | Bin 8252 -> 0 bytes .../test_app/web/icons/Icon-maskable-192.png | Bin 5594 -> 0 bytes .../test_app/web/icons/Icon-maskable-512.png | Bin 20998 -> 0 bytes example/test_app/web/index.html | 58 -- example/test_app/web/manifest.json | 35 -- example/test_app/windows/.gitignore | 17 - example/test_app/windows/CMakeLists.txt | 101 ---- .../test_app/windows/flutter/CMakeLists.txt | 104 ---- .../flutter/generated_plugin_registrant.cc | 11 - .../flutter/generated_plugin_registrant.h | 15 - .../windows/flutter/generated_plugins.cmake | 23 - .../test_app/windows/runner/CMakeLists.txt | 32 - example/test_app/windows/runner/Runner.rc | 121 ---- .../windows/runner/flutter_window.cpp | 61 -- .../test_app/windows/runner/flutter_window.h | 33 - example/test_app/windows/runner/main.cpp | 43 -- example/test_app/windows/runner/resource.h | 16 - .../windows/runner/resources/app_icon.ico | Bin 33772 -> 0 bytes .../windows/runner/runner.exe.manifest | 20 - example/test_app/windows/runner/utils.cpp | 64 -- example/test_app/windows/runner/utils.h | 19 - .../test_app/windows/runner/win32_window.cpp | 245 -------- .../test_app/windows/runner/win32_window.h | 98 --- lib/cli_commands.dart | 512 ++++++++-------- lib/cli_commands_test.dart | 421 +++++++++++++ lib/src/android.dart | 6 +- lib/utils/utils.dart | 73 +-- 143 files changed, 827 insertions(+), 4597 deletions(-) create mode 100644 example/simple_app/android/app/src/main/res/values/colors.xml delete mode 100644 example/test_app/.gitignore delete mode 100644 example/test_app/.metadata delete mode 100644 example/test_app/README.md delete mode 100644 example/test_app/analysis_options.yaml delete mode 100644 example/test_app/android/.gitignore delete mode 100644 example/test_app/android/app/build.gradle delete mode 100644 example/test_app/android/app/src/debug/AndroidManifest.xml delete mode 100644 example/test_app/android/app/src/main/AndroidManifest.xml delete mode 100644 example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt delete mode 100644 example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml delete mode 100644 example/test_app/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 example/test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 example/test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 example/test_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 example/test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 example/test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 example/test_app/android/app/src/main/res/values-night/styles.xml delete mode 100644 example/test_app/android/app/src/main/res/values/styles.xml delete mode 100644 example/test_app/android/app/src/profile/AndroidManifest.xml delete mode 100644 example/test_app/android/build.gradle delete mode 100644 example/test_app/android/gradle.properties delete mode 100644 example/test_app/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 example/test_app/android/settings.gradle delete mode 100644 example/test_app/ios/.gitignore delete mode 100644 example/test_app/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 example/test_app/ios/Flutter/Debug.xcconfig delete mode 100644 example/test_app/ios/Flutter/Release.xcconfig delete mode 100644 example/test_app/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 example/test_app/ios/Runner/AppDelegate.swift delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 example/test_app/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 example/test_app/ios/Runner/Info.plist delete mode 100644 example/test_app/ios/Runner/Runner-Bridging-Header.h delete mode 100644 example/test_app/lib/main.dart delete mode 100644 example/test_app/linux/.gitignore delete mode 100644 example/test_app/linux/CMakeLists.txt delete mode 100644 example/test_app/linux/flutter/CMakeLists.txt delete mode 100644 example/test_app/linux/flutter/generated_plugin_registrant.cc delete mode 100644 example/test_app/linux/flutter/generated_plugin_registrant.h delete mode 100644 example/test_app/linux/flutter/generated_plugins.cmake delete mode 100644 example/test_app/linux/main.cc delete mode 100644 example/test_app/linux/my_application.cc delete mode 100644 example/test_app/linux/my_application.h delete mode 100644 example/test_app/macos/.gitignore delete mode 100644 example/test_app/macos/Flutter/Flutter-Debug.xcconfig delete mode 100644 example/test_app/macos/Flutter/Flutter-Release.xcconfig delete mode 100644 example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift delete mode 100644 example/test_app/macos/Runner.xcodeproj/project.pbxproj delete mode 100644 example/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/test_app/macos/Runner/AppDelegate.swift delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png delete mode 100644 example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png delete mode 100644 example/test_app/macos/Runner/Base.lproj/MainMenu.xib delete mode 100644 example/test_app/macos/Runner/Configs/AppInfo.xcconfig delete mode 100644 example/test_app/macos/Runner/Configs/Debug.xcconfig delete mode 100644 example/test_app/macos/Runner/Configs/Release.xcconfig delete mode 100644 example/test_app/macos/Runner/Configs/Warnings.xcconfig delete mode 100644 example/test_app/macos/Runner/DebugProfile.entitlements delete mode 100644 example/test_app/macos/Runner/Info.plist delete mode 100644 example/test_app/macos/Runner/MainFlutterWindow.swift delete mode 100644 example/test_app/macos/Runner/Release.entitlements delete mode 100644 example/test_app/pubspec.yaml delete mode 100644 example/test_app/test/widget_test.dart delete mode 100644 example/test_app/web/favicon.png delete mode 100644 example/test_app/web/icons/Icon-192.png delete mode 100644 example/test_app/web/icons/Icon-512.png delete mode 100644 example/test_app/web/icons/Icon-maskable-192.png delete mode 100644 example/test_app/web/icons/Icon-maskable-512.png delete mode 100644 example/test_app/web/index.html delete mode 100644 example/test_app/web/manifest.json delete mode 100644 example/test_app/windows/.gitignore delete mode 100644 example/test_app/windows/CMakeLists.txt delete mode 100644 example/test_app/windows/flutter/CMakeLists.txt delete mode 100644 example/test_app/windows/flutter/generated_plugin_registrant.cc delete mode 100644 example/test_app/windows/flutter/generated_plugin_registrant.h delete mode 100644 example/test_app/windows/flutter/generated_plugins.cmake delete mode 100644 example/test_app/windows/runner/CMakeLists.txt delete mode 100644 example/test_app/windows/runner/Runner.rc delete mode 100644 example/test_app/windows/runner/flutter_window.cpp delete mode 100644 example/test_app/windows/runner/flutter_window.h delete mode 100644 example/test_app/windows/runner/main.cpp delete mode 100644 example/test_app/windows/runner/resource.h delete mode 100644 example/test_app/windows/runner/resources/app_icon.ico delete mode 100644 example/test_app/windows/runner/runner.exe.manifest delete mode 100644 example/test_app/windows/runner/utils.cpp delete mode 100644 example/test_app/windows/runner/utils.h delete mode 100644 example/test_app/windows/runner/win32_window.cpp delete mode 100644 example/test_app/windows/runner/win32_window.h create mode 100644 lib/cli_commands_test.dart diff --git a/README.md b/README.md index d8b5f14..1df9764 100644 --- a/README.md +++ b/README.md @@ -65,8 +65,11 @@ dev_dependencies: icons_launcher: image_path: 'assets/ic_logo_border.png' - ios: true - android: true + platforms: + android: + enable: true + ios: + enable: true ``` #### Method 2: create icons_launcher.yaml at project root @@ -74,8 +77,11 @@ icons_launcher: ```yaml icons_launcher: image_path: 'assets/ic_logo_border.png' - ios: true - android: true + platforms: + android: + enable: true + ios: + enable: true ``` ### 2. Run the package @@ -106,6 +112,23 @@ In the above configuration, the package is setup to replace the existing launche Shown below is the full list of attributes which you can specify within your Icons Launcher configuration. +| Icons Launcher Option | Type | Default | Description | +| --- | --- | --- | --- | +| `image_path` | String | `null` | The image file path | +| `platforms` | String | `null` | Use for specific platform to generate icons | + +--- + +| Platforms Option | Type | Default | Description | +| --- | --- | --- | --- | +| `android` | String | `null` | Use for specific android platform | +| `ios` | String | `null` | Use for specific android platform | +| `macos` | String | `null` | Use for specific android platform | +| `windows` | String | `null` | Use for specific android platform | +| `web` | String | `null` | Use for specific android platform | +| `linux` | String | `null` | Use for specific android platform | + + --- ## Flavor support @@ -157,44 +180,60 @@ dev_dependencies: icons_launcher: ^2.0.0-beta.3 icons_launcher: - # image_path: 'assets/ic_logo_border.png' - image_path_android: 'assets/ic_logo_border.png' - image_path_ios: 'assets/ic_logo_rectangle.png' - image_path_macos: 'assets/ic_logo_border.png' - image_path_windows: 'assets/ic_logo_border.png' - image_path_linux: 'assets/ic_logo_border.png' - image_path_web: 'assets/ic_logo_border.png' - favicon_path_web: 'assets/ic_logo_round.png' - image_adaptive_background: 'assets/ic_background.png' - image_adaptive_foreground: 'assets/ic_foreground.png' - image_adaptive_round: 'assets/ic_logo_round.png' #! (Optional) - ios: true - android: true - macos: false - windows: false - linux: false - web: false + image_path: 'assets/ic_logo_border.png' + platforms: + android: + enable: true + image_path: 'assets/ic_logo_border.png' + # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_background_image: 'assets/ic_background.png' + adaptive_foreground_image: 'assets/ic_foreground.png' + adaptive_round_image: 'assets/ic_logo_round.png' + ios: + enable: true + image_path: 'assets/ic_logo_rectangle.png' + web: + enable: true + image_path: 'assets/ic_logo_border.png' + favicon_path: 'assets/ic_logo_round.png' + macos: + enable: false + image_path: 'assets/ic_logo_border.png' + windows: + enable: false + image_path: 'assets/ic_logo_border.png' + linux: + enable: false + image_path: 'assets/ic_logo_border.png' ``` ### Or use in custom yaml (icons_launcher.yaml) ```yaml icons_launcher: - # image_path: 'assets/ic_logo_border.png' - image_path_android: 'assets/ic_logo_border.png' - image_path_ios: 'assets/ic_logo_rectangle.png' - image_path_macos: 'assets/ic_logo_border.png' - image_path_windows: 'assets/ic_logo_border.png' - image_path_linux: 'assets/ic_logo_border.png' - image_path_web: 'assets/ic_logo_border.png' - favicon_path_web: 'assets/ic_logo_round.png' - image_adaptive_background: 'assets/ic_background.png' - image_adaptive_foreground: 'assets/ic_foreground.png' - image_adaptive_round: 'assets/ic_logo_round.png' #! (Optional) - ios: true - android: true - macos: false - windows: false - linux: false - web: false + image_path: 'assets/ic_logo_border.png' + platforms: + android: + enable: true + image_path: 'assets/ic_logo_border.png' + # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_background_image: 'assets/ic_background.png' + adaptive_foreground_image: 'assets/ic_foreground.png' + adaptive_round_image: 'assets/ic_logo_round.png' + ios: + enable: true + image_path: 'assets/ic_logo_rectangle.png' + web: + enable: true + image_path: 'assets/ic_logo_border.png' + favicon_path: 'assets/ic_logo_round.png' + macos: + enable: false + image_path: 'assets/ic_logo_border.png' + windows: + enable: false + image_path: 'assets/ic_logo_border.png' + linux: + enable: false + image_path: 'assets/ic_logo_border.png' ``` diff --git a/analysis_options.yaml b/analysis_options.yaml index 6087996..d2d58ae 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -178,3 +178,4 @@ linter: # - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review - valid_regexps # - void_checks # not yet tested + - public_member_api_docs diff --git a/bin/create.dart b/bin/create.dart index f31945e..3915f5d 100644 --- a/bin/create.dart +++ b/bin/create.dart @@ -1,5 +1,5 @@ import 'package:args/args.dart'; -import 'package:icons_launcher/cli_commands.dart'; +import 'package:icons_launcher/cli_commands_test.dart'; import 'package:icons_launcher/utils/constants.dart'; /// Run to create launcher icons diff --git a/example/simple_app/android/app/src/main/res/values/colors.xml b/example/simple_app/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..0f38676 --- /dev/null +++ b/example/simple_app/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFFFF + \ No newline at end of file diff --git a/example/simple_app/icons_launcher.yaml b/example/simple_app/icons_launcher.yaml index 3b16282..8000521 100644 --- a/example/simple_app/icons_launcher.yaml +++ b/example/simple_app/icons_launcher.yaml @@ -1,20 +1,28 @@ # flutter pub run icons_launcher:create + icons_launcher: image_path: 'assets/ic_logo_border.png' - # image_path_android: 'assets/ic_logo_border.png' - image_path_ios: 'assets/ic_logo_rectangle.png' - # image_path_macos: 'assets/ic_logo_border.png' - # image_path_windows: 'assets/ic_logo_border.png' - # image_path_linux: 'assets/ic_logo_border.png' - # image_path_web: 'assets/ic_logo_border.png' - # favicon_path_web: 'assets/ic_logo_round.png' - # color_adaptive_background: '#ffffff' # only available for Android 8.0 devices and above - image_adaptive_background: 'assets/ic_background.png' # only available for Android 8.0 devices and above - image_adaptive_foreground: 'assets/ic_foreground.png' # only available for Android 8.0 devices and above - image_adaptive_round: 'assets/ic_logo_round.png' # only available for Android 8.0 devices and above #! (Optional) - android: true - ios: true - web: true - macos: false - windows: false - linux: false + platforms: + android: + enable: true + image_path: 'assets/ic_logo_border.png' + # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + adaptive_background_image: 'assets/ic_background.png' + adaptive_foreground_image: 'assets/ic_foreground.png' + adaptive_round_image: 'assets/ic_logo_round.png' + ios: + enable: true + image_path: 'assets/ic_logo_rectangle.png' + web: + enable: true + image_path: 'assets/ic_logo_border.png' + favicon_path: 'assets/ic_logo_round.png' + macos: + enable: false + image_path: 'assets/ic_logo_border.png' + windows: + enable: false + image_path: 'assets/ic_logo_border.png' + linux: + enable: false + image_path: 'assets/ic_logo_border.png' diff --git a/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 3c4935a7ca84f0976aca34b7f2895d65fb94d1ea..d119f4c9c61527e57898622f1c235dc511e0d1a3 100644 GIT binary patch literal 35866 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%0D|0j!QEE1j`9W`r zAw4iK{}iAPYng8GX&!28?sO065gjS~vIIH8F$8D=zWC;dr}rODYi1uvY)jkTd%a91 zI?QA#a)d1!4EDj{5ItBe$n2BfVg}aX4V1AW@SB);N-*W{b zIb@akRNnyHhC62nA!Oxc{YtxM|O%rE!YGM)N&yGX`R0DS6 z?;(yj`EDffFx~#C0qxJj>WtbE&xDg`wJ`Fyk@wMW&m#AONGz9HA7hwg-8=1|EvBP| zw1M(_&m|FcBhEgP=z-12EhfJOAtIQ z%r>R-jI}W9b}y!V9A)DdPRZh^BKef}eb&?|Lud6L!i#fE+ElT|hQV_Hwx3r)tW)Qg z#i)FK&>WL`6zDeMzrJCCq92s)Rf7H!Mp~1&cjw+f|7P@xEkQl^45GgHoPbvR zXV(U8F-sJGG1CT|Ip)nr-g1$&u0r)-w0M}M#6%cqYDESZ6SXYCrXfKHv6@M@~P$};QnJ&HyS|E=%kI&Z_wMp^xmEfKANF^ovgC1rV?d0c=Eo6%T$jrSW znzfm`rR^78kB_WynbaSwbuc>Wg`2}_8#|miZE-pw9>-W8@W0G=e$SZ`K!O^1`zkgV zfW6Vq+s7ZQ0lH%c(2j^6PNO+B4{0{pjIdzR>-oqA&ZL_Tz~;x(jE)gcd-o6}*gcu= zI}sd{Mw7Z^=jGEA@oFuOXx2%en2aN%_ba%m(|+e!oXe~`10`C(^6{My4N!Adpn6b6 zT0Oymj~the^3R(DMyo8mnPxCw&`{YpDOlt~t2hQqADQ}`H`ozBcjn@9WaR-i;f{D{ z>-+2I#vnErn68njDZgy+HIA~p^+5*l23G0$^^Bc4A&@!{dCgU<(=&25{Q(=rjZ}DV zsdvPvI2&RcrCWJBgpIP|d6a{Rw6yJYvvDyWwhAF8NnFLIfWBr0Nnd*wr){=t|Igwb zK+L1FX*9wM8a=HVm602?+QLVUz7!>V&Pt@UxzOA!Q6`lZ(LD6(eaj6X*W8EA?232; z2a`mKdEy%R0V{hx@(O1(Y%YFQa{rQ#O@-;Hv{xgZ{ukv{iVP@Hz{~aT2zi|>bZgL+ z1Bs(eCH=&TL(fkMAp9@5ii1|2=EK7hx~bf_Z@f1aK$6?lJW6P5XkTF`jndhxXv;^& z?Z`1w>M4y4;fp$ys2XCqYU0E6LdPsk7$BMB#0Nt(Y($bK&5ml^#6mTAac3wt0*F*I zPdqSyyPs(DBCq0XS~~$N&HU literal 46993 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 diff --git a/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index ed4cc16421680a50164ba74381b4b35ceaa0ccfc..7e9d0da43f3751811d96cee59eb45dcce1b9c061 100644 GIT binary patch delta 3000 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 ujPHFtJw07*ZEY8tnwtIr6?@p|2mK#;Af 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 FV1jIdyJG+V literal 1429 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>GbI`Jdw*pGcA%L+*Q#&*YQOJ$_%U#(BDn``;rKxi&&)LfRxIZ*98z8UWRslDo@Xu)QVh}rB>bKwe@Bjzwg%m$hd zG)gFMgHZlPxGcm3paLLb44yHI|Ag0wdp!_yD5R<|B29Ui~27`?vfy#ktk_KyHWMDA42{J=Uq-o}i z*%kZ@45mQ-Rw?0?K+z{&5KFc}xc5Q%1PFAbL_xCmpj?JNAm>L6SjrCMpiK}5LG0ZE zO>_%)r1c48n{Iv*t(u1=&kH zeO=ifbFy+6aSK)V_5t;NKhE#$Iz=+Oii|KDJ}W>g}0%`Svgra*tnS6TRU4iTH*e=dj~I` zym|EM*}I1?pT2#3`oZ(|3I-Y$DkeHMN=8~%YSR?;>=X?(Emci*ZIz9+t<|S1>hE8$ zVa1LmTh{DZv}x6@Wz!a}+qZDz%AHHMuHCzM^XlEpr!QPzf9QzkS_0!&1MPx*ICxe}RFdTH+c}l9E`G zYL#4+3Zxi}3=A!G4S>ir#L(2r)WFKnP}jiR%D`ZOPH`@ZhTQy=%(P0}8ZH)|z6jL7 N;OXk;vd$@?2>?>Ex^Vyi diff --git a/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/simple_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bcbf36df2f2aaaa0a63c7dabc94e600184229d0d..a0a06e72f22770db3868e5e0334183f80640987a 100644 GIT binary patch literal 6306 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 S$AKw=jvcW-Tx#hN^M3$opYtRD literal 14800 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 AaR2}S delta 1860 zcmZ{lX;c#U7Qp`?xC?HG8UsQ$Ws2gOnvxnuj+&TT)|B9qX*oJ-32u;y*`u=5$|cu2 zZgUi8G_^zoml@9)lS-Y*r3NZ@N6AXDae2(g_u-v;@44sv?)`nZpYD>@E5x0>YygY( z^!Ehd=K`%Q1{?rj7IpljKLF|90>H@y;HwgG<^i}&0$`C2fNKc==%k0w0^O7Y)kt3| z1?>JC)jjn^N}`c;JUj&eErWjx0?Hm5E1_DdkH5Ftdkwg{otA#at=me`(}&_2%$$6~ zE??yZhZz5ML{c$rP$1^2?PsuW>6Q!=t>XZ5iihcbqpydeZ8!U9D-e(}(9iWmTrE zq*S_x&4Vf1bo7hKh4_$l6{HGkIMI~tm$l<`0>j1AkI-C&jhzeFO~kbbNTykz(YRv6 zVc8)Gb3o(WM0GRNLBxk4ppt#5{{)H3p@4d~`Zm8ZK>Ib*Uxgpdeb#`N%_ zWvs?NBwVEO;g>u<>)b0uhF+f2dhWU6aM<#2@-UCoj>nMgAy;A?rl@SLgu*$vRU0lY zckwvxN}FTtCuA-{OXN9^vFlZo+<*`cNzz#|zYmJEh{^e}kBkrmFGTep)zp)!@$Zw7 z;VNS+VTfV?-ugw5pg7d-iy;R>a-<18IC`UK|F<5+wm5TcfTCWtDj&$&vfNfLs>+F4 zx+rq(M$q*{9}e4G=5A%6cnvkz`AfPzERE8*b8oKbc=9EylkR4Vk49AA%CqY#`K6a( z%F8Z#)gjmpDojy*=rW`?*W410IJj6owHqcCN2*gAKMXM6b)v9d1d$Q>VAs-iN57h8 zYkw`r#6S=w71v{>VV#LFK2a*Wi$l{V|M_((D*(E~rp}kqycT8$>Q<5<0_l^%$YT@* zR?4EIi0Ioxkg$7O4`>!FM|nQyLsKWiq*5&tE$`?fhvk38vbK*Up<7hCuNFqA^twrf zPU7A@nmCVX`M9IhQJP6RvK^n}HGDbedDDmy`E%!1@3Uj$pU@X^59P1-cz|d?V7dXxAref_1okvpGbDqoU}&_cT$e>yul!<3WX7Qk06J^W$)qyB^o z{j##v!YkVoCScZbywzrSQCQf4W@D{FuT3qrwS|cA^fu}!jX7;wu(UaIwr_hwofU@^ z+yjn!HxbMmx+X%^mw)d2+)aqqNhE@?xdk1U3u{1n+BC#>r8AHH{l)-~+E4(sb*FCcQN znzht3_9)7TiMMlurFd~dvT7z$ej6w7KY1wPDp%9$cP$rc3pC>u=Xz?#kbo1A7u#dw z!Dxc9rzFJXU|Ly{=FxIHcpY@#dtbJ6fZq0op7GPgm~m`9u6`*CLAs8Q_SUm zGU{VKxk^gA6c!16%+`bSS_*3J`^FgvAeE&bYo*RM1Pu5JDb{>rgIjTfWHZxCS@BOe zb~1)W_SV_~doE!pl7j$h!B22ajPhdj8)P`B{N7YkS8$~vB9zxkVqO2}`^XQ?lR7u- zJ$44}tg*~pOrmi&-}BS%11EyRxIw%eO)dGxCRF^5C)@kQ?BjX!*0AvkgA4w-!A{@p z%-dt!cox=~AGcy=e=yR82Ufp3lVw6XTV?>BbqwMVjei?Ddee-9zLXeHN~*g0tLCh2 z)82=ozW)j7hnnuksPfXaJ?sdN?O=Wx?<}iiW_^7F=AFGy2QD!%&*vIGR4n3OjoI_< z9y&eO_>R3Wuri`w9SGxw4yl4gS(@S4n zih4Jh7*%vAQ9Bf4vYy-;F*DKKoMXFxtfdWwXBXk=r&ld;-6YM^yZPeLyBr%%qr*9VE-^&e_(Gt_)1y9g5$54^Q+2}{B6N&0)SO`CxlItqW-=wHXT}<$_JhtBJ8FBKcA9C_+2wOS$?M}R4|#Lc69Uy z??7+P-Y&jmDK?|5Z|=LL@2EG1%78 u)sf_CYfB^@awUJ?FoA9ziVt diff --git a/example/simple_app/web/favicon.png b/example/simple_app/web/favicon.png index 23384243a2d770465e52282ee009cc49d2e4285a..f023d85d3a2fd5e591bda66b0abb382090a08f26 100644 GIT binary patch delta 646 zcmV;10(t$a1D*wtBYy&ANklJ&iS4D9UOQ#f?zZnZ|iirS%pHOVi2m;>SjKlUw_GDG9SAL+fsS5Dj2bC=mF3zL({4c_W+6W^geA+x9`^HX=W(6HrA0*N)Qg z_~c+1XLCcL(0}V(F82vHo6U1lsZ@3ld9gu2t%t$&Ng8aj9tb%lkR64=V7P_r_4*r! zlG)1Q{p1l?F0N9k&W(|2)bJA<-WvW4uy zLR|#kX$)>o(WsjNKUILEN3x~SXr@OIw!-t%U1;|NFn_-$f;NM}-7_>iIMD-ssambJ zg%^v(Rg=kN;a*G$0e1Tg5Qy;O>pFb<(t!TGX~2cpm_VUWSj7{G#5=Fo`+_7%Dfdz; z0$95E7mUkmkZSyd0rK@`{>q+6v)Qbp2f2(>6!pvHa@ix1$P(*mOk@IstYZc?cBtVH zsSXXKSbqfUemESCN1aZmJDh1W8hxu)t1sAWwx@g%QcS?*^8{zW3=;?h+^JM5$)35p zuuv+M*8P5eNFtGp*%_hLYBkx)$oBhDY-}52u~;;nPN&${snu#{l}hDsohy~fCK}jE gGMW7F2Z77^2gAPvh;RhvTmS$707*qoM6N<$g1av|1^@s6 delta 401 zcmV;C0dD@D1*!v(BYy#LNkl9qZ!>+I;NmhrVQ$dhYfo`dtI(F*V zrJy`W$2xTAQinc7Dr9|t=+Kww5?P7_oibE91WOW?JG;}2(jRblU7ypy?DLy<-o^C8$P5fGJkX?VRM3FXT*Trec4tJI!jv2jPH(tNj%`Hk#mVLGzO$q{>|Z%q=9OD$u4Br)@^c<#I6= vizVDboDeP%Bbm?V&-pmd_c_i*;eG>XON9r)|KL6V015yANkvXXu0mjfk=VHI diff --git a/example/simple_app/windows/runner/resources/app_icon.ico b/example/simple_app/windows/runner/resources/app_icon.ico index 38ea133568ccd0254c4d6254da23eb02b5ca5688..1b1441ec58f0119a322d87b089f3254147c0cc19 100644 GIT binary patch delta 13807 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 delta 33 kcmdni#CTa;jDdj>2pbw0fIxv^FE;}NP>5mkb(y`~0B_m`r~m)} diff --git a/example/test_app/.gitignore b/example/test_app/.gitignore deleted file mode 100644 index a8e938c..0000000 --- a/example/test_app/.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/example/test_app/.metadata b/example/test_app/.metadata deleted file mode 100644 index 39f2501..0000000 --- a/example/test_app/.metadata +++ /dev/null @@ -1,45 +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. - -version: - revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: android - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: ios - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: linux - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: macos - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: web - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: windows - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/example/test_app/README.md b/example/test_app/README.md deleted file mode 100644 index 5c246ff..0000000 --- a/example/test_app/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# test_app - -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/example/test_app/analysis_options.yaml b/example/test_app/analysis_options.yaml deleted file mode 100644 index 61b6c4d..0000000 --- a/example/test_app/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/example/test_app/android/.gitignore b/example/test_app/android/.gitignore deleted file mode 100644 index 6f56801..0000000 --- a/example/test_app/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/example/test_app/android/app/build.gradle b/example/test_app/android/app/build.gradle deleted file mode 100644 index 25052a0..0000000 --- a/example/test_app/android/app/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.test_app" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/example/test_app/android/app/src/debug/AndroidManifest.xml b/example/test_app/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 93f273d..0000000 --- a/example/test_app/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/example/test_app/android/app/src/main/AndroidManifest.xml b/example/test_app/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 291671a..0000000 --- a/example/test_app/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - diff --git a/example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt b/example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt deleted file mode 100644 index 1340508..0000000 --- a/example/test_app/android/app/src/main/kotlin/com/example/test_app/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.test_app - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml b/example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f..0000000 --- a/example/test_app/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/example/test_app/android/app/src/main/res/drawable/launch_background.xml b/example/test_app/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f..0000000 --- a/example/test_app/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/example/test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/example/test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/example/test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/example/test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28e45604e46eeda8dd24651419bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/example/test_app/android/app/src/main/res/values-night/styles.xml b/example/test_app/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be..0000000 --- a/example/test_app/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/example/test_app/android/app/src/main/res/values/styles.xml b/example/test_app/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88..0000000 --- a/example/test_app/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/example/test_app/android/app/src/profile/AndroidManifest.xml b/example/test_app/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 93f273d..0000000 --- a/example/test_app/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/example/test_app/android/build.gradle b/example/test_app/android/build.gradle deleted file mode 100644 index 83ae220..0000000 --- a/example/test_app/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.6.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/example/test_app/android/gradle.properties b/example/test_app/android/gradle.properties deleted file mode 100644 index 94adc3a..0000000 --- a/example/test_app/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/example/test_app/android/gradle/wrapper/gradle-wrapper.properties b/example/test_app/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index cc5527d..0000000 --- a/example/test_app/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/example/test_app/android/settings.gradle b/example/test_app/android/settings.gradle deleted file mode 100644 index 44e62bc..0000000 --- a/example/test_app/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/test_app/ios/.gitignore b/example/test_app/ios/.gitignore deleted file mode 100644 index 7a7f987..0000000 --- a/example/test_app/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/example/test_app/ios/Flutter/AppFrameworkInfo.plist b/example/test_app/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 8d4492f..0000000 --- a/example/test_app/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 9.0 - - diff --git a/example/test_app/ios/Flutter/Debug.xcconfig b/example/test_app/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/example/test_app/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/example/test_app/ios/Flutter/Release.xcconfig b/example/test_app/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/example/test_app/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/example/test_app/ios/Runner.xcodeproj/project.pbxproj b/example/test_app/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 8262e11..0000000 --- a/example/test_app/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,481 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - 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_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - 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_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - 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_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - 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_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - 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_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - 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_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - 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_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/example/test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index c87d15a..0000000 --- a/example/test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/example/test_app/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/example/test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/example/test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/example/test_app/ios/Runner/AppDelegate.swift b/example/test_app/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4..0000000 --- a/example/test_app/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fa..0000000 --- a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 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 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bca859a3f474b03065bef75ba58a9e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7edb86cdfe0d15b4b0d98334a86163658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 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 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 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 diff --git a/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725..0000000 --- a/example/test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c..0000000 --- a/example/test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/test_app/ios/Runner/Base.lproj/Main.storyboard b/example/test_app/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c2851..0000000 --- a/example/test_app/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/test_app/ios/Runner/Info.plist b/example/test_app/ios/Runner/Info.plist deleted file mode 100644 index 3091536..0000000 --- a/example/test_app/ios/Runner/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Test App - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - test_app - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - - diff --git a/example/test_app/ios/Runner/Runner-Bridging-Header.h b/example/test_app/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a5..0000000 --- a/example/test_app/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/example/test_app/lib/main.dart b/example/test_app/lib/main.dart deleted file mode 100644 index 202509b..0000000 --- a/example/test_app/lib/main.dart +++ /dev/null @@ -1,115 +0,0 @@ -import 'package:flutter/material.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primarySwatch: Colors.blue, - ), - home: const MyHomePage(title: 'Flutter Demo Home Page'), - ); - } -} - -class MyHomePage extends StatefulWidget { - const MyHomePage({Key? key, required this.title}) : super(key: key); - - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - - final String title; - - @override - State createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() { - setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - _counter++; - }); - } - - @override - Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. - return Scaffold( - appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), - ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. - child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Invoke "debug painting" (press "p" in the console, choose the - // "Toggle Debug Paint" action from the Flutter Inspector in Android - // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) - // to see the wireframe for each widget. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'You have pushed the button this many times:', - ), - Text( - '$_counter', - style: Theme.of(context).textTheme.headline4, - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. - ); - } -} diff --git a/example/test_app/linux/.gitignore b/example/test_app/linux/.gitignore deleted file mode 100644 index d3896c9..0000000 --- a/example/test_app/linux/.gitignore +++ /dev/null @@ -1 +0,0 @@ -flutter/ephemeral diff --git a/example/test_app/linux/CMakeLists.txt b/example/test_app/linux/CMakeLists.txt deleted file mode 100644 index 37a471f..0000000 --- a/example/test_app/linux/CMakeLists.txt +++ /dev/null @@ -1,138 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.10) -project(runner LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "test_app") -# The unique GTK application identifier for this application. See: -# https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.example.test_app") - -# 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/test_app/linux/flutter/CMakeLists.txt b/example/test_app/linux/flutter/CMakeLists.txt deleted file mode 100644 index d5bd016..0000000 --- a/example/test_app/linux/flutter/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.10) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. - -# Serves the same purpose as list(TRANSFORM ... PREPEND ...), -# which isn't available in 3.10. -function(list_prepend LIST_NAME PREFIX) - set(NEW_LIST "") - foreach(element ${${LIST_NAME}}) - list(APPEND NEW_LIST "${PREFIX}${element}") - endforeach(element) - set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) -endfunction() - -# === Flutter Library === -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) -pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) - -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "fl_basic_message_channel.h" - "fl_binary_codec.h" - "fl_binary_messenger.h" - "fl_dart_project.h" - "fl_engine.h" - "fl_json_message_codec.h" - "fl_json_method_codec.h" - "fl_message_codec.h" - "fl_method_call.h" - "fl_method_channel.h" - "fl_method_codec.h" - "fl_method_response.h" - "fl_plugin_registrar.h" - "fl_plugin_registry.h" - "fl_standard_message_codec.h" - "fl_standard_method_codec.h" - "fl_string_codec.h" - "fl_value.h" - "fl_view.h" - "flutter_linux.h" -) -list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") -target_link_libraries(flutter INTERFACE - PkgConfig::GTK - PkgConfig::GLIB - PkgConfig::GIO -) -add_dependencies(flutter flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CMAKE_CURRENT_BINARY_DIR}/_phony_ - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" - ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} -) diff --git a/example/test_app/linux/flutter/generated_plugin_registrant.cc b/example/test_app/linux/flutter/generated_plugin_registrant.cc deleted file mode 100644 index e71a16d..0000000 --- a/example/test_app/linux/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,11 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - - -void fl_register_plugins(FlPluginRegistry* registry) { -} diff --git a/example/test_app/linux/flutter/generated_plugin_registrant.h b/example/test_app/linux/flutter/generated_plugin_registrant.h deleted file mode 100644 index e0f0a47..0000000 --- a/example/test_app/linux/flutter/generated_plugin_registrant.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#ifndef GENERATED_PLUGIN_REGISTRANT_ -#define GENERATED_PLUGIN_REGISTRANT_ - -#include - -// Registers Flutter plugins. -void fl_register_plugins(FlPluginRegistry* registry); - -#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/test_app/linux/flutter/generated_plugins.cmake b/example/test_app/linux/flutter/generated_plugins.cmake deleted file mode 100644 index 2e1de87..0000000 --- a/example/test_app/linux/flutter/generated_plugins.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/example/test_app/linux/main.cc b/example/test_app/linux/main.cc deleted file mode 100644 index e7c5c54..0000000 --- a/example/test_app/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/example/test_app/linux/my_application.cc b/example/test_app/linux/my_application.cc deleted file mode 100644 index 8a7ac0c..0000000 --- a/example/test_app/linux/my_application.cc +++ /dev/null @@ -1,104 +0,0 @@ -#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, "test_app"); - 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, "test_app"); - } - - 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/test_app/linux/my_application.h b/example/test_app/linux/my_application.h deleted file mode 100644 index 72271d5..0000000 --- a/example/test_app/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#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/test_app/macos/.gitignore b/example/test_app/macos/.gitignore deleted file mode 100644 index 746adbb..0000000 --- a/example/test_app/macos/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/dgph -**/xcuserdata/ diff --git a/example/test_app/macos/Flutter/Flutter-Debug.xcconfig b/example/test_app/macos/Flutter/Flutter-Debug.xcconfig deleted file mode 100644 index c2efd0b..0000000 --- a/example/test_app/macos/Flutter/Flutter-Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/test_app/macos/Flutter/Flutter-Release.xcconfig b/example/test_app/macos/Flutter/Flutter-Release.xcconfig deleted file mode 100644 index c2efd0b..0000000 --- a/example/test_app/macos/Flutter/Flutter-Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift b/example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift deleted file mode 100644 index cccf817..0000000 --- a/example/test_app/macos/Flutter/GeneratedPluginRegistrant.swift +++ /dev/null @@ -1,10 +0,0 @@ -// -// Generated file. Do not edit. -// - -import FlutterMacOS -import Foundation - - -func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { -} diff --git a/example/test_app/macos/Runner.xcodeproj/project.pbxproj b/example/test_app/macos/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 6ff3a28..0000000 --- a/example/test_app/macos/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,572 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 51; - 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 */ - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 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 */ - 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 /* test_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "test_app.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 = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 33CC10EA2044A3C60003C045 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 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 */, - 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - ); - sourceTree = ""; - }; - 33CC10EE2044A3C60003C045 /* Products */ = { - isa = PBXGroup; - children = ( - 33CC10ED2044A3C60003C045 /* test_app.app */, - ); - 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 = ( - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 33CC10EC2044A3C60003C045 /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 33CC10E92044A3C60003C045 /* Sources */, - 33CC10EA2044A3C60003C045 /* Frameworks */, - 33CC10EB2044A3C60003C045 /* Resources */, - 33CC110E2044A8840003C045 /* Bundle Framework */, - 3399D490228B24CF009A79C7 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - 33CC11202044C79F0003C045 /* PBXTargetDependency */, - ); - name = Runner; - productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* test_app.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 = { - 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 */, - 33CC111A2044C6BA0003C045 /* Flutter Assemble */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 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; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; - }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, - ); - outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 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 */ - 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 */ - 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.11; - 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.11; - 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.11; - 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 */ - 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/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/example/test_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index bacf47c..0000000 --- a/example/test_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/example/test_app/macos/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/example/test_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/test_app/macos/Runner/AppDelegate.swift b/example/test_app/macos/Runner/AppDelegate.swift deleted file mode 100644 index d53ef64..0000000 --- a/example/test_app/macos/Runner/AppDelegate.swift +++ /dev/null @@ -1,9 +0,0 @@ -import Cocoa -import FlutterMacOS - -@NSApplicationMain -class AppDelegate: FlutterAppDelegate { - override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return true - } -} diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a2ec33f..0000000 --- a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png deleted file mode 100644 index 3c4935a7ca84f0976aca34b7f2895d65fb94d1ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46993 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 diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png deleted file mode 100644 index ed4cc16421680a50164ba74381b4b35ceaa0ccfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3276 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 N;OXk;vd$@?2>?>Ex^Vyi diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png deleted file mode 100644 index bcbf36df2f2aaaa0a63c7dabc94e600184229d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c diff --git a/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/test_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png deleted file mode 100644 index e71a726136a47ed24125c7efc79d68a4a01961b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14800 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/test_app/macos/Runner/Configs/AppInfo.xcconfig b/example/test_app/macos/Runner/Configs/AppInfo.xcconfig deleted file mode 100644 index 80c4898..0000000 --- a/example/test_app/macos/Runner/Configs/AppInfo.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -// Application-level settings for the Runner target. -// -// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the -// future. If not, the values below would default to using the project name when this becomes a -// 'flutter create' template. - -// The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = test_app - -// The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.testApp - -// The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/example/test_app/macos/Runner/Configs/Debug.xcconfig b/example/test_app/macos/Runner/Configs/Debug.xcconfig deleted file mode 100644 index 36b0fd9..0000000 --- a/example/test_app/macos/Runner/Configs/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Debug.xcconfig" -#include "Warnings.xcconfig" diff --git a/example/test_app/macos/Runner/Configs/Release.xcconfig b/example/test_app/macos/Runner/Configs/Release.xcconfig deleted file mode 100644 index dff4f49..0000000 --- a/example/test_app/macos/Runner/Configs/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Release.xcconfig" -#include "Warnings.xcconfig" diff --git a/example/test_app/macos/Runner/Configs/Warnings.xcconfig b/example/test_app/macos/Runner/Configs/Warnings.xcconfig deleted file mode 100644 index 42bcbf4..0000000 --- a/example/test_app/macos/Runner/Configs/Warnings.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings -GCC_WARN_UNDECLARED_SELECTOR = YES -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE -CLANG_WARN__DUPLICATE_METHOD_MATCH = YES -CLANG_WARN_PRAGMA_PACK = YES -CLANG_WARN_STRICT_PROTOTYPES = YES -CLANG_WARN_COMMA = YES -GCC_WARN_STRICT_SELECTOR_MATCH = YES -CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES -CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES -GCC_WARN_SHADOW = YES -CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/example/test_app/macos/Runner/DebugProfile.entitlements b/example/test_app/macos/Runner/DebugProfile.entitlements deleted file mode 100644 index dddb8a3..0000000 --- a/example/test_app/macos/Runner/DebugProfile.entitlements +++ /dev/null @@ -1,12 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.network.server - - - diff --git a/example/test_app/macos/Runner/Info.plist b/example/test_app/macos/Runner/Info.plist deleted file mode 100644 index 4789daa..0000000 --- a/example/test_app/macos/Runner/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - 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/test_app/macos/Runner/MainFlutterWindow.swift b/example/test_app/macos/Runner/MainFlutterWindow.swift deleted file mode 100644 index 2722837..0000000 --- a/example/test_app/macos/Runner/MainFlutterWindow.swift +++ /dev/null @@ -1,15 +0,0 @@ -import Cocoa -import FlutterMacOS - -class MainFlutterWindow: NSWindow { - override func awakeFromNib() { - let flutterViewController = FlutterViewController.init() - let windowFrame = self.frame - self.contentViewController = flutterViewController - self.setFrame(windowFrame, display: true) - - RegisterGeneratedPlugins(registry: flutterViewController) - - super.awakeFromNib() - } -} diff --git a/example/test_app/macos/Runner/Release.entitlements b/example/test_app/macos/Runner/Release.entitlements deleted file mode 100644 index 852fa1a..0000000 --- a/example/test_app/macos/Runner/Release.entitlements +++ /dev/null @@ -1,8 +0,0 @@ - - - - - com.apple.security.app-sandbox - - - diff --git a/example/test_app/pubspec.yaml b/example/test_app/pubspec.yaml deleted file mode 100644 index 8bc493f..0000000 --- a/example/test_app/pubspec.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: test_app -description: A new Flutter project. -publish_to: 'none' -version: 1.0.0+1 - -environment: - sdk: ">=2.17.6 <3.0.0" - -dependencies: - flutter: - sdk: flutter - cupertino_icons: ^1.0.2 - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^2.0.0 - icons_launcher: - path: ../../ - -flutter: - uses-material-design: true \ No newline at end of file diff --git a/example/test_app/test/widget_test.dart b/example/test_app/test/widget_test.dart deleted file mode 100644 index 2090fb8..0000000 --- a/example/test_app/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:test_app/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/example/test_app/web/favicon.png b/example/test_app/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae21512746f852a42ba87e4165dfdd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM diff --git a/example/test_app/web/icons/Icon-192.png b/example/test_app/web/icons/Icon-192.png deleted file mode 100644 index b749bfef07473333cf1dd31e9eed89862a5d52aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5292 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 diff --git a/example/test_app/web/icons/Icon-512.png b/example/test_app/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48dff1169879ba46840804b412fe02fefd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8252 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 diff --git a/example/test_app/web/icons/Icon-maskable-192.png b/example/test_app/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d76e525556d5d89141648c724331630325d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5594 zcmdT|`#%%j|KDb2V@0DPm$^(Lx5}lO%Yv(=e*7hl@QqKS50#~#^IQPxBmuh|i9sXnt4ch@VT0F7% zMtrs@KWIOo+QV@lSs66A>2pz6-`9Jk=0vv&u?)^F@HZ)-6HT=B7LF;rdj zskUyBfbojcX#CS>WrIWo9D=DIwcXM8=I5D{SGf$~=gh-$LwY?*)cD%38%sCc?5OsX z-XfkyL-1`VavZ?>(pI-xp-kYq=1hsnyP^TLb%0vKRSo^~r{x?ISLY1i7KjSp z*0h&jG(Rkkq2+G_6eS>n&6>&Xk+ngOMcYrk<8KrukQHzfx675^^s$~<@d$9X{VBbg z2Fd4Z%g`!-P}d#`?B4#S-9x*eNlOVRnDrn#jY@~$jfQ-~3Od;A;x-BI1BEDdvr`pI z#D)d)!2_`GiZOUu1crb!hqH=ezs0qk<_xDm_Kkw?r*?0C3|Io6>$!kyDl;eH=aqg$B zsH_|ZD?jP2dc=)|L>DZmGyYKa06~5?C2Lc0#D%62p(YS;%_DRCB1k(+eLGXVMe+=4 zkKiJ%!N6^mxqM=wq`0+yoE#VHF%R<{mMamR9o_1JH8jfnJ?NPLs$9U!9!dq8 z0B{dI2!M|sYGH&9TAY34OlpIsQ4i5bnbG>?cWwat1I13|r|_inLE?FS@Hxdxn_YZN z3jfUO*X9Q@?HZ>Q{W0z60!bbGh557XIKu1?)u|cf%go`pwo}CD=0tau-}t@R2OrSH zQzZr%JfYa`>2!g??76=GJ$%ECbQh7Q2wLRp9QoyiRHP7VE^>JHm>9EqR3<$Y=Z1K^SHuwxCy-5@z3 zVM{XNNm}yM*pRdLKp??+_2&!bp#`=(Lh1vR{~j%n;cJv~9lXeMv)@}Odta)RnK|6* zC+IVSWumLo%{6bLDpn)Gz>6r&;Qs0^+Sz_yx_KNz9Dlt^ax`4>;EWrIT#(lJ_40<= z750fHZ7hI{}%%5`;lwkI4<_FJw@!U^vW;igL0k+mK)-j zYuCK#mCDK3F|SC}tC2>m$ZCqNB7ac-0UFBJ|8RxmG@4a4qdjvMzzS&h9pQmu^x&*= zGvapd1#K%Da&)8f?<9WN`2H^qpd@{7In6DNM&916TRqtF4;3`R|Nhwbw=(4|^Io@T zIjoR?tB8d*sO>PX4vaIHF|W;WVl6L1JvSmStgnRQq zTX4(>1f^5QOAH{=18Q2Vc1JI{V=yOr7yZJf4Vpfo zeHXdhBe{PyY;)yF;=ycMW@Kb>t;yE>;f79~AlJ8k`xWucCxJfsXf2P72bAavWL1G#W z;o%kdH(mYCM{$~yw4({KatNGim49O2HY6O07$B`*K7}MvgI=4x=SKdKVb8C$eJseA$tmSFOztFd*3W`J`yIB_~}k%Sd_bPBK8LxH)?8#jM{^%J_0|L z!gFI|68)G}ex5`Xh{5pB%GtlJ{Z5em*e0sH+sU1UVl7<5%Bq+YrHWL7?X?3LBi1R@_)F-_OqI1Zv`L zb6^Lq#H^2@d_(Z4E6xA9Z4o3kvf78ZDz!5W1#Mp|E;rvJz&4qj2pXVxKB8Vg0}ek%4erou@QM&2t7Cn5GwYqy%{>jI z)4;3SAgqVi#b{kqX#$Mt6L8NhZYgonb7>+r#BHje)bvaZ2c0nAvrN3gez+dNXaV;A zmyR0z@9h4@6~rJik-=2M-T+d`t&@YWhsoP_XP-NsVO}wmo!nR~QVWU?nVlQjNfgcTzE-PkfIX5G z1?&MwaeuzhF=u)X%Vpg_e@>d2yZwxl6-r3OMqDn8_6m^4z3zG##cK0Fsgq8fcvmhu z{73jseR%X%$85H^jRAcrhd&k!i^xL9FrS7qw2$&gwAS8AfAk#g_E_tP;x66fS`Mn@SNVrcn_N;EQm z`Mt3Z%rw%hDqTH-s~6SrIL$hIPKL5^7ejkLTBr46;pHTQDdoErS(B>``t;+1+M zvU&Se9@T_BeK;A^p|n^krIR+6rH~BjvRIugf`&EuX9u69`9C?9ANVL8l(rY6#mu^i z=*5Q)-%o*tWl`#b8p*ZH0I}hn#gV%|jt6V_JanDGuekR*-wF`u;amTCpGG|1;4A5$ zYbHF{?G1vv5;8Ph5%kEW)t|am2_4ik!`7q{ymfHoe^Z99c|$;FAL+NbxE-_zheYbV z3hb0`uZGTsgA5TG(X|GVDSJyJxsyR7V5PS_WSnYgwc_D60m7u*x4b2D79r5UgtL18 zcCHWk+K6N1Pg2c;0#r-)XpwGX?|Iv)^CLWqwF=a}fXUSM?n6E;cCeW5ER^om#{)Jr zJR81pkK?VoFm@N-s%hd7@hBS0xuCD0-UDVLDDkl7Ck=BAj*^ps`393}AJ+Ruq@fl9 z%R(&?5Nc3lnEKGaYMLmRzKXow1+Gh|O-LG7XiNxkG^uyv zpAtLINwMK}IWK65hOw&O>~EJ}x@lDBtB`yKeV1%GtY4PzT%@~wa1VgZn7QRwc7C)_ zpEF~upeDRg_<#w=dLQ)E?AzXUQpbKXYxkp>;c@aOr6A|dHA?KaZkL0svwB^U#zmx0 zzW4^&G!w7YeRxt<9;d@8H=u(j{6+Uj5AuTluvZZD4b+#+6Rp?(yJ`BC9EW9!b&KdPvzJYe5l7 zMJ9aC@S;sA0{F0XyVY{}FzW0Vh)0mPf_BX82E+CD&)wf2!x@{RO~XBYu80TONl3e+ zA7W$ra6LcDW_j4s-`3tI^VhG*sa5lLc+V6ONf=hO@q4|p`CinYqk1Ko*MbZ6_M05k zSwSwkvu;`|I*_Vl=zPd|dVD0lh&Ha)CSJJvV{AEdF{^Kn_Yfsd!{Pc1GNgw}(^~%)jk5~0L~ms|Rez1fiK~s5t(p1ci5Gq$JC#^JrXf?8 z-Y-Zi_Hvi>oBzV8DSRG!7dm|%IlZg3^0{5~;>)8-+Nk&EhAd(}s^7%MuU}lphNW9Q zT)DPo(ob{tB7_?u;4-qGDo!sh&7gHaJfkh43QwL|bbFVi@+oy;i;M zM&CP^v~lx1U`pi9PmSr&Mc<%HAq0DGH?Ft95)WY`P?~7O z`O^Nr{Py9M#Ls4Y7OM?e%Y*Mvrme%=DwQaye^Qut_1pOMrg^!5u(f9p(D%MR%1K>% zRGw%=dYvw@)o}Fw@tOtPjz`45mfpn;OT&V(;z75J*<$52{sB65$gDjwX3Xa!x_wE- z!#RpwHM#WrO*|~f7z}(}o7US(+0FYLM}6de>gQdtPazXz?OcNv4R^oYLJ_BQOd_l172oSK$6!1r@g+B@0ofJ4*{>_AIxfe-#xp>(1 z@Y3Nfd>fmqvjL;?+DmZk*KsfXJf<%~(gcLwEez%>1c6XSboURUh&k=B)MS>6kw9bY z{7vdev7;A}5fy*ZE23DS{J?8at~xwVk`pEwP5^k?XMQ7u64;KmFJ#POzdG#np~F&H ze-BUh@g54)dsS%nkBb}+GuUEKU~pHcYIg4vSo$J(J|U36bs0Use+3A&IMcR%6@jv$ z=+QI+@wW@?iu}Hpyzlvj-EYeop{f65GX0O%>w#0t|V z1-svWk`hU~m`|O$kw5?Yn5UhI%9P-<45A(v0ld1n+%Ziq&TVpBcV9n}L9Tus-TI)f zd_(g+nYCDR@+wYNQm1GwxhUN4tGMLCzDzPqY$~`l<47{+l<{FZ$L6(>J)|}!bi<)| zE35dl{a2)&leQ@LlDxLQOfUDS`;+ZQ4ozrleQwaR-K|@9T{#hB5Z^t#8 zC-d_G;B4;F#8A2EBL58s$zF-=SCr`P#z zNCTnHF&|X@q>SkAoYu>&s9v@zCpv9lLSH-UZzfhJh`EZA{X#%nqw@@aW^vPcfQrlPs(qQxmC|4tp^&sHy!H!2FH5eC{M@g;ElWNzlb-+ zxpfc0m4<}L){4|RZ>KReag2j%Ot_UKkgpJN!7Y_y3;Ssz{9 z!K3isRtaFtQII5^6}cm9RZd5nTp9psk&u1C(BY`(_tolBwzV_@0F*m%3G%Y?2utyS zY`xM0iDRT)yTyYukFeGQ&W@ReM+ADG1xu@ruq&^GK35`+2r}b^V!m1(VgH|QhIPDE X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! diff --git a/example/test_app/web/icons/Icon-maskable-512.png b/example/test_app/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c56691fbdb0b7efa65097c7cc1edac12a6d3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20998 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 MPgg&ebxsLQ025IeI{*Lx diff --git a/example/test_app/web/index.html b/example/test_app/web/index.html deleted file mode 100644 index 30d1763..0000000 --- a/example/test_app/web/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - test_app - - - - - - - - - - diff --git a/example/test_app/web/manifest.json b/example/test_app/web/manifest.json deleted file mode 100644 index 8242090..0000000 --- a/example/test_app/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "test_app", - "short_name": "test_app", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/example/test_app/windows/.gitignore b/example/test_app/windows/.gitignore deleted file mode 100644 index d492d0d..0000000 --- a/example/test_app/windows/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ephemeral/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/example/test_app/windows/CMakeLists.txt b/example/test_app/windows/CMakeLists.txt deleted file mode 100644 index 41c46ff..0000000 --- a/example/test_app/windows/CMakeLists.txt +++ /dev/null @@ -1,101 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.14) -project(test_app 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 "test_app") - -# 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/test_app/windows/flutter/CMakeLists.txt b/example/test_app/windows/flutter/CMakeLists.txt deleted file mode 100644 index 930d207..0000000 --- a/example/test_app/windows/flutter/CMakeLists.txt +++ /dev/null @@ -1,104 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.14) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. -set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") - -# === 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/test_app/windows/flutter/generated_plugin_registrant.cc b/example/test_app/windows/flutter/generated_plugin_registrant.cc deleted file mode 100644 index 8b6d468..0000000 --- a/example/test_app/windows/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,11 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - - -void RegisterPlugins(flutter::PluginRegistry* registry) { -} diff --git a/example/test_app/windows/flutter/generated_plugin_registrant.h b/example/test_app/windows/flutter/generated_plugin_registrant.h deleted file mode 100644 index dc139d8..0000000 --- a/example/test_app/windows/flutter/generated_plugin_registrant.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#ifndef GENERATED_PLUGIN_REGISTRANT_ -#define GENERATED_PLUGIN_REGISTRANT_ - -#include - -// Registers Flutter plugins. -void RegisterPlugins(flutter::PluginRegistry* registry); - -#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/test_app/windows/flutter/generated_plugins.cmake b/example/test_app/windows/flutter/generated_plugins.cmake deleted file mode 100644 index b93c4c3..0000000 --- a/example/test_app/windows/flutter/generated_plugins.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/example/test_app/windows/runner/CMakeLists.txt b/example/test_app/windows/runner/CMakeLists.txt deleted file mode 100644 index b9e550f..0000000 --- a/example/test_app/windows/runner/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} WIN32 - "flutter_window.cpp" - "main.cpp" - "utils.cpp" - "win32_window.cpp" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" - "Runner.rc" - "runner.exe.manifest" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# 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_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/test_app/windows/runner/Runner.rc b/example/test_app/windows/runner/Runner.rc deleted file mode 100644 index dabfc36..0000000 --- a/example/test_app/windows/runner/Runner.rc +++ /dev/null @@ -1,121 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_APP_ICON ICON "resources\\app_icon.ico" - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER -#else -#define VERSION_AS_NUMBER 1,0,0 -#endif - -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME -#else -#define VERSION_AS_STRING "1.0.0" -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION VERSION_AS_NUMBER - PRODUCTVERSION VERSION_AS_NUMBER - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "test_app" "\0" - VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "test_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "test_app.exe" "\0" - VALUE "ProductName", "test_app" "\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/test_app/windows/runner/flutter_window.cpp b/example/test_app/windows/runner/flutter_window.cpp deleted file mode 100644 index b43b909..0000000 --- a/example/test_app/windows/runner/flutter_window.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#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()); - 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/test_app/windows/runner/flutter_window.h b/example/test_app/windows/runner/flutter_window.h deleted file mode 100644 index 6da0652..0000000 --- a/example/test_app/windows/runner/flutter_window.h +++ /dev/null @@ -1,33 +0,0 @@ -#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/test_app/windows/runner/main.cpp b/example/test_app/windows/runner/main.cpp deleted file mode 100644 index 0d9e770..0000000 --- a/example/test_app/windows/runner/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#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.CreateAndShow(L"test_app", 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/test_app/windows/runner/resource.h b/example/test_app/windows/runner/resource.h deleted file mode 100644 index 66a65d1..0000000 --- a/example/test_app/windows/runner/resource.h +++ /dev/null @@ -1,16 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Runner.rc -// -#define IDI_APP_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/example/test_app/windows/runner/resources/app_icon.ico b/example/test_app/windows/runner/resources/app_icon.ico deleted file mode 100644 index c04e20caf6370ebb9253ad831cc31de4a9c965f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33772 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 diff --git a/example/test_app/windows/runner/runner.exe.manifest b/example/test_app/windows/runner/runner.exe.manifest deleted file mode 100644 index c977c4a..0000000 --- a/example/test_app/windows/runner/runner.exe.manifest +++ /dev/null @@ -1,20 +0,0 @@ - - - - - PerMonitorV2 - - - - - - - - - - - - - - - diff --git a/example/test_app/windows/runner/utils.cpp b/example/test_app/windows/runner/utils.cpp deleted file mode 100644 index f5bf9fa..0000000 --- a/example/test_app/windows/runner/utils.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#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); - 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, - -1, utf8_string.data(), - target_length, nullptr, nullptr); - if (converted_length == 0) { - return std::string(); - } - return utf8_string; -} diff --git a/example/test_app/windows/runner/utils.h b/example/test_app/windows/runner/utils.h deleted file mode 100644 index 3879d54..0000000 --- a/example/test_app/windows/runner/utils.h +++ /dev/null @@ -1,19 +0,0 @@ -#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/test_app/windows/runner/win32_window.cpp b/example/test_app/windows/runner/win32_window.cpp deleted file mode 100644 index c10f08d..0000000 --- a/example/test_app/windows/runner/win32_window.cpp +++ /dev/null @@ -1,245 +0,0 @@ -#include "win32_window.h" - -#include - -#include "resource.h" - -namespace { - -constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; - -// 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 registar 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::CreateAndShow(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 | WS_VISIBLE, - 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; - } - - return OnCreate(); -} - -// 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; - } - - 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. -} diff --git a/example/test_app/windows/runner/win32_window.h b/example/test_app/windows/runner/win32_window.h deleted file mode 100644 index 17ba431..0000000 --- a/example/test_app/windows/runner/win32_window.h +++ /dev/null @@ -1,98 +0,0 @@ -#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 and shows a win32 window with |title| and position and size 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 to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); - - // 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 - // responsponds 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; - - 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/cli_commands.dart b/lib/cli_commands.dart index e4de82f..df1d456 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -1,283 +1,283 @@ -library icons_launcher_cli; +// library icons_launcher_cli; -import 'package:icons_launcher/utils/cli_logger.dart'; -import 'package:icons_launcher/utils/constants.dart'; -import 'package:icons_launcher/utils/icon.dart'; -import 'package:path/path.dart' as p; -import 'package:universal_io/io.dart'; -import 'package:yaml/yaml.dart'; -import 'utils/template.dart'; -import 'utils/utils.dart'; -part 'utils/flavor_helper.dart'; -part 'src/android.dart'; -part 'src/ios.dart'; -part 'src/macos.dart'; -part 'src/web.dart'; -part 'src/windows.dart'; -part 'src/linux.dart'; +// import 'package:icons_launcher/utils/cli_logger.dart'; +// import 'package:icons_launcher/utils/constants.dart'; +// import 'package:icons_launcher/utils/icon.dart'; +// import 'package:path/path.dart' as p; +// import 'package:universal_io/io.dart'; +// import 'package:yaml/yaml.dart'; +// import 'utils/template.dart'; +// import 'utils/utils.dart'; +// part 'utils/flavor_helper.dart'; +// part 'src/android.dart'; +// part 'src/ios.dart'; +// part 'src/macos.dart'; +// part 'src/web.dart'; +// part 'src/windows.dart'; +// part 'src/linux.dart'; -late _FlavorHelper _flavorHelper; +// late _FlavorHelper _flavorHelper; -/// Create launcher icons -void createLauncherIcons({String? path, String? flavor}) { - if (flavor != null) { - print('📱 Flavor $flavor detected! (Android, iOS)\n'); - } - _flavorHelper = _FlavorHelper(flavor); - final config = _getConfig(configFile: path); - _checkConfig(config); - _createIconsByConfig(config); -} +// /// Create launcher icons +// void createLauncherIcons({String? path, String? flavor}) { +// if (flavor != null) { +// print('📱 Flavor $flavor detected! (Android, iOS)\n'); +// } +// _flavorHelper = _FlavorHelper(flavor); +// final config = _getConfig(configFile: path); +// _checkConfig(config); +// _createIconsByConfig(config); +// } -/// Get config file -Map _getConfig({String? configFile}) { - String filePath; - if (configFile != null) { - if (File(configFile).existsSync()) { - filePath = configFile; - } else { - CliLogger.error('The config file `$configFile` was not found.'); - exit(1); - } - } else if (_flavorHelper.flavor != null) { - filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; - } else if (File('icons_launcher.yaml').existsSync()) { - filePath = 'icons_launcher.yaml'; - } else { - filePath = 'pubspec.yaml'; - } +// /// Get config file +// Map _getConfig({String? configFile}) { +// String filePath; +// if (configFile != null) { +// if (File(configFile).existsSync()) { +// filePath = configFile; +// } else { +// CliLogger.error('The config file `$configFile` was not found.'); +// exit(1); +// } +// } else if (_flavorHelper.flavor != null) { +// filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; +// } else if (File('icons_launcher.yaml').existsSync()) { +// filePath = 'icons_launcher.yaml'; +// } else { +// filePath = 'pubspec.yaml'; +// } - final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; +// final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; - if (yamlMap['icons_launcher'] is! Map) { - CliLogger.error( - "Your $filePath file does not contain a 'icons_launcher' section."); - exit(1); - } +// if (yamlMap['icons_launcher'] is! Map) { +// CliLogger.error( +// "Your $filePath file does not contain a 'icons_launcher' section."); +// exit(1); +// } - // yamlMap has the type YamlMap, which has several unwanted side effects - return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); -} +// // yamlMap has the type YamlMap, which has several unwanted side effects +// return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); +// } -/// Convert yaml to map -Map _yamlToMap(YamlMap yamlMap) { - final Map map = {}; - for (final MapEntry entry in yamlMap.entries) { - if (entry.value is YamlList) { - final list = []; - for (final value in entry.value as YamlList) { - if (value is String) { - list.add(value); - } - } - map[entry.key as String] = list; - } else if (entry.value is YamlMap) { - map[entry.key as String] = _yamlToMap(entry.value as YamlMap); - } else { - map[entry.key as String] = entry.value; - } - } - return map; -} +// /// Convert yaml to map +// Map _yamlToMap(YamlMap yamlMap) { +// final Map map = {}; +// for (final MapEntry entry in yamlMap.entries) { +// if (entry.value is YamlList) { +// final list = []; +// for (final value in entry.value as YamlList) { +// if (value is String) { +// list.add(value); +// } +// } +// map[entry.key as String] = list; +// } else if (entry.value is YamlMap) { +// map[entry.key as String] = _yamlToMap(entry.value as YamlMap); +// } else { +// map[entry.key as String] = entry.value; +// } +// } +// return map; +// } -/// Validate config options -void _checkConfig(Map config) { - if (!hasPlatformConfig(config)) { - CliLogger.error('Please add a `platform` target to your config file.'); - exit(1); - } +// /// Validate config options +// void _checkConfig(Map config) { +// if (!hasPlatformConfig(config)) { +// CliLogger.error('Please add a `platform` target to your config file.'); +// exit(1); +// } - if (config.containsKey('image_adaptive_foreground') && - !config.containsKey('image_adaptive_background') && - !config.containsKey('color_adaptive_background')) { - CliLogger.error( - 'Please add an `image_adaptive_background` or `color_adaptive_background` to your config file.'); - exit(1); - } +// if (config.containsKey('image_adaptive_foreground') && +// !config.containsKey('image_adaptive_background') && +// !config.containsKey('color_adaptive_background')) { +// CliLogger.error( +// 'Please add an `image_adaptive_background` or `color_adaptive_background` to your config file.'); +// exit(1); +// } - if (!config.containsKey('image_adaptive_foreground') && - (config.containsKey('image_adaptive_background') || - config.containsKey('color_adaptive_background'))) { - CliLogger.error( - 'Please add an `image_adaptive_foreground` to your config file.'); - exit(1); - } +// if (!config.containsKey('image_adaptive_foreground') && +// (config.containsKey('image_adaptive_background') || +// config.containsKey('color_adaptive_background'))) { +// CliLogger.error( +// 'Please add an `image_adaptive_foreground` to your config file.'); +// exit(1); +// } - if (config.containsKey('image_adaptive_background') && - config.containsKey('color_adaptive_background')) { - CliLogger.error('Your `icons_launcher` section can not contain both a ' - '`image_adaptive_background` and `color_adaptive_background`.'); - exit(1); - } +// if (config.containsKey('image_adaptive_background') && +// config.containsKey('color_adaptive_background')) { +// CliLogger.error('Your `icons_launcher` section can not contain both a ' +// '`image_adaptive_background` and `color_adaptive_background`.'); +// exit(1); +// } - final imagePath = _checkImageExists(config: config, parameter: 'image_path'); - final imagePathAndroid = - _checkImageExists(config: config, parameter: 'image_path_android') ?? - imagePath; - final imagePathIos = - _checkImageExists(config: config, parameter: 'image_path_ios') ?? - imagePath; - final imagePathMacos = - _checkImageExists(config: config, parameter: 'image_path_macos') ?? - imagePath; - final imagePathWindows = - _checkImageExists(config: config, parameter: 'image_path_windows') ?? - imagePath; - final imagePathLinux = - _checkImageExists(config: config, parameter: 'image_path_linux') ?? - imagePath; - final imagePathWeb = - _checkImageExists(config: config, parameter: 'image_path_web') ?? - imagePath; +// final imagePath = _checkImageExists(config: config, parameter: 'image_path'); +// final imagePathAndroid = +// _checkImageExists(config: config, parameter: 'image_path_android') ?? +// imagePath; +// final imagePathIos = +// _checkImageExists(config: config, parameter: 'image_path_ios') ?? +// imagePath; +// final imagePathMacos = +// _checkImageExists(config: config, parameter: 'image_path_macos') ?? +// imagePath; +// final imagePathWindows = +// _checkImageExists(config: config, parameter: 'image_path_windows') ?? +// imagePath; +// final imagePathLinux = +// _checkImageExists(config: config, parameter: 'image_path_linux') ?? +// imagePath; +// final imagePathWeb = +// _checkImageExists(config: config, parameter: 'image_path_web') ?? +// imagePath; - final List errors = []; - if (isNeedingNewAndroidIcon(config) && imagePathAndroid == null) { - errors.add('Could not find image path for Android'); - } - if (isNeedingNewIOSIcon(config) && imagePathIos == null) { - errors.add('Could not find image path for iOS'); - } - if (isNeedingNewMacOSIcon(config) && imagePathMacos == null) { - errors.add('Could not find image path for macOS'); - } - if (isNeedingNewWindowsIcon(config) && imagePathWindows == null) { - errors.add('Could not find image path for Windows'); - } - if (isNeedingNewLinuxIcon(config) && imagePathLinux == null) { - errors.add('Could not find image path for Linux'); - } - if (isNeedingNewWebIcon(config) && imagePathWeb == null) { - errors.add('Could not find image path for Web'); - } +// final List errors = []; +// if (isNeedingNewAndroidIcon(config) && imagePathAndroid == null) { +// errors.add('Could not find image path for Android'); +// } +// if (isNeedingNewIOSIcon(config) && imagePathIos == null) { +// errors.add('Could not find image path for iOS'); +// } +// if (isNeedingNewMacOSIcon(config) && imagePathMacos == null) { +// errors.add('Could not find image path for macOS'); +// } +// if (isNeedingNewWindowsIcon(config) && imagePathWindows == null) { +// errors.add('Could not find image path for Windows'); +// } +// if (isNeedingNewLinuxIcon(config) && imagePathLinux == null) { +// errors.add('Could not find image path for Linux'); +// } +// if (isNeedingNewWebIcon(config) && imagePathWeb == null) { +// errors.add('Could not find image path for Web'); +// } - if (errors.isNotEmpty) { - errors.forEach(CliLogger.error); - exit(1); - } -} +// if (errors.isNotEmpty) { +// errors.forEach(CliLogger.error); +// exit(1); +// } +// } -/// Create icons base on config -void _createIconsByConfig(Map config) { - final imagePath = _checkImageExists(config: config, parameter: 'image_path'); - final imagePathAndroid = - _checkImageExists(config: config, parameter: 'image_path_android') ?? - imagePath; - final imagePathIos = - _checkImageExists(config: config, parameter: 'image_path_ios') ?? - imagePath; - final imagePathMacos = - _checkImageExists(config: config, parameter: 'image_path_macos') ?? - imagePath; - final imagePathWindows = - _checkImageExists(config: config, parameter: 'image_path_windows') ?? - imagePath; - final imagePathLinux = - _checkImageExists(config: config, parameter: 'image_path_linux') ?? - imagePath; - final imagePathWeb = - _checkImageExists(config: config, parameter: 'image_path_web') ?? - imagePath; - final faviconPathWeb = - _checkImageExists(config: config, parameter: 'favicon_path_web') ?? - imagePath; - final adaptiveBgImage = - _checkImageExists(config: config, parameter: 'image_adaptive_background'); - final adaptiveFgImage = - _checkImageExists(config: config, parameter: 'image_adaptive_foreground'); - final adaptiveRoundImage = - _checkImageExists(config: config, parameter: 'image_adaptive_round'); +// /// Create icons base on config +// void _createIconsByConfig(Map config) { +// final imagePath = _checkImageExists(config: config, parameter: 'image_path'); +// final imagePathAndroid = +// _checkImageExists(config: config, parameter: 'image_path_android') ?? +// imagePath; +// final imagePathIos = +// _checkImageExists(config: config, parameter: 'image_path_ios') ?? +// imagePath; +// final imagePathMacos = +// _checkImageExists(config: config, parameter: 'image_path_macos') ?? +// imagePath; +// final imagePathWindows = +// _checkImageExists(config: config, parameter: 'image_path_windows') ?? +// imagePath; +// final imagePathLinux = +// _checkImageExists(config: config, parameter: 'image_path_linux') ?? +// imagePath; +// final imagePathWeb = +// _checkImageExists(config: config, parameter: 'image_path_web') ?? +// imagePath; +// final faviconPathWeb = +// _checkImageExists(config: config, parameter: 'favicon_path_web') ?? +// imagePath; +// final adaptiveBgImage = +// _checkImageExists(config: config, parameter: 'image_adaptive_background'); +// final adaptiveFgImage = +// _checkImageExists(config: config, parameter: 'image_adaptive_foreground'); +// final adaptiveRoundImage = +// _checkImageExists(config: config, parameter: 'image_adaptive_round'); - //! Android - if (isNeedingNewAndroidIcon(config) && imagePathAndroid != null) { - _createAndroidIcons(imagePath: imagePathAndroid); - } +// //! Android +// if (isNeedingNewAndroidIcon(config) && imagePathAndroid != null) { +// _createAndroidIcons(imagePath: imagePathAndroid); +// } - String? adaptiveBg; - if (config.containsKey('color_adaptive_background')) { - final adaptiveBgColor = config['color_adaptive_background'].toString(); - adaptiveBg = adaptiveBgColor; - } else if (adaptiveBgImage != null) { - adaptiveBg = adaptiveBgImage; - } +// String? adaptiveBg; +// if (config.containsKey('color_adaptive_background')) { +// final adaptiveBgColor = config['color_adaptive_background'].toString(); +// adaptiveBg = adaptiveBgColor; +// } else if (adaptiveBgImage != null) { +// adaptiveBg = adaptiveBgImage; +// } - //! Android Adaptive - final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; - if (hasAndroidAdaptiveConfig(config) && isAdaptiveIconExists) { - final int minSdk = _minSdk(); - if (minSdk == 0) { - CliLogger.error( - 'Can not find minSdk from android/app/build.gradle or android/local.properties', - level: CliLoggerLevel.two); - exit(1); - } - if (minSdk < 26 && imagePathAndroid == null) { - CliLogger.error( - 'Adaptive icon config found but no regular Android config. API 26 the regular Android config is required', - level: CliLoggerLevel.two); - exit(1); - } - _createAndroidAdaptiveIcon( - background: adaptiveBg, - foreground: adaptiveFgImage, - round: adaptiveRoundImage, - ); - } +// //! Android Adaptive +// final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; +// if (hasAndroidAdaptiveConfig(config) && isAdaptiveIconExists) { +// final int minSdk = _minSdk(); +// if (minSdk == 0) { +// CliLogger.error( +// 'Can not find minSdk from android/app/build.gradle or android/local.properties', +// level: CliLoggerLevel.two); +// exit(1); +// } +// if (minSdk < 26 && imagePathAndroid == null) { +// CliLogger.error( +// 'Adaptive icon config found but no regular Android config. API 26 the regular Android config is required', +// level: CliLoggerLevel.two); +// exit(1); +// } +// _createAndroidAdaptiveIcon( +// background: adaptiveBg, +// foreground: adaptiveFgImage, +// round: adaptiveRoundImage, +// ); +// } - //! iOS - if (isNeedingNewIOSIcon(config) && imagePathIos != null) { - _createIosIcons(imagePath: imagePathIos); - } +// //! iOS +// if (isNeedingNewIOSIcon(config) && imagePathIos != null) { +// _createIosIcons(imagePath: imagePathIos); +// } - //! macOS - if (isNeedingNewMacOSIcon(config) && imagePathMacos != null) { - _createMacOSIcons(imagePath: imagePathMacos); - } +// //! macOS +// if (isNeedingNewMacOSIcon(config) && imagePathMacos != null) { +// _createMacOSIcons(imagePath: imagePathMacos); +// } - //! Web - if (isNeedingNewWebIcon(config)) { - if (imagePathWeb != null) { - _createWebIcons(imagePath: imagePathWeb); - } - if (faviconPathWeb != null) { - _createWebFavicon(imagePath: faviconPathWeb); - } - } +// //! Web +// if (isNeedingNewWebIcon(config)) { +// if (imagePathWeb != null) { +// _createWebIcons(imagePath: imagePathWeb); +// } +// if (faviconPathWeb != null) { +// _createWebFavicon(imagePath: faviconPathWeb); +// } +// } - //! Windows - if (isNeedingNewWindowsIcon(config) && imagePathWindows != null) { - _createWindowsIcons(imagePath: imagePathWindows); - } +// //! Windows +// if (isNeedingNewWindowsIcon(config) && imagePathWindows != null) { +// _createWindowsIcons(imagePath: imagePathWindows); +// } - //! Linux - if (isNeedingNewLinuxIcon(config) && imagePathLinux != null) { - _createLinuxIcons(imagePath: imagePathLinux); - } -} +// //! Linux +// if (isNeedingNewLinuxIcon(config) && imagePathLinux != null) { +// _createLinuxIcons(imagePath: imagePathLinux); +// } +// } -/// Check image exists -String? _checkImageExists({ - required Map config, - required String parameter, -}) { - final String? image = config[parameter]?.toString(); - if (image != null) { - if (image.isNotEmpty && !File(image).existsSync()) { - CliLogger.error( - 'The file "$image" set as the parameter "$parameter" was not found.', - ); - exit(1); - } +// /// Check image exists +// String? _checkImageExists({ +// required Map config, +// required String parameter, +// }) { +// final String? image = config[parameter]?.toString(); +// if (image != null) { +// if (image.isNotEmpty && !File(image).existsSync()) { +// CliLogger.error( +// 'The file "$image" set as the parameter "$parameter" was not found.', +// ); +// exit(1); +// } - final imageExtension = p.extension(image).toLowerCase(); - if (imageExtension != '.png' && - imageExtension != '.jpg' && - imageExtension != '.jpeg') { - CliLogger.error( - 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', - ); - exit(1); - } - } +// final imageExtension = p.extension(image).toLowerCase(); +// if (imageExtension != '.png' && +// imageExtension != '.jpg' && +// imageExtension != '.jpeg') { +// CliLogger.error( +// 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', +// ); +// exit(1); +// } +// } - return image == '' ? null : image; -} +// return image == '' ? null : image; +// } diff --git a/lib/cli_commands_test.dart b/lib/cli_commands_test.dart new file mode 100644 index 0000000..71dd551 --- /dev/null +++ b/lib/cli_commands_test.dart @@ -0,0 +1,421 @@ +library icons_launcher_cli; + +import 'package:icons_launcher/utils/cli_logger.dart'; +import 'package:icons_launcher/utils/constants.dart'; +import 'package:icons_launcher/utils/icon.dart'; +import 'package:path/path.dart' as p; +import 'package:universal_io/io.dart'; +import 'package:yaml/yaml.dart'; +import 'utils/template.dart'; +import 'utils/utils.dart'; +part 'utils/flavor_helper.dart'; +part 'src/android.dart'; +part 'src/ios.dart'; +part 'src/macos.dart'; +part 'src/web.dart'; +part 'src/windows.dart'; +part 'src/linux.dart'; + +late _FlavorHelper _flavorHelper; + +/// Create launcher icons +void createLauncherIcons({String? path, String? flavor}) { + if (flavor != null) { + print('📱 Flavor $flavor detected! (Android, iOS)\n'); + } + _flavorHelper = _FlavorHelper(flavor); + final config = _getConfig(configFile: path); + _checkConfig(config); + _createIconsByConfig(config); +} + +/// Get config file +Map _getConfig({String? configFile}) { + String filePath; + if (configFile != null) { + if (File(configFile).existsSync()) { + filePath = configFile; + } else { + CliLogger.error('The config file `$configFile` was not found.'); + exit(1); + } + } else if (_flavorHelper.flavor != null) { + filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; + } else if (File('icons_launcher.yaml').existsSync()) { + filePath = 'icons_launcher.yaml'; + } else { + filePath = 'pubspec.yaml'; + } + + final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; + + if (yamlMap['icons_launcher'] is! Map) { + CliLogger.error( + "Your $filePath file does not contain a 'icons_launcher' section."); + exit(1); + } + + // yamlMap has the type YamlMap, which has several unwanted side effects + return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); +} + +/// Convert yaml to map +Map _yamlToMap(YamlMap yamlMap) { + final Map map = {}; + for (final MapEntry entry in yamlMap.entries) { + if (entry.value is YamlList) { + final list = []; + for (final value in entry.value as YamlList) { + if (value is String) { + list.add(value); + } + } + map[entry.key as String] = list; + } else if (entry.value is YamlMap) { + map[entry.key as String] = _yamlToMap(entry.value as YamlMap); + } else { + map[entry.key as String] = entry.value; + } + } + return map; +} + +/// Validate config options +void _checkConfig(Map config) { + if (!hasPlatformConfig(config)) { + CliLogger.error('Please add a `platforms` target to your config file.'); + exit(1); + } + final List errors = []; + final globalImagePath = + _checkImageExists(config: config, parameter: 'image_path'); + + final platforms = config['platforms'] as Map; + + // ANDROID + if (isNeedingNewAndroidIcon(platforms)) { + final androidConfig = platforms['android'] as Map; + final androidImagePath = + _checkImageExists(config: androidConfig, parameter: 'image_path') ?? + globalImagePath; + if (androidImagePath == null) { + errors.add('Please add a `image_path` for Android to your config file.'); + } + + if (androidConfig.containsKey('adaptive_foreground_image') && + !androidConfig.containsKey('adaptive_background_image') && + !androidConfig.containsKey('adaptive_background_color')) { + errors.add( + 'Please add an `adaptive_background_image` or `adaptive_background_color` for Android to your config file.'); + } + + if (!androidConfig.containsKey('adaptive_foreground_image') && + (androidConfig.containsKey('adaptive_background_image') || + androidConfig.containsKey('adaptive_background_color'))) { + errors.add( + 'Please add an `adaptive_foreground_image` for Android to your config file.'); + } + + if (androidConfig.containsKey('adaptive_background_image') && + androidConfig.containsKey('adaptive_background_color')) { + errors.add('Your Android platform can not contain both ' + '`adaptive_background_image` and `adaptive_background_color`.'); + } + } + + // IOS + if (isNeedingNewIosIcon(platforms)) { + final iosConfig = platforms['ios'] as Map; + final iosImagePath = + _checkImageExists(config: iosConfig, parameter: 'image_path') ?? + globalImagePath; + if (iosImagePath == null) { + errors.add('Please add a `image_path` for IOS to your config file.'); + } + } + + // MACOS + if (isNeedingNewMacOSIcon(platforms)) { + final macosConfig = platforms['macos'] as Map; + final macosImagePath = + _checkImageExists(config: macosConfig, parameter: 'image_path') ?? + globalImagePath; + if (macosImagePath == null) { + errors.add('Please add a `image_path` for MacOS to your config file.'); + } + } + + // WEB + if (isNeedingNewWebIcon(platforms)) { + final webConfig = platforms['web'] as Map; + final webImagePath = + _checkImageExists(config: webConfig, parameter: 'image_path') ?? + globalImagePath; + if (webImagePath == null) { + errors.add('Please add a `image_path` for Web to your config file.'); + } + } + + // WINDOWS + if (isNeedingNewWindowsIcon(platforms)) { + final windowsConfig = platforms['windows'] as Map; + final windowsImagePath = + _checkImageExists(config: windowsConfig, parameter: 'image_path') ?? + globalImagePath; + if (windowsImagePath == null) { + errors.add('Please add a `image_path` for Windows to your config file.'); + } + } + + // LINUX + if (isNeedingNewLinuxIcon(platforms)) { + final linuxConfig = platforms['linux'] as Map; + final linuxImagePath = + _checkImageExists(config: linuxConfig, parameter: 'image_path') ?? + globalImagePath; + if (linuxImagePath == null) { + errors.add('Please add a `image_path` for Linux to your config file.'); + } + } + + if (errors.isNotEmpty) { + errors.forEach(CliLogger.error); + exit(1); + } +} + +/// Create icons base on config +void _createIconsByConfig(Map config) { + // Global image path + final imagePath = _checkImageExists(config: config, parameter: 'image_path'); + final platforms = config['platforms'] as Map; + + String? imagePathAndroid = imagePath; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathAndroid = newImagePath; + } + if (imagePathAndroid == null) { + CliLogger.error('Could not find image path for Android'); + exit(1); + } + } + + String? imagePathIos = imagePath; + if (isNeedingNewIosIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['ios'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathIos = newImagePath; + } + if (imagePathIos == null) { + CliLogger.error('Could not find image path for iOS'); + exit(1); + } + } + + String? imagePathMacos = imagePath; + if (isNeedingNewMacOSIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['macos'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathMacos = newImagePath; + } + if (imagePathMacos == null) { + CliLogger.error('Could not find image path for macOS'); + exit(1); + } + } + + String? imagePathWindows = imagePath; + if (isNeedingNewWindowsIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['windows'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathWindows = newImagePath; + } + if (imagePathWindows == null) { + CliLogger.error('Could not find image path for Windows'); + exit(1); + } + } + + String? imagePathLinux = imagePath; + if (isNeedingNewLinuxIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['linux'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathLinux = newImagePath; + } + if (imagePathLinux == null) { + CliLogger.error('Could not find image path for Linux'); + exit(1); + } + } + + String? imagePathWeb = imagePath; + if (isNeedingNewWebIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['web'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathWeb = newImagePath; + } + if (imagePathWeb == null) { + CliLogger.error('Could not find image path for Web'); + exit(1); + } + } + + String? faviconPathWeb = imagePathWeb; + if (isNeedingNewWebIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['web'], + parameter: 'favicon_path', + ); + if (newImagePath != null) { + faviconPathWeb = newImagePath; + } + } + + String? adaptiveBgImage; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'adaptive_background_image', + ); + if (newImagePath != null) { + adaptiveBgImage = newImagePath; + } + } + + String? adaptiveFgImage; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'adaptive_foreground_image', + ); + if (newImagePath != null) { + adaptiveFgImage = newImagePath; + } + } + + String? adaptiveRoundImage; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'adaptive_round_image', + ); + if (newImagePath != null) { + adaptiveRoundImage = newImagePath; + } + } + + //! Android + if (isNeedingNewAndroidIcon(platforms) && imagePathAndroid != null) { + _createAndroidIcons(imagePath: imagePathAndroid); + } + + String? adaptiveBg; + if (platforms['android'].containsKey('adaptive_background_color')) { + final adaptiveBgColor = + platforms['android']['adaptive_background_color'].toString(); + adaptiveBg = adaptiveBgColor; + } else if (adaptiveBgImage != null) { + adaptiveBg = adaptiveBgImage; + } + + //! Android Adaptive + final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; + if (hasAndroidAdaptiveConfig(platforms) && isAdaptiveIconExists) { + final int minSdk = _minSdk(); + if (minSdk == 0) { + CliLogger.error( + 'Can not find minSdk from android/app/build.gradle or android/local.properties', + level: CliLoggerLevel.two); + exit(1); + } + if (minSdk < 26 && imagePathAndroid == null) { + CliLogger.error( + 'Adaptive icon config found but no regular Android config. API 26 the regular Android config is required', + level: CliLoggerLevel.two); + exit(1); + } + _createAndroidAdaptiveIcon( + background: adaptiveBg, + foreground: adaptiveFgImage, + round: adaptiveRoundImage, + ); + } + + //! iOS + if (isNeedingNewIosIcon(platforms) && imagePathIos != null) { + _createIosIcons(imagePath: imagePathIos); + } + + //! macOS + if (isNeedingNewMacOSIcon(platforms) && imagePathMacos != null) { + _createMacOSIcons(imagePath: imagePathMacos); + } + + //! Web + if (isNeedingNewWebIcon(platforms)) { + if (imagePathWeb != null) { + _createWebIcons(imagePath: imagePathWeb); + } + if (faviconPathWeb != null) { + _createWebFavicon(imagePath: faviconPathWeb); + } + } + + //! Windows + if (isNeedingNewWindowsIcon(platforms) && imagePathWindows != null) { + _createWindowsIcons(imagePath: imagePathWindows); + } + + //! Linux + if (isNeedingNewLinuxIcon(platforms) && imagePathLinux != null) { + _createLinuxIcons(imagePath: imagePathLinux); + } +} + +/// Check image exists +String? _checkImageExists({ + required Map config, + required String parameter, +}) { + final String? image = config[parameter]?.toString(); + if (image != null) { + if (image.isNotEmpty && !File(image).existsSync()) { + CliLogger.error( + 'The file "$image" set as the parameter "$parameter" was not found.', + ); + exit(1); + } + + final imageExtension = p.extension(image).toLowerCase(); + if (imageExtension != '.png' && + imageExtension != '.jpg' && + imageExtension != '.jpeg') { + CliLogger.error( + 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', + ); + exit(1); + } + } + + return image == '' ? null : image; +} diff --git a/lib/src/android.dart b/lib/src/android.dart index 9edec91..5fd3b75 100644 --- a/lib/src/android.dart +++ b/lib/src/android.dart @@ -148,7 +148,7 @@ void _createAdaptiveBackground( _createIcLauncherMipMapXmlFile(); } catch (e) { CliLogger.error( - 'Incorrect `$background` of `color_adaptive_background` or `image_adaptive_background`', + 'Incorrect `$background` of `adaptive_background_color` or `adaptive_background_image`', level: CliLoggerLevel.two, ); exit(1); @@ -239,7 +239,7 @@ void _createColorsFile(String backgroundColor) { color = '#FF' + backgroundColor.replaceAll('#', ''); } else { CliLogger.error( - 'Incorrect `$backgroundColor` of `color_adaptive_background`', + 'Incorrect `$backgroundColor` of `adaptive_background_color`', level: CliLoggerLevel.two, ); exit(1); @@ -258,7 +258,7 @@ void _updateColorsFile(File colorsXml, String backgroundColor) { color = '#FF' + backgroundColor.replaceAll('#', ''); } else { CliLogger.error( - 'Incorrect `$backgroundColor` of `color_adaptive_background`', + 'Incorrect `$backgroundColor` of `adaptive_background_color`', level: CliLoggerLevel.two, ); exit(1); diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 44c1578..daac021 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -1,79 +1,82 @@ /// Checks if the config file contains a `platform` bool hasPlatformConfig(Map config) { - return isNeedingNewAndroidIcon(config) || - isNeedingNewIOSIcon(config) || - isNeedingNewMacOSIcon(config) || - isNeedingNewWindowsIcon(config) || - isNeedingNewWebIcon(config) || - isNeedingNewLinuxIcon(config); + final bool isHasPlatforms = config.containsKey('platforms'); + final platforms = config['platforms'] as Map; + final bool isHasPlatformSpecific = isNeedingNewAndroidIcon(platforms) || + isNeedingNewIosIcon(platforms) || + isNeedingNewMacOSIcon(platforms) || + isNeedingNewWindowsIcon(platforms) || + isNeedingNewWebIcon(platforms) || + isNeedingNewLinuxIcon(platforms); + return isHasPlatforms && isHasPlatformSpecific; } /// Checks if the config has android. -bool hasAndroidConfig(Map config) { - return config.containsKey('android'); +bool hasAndroidConfig(Map platforms) { + return platforms.containsKey('android'); } /// Checks if the config need android. -bool isNeedingNewAndroidIcon(Map config) { - return hasAndroidConfig(config) && config['android'] == true; +bool isNeedingNewAndroidIcon(Map platforms) { + return hasAndroidConfig(platforms) && platforms['android']['enable'] == true; } /// Checks if the config has android adaptive. -bool hasAndroidAdaptiveConfig(Map config) { - return isNeedingNewAndroidIcon(config) && - (config.containsKey('image_adaptive_background') || - config.containsKey('color_adaptive_background')) && - config.containsKey('image_adaptive_foreground'); +bool hasAndroidAdaptiveConfig(Map platforms) { + return isNeedingNewAndroidIcon(platforms) && + (platforms['android'].containsKey('adaptive_background_image') || + platforms['android'].containsKey('adaptive_background_color')) && + platforms['android'].containsKey('adaptive_foreground_image'); } /// Checks if the config has ios. -bool hasIosConfig(Map config) { - return config.containsKey('ios'); +bool hasIosConfig(Map platforms) { + return platforms.containsKey('ios'); } /// Checks if the config need ios. -bool isNeedingNewIOSIcon(Map config) { - return hasIosConfig(config) && config['ios'] == true; +bool isNeedingNewIosIcon(Map platforms) { + return hasIosConfig(platforms) && platforms['ios']['enable'] == true; } /// Checks if the config has macos. -bool hasMacOSConfig(Map config) { - return config.containsKey('macos'); +bool hasMacOSConfig(Map platforms) { + return platforms.containsKey('macos'); } /// Checks if the config need macos. -bool isNeedingNewMacOSIcon(Map config) { - return hasMacOSConfig(config) && config['macos'] == true; +bool isNeedingNewMacOSIcon(Map platforms) { + return hasMacOSConfig(platforms) && platforms['macos']['enable'] == true; } /// Checks if the config has windows. -bool hasWindowsConfig(Map config) { - return config.containsKey('windows'); +bool hasWindowsConfig(Map platforms) { + return platforms.containsKey('windows'); } /// Checks if the config need windows. -bool isNeedingNewWindowsIcon(Map config) { - return hasWindowsConfig(config) && config['windows'] == true; +bool isNeedingNewWindowsIcon(Map platforms) { + return hasWindowsConfig(platforms) && platforms['windows']['enable'] == true; } /// Checks if the config has linux. -bool hasLinuxConfig(Map config) { - return config.containsKey('linux'); +bool hasLinuxConfig(Map platforms) { + return platforms.containsKey('linux'); } /// Checks if the config need linux. -bool isNeedingNewLinuxIcon(Map config) { - return hasLinuxConfig(config) && config['linux'] == true; +bool isNeedingNewLinuxIcon(Map platforms) { + return hasLinuxConfig(platforms) && platforms['linux']['enable'] == true; } /// Checks if the config has web. -bool hasWebConfig(Map config) { - return config.containsKey('web'); +bool hasWebConfig(Map platforms) { + return platforms.containsKey('web'); } /// Checks if the config need linux. -bool isNeedingNewWebIcon(Map config) { - return hasWebConfig(config) && config['web'] == true; +bool isNeedingNewWebIcon(Map platforms) { + return hasWebConfig(platforms) && platforms['web']['enable'] == true; } /// Checking color code From 9160b2db716e4b802b426904e6ba4c6de2c19265 Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Mon, 25 Jul 2022 09:10:33 +0700 Subject: [PATCH 16/21] update readme and more docs --- .vscode/settings.json | 1 + CHANGELOG.md | 32 +++++++++++++++- README.md | 74 ++++++++++++++++++++---------------- lib/src/android.dart | 2 + lib/src/version.dart | 4 +- lib/utils/cli_logger.dart | 11 ++++++ lib/utils/constants.dart | 45 ++++++++++++++++++++++ lib/utils/flavor_helper.dart | 2 + lib/utils/icon.dart | 6 +++ lib/utils/template.dart | 24 ++++++++++++ pubspec.yaml | 2 +- 11 files changed, 166 insertions(+), 37 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3c1d162..a7df5d1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,7 @@ "hdpi", "Hexa", "imageset", + "lproj", "Mainifest", "mdpi", "mipmap", diff --git a/CHANGELOG.md b/CHANGELOG.md index 42ae987..b71ad48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,37 @@ # Changelog -## 2.0.0-beta.3 +## 2.0.0 - Add web custom favicon support + - ## Config breaking changes: + + ```yaml + icons_launcher: + image_path: 'assets/ic_logo_border.png' + platforms: + android: + enable: true + image_path: 'assets/ic_logo_border.png' + # adaptive_background_color: '#ffffff' + adaptive_background_image: 'assets/ic_background.png' + adaptive_foreground_image: 'assets/ic_foreground.png' + adaptive_round_image: 'assets/ic_logo_round.png' + ios: + enable: true + image_path: 'assets/ic_logo_rectangle.png' + web: + enable: true + image_path: 'assets/ic_logo_border.png' + favicon_path: 'assets/ic_logo_round.png' + macos: + enable: false + image_path: 'assets/ic_logo_border.png' + windows: + enable: false + image_path: 'assets/ic_logo_border.png' + linux: + enable: false + image_path: 'assets/ic_logo_border.png' + ``` ## 2.0.0-beta.2 - Fixed auto remove image alpha channel for iOS platform to follow AppStore guideline diff --git a/README.md b/README.md index 1df9764..814586a 100644 --- a/README.md +++ b/README.md @@ -115,45 +115,53 @@ Shown below is the full list of attributes which you can specify within your Ico | Icons Launcher Option | Type | Default | Description | | --- | --- | --- | --- | | `image_path` | String | `null` | The image file path | -| `platforms` | String | `null` | Use for specific platform to generate icons | +| `platforms` | Object | `null` | Use for specific platform to generate icons | --- | Platforms Option | Type | Default | Description | | --- | --- | --- | --- | -| `android` | String | `null` | Use for specific android platform | -| `ios` | String | `null` | Use for specific android platform | -| `macos` | String | `null` | Use for specific android platform | -| `windows` | String | `null` | Use for specific android platform | -| `web` | String | `null` | Use for specific android platform | -| `linux` | String | `null` | Use for specific android platform | - - +| `enable` | Boolean | `false` | Use for enable android platform | +| `image_path` | String | `null` | The image file path | +| `adaptive_background_color` | String | `null` | Color for fill out the background of the adaptive icon (_"#ffffff"_) | +| `adaptive_background_image` | String | `null` | Image for fill out the background of the adaptive icon | +| `adaptive_foreground_image` | String | `null` | Image for the icon foreground of the adaptive icon | +| `adaptive_round_image` | String | `null` | Image for the round icon of the adaptive icon (optional) | + +| IOS Option | Type | Default | Description | +| --- | --- | --- | --- | +| `enable` | Boolean | `false` | Use for enable ios platform | +| `image_path` | String | `null` | The image file path | + +| Web Option | Type | Default | Description | +| --- | --- | --- | --- | +| `enable` | Boolean | `false` | Use for enable ios platform | +| `image_path` | String | `null` | The image file path | +| `favicon_path` | String | `null` | The image file path | + +| macOS Option | Type | Default | Description | +| --- | --- | --- | --- | +| `enable` | Boolean | `false` | Use for enable macos platform | +| `image_path` | String | `null` | The image file path | + +| Windows Option | Type | Default | Description | +| --- | --- | --- | --- | +| `enable` | Boolean | `false` | Use for enable windows platform | +| `image_path` | String | `null` | The image file path | + +| Linux Option | Type | Default | Description | +| --- | --- | --- | --- | +| `enable` | Boolean | `false` | Use for enable linux platform | +| `image_path` | String | `null` | The image file path | --- ## Flavor support diff --git a/lib/src/android.dart b/lib/src/android.dart index 5fd3b75..1e06392 100644 --- a/lib/src/android.dart +++ b/lib/src/android.dart @@ -1,5 +1,6 @@ part of icons_launcher_cli; +/// Android icons template final androidIcons = [ AndroidMipMapIconTemplate(directoryName: 'mipmap-mdpi', size: 48), AndroidMipMapIconTemplate(directoryName: 'mipmap-hdpi', size: 72), @@ -8,6 +9,7 @@ final androidIcons = [ AndroidMipMapIconTemplate(directoryName: 'mipmap-xxxhdpi', size: 192), ]; +/// Android adaptive icons template final adaptiveIcons = [ AndroidMipMapIconTemplate(directoryName: 'mipmap-mdpi', size: 108), AndroidMipMapIconTemplate(directoryName: 'mipmap-hdpi', size: 162), diff --git a/lib/src/version.dart b/lib/src/version.dart index 9237a46..aceca24 100644 --- a/lib/src/version.dart +++ b/lib/src/version.dart @@ -1,2 +1,2 @@ -// Generated code. Do not modify. -const packageVersion = '2.0.0-beta.3'; +/// Generated code. Do not modify. +const packageVersion = '2.0.0'; diff --git a/lib/utils/cli_logger.dart b/lib/utils/cli_logger.dart index 30b9a2c..eba7730 100644 --- a/lib/utils/cli_logger.dart +++ b/lib/utils/cli_logger.dart @@ -1,6 +1,12 @@ +/// Log levels enum CliLoggerLevel { + /// Level one one, + + /// Level two two, + + /// Level three three, } @@ -12,8 +18,13 @@ enum CliLoggerLevel { // Yellow: \x1B[33m // Blue: \x1B[34m // Cyan: \x1B[36m + +/// Cli Logger class CliLogger { + /// Constructor CliLogger(); + + /// Log info static void info( String message, { CliLoggerLevel level = CliLoggerLevel.one, diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 8ba0ada..005038f 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -1,5 +1,6 @@ import '../src/version.dart'; +/// Start message for the CLI const String START_MESSAGE = '''\n ╔════════════════════════════════════════════════════╗ ║ ✨✨ ICONS LAUNCHER ✨✨ ║ @@ -8,51 +9,73 @@ const String START_MESSAGE = '''\n ╚════════════════════════════════════════════════════╝ \n'''; +/// End message for the CLI const String END_MESSAGE = '''\n ==> GENERATE LAUNCHER ICONS SUCCESSFULLY <== ❤️ THANK YOU! ❤️ '''; +/// Flutter sdk gradle file location const String FLUTTER_SDK_GRADLE_FILE = '/packages/flutter_tools/gradle/flutter.gradle'; + +/// Android local properties file location const String ANDROID_LOCAL_PROPERTIES = 'android/local.properties'; + +/// Android build gradle file location const String ANDROID_GRADLE_FILE = 'android/app/build.gradle'; +/// Android colors xml file location const String ANDROID_COLOR_FILE = 'values/colors.xml'; +/// Android AndroidManifest file location const String ANDROID_MANIFEST_FILE = 'android/app/src/main/AndroidManifest.xml'; +/// Android icon name const String ANDROID_ICON_NAME = 'ic_launcher'; +/// Android icon name with extension const String ANDROID_ICON_FILE_NAME = '$ANDROID_ICON_NAME.png'; +/// Android playstore icon name const String ANDROID_PLAYSTORE_ICON_NAME = 'ic_launcher-playstore'; +/// Android playstore icon name with extension const String ANDROID_PLAYSTORE_ICON_FILE_NAME = '$ANDROID_PLAYSTORE_ICON_NAME.png'; +/// Android adaptive round icon name const String ANDROID_ADAPTIVE_ROUND_ICON_NAME = 'ic_launcher_round'; +/// Android adaptive round icon name with extension const String ANDROID_ADAPTIVE_ROUND_ICON_FILE_NAME = '$ANDROID_ADAPTIVE_ROUND_ICON_NAME.png'; +/// Android adaptive foreground icon name const String ANDROID_ADAPTIVE_FOREGROUND_ICON_NAME = 'ic_launcher_foreground'; +/// Android adaptive foreground icon name with extension const String ANDROID_ADAPTIVE_FOREGROUND_ICON_FILE_NAME = '$ANDROID_ADAPTIVE_FOREGROUND_ICON_NAME.png'; +/// Android adaptive background icon name const String ANDROID_ADAPTIVE_BACKGROUND_ICON_NAME = 'ic_launcher_background'; +/// Android adaptive background icon name with extension const String ANDROID_ADAPTIVE_BACKGROUND_ICON_FILE_NAME = '$ANDROID_ADAPTIVE_BACKGROUND_ICON_NAME.png'; +/// Android adaptive folder name const String ANDROID_ADAPTIVE_XML_DIR = 'mipmap-anydpi-v26'; +/// Android adaptive icon file const String ANDROID_ADAPTIVE_XML_FILE_NAME = '$ANDROID_ICON_NAME.xml'; +/// Android adaptive round icon file const String ANDROID_ADAPTIVE_ROUND_XML_FILE_NAME = '$ANDROID_ADAPTIVE_ROUND_ICON_NAME.xml'; +/// Android launcher background color xml const String IC_LAUNCHER_BACKGROUND_COLOR_XML = ''' @@ -61,6 +84,7 @@ const String IC_LAUNCHER_BACKGROUND_COLOR_XML = ''' '''; +/// Android launcher background image xml const String IC_LAUNCHER_MIP_MAP_XML = ''' @@ -69,6 +93,7 @@ const String IC_LAUNCHER_MIP_MAP_XML = ''' '''; +/// Android launcher background round color xml const String IC_LAUNCHER_ROUND_BACKGROUND_COLOR_XML = ''' @@ -77,6 +102,7 @@ const String IC_LAUNCHER_ROUND_BACKGROUND_COLOR_XML = ''' '''; +/// Android launcher background round image xml const String IC_LAUNCHER_ROUND_MIP_MAP_XML = ''' @@ -85,29 +111,48 @@ const String IC_LAUNCHER_ROUND_MIP_MAP_XML = ''' '''; +/// IOS config file location const String IOS_CONFIG_FILE = 'ios/Runner.xcodeproj/project.pbxproj'; +/// IOS default icon name const String IOS_DEFAULT_ICON_NAME = 'Icon-App'; +/// Web default favicon folder const String WEB_DEFAULT_FAVICON_DIR = 'web/'; +/// Web default icon folder const String WEB_DEFAULT_ICON_DIR = 'web/icons/'; +/// MacOS default app icon folder const String MACOS_DEFAULT_APP_ICON_DIR = 'macos/Runner/Assets.xcassets/AppIcon.appiconset/'; + +/// MacOS asset folder const String MACOS_ASSET_DIR = 'macos/Runner/Assets.xcassets/'; + +/// MacOS config file location const String MACOS_CONFIG_FILE = 'macos/Runner.xcodeproj/project.pbxproj'; + +/// MacOS default icon name const String MACOS_DEFAULT_ICON_NAME = 'app_icon'; + +/// MacOS default icon file with extension const String MACOS_DEFAULT_ICON_FILE_NAME = '$MACOS_DEFAULT_ICON_NAME.png'; +/// Windows default icon folder const String WINDOWS_DEFAULT_ICON_DIR = 'windows/runner/resources/'; +/// Windows default icon name const String WINDOWS_DEFAULT_ICON_NAME = 'app_icon'; +/// Windows default icon file with extension const String WINDOWS_DEFAULT_ICON_FILE_NAME = '$WINDOWS_DEFAULT_ICON_NAME.ico'; +/// Linux default icon folder const String LINUX_DEFAULT_ICON_DIR = 'snap/gui/'; +/// Linux default icon name const String LINUX_DEFAULT_ICON_NAME = 'app_icon'; +/// Linux default icon file with extension const String LINUX_DEFAULT_ICON_FILE_NAME = '$LINUX_DEFAULT_ICON_NAME.png'; diff --git a/lib/utils/flavor_helper.dart b/lib/utils/flavor_helper.dart index 775535b..f5e69e7 100644 --- a/lib/utils/flavor_helper.dart +++ b/lib/utils/flavor_helper.dart @@ -162,7 +162,9 @@ class _FlavorHelper { } } +/// String capitalize extension extension StringExtension on String { + /// Capitalize string String capitalize() { return '${this[0].toUpperCase()}${substring(1).toLowerCase()}'; } diff --git a/lib/utils/icon.dart b/lib/utils/icon.dart index c0a19cf..992c085 100644 --- a/lib/utils/icon.dart +++ b/lib/utils/icon.dart @@ -5,13 +5,18 @@ import 'package:universal_io/io.dart'; /// Icon template class IconTemplate { + /// Constructor const IconTemplate({required this.size}); + /// Size final int size; } +/// Icon class Icon { const Icon._(this.image); + + /// Image final Image image; /// Load an image from bytes @@ -29,6 +34,7 @@ class Icon { return Icon._loadBytes(File(filePath).readAsBytesSync()); } + /// Check image is alpha bool get hasAlpha => image.channels == Channels.rgba; /// Remove alpha channel from the image diff --git a/lib/utils/template.dart b/lib/utils/template.dart index 0f307a0..432a4af 100644 --- a/lib/utils/template.dart +++ b/lib/utils/template.dart @@ -1,47 +1,71 @@ /// Android template class AndroidMipMapIconTemplate { + /// Constructor AndroidMipMapIconTemplate({required this.directoryName, required this.size}); + /// Directory name final String directoryName; + + /// Icon size final int size; } /// iOS template class IosIconTemplate { + /// Constructor IosIconTemplate({required this.size, required this.name}); + /// Icon name final String name; + + /// Icon size final int size; } /// Web template class WebIconTemplate { + /// Constructor WebIconTemplate({required this.size, required this.name}); + /// Icon name final String name; + + /// Icon size final int size; } /// MacOS template class MacOSIconTemplate { + /// Constructor MacOSIconTemplate({required this.size, required this.name}); + /// Icon name final String name; + + /// Icon size final int size; } /// Windows template class WindowsIconTemplate { + /// Constructor WindowsIconTemplate({required this.size, required this.name}); + /// Icon name final String name; + + /// Icon size final int size; } /// Linux template class LinuxIconTemplate { + /// Constructor LinuxIconTemplate({required this.size, required this.name}); + /// Icon name final String name; + + /// Icon size final int size; } diff --git a/pubspec.yaml b/pubspec.yaml index fbffed6..35bfb24 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A command-line tool that simplifies the task of updating your Flutt maintainer: Mrr Hak homepage: https://mrrhak.com repository: https://github.com/mrrhak/icons_launcher -version: 2.0.0-beta.3 +version: 2.0.0 dependencies: args: ^2.3.1 From 6daaa4b1efaca681844bce186a2dce19e2115368 Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Mon, 25 Jul 2022 09:17:07 +0700 Subject: [PATCH 17/21] v2.0.0 --- README.md | 4 +- bin/create.dart | 2 +- example/flavor_app/icons_launcher-dev.yaml | 2 +- example/flavor_app/icons_launcher-prod.yaml | 2 +- example/simple_app/icons_launcher.yaml | 2 +- lib/cli_commands.dart | 704 ++++++++++++-------- lib/cli_commands_test.dart | 421 ------------ lib/utils/constants.dart | 2 +- 8 files changed, 428 insertions(+), 711 deletions(-) delete mode 100644 lib/cli_commands_test.dart diff --git a/README.md b/README.md index 814586a..c6ab82b 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ An example is shown below. More complex examples [here](https://github.com/mrrha ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta.3 + icons_launcher: ^2.0.0 icons_launcher: image_path: 'assets/ic_logo_border.png' @@ -185,7 +185,7 @@ The configuration file format is the same. ```yaml dev_dependencies: - icons_launcher: ^2.0.0-beta.3 + icons_launcher: ^2.0.0 icons_launcher: image_path: 'assets/ic_logo_border.png' diff --git a/bin/create.dart b/bin/create.dart index 3915f5d..f31945e 100644 --- a/bin/create.dart +++ b/bin/create.dart @@ -1,5 +1,5 @@ import 'package:args/args.dart'; -import 'package:icons_launcher/cli_commands_test.dart'; +import 'package:icons_launcher/cli_commands.dart'; import 'package:icons_launcher/utils/constants.dart'; /// Run to create launcher icons diff --git a/example/flavor_app/icons_launcher-dev.yaml b/example/flavor_app/icons_launcher-dev.yaml index c5465fa..3a52907 100644 --- a/example/flavor_app/icons_launcher-dev.yaml +++ b/example/flavor_app/icons_launcher-dev.yaml @@ -6,7 +6,7 @@ icons_launcher: android: enable: true image_path: 'assets/ic_logo_border.png' - # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + # adaptive_background_color: '#ffffff' adaptive_background_image: 'assets/ic_background.png' adaptive_foreground_image: 'assets/ic_foreground.png' adaptive_round_image: 'assets/ic_logo_round.png' diff --git a/example/flavor_app/icons_launcher-prod.yaml b/example/flavor_app/icons_launcher-prod.yaml index 16011f8..00f42db 100644 --- a/example/flavor_app/icons_launcher-prod.yaml +++ b/example/flavor_app/icons_launcher-prod.yaml @@ -6,7 +6,7 @@ icons_launcher: android: enable: true image_path: 'assets/ic_logo_border.png' - # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + # adaptive_background_color: '#ffffff' adaptive_background_image: 'assets/ic_background.png' adaptive_foreground_image: 'assets/ic_foreground.png' adaptive_round_image: 'assets/ic_logo_round.png' diff --git a/example/simple_app/icons_launcher.yaml b/example/simple_app/icons_launcher.yaml index 8000521..1e9c2e4 100644 --- a/example/simple_app/icons_launcher.yaml +++ b/example/simple_app/icons_launcher.yaml @@ -6,7 +6,7 @@ icons_launcher: android: enable: true image_path: 'assets/ic_logo_border.png' - # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + # adaptive_background_color: '#ffffff' adaptive_background_image: 'assets/ic_background.png' adaptive_foreground_image: 'assets/ic_foreground.png' adaptive_round_image: 'assets/ic_logo_round.png' diff --git a/lib/cli_commands.dart b/lib/cli_commands.dart index df1d456..71dd551 100644 --- a/lib/cli_commands.dart +++ b/lib/cli_commands.dart @@ -1,283 +1,421 @@ -// library icons_launcher_cli; - -// import 'package:icons_launcher/utils/cli_logger.dart'; -// import 'package:icons_launcher/utils/constants.dart'; -// import 'package:icons_launcher/utils/icon.dart'; -// import 'package:path/path.dart' as p; -// import 'package:universal_io/io.dart'; -// import 'package:yaml/yaml.dart'; -// import 'utils/template.dart'; -// import 'utils/utils.dart'; -// part 'utils/flavor_helper.dart'; -// part 'src/android.dart'; -// part 'src/ios.dart'; -// part 'src/macos.dart'; -// part 'src/web.dart'; -// part 'src/windows.dart'; -// part 'src/linux.dart'; - -// late _FlavorHelper _flavorHelper; - -// /// Create launcher icons -// void createLauncherIcons({String? path, String? flavor}) { -// if (flavor != null) { -// print('📱 Flavor $flavor detected! (Android, iOS)\n'); -// } -// _flavorHelper = _FlavorHelper(flavor); -// final config = _getConfig(configFile: path); -// _checkConfig(config); -// _createIconsByConfig(config); -// } - -// /// Get config file -// Map _getConfig({String? configFile}) { -// String filePath; -// if (configFile != null) { -// if (File(configFile).existsSync()) { -// filePath = configFile; -// } else { -// CliLogger.error('The config file `$configFile` was not found.'); -// exit(1); -// } -// } else if (_flavorHelper.flavor != null) { -// filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; -// } else if (File('icons_launcher.yaml').existsSync()) { -// filePath = 'icons_launcher.yaml'; -// } else { -// filePath = 'pubspec.yaml'; -// } - -// final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; - -// if (yamlMap['icons_launcher'] is! Map) { -// CliLogger.error( -// "Your $filePath file does not contain a 'icons_launcher' section."); -// exit(1); -// } - -// // yamlMap has the type YamlMap, which has several unwanted side effects -// return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); -// } - -// /// Convert yaml to map -// Map _yamlToMap(YamlMap yamlMap) { -// final Map map = {}; -// for (final MapEntry entry in yamlMap.entries) { -// if (entry.value is YamlList) { -// final list = []; -// for (final value in entry.value as YamlList) { -// if (value is String) { -// list.add(value); -// } -// } -// map[entry.key as String] = list; -// } else if (entry.value is YamlMap) { -// map[entry.key as String] = _yamlToMap(entry.value as YamlMap); -// } else { -// map[entry.key as String] = entry.value; -// } -// } -// return map; -// } - -// /// Validate config options -// void _checkConfig(Map config) { -// if (!hasPlatformConfig(config)) { -// CliLogger.error('Please add a `platform` target to your config file.'); -// exit(1); -// } - -// if (config.containsKey('image_adaptive_foreground') && -// !config.containsKey('image_adaptive_background') && -// !config.containsKey('color_adaptive_background')) { -// CliLogger.error( -// 'Please add an `image_adaptive_background` or `color_adaptive_background` to your config file.'); -// exit(1); -// } - -// if (!config.containsKey('image_adaptive_foreground') && -// (config.containsKey('image_adaptive_background') || -// config.containsKey('color_adaptive_background'))) { -// CliLogger.error( -// 'Please add an `image_adaptive_foreground` to your config file.'); -// exit(1); -// } - -// if (config.containsKey('image_adaptive_background') && -// config.containsKey('color_adaptive_background')) { -// CliLogger.error('Your `icons_launcher` section can not contain both a ' -// '`image_adaptive_background` and `color_adaptive_background`.'); -// exit(1); -// } - -// final imagePath = _checkImageExists(config: config, parameter: 'image_path'); -// final imagePathAndroid = -// _checkImageExists(config: config, parameter: 'image_path_android') ?? -// imagePath; -// final imagePathIos = -// _checkImageExists(config: config, parameter: 'image_path_ios') ?? -// imagePath; -// final imagePathMacos = -// _checkImageExists(config: config, parameter: 'image_path_macos') ?? -// imagePath; -// final imagePathWindows = -// _checkImageExists(config: config, parameter: 'image_path_windows') ?? -// imagePath; -// final imagePathLinux = -// _checkImageExists(config: config, parameter: 'image_path_linux') ?? -// imagePath; -// final imagePathWeb = -// _checkImageExists(config: config, parameter: 'image_path_web') ?? -// imagePath; - -// final List errors = []; -// if (isNeedingNewAndroidIcon(config) && imagePathAndroid == null) { -// errors.add('Could not find image path for Android'); -// } -// if (isNeedingNewIOSIcon(config) && imagePathIos == null) { -// errors.add('Could not find image path for iOS'); -// } -// if (isNeedingNewMacOSIcon(config) && imagePathMacos == null) { -// errors.add('Could not find image path for macOS'); -// } -// if (isNeedingNewWindowsIcon(config) && imagePathWindows == null) { -// errors.add('Could not find image path for Windows'); -// } -// if (isNeedingNewLinuxIcon(config) && imagePathLinux == null) { -// errors.add('Could not find image path for Linux'); -// } -// if (isNeedingNewWebIcon(config) && imagePathWeb == null) { -// errors.add('Could not find image path for Web'); -// } - -// if (errors.isNotEmpty) { -// errors.forEach(CliLogger.error); -// exit(1); -// } -// } - -// /// Create icons base on config -// void _createIconsByConfig(Map config) { -// final imagePath = _checkImageExists(config: config, parameter: 'image_path'); -// final imagePathAndroid = -// _checkImageExists(config: config, parameter: 'image_path_android') ?? -// imagePath; -// final imagePathIos = -// _checkImageExists(config: config, parameter: 'image_path_ios') ?? -// imagePath; -// final imagePathMacos = -// _checkImageExists(config: config, parameter: 'image_path_macos') ?? -// imagePath; -// final imagePathWindows = -// _checkImageExists(config: config, parameter: 'image_path_windows') ?? -// imagePath; -// final imagePathLinux = -// _checkImageExists(config: config, parameter: 'image_path_linux') ?? -// imagePath; -// final imagePathWeb = -// _checkImageExists(config: config, parameter: 'image_path_web') ?? -// imagePath; -// final faviconPathWeb = -// _checkImageExists(config: config, parameter: 'favicon_path_web') ?? -// imagePath; -// final adaptiveBgImage = -// _checkImageExists(config: config, parameter: 'image_adaptive_background'); -// final adaptiveFgImage = -// _checkImageExists(config: config, parameter: 'image_adaptive_foreground'); -// final adaptiveRoundImage = -// _checkImageExists(config: config, parameter: 'image_adaptive_round'); - -// //! Android -// if (isNeedingNewAndroidIcon(config) && imagePathAndroid != null) { -// _createAndroidIcons(imagePath: imagePathAndroid); -// } - -// String? adaptiveBg; -// if (config.containsKey('color_adaptive_background')) { -// final adaptiveBgColor = config['color_adaptive_background'].toString(); -// adaptiveBg = adaptiveBgColor; -// } else if (adaptiveBgImage != null) { -// adaptiveBg = adaptiveBgImage; -// } - -// //! Android Adaptive -// final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; -// if (hasAndroidAdaptiveConfig(config) && isAdaptiveIconExists) { -// final int minSdk = _minSdk(); -// if (minSdk == 0) { -// CliLogger.error( -// 'Can not find minSdk from android/app/build.gradle or android/local.properties', -// level: CliLoggerLevel.two); -// exit(1); -// } -// if (minSdk < 26 && imagePathAndroid == null) { -// CliLogger.error( -// 'Adaptive icon config found but no regular Android config. API 26 the regular Android config is required', -// level: CliLoggerLevel.two); -// exit(1); -// } -// _createAndroidAdaptiveIcon( -// background: adaptiveBg, -// foreground: adaptiveFgImage, -// round: adaptiveRoundImage, -// ); -// } - -// //! iOS -// if (isNeedingNewIOSIcon(config) && imagePathIos != null) { -// _createIosIcons(imagePath: imagePathIos); -// } - -// //! macOS -// if (isNeedingNewMacOSIcon(config) && imagePathMacos != null) { -// _createMacOSIcons(imagePath: imagePathMacos); -// } - -// //! Web -// if (isNeedingNewWebIcon(config)) { -// if (imagePathWeb != null) { -// _createWebIcons(imagePath: imagePathWeb); -// } -// if (faviconPathWeb != null) { -// _createWebFavicon(imagePath: faviconPathWeb); -// } -// } - -// //! Windows -// if (isNeedingNewWindowsIcon(config) && imagePathWindows != null) { -// _createWindowsIcons(imagePath: imagePathWindows); -// } - -// //! Linux -// if (isNeedingNewLinuxIcon(config) && imagePathLinux != null) { -// _createLinuxIcons(imagePath: imagePathLinux); -// } -// } - -// /// Check image exists -// String? _checkImageExists({ -// required Map config, -// required String parameter, -// }) { -// final String? image = config[parameter]?.toString(); -// if (image != null) { -// if (image.isNotEmpty && !File(image).existsSync()) { -// CliLogger.error( -// 'The file "$image" set as the parameter "$parameter" was not found.', -// ); -// exit(1); -// } - -// final imageExtension = p.extension(image).toLowerCase(); -// if (imageExtension != '.png' && -// imageExtension != '.jpg' && -// imageExtension != '.jpeg') { -// CliLogger.error( -// 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', -// ); -// exit(1); -// } -// } - -// return image == '' ? null : image; -// } +library icons_launcher_cli; + +import 'package:icons_launcher/utils/cli_logger.dart'; +import 'package:icons_launcher/utils/constants.dart'; +import 'package:icons_launcher/utils/icon.dart'; +import 'package:path/path.dart' as p; +import 'package:universal_io/io.dart'; +import 'package:yaml/yaml.dart'; +import 'utils/template.dart'; +import 'utils/utils.dart'; +part 'utils/flavor_helper.dart'; +part 'src/android.dart'; +part 'src/ios.dart'; +part 'src/macos.dart'; +part 'src/web.dart'; +part 'src/windows.dart'; +part 'src/linux.dart'; + +late _FlavorHelper _flavorHelper; + +/// Create launcher icons +void createLauncherIcons({String? path, String? flavor}) { + if (flavor != null) { + print('📱 Flavor $flavor detected! (Android, iOS)\n'); + } + _flavorHelper = _FlavorHelper(flavor); + final config = _getConfig(configFile: path); + _checkConfig(config); + _createIconsByConfig(config); +} + +/// Get config file +Map _getConfig({String? configFile}) { + String filePath; + if (configFile != null) { + if (File(configFile).existsSync()) { + filePath = configFile; + } else { + CliLogger.error('The config file `$configFile` was not found.'); + exit(1); + } + } else if (_flavorHelper.flavor != null) { + filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; + } else if (File('icons_launcher.yaml').existsSync()) { + filePath = 'icons_launcher.yaml'; + } else { + filePath = 'pubspec.yaml'; + } + + final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; + + if (yamlMap['icons_launcher'] is! Map) { + CliLogger.error( + "Your $filePath file does not contain a 'icons_launcher' section."); + exit(1); + } + + // yamlMap has the type YamlMap, which has several unwanted side effects + return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); +} + +/// Convert yaml to map +Map _yamlToMap(YamlMap yamlMap) { + final Map map = {}; + for (final MapEntry entry in yamlMap.entries) { + if (entry.value is YamlList) { + final list = []; + for (final value in entry.value as YamlList) { + if (value is String) { + list.add(value); + } + } + map[entry.key as String] = list; + } else if (entry.value is YamlMap) { + map[entry.key as String] = _yamlToMap(entry.value as YamlMap); + } else { + map[entry.key as String] = entry.value; + } + } + return map; +} + +/// Validate config options +void _checkConfig(Map config) { + if (!hasPlatformConfig(config)) { + CliLogger.error('Please add a `platforms` target to your config file.'); + exit(1); + } + final List errors = []; + final globalImagePath = + _checkImageExists(config: config, parameter: 'image_path'); + + final platforms = config['platforms'] as Map; + + // ANDROID + if (isNeedingNewAndroidIcon(platforms)) { + final androidConfig = platforms['android'] as Map; + final androidImagePath = + _checkImageExists(config: androidConfig, parameter: 'image_path') ?? + globalImagePath; + if (androidImagePath == null) { + errors.add('Please add a `image_path` for Android to your config file.'); + } + + if (androidConfig.containsKey('adaptive_foreground_image') && + !androidConfig.containsKey('adaptive_background_image') && + !androidConfig.containsKey('adaptive_background_color')) { + errors.add( + 'Please add an `adaptive_background_image` or `adaptive_background_color` for Android to your config file.'); + } + + if (!androidConfig.containsKey('adaptive_foreground_image') && + (androidConfig.containsKey('adaptive_background_image') || + androidConfig.containsKey('adaptive_background_color'))) { + errors.add( + 'Please add an `adaptive_foreground_image` for Android to your config file.'); + } + + if (androidConfig.containsKey('adaptive_background_image') && + androidConfig.containsKey('adaptive_background_color')) { + errors.add('Your Android platform can not contain both ' + '`adaptive_background_image` and `adaptive_background_color`.'); + } + } + + // IOS + if (isNeedingNewIosIcon(platforms)) { + final iosConfig = platforms['ios'] as Map; + final iosImagePath = + _checkImageExists(config: iosConfig, parameter: 'image_path') ?? + globalImagePath; + if (iosImagePath == null) { + errors.add('Please add a `image_path` for IOS to your config file.'); + } + } + + // MACOS + if (isNeedingNewMacOSIcon(platforms)) { + final macosConfig = platforms['macos'] as Map; + final macosImagePath = + _checkImageExists(config: macosConfig, parameter: 'image_path') ?? + globalImagePath; + if (macosImagePath == null) { + errors.add('Please add a `image_path` for MacOS to your config file.'); + } + } + + // WEB + if (isNeedingNewWebIcon(platforms)) { + final webConfig = platforms['web'] as Map; + final webImagePath = + _checkImageExists(config: webConfig, parameter: 'image_path') ?? + globalImagePath; + if (webImagePath == null) { + errors.add('Please add a `image_path` for Web to your config file.'); + } + } + + // WINDOWS + if (isNeedingNewWindowsIcon(platforms)) { + final windowsConfig = platforms['windows'] as Map; + final windowsImagePath = + _checkImageExists(config: windowsConfig, parameter: 'image_path') ?? + globalImagePath; + if (windowsImagePath == null) { + errors.add('Please add a `image_path` for Windows to your config file.'); + } + } + + // LINUX + if (isNeedingNewLinuxIcon(platforms)) { + final linuxConfig = platforms['linux'] as Map; + final linuxImagePath = + _checkImageExists(config: linuxConfig, parameter: 'image_path') ?? + globalImagePath; + if (linuxImagePath == null) { + errors.add('Please add a `image_path` for Linux to your config file.'); + } + } + + if (errors.isNotEmpty) { + errors.forEach(CliLogger.error); + exit(1); + } +} + +/// Create icons base on config +void _createIconsByConfig(Map config) { + // Global image path + final imagePath = _checkImageExists(config: config, parameter: 'image_path'); + final platforms = config['platforms'] as Map; + + String? imagePathAndroid = imagePath; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathAndroid = newImagePath; + } + if (imagePathAndroid == null) { + CliLogger.error('Could not find image path for Android'); + exit(1); + } + } + + String? imagePathIos = imagePath; + if (isNeedingNewIosIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['ios'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathIos = newImagePath; + } + if (imagePathIos == null) { + CliLogger.error('Could not find image path for iOS'); + exit(1); + } + } + + String? imagePathMacos = imagePath; + if (isNeedingNewMacOSIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['macos'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathMacos = newImagePath; + } + if (imagePathMacos == null) { + CliLogger.error('Could not find image path for macOS'); + exit(1); + } + } + + String? imagePathWindows = imagePath; + if (isNeedingNewWindowsIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['windows'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathWindows = newImagePath; + } + if (imagePathWindows == null) { + CliLogger.error('Could not find image path for Windows'); + exit(1); + } + } + + String? imagePathLinux = imagePath; + if (isNeedingNewLinuxIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['linux'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathLinux = newImagePath; + } + if (imagePathLinux == null) { + CliLogger.error('Could not find image path for Linux'); + exit(1); + } + } + + String? imagePathWeb = imagePath; + if (isNeedingNewWebIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['web'], + parameter: 'image_path', + ); + if (newImagePath != null) { + imagePathWeb = newImagePath; + } + if (imagePathWeb == null) { + CliLogger.error('Could not find image path for Web'); + exit(1); + } + } + + String? faviconPathWeb = imagePathWeb; + if (isNeedingNewWebIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['web'], + parameter: 'favicon_path', + ); + if (newImagePath != null) { + faviconPathWeb = newImagePath; + } + } + + String? adaptiveBgImage; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'adaptive_background_image', + ); + if (newImagePath != null) { + adaptiveBgImage = newImagePath; + } + } + + String? adaptiveFgImage; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'adaptive_foreground_image', + ); + if (newImagePath != null) { + adaptiveFgImage = newImagePath; + } + } + + String? adaptiveRoundImage; + if (isNeedingNewAndroidIcon(platforms)) { + final newImagePath = _checkImageExists( + config: platforms['android'], + parameter: 'adaptive_round_image', + ); + if (newImagePath != null) { + adaptiveRoundImage = newImagePath; + } + } + + //! Android + if (isNeedingNewAndroidIcon(platforms) && imagePathAndroid != null) { + _createAndroidIcons(imagePath: imagePathAndroid); + } + + String? adaptiveBg; + if (platforms['android'].containsKey('adaptive_background_color')) { + final adaptiveBgColor = + platforms['android']['adaptive_background_color'].toString(); + adaptiveBg = adaptiveBgColor; + } else if (adaptiveBgImage != null) { + adaptiveBg = adaptiveBgImage; + } + + //! Android Adaptive + final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; + if (hasAndroidAdaptiveConfig(platforms) && isAdaptiveIconExists) { + final int minSdk = _minSdk(); + if (minSdk == 0) { + CliLogger.error( + 'Can not find minSdk from android/app/build.gradle or android/local.properties', + level: CliLoggerLevel.two); + exit(1); + } + if (minSdk < 26 && imagePathAndroid == null) { + CliLogger.error( + 'Adaptive icon config found but no regular Android config. API 26 the regular Android config is required', + level: CliLoggerLevel.two); + exit(1); + } + _createAndroidAdaptiveIcon( + background: adaptiveBg, + foreground: adaptiveFgImage, + round: adaptiveRoundImage, + ); + } + + //! iOS + if (isNeedingNewIosIcon(platforms) && imagePathIos != null) { + _createIosIcons(imagePath: imagePathIos); + } + + //! macOS + if (isNeedingNewMacOSIcon(platforms) && imagePathMacos != null) { + _createMacOSIcons(imagePath: imagePathMacos); + } + + //! Web + if (isNeedingNewWebIcon(platforms)) { + if (imagePathWeb != null) { + _createWebIcons(imagePath: imagePathWeb); + } + if (faviconPathWeb != null) { + _createWebFavicon(imagePath: faviconPathWeb); + } + } + + //! Windows + if (isNeedingNewWindowsIcon(platforms) && imagePathWindows != null) { + _createWindowsIcons(imagePath: imagePathWindows); + } + + //! Linux + if (isNeedingNewLinuxIcon(platforms) && imagePathLinux != null) { + _createLinuxIcons(imagePath: imagePathLinux); + } +} + +/// Check image exists +String? _checkImageExists({ + required Map config, + required String parameter, +}) { + final String? image = config[parameter]?.toString(); + if (image != null) { + if (image.isNotEmpty && !File(image).existsSync()) { + CliLogger.error( + 'The file "$image" set as the parameter "$parameter" was not found.', + ); + exit(1); + } + + final imageExtension = p.extension(image).toLowerCase(); + if (imageExtension != '.png' && + imageExtension != '.jpg' && + imageExtension != '.jpeg') { + CliLogger.error( + 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', + ); + exit(1); + } + } + + return image == '' ? null : image; +} diff --git a/lib/cli_commands_test.dart b/lib/cli_commands_test.dart deleted file mode 100644 index 71dd551..0000000 --- a/lib/cli_commands_test.dart +++ /dev/null @@ -1,421 +0,0 @@ -library icons_launcher_cli; - -import 'package:icons_launcher/utils/cli_logger.dart'; -import 'package:icons_launcher/utils/constants.dart'; -import 'package:icons_launcher/utils/icon.dart'; -import 'package:path/path.dart' as p; -import 'package:universal_io/io.dart'; -import 'package:yaml/yaml.dart'; -import 'utils/template.dart'; -import 'utils/utils.dart'; -part 'utils/flavor_helper.dart'; -part 'src/android.dart'; -part 'src/ios.dart'; -part 'src/macos.dart'; -part 'src/web.dart'; -part 'src/windows.dart'; -part 'src/linux.dart'; - -late _FlavorHelper _flavorHelper; - -/// Create launcher icons -void createLauncherIcons({String? path, String? flavor}) { - if (flavor != null) { - print('📱 Flavor $flavor detected! (Android, iOS)\n'); - } - _flavorHelper = _FlavorHelper(flavor); - final config = _getConfig(configFile: path); - _checkConfig(config); - _createIconsByConfig(config); -} - -/// Get config file -Map _getConfig({String? configFile}) { - String filePath; - if (configFile != null) { - if (File(configFile).existsSync()) { - filePath = configFile; - } else { - CliLogger.error('The config file `$configFile` was not found.'); - exit(1); - } - } else if (_flavorHelper.flavor != null) { - filePath = 'icons_launcher-${_flavorHelper.flavor}.yaml'; - } else if (File('icons_launcher.yaml').existsSync()) { - filePath = 'icons_launcher.yaml'; - } else { - filePath = 'pubspec.yaml'; - } - - final Map yamlMap = loadYaml(File(filePath).readAsStringSync()) as Map; - - if (yamlMap['icons_launcher'] is! Map) { - CliLogger.error( - "Your $filePath file does not contain a 'icons_launcher' section."); - exit(1); - } - - // yamlMap has the type YamlMap, which has several unwanted side effects - return _yamlToMap(yamlMap['icons_launcher'] as YamlMap); -} - -/// Convert yaml to map -Map _yamlToMap(YamlMap yamlMap) { - final Map map = {}; - for (final MapEntry entry in yamlMap.entries) { - if (entry.value is YamlList) { - final list = []; - for (final value in entry.value as YamlList) { - if (value is String) { - list.add(value); - } - } - map[entry.key as String] = list; - } else if (entry.value is YamlMap) { - map[entry.key as String] = _yamlToMap(entry.value as YamlMap); - } else { - map[entry.key as String] = entry.value; - } - } - return map; -} - -/// Validate config options -void _checkConfig(Map config) { - if (!hasPlatformConfig(config)) { - CliLogger.error('Please add a `platforms` target to your config file.'); - exit(1); - } - final List errors = []; - final globalImagePath = - _checkImageExists(config: config, parameter: 'image_path'); - - final platforms = config['platforms'] as Map; - - // ANDROID - if (isNeedingNewAndroidIcon(platforms)) { - final androidConfig = platforms['android'] as Map; - final androidImagePath = - _checkImageExists(config: androidConfig, parameter: 'image_path') ?? - globalImagePath; - if (androidImagePath == null) { - errors.add('Please add a `image_path` for Android to your config file.'); - } - - if (androidConfig.containsKey('adaptive_foreground_image') && - !androidConfig.containsKey('adaptive_background_image') && - !androidConfig.containsKey('adaptive_background_color')) { - errors.add( - 'Please add an `adaptive_background_image` or `adaptive_background_color` for Android to your config file.'); - } - - if (!androidConfig.containsKey('adaptive_foreground_image') && - (androidConfig.containsKey('adaptive_background_image') || - androidConfig.containsKey('adaptive_background_color'))) { - errors.add( - 'Please add an `adaptive_foreground_image` for Android to your config file.'); - } - - if (androidConfig.containsKey('adaptive_background_image') && - androidConfig.containsKey('adaptive_background_color')) { - errors.add('Your Android platform can not contain both ' - '`adaptive_background_image` and `adaptive_background_color`.'); - } - } - - // IOS - if (isNeedingNewIosIcon(platforms)) { - final iosConfig = platforms['ios'] as Map; - final iosImagePath = - _checkImageExists(config: iosConfig, parameter: 'image_path') ?? - globalImagePath; - if (iosImagePath == null) { - errors.add('Please add a `image_path` for IOS to your config file.'); - } - } - - // MACOS - if (isNeedingNewMacOSIcon(platforms)) { - final macosConfig = platforms['macos'] as Map; - final macosImagePath = - _checkImageExists(config: macosConfig, parameter: 'image_path') ?? - globalImagePath; - if (macosImagePath == null) { - errors.add('Please add a `image_path` for MacOS to your config file.'); - } - } - - // WEB - if (isNeedingNewWebIcon(platforms)) { - final webConfig = platforms['web'] as Map; - final webImagePath = - _checkImageExists(config: webConfig, parameter: 'image_path') ?? - globalImagePath; - if (webImagePath == null) { - errors.add('Please add a `image_path` for Web to your config file.'); - } - } - - // WINDOWS - if (isNeedingNewWindowsIcon(platforms)) { - final windowsConfig = platforms['windows'] as Map; - final windowsImagePath = - _checkImageExists(config: windowsConfig, parameter: 'image_path') ?? - globalImagePath; - if (windowsImagePath == null) { - errors.add('Please add a `image_path` for Windows to your config file.'); - } - } - - // LINUX - if (isNeedingNewLinuxIcon(platforms)) { - final linuxConfig = platforms['linux'] as Map; - final linuxImagePath = - _checkImageExists(config: linuxConfig, parameter: 'image_path') ?? - globalImagePath; - if (linuxImagePath == null) { - errors.add('Please add a `image_path` for Linux to your config file.'); - } - } - - if (errors.isNotEmpty) { - errors.forEach(CliLogger.error); - exit(1); - } -} - -/// Create icons base on config -void _createIconsByConfig(Map config) { - // Global image path - final imagePath = _checkImageExists(config: config, parameter: 'image_path'); - final platforms = config['platforms'] as Map; - - String? imagePathAndroid = imagePath; - if (isNeedingNewAndroidIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['android'], - parameter: 'image_path', - ); - if (newImagePath != null) { - imagePathAndroid = newImagePath; - } - if (imagePathAndroid == null) { - CliLogger.error('Could not find image path for Android'); - exit(1); - } - } - - String? imagePathIos = imagePath; - if (isNeedingNewIosIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['ios'], - parameter: 'image_path', - ); - if (newImagePath != null) { - imagePathIos = newImagePath; - } - if (imagePathIos == null) { - CliLogger.error('Could not find image path for iOS'); - exit(1); - } - } - - String? imagePathMacos = imagePath; - if (isNeedingNewMacOSIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['macos'], - parameter: 'image_path', - ); - if (newImagePath != null) { - imagePathMacos = newImagePath; - } - if (imagePathMacos == null) { - CliLogger.error('Could not find image path for macOS'); - exit(1); - } - } - - String? imagePathWindows = imagePath; - if (isNeedingNewWindowsIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['windows'], - parameter: 'image_path', - ); - if (newImagePath != null) { - imagePathWindows = newImagePath; - } - if (imagePathWindows == null) { - CliLogger.error('Could not find image path for Windows'); - exit(1); - } - } - - String? imagePathLinux = imagePath; - if (isNeedingNewLinuxIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['linux'], - parameter: 'image_path', - ); - if (newImagePath != null) { - imagePathLinux = newImagePath; - } - if (imagePathLinux == null) { - CliLogger.error('Could not find image path for Linux'); - exit(1); - } - } - - String? imagePathWeb = imagePath; - if (isNeedingNewWebIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['web'], - parameter: 'image_path', - ); - if (newImagePath != null) { - imagePathWeb = newImagePath; - } - if (imagePathWeb == null) { - CliLogger.error('Could not find image path for Web'); - exit(1); - } - } - - String? faviconPathWeb = imagePathWeb; - if (isNeedingNewWebIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['web'], - parameter: 'favicon_path', - ); - if (newImagePath != null) { - faviconPathWeb = newImagePath; - } - } - - String? adaptiveBgImage; - if (isNeedingNewAndroidIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['android'], - parameter: 'adaptive_background_image', - ); - if (newImagePath != null) { - adaptiveBgImage = newImagePath; - } - } - - String? adaptiveFgImage; - if (isNeedingNewAndroidIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['android'], - parameter: 'adaptive_foreground_image', - ); - if (newImagePath != null) { - adaptiveFgImage = newImagePath; - } - } - - String? adaptiveRoundImage; - if (isNeedingNewAndroidIcon(platforms)) { - final newImagePath = _checkImageExists( - config: platforms['android'], - parameter: 'adaptive_round_image', - ); - if (newImagePath != null) { - adaptiveRoundImage = newImagePath; - } - } - - //! Android - if (isNeedingNewAndroidIcon(platforms) && imagePathAndroid != null) { - _createAndroidIcons(imagePath: imagePathAndroid); - } - - String? adaptiveBg; - if (platforms['android'].containsKey('adaptive_background_color')) { - final adaptiveBgColor = - platforms['android']['adaptive_background_color'].toString(); - adaptiveBg = adaptiveBgColor; - } else if (adaptiveBgImage != null) { - adaptiveBg = adaptiveBgImage; - } - - //! Android Adaptive - final isAdaptiveIconExists = adaptiveBg != null && adaptiveFgImage != null; - if (hasAndroidAdaptiveConfig(platforms) && isAdaptiveIconExists) { - final int minSdk = _minSdk(); - if (minSdk == 0) { - CliLogger.error( - 'Can not find minSdk from android/app/build.gradle or android/local.properties', - level: CliLoggerLevel.two); - exit(1); - } - if (minSdk < 26 && imagePathAndroid == null) { - CliLogger.error( - 'Adaptive icon config found but no regular Android config. API 26 the regular Android config is required', - level: CliLoggerLevel.two); - exit(1); - } - _createAndroidAdaptiveIcon( - background: adaptiveBg, - foreground: adaptiveFgImage, - round: adaptiveRoundImage, - ); - } - - //! iOS - if (isNeedingNewIosIcon(platforms) && imagePathIos != null) { - _createIosIcons(imagePath: imagePathIos); - } - - //! macOS - if (isNeedingNewMacOSIcon(platforms) && imagePathMacos != null) { - _createMacOSIcons(imagePath: imagePathMacos); - } - - //! Web - if (isNeedingNewWebIcon(platforms)) { - if (imagePathWeb != null) { - _createWebIcons(imagePath: imagePathWeb); - } - if (faviconPathWeb != null) { - _createWebFavicon(imagePath: faviconPathWeb); - } - } - - //! Windows - if (isNeedingNewWindowsIcon(platforms) && imagePathWindows != null) { - _createWindowsIcons(imagePath: imagePathWindows); - } - - //! Linux - if (isNeedingNewLinuxIcon(platforms) && imagePathLinux != null) { - _createLinuxIcons(imagePath: imagePathLinux); - } -} - -/// Check image exists -String? _checkImageExists({ - required Map config, - required String parameter, -}) { - final String? image = config[parameter]?.toString(); - if (image != null) { - if (image.isNotEmpty && !File(image).existsSync()) { - CliLogger.error( - 'The file "$image" set as the parameter "$parameter" was not found.', - ); - exit(1); - } - - final imageExtension = p.extension(image).toLowerCase(); - if (imageExtension != '.png' && - imageExtension != '.jpg' && - imageExtension != '.jpeg') { - CliLogger.error( - 'Unsupported file format: $image Your image must be a JPG, JPEG or PNG file.', - ); - exit(1); - } - } - - return image == '' ? null : image; -} diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 005038f..e620d0f 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -5,7 +5,7 @@ const String START_MESSAGE = '''\n ╔════════════════════════════════════════════════════╗ ║ ✨✨ ICONS LAUNCHER ✨✨ ║ ╠════════════════════════════════════════════════════╣ -║ Version: $packageVersion ║ +║ Version: $packageVersion ║ ╚════════════════════════════════════════════════════╝ \n'''; From e886b00e3e8625a01e467ecc694c4cf0359905af Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Mon, 25 Jul 2022 09:19:23 +0700 Subject: [PATCH 18/21] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c6ab82b..bdf8865 100644 --- a/README.md +++ b/README.md @@ -193,7 +193,7 @@ icons_launcher: android: enable: true image_path: 'assets/ic_logo_border.png' - # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + # adaptive_background_color: '#ffffff' adaptive_background_image: 'assets/ic_background.png' adaptive_foreground_image: 'assets/ic_foreground.png' adaptive_round_image: 'assets/ic_logo_round.png' @@ -224,7 +224,7 @@ icons_launcher: android: enable: true image_path: 'assets/ic_logo_border.png' - # adaptive_background_color: '#ffffff' # only available for Android 8.0 devices and above + # adaptive_background_color: '#ffffff' adaptive_background_image: 'assets/ic_background.png' adaptive_foreground_image: 'assets/ic_foreground.png' adaptive_round_image: 'assets/ic_logo_round.png' From 0b7eb463d6b67e537fe0f33f92febc4d84bbe923 Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Mon, 25 Jul 2022 09:41:06 +0700 Subject: [PATCH 19/21] update build version --- .github/workflows/format-analyze-test.yml | 2 +- lib/src/version.dart | 2 +- pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/format-analyze-test.yml b/.github/workflows/format-analyze-test.yml index 1ebb341..95c594b 100644 --- a/.github/workflows/format-analyze-test.yml +++ b/.github/workflows/format-analyze-test.yml @@ -24,7 +24,7 @@ jobs: run: dart pub get - name: Generate package version - run: dart run build_runner build + run: dart run build_runner build --delete-conflicting-outputs - name: Verify formatting run: dart format --output=none --set-exit-if-changed . diff --git a/lib/src/version.dart b/lib/src/version.dart index aceca24..0e58df3 100644 --- a/lib/src/version.dart +++ b/lib/src/version.dart @@ -1,2 +1,2 @@ -/// Generated code. Do not modify. +// Generated code. Do not modify. const packageVersion = '2.0.0'; diff --git a/pubspec.yaml b/pubspec.yaml index 35bfb24..455758d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,5 +17,5 @@ environment: dev_dependencies: build_runner: ^2.2.0 - build_version: ^2.1.1 # dart run build_runner build + build_version: ^2.1.1 # dart run build_runner build --delete-conflicting-outputs test: ^1.21.4 From 13f35cc771e9d83023d2ef3a4dbf1a9fdee10cba Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Mon, 25 Jul 2022 09:44:51 +0700 Subject: [PATCH 20/21] format --- example/flavor_app/lib/app.dart | 24 ++++++++++++------------ example/flavor_app/lib/flavors.dart | 1 - 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/example/flavor_app/lib/app.dart b/example/flavor_app/lib/app.dart index 9c405a6..5461412 100644 --- a/example/flavor_app/lib/app.dart +++ b/example/flavor_app/lib/app.dart @@ -25,17 +25,17 @@ class App extends StatelessWidget { }) => show ? Banner( - child: child, - location: BannerLocation.topStart, - message: F.name, - color: Colors.green.withOpacity(0.6), - textStyle: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 12.0, - letterSpacing: 1.0), - textDirection: TextDirection.ltr, - ) + child: child, + location: BannerLocation.topStart, + message: F.name, + color: Colors.green.withOpacity(0.6), + textStyle: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 12.0, + letterSpacing: 1.0), + textDirection: TextDirection.ltr, + ) : Container( - child: child, - ); + child: child, + ); } diff --git a/example/flavor_app/lib/flavors.dart b/example/flavor_app/lib/flavors.dart index 3eb5e4e..21557ae 100644 --- a/example/flavor_app/lib/flavors.dart +++ b/example/flavor_app/lib/flavors.dart @@ -18,5 +18,4 @@ class F { return 'title'; } } - } From 75bd748fddcd75673eafa61db762fca7f3cef235 Mon Sep 17 00:00:00 2001 From: Long Kimhak Date: Mon, 25 Jul 2022 10:00:03 +0700 Subject: [PATCH 21/21] fixed lint --- analysis_options.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/analysis_options.yaml b/analysis_options.yaml index d2d58ae..0d51954 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -39,6 +39,7 @@ analyzer: - 'lib/i18n/stock_messages_*.dart' - 'lib/src/http/**' - 'example/**' + - lib/src/version.dart linter: rules: