Julian Steenbakker

Initial project

Showing 119 changed files with 3614 additions and 0 deletions
  1 +# Miscellaneous
  2 +*.class
  3 +*.lock
  4 +*.log
  5 +*.pyc
  6 +*.swp
  7 +.DS_Store
  8 +.atom/
  9 +.buildlog/
  10 +.history
  11 +.svn/
  12 +
  13 +# IntelliJ related
  14 +*.iml
  15 +*.ipr
  16 +*.iws
  17 +.idea/
  18 +
  19 +# Visual Studio Code related
  20 +.classpath
  21 +.project
  22 +.settings/
  23 +.vscode/
  24 +
  25 +# Flutter repo-specific
  26 +/bin/cache/
  27 +/bin/internal/bootstrap.bat
  28 +/bin/internal/bootstrap.sh
  29 +/bin/mingit/
  30 +/dev/benchmarks/mega_gallery/
  31 +/dev/bots/.recipe_deps
  32 +/dev/bots/android_tools/
  33 +/dev/devicelab/ABresults*.json
  34 +/dev/docs/doc/
  35 +/dev/docs/flutter.docs.zip
  36 +/dev/docs/lib/
  37 +/dev/docs/pubspec.yaml
  38 +/dev/integration_tests/**/xcuserdata
  39 +/dev/integration_tests/**/Pods
  40 +/packages/flutter/coverage/
  41 +version
  42 +analysis_benchmark.json
  43 +
  44 +# packages file containing multi-root paths
  45 +.packages.generated
  46 +
  47 +# Flutter/Dart/Pub related
  48 +**/doc/api/
  49 +.dart_tool/
  50 +.flutter-plugins
  51 +.flutter-plugins-dependencies
  52 +**/generated_plugin_registrant.dart
  53 +.packages
  54 +.pub-cache/
  55 +.pub/
  56 +build/
  57 +flutter_*.png
  58 +linked_*.ds
  59 +unlinked.ds
  60 +unlinked_spec.ds
  61 +
  62 +# Android related
  63 +**/android/**/gradle-wrapper.jar
  64 +.gradle/
  65 +**/android/captures/
  66 +**/android/gradlew
  67 +**/android/gradlew.bat
  68 +**/android/local.properties
  69 +**/android/**/GeneratedPluginRegistrant.java
  70 +**/android/key.properties
  71 +*.jks
  72 +
  73 +# iOS/XCode related
  74 +**/ios/**/*.mode1v3
  75 +**/ios/**/*.mode2v3
  76 +**/ios/**/*.moved-aside
  77 +**/ios/**/*.pbxuser
  78 +**/ios/**/*.perspectivev3
  79 +**/ios/**/*sync/
  80 +**/ios/**/.sconsign.dblite
  81 +**/ios/**/.tags*
  82 +**/ios/**/.vagrant/
  83 +**/ios/**/DerivedData/
  84 +**/ios/**/Icon?
  85 +**/ios/**/Pods/
  86 +**/ios/**/.symlinks/
  87 +**/ios/**/profile
  88 +**/ios/**/xcuserdata
  89 +**/ios/.generated/
  90 +**/ios/Flutter/.last_build_id
  91 +**/ios/Flutter/App.framework
  92 +**/ios/Flutter/Flutter.framework
  93 +**/ios/Flutter/Flutter.podspec
  94 +**/ios/Flutter/Generated.xcconfig
  95 +**/ios/Flutter/ephemeral
  96 +**/ios/Flutter/app.flx
  97 +**/ios/Flutter/app.zip
  98 +**/ios/Flutter/flutter_assets/
  99 +**/ios/Flutter/flutter_export_environment.sh
  100 +**/ios/ServiceDefinitions.json
  101 +**/ios/Runner/GeneratedPluginRegistrant.*
  102 +
  103 +# macOS
  104 +**/macos/Flutter/GeneratedPluginRegistrant.swift
  105 +**/macos/Flutter/ephemeral
  106 +
  107 +# Coverage
  108 +coverage/
  109 +
  110 +# Symbols
  111 +app.*.symbols
  112 +
  113 +# Exceptions to above rules.
  114 +!**/ios/**/default.mode1v3
  115 +!**/ios/**/default.mode2v3
  116 +!**/ios/**/default.pbxuser
  117 +!**/ios/**/default.perspectivev3
  118 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
  119 +!/dev/ci/**/Gemfile.lock
  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: 5f105a6ca7a5ac7b8bc9b241f4c2d86f4188cf5c
  8 + channel: stable
  9 +
  10 +project_type: plugin
  1 +## 0.0.1
  2 +
  3 +* TODO: Describe initial release.
  1 +TODO: Add your license here.
  1 +# mobile_scanner
  2 +
  3 +An universal scanner for Flutter based on MLKit.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter
  8 +[plug-in package](https://flutter.dev/developing-packages/),
  9 +a specialized package that includes platform-specific implementation code for
  10 +Android and/or iOS.
  11 +
  12 +For help getting started with Flutter, view our
  13 +[online documentation](https://flutter.dev/docs), which offers tutorials,
  14 +samples, guidance on mobile development, and a full API reference.
  15 +
  1 +include: package:flutter_lints/flutter.yaml
  2 +
  3 +# Additional information about this file can be found at
  4 +# https://dart.dev/guides/language/analysis-options
  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/workspace.xml
  5 +/.idea/libraries
  6 +.DS_Store
  7 +/build
  8 +/captures
  1 +group 'dev.steenbakker.mobile_scanner'
  2 +version '1.0-SNAPSHOT'
  3 +
  4 +buildscript {
  5 + ext.kotlin_version = '1.6.10'
  6 + repositories {
  7 + google()
  8 + mavenCentral()
  9 + }
  10 +
  11 + dependencies {
  12 + classpath 'com.android.tools.build:gradle:4.1.0'
  13 + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  14 + }
  15 +}
  16 +
  17 +rootProject.allprojects {
  18 + repositories {
  19 + google()
  20 + mavenCentral()
  21 + }
  22 +}
  23 +
  24 +apply plugin: 'com.android.library'
  25 +apply plugin: 'kotlin-android'
  26 +
  27 +android {
  28 + compileSdkVersion 31
  29 +
  30 + compileOptions {
  31 + sourceCompatibility JavaVersion.VERSION_1_8
  32 + targetCompatibility JavaVersion.VERSION_1_8
  33 + }
  34 +
  35 + kotlinOptions {
  36 + jvmTarget = '1.8'
  37 + }
  38 +
  39 + sourceSets {
  40 + main.java.srcDirs += 'src/main/kotlin'
  41 + }
  42 +
  43 + defaultConfig {
  44 + minSdkVersion 16
  45 + }
  46 +}
  47 +
  48 +dependencies {
  49 + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  50 +}
  1 +rootProject.name = 'mobile_scanner'
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="dev.steenbakker.mobile_scanner">
  3 +</manifest>
  1 +package dev.steenbakker.mobile_scanner
  2 +
  3 +import androidx.annotation.NonNull
  4 +
  5 +import io.flutter.embedding.engine.plugins.FlutterPlugin
  6 +import io.flutter.plugin.common.MethodCall
  7 +import io.flutter.plugin.common.MethodChannel
  8 +import io.flutter.plugin.common.MethodChannel.MethodCallHandler
  9 +import io.flutter.plugin.common.MethodChannel.Result
  10 +
  11 +/** MobileScannerPlugin */
  12 +class MobileScannerPlugin: FlutterPlugin, MethodCallHandler {
  13 + /// The MethodChannel that will the communication between Flutter and native Android
  14 + ///
  15 + /// This local reference serves to register the plugin with the Flutter Engine and unregister it
  16 + /// when the Flutter Engine is detached from the Activity
  17 + private lateinit var channel : MethodChannel
  18 +
  19 + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
  20 + channel = MethodChannel(flutterPluginBinding.binaryMessenger, "mobile_scanner")
  21 + channel.setMethodCallHandler(this)
  22 + }
  23 +
  24 + override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
  25 + if (call.method == "getPlatformVersion") {
  26 + result.success("Android ${android.os.Build.VERSION.RELEASE}")
  27 + } else {
  28 + result.notImplemented()
  29 + }
  30 + }
  31 +
  32 + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
  33 + channel.setMethodCallHandler(null)
  34 + }
  35 +}
  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 +**/ios/Flutter/.last_build_id
  26 +.dart_tool/
  27 +.flutter-plugins
  28 +.flutter-plugins-dependencies
  29 +.packages
  30 +.pub-cache/
  31 +.pub/
  32 +/build/
  33 +
  34 +# Web related
  35 +lib/generated_plugin_registrant.dart
  36 +
  37 +# Symbolication related
  38 +app.*.symbols
  39 +
  40 +# Obfuscation related
  41 +app.*.map.json
  42 +
  43 +# Android Studio will place build artifacts here
  44 +/android/app/debug
  45 +/android/app/profile
  46 +/android/app/release
  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: 5f105a6ca7a5ac7b8bc9b241f4c2d86f4188cf5c
  8 + channel: stable
  9 +
  10 +project_type: app
  1 +# mobile_scanner_example
  2 +
  3 +Demonstrates how to use the mobile_scanner plugin.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter application.
  8 +
  9 +A few resources to get you started if this is your first Flutter project:
  10 +
  11 +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
  13 +
  14 +For help getting started with Flutter, view our
  15 +[online documentation](https://flutter.dev/docs), which offers tutorials,
  16 +samples, guidance on mobile development, and a full API reference.
  1 +# This file configures the analyzer, which statically analyzes Dart code to
  2 +# check for errors, warnings, and lints.
  3 +#
  4 +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
  5 +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
  6 +# invoked from the command line by running `flutter analyze`.
  7 +
  8 +# The following line activates a set of recommended lints for Flutter apps,
  9 +# packages, and plugins designed to encourage good coding practices.
  10 +include: package:flutter_lints/flutter.yaml
  11 +
  12 +linter:
  13 + # The lint rules applied to this project can be customized in the
  14 + # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  15 + # included above or to enable additional rules. A list of all available lints
  16 + # and their documentation is published at
  17 + # https://dart-lang.github.io/linter/lints/index.html.
  18 + #
  19 + # Instead of disabling a lint rule for the entire project in the
  20 + # section below, it can also be suppressed for a single line of code
  21 + # or a specific dart file by using the `// ignore: name_of_lint` and
  22 + # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  23 + # producing the lint.
  24 + rules:
  25 + # avoid_print: false # Uncomment to disable the `avoid_print` rule
  26 + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
  27 +
  28 +# Additional information about this file can be found at
  29 +# https://dart.dev/guides/language/analysis-options
  1 +gradle-wrapper.jar
  2 +/.gradle
  3 +/captures/
  4 +/gradlew
  5 +/gradlew.bat
  6 +/local.properties
  7 +GeneratedPluginRegistrant.java
  8 +
  9 +# Remember to never publicly share your keystore.
  10 +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
  11 +key.properties
  12 +**/*.keystore
  13 +**/*.jks
  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 flutter.compileSdkVersion
  30 +
  31 + compileOptions {
  32 + sourceCompatibility JavaVersion.VERSION_1_8
  33 + targetCompatibility JavaVersion.VERSION_1_8
  34 + }
  35 +
  36 + kotlinOptions {
  37 + jvmTarget = '1.8'
  38 + }
  39 +
  40 + sourceSets {
  41 + main.java.srcDirs += 'src/main/kotlin'
  42 + }
  43 +
  44 + defaultConfig {
  45 + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
  46 + applicationId "dev.steenbakker.mobile_scanner_example"
  47 + minSdkVersion flutter.minSdkVersion
  48 + targetSdkVersion flutter.targetSdkVersion
  49 + versionCode flutterVersionCode.toInteger()
  50 + versionName flutterVersionName
  51 + }
  52 +
  53 + buildTypes {
  54 + release {
  55 + // TODO: Add your own signing config for the release build.
  56 + // Signing with the debug keys for now, so `flutter run --release` works.
  57 + signingConfig signingConfigs.debug
  58 + }
  59 + }
  60 +}
  61 +
  62 +flutter {
  63 + source '../..'
  64 +}
  65 +
  66 +dependencies {
  67 + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  68 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="dev.steenbakker.mobile_scanner_example">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="dev.steenbakker.mobile_scanner_example">
  3 + <application
  4 + android:label="mobile_scanner_example"
  5 + android:name="${applicationName}"
  6 + android:icon="@mipmap/ic_launcher">
  7 + <activity
  8 + android:name=".MainActivity"
  9 + android:exported="true"
  10 + android:launchMode="singleTop"
  11 + android:theme="@style/LaunchTheme"
  12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  13 + android:hardwareAccelerated="true"
  14 + android:windowSoftInputMode="adjustResize">
  15 + <!-- Specifies an Android theme to apply to this Activity as soon as
  16 + the Android process has started. This theme is visible to the user
  17 + while the Flutter UI initializes. After that, this theme continues
  18 + to determine the Window background behind the Flutter UI. -->
  19 + <meta-data
  20 + android:name="io.flutter.embedding.android.NormalTheme"
  21 + android:resource="@style/NormalTheme"
  22 + />
  23 + <intent-filter>
  24 + <action android:name="android.intent.action.MAIN"/>
  25 + <category android:name="android.intent.category.LAUNCHER"/>
  26 + </intent-filter>
  27 + </activity>
  28 + <!-- Don't delete the meta-data below.
  29 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
  30 + <meta-data
  31 + android:name="flutterEmbedding"
  32 + android:value="2" />
  33 + </application>
  34 +</manifest>
  1 +package dev.steenbakker.mobile_scanner_example
  2 +
  3 +import io.flutter.embedding.android.FlutterActivity
  4 +
  5 +class MainActivity: FlutterActivity() {
  6 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="?android:colorBackground" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="dev.steenbakker.mobile_scanner_example">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +buildscript {
  2 + ext.kotlin_version = '1.6.10'
  3 + repositories {
  4 + google()
  5 + mavenCentral()
  6 + }
  7 +
  8 + dependencies {
  9 + classpath 'com.android.tools.build:gradle:4.1.0'
  10 + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  11 + }
  12 +}
  13 +
  14 +allprojects {
  15 + repositories {
  16 + google()
  17 + mavenCentral()
  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 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  2 +android.useAndroidX=true
  3 +android.enableJetifier=true
  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-6.7-all.zip
  1 +include ':app'
  2 +
  3 +def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
  4 +def properties = new Properties()
  5 +
  6 +assert localPropertiesFile.exists()
  7 +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
  8 +
  9 +def flutterSdkPath = properties.getProperty("flutter.sdk")
  10 +assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
  11 +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
  1 +**/dgph
  2 +*.mode1v3
  3 +*.mode2v3
  4 +*.moved-aside
  5 +*.pbxuser
  6 +*.perspectivev3
  7 +**/*sync/
  8 +.sconsign.dblite
  9 +.tags*
  10 +**/.vagrant/
  11 +**/DerivedData/
  12 +Icon?
  13 +**/Pods/
  14 +**/.symlinks/
  15 +profile
  16 +xcuserdata
  17 +**/.generated/
  18 +Flutter/App.framework
  19 +Flutter/Flutter.framework
  20 +Flutter/Flutter.podspec
  21 +Flutter/Generated.xcconfig
  22 +Flutter/ephemeral/
  23 +Flutter/app.flx
  24 +Flutter/app.zip
  25 +Flutter/flutter_assets/
  26 +Flutter/flutter_export_environment.sh
  27 +ServiceDefinitions.json
  28 +Runner/GeneratedPluginRegistrant.*
  29 +
  30 +# Exceptions to above rules.
  31 +!default.mode1v3
  32 +!default.mode2v3
  33 +!default.pbxuser
  34 +!default.perspectivev3
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>9.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +# Uncomment this line to define a global platform for your project
  2 +# platform :ios, '9.0'
  3 +
  4 +# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
  5 +ENV['COCOAPODS_DISABLE_STATS'] = 'true'
  6 +
  7 +project 'Runner', {
  8 + 'Debug' => :debug,
  9 + 'Profile' => :release,
  10 + 'Release' => :release,
  11 +}
  12 +
  13 +def flutter_root
  14 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  15 + unless File.exist?(generated_xcode_build_settings_path)
  16 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  17 + end
  18 +
  19 + File.foreach(generated_xcode_build_settings_path) do |line|
  20 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  21 + return matches[1].strip if matches
  22 + end
  23 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
  24 +end
  25 +
  26 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  27 +
  28 +flutter_ios_podfile_setup
  29 +
  30 +target 'Runner' do
  31 + use_frameworks!
  32 + use_modular_headers!
  33 +
  34 + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  35 +end
  36 +
  37 +post_install do |installer|
  38 + installer.pods_project.targets.each do |target|
  39 + flutter_additional_ios_build_settings(target)
  40 + end
  41 +end
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 50;
  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 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
  13 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  14 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  15 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  16 +/* End PBXBuildFile section */
  17 +
  18 +/* Begin PBXCopyFilesBuildPhase section */
  19 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  20 + isa = PBXCopyFilesBuildPhase;
  21 + buildActionMask = 2147483647;
  22 + dstPath = "";
  23 + dstSubfolderSpec = 10;
  24 + files = (
  25 + );
  26 + name = "Embed Frameworks";
  27 + runOnlyForDeploymentPostprocessing = 0;
  28 + };
  29 +/* End PBXCopyFilesBuildPhase section */
  30 +
  31 +/* Begin PBXFileReference section */
  32 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  33 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  34 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  35 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
  36 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  37 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  38 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  39 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  40 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  41 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  42 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  43 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  44 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  45 +/* End PBXFileReference section */
  46 +
  47 +/* Begin PBXFrameworksBuildPhase section */
  48 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  49 + isa = PBXFrameworksBuildPhase;
  50 + buildActionMask = 2147483647;
  51 + files = (
  52 + );
  53 + runOnlyForDeploymentPostprocessing = 0;
  54 + };
  55 +/* End PBXFrameworksBuildPhase section */
  56 +
  57 +/* Begin PBXGroup section */
  58 + 9740EEB11CF90186004384FC /* Flutter */ = {
  59 + isa = PBXGroup;
  60 + children = (
  61 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  62 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  63 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  64 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  65 + );
  66 + name = Flutter;
  67 + sourceTree = "<group>";
  68 + };
  69 + 97C146E51CF9000F007C117D = {
  70 + isa = PBXGroup;
  71 + children = (
  72 + 9740EEB11CF90186004384FC /* Flutter */,
  73 + 97C146F01CF9000F007C117D /* Runner */,
  74 + 97C146EF1CF9000F007C117D /* Products */,
  75 + );
  76 + sourceTree = "<group>";
  77 + };
  78 + 97C146EF1CF9000F007C117D /* Products */ = {
  79 + isa = PBXGroup;
  80 + children = (
  81 + 97C146EE1CF9000F007C117D /* Runner.app */,
  82 + );
  83 + name = Products;
  84 + sourceTree = "<group>";
  85 + };
  86 + 97C146F01CF9000F007C117D /* Runner */ = {
  87 + isa = PBXGroup;
  88 + children = (
  89 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  90 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  91 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  92 + 97C147021CF9000F007C117D /* Info.plist */,
  93 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  94 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  95 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
  96 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
  97 + );
  98 + path = Runner;
  99 + sourceTree = "<group>";
  100 + };
  101 +/* End PBXGroup section */
  102 +
  103 +/* Begin PBXNativeTarget section */
  104 + 97C146ED1CF9000F007C117D /* Runner */ = {
  105 + isa = PBXNativeTarget;
  106 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  107 + buildPhases = (
  108 + 9740EEB61CF901F6004384FC /* Run Script */,
  109 + 97C146EA1CF9000F007C117D /* Sources */,
  110 + 97C146EB1CF9000F007C117D /* Frameworks */,
  111 + 97C146EC1CF9000F007C117D /* Resources */,
  112 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  113 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  114 + );
  115 + buildRules = (
  116 + );
  117 + dependencies = (
  118 + );
  119 + name = Runner;
  120 + productName = Runner;
  121 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  122 + productType = "com.apple.product-type.application";
  123 + };
  124 +/* End PBXNativeTarget section */
  125 +
  126 +/* Begin PBXProject section */
  127 + 97C146E61CF9000F007C117D /* Project object */ = {
  128 + isa = PBXProject;
  129 + attributes = {
  130 + LastUpgradeCheck = 1300;
  131 + ORGANIZATIONNAME = "";
  132 + TargetAttributes = {
  133 + 97C146ED1CF9000F007C117D = {
  134 + CreatedOnToolsVersion = 7.3.1;
  135 + LastSwiftMigration = 1100;
  136 + };
  137 + };
  138 + };
  139 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  140 + compatibilityVersion = "Xcode 9.3";
  141 + developmentRegion = en;
  142 + hasScannedForEncodings = 0;
  143 + knownRegions = (
  144 + en,
  145 + Base,
  146 + );
  147 + mainGroup = 97C146E51CF9000F007C117D;
  148 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  149 + projectDirPath = "";
  150 + projectRoot = "";
  151 + targets = (
  152 + 97C146ED1CF9000F007C117D /* Runner */,
  153 + );
  154 + };
  155 +/* End PBXProject section */
  156 +
  157 +/* Begin PBXResourcesBuildPhase section */
  158 + 97C146EC1CF9000F007C117D /* Resources */ = {
  159 + isa = PBXResourcesBuildPhase;
  160 + buildActionMask = 2147483647;
  161 + files = (
  162 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  163 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  164 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  165 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  166 + );
  167 + runOnlyForDeploymentPostprocessing = 0;
  168 + };
  169 +/* End PBXResourcesBuildPhase section */
  170 +
  171 +/* Begin PBXShellScriptBuildPhase section */
  172 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  173 + isa = PBXShellScriptBuildPhase;
  174 + buildActionMask = 2147483647;
  175 + files = (
  176 + );
  177 + inputPaths = (
  178 + );
  179 + name = "Thin Binary";
  180 + outputPaths = (
  181 + );
  182 + runOnlyForDeploymentPostprocessing = 0;
  183 + shellPath = /bin/sh;
  184 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  185 + };
  186 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  187 + isa = PBXShellScriptBuildPhase;
  188 + buildActionMask = 2147483647;
  189 + files = (
  190 + );
  191 + inputPaths = (
  192 + );
  193 + name = "Run Script";
  194 + outputPaths = (
  195 + );
  196 + runOnlyForDeploymentPostprocessing = 0;
  197 + shellPath = /bin/sh;
  198 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  199 + };
  200 +/* End PBXShellScriptBuildPhase section */
  201 +
  202 +/* Begin PBXSourcesBuildPhase section */
  203 + 97C146EA1CF9000F007C117D /* Sources */ = {
  204 + isa = PBXSourcesBuildPhase;
  205 + buildActionMask = 2147483647;
  206 + files = (
  207 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
  208 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  209 + );
  210 + runOnlyForDeploymentPostprocessing = 0;
  211 + };
  212 +/* End PBXSourcesBuildPhase section */
  213 +
  214 +/* Begin PBXVariantGroup section */
  215 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  216 + isa = PBXVariantGroup;
  217 + children = (
  218 + 97C146FB1CF9000F007C117D /* Base */,
  219 + );
  220 + name = Main.storyboard;
  221 + sourceTree = "<group>";
  222 + };
  223 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  224 + isa = PBXVariantGroup;
  225 + children = (
  226 + 97C147001CF9000F007C117D /* Base */,
  227 + );
  228 + name = LaunchScreen.storyboard;
  229 + sourceTree = "<group>";
  230 + };
  231 +/* End PBXVariantGroup section */
  232 +
  233 +/* Begin XCBuildConfiguration section */
  234 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  235 + isa = XCBuildConfiguration;
  236 + buildSettings = {
  237 + ALWAYS_SEARCH_USER_PATHS = NO;
  238 + CLANG_ANALYZER_NONNULL = YES;
  239 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  240 + CLANG_CXX_LIBRARY = "libc++";
  241 + CLANG_ENABLE_MODULES = YES;
  242 + CLANG_ENABLE_OBJC_ARC = YES;
  243 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  244 + CLANG_WARN_BOOL_CONVERSION = YES;
  245 + CLANG_WARN_COMMA = YES;
  246 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  247 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  248 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  249 + CLANG_WARN_EMPTY_BODY = YES;
  250 + CLANG_WARN_ENUM_CONVERSION = YES;
  251 + CLANG_WARN_INFINITE_RECURSION = YES;
  252 + CLANG_WARN_INT_CONVERSION = YES;
  253 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  254 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  255 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  256 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  257 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  258 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  259 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  260 + CLANG_WARN_UNREACHABLE_CODE = YES;
  261 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  262 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  263 + COPY_PHASE_STRIP = NO;
  264 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  265 + ENABLE_NS_ASSERTIONS = NO;
  266 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  267 + GCC_C_LANGUAGE_STANDARD = gnu99;
  268 + GCC_NO_COMMON_BLOCKS = YES;
  269 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  270 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  271 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  272 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  273 + GCC_WARN_UNUSED_FUNCTION = YES;
  274 + GCC_WARN_UNUSED_VARIABLE = YES;
  275 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  276 + MTL_ENABLE_DEBUG_INFO = NO;
  277 + SDKROOT = iphoneos;
  278 + SUPPORTED_PLATFORMS = iphoneos;
  279 + TARGETED_DEVICE_FAMILY = "1,2";
  280 + VALIDATE_PRODUCT = YES;
  281 + };
  282 + name = Profile;
  283 + };
  284 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  285 + isa = XCBuildConfiguration;
  286 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  287 + buildSettings = {
  288 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  289 + CLANG_ENABLE_MODULES = YES;
  290 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  291 + DEVELOPMENT_TEAM = 3K8Q7WKS3W;
  292 + ENABLE_BITCODE = NO;
  293 + INFOPLIST_FILE = Runner/Info.plist;
  294 + LD_RUNPATH_SEARCH_PATHS = (
  295 + "$(inherited)",
  296 + "@executable_path/Frameworks",
  297 + );
  298 + PRODUCT_BUNDLE_IDENTIFIER = dev.steenbakker.mobileScannerExample;
  299 + PRODUCT_NAME = "$(TARGET_NAME)";
  300 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  301 + SWIFT_VERSION = 5.0;
  302 + VERSIONING_SYSTEM = "apple-generic";
  303 + };
  304 + name = Profile;
  305 + };
  306 + 97C147031CF9000F007C117D /* Debug */ = {
  307 + isa = XCBuildConfiguration;
  308 + buildSettings = {
  309 + ALWAYS_SEARCH_USER_PATHS = NO;
  310 + CLANG_ANALYZER_NONNULL = YES;
  311 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  312 + CLANG_CXX_LIBRARY = "libc++";
  313 + CLANG_ENABLE_MODULES = YES;
  314 + CLANG_ENABLE_OBJC_ARC = YES;
  315 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  316 + CLANG_WARN_BOOL_CONVERSION = YES;
  317 + CLANG_WARN_COMMA = YES;
  318 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  319 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  320 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  321 + CLANG_WARN_EMPTY_BODY = YES;
  322 + CLANG_WARN_ENUM_CONVERSION = YES;
  323 + CLANG_WARN_INFINITE_RECURSION = YES;
  324 + CLANG_WARN_INT_CONVERSION = YES;
  325 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  326 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  327 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  328 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  329 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  330 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  331 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  332 + CLANG_WARN_UNREACHABLE_CODE = YES;
  333 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  334 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  335 + COPY_PHASE_STRIP = NO;
  336 + DEBUG_INFORMATION_FORMAT = dwarf;
  337 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  338 + ENABLE_TESTABILITY = YES;
  339 + GCC_C_LANGUAGE_STANDARD = gnu99;
  340 + GCC_DYNAMIC_NO_PIC = NO;
  341 + GCC_NO_COMMON_BLOCKS = YES;
  342 + GCC_OPTIMIZATION_LEVEL = 0;
  343 + GCC_PREPROCESSOR_DEFINITIONS = (
  344 + "DEBUG=1",
  345 + "$(inherited)",
  346 + );
  347 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  348 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  349 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  350 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  351 + GCC_WARN_UNUSED_FUNCTION = YES;
  352 + GCC_WARN_UNUSED_VARIABLE = YES;
  353 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  354 + MTL_ENABLE_DEBUG_INFO = YES;
  355 + ONLY_ACTIVE_ARCH = YES;
  356 + SDKROOT = iphoneos;
  357 + TARGETED_DEVICE_FAMILY = "1,2";
  358 + };
  359 + name = Debug;
  360 + };
  361 + 97C147041CF9000F007C117D /* Release */ = {
  362 + isa = XCBuildConfiguration;
  363 + buildSettings = {
  364 + ALWAYS_SEARCH_USER_PATHS = NO;
  365 + CLANG_ANALYZER_NONNULL = YES;
  366 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  367 + CLANG_CXX_LIBRARY = "libc++";
  368 + CLANG_ENABLE_MODULES = YES;
  369 + CLANG_ENABLE_OBJC_ARC = YES;
  370 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  371 + CLANG_WARN_BOOL_CONVERSION = YES;
  372 + CLANG_WARN_COMMA = YES;
  373 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  374 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  375 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  376 + CLANG_WARN_EMPTY_BODY = YES;
  377 + CLANG_WARN_ENUM_CONVERSION = YES;
  378 + CLANG_WARN_INFINITE_RECURSION = YES;
  379 + CLANG_WARN_INT_CONVERSION = YES;
  380 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  381 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  382 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  383 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  384 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  385 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  386 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  387 + CLANG_WARN_UNREACHABLE_CODE = YES;
  388 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  389 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  390 + COPY_PHASE_STRIP = NO;
  391 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  392 + ENABLE_NS_ASSERTIONS = NO;
  393 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  394 + GCC_C_LANGUAGE_STANDARD = gnu99;
  395 + GCC_NO_COMMON_BLOCKS = YES;
  396 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  397 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  398 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  399 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  400 + GCC_WARN_UNUSED_FUNCTION = YES;
  401 + GCC_WARN_UNUSED_VARIABLE = YES;
  402 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  403 + MTL_ENABLE_DEBUG_INFO = NO;
  404 + SDKROOT = iphoneos;
  405 + SUPPORTED_PLATFORMS = iphoneos;
  406 + SWIFT_COMPILATION_MODE = wholemodule;
  407 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  408 + TARGETED_DEVICE_FAMILY = "1,2";
  409 + VALIDATE_PRODUCT = YES;
  410 + };
  411 + name = Release;
  412 + };
  413 + 97C147061CF9000F007C117D /* Debug */ = {
  414 + isa = XCBuildConfiguration;
  415 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  416 + buildSettings = {
  417 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  418 + CLANG_ENABLE_MODULES = YES;
  419 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  420 + DEVELOPMENT_TEAM = 3K8Q7WKS3W;
  421 + ENABLE_BITCODE = NO;
  422 + INFOPLIST_FILE = Runner/Info.plist;
  423 + LD_RUNPATH_SEARCH_PATHS = (
  424 + "$(inherited)",
  425 + "@executable_path/Frameworks",
  426 + );
  427 + PRODUCT_BUNDLE_IDENTIFIER = dev.steenbakker.mobileScannerExample;
  428 + PRODUCT_NAME = "$(TARGET_NAME)";
  429 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  430 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  431 + SWIFT_VERSION = 5.0;
  432 + VERSIONING_SYSTEM = "apple-generic";
  433 + };
  434 + name = Debug;
  435 + };
  436 + 97C147071CF9000F007C117D /* Release */ = {
  437 + isa = XCBuildConfiguration;
  438 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  439 + buildSettings = {
  440 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  441 + CLANG_ENABLE_MODULES = YES;
  442 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  443 + DEVELOPMENT_TEAM = 3K8Q7WKS3W;
  444 + ENABLE_BITCODE = NO;
  445 + INFOPLIST_FILE = Runner/Info.plist;
  446 + LD_RUNPATH_SEARCH_PATHS = (
  447 + "$(inherited)",
  448 + "@executable_path/Frameworks",
  449 + );
  450 + PRODUCT_BUNDLE_IDENTIFIER = dev.steenbakker.mobileScannerExample;
  451 + PRODUCT_NAME = "$(TARGET_NAME)";
  452 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  453 + SWIFT_VERSION = 5.0;
  454 + VERSIONING_SYSTEM = "apple-generic";
  455 + };
  456 + name = Release;
  457 + };
  458 +/* End XCBuildConfiguration section */
  459 +
  460 +/* Begin XCConfigurationList section */
  461 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  462 + isa = XCConfigurationList;
  463 + buildConfigurations = (
  464 + 97C147031CF9000F007C117D /* Debug */,
  465 + 97C147041CF9000F007C117D /* Release */,
  466 + 249021D3217E4FDB00AE95B9 /* Profile */,
  467 + );
  468 + defaultConfigurationIsVisible = 0;
  469 + defaultConfigurationName = Release;
  470 + };
  471 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  472 + isa = XCConfigurationList;
  473 + buildConfigurations = (
  474 + 97C147061CF9000F007C117D /* Debug */,
  475 + 97C147071CF9000F007C117D /* Release */,
  476 + 249021D4217E4FDB00AE95B9 /* Profile */,
  477 + );
  478 + defaultConfigurationIsVisible = 0;
  479 + defaultConfigurationName = Release;
  480 + };
  481 +/* End XCConfigurationList section */
  482 + };
  483 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  484 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1300"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <MacroExpansion>
  31 + <BuildableReference
  32 + BuildableIdentifier = "primary"
  33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  34 + BuildableName = "Runner.app"
  35 + BlueprintName = "Runner"
  36 + ReferencedContainer = "container:Runner.xcodeproj">
  37 + </BuildableReference>
  38 + </MacroExpansion>
  39 + <Testables>
  40 + </Testables>
  41 + </TestAction>
  42 + <LaunchAction
  43 + buildConfiguration = "Debug"
  44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  46 + launchStyle = "0"
  47 + useCustomWorkingDirectory = "NO"
  48 + ignoresPersistentStateOnLaunch = "NO"
  49 + debugDocumentVersioning = "YES"
  50 + debugServiceExtension = "internal"
  51 + allowLocationSimulation = "YES">
  52 + <BuildableProductRunnable
  53 + runnableDebuggingMode = "0">
  54 + <BuildableReference
  55 + BuildableIdentifier = "primary"
  56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  57 + BuildableName = "Runner.app"
  58 + BlueprintName = "Runner"
  59 + ReferencedContainer = "container:Runner.xcodeproj">
  60 + </BuildableReference>
  61 + </BuildableProductRunnable>
  62 + </LaunchAction>
  63 + <ProfileAction
  64 + buildConfiguration = "Profile"
  65 + shouldUseLaunchSchemeArgsEnv = "YES"
  66 + savedToolIdentifier = ""
  67 + useCustomWorkingDirectory = "NO"
  68 + debugDocumentVersioning = "YES">
  69 + <BuildableProductRunnable
  70 + runnableDebuggingMode = "0">
  71 + <BuildableReference
  72 + BuildableIdentifier = "primary"
  73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  74 + BuildableName = "Runner.app"
  75 + BlueprintName = "Runner"
  76 + ReferencedContainer = "container:Runner.xcodeproj">
  77 + </BuildableReference>
  78 + </BuildableProductRunnable>
  79 + </ProfileAction>
  80 + <AnalyzeAction
  81 + buildConfiguration = "Debug">
  82 + </AnalyzeAction>
  83 + <ArchiveAction
  84 + buildConfiguration = "Release"
  85 + revealArchiveInOrganizer = "YES">
  86 + </ArchiveAction>
  87 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  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 +}
  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 +}
  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 +}
  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.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleDisplayName</key>
  8 + <string>Mobile Scanner</string>
  9 + <key>CFBundleExecutable</key>
  10 + <string>$(EXECUTABLE_NAME)</string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>mobile_scanner_example</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>$(FLUTTER_BUILD_NAME)</string>
  21 + <key>CFBundleSignature</key>
  22 + <string>????</string>
  23 + <key>CFBundleVersion</key>
  24 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  25 + <key>LSRequiresIPhoneOS</key>
  26 + <true/>
  27 + <key>UILaunchStoryboardName</key>
  28 + <string>LaunchScreen</string>
  29 + <key>UIMainStoryboardFile</key>
  30 + <string>Main</string>
  31 + <key>UISupportedInterfaceOrientations</key>
  32 + <array>
  33 + <string>UIInterfaceOrientationPortrait</string>
  34 + <string>UIInterfaceOrientationLandscapeLeft</string>
  35 + <string>UIInterfaceOrientationLandscapeRight</string>
  36 + </array>
  37 + <key>UISupportedInterfaceOrientations~ipad</key>
  38 + <array>
  39 + <string>UIInterfaceOrientationPortrait</string>
  40 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  41 + <string>UIInterfaceOrientationLandscapeLeft</string>
  42 + <string>UIInterfaceOrientationLandscapeRight</string>
  43 + </array>
  44 + <key>UIViewControllerBasedStatusBarAppearance</key>
  45 + <false/>
  46 +</dict>
  47 +</plist>
  1 +#import "GeneratedPluginRegistrant.h"
  1 +import 'package:flutter/material.dart';
  2 +import 'dart:async';
  3 +
  4 +import 'package:flutter/services.dart';
  5 +import 'package:mobile_scanner/mobile_scanner.dart';
  6 +
  7 +void main() {
  8 + runApp(const MyApp());
  9 +}
  10 +
  11 +class MyApp extends StatefulWidget {
  12 + const MyApp({Key? key}) : super(key: key);
  13 +
  14 + @override
  15 + State<MyApp> createState() => _MyAppState();
  16 +}
  17 +
  18 +class _MyAppState extends State<MyApp> {
  19 + String _platformVersion = 'Unknown';
  20 +
  21 + @override
  22 + void initState() {
  23 + super.initState();
  24 + initPlatformState();
  25 + }
  26 +
  27 + // Platform messages are asynchronous, so we initialize in an async method.
  28 + Future<void> initPlatformState() async {
  29 + String platformVersion;
  30 + // Platform messages may fail, so we use a try/catch PlatformException.
  31 + // We also handle the message potentially returning null.
  32 + try {
  33 + platformVersion =
  34 + await MobileScanner.platformVersion ?? 'Unknown platform version';
  35 + } on PlatformException {
  36 + platformVersion = 'Failed to get platform version.';
  37 + }
  38 +
  39 + // If the widget was removed from the tree while the asynchronous platform
  40 + // message was in flight, we want to discard the reply rather than calling
  41 + // setState to update our non-existent appearance.
  42 + if (!mounted) return;
  43 +
  44 + setState(() {
  45 + _platformVersion = platformVersion;
  46 + });
  47 + }
  48 +
  49 + @override
  50 + Widget build(BuildContext context) {
  51 + return MaterialApp(
  52 + home: Scaffold(
  53 + appBar: AppBar(
  54 + title: const Text('Plugin example app'),
  55 + ),
  56 + body: Center(
  57 + child: Text('Running on: $_platformVersion\n'),
  58 + ),
  59 + ),
  60 + );
  61 + }
  62 +}
  1 +# Flutter-related
  2 +**/Flutter/ephemeral/
  3 +**/Pods/
  4 +
  5 +# Xcode-related
  6 +**/dgph
  7 +**/xcuserdata/
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "ephemeral/Flutter-Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "ephemeral/Flutter-Generated.xcconfig"
  1 +platform :osx, '10.11'
  2 +
  3 +# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
  4 +ENV['COCOAPODS_DISABLE_STATS'] = 'true'
  5 +
  6 +project 'Runner', {
  7 + 'Debug' => :debug,
  8 + 'Profile' => :release,
  9 + 'Release' => :release,
  10 +}
  11 +
  12 +def flutter_root
  13 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
  14 + unless File.exist?(generated_xcode_build_settings_path)
  15 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
  16 + end
  17 +
  18 + File.foreach(generated_xcode_build_settings_path) do |line|
  19 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  20 + return matches[1].strip if matches
  21 + end
  22 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
  23 +end
  24 +
  25 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  26 +
  27 +flutter_macos_podfile_setup
  28 +
  29 +target 'Runner' do
  30 + use_frameworks!
  31 + use_modular_headers!
  32 +
  33 + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
  34 +end
  35 +
  36 +post_install do |installer|
  37 + installer.pods_project.targets.each do |target|
  38 + flutter_additional_macos_build_settings(target)
  39 + end
  40 +end
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 51;
  7 + objects = {
  8 +
  9 +/* Begin PBXAggregateTarget section */
  10 + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
  11 + isa = PBXAggregateTarget;
  12 + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
  13 + buildPhases = (
  14 + 33CC111E2044C6BF0003C045 /* ShellScript */,
  15 + );
  16 + dependencies = (
  17 + );
  18 + name = "Flutter Assemble";
  19 + productName = FLX;
  20 + };
  21 +/* End PBXAggregateTarget section */
  22 +
  23 +/* Begin PBXBuildFile section */
  24 + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
  25 + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
  26 + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
  27 + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
  28 + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
  29 +/* End PBXBuildFile section */
  30 +
  31 +/* Begin PBXContainerItemProxy section */
  32 + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
  33 + isa = PBXContainerItemProxy;
  34 + containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
  35 + proxyType = 1;
  36 + remoteGlobalIDString = 33CC111A2044C6BA0003C045;
  37 + remoteInfo = FLX;
  38 + };
  39 +/* End PBXContainerItemProxy section */
  40 +
  41 +/* Begin PBXCopyFilesBuildPhase section */
  42 + 33CC110E2044A8840003C045 /* Bundle Framework */ = {
  43 + isa = PBXCopyFilesBuildPhase;
  44 + buildActionMask = 2147483647;
  45 + dstPath = "";
  46 + dstSubfolderSpec = 10;
  47 + files = (
  48 + );
  49 + name = "Bundle Framework";
  50 + runOnlyForDeploymentPostprocessing = 0;
  51 + };
  52 +/* End PBXCopyFilesBuildPhase section */
  53 +
  54 +/* Begin PBXFileReference section */
  55 + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
  56 + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
  57 + 33CC10ED2044A3C60003C045 /* mobile_scanner_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "mobile_scanner_example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
  58 + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  59 + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
  60 + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
  61 + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; };
  62 + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; };
  63 + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
  64 + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
  65 + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
  66 + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
  67 + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
  68 + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
  69 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
  70 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
  71 +/* End PBXFileReference section */
  72 +
  73 +/* Begin PBXFrameworksBuildPhase section */
  74 + 33CC10EA2044A3C60003C045 /* Frameworks */ = {
  75 + isa = PBXFrameworksBuildPhase;
  76 + buildActionMask = 2147483647;
  77 + files = (
  78 + );
  79 + runOnlyForDeploymentPostprocessing = 0;
  80 + };
  81 +/* End PBXFrameworksBuildPhase section */
  82 +
  83 +/* Begin PBXGroup section */
  84 + 33BA886A226E78AF003329D5 /* Configs */ = {
  85 + isa = PBXGroup;
  86 + children = (
  87 + 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
  88 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  89 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  90 + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
  91 + );
  92 + path = Configs;
  93 + sourceTree = "<group>";
  94 + };
  95 + 33CC10E42044A3C60003C045 = {
  96 + isa = PBXGroup;
  97 + children = (
  98 + 33FAB671232836740065AC1E /* Runner */,
  99 + 33CEB47122A05771004F2AC0 /* Flutter */,
  100 + 33CC10EE2044A3C60003C045 /* Products */,
  101 + D73912EC22F37F3D000D13A0 /* Frameworks */,
  102 + );
  103 + sourceTree = "<group>";
  104 + };
  105 + 33CC10EE2044A3C60003C045 /* Products */ = {
  106 + isa = PBXGroup;
  107 + children = (
  108 + 33CC10ED2044A3C60003C045 /* mobile_scanner_example.app */,
  109 + );
  110 + name = Products;
  111 + sourceTree = "<group>";
  112 + };
  113 + 33CC11242044D66E0003C045 /* Resources */ = {
  114 + isa = PBXGroup;
  115 + children = (
  116 + 33CC10F22044A3C60003C045 /* Assets.xcassets */,
  117 + 33CC10F42044A3C60003C045 /* MainMenu.xib */,
  118 + 33CC10F72044A3C60003C045 /* Info.plist */,
  119 + );
  120 + name = Resources;
  121 + path = ..;
  122 + sourceTree = "<group>";
  123 + };
  124 + 33CEB47122A05771004F2AC0 /* Flutter */ = {
  125 + isa = PBXGroup;
  126 + children = (
  127 + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
  128 + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
  129 + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
  130 + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
  131 + );
  132 + path = Flutter;
  133 + sourceTree = "<group>";
  134 + };
  135 + 33FAB671232836740065AC1E /* Runner */ = {
  136 + isa = PBXGroup;
  137 + children = (
  138 + 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
  139 + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
  140 + 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
  141 + 33E51914231749380026EE4D /* Release.entitlements */,
  142 + 33CC11242044D66E0003C045 /* Resources */,
  143 + 33BA886A226E78AF003329D5 /* Configs */,
  144 + );
  145 + path = Runner;
  146 + sourceTree = "<group>";
  147 + };
  148 + D73912EC22F37F3D000D13A0 /* Frameworks */ = {
  149 + isa = PBXGroup;
  150 + children = (
  151 + );
  152 + name = Frameworks;
  153 + sourceTree = "<group>";
  154 + };
  155 +/* End PBXGroup section */
  156 +
  157 +/* Begin PBXNativeTarget section */
  158 + 33CC10EC2044A3C60003C045 /* Runner */ = {
  159 + isa = PBXNativeTarget;
  160 + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
  161 + buildPhases = (
  162 + 33CC10E92044A3C60003C045 /* Sources */,
  163 + 33CC10EA2044A3C60003C045 /* Frameworks */,
  164 + 33CC10EB2044A3C60003C045 /* Resources */,
  165 + 33CC110E2044A8840003C045 /* Bundle Framework */,
  166 + 3399D490228B24CF009A79C7 /* ShellScript */,
  167 + );
  168 + buildRules = (
  169 + );
  170 + dependencies = (
  171 + 33CC11202044C79F0003C045 /* PBXTargetDependency */,
  172 + );
  173 + name = Runner;
  174 + productName = Runner;
  175 + productReference = 33CC10ED2044A3C60003C045 /* mobile_scanner_example.app */;
  176 + productType = "com.apple.product-type.application";
  177 + };
  178 +/* End PBXNativeTarget section */
  179 +
  180 +/* Begin PBXProject section */
  181 + 33CC10E52044A3C60003C045 /* Project object */ = {
  182 + isa = PBXProject;
  183 + attributes = {
  184 + LastSwiftUpdateCheck = 0920;
  185 + LastUpgradeCheck = 1300;
  186 + ORGANIZATIONNAME = "";
  187 + TargetAttributes = {
  188 + 33CC10EC2044A3C60003C045 = {
  189 + CreatedOnToolsVersion = 9.2;
  190 + LastSwiftMigration = 1100;
  191 + ProvisioningStyle = Automatic;
  192 + SystemCapabilities = {
  193 + com.apple.Sandbox = {
  194 + enabled = 1;
  195 + };
  196 + };
  197 + };
  198 + 33CC111A2044C6BA0003C045 = {
  199 + CreatedOnToolsVersion = 9.2;
  200 + ProvisioningStyle = Manual;
  201 + };
  202 + };
  203 + };
  204 + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
  205 + compatibilityVersion = "Xcode 9.3";
  206 + developmentRegion = en;
  207 + hasScannedForEncodings = 0;
  208 + knownRegions = (
  209 + en,
  210 + Base,
  211 + );
  212 + mainGroup = 33CC10E42044A3C60003C045;
  213 + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
  214 + projectDirPath = "";
  215 + projectRoot = "";
  216 + targets = (
  217 + 33CC10EC2044A3C60003C045 /* Runner */,
  218 + 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
  219 + );
  220 + };
  221 +/* End PBXProject section */
  222 +
  223 +/* Begin PBXResourcesBuildPhase section */
  224 + 33CC10EB2044A3C60003C045 /* Resources */ = {
  225 + isa = PBXResourcesBuildPhase;
  226 + buildActionMask = 2147483647;
  227 + files = (
  228 + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
  229 + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
  230 + );
  231 + runOnlyForDeploymentPostprocessing = 0;
  232 + };
  233 +/* End PBXResourcesBuildPhase section */
  234 +
  235 +/* Begin PBXShellScriptBuildPhase section */
  236 + 3399D490228B24CF009A79C7 /* ShellScript */ = {
  237 + isa = PBXShellScriptBuildPhase;
  238 + buildActionMask = 2147483647;
  239 + files = (
  240 + );
  241 + inputFileListPaths = (
  242 + );
  243 + inputPaths = (
  244 + );
  245 + outputFileListPaths = (
  246 + );
  247 + outputPaths = (
  248 + );
  249 + runOnlyForDeploymentPostprocessing = 0;
  250 + shellPath = /bin/sh;
  251 + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
  252 + };
  253 + 33CC111E2044C6BF0003C045 /* ShellScript */ = {
  254 + isa = PBXShellScriptBuildPhase;
  255 + buildActionMask = 2147483647;
  256 + files = (
  257 + );
  258 + inputFileListPaths = (
  259 + Flutter/ephemeral/FlutterInputs.xcfilelist,
  260 + );
  261 + inputPaths = (
  262 + Flutter/ephemeral/tripwire,
  263 + );
  264 + outputFileListPaths = (
  265 + Flutter/ephemeral/FlutterOutputs.xcfilelist,
  266 + );
  267 + outputPaths = (
  268 + );
  269 + runOnlyForDeploymentPostprocessing = 0;
  270 + shellPath = /bin/sh;
  271 + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
  272 + };
  273 +/* End PBXShellScriptBuildPhase section */
  274 +
  275 +/* Begin PBXSourcesBuildPhase section */
  276 + 33CC10E92044A3C60003C045 /* Sources */ = {
  277 + isa = PBXSourcesBuildPhase;
  278 + buildActionMask = 2147483647;
  279 + files = (
  280 + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
  281 + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
  282 + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
  283 + );
  284 + runOnlyForDeploymentPostprocessing = 0;
  285 + };
  286 +/* End PBXSourcesBuildPhase section */
  287 +
  288 +/* Begin PBXTargetDependency section */
  289 + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
  290 + isa = PBXTargetDependency;
  291 + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
  292 + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
  293 + };
  294 +/* End PBXTargetDependency section */
  295 +
  296 +/* Begin PBXVariantGroup section */
  297 + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
  298 + isa = PBXVariantGroup;
  299 + children = (
  300 + 33CC10F52044A3C60003C045 /* Base */,
  301 + );
  302 + name = MainMenu.xib;
  303 + path = Runner;
  304 + sourceTree = "<group>";
  305 + };
  306 +/* End PBXVariantGroup section */
  307 +
  308 +/* Begin XCBuildConfiguration section */
  309 + 338D0CE9231458BD00FA5F75 /* Profile */ = {
  310 + isa = XCBuildConfiguration;
  311 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  312 + buildSettings = {
  313 + ALWAYS_SEARCH_USER_PATHS = NO;
  314 + CLANG_ANALYZER_NONNULL = YES;
  315 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  316 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  317 + CLANG_CXX_LIBRARY = "libc++";
  318 + CLANG_ENABLE_MODULES = YES;
  319 + CLANG_ENABLE_OBJC_ARC = YES;
  320 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  321 + CLANG_WARN_BOOL_CONVERSION = YES;
  322 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  323 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  324 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  325 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  326 + CLANG_WARN_EMPTY_BODY = YES;
  327 + CLANG_WARN_ENUM_CONVERSION = YES;
  328 + CLANG_WARN_INFINITE_RECURSION = YES;
  329 + CLANG_WARN_INT_CONVERSION = YES;
  330 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  331 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  332 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  333 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  334 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  335 + CODE_SIGN_IDENTITY = "-";
  336 + COPY_PHASE_STRIP = NO;
  337 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  338 + ENABLE_NS_ASSERTIONS = NO;
  339 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  340 + GCC_C_LANGUAGE_STANDARD = gnu11;
  341 + GCC_NO_COMMON_BLOCKS = YES;
  342 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  343 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  344 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  345 + GCC_WARN_UNUSED_FUNCTION = YES;
  346 + GCC_WARN_UNUSED_VARIABLE = YES;
  347 + MACOSX_DEPLOYMENT_TARGET = 10.11;
  348 + MTL_ENABLE_DEBUG_INFO = NO;
  349 + SDKROOT = macosx;
  350 + SWIFT_COMPILATION_MODE = wholemodule;
  351 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  352 + };
  353 + name = Profile;
  354 + };
  355 + 338D0CEA231458BD00FA5F75 /* Profile */ = {
  356 + isa = XCBuildConfiguration;
  357 + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
  358 + buildSettings = {
  359 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  360 + CLANG_ENABLE_MODULES = YES;
  361 + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
  362 + CODE_SIGN_STYLE = Automatic;
  363 + COMBINE_HIDPI_IMAGES = YES;
  364 + INFOPLIST_FILE = Runner/Info.plist;
  365 + LD_RUNPATH_SEARCH_PATHS = (
  366 + "$(inherited)",
  367 + "@executable_path/../Frameworks",
  368 + );
  369 + PROVISIONING_PROFILE_SPECIFIER = "";
  370 + SWIFT_VERSION = 5.0;
  371 + };
  372 + name = Profile;
  373 + };
  374 + 338D0CEB231458BD00FA5F75 /* Profile */ = {
  375 + isa = XCBuildConfiguration;
  376 + buildSettings = {
  377 + CODE_SIGN_STYLE = Manual;
  378 + PRODUCT_NAME = "$(TARGET_NAME)";
  379 + };
  380 + name = Profile;
  381 + };
  382 + 33CC10F92044A3C60003C045 /* Debug */ = {
  383 + isa = XCBuildConfiguration;
  384 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  385 + buildSettings = {
  386 + ALWAYS_SEARCH_USER_PATHS = NO;
  387 + CLANG_ANALYZER_NONNULL = YES;
  388 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  389 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  390 + CLANG_CXX_LIBRARY = "libc++";
  391 + CLANG_ENABLE_MODULES = YES;
  392 + CLANG_ENABLE_OBJC_ARC = YES;
  393 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  394 + CLANG_WARN_BOOL_CONVERSION = YES;
  395 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  396 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  397 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  398 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  399 + CLANG_WARN_EMPTY_BODY = YES;
  400 + CLANG_WARN_ENUM_CONVERSION = YES;
  401 + CLANG_WARN_INFINITE_RECURSION = YES;
  402 + CLANG_WARN_INT_CONVERSION = YES;
  403 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  404 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  405 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  406 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  407 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  408 + CODE_SIGN_IDENTITY = "-";
  409 + COPY_PHASE_STRIP = NO;
  410 + DEBUG_INFORMATION_FORMAT = dwarf;
  411 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  412 + ENABLE_TESTABILITY = YES;
  413 + GCC_C_LANGUAGE_STANDARD = gnu11;
  414 + GCC_DYNAMIC_NO_PIC = NO;
  415 + GCC_NO_COMMON_BLOCKS = YES;
  416 + GCC_OPTIMIZATION_LEVEL = 0;
  417 + GCC_PREPROCESSOR_DEFINITIONS = (
  418 + "DEBUG=1",
  419 + "$(inherited)",
  420 + );
  421 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  422 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  423 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  424 + GCC_WARN_UNUSED_FUNCTION = YES;
  425 + GCC_WARN_UNUSED_VARIABLE = YES;
  426 + MACOSX_DEPLOYMENT_TARGET = 10.11;
  427 + MTL_ENABLE_DEBUG_INFO = YES;
  428 + ONLY_ACTIVE_ARCH = YES;
  429 + SDKROOT = macosx;
  430 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
  431 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  432 + };
  433 + name = Debug;
  434 + };
  435 + 33CC10FA2044A3C60003C045 /* Release */ = {
  436 + isa = XCBuildConfiguration;
  437 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  438 + buildSettings = {
  439 + ALWAYS_SEARCH_USER_PATHS = NO;
  440 + CLANG_ANALYZER_NONNULL = YES;
  441 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  442 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  443 + CLANG_CXX_LIBRARY = "libc++";
  444 + CLANG_ENABLE_MODULES = YES;
  445 + CLANG_ENABLE_OBJC_ARC = YES;
  446 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  447 + CLANG_WARN_BOOL_CONVERSION = YES;
  448 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  449 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  450 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  451 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  452 + CLANG_WARN_EMPTY_BODY = YES;
  453 + CLANG_WARN_ENUM_CONVERSION = YES;
  454 + CLANG_WARN_INFINITE_RECURSION = YES;
  455 + CLANG_WARN_INT_CONVERSION = YES;
  456 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  457 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  458 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  459 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  460 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  461 + CODE_SIGN_IDENTITY = "-";
  462 + COPY_PHASE_STRIP = NO;
  463 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  464 + ENABLE_NS_ASSERTIONS = NO;
  465 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  466 + GCC_C_LANGUAGE_STANDARD = gnu11;
  467 + GCC_NO_COMMON_BLOCKS = YES;
  468 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  469 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  470 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  471 + GCC_WARN_UNUSED_FUNCTION = YES;
  472 + GCC_WARN_UNUSED_VARIABLE = YES;
  473 + MACOSX_DEPLOYMENT_TARGET = 10.11;
  474 + MTL_ENABLE_DEBUG_INFO = NO;
  475 + SDKROOT = macosx;
  476 + SWIFT_COMPILATION_MODE = wholemodule;
  477 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  478 + };
  479 + name = Release;
  480 + };
  481 + 33CC10FC2044A3C60003C045 /* Debug */ = {
  482 + isa = XCBuildConfiguration;
  483 + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
  484 + buildSettings = {
  485 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  486 + CLANG_ENABLE_MODULES = YES;
  487 + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
  488 + CODE_SIGN_STYLE = Automatic;
  489 + COMBINE_HIDPI_IMAGES = YES;
  490 + INFOPLIST_FILE = Runner/Info.plist;
  491 + LD_RUNPATH_SEARCH_PATHS = (
  492 + "$(inherited)",
  493 + "@executable_path/../Frameworks",
  494 + );
  495 + PROVISIONING_PROFILE_SPECIFIER = "";
  496 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  497 + SWIFT_VERSION = 5.0;
  498 + };
  499 + name = Debug;
  500 + };
  501 + 33CC10FD2044A3C60003C045 /* Release */ = {
  502 + isa = XCBuildConfiguration;
  503 + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
  504 + buildSettings = {
  505 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  506 + CLANG_ENABLE_MODULES = YES;
  507 + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
  508 + CODE_SIGN_STYLE = Automatic;
  509 + COMBINE_HIDPI_IMAGES = YES;
  510 + INFOPLIST_FILE = Runner/Info.plist;
  511 + LD_RUNPATH_SEARCH_PATHS = (
  512 + "$(inherited)",
  513 + "@executable_path/../Frameworks",
  514 + );
  515 + PROVISIONING_PROFILE_SPECIFIER = "";
  516 + SWIFT_VERSION = 5.0;
  517 + };
  518 + name = Release;
  519 + };
  520 + 33CC111C2044C6BA0003C045 /* Debug */ = {
  521 + isa = XCBuildConfiguration;
  522 + buildSettings = {
  523 + CODE_SIGN_STYLE = Manual;
  524 + PRODUCT_NAME = "$(TARGET_NAME)";
  525 + };
  526 + name = Debug;
  527 + };
  528 + 33CC111D2044C6BA0003C045 /* Release */ = {
  529 + isa = XCBuildConfiguration;
  530 + buildSettings = {
  531 + CODE_SIGN_STYLE = Automatic;
  532 + PRODUCT_NAME = "$(TARGET_NAME)";
  533 + };
  534 + name = Release;
  535 + };
  536 +/* End XCBuildConfiguration section */
  537 +
  538 +/* Begin XCConfigurationList section */
  539 + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
  540 + isa = XCConfigurationList;
  541 + buildConfigurations = (
  542 + 33CC10F92044A3C60003C045 /* Debug */,
  543 + 33CC10FA2044A3C60003C045 /* Release */,
  544 + 338D0CE9231458BD00FA5F75 /* Profile */,
  545 + );
  546 + defaultConfigurationIsVisible = 0;
  547 + defaultConfigurationName = Release;
  548 + };
  549 + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
  550 + isa = XCConfigurationList;
  551 + buildConfigurations = (
  552 + 33CC10FC2044A3C60003C045 /* Debug */,
  553 + 33CC10FD2044A3C60003C045 /* Release */,
  554 + 338D0CEA231458BD00FA5F75 /* Profile */,
  555 + );
  556 + defaultConfigurationIsVisible = 0;
  557 + defaultConfigurationName = Release;
  558 + };
  559 + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
  560 + isa = XCConfigurationList;
  561 + buildConfigurations = (
  562 + 33CC111C2044C6BA0003C045 /* Debug */,
  563 + 33CC111D2044C6BA0003C045 /* Release */,
  564 + 338D0CEB231458BD00FA5F75 /* Profile */,
  565 + );
  566 + defaultConfigurationIsVisible = 0;
  567 + defaultConfigurationName = Release;
  568 + };
  569 +/* End XCConfigurationList section */
  570 + };
  571 + rootObject = 33CC10E52044A3C60003C045 /* Project object */;
  572 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1300"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  18 + BuildableName = "mobile_scanner_example.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <MacroExpansion>
  31 + <BuildableReference
  32 + BuildableIdentifier = "primary"
  33 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  34 + BuildableName = "mobile_scanner_example.app"
  35 + BlueprintName = "Runner"
  36 + ReferencedContainer = "container:Runner.xcodeproj">
  37 + </BuildableReference>
  38 + </MacroExpansion>
  39 + <Testables>
  40 + </Testables>
  41 + </TestAction>
  42 + <LaunchAction
  43 + buildConfiguration = "Debug"
  44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  46 + launchStyle = "0"
  47 + useCustomWorkingDirectory = "NO"
  48 + ignoresPersistentStateOnLaunch = "NO"
  49 + debugDocumentVersioning = "YES"
  50 + debugServiceExtension = "internal"
  51 + allowLocationSimulation = "YES">
  52 + <BuildableProductRunnable
  53 + runnableDebuggingMode = "0">
  54 + <BuildableReference
  55 + BuildableIdentifier = "primary"
  56 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  57 + BuildableName = "mobile_scanner_example.app"
  58 + BlueprintName = "Runner"
  59 + ReferencedContainer = "container:Runner.xcodeproj">
  60 + </BuildableReference>
  61 + </BuildableProductRunnable>
  62 + </LaunchAction>
  63 + <ProfileAction
  64 + buildConfiguration = "Profile"
  65 + shouldUseLaunchSchemeArgsEnv = "YES"
  66 + savedToolIdentifier = ""
  67 + useCustomWorkingDirectory = "NO"
  68 + debugDocumentVersioning = "YES">
  69 + <BuildableProductRunnable
  70 + runnableDebuggingMode = "0">
  71 + <BuildableReference
  72 + BuildableIdentifier = "primary"
  73 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  74 + BuildableName = "mobile_scanner_example.app"
  75 + BlueprintName = "Runner"
  76 + ReferencedContainer = "container:Runner.xcodeproj">
  77 + </BuildableReference>
  78 + </BuildableProductRunnable>
  79 + </ProfileAction>
  80 + <AnalyzeAction
  81 + buildConfiguration = "Debug">
  82 + </AnalyzeAction>
  83 + <ArchiveAction
  84 + buildConfiguration = "Release"
  85 + revealArchiveInOrganizer = "YES">
  86 + </ArchiveAction>
  87 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +import Cocoa
  2 +import FlutterMacOS
  3 +
  4 +@NSApplicationMain
  5 +class AppDelegate: FlutterAppDelegate {
  6 + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
  7 + return true
  8 + }
  9 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "16x16",
  5 + "idiom" : "mac",
  6 + "filename" : "app_icon_16.png",
  7 + "scale" : "1x"
  8 + },
  9 + {
  10 + "size" : "16x16",
  11 + "idiom" : "mac",
  12 + "filename" : "app_icon_32.png",
  13 + "scale" : "2x"
  14 + },
  15 + {
  16 + "size" : "32x32",
  17 + "idiom" : "mac",
  18 + "filename" : "app_icon_32.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "32x32",
  23 + "idiom" : "mac",
  24 + "filename" : "app_icon_64.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "128x128",
  29 + "idiom" : "mac",
  30 + "filename" : "app_icon_128.png",
  31 + "scale" : "1x"
  32 + },
  33 + {
  34 + "size" : "128x128",
  35 + "idiom" : "mac",
  36 + "filename" : "app_icon_256.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "256x256",
  41 + "idiom" : "mac",
  42 + "filename" : "app_icon_256.png",
  43 + "scale" : "1x"
  44 + },
  45 + {
  46 + "size" : "256x256",
  47 + "idiom" : "mac",
  48 + "filename" : "app_icon_512.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "512x512",
  53 + "idiom" : "mac",
  54 + "filename" : "app_icon_512.png",
  55 + "scale" : "1x"
  56 + },
  57 + {
  58 + "size" : "512x512",
  59 + "idiom" : "mac",
  60 + "filename" : "app_icon_1024.png",
  61 + "scale" : "2x"
  62 + }
  63 + ],
  64 + "info" : {
  65 + "version" : 1,
  66 + "author" : "xcode"
  67 + }
  68 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
  3 + <dependencies>
  4 + <deployment identifier="macosx"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
  6 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
  7 + </dependencies>
  8 + <objects>
  9 + <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
  10 + <connections>
  11 + <outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
  12 + </connections>
  13 + </customObject>
  14 + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
  15 + <customObject id="-3" userLabel="Application" customClass="NSObject"/>
  16 + <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target">
  17 + <connections>
  18 + <outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/>
  19 + <outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
  20 + </connections>
  21 + </customObject>
  22 + <customObject id="YLy-65-1bz" customClass="NSFontManager"/>
  23 + <menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
  24 + <items>
  25 + <menuItem title="APP_NAME" id="1Xt-HY-uBw">
  26 + <modifierMask key="keyEquivalentModifierMask"/>
  27 + <menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr">
  28 + <items>
  29 + <menuItem title="About APP_NAME" id="5kV-Vb-QxS">
  30 + <modifierMask key="keyEquivalentModifierMask"/>
  31 + <connections>
  32 + <action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
  33 + </connections>
  34 + </menuItem>
  35 + <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
  36 + <menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
  37 + <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
  38 + <menuItem title="Services" id="NMo-om-nkz">
  39 + <modifierMask key="keyEquivalentModifierMask"/>
  40 + <menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
  41 + </menuItem>
  42 + <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
  43 + <menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN">
  44 + <connections>
  45 + <action selector="hide:" target="-1" id="PnN-Uc-m68"/>
  46 + </connections>
  47 + </menuItem>
  48 + <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
  49 + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
  50 + <connections>
  51 + <action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
  52 + </connections>
  53 + </menuItem>
  54 + <menuItem title="Show All" id="Kd2-mp-pUS">
  55 + <modifierMask key="keyEquivalentModifierMask"/>
  56 + <connections>
  57 + <action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
  58 + </connections>
  59 + </menuItem>
  60 + <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
  61 + <menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi">
  62 + <connections>
  63 + <action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
  64 + </connections>
  65 + </menuItem>
  66 + </items>
  67 + </menu>
  68 + </menuItem>
  69 + <menuItem title="Edit" id="5QF-Oa-p0T">
  70 + <modifierMask key="keyEquivalentModifierMask"/>
  71 + <menu key="submenu" title="Edit" id="W48-6f-4Dl">
  72 + <items>
  73 + <menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
  74 + <connections>
  75 + <action selector="undo:" target="-1" id="M6e-cu-g7V"/>
  76 + </connections>
  77 + </menuItem>
  78 + <menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
  79 + <connections>
  80 + <action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
  81 + </connections>
  82 + </menuItem>
  83 + <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
  84 + <menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
  85 + <connections>
  86 + <action selector="cut:" target="-1" id="YJe-68-I9s"/>
  87 + </connections>
  88 + </menuItem>
  89 + <menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
  90 + <connections>
  91 + <action selector="copy:" target="-1" id="G1f-GL-Joy"/>
  92 + </connections>
  93 + </menuItem>
  94 + <menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
  95 + <connections>
  96 + <action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
  97 + </connections>
  98 + </menuItem>
  99 + <menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
  100 + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
  101 + <connections>
  102 + <action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
  103 + </connections>
  104 + </menuItem>
  105 + <menuItem title="Delete" id="pa3-QI-u2k">
  106 + <modifierMask key="keyEquivalentModifierMask"/>
  107 + <connections>
  108 + <action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
  109 + </connections>
  110 + </menuItem>
  111 + <menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
  112 + <connections>
  113 + <action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
  114 + </connections>
  115 + </menuItem>
  116 + <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
  117 + <menuItem title="Find" id="4EN-yA-p0u">
  118 + <modifierMask key="keyEquivalentModifierMask"/>
  119 + <menu key="submenu" title="Find" id="1b7-l0-nxx">
  120 + <items>
  121 + <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
  122 + <connections>
  123 + <action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
  124 + </connections>
  125 + </menuItem>
  126 + <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
  127 + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
  128 + <connections>
  129 + <action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
  130 + </connections>
  131 + </menuItem>
  132 + <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
  133 + <connections>
  134 + <action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
  135 + </connections>
  136 + </menuItem>
  137 + <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
  138 + <connections>
  139 + <action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
  140 + </connections>
  141 + </menuItem>
  142 + <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
  143 + <connections>
  144 + <action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
  145 + </connections>
  146 + </menuItem>
  147 + <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
  148 + <connections>
  149 + <action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
  150 + </connections>
  151 + </menuItem>
  152 + </items>
  153 + </menu>
  154 + </menuItem>
  155 + <menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
  156 + <modifierMask key="keyEquivalentModifierMask"/>
  157 + <menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
  158 + <items>
  159 + <menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
  160 + <connections>
  161 + <action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
  162 + </connections>
  163 + </menuItem>
  164 + <menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
  165 + <connections>
  166 + <action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
  167 + </connections>
  168 + </menuItem>
  169 + <menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
  170 + <menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
  171 + <modifierMask key="keyEquivalentModifierMask"/>
  172 + <connections>
  173 + <action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
  174 + </connections>
  175 + </menuItem>
  176 + <menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
  177 + <modifierMask key="keyEquivalentModifierMask"/>
  178 + <connections>
  179 + <action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
  180 + </connections>
  181 + </menuItem>
  182 + <menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
  183 + <modifierMask key="keyEquivalentModifierMask"/>
  184 + <connections>
  185 + <action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
  186 + </connections>
  187 + </menuItem>
  188 + </items>
  189 + </menu>
  190 + </menuItem>
  191 + <menuItem title="Substitutions" id="9ic-FL-obx">
  192 + <modifierMask key="keyEquivalentModifierMask"/>
  193 + <menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
  194 + <items>
  195 + <menuItem title="Show Substitutions" id="z6F-FW-3nz">
  196 + <modifierMask key="keyEquivalentModifierMask"/>
  197 + <connections>
  198 + <action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
  199 + </connections>
  200 + </menuItem>
  201 + <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
  202 + <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
  203 + <modifierMask key="keyEquivalentModifierMask"/>
  204 + <connections>
  205 + <action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
  206 + </connections>
  207 + </menuItem>
  208 + <menuItem title="Smart Quotes" id="hQb-2v-fYv">
  209 + <modifierMask key="keyEquivalentModifierMask"/>
  210 + <connections>
  211 + <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
  212 + </connections>
  213 + </menuItem>
  214 + <menuItem title="Smart Dashes" id="rgM-f4-ycn">
  215 + <modifierMask key="keyEquivalentModifierMask"/>
  216 + <connections>
  217 + <action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
  218 + </connections>
  219 + </menuItem>
  220 + <menuItem title="Smart Links" id="cwL-P1-jid">
  221 + <modifierMask key="keyEquivalentModifierMask"/>
  222 + <connections>
  223 + <action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
  224 + </connections>
  225 + </menuItem>
  226 + <menuItem title="Data Detectors" id="tRr-pd-1PS">
  227 + <modifierMask key="keyEquivalentModifierMask"/>
  228 + <connections>
  229 + <action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
  230 + </connections>
  231 + </menuItem>
  232 + <menuItem title="Text Replacement" id="HFQ-gK-NFA">
  233 + <modifierMask key="keyEquivalentModifierMask"/>
  234 + <connections>
  235 + <action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
  236 + </connections>
  237 + </menuItem>
  238 + </items>
  239 + </menu>
  240 + </menuItem>
  241 + <menuItem title="Transformations" id="2oI-Rn-ZJC">
  242 + <modifierMask key="keyEquivalentModifierMask"/>
  243 + <menu key="submenu" title="Transformations" id="c8a-y6-VQd">
  244 + <items>
  245 + <menuItem title="Make Upper Case" id="vmV-6d-7jI">
  246 + <modifierMask key="keyEquivalentModifierMask"/>
  247 + <connections>
  248 + <action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
  249 + </connections>
  250 + </menuItem>
  251 + <menuItem title="Make Lower Case" id="d9M-CD-aMd">
  252 + <modifierMask key="keyEquivalentModifierMask"/>
  253 + <connections>
  254 + <action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
  255 + </connections>
  256 + </menuItem>
  257 + <menuItem title="Capitalize" id="UEZ-Bs-lqG">
  258 + <modifierMask key="keyEquivalentModifierMask"/>
  259 + <connections>
  260 + <action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
  261 + </connections>
  262 + </menuItem>
  263 + </items>
  264 + </menu>
  265 + </menuItem>
  266 + <menuItem title="Speech" id="xrE-MZ-jX0">
  267 + <modifierMask key="keyEquivalentModifierMask"/>
  268 + <menu key="submenu" title="Speech" id="3rS-ZA-NoH">
  269 + <items>
  270 + <menuItem title="Start Speaking" id="Ynk-f8-cLZ">
  271 + <modifierMask key="keyEquivalentModifierMask"/>
  272 + <connections>
  273 + <action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
  274 + </connections>
  275 + </menuItem>
  276 + <menuItem title="Stop Speaking" id="Oyz-dy-DGm">
  277 + <modifierMask key="keyEquivalentModifierMask"/>
  278 + <connections>
  279 + <action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
  280 + </connections>
  281 + </menuItem>
  282 + </items>
  283 + </menu>
  284 + </menuItem>
  285 + </items>
  286 + </menu>
  287 + </menuItem>
  288 + <menuItem title="View" id="H8h-7b-M4v">
  289 + <modifierMask key="keyEquivalentModifierMask"/>
  290 + <menu key="submenu" title="View" id="HyV-fh-RgO">
  291 + <items>
  292 + <menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
  293 + <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
  294 + <connections>
  295 + <action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
  296 + </connections>
  297 + </menuItem>
  298 + </items>
  299 + </menu>
  300 + </menuItem>
  301 + <menuItem title="Window" id="aUF-d1-5bR">
  302 + <modifierMask key="keyEquivalentModifierMask"/>
  303 + <menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
  304 + <items>
  305 + <menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
  306 + <connections>
  307 + <action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
  308 + </connections>
  309 + </menuItem>
  310 + <menuItem title="Zoom" id="R4o-n2-Eq4">
  311 + <modifierMask key="keyEquivalentModifierMask"/>
  312 + <connections>
  313 + <action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
  314 + </connections>
  315 + </menuItem>
  316 + <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
  317 + <menuItem title="Bring All to Front" id="LE2-aR-0XJ">
  318 + <modifierMask key="keyEquivalentModifierMask"/>
  319 + <connections>
  320 + <action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
  321 + </connections>
  322 + </menuItem>
  323 + </items>
  324 + </menu>
  325 + </menuItem>
  326 + <menuItem title="Help" id="EPT-qC-fAb">
  327 + <modifierMask key="keyEquivalentModifierMask"/>
  328 + <menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/>
  329 + </menuItem>
  330 + </items>
  331 + <point key="canvasLocation" x="142" y="-258"/>
  332 + </menu>
  333 + <window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
  334 + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
  335 + <rect key="contentRect" x="335" y="390" width="800" height="600"/>
  336 + <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
  337 + <view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
  338 + <rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
  339 + <autoresizingMask key="autoresizingMask"/>
  340 + </view>
  341 + </window>
  342 + </objects>
  343 +</document>
  1 +// Application-level settings for the Runner target.
  2 +//
  3 +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
  4 +// future. If not, the values below would default to using the project name when this becomes a
  5 +// 'flutter create' template.
  6 +
  7 +// The application's name. By default this is also the title of the Flutter window.
  8 +PRODUCT_NAME = mobile_scanner_example
  9 +
  10 +// The application's bundle identifier
  11 +PRODUCT_BUNDLE_IDENTIFIER = dev.steenbakker.mobileScannerExample
  12 +
  13 +// The copyright displayed in application information
  14 +PRODUCT_COPYRIGHT = Copyright © 2022 dev.steenbakker. All rights reserved.
  1 +#include "../../Flutter/Flutter-Debug.xcconfig"
  2 +#include "Warnings.xcconfig"
  1 +#include "../../Flutter/Flutter-Release.xcconfig"
  2 +#include "Warnings.xcconfig"
  1 +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
  2 +GCC_WARN_UNDECLARED_SELECTOR = YES
  3 +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
  4 +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
  5 +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
  6 +CLANG_WARN_PRAGMA_PACK = YES
  7 +CLANG_WARN_STRICT_PROTOTYPES = YES
  8 +CLANG_WARN_COMMA = YES
  9 +GCC_WARN_STRICT_SELECTOR_MATCH = YES
  10 +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
  11 +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
  12 +GCC_WARN_SHADOW = YES
  13 +CLANG_WARN_UNREACHABLE_CODE = YES
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>com.apple.security.app-sandbox</key>
  6 + <true/>
  7 + <key>com.apple.security.cs.allow-jit</key>
  8 + <true/>
  9 + <key>com.apple.security.network.server</key>
  10 + <true/>
  11 +</dict>
  12 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>$(EXECUTABLE_NAME)</string>
  9 + <key>CFBundleIconFile</key>
  10 + <string></string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>$(PRODUCT_NAME)</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>$(FLUTTER_BUILD_NAME)</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  23 + <key>LSMinimumSystemVersion</key>
  24 + <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
  25 + <key>NSHumanReadableCopyright</key>
  26 + <string>$(PRODUCT_COPYRIGHT)</string>
  27 + <key>NSMainNibFile</key>
  28 + <string>MainMenu</string>
  29 + <key>NSPrincipalClass</key>
  30 + <string>NSApplication</string>
  31 +</dict>
  32 +</plist>
  1 +import Cocoa
  2 +import FlutterMacOS
  3 +
  4 +class MainFlutterWindow: NSWindow {
  5 + override func awakeFromNib() {
  6 + let flutterViewController = FlutterViewController.init()
  7 + let windowFrame = self.frame
  8 + self.contentViewController = flutterViewController
  9 + self.setFrame(windowFrame, display: true)
  10 +
  11 + RegisterGeneratedPlugins(registry: flutterViewController)
  12 +
  13 + super.awakeFromNib()
  14 + }
  15 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>com.apple.security.app-sandbox</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +name: mobile_scanner_example
  2 +description: Demonstrates how to use the mobile_scanner plugin.
  3 +
  4 +# The following line prevents the package from being accidentally published to
  5 +# pub.dev using `flutter pub publish`. This is preferred for private packages.
  6 +publish_to: 'none' # Remove this line if you wish to publish to pub.dev
  7 +
  8 +environment:
  9 + sdk: ">=2.16.0 <3.0.0"
  10 +
  11 +# Dependencies specify other packages that your package needs in order to work.
  12 +# To automatically upgrade your package dependencies to the latest versions
  13 +# consider running `flutter pub upgrade --major-versions`. Alternatively,
  14 +# dependencies can be manually updated by changing the version numbers below to
  15 +# the latest version available on pub.dev. To see which dependencies have newer
  16 +# versions available, run `flutter pub outdated`.
  17 +dependencies:
  18 + flutter:
  19 + sdk: flutter
  20 +
  21 + mobile_scanner:
  22 + # When depending on this package from a real application you should use:
  23 + # mobile_scanner: ^x.y.z
  24 + # See https://dart.dev/tools/pub/dependencies#version-constraints
  25 + # The example app is bundled with the plugin so we use a path dependency on
  26 + # the parent directory to use the current plugin's version.
  27 + path: ../
  28 +
  29 + # The following adds the Cupertino Icons font to your application.
  30 + # Use with the CupertinoIcons class for iOS style icons.
  31 + cupertino_icons: ^1.0.2
  32 +
  33 +dev_dependencies:
  34 + flutter_test:
  35 + sdk: flutter
  36 +
  37 + # The "flutter_lints" package below contains a set of recommended lints to
  38 + # encourage good coding practices. The lint set provided by the package is
  39 + # activated in the `analysis_options.yaml` file located at the root of your
  40 + # package. See that file for information about deactivating specific lint
  41 + # rules and activating additional ones.
  42 + flutter_lints: ^1.0.0
  43 +
  44 +# For information on the generic Dart part of this file, see the
  45 +# following page: https://dart.dev/tools/pub/pubspec
  46 +
  47 +# The following section is specific to Flutter.
  48 +flutter:
  49 +
  50 + # The following line ensures that the Material Icons font is
  51 + # included with your application, so that you can use the icons in
  52 + # the material Icons class.
  53 + uses-material-design: true
  54 +
  55 + # To add assets to your application, add an assets section, like this:
  56 + # assets:
  57 + # - images/a_dot_burr.jpeg
  58 + # - images/a_dot_ham.jpeg
  59 +
  60 + # An image asset can refer to one or more resolution-specific "variants", see
  61 + # https://flutter.dev/assets-and-images/#resolution-aware.
  62 +
  63 + # For details regarding adding assets from package dependencies, see
  64 + # https://flutter.dev/assets-and-images/#from-packages
  65 +
  66 + # To add custom fonts to your application, add a fonts section here,
  67 + # in this "flutter" section. Each entry in this list should have a
  68 + # "family" key with the font family name, and a "fonts" key with a
  69 + # list giving the asset and other descriptors for the font. For
  70 + # example:
  71 + # fonts:
  72 + # - family: Schyler
  73 + # fonts:
  74 + # - asset: fonts/Schyler-Regular.ttf
  75 + # - asset: fonts/Schyler-Italic.ttf
  76 + # style: italic
  77 + # - family: Trajan Pro
  78 + # fonts:
  79 + # - asset: fonts/TrajanPro.ttf
  80 + # - asset: fonts/TrajanPro_Bold.ttf
  81 + # weight: 700
  82 + #
  83 + # For details regarding fonts from package dependencies,
  84 + # see https://flutter.dev/custom-fonts/#from-packages
  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 +
  11 +import 'package:mobile_scanner_example/main.dart';
  12 +
  13 +void main() {
  14 + testWidgets('Verify Platform version', (WidgetTester tester) async {
  15 + // Build our app and trigger a frame.
  16 + await tester.pumpWidget(const MyApp());
  17 +
  18 + // Verify that platform version is retrieved.
  19 + expect(
  20 + find.byWidgetPredicate(
  21 + (Widget widget) => widget is Text &&
  22 + widget.data!.startsWith('Running on:'),
  23 + ),
  24 + findsOneWidget,
  25 + );
  26 + });
  27 +}
  1 +.idea/
  2 +.vagrant/
  3 +.sconsign.dblite
  4 +.svn/
  5 +
  6 +.DS_Store
  7 +*.swp
  8 +profile
  9 +
  10 +DerivedData/
  11 +build/
  12 +GeneratedPluginRegistrant.h
  13 +GeneratedPluginRegistrant.m
  14 +
  15 +.generated/
  16 +
  17 +*.pbxuser
  18 +*.mode1v3
  19 +*.mode2v3
  20 +*.perspectivev3
  21 +
  22 +!default.pbxuser
  23 +!default.mode1v3
  24 +!default.mode2v3
  25 +!default.perspectivev3
  26 +
  27 +xcuserdata
  28 +
  29 +*.moved-aside
  30 +
  31 +*.pyc
  32 +*sync/
  33 +Icon?
  34 +.tags*
  35 +
  36 +/Flutter/Generated.xcconfig
  37 +/Flutter/ephemeral/
  38 +/Flutter/flutter_export_environment.sh
  1 +#import <Flutter/Flutter.h>
  2 +
  3 +@interface MobileScannerPlugin : NSObject<FlutterPlugin>
  4 +@end
  1 +#import "MobileScannerPlugin.h"
  2 +#if __has_include(<mobile_scanner/mobile_scanner-Swift.h>)
  3 +#import <mobile_scanner/mobile_scanner-Swift.h>
  4 +#else
  5 +// Support project import fallback if the generated compatibility header
  6 +// is not copied when this plugin is created as a library.
  7 +// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816
  8 +#import "mobile_scanner-Swift.h"
  9 +#endif
  10 +
  11 +@implementation MobileScannerPlugin
  12 ++ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  13 + [SwiftMobileScannerPlugin registerWithRegistrar:registrar];
  14 +}
  15 +@end
  1 +import Flutter
  2 +import UIKit
  3 +
  4 +public class SwiftMobileScannerPlugin: NSObject, FlutterPlugin {
  5 + public static func register(with registrar: FlutterPluginRegistrar) {
  6 + let channel = FlutterMethodChannel(name: "mobile_scanner", binaryMessenger: registrar.messenger())
  7 + let instance = SwiftMobileScannerPlugin()
  8 + registrar.addMethodCallDelegate(instance, channel: channel)
  9 + }
  10 +
  11 + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  12 + result("iOS " + UIDevice.current.systemVersion)
  13 + }
  14 +}
  1 +#
  2 +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
  3 +# Run `pod lib lint mobile_scanner.podspec` to validate before publishing.
  4 +#
  5 +Pod::Spec.new do |s|
  6 + s.name = 'mobile_scanner'
  7 + s.version = '0.0.1'
  8 + s.summary = 'An universal scanner for Flutter based on MLKit.'
  9 + s.description = <<-DESC
  10 +An universal scanner for Flutter based on MLKit.
  11 + DESC
  12 + s.homepage = 'http://example.com'
  13 + s.license = { :file => '../LICENSE' }
  14 + s.author = { 'Your Company' => 'email@example.com' }
  15 + s.source = { :path => '.' }
  16 + s.source_files = 'Classes/**/*'
  17 + s.dependency 'Flutter'
  18 + s.platform = :ios, '9.0'
  19 +
  20 + # Flutter.framework does not contain a i386 slice.
  21 + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
  22 + s.swift_version = '5.0'
  23 +end
  1 +export 'src/mobile_scanner.dart';
  1 +import 'dart:async';
  2 +import 'package:flutter/material.dart';
  3 +import 'package:mobile_scanner/src/mobile_scanner_handler.dart';
  4 +import 'package:mobile_scanner/src/objects/preview_details.dart';
  5 +
  6 +import 'mobile_scanner_preview.dart';
  7 +import 'objects/barcode_formats.dart';
  8 +
  9 +typedef ErrorCallback = Widget Function(BuildContext context, Object? error);
  10 +
  11 +Text _defaultNotStartedBuilder(context) => const Text("Camera Loading ...");
  12 +Text _defaultOffscreenBuilder(context) => const Text("Camera Paused.");
  13 +Text _defaultOnError(BuildContext context, Object? error) {
  14 + debugPrint("Error reading from camera: $error");
  15 + return const Text("Error reading from camera...");
  16 +}
  17 +
  18 +class MobileScanner extends StatefulWidget {
  19 + const MobileScanner(
  20 + {Key? key,
  21 + required this.qrCodeCallback,
  22 + this.child,
  23 + this.fit = BoxFit.cover,
  24 + WidgetBuilder? notStartedBuilder,
  25 + WidgetBuilder? offscreenBuilder,
  26 + ErrorCallback? onError,
  27 + this.formats,
  28 + this.rearLens = true,
  29 + this.manualFocus = false})
  30 + : notStartedBuilder = notStartedBuilder ?? _defaultNotStartedBuilder,
  31 + offscreenBuilder =
  32 + offscreenBuilder ?? notStartedBuilder ?? _defaultOffscreenBuilder,
  33 + onError = onError ?? _defaultOnError,
  34 + super(key: key);
  35 +
  36 + final BoxFit fit;
  37 + final ValueChanged<String?> qrCodeCallback;
  38 + final Widget? child;
  39 + final WidgetBuilder notStartedBuilder;
  40 + final WidgetBuilder offscreenBuilder;
  41 + final ErrorCallback onError;
  42 + final List<BarcodeFormats>? formats;
  43 + final bool rearLens;
  44 + final bool manualFocus;
  45 +
  46 + static void toggleFlash() {
  47 + MobileScannerHandler.toggleFlash();
  48 + }
  49 +
  50 + static void flipCamera() {
  51 + MobileScannerHandler.switchCamera();
  52 + }
  53 +
  54 + @override
  55 + _MobileScannerState createState() => _MobileScannerState();
  56 +}
  57 +
  58 +class _MobileScannerState extends State<MobileScanner>
  59 + with WidgetsBindingObserver {
  60 +
  61 + bool onScreen = true;
  62 + Future<PreviewDetails>? _previewDetails;
  63 +
  64 + @override
  65 + void initState() {
  66 + super.initState();
  67 + WidgetsBinding.instance!.addObserver(this);
  68 + }
  69 +
  70 + @override
  71 + void dispose() {
  72 + WidgetsBinding.instance!.removeObserver(this);
  73 + super.dispose();
  74 + }
  75 +
  76 + @override
  77 + void didChangeAppLifecycleState(AppLifecycleState state) {
  78 + if (state == AppLifecycleState.resumed) {
  79 + setState(() => onScreen = true);
  80 + } else {
  81 + if (_previewDetails != null && onScreen) {
  82 + MobileScannerHandler.stop();
  83 + }
  84 + setState(() {
  85 + onScreen = false;
  86 + _previewDetails = null;
  87 + });
  88 + }
  89 + }
  90 +
  91 + Future<PreviewDetails> _initPreview(num width, num height) async {
  92 + final devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
  93 + return await MobileScannerHandler.start(
  94 + width: (devicePixelRatio * width.toInt()).ceil(),
  95 + height: (devicePixelRatio * height.toInt()).ceil(),
  96 + qrCodeHandler: widget.qrCodeCallback,
  97 + formats: widget.formats,
  98 + );
  99 + }
  100 +
  101 + void switchCamera() {
  102 + MobileScannerHandler.rearLens = !MobileScannerHandler.rearLens;
  103 + restart();
  104 + }
  105 +
  106 +
  107 + void switchFocus() {
  108 + MobileScannerHandler.manualFocus = !MobileScannerHandler.manualFocus;
  109 + restart();
  110 + }
  111 +
  112 + /// This method can be used to restart scanning
  113 + /// the event that it was paused.
  114 + Future<void> restart() async {
  115 + await MobileScannerHandler.stop();
  116 + setState(() {
  117 + _previewDetails = null;
  118 + });
  119 + }
  120 +
  121 + /// This method can be used to manually stop the
  122 + /// camera.
  123 + Future<void> stop() async {
  124 + await MobileScannerHandler.stop();
  125 + }
  126 +
  127 + @override
  128 + deactivate() {
  129 + super.deactivate();
  130 + MobileScannerHandler.stop();
  131 + }
  132 +
  133 + @override
  134 + Widget build(BuildContext context) {
  135 + return LayoutBuilder(
  136 + builder: (BuildContext context, BoxConstraints constraints) {
  137 + if (_previewDetails == null && onScreen) {
  138 + _previewDetails =
  139 + _initPreview(constraints.maxWidth, constraints.maxHeight);
  140 + } else if (!onScreen) {
  141 + return widget.offscreenBuilder(context);
  142 + }
  143 +
  144 + return FutureBuilder(
  145 + future: _previewDetails,
  146 + builder: (BuildContext context, AsyncSnapshot<PreviewDetails> details) {
  147 + switch (details.connectionState) {
  148 + case ConnectionState.none:
  149 + case ConnectionState.waiting:
  150 + return widget.notStartedBuilder(context);
  151 + case ConnectionState.done:
  152 + if (details.hasError) {
  153 + debugPrint(details.error.toString());
  154 + return widget.onError(context, details.error);
  155 + }
  156 + Widget preview = SizedBox(
  157 + width: constraints.maxWidth,
  158 + height: constraints.maxHeight,
  159 + child: Preview(
  160 + previewDetails: details.data!,
  161 + targetWidth: constraints.maxWidth,
  162 + targetHeight: constraints.maxHeight,
  163 + fit: widget.fit,
  164 + ),
  165 + );
  166 +
  167 + if (widget.child != null) {
  168 + return Stack(
  169 + children: [
  170 + preview,
  171 + widget.child!,
  172 + ],
  173 + );
  174 + }
  175 + return preview;
  176 +
  177 + default:
  178 + throw AssertionError("${details.connectionState} not supported.");
  179 + }
  180 + },
  181 + );
  182 + });
  183 + }
  184 +}
  1 +import 'dart:async';
  2 +import 'package:flutter/material.dart';
  3 +import 'package:flutter/services.dart';
  4 +import 'package:mobile_scanner/src/objects/preview_details.dart';
  5 +
  6 +import 'objects/barcode_formats.dart';
  7 +
  8 +enum FrameRotation { none, ninetyCC, oneeighty, twoseventyCC }
  9 +
  10 +const _defaultBarcodeFormats = [
  11 + BarcodeFormats.ALL_FORMATS,
  12 +];
  13 +
  14 +typedef QRCodeHandler = void Function(String? qr);
  15 +
  16 +class MobileScannerHandler {
  17 + static const MethodChannel _channel =
  18 + MethodChannel('dev.steenbakker.mobile_scanner/scanner');
  19 +
  20 + static Future<String?> get platformVersion async {
  21 + final String? version = await _channel.invokeMethod('getPlatformVersion');
  22 + return version;
  23 + }
  24 +
  25 + static bool rearLens = true;
  26 + static bool manualFocus = false;
  27 +
  28 + //Set target size before starting
  29 + static Future<PreviewDetails> start({
  30 + required int width,
  31 + required int height,
  32 + required QRCodeHandler qrCodeHandler,
  33 + List<BarcodeFormats>? formats = _defaultBarcodeFormats,
  34 + }) async {
  35 + final _formats = formats ?? _defaultBarcodeFormats;
  36 + assert(_formats.isNotEmpty);
  37 +
  38 + List<String> formatStrings = _formats
  39 + .map((format) => format.toString().split('.')[1])
  40 + .toList(growable: false);
  41 +
  42 + _channel.setMethodCallHandler((MethodCall call) async {
  43 + switch (call.method) {
  44 + case 'qrRead':
  45 + assert(call.arguments is String);
  46 + qrCodeHandler(call.arguments);
  47 + break;
  48 + default:
  49 + debugPrint("QrChannelHandler: unknown method call received at "
  50 + "${call.method}");
  51 + }
  52 + });
  53 +
  54 + var details = await _channel.invokeMethod('start', {
  55 + 'targetWidth': width,
  56 + 'targetHeight': height,
  57 + 'heartbeatTimeout': 0,
  58 + 'formats': formatStrings,
  59 + 'rearLens': rearLens,
  60 + 'manualFocus': manualFocus
  61 + });
  62 +
  63 + assert(details is Map<dynamic, dynamic>);
  64 +
  65 + int? textureId = details["textureId"];
  66 + num? orientation = details["surfaceOrientation"];
  67 + num? surfaceHeight = details["surfaceHeight"];
  68 + num? surfaceWidth = details["surfaceWidth"];
  69 +
  70 + return PreviewDetails(surfaceWidth, surfaceHeight, orientation, textureId);
  71 + }
  72 +
  73 + static Future switchCamera() {
  74 + return _channel.invokeMethod('switch').catchError(print);
  75 + }
  76 +
  77 + static Future toggleFlash() {
  78 + return _channel.invokeMethod('toggleFlash').catchError(print);
  79 + }
  80 +
  81 + static Future stop() {
  82 + _channel.setMethodCallHandler(null);
  83 + return _channel.invokeMethod('stop').catchError(print);
  84 + }
  85 +
  86 + static Future heartbeat() {
  87 + return _channel.invokeMethod('heartbeat').catchError(print);
  88 + }
  89 +
  90 + static Future<List<List<int>>?> getSupportedSizes() {
  91 + return _channel.invokeMethod('getSupportedSizes').catchError(print)
  92 + as Future<List<List<int>>?>;
  93 + }
  94 +}
  1 +import 'package:flutter/material.dart';
  2 +import 'package:mobile_scanner/src/objects/preview_details.dart';
  3 +import 'package:native_device_orientation/native_device_orientation.dart';
  4 +
  5 +class Preview extends StatelessWidget {
  6 + final double width, height;
  7 + final double targetWidth, targetHeight;
  8 + final int? textureId;
  9 + final int? sensorOrientation;
  10 + final BoxFit fit;
  11 +
  12 + Preview({
  13 + Key? key,
  14 + required PreviewDetails previewDetails,
  15 + required this.targetWidth,
  16 + required this.targetHeight,
  17 + required this.fit,
  18 + }) : textureId = previewDetails.textureId,
  19 + width = previewDetails.width!.toDouble(),
  20 + height = previewDetails.height!.toDouble(),
  21 + sensorOrientation = previewDetails.sensorOrientation as int?, super(key: key);
  22 +
  23 + @override
  24 + Widget build(BuildContext context) {
  25 + return NativeDeviceOrientationReader(
  26 + builder: (context) {
  27 + var nativeOrientation = NativeDeviceOrientationReader.orientation(context);
  28 +
  29 + int nativeRotation = 0;
  30 + switch (nativeOrientation) {
  31 + case NativeDeviceOrientation.portraitUp:
  32 + nativeRotation = 0;
  33 + break;
  34 + case NativeDeviceOrientation.landscapeRight:
  35 + nativeRotation = 90;
  36 + break;
  37 + case NativeDeviceOrientation.portraitDown:
  38 + nativeRotation = 180;
  39 + break;
  40 + case NativeDeviceOrientation.landscapeLeft:
  41 + nativeRotation = 270;
  42 + break;
  43 + case NativeDeviceOrientation.unknown:
  44 + default:
  45 + break;
  46 + }
  47 +
  48 + int rotationCompensation = ((nativeRotation - sensorOrientation! + 450) % 360) ~/ 90;
  49 +
  50 + double frameHeight = width;
  51 + double frameWidth = height;
  52 +
  53 + return ClipRect(
  54 + child: FittedBox(
  55 + fit: fit,
  56 + child: RotatedBox(
  57 + quarterTurns: rotationCompensation,
  58 + child: SizedBox(
  59 + width: frameWidth,
  60 + height: frameHeight,
  61 + child: Texture(textureId: textureId!),
  62 + ),
  63 + ),
  64 + ),
  65 + );
  66 + },
  67 + );
  68 + }
  69 +}
  1 +enum BarcodeFormats {
  2 + ALL_FORMATS,
  3 + AZTEC,
  4 + CODE_128,
  5 + CODE_39,
  6 + CODE_93,
  7 + CODABAR,
  8 + DATA_MATRIX,
  9 + EAN_13,
  10 + EAN_8,
  11 + ITF,
  12 + PDF417,
  13 + QR_CODE,
  14 + UPC_A,
  15 + UPC_E,
  16 +}
  1 +class PreviewDetails {
  2 + num? width;
  3 + num? height;
  4 + num? sensorOrientation;
  5 + int? textureId;
  6 +
  7 + PreviewDetails(this.width, this.height, this.sensorOrientation, this.textureId);
  8 +}
  1 +import Cocoa
  2 +import FlutterMacOS
  3 +
  4 +public class MobileScannerPlugin: NSObject, FlutterPlugin {
  5 + public static func register(with registrar: FlutterPluginRegistrar) {
  6 + let channel = FlutterMethodChannel(name: "mobile_scanner", binaryMessenger: registrar.messenger)
  7 + let instance = MobileScannerPlugin()
  8 + registrar.addMethodCallDelegate(instance, channel: channel)
  9 + }
  10 +
  11 + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  12 + switch call.method {
  13 + case "getPlatformVersion":
  14 + result("macOS " + ProcessInfo.processInfo.operatingSystemVersionString)
  15 + default:
  16 + result(FlutterMethodNotImplemented)
  17 + }
  18 + }
  19 +}
  1 +#
  2 +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
  3 +# Run `pod lib lint mobile_scanner.podspec` to validate before publishing.
  4 +#
  5 +Pod::Spec.new do |s|
  6 + s.name = 'mobile_scanner'
  7 + s.version = '0.0.1'
  8 + s.summary = 'An universal scanner for Flutter based on MLKit.'
  9 + s.description = <<-DESC
  10 +An universal scanner for Flutter based on MLKit.
  11 + DESC
  12 + s.homepage = 'http://example.com'
  13 + s.license = { :file => '../LICENSE' }
  14 + s.author = { 'Your Company' => 'email@example.com' }
  15 + s.source = { :path => '.' }
  16 + s.source_files = 'Classes/**/*'
  17 + s.dependency 'FlutterMacOS'
  18 +
  19 + s.platform = :osx, '10.11'
  20 + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
  21 + s.swift_version = '5.0'
  22 +end
  1 +name: mobile_scanner
  2 +description: An universal scanner for Flutter based on MLKit.
  3 +version: 0.0.1
  4 +homepage:
  5 +
  6 +environment:
  7 + sdk: ">=2.16.0 <3.0.0"
  8 + flutter: ">=2.5.0"
  9 +
  10 +dependencies:
  11 + native_device_orientation: ^1.0.0
  12 + flutter:
  13 + sdk: flutter
  14 +
  15 +dev_dependencies:
  16 + flutter_test:
  17 + sdk: flutter
  18 + flutter_lints: ^1.0.0
  19 +
  20 +# For information on the generic Dart part of this file, see the
  21 +# following page: https://dart.dev/tools/pub/pubspec
  22 +
  23 +# The following section is specific to Flutter.
  24 +flutter:
  25 + # This section identifies this Flutter project as a plugin project.
  26 + # The 'pluginClass' and Android 'package' identifiers should not ordinarily
  27 + # be modified. They are used by the tooling to maintain consistency when
  28 + # adding or updating assets for this project.
  29 + plugin:
  30 + platforms:
  31 + android:
  32 + package: dev.steenbakker.mobile_scanner
  33 + pluginClass: MobileScannerPlugin
  34 + ios:
  35 + pluginClass: MobileScannerPlugin
  36 + macos:
  37 + pluginClass: MobileScannerPlugin
  38 +
  39 + # To add assets to your plugin package, add an assets section, like this:
  40 + # assets:
  41 + # - images/a_dot_burr.jpeg
  42 + # - images/a_dot_ham.jpeg
  43 + #
  44 + # For details regarding assets in packages, see
  45 + # https://flutter.dev/assets-and-images/#from-packages
  46 + #
  47 + # An image asset can refer to one or more resolution-specific "variants", see
  48 + # https://flutter.dev/assets-and-images/#resolution-aware.
  49 +
  50 + # To add custom fonts to your plugin package, add a fonts section here,
  51 + # in this "flutter" section. Each entry in this list should have a
  52 + # "family" key with the font family name, and a "fonts" key with a
  53 + # list giving the asset and other descriptors for the font. For
  54 + # example:
  55 + # fonts:
  56 + # - family: Schyler
  57 + # fonts:
  58 + # - asset: fonts/Schyler-Regular.ttf
  59 + # - asset: fonts/Schyler-Italic.ttf
  60 + # style: italic
  61 + # - family: Trajan Pro
  62 + # fonts:
  63 + # - asset: fonts/TrajanPro.ttf
  64 + # - asset: fonts/TrajanPro_Bold.ttf
  65 + # weight: 700
  66 + #
  67 + # For details regarding fonts in packages, see
  68 + # https://flutter.dev/custom-fonts/#from-packages
  1 +import 'package:flutter/services.dart';
  2 +import 'package:flutter_test/flutter_test.dart';
  3 +import 'package:mobile_scanner/src/mobile_scanner.dart';
  4 +
  5 +void main() {
  6 + const MethodChannel channel = MethodChannel('mobile_scanner');
  7 +
  8 + TestWidgetsFlutterBinding.ensureInitialized();
  9 +
  10 + setUp(() {
  11 + channel.setMockMethodCallHandler((MethodCall methodCall) async {
  12 + return '42';
  13 + });
  14 + });
  15 +
  16 + tearDown(() {
  17 + channel.setMockMethodCallHandler(null);
  18 + });
  19 +
  20 + test('getPlatformVersion', () async {
  21 + expect(await MobileScannerHandler.platformVersion, '42');
  22 + });
  23 +}