├── release_notes.txt
├── ios
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Runner.xcworkspace
│ └── contents.xcworkspacedata
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ └── project.pbxproj
└── .gitignore
├── android
├── gradle.properties
├── .gitignore
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ ├── kotlin
│ │ │ │ └── br
│ │ │ │ │ └── com
│ │ │ │ │ └── chinnonsantos
│ │ │ │ │ └── full_testing_flutter
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── settings.gradle
└── build.gradle
├── .codecov.yml
├── scripts
└── flutter_test.sh
├── .metadata
├── test_driver
├── app.dart
└── app_test.dart
├── coverage
└── lcov.info
├── lib
├── counter.dart
└── main.dart
├── SECURITY.md
├── .gitignore
├── analysis_options.yaml
├── .travis.yml
├── pubspec.yaml
├── LICENSE
├── test
├── unit
│ ├── counter_test.dart
│ └── provider_test.dart
└── widget
│ └── widget_test.dart
├── sylph.yaml
├── .github
└── workflows
│ └── detekt-analysis.yml
├── README.md
└── pubspec.lock
/release_notes.txt:
--------------------------------------------------------------------------------
1 | First release version 1.0.0
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinnonsantos/full_testing_flutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/.codecov.yml:
--------------------------------------------------------------------------------
1 | codecov:
2 | require_ci_to_pass: yes
3 |
4 | coverage:
5 | precision: 2
6 | round: down
7 | range: "70...100"
8 |
9 | status:
10 | project: yes
11 | patch: yes
12 | changes: no
13 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/scripts/flutter_test.sh:
--------------------------------------------------------------------------------
1 | set -e # abort CI if an error happens
2 | flutter packages get
3 | flutter format --set-exit-if-changed lib test test_driver
4 | flutter analyze --no-current-package lib test/
5 | flutter test --no-pub --coverage
6 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
7 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 856a90e67c9284124d44d2be6c785bacd3a1c772
8 | channel: beta
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/test_driver/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_driver/driver_extension.dart';
2 | import 'package:full_testing_flutter/main.dart' as app;
3 |
4 | void main() {
5 | // This line enables the extension.
6 | enableFlutterDriverExtension();
7 |
8 | // Call the `main()` function of the app, or call `runApp` with
9 | // any widget you are interested in testing.
10 | app.main();
11 | }
12 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | 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.
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/br/com/chinnonsantos/full_testing_flutter/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package br.com.chinnonsantos.full_testing_flutter
2 |
3 | import android.os.Bundle
4 | import io.flutter.app.FlutterActivity
5 | import io.flutter.plugins.GeneratedPluginRegistrant
6 |
7 | class MainActivity: FlutterActivity() {
8 | override fun onCreate(savedInstanceState: Bundle?) {
9 | super.onCreate(savedInstanceState)
10 | GeneratedPluginRegistrant.registerWith(this)
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/coverage/lcov.info:
--------------------------------------------------------------------------------
1 | SF:lib/counter.dart
2 | DA:10,3
3 | DA:11,6
4 | DA:13,3
5 | DA:16,2
6 | DA:17,4
7 | DA:19,2
8 | LF:6
9 | LH:6
10 | end_of_record
11 | SF:lib/main.dart
12 | DA:5,0
13 | DA:9,2
14 | DA:17,2
15 | DA:21,4
16 | DA:22,2
17 | DA:24,2
18 | DA:27,2
19 | DA:36,2
20 | DA:38,2
21 | DA:40,2
22 | DA:41,2
23 | DA:42,4
24 | DA:44,2
25 | DA:45,2
26 | DA:47,2
27 | DA:48,2
28 | DA:55,2
29 | DA:56,4
30 | DA:57,4
31 | DA:58,2
32 | DA:59,6
33 | DA:65,2
34 | DA:75,2
35 | DA:76,1
36 | DA:77,2
37 | DA:79,2
38 | LF:26
39 | LH:25
40 | end_of_record
41 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/counter.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 |
3 | /// Simplest possible model, with just one field.
4 | ///
5 | /// [ChangeNotifier] is a class in `flutter:foundation`.
6 | /// [Counter] does _not_ depend on Provider.
7 | class Counter with ChangeNotifier {
8 | int value = 0;
9 |
10 | void increment() {
11 | value++;
12 | // print('Value++: $value');
13 | notifyListeners();
14 | }
15 |
16 | void decrement() {
17 | value--;
18 | // print('Value--: $value');
19 | notifyListeners();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy (WIP)
2 |
3 | ## Supported Versions
4 |
5 | Use this section to tell people about which versions of your project are
6 | currently being supported with security updates.
7 |
8 | | Version | Supported |
9 | | ------- | ------------------ |
10 | | 5.1.x | :white_check_mark: |
11 | | 5.0.x | :x: |
12 | | 4.0.x | :white_check_mark: |
13 | | < 4.0 | :x: |
14 |
15 | ## Reporting a Vulnerability
16 |
17 | Use this section to tell people how to report a vulnerability.
18 |
19 | Tell them where to go, how often they can expect to get an update on a
20 | reported vulnerability, what to expect if the vulnerability is accepted or
21 | declined, etc.
22 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.5.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | jcenter()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | .dart_tool/
26 | .flutter-plugins
27 | .packages
28 | .pub-cache/
29 | .pub/
30 | /build/
31 |
32 | # Web related
33 | lib/generated_plugin_registrant.dart
34 |
35 | # Exceptions to above rules.
36 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
37 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
2 | # for details. All rights reserved. Use of this source code is governed by a
3 | # BSD-style license that can be found in the LICENSE file.
4 | #
5 | # Google internally enforced rules. See README.md for more information,
6 | # including a list of lints that are intentionally _not_ enforced.
7 | #
8 | # Include this file if you want to always use the latest version. If your
9 | # continuous build and/or presubmit check lints then they will likely fail
10 | # whenever a new version of `package:pedantic` is released. To avoid this,
11 | # specify a specific version of `analysis_options.yaml` instead.
12 |
13 | include: package:pedantic/analysis_options.1.8.0.yaml
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: shell
2 | os:
3 | - linux
4 | - osx
5 | env:
6 | - FLUTTER_CHANNEL="stable"
7 | - FLUTTER_CHANNEL="beta"
8 | before_script:
9 | - cd ..
10 | - git clone https://github.com/flutter/flutter.git -b $FLUTTER_CHANNEL
11 | - export PATH=$PATH:$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin
12 | - cd -
13 | - flutter doctor
14 | - chmod +x scripts/flutter_test.sh
15 | script:
16 | - set -e # abort CI if an error happens
17 | - ./scripts/flutter_test.sh
18 |
19 | # export coverage
20 | - if [ $FLUTTER_CHANNEL = "beta" ]; then
21 | bash <(curl -s https://codecov.io/bash);
22 | fi
23 | jobs:
24 | allow_failures:
25 | - env: FLUTTER_CHANNEL="stable"
26 | - os: osx
27 | cache:
28 | directories:
29 | - $HOME/.pub-cache
30 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: full_testing_flutter
2 | description: Flutter App's simplest automated full test.
3 | version: 1.0.0
4 | author: Chinnon Santos
5 | homepage: https://www.chinnonsantos.com.br
6 | repository: https://github.com/chinnonsantos/full_testing_flutter
7 | issue_tracker: https://github.com/chinnonsantos/full_testing_flutter/issues
8 |
9 | environment:
10 | sdk: ">=2.1.0 <3.0.0"
11 |
12 | dependencies:
13 | flutter:
14 | sdk: flutter
15 | cupertino_icons: ^0.1.3
16 | # https://pub.dev/packages/test
17 | test: ^1.9.4
18 | # https://pub.dev/packages/provider
19 | provider: ^3.2.0
20 |
21 | dev_dependencies:
22 | flutter_test:
23 | sdk: flutter
24 | flutter_driver:
25 | sdk: flutter
26 | # https://pub.dev/packages/pedantic
27 | pedantic: ^1.8.0+1
28 |
29 | flutter:
30 | uses-material-design: true
31 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Chinnon Santos
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/test/unit/counter_test.dart:
--------------------------------------------------------------------------------
1 | // Import the test package and Counter class
2 | import 'package:test/test.dart';
3 | import 'package:full_testing_flutter/counter.dart';
4 |
5 | void main() {
6 | group('[Counter]', () {
7 | Counter _counter;
8 |
9 | setUp(() {
10 | _counter = Counter();
11 | });
12 |
13 | test('Counter initial value should be 0', () {
14 | expect(_counter.value, 0);
15 | });
16 |
17 | test('Counter class type should be `Counter`', () {
18 | expect(_counter.runtimeType, equals(Counter));
19 | });
20 |
21 | test('Counter value type should be `int`', () {
22 | expect(_counter.value.runtimeType, equals(int));
23 | });
24 |
25 | test('Counter value should not be `null`', () {
26 | expect(_counter.value, isNotNull);
27 | });
28 |
29 | test('Counter value should be incremented', () {
30 | _counter.increment();
31 |
32 | expect(_counter.value, 1);
33 | });
34 |
35 | test('Counter value should be decremented', () {
36 | _counter.decrement();
37 |
38 | expect(_counter.value, -1);
39 | });
40 |
41 | test('Counter value should be first incremented and then decremented', () {
42 | _counter.increment();
43 | _counter.decrement();
44 |
45 | expect(_counter.value, 0);
46 | });
47 | });
48 | }
49 |
--------------------------------------------------------------------------------
/test_driver/app_test.dart:
--------------------------------------------------------------------------------
1 | // Imports the Flutter Driver API.
2 | import 'package:flutter_driver/flutter_driver.dart';
3 | import 'package:test/test.dart';
4 |
5 | void main() {
6 | group('[Driver -> Counter App]', () {
7 | // First, define the Finders and use them to locate widgets from the
8 | // test suite. Note: the Strings provided to the `byValueKey` method must
9 | // be the same as the Strings we used for the Keys in step 1.
10 | final counterTextFinder = find.byValueKey('counter');
11 | final buttonFinder = find.byValueKey('increment');
12 |
13 | FlutterDriver _driver;
14 |
15 | // Connect to the Flutter driver before running any tests.
16 | setUpAll(() async {
17 | _driver = await FlutterDriver.connect();
18 | });
19 |
20 | // Close the connection to the driver after the tests have completed.
21 | tearDownAll(() async {
22 | if (_driver != null) {
23 | await _driver.close();
24 | }
25 | });
26 |
27 | test('starts at 0', () async {
28 | // Use the `driver.getText` method to verify the counter starts at 0.
29 | expect(await _driver.getText(counterTextFinder), "0");
30 | });
31 |
32 | test('increments the counter', () async {
33 | // First, tap the button.
34 | await _driver.tap(buttonFinder);
35 |
36 | // Then, verify the counter text is incremented by 1.
37 | expect(await _driver.getText(counterTextFinder), "1");
38 | });
39 | });
40 | }
41 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | full_testing_flutter
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/sylph.yaml:
--------------------------------------------------------------------------------
1 | # Config file for Flutter tests on real device pools.
2 | # Auto-creates projects and device pools if needed.
3 | # Configures android and ios test runs.
4 | # Builds app, uploads and runs tests.
5 | # Then monitors tests, returns final pass/fail result and downloads artifacts.
6 | # Note: assumes the 'aws' command line utility is logged-in.
7 |
8 | # sylph config
9 | tmp_dir: /tmp/sylph
10 | artifacts_dir: /tmp/sylph_artifacts
11 | # local timeout per device farm run
12 | sylph_timeout: 900 # seconds approx
13 | # run on ios and android pools concurrently (for faster results)
14 | concurrent_runs: true
15 |
16 | # device farm config
17 | project_name: full_testing_codemagic
18 | default_job_timeout: 15 # minutes, set at project creation
19 |
20 | device_pools:
21 |
22 | # - pool_name: Sony
23 | # pool_type: android
24 | # devices:
25 | # - name: Sony Xperia XZ3
26 | # model: H8416
27 | # os: 9.0.0
28 |
29 | - pool_name: Samsung Galaxy
30 | pool_type: android
31 | devices:
32 | - name: Samsung Galaxy S9+ (Unlocked)
33 | model: SM-G965U1
34 | os: 8.0.0
35 | - name: Samsung Galaxy J7 (2018)
36 | model: SM-J737U
37 | os: 8.0.0
38 |
39 | # - pool_name: iPhone latest
40 | # pool_type: ios
41 | # devices:
42 | # - name: Apple iPhone 11 Pro Max
43 | # model: MWGY2LL/A
44 | # os: 13.1.3
45 |
46 | test_suites:
47 |
48 | - test_suite: Only Android tests
49 | main: test_driver/app.dart
50 | tests:
51 | - test_driver/app_test.dart
52 | pool_names:
53 | # - Sony Xperia XZ3
54 | - Samsung Galaxy
55 | # - iPhone latest
56 | job_timeout: 20 # minutes, set per job, over-rides default job timeout above
57 |
--------------------------------------------------------------------------------
/test/unit/provider_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:provider/provider.dart';
4 |
5 | import 'package:full_testing_flutter/main.dart';
6 | import 'package:full_testing_flutter/counter.dart';
7 |
8 | void main() async {
9 | group('[Provider]', () {
10 | testWidgets('Update when the value changes', (tester) async {
11 | final _providerKey = GlobalKey();
12 | BuildContext context;
13 |
14 | await tester.pumpWidget(ChangeNotifierProvider(
15 | key: _providerKey,
16 | create: (c) {
17 | context = c;
18 | return Counter();
19 | },
20 | child: MyApp(),
21 | ));
22 |
23 | // Check the context test...
24 | expect(context, equals(_providerKey.currentContext));
25 |
26 | /// Only the descendants of the `ChangeNotifierProvider`
27 | /// can call `Provider.of`, so find his context...
28 | final BuildContext childContext = tester.element(find.byType(MyApp));
29 |
30 | // Check the initial value provider 0...
31 | expect(Provider.of(childContext).value, 0);
32 |
33 | // Increment value...
34 | Provider.of(childContext).increment();
35 |
36 | // Delay the pump...
37 | await Future.microtask(tester.pump);
38 |
39 | // Check incremented value...
40 | expect(Provider.of(childContext).value, 1);
41 |
42 | // Decrement value...
43 | Provider.of(childContext, listen: false).decrement();
44 |
45 | // Delay the pump...
46 | await Future.microtask(tester.pump);
47 |
48 | // Check decremented value...
49 | expect(Provider.of(childContext).value, 0);
50 | });
51 | });
52 | }
53 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
8 |
12 |
19 |
23 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/test/widget/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 | import 'package:provider/provider.dart';
11 |
12 | import 'package:full_testing_flutter/main.dart';
13 | import 'package:full_testing_flutter/counter.dart';
14 |
15 | void main() {
16 | group('[Widget -> Main page]', () {
17 | testWidgets('Counter increments test', (WidgetTester tester) async {
18 | // Build our app and trigger a frame.
19 | await tester.pumpWidget(
20 | ChangeNotifierProvider.value(
21 | value: Counter(),
22 | child: MyApp(),
23 | ),
24 | );
25 |
26 | // Verify that our counter starts at 0.
27 | expect(find.text('0'), findsOneWidget);
28 | expect(find.text('1'), findsNothing);
29 |
30 | // verify if have a 'Floating Action Button' widget.
31 | expect(find.byType(FloatingActionButton), findsOneWidget);
32 |
33 | // Tap the '+' icon and trigger a frame.
34 | await tester.tap(find.byIcon(Icons.add));
35 | // Rebuild the widget with the new value.
36 | await tester.pump();
37 |
38 | // Verify that our counter has incremented.
39 | expect(find.text('0'), findsNothing);
40 | expect(find.text('1'), findsOneWidget);
41 | });
42 |
43 | testWidgets('Default text test', (WidgetTester tester) async {
44 | // Build our app and trigger a frame.
45 | await tester.pumpWidget(MyApp());
46 |
47 | // Verify that our default text is 'You have pushed the button this many times:'.
48 | expect(find.text('You have pushed the button this many times:'),
49 | findsOneWidget);
50 | });
51 | });
52 | }
53 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion 28
30 |
31 | sourceSets {
32 | main.java.srcDirs += 'src/main/kotlin'
33 | }
34 |
35 | lintOptions {
36 | disable 'InvalidPackage'
37 | }
38 |
39 | defaultConfig {
40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
41 | applicationId "br.com.chinnonsantos.full_testing_flutter"
42 | minSdkVersion 16
43 | targetSdkVersion 28
44 | versionCode flutterVersionCode.toInteger()
45 | versionName flutterVersionName
46 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
47 | }
48 |
49 | buildTypes {
50 | release {
51 | // TODO: Add your own signing config for the release build.
52 | // Signing with the debug keys for now, so `flutter run --release` works.
53 | signingConfig signingConfigs.debug
54 | }
55 | }
56 | }
57 |
58 | flutter {
59 | source '../..'
60 | }
61 |
62 | dependencies {
63 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
64 | testImplementation 'junit:junit:4.12'
65 | androidTestImplementation 'androidx.test:runner:1.1.1'
66 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
67 | }
68 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:full_testing_flutter/counter.dart';
4 |
5 | void main() => runApp(MyApp());
6 |
7 | class MyApp extends StatelessWidget {
8 | // This widget is the root of your application.
9 | @override
10 | Widget build(BuildContext context) {
11 | // Provide the model to all widgets within the app. We're using
12 | // ChangeNotifierProvider because that's a simple way to rebuild
13 | // widgets when a model changes. We could also just use
14 | // Provider, but then we would have to listen to Counter ourselves.
15 | //
16 | // Read Provider's docs to learn about all the available providers.
17 | return ChangeNotifierProvider(
18 | // Initialize the model in the builder. That way, Provider
19 | // can own Counter's lifecycle, making sure to call `dispose`
20 | // when not needed anymore.
21 | create: (context) => Counter(),
22 | child: MaterialApp(
23 | title: 'Flutter Demo',
24 | theme: ThemeData(
25 | primarySwatch: Colors.blue,
26 | ),
27 | home: MyHomePage(title: 'Flutter Demo Home Page'),
28 | ),
29 | );
30 | }
31 | }
32 |
33 | class MyHomePage extends StatelessWidget {
34 | final String title;
35 |
36 | MyHomePage({this.title});
37 |
38 | @override
39 | Widget build(BuildContext context) {
40 | return Scaffold(
41 | appBar: AppBar(
42 | title: Text(title),
43 | ),
44 | body: Center(
45 | child: Column(
46 | mainAxisAlignment: MainAxisAlignment.center,
47 | children: [
48 | Text(
49 | 'You have pushed the button this many times:',
50 | ),
51 | // Consumer looks for an ancestor Provider widget
52 | // and retrieves its model (Counter, in this case).
53 | // Then it uses that model to build widgets, and will trigger
54 | // rebuilds if the model is updated.
55 | Consumer(
56 | builder: (context, counter, child) => Text(
57 | '${counter.value}',
58 | key: Key('counter'),
59 | style: Theme.of(context).textTheme.display1,
60 | ),
61 | ),
62 | ],
63 | ),
64 | ),
65 | floatingActionButton: FloatingActionButton(
66 | // Provider.of is another way to access the model object held
67 | // by an ancestor Provider. By default, even this listens to
68 | // changes in the model, and rebuilds the whole encompassing widget
69 | // when notified.
70 | //
71 | // By using `listen: false` below, we are disabling that
72 | // behavior. We are only calling a function here, and so we don't care
73 | // about the current value. Without `listen: false`, we'd be rebuilding
74 | // the whole MyHomePage whenever Counter notifies listeners.
75 | key: Key('increment'),
76 | onPressed: () =>
77 | Provider.of(context, listen: false).increment(),
78 | tooltip: 'Increment',
79 | child: Icon(Icons.add),
80 | ),
81 | );
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/.github/workflows/detekt-analysis.yml:
--------------------------------------------------------------------------------
1 | # This workflow performs a static analysis of your Kotlin source code using
2 | # Detekt.
3 | #
4 | # Scans are triggered:
5 | # 1. On every push to default and protected branches
6 | # 2. On every Pull Request targeting the default branch
7 | # 3. On a weekly schedule
8 | # 4. Manually, on demand, via the "workflow_dispatch" event
9 | #
10 | # The workflow should work with no modifications, but you might like to use a
11 | # later version of the Detekt CLI by modifing the $DETEKT_RELEASE_TAG
12 | # environment variable.
13 | name: Scan with Detekt
14 |
15 | on:
16 | # Triggers the workflow on push or pull request events but only for default and protected branches
17 | push:
18 | branches: [ master ]
19 | pull_request:
20 | branches: [ master ]
21 | schedule:
22 | - cron: '38 10 * * 1'
23 |
24 | # Allows you to run this workflow manually from the Actions tab
25 | workflow_dispatch:
26 |
27 | env:
28 | # Release tag associated with version of Detekt to be installed
29 | # SARIF support (required for this workflow) was introduced in Detekt v1.15.0
30 | DETEKT_RELEASE_TAG: v1.15.0
31 |
32 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
33 | jobs:
34 | # This workflow contains a single job called "scan"
35 | scan:
36 | name: Scan
37 | # The type of runner that the job will run on
38 | runs-on: ubuntu-latest
39 |
40 | # Steps represent a sequence of tasks that will be executed as part of the job
41 | steps:
42 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
43 | - uses: actions/checkout@v2
44 |
45 | # Gets the download URL associated with the $DETEKT_RELEASE_TAG
46 | - name: Get Detekt download URL
47 | id: detekt_info
48 | env:
49 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50 | run: |
51 | DETEKT_DOWNLOAD_URL=$( gh api graphql --field tagName=$DETEKT_RELEASE_TAG --raw-field query='
52 | query getReleaseAssetDownloadUrl($tagName: String!) {
53 | repository(name: "detekt", owner: "detekt") {
54 | release(tagName: $tagName) {
55 | releaseAssets(name: "detekt", first: 1) {
56 | nodes {
57 | downloadUrl
58 | }
59 | }
60 | }
61 | }
62 | }
63 | ' | \
64 | jq --raw-output '.data.repository.release.releaseAssets.nodes[0].downloadUrl' )
65 | echo "::set-output name=download_url::$DETEKT_DOWNLOAD_URL"
66 |
67 | # Sets up the detekt cli
68 | - name: Setup Detekt
69 | run: |
70 | dest=$( mktemp -d )
71 | curl --request GET \
72 | --url ${{ steps.detekt_info.outputs.download_url }} \
73 | --silent \
74 | --location \
75 | --output $dest/detekt
76 | chmod a+x $dest/detekt
77 | echo $dest >> $GITHUB_PATH
78 |
79 | # Performs static analysis using Detekt
80 | - name: Run Detekt
81 | continue-on-error: true
82 | run: |
83 | detekt --input ${{ github.workspace }} --report sarif:${{ github.workspace }}/detekt.sarif.json
84 |
85 | # Modifies the SARIF output produced by Detekt so that absolute URIs are relative
86 | # This is so we can easily map results onto their source files
87 | # This can be removed once relative URI support lands in Detekt: https://git.io/JLBbA
88 | - name: Make artifact location URIs relative
89 | continue-on-error: true
90 | run: |
91 | echo "$(
92 | jq \
93 | --arg github_workspace ${{ github.workspace }} \
94 | '. | ( .runs[].results[].locations[].physicalLocation.artifactLocation.uri |= if test($github_workspace) then .[($github_workspace | length | . + 1):] else . end )' \
95 | ${{ github.workspace }}/detekt.sarif.json
96 | )" > ${{ github.workspace }}/detekt.sarif.json
97 |
98 | # Uploads results to GitHub repository using the upload-sarif action
99 | - uses: github/codeql-action/upload-sarif@v1
100 | with:
101 | # Path to SARIF file relative to the root of the repository
102 | sarif_file: ${{ github.workspace }}/detekt.sarif.json
103 | checkout_path: ${{ github.workspace }}
104 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Flutter App's simplest automated full test
2 |
3 | [](https://codemagic.io/apps/5ddbe31c011bc93c37050c9f/5ddbe31c011bc93c37050c9e/latest_build) [](https://travis-ci.org/chinnonsantos/full_testing_flutter) [](https://codecov.io/gh/chinnonsantos/full_testing_flutter) [](https://flutter.dev/docs/get-started/install) [](https://choosealicense.com/licenses/mit/) [](https://twitter.com/intent/follow?screen_name=chinnonsantos) [](https://join.slack.com/t/chinnonsantos-nudemo/signup) [](https://github.com/ellerbrock/open-source-badges/)
4 |
5 | This project shows an example of the main forms of automated testing in Flutter mobile App, including integration into a [CI/CD platform][], as follows:
6 |
7 | - [Unitary][] (including [mocking][] on unitary);
8 | - [Widgets][];
9 | - [Integration][] (or assertion).
10 |
11 | Using native libraries or recommended by official Flutter documentation (Google).
12 |
13 | > Note that everything here fits within the guidelines set out in [Effective Dart][].
14 |
15 | [CI/CD platform]: https://en.wikipedia.org/wiki/CI/CD
16 | [Unitary]: https://flutter.dev/docs/cookbook/testing/unit/introduction
17 | [mocking]: https://flutter.dev/docs/cookbook/testing/unit/mocking
18 | [Widgets]: https://flutter.dev/docs/cookbook/testing/widget/introduction
19 | [Integration]: https://flutter.dev/docs/cookbook/testing/integration/introduction
20 | [Effective Dart]: https://www.dartlang.org/guides/language/effective-dart
21 |
22 | ## Nudemo - Flutter APP + AWS DeviceFarm Automation Tests (Backend in Clojure)
23 |
24 | [
](https://www.youtube.com/watch?v=cBgz7RTjDeo)
25 |
26 | https://hub.docker.com/u/chinnonsantos
27 |
28 | ## Codemagic - CI for Flutter
29 |
30 | At the [Flutter Live][] 2018 conference in London, [Nevercode][] launched their dedicated CI/CD solution for Flutter apps which is known as [Codemagic][].
31 |
32 | This project uses **Codemagic for CI/CD**, selected after various analysis and testing with other CI platforms ([Travis CI][], [Codecov][], [Coveralls][]...), which support the Dart language (in some cases only Dart < 2.0), but do not have good support for the Flutter App.
33 |
34 | > "Codemagic is the official CI/CD solution dedicated just for Flutter apps."
35 | > \- Getting Started with Codemagic
36 |
37 | See more details about Codemagic in '[Getting Started with Codemagic]'.
38 |
39 | [Flutter Live]: https://developers.google.com/events/flutter-live/
40 | [Nevercode]: https://nevercode.io/
41 | [Codemagic]: https://codemagic.io/
42 | [Travis CI]: https://travis-ci.org/
43 | [Codecov]: https://codecov.io/
44 | [Coveralls]: https://coveralls.io/
45 | [Getting Started with Codemagic]: https://blog.codemagic.io/getting-started-with-codemagic/
46 |
47 | ## Prerequisites
48 |
49 | You will need [Flutter][] framework v1.11.0 or above installed ([Channel beta][], on Linux, locale en_US.UTF-8).
50 |
51 | > The Dart SDK **is not required** because Flutter has _[Dart language][]_ support as an integrated tool in the framework.
52 |
53 | [Flutter]: https://flutter.dev/
54 | [Channel beta]: https://github.com/flutter/flutter/wiki/Flutter-build-release-channels#beta
55 | [Dart language]: https://dart.dev/
56 |
57 | **Libraries:**
58 |
59 | - [test][] 1.6.3
60 | - [provider][] 3.1.0+1
61 | - [pedantic][] 1.8.0+1 (dev)
62 |
63 | [test]: https://pub.dev/packages/test
64 | [provider]: https://pub.dev/packages/provider
65 | [pedantic]: https://pub.dev/packages/pedantic
66 |
67 | ## Running tests
68 |
69 | To automatically [formatting][] code, run:
70 |
71 | flutter format lib test test_driver
72 |
73 | [formatting]: https://flutter.dev/docs/development/tools/formatting
74 |
75 | To analyzing the Dart language code, run:
76 |
77 | flutter analyze
78 |
79 | > The [Dart analyzer][] will check your code and look for possible errors.
80 |
81 | [Dart analyzer]: https://flutter.dev/docs/testing/debugging#the-dart-analyzer
82 |
83 | To [testing] the project, run:
84 |
85 | flutter test
86 |
87 | [testing]: https://flutter.dev/docs/testing
88 |
89 | To check test coverage, run:
90 |
91 | - Run test with `--coverage` flag:
92 |
93 | flutter test --coverage
94 |
95 | - Convert the LCOV report generated to a readable HTML file:
96 |
97 | genhtml coverage/lcov.info -o coverage/html
98 |
99 | > The **`flutter test --coverage`** command will generate a **`lcov.info`** file, you will need to install the **[LCOV][]** program to convert (**`genhtml ...`**) the report to an HTML file (human readable).
100 |
101 | - Open the HTML report (with a Web Browser)
102 |
103 | google-chrome coverage/html/index.html
104 |
105 | [LCOV]: http://ltp.sourceforge.net/coverage/lcov.php
106 |
107 | To test only **Unit tests** of the project, run:
108 |
109 | flutter test test/unit/
110 |
111 | To test only **Widget tests** of the project, run:
112 |
113 | flutter test test/widget/
114 |
115 | To test only **Integration** (or assertion) of the project, run:
116 |
117 | flutter drive --target=test_driver/app.dart
118 |
119 | _-->> First, be sure to launch an Android Emulator, iOS Simulator, or connect your computer to a real iOS / Android device. **Integration testing needs to be executed on a real system (simulator or device)!**_
120 |
121 | > "Unlike unit and widget tests, integration test suites do not run in the same process as the app being tested. Therefore, create two files that reside in the same directory. By convention, the directory is named **`test_driver`**."
122 | > \- An introduction to integration testing
123 |
124 | To run **Formatting code** ✔️; **Analyzing code** 🔍; **Unit test code** 🆗; **Widget test** 📲 and **Test coverage** ☔️. everything together ⏲️:
125 |
126 | sh scripts/flutter_test.sh
127 |
128 | ## Drive testing on AWS Device Farm with Sylph
129 |
130 | To runs Flutter integration tests on real devices in cloud, use the **Sylph**.
131 |
132 | - Install Sylph:
133 |
134 | pub global activate sylph
135 |
136 | > For more details see [Sylph][].
137 |
138 | - Configure the [AWS CLI][] credentials:
139 |
140 | $ aws configure
141 | AWS Access Key ID [None]: YOUR_KEY_ID_HERE
142 | AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY_HERE
143 | Default region name [None]: us-west-2
144 | Default output format [None]: json
145 |
146 | > The AWS Device Farm is only available in Oregon region (**us-west-2**)!
147 |
148 | - Run the Sylph:
149 |
150 | sylph
151 |
152 | > Sylph uses the [`sylph.yaml`][] file in this repository to configure and run device on AWS.
153 | >> By default, it has only two Android devices (Samsung Galaxy S9+ and Samsung Galaxy J7).
154 | >> Running iOS devices requires an [Apple Developer Certificate] (Team ID), We don't cover this steps!
155 |
156 | 
157 |
158 | [Sylph]: https://github.com/mmcc007/sylph
159 | [AWS CLI]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
160 | [`sylph.yaml`]: https://github.com/chinnonsantos/full_testing_flutter/blob/master/sylph.yaml
161 | [Apple Developer Certificate]: https://developer.apple.com/account/#/membership
162 |
163 | ## Drive testing on Codemagic CI/CD (using AWS Device Farm and Sylph)
164 |
165 | Execute the same process when previous step **"Drive testing on AWS Device Farm with Sylph"**.
166 |
167 | When you can run local drive testing with Sylph on AWS Device Farm, see [this article] to learn how to configure Codemagic console to automate the process.
168 |
169 | 
170 |
171 | [this article]: https://blog.codemagic.io/flutter-ci-cd-with-codemagic-sylph-aws-device-farm/
172 |
173 | ## Running the APP
174 |
175 | To start the mobile App example, run:
176 |
177 | flutter run
178 |
179 | ## License
180 |
181 | Copyright © 2019 | Chinnon Santos | MIT
182 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | analyzer:
5 | dependency: transitive
6 | description:
7 | name: analyzer
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "0.36.4"
11 | archive:
12 | dependency: transitive
13 | description:
14 | name: archive
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "2.0.11"
18 | args:
19 | dependency: transitive
20 | description:
21 | name: args
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "1.5.2"
25 | async:
26 | dependency: transitive
27 | description:
28 | name: async
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "2.4.0"
32 | boolean_selector:
33 | dependency: transitive
34 | description:
35 | name: boolean_selector
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.0.5"
39 | charcode:
40 | dependency: transitive
41 | description:
42 | name: charcode
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "1.1.2"
46 | collection:
47 | dependency: transitive
48 | description:
49 | name: collection
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "1.14.11"
53 | convert:
54 | dependency: transitive
55 | description:
56 | name: convert
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "2.1.1"
60 | coverage:
61 | dependency: transitive
62 | description:
63 | name: coverage
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "0.13.3+3"
67 | crypto:
68 | dependency: transitive
69 | description:
70 | name: crypto
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "2.1.3"
74 | csslib:
75 | dependency: transitive
76 | description:
77 | name: csslib
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "0.16.1"
81 | cupertino_icons:
82 | dependency: "direct main"
83 | description:
84 | name: cupertino_icons
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "0.1.3"
88 | file:
89 | dependency: transitive
90 | description:
91 | name: file
92 | url: "https://pub.dartlang.org"
93 | source: hosted
94 | version: "5.1.0"
95 | flutter:
96 | dependency: "direct main"
97 | description: flutter
98 | source: sdk
99 | version: "0.0.0"
100 | flutter_driver:
101 | dependency: "direct dev"
102 | description: flutter
103 | source: sdk
104 | version: "0.0.0"
105 | flutter_test:
106 | dependency: "direct dev"
107 | description: flutter
108 | source: sdk
109 | version: "0.0.0"
110 | front_end:
111 | dependency: transitive
112 | description:
113 | name: front_end
114 | url: "https://pub.dartlang.org"
115 | source: hosted
116 | version: "0.1.19"
117 | fuchsia_remote_debug_protocol:
118 | dependency: transitive
119 | description: flutter
120 | source: sdk
121 | version: "0.0.0"
122 | glob:
123 | dependency: transitive
124 | description:
125 | name: glob
126 | url: "https://pub.dartlang.org"
127 | source: hosted
128 | version: "1.2.0"
129 | html:
130 | dependency: transitive
131 | description:
132 | name: html
133 | url: "https://pub.dartlang.org"
134 | source: hosted
135 | version: "0.14.0+3"
136 | http:
137 | dependency: transitive
138 | description:
139 | name: http
140 | url: "https://pub.dartlang.org"
141 | source: hosted
142 | version: "0.12.0+2"
143 | http_multi_server:
144 | dependency: transitive
145 | description:
146 | name: http_multi_server
147 | url: "https://pub.dartlang.org"
148 | source: hosted
149 | version: "2.1.0"
150 | http_parser:
151 | dependency: transitive
152 | description:
153 | name: http_parser
154 | url: "https://pub.dartlang.org"
155 | source: hosted
156 | version: "3.1.3"
157 | image:
158 | dependency: transitive
159 | description:
160 | name: image
161 | url: "https://pub.dartlang.org"
162 | source: hosted
163 | version: "2.1.4"
164 | intl:
165 | dependency: transitive
166 | description:
167 | name: intl
168 | url: "https://pub.dartlang.org"
169 | source: hosted
170 | version: "0.16.0"
171 | io:
172 | dependency: transitive
173 | description:
174 | name: io
175 | url: "https://pub.dartlang.org"
176 | source: hosted
177 | version: "0.3.3"
178 | js:
179 | dependency: transitive
180 | description:
181 | name: js
182 | url: "https://pub.dartlang.org"
183 | source: hosted
184 | version: "0.6.1+1"
185 | json_rpc_2:
186 | dependency: transitive
187 | description:
188 | name: json_rpc_2
189 | url: "https://pub.dartlang.org"
190 | source: hosted
191 | version: "2.1.0"
192 | kernel:
193 | dependency: transitive
194 | description:
195 | name: kernel
196 | url: "https://pub.dartlang.org"
197 | source: hosted
198 | version: "0.3.19"
199 | logging:
200 | dependency: transitive
201 | description:
202 | name: logging
203 | url: "https://pub.dartlang.org"
204 | source: hosted
205 | version: "0.11.3+2"
206 | matcher:
207 | dependency: transitive
208 | description:
209 | name: matcher
210 | url: "https://pub.dartlang.org"
211 | source: hosted
212 | version: "0.12.6"
213 | meta:
214 | dependency: transitive
215 | description:
216 | name: meta
217 | url: "https://pub.dartlang.org"
218 | source: hosted
219 | version: "1.1.8"
220 | mime:
221 | dependency: transitive
222 | description:
223 | name: mime
224 | url: "https://pub.dartlang.org"
225 | source: hosted
226 | version: "0.9.6+3"
227 | multi_server_socket:
228 | dependency: transitive
229 | description:
230 | name: multi_server_socket
231 | url: "https://pub.dartlang.org"
232 | source: hosted
233 | version: "1.0.2"
234 | node_interop:
235 | dependency: transitive
236 | description:
237 | name: node_interop
238 | url: "https://pub.dartlang.org"
239 | source: hosted
240 | version: "1.0.3"
241 | node_io:
242 | dependency: transitive
243 | description:
244 | name: node_io
245 | url: "https://pub.dartlang.org"
246 | source: hosted
247 | version: "1.0.1+2"
248 | node_preamble:
249 | dependency: transitive
250 | description:
251 | name: node_preamble
252 | url: "https://pub.dartlang.org"
253 | source: hosted
254 | version: "1.4.8"
255 | package_config:
256 | dependency: transitive
257 | description:
258 | name: package_config
259 | url: "https://pub.dartlang.org"
260 | source: hosted
261 | version: "1.1.0"
262 | package_resolver:
263 | dependency: transitive
264 | description:
265 | name: package_resolver
266 | url: "https://pub.dartlang.org"
267 | source: hosted
268 | version: "1.0.10"
269 | path:
270 | dependency: transitive
271 | description:
272 | name: path
273 | url: "https://pub.dartlang.org"
274 | source: hosted
275 | version: "1.6.4"
276 | pedantic:
277 | dependency: "direct dev"
278 | description:
279 | name: pedantic
280 | url: "https://pub.dartlang.org"
281 | source: hosted
282 | version: "1.8.0+1"
283 | petitparser:
284 | dependency: transitive
285 | description:
286 | name: petitparser
287 | url: "https://pub.dartlang.org"
288 | source: hosted
289 | version: "2.4.0"
290 | platform:
291 | dependency: transitive
292 | description:
293 | name: platform
294 | url: "https://pub.dartlang.org"
295 | source: hosted
296 | version: "2.2.1"
297 | pool:
298 | dependency: transitive
299 | description:
300 | name: pool
301 | url: "https://pub.dartlang.org"
302 | source: hosted
303 | version: "1.4.0"
304 | process:
305 | dependency: transitive
306 | description:
307 | name: process
308 | url: "https://pub.dartlang.org"
309 | source: hosted
310 | version: "3.0.12"
311 | provider:
312 | dependency: "direct main"
313 | description:
314 | name: provider
315 | url: "https://pub.dartlang.org"
316 | source: hosted
317 | version: "3.2.0"
318 | pub_semver:
319 | dependency: transitive
320 | description:
321 | name: pub_semver
322 | url: "https://pub.dartlang.org"
323 | source: hosted
324 | version: "1.4.2"
325 | quiver:
326 | dependency: transitive
327 | description:
328 | name: quiver
329 | url: "https://pub.dartlang.org"
330 | source: hosted
331 | version: "2.0.5"
332 | shelf:
333 | dependency: transitive
334 | description:
335 | name: shelf
336 | url: "https://pub.dartlang.org"
337 | source: hosted
338 | version: "0.7.5"
339 | shelf_packages_handler:
340 | dependency: transitive
341 | description:
342 | name: shelf_packages_handler
343 | url: "https://pub.dartlang.org"
344 | source: hosted
345 | version: "1.0.4"
346 | shelf_static:
347 | dependency: transitive
348 | description:
349 | name: shelf_static
350 | url: "https://pub.dartlang.org"
351 | source: hosted
352 | version: "0.2.8"
353 | shelf_web_socket:
354 | dependency: transitive
355 | description:
356 | name: shelf_web_socket
357 | url: "https://pub.dartlang.org"
358 | source: hosted
359 | version: "0.2.3"
360 | sky_engine:
361 | dependency: transitive
362 | description: flutter
363 | source: sdk
364 | version: "0.0.99"
365 | source_map_stack_trace:
366 | dependency: transitive
367 | description:
368 | name: source_map_stack_trace
369 | url: "https://pub.dartlang.org"
370 | source: hosted
371 | version: "1.1.5"
372 | source_maps:
373 | dependency: transitive
374 | description:
375 | name: source_maps
376 | url: "https://pub.dartlang.org"
377 | source: hosted
378 | version: "0.10.8"
379 | source_span:
380 | dependency: transitive
381 | description:
382 | name: source_span
383 | url: "https://pub.dartlang.org"
384 | source: hosted
385 | version: "1.5.5"
386 | stack_trace:
387 | dependency: transitive
388 | description:
389 | name: stack_trace
390 | url: "https://pub.dartlang.org"
391 | source: hosted
392 | version: "1.9.3"
393 | stream_channel:
394 | dependency: transitive
395 | description:
396 | name: stream_channel
397 | url: "https://pub.dartlang.org"
398 | source: hosted
399 | version: "2.0.0"
400 | string_scanner:
401 | dependency: transitive
402 | description:
403 | name: string_scanner
404 | url: "https://pub.dartlang.org"
405 | source: hosted
406 | version: "1.0.5"
407 | term_glyph:
408 | dependency: transitive
409 | description:
410 | name: term_glyph
411 | url: "https://pub.dartlang.org"
412 | source: hosted
413 | version: "1.1.0"
414 | test:
415 | dependency: "direct main"
416 | description:
417 | name: test
418 | url: "https://pub.dartlang.org"
419 | source: hosted
420 | version: "1.9.4"
421 | test_api:
422 | dependency: transitive
423 | description:
424 | name: test_api
425 | url: "https://pub.dartlang.org"
426 | source: hosted
427 | version: "0.2.11"
428 | test_core:
429 | dependency: transitive
430 | description:
431 | name: test_core
432 | url: "https://pub.dartlang.org"
433 | source: hosted
434 | version: "0.2.15"
435 | typed_data:
436 | dependency: transitive
437 | description:
438 | name: typed_data
439 | url: "https://pub.dartlang.org"
440 | source: hosted
441 | version: "1.1.6"
442 | vector_math:
443 | dependency: transitive
444 | description:
445 | name: vector_math
446 | url: "https://pub.dartlang.org"
447 | source: hosted
448 | version: "2.0.8"
449 | vm_service:
450 | dependency: transitive
451 | description:
452 | name: vm_service
453 | url: "https://pub.dartlang.org"
454 | source: hosted
455 | version: "2.1.3"
456 | vm_service_client:
457 | dependency: transitive
458 | description:
459 | name: vm_service_client
460 | url: "https://pub.dartlang.org"
461 | source: hosted
462 | version: "0.2.6+2"
463 | watcher:
464 | dependency: transitive
465 | description:
466 | name: watcher
467 | url: "https://pub.dartlang.org"
468 | source: hosted
469 | version: "0.9.7+13"
470 | web_socket_channel:
471 | dependency: transitive
472 | description:
473 | name: web_socket_channel
474 | url: "https://pub.dartlang.org"
475 | source: hosted
476 | version: "1.1.0"
477 | xml:
478 | dependency: transitive
479 | description:
480 | name: xml
481 | url: "https://pub.dartlang.org"
482 | source: hosted
483 | version: "3.5.0"
484 | yaml:
485 | dependency: transitive
486 | description:
487 | name: yaml
488 | url: "https://pub.dartlang.org"
489 | source: hosted
490 | version: "2.2.0"
491 | sdks:
492 | dart: ">=2.4.0 <3.0.0"
493 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
14 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
15 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
16 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
17 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
18 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
19 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
20 | /* End PBXBuildFile section */
21 |
22 | /* Begin PBXCopyFilesBuildPhase section */
23 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
24 | isa = PBXCopyFilesBuildPhase;
25 | buildActionMask = 2147483647;
26 | dstPath = "";
27 | dstSubfolderSpec = 10;
28 | files = (
29 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
30 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
31 | );
32 | name = "Embed Frameworks";
33 | runOnlyForDeploymentPostprocessing = 0;
34 | };
35 | /* End PBXCopyFilesBuildPhase section */
36 |
37 | /* Begin PBXFileReference section */
38 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
39 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
40 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
41 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; };
42 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
43 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
44 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
45 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
46 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
47 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; };
48 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
49 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
50 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
51 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
52 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
53 | /* End PBXFileReference section */
54 |
55 | /* Begin PBXFrameworksBuildPhase section */
56 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
57 | isa = PBXFrameworksBuildPhase;
58 | buildActionMask = 2147483647;
59 | files = (
60 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
61 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
62 | );
63 | runOnlyForDeploymentPostprocessing = 0;
64 | };
65 | /* End PBXFrameworksBuildPhase section */
66 |
67 | /* Begin PBXGroup section */
68 | 9740EEB11CF90186004384FC /* Flutter */ = {
69 | isa = PBXGroup;
70 | children = (
71 | 3B80C3931E831B6300D905FE /* App.framework */,
72 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
73 | 9740EEBA1CF902C7004384FC /* Flutter.framework */,
74 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
75 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
76 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
77 | );
78 | name = Flutter;
79 | sourceTree = "";
80 | };
81 | 97C146E51CF9000F007C117D = {
82 | isa = PBXGroup;
83 | children = (
84 | 9740EEB11CF90186004384FC /* Flutter */,
85 | 97C146F01CF9000F007C117D /* Runner */,
86 | 97C146EF1CF9000F007C117D /* Products */,
87 | );
88 | sourceTree = "";
89 | };
90 | 97C146EF1CF9000F007C117D /* Products */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 97C146EE1CF9000F007C117D /* Runner.app */,
94 | );
95 | name = Products;
96 | sourceTree = "";
97 | };
98 | 97C146F01CF9000F007C117D /* Runner */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
102 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
103 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
104 | 97C147021CF9000F007C117D /* Info.plist */,
105 | 97C146F11CF9000F007C117D /* Supporting Files */,
106 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
107 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
108 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
109 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
110 | );
111 | path = Runner;
112 | sourceTree = "";
113 | };
114 | 97C146F11CF9000F007C117D /* Supporting Files */ = {
115 | isa = PBXGroup;
116 | children = (
117 | );
118 | name = "Supporting Files";
119 | sourceTree = "";
120 | };
121 | /* End PBXGroup section */
122 |
123 | /* Begin PBXNativeTarget section */
124 | 97C146ED1CF9000F007C117D /* Runner */ = {
125 | isa = PBXNativeTarget;
126 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
127 | buildPhases = (
128 | 9740EEB61CF901F6004384FC /* Run Script */,
129 | 97C146EA1CF9000F007C117D /* Sources */,
130 | 97C146EB1CF9000F007C117D /* Frameworks */,
131 | 97C146EC1CF9000F007C117D /* Resources */,
132 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
133 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
134 | );
135 | buildRules = (
136 | );
137 | dependencies = (
138 | );
139 | name = Runner;
140 | productName = Runner;
141 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
142 | productType = "com.apple.product-type.application";
143 | };
144 | /* End PBXNativeTarget section */
145 |
146 | /* Begin PBXProject section */
147 | 97C146E61CF9000F007C117D /* Project object */ = {
148 | isa = PBXProject;
149 | attributes = {
150 | LastUpgradeCheck = 1020;
151 | ORGANIZATIONNAME = "The Chromium Authors";
152 | TargetAttributes = {
153 | 97C146ED1CF9000F007C117D = {
154 | CreatedOnToolsVersion = 7.3.1;
155 | LastSwiftMigration = 1100;
156 | };
157 | };
158 | };
159 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
160 | compatibilityVersion = "Xcode 3.2";
161 | developmentRegion = en;
162 | hasScannedForEncodings = 0;
163 | knownRegions = (
164 | en,
165 | Base,
166 | );
167 | mainGroup = 97C146E51CF9000F007C117D;
168 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
169 | projectDirPath = "";
170 | projectRoot = "";
171 | targets = (
172 | 97C146ED1CF9000F007C117D /* Runner */,
173 | );
174 | };
175 | /* End PBXProject section */
176 |
177 | /* Begin PBXResourcesBuildPhase section */
178 | 97C146EC1CF9000F007C117D /* Resources */ = {
179 | isa = PBXResourcesBuildPhase;
180 | buildActionMask = 2147483647;
181 | files = (
182 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
183 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
184 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
185 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
186 | );
187 | runOnlyForDeploymentPostprocessing = 0;
188 | };
189 | /* End PBXResourcesBuildPhase section */
190 |
191 | /* Begin PBXShellScriptBuildPhase section */
192 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
193 | isa = PBXShellScriptBuildPhase;
194 | buildActionMask = 2147483647;
195 | files = (
196 | );
197 | inputPaths = (
198 | );
199 | name = "Thin Binary";
200 | outputPaths = (
201 | );
202 | runOnlyForDeploymentPostprocessing = 0;
203 | shellPath = /bin/sh;
204 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
205 | };
206 | 9740EEB61CF901F6004384FC /* Run Script */ = {
207 | isa = PBXShellScriptBuildPhase;
208 | buildActionMask = 2147483647;
209 | files = (
210 | );
211 | inputPaths = (
212 | );
213 | name = "Run Script";
214 | outputPaths = (
215 | );
216 | runOnlyForDeploymentPostprocessing = 0;
217 | shellPath = /bin/sh;
218 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
219 | };
220 | /* End PBXShellScriptBuildPhase section */
221 |
222 | /* Begin PBXSourcesBuildPhase section */
223 | 97C146EA1CF9000F007C117D /* Sources */ = {
224 | isa = PBXSourcesBuildPhase;
225 | buildActionMask = 2147483647;
226 | files = (
227 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
228 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
229 | );
230 | runOnlyForDeploymentPostprocessing = 0;
231 | };
232 | /* End PBXSourcesBuildPhase section */
233 |
234 | /* Begin PBXVariantGroup section */
235 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
236 | isa = PBXVariantGroup;
237 | children = (
238 | 97C146FB1CF9000F007C117D /* Base */,
239 | );
240 | name = Main.storyboard;
241 | sourceTree = "";
242 | };
243 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
244 | isa = PBXVariantGroup;
245 | children = (
246 | 97C147001CF9000F007C117D /* Base */,
247 | );
248 | name = LaunchScreen.storyboard;
249 | sourceTree = "";
250 | };
251 | /* End PBXVariantGroup section */
252 |
253 | /* Begin XCBuildConfiguration section */
254 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
255 | isa = XCBuildConfiguration;
256 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
257 | buildSettings = {
258 | ALWAYS_SEARCH_USER_PATHS = NO;
259 | CLANG_ANALYZER_NONNULL = YES;
260 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
261 | CLANG_CXX_LIBRARY = "libc++";
262 | CLANG_ENABLE_MODULES = YES;
263 | CLANG_ENABLE_OBJC_ARC = YES;
264 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
265 | CLANG_WARN_BOOL_CONVERSION = YES;
266 | CLANG_WARN_COMMA = YES;
267 | CLANG_WARN_CONSTANT_CONVERSION = YES;
268 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
269 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
270 | CLANG_WARN_EMPTY_BODY = YES;
271 | CLANG_WARN_ENUM_CONVERSION = YES;
272 | CLANG_WARN_INFINITE_RECURSION = YES;
273 | CLANG_WARN_INT_CONVERSION = YES;
274 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
275 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
276 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
277 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
278 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
279 | CLANG_WARN_STRICT_PROTOTYPES = YES;
280 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
281 | CLANG_WARN_UNREACHABLE_CODE = YES;
282 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
283 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
284 | COPY_PHASE_STRIP = NO;
285 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
286 | ENABLE_NS_ASSERTIONS = NO;
287 | ENABLE_STRICT_OBJC_MSGSEND = YES;
288 | GCC_C_LANGUAGE_STANDARD = gnu99;
289 | GCC_NO_COMMON_BLOCKS = YES;
290 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
291 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
292 | GCC_WARN_UNDECLARED_SELECTOR = YES;
293 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
294 | GCC_WARN_UNUSED_FUNCTION = YES;
295 | GCC_WARN_UNUSED_VARIABLE = YES;
296 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
297 | MTL_ENABLE_DEBUG_INFO = NO;
298 | SDKROOT = iphoneos;
299 | SUPPORTED_PLATFORMS = iphoneos;
300 | TARGETED_DEVICE_FAMILY = "1,2";
301 | VALIDATE_PRODUCT = YES;
302 | };
303 | name = Profile;
304 | };
305 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
306 | isa = XCBuildConfiguration;
307 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
308 | buildSettings = {
309 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
310 | CLANG_ENABLE_MODULES = YES;
311 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
312 | ENABLE_BITCODE = NO;
313 | FRAMEWORK_SEARCH_PATHS = (
314 | "$(inherited)",
315 | "$(PROJECT_DIR)/Flutter",
316 | );
317 | INFOPLIST_FILE = Runner/Info.plist;
318 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
319 | LIBRARY_SEARCH_PATHS = (
320 | "$(inherited)",
321 | "$(PROJECT_DIR)/Flutter",
322 | );
323 | PRODUCT_BUNDLE_IDENTIFIER = br.com.chinnonsantos.fullTestingFlutter;
324 | PRODUCT_NAME = "$(TARGET_NAME)";
325 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
326 | SWIFT_VERSION = 5.0;
327 | VERSIONING_SYSTEM = "apple-generic";
328 | };
329 | name = Profile;
330 | };
331 | 97C147031CF9000F007C117D /* Debug */ = {
332 | isa = XCBuildConfiguration;
333 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
334 | buildSettings = {
335 | ALWAYS_SEARCH_USER_PATHS = NO;
336 | CLANG_ANALYZER_NONNULL = YES;
337 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
338 | CLANG_CXX_LIBRARY = "libc++";
339 | CLANG_ENABLE_MODULES = YES;
340 | CLANG_ENABLE_OBJC_ARC = YES;
341 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
342 | CLANG_WARN_BOOL_CONVERSION = YES;
343 | CLANG_WARN_COMMA = YES;
344 | CLANG_WARN_CONSTANT_CONVERSION = YES;
345 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
346 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
347 | CLANG_WARN_EMPTY_BODY = YES;
348 | CLANG_WARN_ENUM_CONVERSION = YES;
349 | CLANG_WARN_INFINITE_RECURSION = YES;
350 | CLANG_WARN_INT_CONVERSION = YES;
351 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
352 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
353 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
354 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
355 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
356 | CLANG_WARN_STRICT_PROTOTYPES = YES;
357 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
358 | CLANG_WARN_UNREACHABLE_CODE = YES;
359 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
360 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
361 | COPY_PHASE_STRIP = NO;
362 | DEBUG_INFORMATION_FORMAT = dwarf;
363 | ENABLE_STRICT_OBJC_MSGSEND = YES;
364 | ENABLE_TESTABILITY = YES;
365 | GCC_C_LANGUAGE_STANDARD = gnu99;
366 | GCC_DYNAMIC_NO_PIC = NO;
367 | GCC_NO_COMMON_BLOCKS = YES;
368 | GCC_OPTIMIZATION_LEVEL = 0;
369 | GCC_PREPROCESSOR_DEFINITIONS = (
370 | "DEBUG=1",
371 | "$(inherited)",
372 | );
373 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
374 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
375 | GCC_WARN_UNDECLARED_SELECTOR = YES;
376 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
377 | GCC_WARN_UNUSED_FUNCTION = YES;
378 | GCC_WARN_UNUSED_VARIABLE = YES;
379 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
380 | MTL_ENABLE_DEBUG_INFO = YES;
381 | ONLY_ACTIVE_ARCH = YES;
382 | SDKROOT = iphoneos;
383 | TARGETED_DEVICE_FAMILY = "1,2";
384 | };
385 | name = Debug;
386 | };
387 | 97C147041CF9000F007C117D /* Release */ = {
388 | isa = XCBuildConfiguration;
389 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
390 | buildSettings = {
391 | ALWAYS_SEARCH_USER_PATHS = NO;
392 | CLANG_ANALYZER_NONNULL = YES;
393 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
394 | CLANG_CXX_LIBRARY = "libc++";
395 | CLANG_ENABLE_MODULES = YES;
396 | CLANG_ENABLE_OBJC_ARC = YES;
397 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
398 | CLANG_WARN_BOOL_CONVERSION = YES;
399 | CLANG_WARN_COMMA = YES;
400 | CLANG_WARN_CONSTANT_CONVERSION = YES;
401 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
402 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
403 | CLANG_WARN_EMPTY_BODY = YES;
404 | CLANG_WARN_ENUM_CONVERSION = YES;
405 | CLANG_WARN_INFINITE_RECURSION = YES;
406 | CLANG_WARN_INT_CONVERSION = YES;
407 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
408 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
409 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
410 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
411 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
412 | CLANG_WARN_STRICT_PROTOTYPES = YES;
413 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
414 | CLANG_WARN_UNREACHABLE_CODE = YES;
415 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
416 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
417 | COPY_PHASE_STRIP = NO;
418 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
419 | ENABLE_NS_ASSERTIONS = NO;
420 | ENABLE_STRICT_OBJC_MSGSEND = YES;
421 | GCC_C_LANGUAGE_STANDARD = gnu99;
422 | GCC_NO_COMMON_BLOCKS = YES;
423 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
424 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
425 | GCC_WARN_UNDECLARED_SELECTOR = YES;
426 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
427 | GCC_WARN_UNUSED_FUNCTION = YES;
428 | GCC_WARN_UNUSED_VARIABLE = YES;
429 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
430 | MTL_ENABLE_DEBUG_INFO = NO;
431 | SDKROOT = iphoneos;
432 | SUPPORTED_PLATFORMS = iphoneos;
433 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
434 | TARGETED_DEVICE_FAMILY = "1,2";
435 | VALIDATE_PRODUCT = YES;
436 | };
437 | name = Release;
438 | };
439 | 97C147061CF9000F007C117D /* Debug */ = {
440 | isa = XCBuildConfiguration;
441 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
442 | buildSettings = {
443 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
444 | CLANG_ENABLE_MODULES = YES;
445 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
446 | ENABLE_BITCODE = NO;
447 | FRAMEWORK_SEARCH_PATHS = (
448 | "$(inherited)",
449 | "$(PROJECT_DIR)/Flutter",
450 | );
451 | INFOPLIST_FILE = Runner/Info.plist;
452 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
453 | LIBRARY_SEARCH_PATHS = (
454 | "$(inherited)",
455 | "$(PROJECT_DIR)/Flutter",
456 | );
457 | PRODUCT_BUNDLE_IDENTIFIER = br.com.chinnonsantos.fullTestingFlutter;
458 | PRODUCT_NAME = "$(TARGET_NAME)";
459 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
460 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
461 | SWIFT_VERSION = 5.0;
462 | VERSIONING_SYSTEM = "apple-generic";
463 | };
464 | name = Debug;
465 | };
466 | 97C147071CF9000F007C117D /* Release */ = {
467 | isa = XCBuildConfiguration;
468 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
469 | buildSettings = {
470 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
471 | CLANG_ENABLE_MODULES = YES;
472 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
473 | ENABLE_BITCODE = NO;
474 | FRAMEWORK_SEARCH_PATHS = (
475 | "$(inherited)",
476 | "$(PROJECT_DIR)/Flutter",
477 | );
478 | INFOPLIST_FILE = Runner/Info.plist;
479 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
480 | LIBRARY_SEARCH_PATHS = (
481 | "$(inherited)",
482 | "$(PROJECT_DIR)/Flutter",
483 | );
484 | PRODUCT_BUNDLE_IDENTIFIER = br.com.chinnonsantos.fullTestingFlutter;
485 | PRODUCT_NAME = "$(TARGET_NAME)";
486 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
487 | SWIFT_VERSION = 5.0;
488 | VERSIONING_SYSTEM = "apple-generic";
489 | };
490 | name = Release;
491 | };
492 | /* End XCBuildConfiguration section */
493 |
494 | /* Begin XCConfigurationList section */
495 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
496 | isa = XCConfigurationList;
497 | buildConfigurations = (
498 | 97C147031CF9000F007C117D /* Debug */,
499 | 97C147041CF9000F007C117D /* Release */,
500 | 249021D3217E4FDB00AE95B9 /* Profile */,
501 | );
502 | defaultConfigurationIsVisible = 0;
503 | defaultConfigurationName = Release;
504 | };
505 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
506 | isa = XCConfigurationList;
507 | buildConfigurations = (
508 | 97C147061CF9000F007C117D /* Debug */,
509 | 97C147071CF9000F007C117D /* Release */,
510 | 249021D4217E4FDB00AE95B9 /* Profile */,
511 | );
512 | defaultConfigurationIsVisible = 0;
513 | defaultConfigurationName = Release;
514 | };
515 | /* End XCConfigurationList section */
516 | };
517 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
518 | }
519 |
--------------------------------------------------------------------------------