From ca3f1469e0656c85bf5b72318fee90aeb6075b85 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 16 Jul 2020 16:07:34 -0700 Subject: [PATCH] Added imitation game benchmarks updated the description (yuqian feedback) updated the tree in the readme file to show where project files should be updated header name removed linter errors and added comment added comment removed platforms we aren't using removed widget test removed autogenerated headers added flutter headers --- packages/imitation_game/README.md | 93 +++ packages/imitation_game/imitation_game.dart | 170 ++++++ .../imitation_game/tests/smiley/README.md | 11 + .../tests/smiley/flutter/run_ios.sh | 4 + .../tests/smiley/flutter/smiley/.gitignore | 44 ++ .../tests/smiley/flutter/smiley/.metadata | 10 + .../tests/smiley/flutter/smiley/README.md | 16 + .../smiley/flutter/smiley/android/.gitignore | 11 + .../flutter/smiley/android/app/build.gradle | 63 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 47 ++ .../kotlin/com/example/smiley/MainActivity.kt | 6 + .../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/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../flutter/smiley/android/build.gradle | 31 + .../flutter/smiley/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../flutter/smiley/android/settings.gradle | 11 + .../tests/smiley/flutter/smiley/assets/ip.txt | 1 + .../smiley/flutter/smiley/images/smiley.png | Bin 0 -> 30739 bytes .../smiley/flutter/smiley/ios/.gitignore | 32 + .../smiley/ios/Flutter/AppFrameworkInfo.plist | 26 + .../flutter/smiley/ios/Flutter/Debug.xcconfig | 2 + .../smiley/ios/Flutter/Release.xcconfig | 2 + .../tests/smiley/flutter/smiley/ios/Podfile | 87 +++ .../ios/Runner.xcodeproj/project.pbxproj | 576 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../smiley/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 + .../flutter/smiley/ios/Runner/Info.plist | 45 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../tests/smiley/flutter/smiley/lib/main.dart | 112 ++++ .../tests/smiley/flutter/smiley/pubspec.yaml | 78 +++ .../tests/smiley/uikit/run_ios.sh | 8 + .../smiley/uikit/smiley/exportOptions.plist | 18 + .../smiley/smiley.xcodeproj/project.pbxproj | 350 +++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../smiley/uikit/smiley/smiley/AppDelegate.h | 11 + .../smiley/uikit/smiley/smiley/AppDelegate.m | 37 ++ .../AppIcon.appiconset/Contents.json | 98 +++ .../smiley/Assets.xcassets/Contents.json | 6 + .../smiley.imageset/Contents.json | 21 + .../smiley.imageset/smiley.png | Bin 0 -> 30739 bytes .../smiley/Base.lproj/LaunchScreen.storyboard | 25 + .../smiley/smiley/Base.lproj/Main.storyboard | 42 ++ .../smiley/uikit/smiley/smiley/Info.plist | 64 ++ .../uikit/smiley/smiley/SceneDelegate.h | 12 + .../uikit/smiley/smiley/SceneDelegate.m | 54 ++ .../uikit/smiley/smiley/ViewController.h | 11 + .../uikit/smiley/smiley/ViewController.m | 123 ++++ .../tests/smiley/uikit/smiley/smiley/ip.txt | 1 + .../tests/smiley/uikit/smiley/smiley/main.m | 15 + 87 files changed, 2810 insertions(+) create mode 100644 packages/imitation_game/README.md create mode 100644 packages/imitation_game/imitation_game.dart create mode 100644 packages/imitation_game/tests/smiley/README.md create mode 100755 packages/imitation_game/tests/smiley/flutter/run_ios.sh create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/.gitignore create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/.metadata create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/README.md create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/.gitignore create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/build.gradle create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/AndroidManifest.xml create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/kotlin/com/example/smiley/MainActivity.kt create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/values/styles.xml create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/build.gradle create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/gradle.properties create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/android/settings.gradle create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/assets/ip.txt create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/images/smiley.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/.gitignore create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Debug.xcconfig create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Release.xcconfig create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Podfile create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/AppDelegate.swift create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Info.plist create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/lib/main.dart create mode 100644 packages/imitation_game/tests/smiley/flutter/smiley/pubspec.yaml create mode 100755 packages/imitation_game/tests/smiley/uikit/run_ios.sh create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/exportOptions.plist create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.pbxproj create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.h create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.m create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/Contents.json create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/Contents.json create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/smiley.png create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/Main.storyboard create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/Info.plist create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.h create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.m create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.h create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.m create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/ip.txt create mode 100644 packages/imitation_game/tests/smiley/uikit/smiley/smiley/main.m diff --git a/packages/imitation_game/README.md b/packages/imitation_game/README.md new file mode 100644 index 000000000000..cbb19a43684d --- /dev/null +++ b/packages/imitation_game/README.md @@ -0,0 +1,93 @@ +# Imitation Game + +## Description + +`imitation_game` is a platform for performing automated tests to compare the +performance of different UI frameworks. For example, how much memory does the +same app written in Flutter and UIKit take? + +## Running all the tests + +You need a mobile device plugged into your computer and setup for development. +The mobile device and the computer need to be on the same network, one that +allows communication between computers since that's how the mobile phone will +report its results to the computer. + +```sh +dart imitation_game.dart +``` + +## Dependencies + +In order to run the tests you will need the union of all the platforms being +tested. As new tests are added please add to this list: + +### iOS + +- Flutter +- Xcode +- [ios_deploy](https://github.com/ios-control/ios-deploy) - used to launch apps + on the attached iOS device. + +## Example File Layout + +```text +./ +├─ imitation_game.dart +└─ tests/ + ├─ smiley/ + │ ├─ README.md + │ ├─ flutter/ + │ │ ├─ run_ios.sh + │ │ └─ + │ └─ uikit/ + │ ├─ run_ios.sh + │ └─ + └─ memory/ + ├─ README.md + ├─ flutter/ + │ ├─ run_ios.sh + │ └─ + └─ uikit/ + ├─ run_ios.sh + └─ +``` + +Here there are 2 different tests with 2 different platform implementations. The +tests are named `smiley` and `memory`, they are both implemented on the +platforms `flutter` and `uikit`. + +### Adding a test + +Tests should comprise of implementations on one or more platform. The directory +for the test should be added to `./tests`. Inside that directory there should +be a directory of implementations and a `README.md` file that explains the test. + +### Adding an implementation to a test + +An implementation has to follow these rules: + +- It needs to perform the same operations as the other implementations and + follow the description in the test's `README.md`. +- It needs to contain a `run_ios.sh` script that will build and launch the test + on the connected device. +- It should contain a file named `ip.txt` which will be overwritten by + `imitation_game.dart` with the ip address and port that should be used to + report results to. +- It needs to report its results to the ip and port in the `ip.txt` via an HTTP + POST of JSON data. + +## Data format for results + +```json +{ + "test": "name_of_test", + "platform": "name_of_platform", + "results": { + "some_result_name": 1.23, + "some_result_name2": 4.56, + } +} +``` + +A single test run can report multiple numbers. diff --git a/packages/imitation_game/imitation_game.dart b/packages/imitation_game/imitation_game.dart new file mode 100644 index 000000000000..3b0804975d5b --- /dev/null +++ b/packages/imitation_game/imitation_game.dart @@ -0,0 +1,170 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +const int _port = 4040; + +Future _findIpAddress() async { + String result; + final List interfaces = await NetworkInterface.list(); + for (NetworkInterface interface in interfaces) { + for (InternetAddress address in interface.addresses) { + if (address.type == InternetAddressType.IPv4) { + // TODO(gaaclarke): Implment having multiple addresses. + assert(result == null); + result = address.address; + } + } + } + return result; +} + +typedef FileFilter = bool Function(FileSystemEntity); +Future> findFiles(Directory dir, {FileFilter where}) { + final List files = []; + final Completer> completer = + Completer>(); + final Stream lister = dir.list(recursive: true); + lister.listen((FileSystemEntity file) { + if (where == null || where(file)) { + files.add(file); + } + }, onDone: () => completer.complete(files)); + return completer.future; +} + +class _Script { + _Script({this.path}); + String path; +} + +class _ScriptRunner { + _ScriptRunner(this._scriptPaths); + + final List _scriptPaths; + Process _currentProcess; + StreamSubscription _stdoutSubscription; + StreamSubscription _stderrSubscription; + + Future<_Script> runNext() async { + if (_currentProcess != null) { + _stdoutSubscription.cancel(); + _stderrSubscription.cancel(); + _currentProcess.kill(); + _currentProcess = null; + } + + if (_scriptPaths.isEmpty) { + return null; + } else { + final String path = _scriptPaths.last; + print('running: $path'); + _scriptPaths.removeLast(); + _currentProcess = await Process.start('sh', [path]); + // TODO(gaaclarke): Implement a timeout. + _stdoutSubscription = + _currentProcess.stdout.transform(utf8.decoder).listen((String data) { + print(data); + }); + _stderrSubscription = + _currentProcess.stderr.transform(utf8.decoder).listen((String data) { + print(data); + }); + return _Script(path: path); + } + } +} + +class _ImitationGame { + final Map results = {}; + _ScriptRunner _scriptRunner; + _Script _currentScript; + + Future start(List iosScripts) { + _scriptRunner = _ScriptRunner(iosScripts); + return _runNext(); + } + + Future handleResult(Map data) { + final String test = data['test']; + final String platform = data['platform']; + if (!results.containsKey(test)) { + results[test] = {}; + } + if (!results[test].containsKey(platform)) { + results[test][platform] = {}; + } + data['results'].forEach((String k, dynamic v) { + results[test][platform][k] = v as double; + }); + return _runNext(); + } + + Future handleTimeout() { + return _runNext(); + } + + Future _runNext() async { + _currentScript = await _scriptRunner.runNext(); + return _currentScript != null; + } +} + +Future main() async { + final HttpServer server = await HttpServer.bind( + InternetAddress.anyIPv4, + _port, + ); + final String ipaddress = await _findIpAddress(); + print('Listening on $ipaddress:${server.port}'); + + for (FileSystemEntity entity in await findFiles(Directory.current, + where: (FileSystemEntity f) => f.path.endsWith('ip.txt'))) { + final File file = File(entity.path); + file.writeAsStringSync('$ipaddress:${server.port}'); + } + + final List iosScripts = (await findFiles(Directory.current, + where: (FileSystemEntity f) => f.path.endsWith('run_ios.sh'))) + .map((FileSystemEntity e) => e.path) + .toList(); + + if (iosScripts.isEmpty) { + return; + } + + final _ImitationGame game = _ImitationGame(); + bool keepRunning = await game.start(iosScripts); + + while (keepRunning) { + try { + final Stream timeoutServer = server.timeout( + const Duration(minutes: 5), onTimeout: (EventSink sink) { + print('TIMEOUT!'); + throw TimeoutException('timeout'); + }); + await for (HttpRequest request in timeoutServer) { + print('got request: ${request.method}'); + if (request.method == 'POST') { + final String content = await utf8.decoder.bind(request).join(); + final Map data = + jsonDecode(content) as Map; + print('$data'); + keepRunning = await game.handleResult(data); + if (!keepRunning) { + break; + } + } else { + request.response.write('use post'); + } + await request.response.close(); + } + } on TimeoutException catch (_) { + keepRunning = await game.handleTimeout(); + } + } + const JsonEncoder encoder = JsonEncoder.withIndent(' '); + final String jsonResults = encoder.convert(game.results); + print('$jsonResults'); + await server.close(force: true); +} diff --git a/packages/imitation_game/tests/smiley/README.md b/packages/imitation_game/tests/smiley/README.md new file mode 100644 index 000000000000..db2321c19f64 --- /dev/null +++ b/packages/imitation_game/tests/smiley/README.md @@ -0,0 +1,11 @@ +# Smiley + +This test is an app that just draws one large image to the screen `smiley.png`, +stretched to fit inside the screen. + +The following things are measured: + +- 'startupTime' - The time between the start of the process and the rendering of + the image to the screen. +- 'memory' - The amount of system memory the app is using after having rendered + the image to the screen. diff --git a/packages/imitation_game/tests/smiley/flutter/run_ios.sh b/packages/imitation_game/tests/smiley/flutter/run_ios.sh new file mode 100755 index 000000000000..decb485de54c --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/run_ios.sh @@ -0,0 +1,4 @@ +#!/bin/sh +cd $( dirname "${BASH_SOURCE[0]}" ) +cd smiley +flutter run --release diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/.gitignore b/packages/imitation_game/tests/smiley/flutter/smiley/.gitignore new file mode 100644 index 000000000000..f3c205341e7d --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# 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 + +# Exceptions to above rules. +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/.metadata b/packages/imitation_game/tests/smiley/flutter/smiley/.metadata new file mode 100644 index 000000000000..3f3cbf60a08f --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 227990ab308574184e06944710bae000330412d0 + channel: unknown + +project_type: app diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/README.md b/packages/imitation_game/tests/smiley/flutter/smiley/README.md new file mode 100644 index 000000000000..683f68d8b56c --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/README.md @@ -0,0 +1,16 @@ +# smiley + +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://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/.gitignore b/packages/imitation_game/tests/smiley/flutter/smiley/android/.gitignore new file mode 100644 index 000000000000..0a741cb43d66 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/.gitignore @@ -0,0 +1,11 @@ +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 diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/app/build.gradle b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/build.gradle new file mode 100644 index 000000000000..01823adc6439 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/build.gradle @@ -0,0 +1,63 @@ +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 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.smiley" + minSdkVersion 16 + targetSdkVersion 28 + 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/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/debug/AndroidManifest.xml b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000000..81779326ddf4 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/AndroidManifest.xml b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..d377ac5221f5 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/kotlin/com/example/smiley/MainActivity.kt b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/kotlin/com/example/smiley/MainActivity.kt new file mode 100644 index 000000000000..ccd14efb0159 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/kotlin/com/example/smiley/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.smiley + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/drawable/launch_background.xml b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000000..304732f88420 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/values/styles.xml b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000000..1f83a33fd4f2 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/profile/AndroidManifest.xml b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000000..81779326ddf4 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/build.gradle b/packages/imitation_game/tests/smiley/flutter/smiley/android/build.gradle new file mode 100644 index 000000000000..3100ad2d5553 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/gradle.properties b/packages/imitation_game/tests/smiley/flutter/smiley/android/gradle.properties new file mode 100644 index 000000000000..38c8d4544ff1 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/gradle/wrapper/gradle-wrapper.properties b/packages/imitation_game/tests/smiley/flutter/smiley/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..296b146b7318 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/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-5.6.2-all.zip diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/android/settings.gradle b/packages/imitation_game/tests/smiley/flutter/smiley/android/settings.gradle new file mode 100644 index 000000000000..44e62bcf06ae --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/assets/ip.txt b/packages/imitation_game/tests/smiley/flutter/smiley/assets/ip.txt new file mode 100644 index 000000000000..d331e21174a0 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/assets/ip.txt @@ -0,0 +1 @@ +192.168.0.18:4040 \ No newline at end of file diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/images/smiley.png b/packages/imitation_game/tests/smiley/flutter/smiley/images/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..441b66ae89226d19d2cf9b0a0e2ea0b59d90ec30 GIT binary patch literal 30739 zcmeFYF$Q5 z+1=k+@B8z-e*S=4UjTE>nKNh3)R{Bqle($`)n&%Z5Cl=doY12h&M$ZXa`lm)w z&-#%PNAPKi^p9^nxa#Y2PaE8WY^=p>T5sjlc)HZ*8ag=vPX6!T|4HEgB=G-F0*#l= zw~h}U7tF_Wai_Po;ve1D5{>WIWRl8zQ6IZeT;f+-TJP_$D%WF=T0Waz)&JYzIgj5e zDLl06!spBH59kWx_rI~PpD__ZP;l#;z|}#|=Cl_~9}H^r)%eCMOq`}mD-m^>$nUH} zx^1cjx(Ihap4DgdLzun42lYb>5qjVgUykkoTMPWqY(uTMLCcLKa%G2@;LXFtTO31v_Fr3yJh)uzvnJaU;HIlux&VL;Q3H( zaa?5RD9haK!|Az~xFlD(GhCG(-qL6x=pL?gd>$V#JwS1UHVo*S`Yd(L<>Pq`5;29E zvwnV>*_z^H$|of?rS79U-&1Fz;^jCcROLRX#QX&ir*t%D8yluJwySt)o>HHKjKwPK zkDS>1Svdw7y$zDV?JMy08Wy5N@Xq$DlRVCJmdmYNJl3KnEUr8wmtG7^Xe5%SXSgDH^hniR24Yqc^(d@?YYpk6U^% zS}xm?rp^y=5ruvhG?7tQToj6$VLQR_ACI6(r~9+$U(+@FHAqp`%u~GyoiBD*oWJy@ zb?JkNAQ*C^?Hz8;F{E{Va`(%*HyVxVajEmhW01%7bR~=nr#g~SQIq<}%oGDxi=4pa z)^Ar6KY>vp<-L(9-$Nx@w#Rf;A{;huPY3kWBBU)}S1~tAb_J-(>fSKzS#nZ=SCRUh* zW1f}q1k`&G5&hD?-;#Yb&0Hs%=iVIKcSyu~dMh8aJ%*s0Y!tY{a1(=VRWJLkG!qpR zo&WFKYK-cU!p>iXQD)anKNXMOgrMHr6gbC#d6wlRPTL_2QSFXW2%h#$gTd+K@z=)X zc{p4zJ2Qd77i`%N)18q=t-|!@yN0W-5B4ZR1??^v>~e%5g_FzdoCR)-4L^JY)|H3) z8yWh!RiZ60X5nwu3aWegC?j_BsF>+AchsMW$+6}ZSV_KLAIf&H)wLMjJAm53xBpUX zx4I%Koym}LRqP=zqg3l35L3(EakQNt7?dbjG#4MQ&myX9^_+LvX$w=l2jJdzec7E9M@gf90GuZJiFBmu$ zGM(4O`3W1^6S1!{V9(jq$Q>~ncQ_$v!Ku%5(lUKYaj#pf8pUx~^(-PI2=jEKVrhzK zUzF8~ofHbzF~*>~8W?GgT9=!?N1hmTJ~zOgGM>E|o@6+Tfn z6|V1j^Q>Q;79EHGguI$GstL1Z^d*AKs_3wjESgNH_MyDhBR*yJa9Pwx|IeLv8+Q=cJ20XVa;`B$kWTqZis;tjuDj8P);3JtU$@Z9u#-B5C_X#M^1sxS_qYK)Pu*dRJU$vKxikN?YW$_FhJI+ubt6XfFU`lgB|msbAn0BHaSIP_&(k&W zSlW4y9|qsf0lu!>65qP6UPuSTtug9TCOQCSU?t-uO=~tU3qgBx45-8L zUNwY{%Y5THQ$l)88qia>$GXd*jI~Bb+5>0GQyg|thnKT6Wo)Hs)z^J8d8i=hPVEjd zjL{JJa~b_<%~W}q!!Em>75G~5A3RLk?IciRk-hYisR}Y|NTrj*?(bS?mxD7S&{{WP zV#w_I+f2=o@W>Ok>s%?*LYKZ}e8GJ+J8f=I6p`SC4ST->D6i;np`}!FwOF<=rZXwa zem)rANHf7}&3Et=>H(de`i07Kk8aKAKf@xvh9=wBeW&Ffy`U=qL8n&w90@qg8CHsO z5b?Dmkho#Ev?$O)R|tZVHR~lt?@2Goh^jJwOORF4*b24qbyKMSzBzZ99BP!I!|jgT zj<$kvJ5Gl4lUL0VL0|o6QH{U#5Q+mYQ?6cs?tW^`;16ndL5W?eLq7#z1CA4&jRR+p zn_kxf(d!yl(9!pEMFeAuTAlP&m&AA7WyL=gnqUop^%W8p5@Nt$PGKMxPfKRIC;f7>GFNc;2Nw@mC zCRQDMuTw+}7d8An_%ZyTo0bkr)uzK4Gu4-wv~_=^Dd$qrNTrZ|0$E>1~^QbfG3HpS>5 zD&O{2#O6JK8n3S9a2g)!M1Q`N&2IO$HmgBkaw>)aGK+e*7S|_o9L-*?*O9

cz!U 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 bK2@apewVKbMcECw36Q?-wM+RIt)KoM-mob7 literal 0 HcmV?d00001 diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/.gitignore b/packages/imitation_game/tests/smiley/flutter/smiley/ios/.gitignore new file mode 100644 index 000000000000..e96ef602b8d1 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/.gitignore @@ -0,0 +1,32 @@ +*.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/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/AppFrameworkInfo.plist b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000000..6b4c0f78a785 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Debug.xcconfig b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000000..e8efba114687 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Release.xcconfig b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000000..399e9340e6f6 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Podfile b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Podfile new file mode 100644 index 000000000000..6697f0a539e2 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Podfile @@ -0,0 +1,87 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + generated_key_values = {} + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values +end + +target 'Runner' do + use_frameworks! + use_modular_headers! + + # Flutter Pod + + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end +end diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.pbxproj b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000000..24067aa41683 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,576 @@ +// !$*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 */; }; + E871A0843F25069A572B8976 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ED58CA389D243E9D25A3BCF /* Pods_Runner.framework */; }; +/* 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 = ""; }; + 1653BF8CF7D70B08243DF6A2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1A3DE4B0B684E0679C64523E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 6ED58CA389D243E9D25A3BCF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 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 = ""; }; + C4C62015C2EE2797ABF091BA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E871A0843F25069A572B8976 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2BE839568BFB70043910F5F6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6ED58CA389D243E9D25A3BCF /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8E5CD0CA74B3FF8D250A4283 /* Pods */ = { + isa = PBXGroup; + children = ( + 1A3DE4B0B684E0679C64523E /* Pods-Runner.debug.xcconfig */, + C4C62015C2EE2797ABF091BA /* Pods-Runner.release.xcconfig */, + 1653BF8CF7D70B08243DF6A2 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 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 */, + 8E5CD0CA74B3FF8D250A4283 /* Pods */, + 2BE839568BFB70043910F5F6 /* Frameworks */, + ); + 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 = ( + CAB15821656924BCC3058D97 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + DBD650350FBE96B42D816E77 /* [CP] Embed Pods Frameworks */, + ); + 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 = 1020; + 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"; + }; + CAB15821656924BCC3058D97 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + DBD650350FBE96B42D816E77 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* 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 = 8.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)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.smiley; + 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 = 8.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 = 8.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)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.smiley; + 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)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.smiley; + 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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..1d526a16ed0f --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000000..f9b0d7c5ea15 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000000..a28140cfdb3f --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..21a3cc14c74e --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000000..f9b0d7c5ea15 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/AppDelegate.swift b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000000..70693e4a8c12 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000000..d36b1fab2d9d --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000000..89c2725b70f1 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/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/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000000..f2e259c7c939 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/Main.storyboard b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000000..f3c28516fb38 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Info.plist b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Info.plist new file mode 100644 index 000000000000..9907fcda4d9c --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + smiley + 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 + + + diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Runner-Bridging-Header.h b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000000..308a2a560b42 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/lib/main.dart b/packages/imitation_game/tests/smiley/flutter/smiley/lib/main.dart new file mode 100644 index 000000000000..546aedb6fe85 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/lib/main.dart @@ -0,0 +1,112 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:convert' show jsonEncode; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:http/http.dart' as http; +import 'package:poll_ios_stats/poll_ios_stats.dart'; + +String _hostIp; + +Future _getHostIp() async { + return await rootBundle.loadString('assets/ip.txt'); +} + +Future _sendResult(double result) async { + assert(_hostIp != null); + print('sending result $result...'); + final http.Response response = await http.post( + 'http://$_hostIp', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode({ + 'test': 'smiley', + 'platform': 'flutter', + 'results': { + 'startupTime': result + }, + }), + ); + if (response.statusCode != 200) { + print('error when posting results:${response.statusCode}'); + } +} + +void main() { + runApp(MyApp()); + // Hide status bar. + SystemChrome.setEnabledSystemUIOverlays([]); + _getHostIp().then((String ip) async { + _hostIp = ip; + }); +} + +/// Top level Material App. +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + home: const MyHomePage(), + ); + } +} + +/// `Scaffold` that has the image widget. +class MyHomePage extends StatefulWidget { + /// Standard constructor for a StatefulWidget. + const MyHomePage({Key key}) : super(key: key); + + @override + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + final AssetImage _image = const AssetImage('images/smiley.png'); + bool _loading = true; + + @override + void initState() { + _image + .resolve(const ImageConfiguration()) + .addListener(ImageStreamListener((_, __) { + if (mounted) { + setState(() { + _loading = false; + // This should get called when the image has actually been drawn to the screen. + WidgetsBinding.instance.addPostFrameCallback((_) async { + final DateTime renderTime = DateTime.now(); + final PollIosStats _poller = PollIosStats(); + final StartupTime startupTime = await _poller.pollStartupTime(); + final Duration diff = renderTime.difference( + DateTime.fromMicrosecondsSinceEpoch(startupTime.startupTime)); + _sendResult(diff.inMicroseconds / 1000000.0); + }); + }); + } + })); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _loading ? Container() : Image(image: _image), + ], + ), + ), + ); + } +} diff --git a/packages/imitation_game/tests/smiley/flutter/smiley/pubspec.yaml b/packages/imitation_game/tests/smiley/flutter/smiley/pubspec.yaml new file mode 100644 index 000000000000..6d8e6cc49748 --- /dev/null +++ b/packages/imitation_game/tests/smiley/flutter/smiley/pubspec.yaml @@ -0,0 +1,78 @@ +name: smiley +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `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.7.0 <3.0.0" + +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: ^0.1.3 + http: ^0.12.2 + poll_ios_stats: ^0.0.1 + +dev_dependencies: + flutter_test: + sdk: flutter + +# 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. +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/smiley.png + - assets/ip.txt + + # 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/packages/imitation_game/tests/smiley/uikit/run_ios.sh b/packages/imitation_game/tests/smiley/uikit/run_ios.sh new file mode 100755 index 000000000000..794db7247a76 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/run_ios.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# TODO: What about customizing the DEVELOPMENT_TEAM? +set -e +cd $( dirname "${BASH_SOURCE[0]}" ) +cd smiley +xcodebuild -scheme smiley -configuration Release -project smiley.xcodeproj -archivePath ./smiley.xcarchive archive +xcodebuild -exportArchive -archivePath ./smiley.xcarchive/ -exportPath . -exportOptionsPlist exportOptions.plist -allowProvisioningUpdates +ios-deploy --justlaunch --bundle ./smiley.xcarchive/Products/Applications/smiley.app diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/exportOptions.plist b/packages/imitation_game/tests/smiley/uikit/smiley/exportOptions.plist new file mode 100644 index 000000000000..687b403b2208 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/exportOptions.plist @@ -0,0 +1,18 @@ + + + + + compileBitcode + + method + development + signingStyle + automatic + stripSwiftSymbols + + teamID + S8QB4VV633 + thinning + <none> + + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.pbxproj b/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.pbxproj new file mode 100644 index 000000000000..aca7bdbfa676 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.pbxproj @@ -0,0 +1,350 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 0D313B6D24C6613900D7044B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D313B6C24C6613900D7044B /* AppDelegate.m */; }; + 0D313B7024C6613900D7044B /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D313B6F24C6613900D7044B /* SceneDelegate.m */; }; + 0D313B7324C6613900D7044B /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D313B7224C6613900D7044B /* ViewController.m */; }; + 0D313B7624C6613900D7044B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0D313B7424C6613900D7044B /* Main.storyboard */; }; + 0D313B7824C6613A00D7044B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0D313B7724C6613A00D7044B /* Assets.xcassets */; }; + 0D313B7B24C6613A00D7044B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0D313B7924C6613A00D7044B /* LaunchScreen.storyboard */; }; + 0D313B7E24C6613A00D7044B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D313B7D24C6613A00D7044B /* main.m */; }; + 0D313B8524C66AB700D7044B /* ip.txt in Resources */ = {isa = PBXBuildFile; fileRef = 0D313B8424C66AB700D7044B /* ip.txt */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0D313B6824C6613900D7044B /* smiley.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smiley.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D313B6B24C6613900D7044B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 0D313B6C24C6613900D7044B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 0D313B6E24C6613900D7044B /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = ""; }; + 0D313B6F24C6613900D7044B /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = ""; }; + 0D313B7124C6613900D7044B /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 0D313B7224C6613900D7044B /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 0D313B7524C6613900D7044B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 0D313B7724C6613A00D7044B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0D313B7A24C6613A00D7044B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 0D313B7C24C6613A00D7044B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0D313B7D24C6613A00D7044B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 0D313B8424C66AB700D7044B /* ip.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = ip.txt; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0D313B6524C6613900D7044B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0D313B5F24C6613900D7044B = { + isa = PBXGroup; + children = ( + 0D313B6A24C6613900D7044B /* smiley */, + 0D313B6924C6613900D7044B /* Products */, + ); + sourceTree = ""; + }; + 0D313B6924C6613900D7044B /* Products */ = { + isa = PBXGroup; + children = ( + 0D313B6824C6613900D7044B /* smiley.app */, + ); + name = Products; + sourceTree = ""; + }; + 0D313B6A24C6613900D7044B /* smiley */ = { + isa = PBXGroup; + children = ( + 0D313B6B24C6613900D7044B /* AppDelegate.h */, + 0D313B6C24C6613900D7044B /* AppDelegate.m */, + 0D313B6E24C6613900D7044B /* SceneDelegate.h */, + 0D313B6F24C6613900D7044B /* SceneDelegate.m */, + 0D313B7124C6613900D7044B /* ViewController.h */, + 0D313B7224C6613900D7044B /* ViewController.m */, + 0D313B7424C6613900D7044B /* Main.storyboard */, + 0D313B7724C6613A00D7044B /* Assets.xcassets */, + 0D313B7924C6613A00D7044B /* LaunchScreen.storyboard */, + 0D313B7C24C6613A00D7044B /* Info.plist */, + 0D313B7D24C6613A00D7044B /* main.m */, + 0D313B8424C66AB700D7044B /* ip.txt */, + ); + path = smiley; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0D313B6724C6613900D7044B /* smiley */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0D313B8124C6613A00D7044B /* Build configuration list for PBXNativeTarget "smiley" */; + buildPhases = ( + 0D313B6424C6613900D7044B /* Sources */, + 0D313B6524C6613900D7044B /* Frameworks */, + 0D313B6624C6613900D7044B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = smiley; + productName = smiley; + productReference = 0D313B6824C6613900D7044B /* smiley.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0D313B6024C6613900D7044B /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1150; + ORGANIZATIONNAME = "Aaron Clarke"; + TargetAttributes = { + 0D313B6724C6613900D7044B = { + CreatedOnToolsVersion = 11.5; + }; + }; + }; + buildConfigurationList = 0D313B6324C6613900D7044B /* Build configuration list for PBXProject "smiley" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 0D313B5F24C6613900D7044B; + productRefGroup = 0D313B6924C6613900D7044B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0D313B6724C6613900D7044B /* smiley */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0D313B6624C6613900D7044B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D313B7B24C6613A00D7044B /* LaunchScreen.storyboard in Resources */, + 0D313B8524C66AB700D7044B /* ip.txt in Resources */, + 0D313B7824C6613A00D7044B /* Assets.xcassets in Resources */, + 0D313B7624C6613900D7044B /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0D313B6424C6613900D7044B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D313B7324C6613900D7044B /* ViewController.m in Sources */, + 0D313B6D24C6613900D7044B /* AppDelegate.m in Sources */, + 0D313B7E24C6613A00D7044B /* main.m in Sources */, + 0D313B7024C6613900D7044B /* SceneDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 0D313B7424C6613900D7044B /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 0D313B7524C6613900D7044B /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 0D313B7924C6613A00D7044B /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 0D313B7A24C6613A00D7044B /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0D313B7F24C6613A00D7044B /* Debug */ = { + isa = XCBuildConfiguration; + 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_ENABLE_OBJC_WEAK = 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_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_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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + 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_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.5; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 0D313B8024C6613A00D7044B /* Release */ = { + isa = XCBuildConfiguration; + 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_ENABLE_OBJC_WEAK = 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_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_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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + 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_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 0D313B8224C6613A00D7044B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = S8QB4VV633; + INFOPLIST_FILE = smiley/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "dev.flutter.imitation-game.smiley"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 0D313B8324C6613A00D7044B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = S8QB4VV633; + INFOPLIST_FILE = smiley/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "dev.flutter.imitation-game.smiley"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0D313B6324C6613900D7044B /* Build configuration list for PBXProject "smiley" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0D313B7F24C6613A00D7044B /* Debug */, + 0D313B8024C6613A00D7044B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0D313B8124C6613A00D7044B /* Build configuration list for PBXNativeTarget "smiley" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0D313B8224C6613A00D7044B /* Debug */, + 0D313B8324C6613A00D7044B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0D313B6024C6613900D7044B /* Project object */; +} diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..1ba2d6e1c0d4 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.h b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.h new file mode 100644 index 000000000000..545a4e5190ce --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.h @@ -0,0 +1,11 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +@interface AppDelegate : UIResponder + + +@end + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.m b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.m new file mode 100644 index 000000000000..4d7550a2d3bf --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/AppDelegate.m @@ -0,0 +1,37 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + + +#pragma mark - UISceneSession lifecycle + + +- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; +} + + +- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. +} + + +@end diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000000..9221b9bb1a35 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/Contents.json b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/Contents.json new file mode 100644 index 000000000000..73c00596a7fc --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/Contents.json b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/Contents.json new file mode 100644 index 000000000000..79308c15f26c --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "smiley.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/smiley.png b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Assets.xcassets/smiley.imageset/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..441b66ae89226d19d2cf9b0a0e2ea0b59d90ec30 GIT binary patch literal 30739 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

cz!U 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 bK2@apewVKbMcECw36Q?-wM+RIt)KoM-mob7 literal 0 HcmV?d00001 diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/LaunchScreen.storyboard b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000000..865e9329f376 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/Main.storyboard b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/Main.storyboard new file mode 100644 index 000000000000..4f0a58ac372e --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Base.lproj/Main.storyboard @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Info.plist b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Info.plist new file mode 100644 index 000000000000..7b6037c25e51 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/Info.plist @@ -0,0 +1,64 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.h b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.h new file mode 100644 index 000000000000..2921a4af3ac5 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.h @@ -0,0 +1,12 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +@interface SceneDelegate : UIResponder + +@property (strong, nonatomic) UIWindow * window; + +@end + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.m b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.m new file mode 100644 index 000000000000..01fbd4804fc3 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/SceneDelegate.m @@ -0,0 +1,54 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "SceneDelegate.h" + +@interface SceneDelegate () + +@end + +@implementation SceneDelegate + + +- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). +} + + +- (void)sceneDidDisconnect:(UIScene *)scene { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). +} + + +- (void)sceneDidBecomeActive:(UIScene *)scene { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. +} + + +- (void)sceneWillResignActive:(UIScene *)scene { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). +} + + +- (void)sceneWillEnterForeground:(UIScene *)scene { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. +} + + +- (void)sceneDidEnterBackground:(UIScene *)scene { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. +} + + +@end diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.h b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.h new file mode 100644 index 000000000000..92e88f435dab --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.h @@ -0,0 +1,11 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +@interface ViewController : UIViewController +@property(nonatomic, strong) IBOutlet UIImageView* imageView; + +@end + diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.m b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.m new file mode 100644 index 000000000000..cfce5fd73581 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ViewController.m @@ -0,0 +1,123 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ViewController.h" +#import +#import +#import + +static int64_t loadStartupTime(NSError **error) { + pid_t pid = [[NSProcessInfo processInfo] processIdentifier]; + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; + struct kinfo_proc proc; + size_t size = sizeof(proc); + int err = sysctl(mib, 4, &proc, &size, NULL, 0); + if (err != 0) { + int errCode = errno; + if (error) { + *error = [NSError errorWithDomain:@"smiley" code:errCode userInfo:@{}]; + } + return 0; + } + + struct timeval startTime = proc.kp_proc.p_starttime; + int64_t microsecondsInSecond = 1000000LL; + int64_t microsecondsSinceEpoch = + (int64_t)(startTime.tv_sec * microsecondsInSecond) + + (int64_t)startTime.tv_usec; + + return microsecondsSinceEpoch; +} + +static NSString *loadIpAddress() { +#if TARGET_IPHONE_SIMULATOR + return @"127.0.0.1:4040"; +#else + NSString *ipPath = [[NSBundle mainBundle] pathForResource:@"ip" + ofType:@"txt"]; + NSError *err; + NSString *ipAddress = [NSString stringWithContentsOfFile:ipPath + encoding:NSUTF8StringEncoding + error:&err]; + assert(err == nil); + return [ipAddress + stringByTrimmingCharactersInSet:[NSCharacterSet + whitespaceAndNewlineCharacterSet]]; +#endif +} + +static void sendResults(NSTimeInterval result) { + NSLog(@"send results:%f", result); + NSString *ipAddress = loadIpAddress(); + NSString *url = [NSString stringWithFormat:@"http://%@", ipAddress]; + NSMutableURLRequest *urlRequest = + [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; + NSDictionary *payload = @{ + @"test": @"smiley", + @"platform": @"uikit", + @"results" : @{ + @"startupTime" : @(result), + } + }; + NSError *error; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload + options:0 + error:&error]; + assert(error == nil && jsonData); + [urlRequest setHTTPMethod:@"POST"]; + [urlRequest setHTTPBody:jsonData]; + + NSURLSession *session = [NSURLSession sharedSession]; + NSURLSessionDataTask *dataTask = [session + dataTaskWithRequest:urlRequest + completionHandler:^(NSData *data, NSURLResponse *response, + NSError *error) { + NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; + if (httpResponse.statusCode != 200) { + NSLog(@"Error %@ '%@'", error, url); + } + }]; + [dataTask resume]; +} + +@interface ViewController () +@property(nonatomic, strong) CADisplayLink *displayLink; +@end + +@implementation ViewController { + BOOL _waitingForDraw; +} + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)loadView { + [super loadView]; + self.displayLink = [CADisplayLink displayLinkWithTarget:self + selector:@selector(onTick:)]; + [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] + forMode:NSRunLoopCommonModes]; + self.imageView.image = [UIImage imageNamed:@"smiley"]; + _waitingForDraw = YES; +} + +- (BOOL)prefersStatusBarHidden { + return YES; +} + +- (void)onTick:(CADisplayLink *)sender { + if (_waitingForDraw) { + int64_t epochTime = loadStartupTime(nil); + NSTimeInterval epocTimeSeconds = (double)epochTime / 1000000.0; + NSDate *startTime = [NSDate dateWithTimeIntervalSince1970:epocTimeSeconds]; + NSTimeInterval runTime = [[NSDate now] timeIntervalSinceDate:startTime]; + sendResults(runTime); + _waitingForDraw = NO; + [self.displayLink invalidate]; + self.displayLink = nil; + } +} + +@end diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ip.txt b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ip.txt new file mode 100644 index 000000000000..d331e21174a0 --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/ip.txt @@ -0,0 +1 @@ +192.168.0.18:4040 \ No newline at end of file diff --git a/packages/imitation_game/tests/smiley/uikit/smiley/smiley/main.m b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/main.m new file mode 100644 index 000000000000..d079e809d19c --- /dev/null +++ b/packages/imitation_game/tests/smiley/uikit/smiley/smiley/main.m @@ -0,0 +1,15 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + NSString * appDelegateClassName; + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + appDelegateClassName = NSStringFromClass([AppDelegate class]); + } + return UIApplicationMain(argc, argv, nil, appDelegateClassName); +}