@@ -1,17 +1,43 @@ | |||
# ---> Go | |||
# Binaries for programs and plugins | |||
*.exe | |||
*.exe~ | |||
*.dll | |||
*.so | |||
*.dylib | |||
# Miscellaneous | |||
*.class | |||
*.log | |||
*.pyc | |||
*.swp | |||
.DS_Store | |||
.atom/ | |||
.buildlog/ | |||
.history | |||
.svn/ | |||
migrate_working_dir/ | |||
# Test binary, built with `go test -c` | |||
*.test | |||
# IntelliJ related | |||
*.iml | |||
*.ipr | |||
*.iws | |||
.idea/ | |||
# Output of the go coverage tool, specifically when used with LiteIDE | |||
*.out | |||
# The .vscode folder contains launch configuration and tasks you configure in | |||
# VS Code which you may wish to be included in version control, so this line | |||
# is commented out by default. | |||
#.vscode/ | |||
# Dependency directories (remove the comment below to include it) | |||
# vendor/ | |||
# Flutter/Dart/Pub related | |||
**/doc/api/ | |||
**/ios/Flutter/.last_build_id | |||
.dart_tool/ | |||
.flutter-plugins | |||
.flutter-plugins-dependencies | |||
.pub-cache/ | |||
.pub/ | |||
/build/ | |||
# Symbolication related | |||
app.*.symbols | |||
# Obfuscation related | |||
app.*.map.json | |||
# Android Studio will place build artifacts here | |||
/android/app/debug | |||
/android/app/profile | |||
/android/app/release |
@@ -0,0 +1,45 @@ | |||
# This file tracks properties of this Flutter project. | |||
# Used by Flutter tool to assess capabilities and perform upgrades etc. | |||
# | |||
# This file should be version controlled and should not be manually edited. | |||
version: | |||
revision: "dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668" | |||
channel: "stable" | |||
project_type: app | |||
# Tracks metadata for the flutter migrate command | |||
migration: | |||
platforms: | |||
- platform: root | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
- platform: android | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
- platform: ios | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
- platform: linux | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
- platform: macos | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
- platform: web | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
- platform: windows | |||
create_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
base_revision: dec2ee5c1f98f8e84a7d5380c05eb8a3d0a81668 | |||
# User provided section | |||
# List of Local paths (relative to this file) that should be | |||
# ignored by the migrate tool. | |||
# | |||
# Files that are not part of the templates will be ignored by default. | |||
unmanaged_files: | |||
- 'lib/main.dart' | |||
- 'ios/Runner.xcodeproj/project.pbxproj' |
@@ -0,0 +1,25 @@ | |||
{ | |||
// Use IntelliSense to learn about possible attributes. | |||
// Hover to view descriptions of existing attributes. | |||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | |||
"version": "0.2.0", | |||
"configurations": [ | |||
{ | |||
"name": "demo001", | |||
"request": "launch", | |||
"type": "dart" | |||
}, | |||
{ | |||
"name": "demo001 (profile mode)", | |||
"request": "launch", | |||
"type": "dart", | |||
"flutterMode": "profile" | |||
}, | |||
{ | |||
"name": "demo001 (release mode)", | |||
"request": "launch", | |||
"type": "dart", | |||
"flutterMode": "release" | |||
} | |||
] | |||
} |
@@ -1,2 +1,16 @@ | |||
# test001 | |||
# demo001 | |||
A new Flutter project. | |||
## Getting Started | |||
This project is a starting point for a Flutter application. | |||
A few resources to get you started if this is your first Flutter project: | |||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) | |||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) | |||
For help getting started with Flutter development, view the | |||
[online documentation](https://docs.flutter.dev/), which offers tutorials, | |||
samples, guidance on mobile development, and a full API reference. |
@@ -0,0 +1,28 @@ | |||
# This file configures the analyzer, which statically analyzes Dart code to | |||
# check for errors, warnings, and lints. | |||
# | |||
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled | |||
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be | |||
# invoked from the command line by running `flutter analyze`. | |||
# The following line activates a set of recommended lints for Flutter apps, | |||
# packages, and plugins designed to encourage good coding practices. | |||
include: package:flutter_lints/flutter.yaml | |||
linter: | |||
# The lint rules applied to this project can be customized in the | |||
# section below to disable rules from the `package:flutter_lints/flutter.yaml` | |||
# included above or to enable additional rules. A list of all available lints | |||
# and their documentation is published at https://dart.dev/lints. | |||
# | |||
# Instead of disabling a lint rule for the entire project in the | |||
# section below, it can also be suppressed for a single line of code | |||
# or a specific dart file by using the `// ignore: name_of_lint` and | |||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file | |||
# producing the lint. | |||
rules: | |||
# avoid_print: false # Uncomment to disable the `avoid_print` rule | |||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule | |||
# Additional information about this file can be found at | |||
# https://dart.dev/guides/language/analysis-options |
@@ -0,0 +1,13 @@ | |||
gradle-wrapper.jar | |||
/.gradle | |||
/captures/ | |||
/gradlew | |||
/gradlew.bat | |||
/local.properties | |||
GeneratedPluginRegistrant.java | |||
# Remember to never publicly share your keystore. | |||
# See https://flutter.dev/to/reference-keystore | |||
key.properties | |||
**/*.keystore | |||
**/*.jks |
@@ -0,0 +1,44 @@ | |||
plugins { | |||
id "com.android.application" | |||
id "kotlin-android" | |||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. | |||
id "dev.flutter.flutter-gradle-plugin" | |||
} | |||
android { | |||
namespace = "com.example.demo001" | |||
compileSdk = flutter.compileSdkVersion | |||
ndkVersion = flutter.ndkVersion | |||
compileOptions { | |||
sourceCompatibility = JavaVersion.VERSION_1_8 | |||
targetCompatibility = JavaVersion.VERSION_1_8 | |||
} | |||
kotlinOptions { | |||
jvmTarget = JavaVersion.VERSION_1_8 | |||
} | |||
defaultConfig { | |||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | |||
applicationId = "com.example.demo001" | |||
// You can update the following values to match your application needs. | |||
// For more information, see: https://flutter.dev/to/review-gradle-config. | |||
minSdk = flutter.minSdkVersion | |||
targetSdk = flutter.targetSdkVersion | |||
versionCode = flutter.versionCode | |||
versionName = flutter.versionName | |||
} | |||
buildTypes { | |||
release { | |||
// TODO: Add your own signing config for the release build. | |||
// Signing with the debug keys for now, so `flutter run --release` works. | |||
signingConfig = signingConfigs.debug | |||
} | |||
} | |||
} | |||
flutter { | |||
source = "../.." | |||
} |
@@ -0,0 +1,7 @@ | |||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> | |||
<!-- The INTERNET permission is required for development. Specifically, | |||
the Flutter tool needs it to communicate with the running application | |||
to allow setting breakpoints, to provide hot reload, etc. | |||
--> | |||
<uses-permission android:name="android.permission.INTERNET"/> | |||
</manifest> |
@@ -0,0 +1,45 @@ | |||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> | |||
<application | |||
android:label="demo001" | |||
android:name="${applicationName}" | |||
android:icon="@mipmap/ic_launcher"> | |||
<activity | |||
android:name=".MainActivity" | |||
android:exported="true" | |||
android:launchMode="singleTop" | |||
android:taskAffinity="" | |||
android:theme="@style/LaunchTheme" | |||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" | |||
android:hardwareAccelerated="true" | |||
android:windowSoftInputMode="adjustResize"> | |||
<!-- Specifies an Android theme to apply to this Activity as soon as | |||
the Android process has started. This theme is visible to the user | |||
while the Flutter UI initializes. After that, this theme continues | |||
to determine the Window background behind the Flutter UI. --> | |||
<meta-data | |||
android:name="io.flutter.embedding.android.NormalTheme" | |||
android:resource="@style/NormalTheme" | |||
/> | |||
<intent-filter> | |||
<action android:name="android.intent.action.MAIN"/> | |||
<category android:name="android.intent.category.LAUNCHER"/> | |||
</intent-filter> | |||
</activity> | |||
<!-- Don't delete the meta-data below. | |||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> | |||
<meta-data | |||
android:name="flutterEmbedding" | |||
android:value="2" /> | |||
</application> | |||
<!-- Required to query activities that can process text, see: | |||
https://developer.android.com/training/package-visibility and | |||
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT. | |||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. --> | |||
<queries> | |||
<intent> | |||
<action android:name="android.intent.action.PROCESS_TEXT"/> | |||
<data android:mimeType="text/plain"/> | |||
</intent> | |||
</queries> | |||
</manifest> |
@@ -0,0 +1,5 @@ | |||
package com.example.demo001 | |||
import io.flutter.embedding.android.FlutterActivity | |||
class MainActivity: FlutterActivity() |
@@ -0,0 +1,12 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Modify this file to customize your launch splash screen --> | |||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | |||
<item android:drawable="?android:colorBackground" /> | |||
<!-- You can insert your own image assets here --> | |||
<!-- <item> | |||
<bitmap | |||
android:gravity="center" | |||
android:src="@mipmap/launch_image" /> | |||
</item> --> | |||
</layer-list> |
@@ -0,0 +1,12 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Modify this file to customize your launch splash screen --> | |||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | |||
<item android:drawable="@android:color/white" /> | |||
<!-- You can insert your own image assets here --> | |||
<!-- <item> | |||
<bitmap | |||
android:gravity="center" | |||
android:src="@mipmap/launch_image" /> | |||
</item> --> | |||
</layer-list> |
@@ -0,0 +1,18 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<resources> | |||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> | |||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> | |||
<!-- Show a splash screen on the activity. Automatically removed when | |||
the Flutter engine draws its first frame --> | |||
<item name="android:windowBackground">@drawable/launch_background</item> | |||
</style> | |||
<!-- Theme applied to the Android Window as soon as the process has started. | |||
This theme determines the color of the Android Window while your | |||
Flutter UI initializes, as well as behind your Flutter UI while its | |||
running. | |||
This Theme is only used starting with V2 of Flutter's Android embedding. --> | |||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> | |||
<item name="android:windowBackground">?android:colorBackground</item> | |||
</style> | |||
</resources> |
@@ -0,0 +1,18 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<resources> | |||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> | |||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> | |||
<!-- Show a splash screen on the activity. Automatically removed when | |||
the Flutter engine draws its first frame --> | |||
<item name="android:windowBackground">@drawable/launch_background</item> | |||
</style> | |||
<!-- Theme applied to the Android Window as soon as the process has started. | |||
This theme determines the color of the Android Window while your | |||
Flutter UI initializes, as well as behind your Flutter UI while its | |||
running. | |||
This Theme is only used starting with V2 of Flutter's Android embedding. --> | |||
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> | |||
<item name="android:windowBackground">?android:colorBackground</item> | |||
</style> | |||
</resources> |
@@ -0,0 +1,7 @@ | |||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> | |||
<!-- The INTERNET permission is required for development. Specifically, | |||
the Flutter tool needs it to communicate with the running application | |||
to allow setting breakpoints, to provide hot reload, etc. | |||
--> | |||
<uses-permission android:name="android.permission.INTERNET"/> | |||
</manifest> |
@@ -0,0 +1,18 @@ | |||
allprojects { | |||
repositories { | |||
google() | |||
mavenCentral() | |||
} | |||
} | |||
rootProject.buildDir = "../build" | |||
subprojects { | |||
project.buildDir = "${rootProject.buildDir}/${project.name}" | |||
} | |||
subprojects { | |||
project.evaluationDependsOn(":app") | |||
} | |||
tasks.register("clean", Delete) { | |||
delete rootProject.buildDir | |||
} |
@@ -0,0 +1,3 @@ | |||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError | |||
android.useAndroidX=true | |||
android.enableJetifier=true |
@@ -0,0 +1,5 @@ | |||
distributionBase=GRADLE_USER_HOME | |||
distributionPath=wrapper/dists | |||
zipStoreBase=GRADLE_USER_HOME | |||
zipStorePath=wrapper/dists | |||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip |
@@ -0,0 +1,25 @@ | |||
pluginManagement { | |||
def flutterSdkPath = { | |||
def properties = new Properties() | |||
file("local.properties").withInputStream { properties.load(it) } | |||
def flutterSdkPath = properties.getProperty("flutter.sdk") | |||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties" | |||
return flutterSdkPath | |||
}() | |||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") | |||
repositories { | |||
google() | |||
mavenCentral() | |||
gradlePluginPortal() | |||
} | |||
} | |||
plugins { | |||
id "dev.flutter.flutter-plugin-loader" version "1.0.0" | |||
id "com.android.application" version "8.2.1" apply false | |||
id "org.jetbrains.kotlin.android" version "1.8.22" apply false | |||
} | |||
include ":app" |
@@ -0,0 +1,34 @@ | |||
**/dgph | |||
*.mode1v3 | |||
*.mode2v3 | |||
*.moved-aside | |||
*.pbxuser | |||
*.perspectivev3 | |||
**/*sync/ | |||
.sconsign.dblite | |||
.tags* | |||
**/.vagrant/ | |||
**/DerivedData/ | |||
Icon? | |||
**/Pods/ | |||
**/.symlinks/ | |||
profile | |||
xcuserdata | |||
**/.generated/ | |||
Flutter/App.framework | |||
Flutter/Flutter.framework | |||
Flutter/Flutter.podspec | |||
Flutter/Generated.xcconfig | |||
Flutter/ephemeral/ | |||
Flutter/app.flx | |||
Flutter/app.zip | |||
Flutter/flutter_assets/ | |||
Flutter/flutter_export_environment.sh | |||
ServiceDefinitions.json | |||
Runner/GeneratedPluginRegistrant.* | |||
# Exceptions to above rules. | |||
!default.mode1v3 | |||
!default.mode2v3 | |||
!default.pbxuser | |||
!default.perspectivev3 |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>en</string> | |||
<key>CFBundleExecutable</key> | |||
<string>App</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>io.flutter.flutter.app</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
<string>App</string> | |||
<key>CFBundlePackageType</key> | |||
<string>FMWK</string> | |||
<key>CFBundleShortVersionString</key> | |||
<string>1.0</string> | |||
<key>CFBundleSignature</key> | |||
<string>????</string> | |||
<key>CFBundleVersion</key> | |||
<string>1.0</string> | |||
<key>MinimumOSVersion</key> | |||
<string>12.0</string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1 @@ | |||
#include "Generated.xcconfig" |
@@ -0,0 +1 @@ | |||
#include "Generated.xcconfig" |
@@ -0,0 +1,616 @@ | |||
// !$*UTF8*$! | |||
{ | |||
archiveVersion = 1; | |||
classes = { | |||
}; | |||
objectVersion = 54; | |||
objects = { | |||
/* Begin PBXBuildFile section */ | |||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | |||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; | |||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | |||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; | |||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | |||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | |||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | |||
/* End PBXBuildFile section */ | |||
/* Begin PBXContainerItemProxy section */ | |||
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 97C146E61CF9000F007C117D /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 97C146ED1CF9000F007C117D; | |||
remoteInfo = Runner; | |||
}; | |||
/* End PBXContainerItemProxy section */ | |||
/* Begin PBXCopyFilesBuildPhase section */ | |||
9705A1C41CF9048500538489 /* Embed Frameworks */ = { | |||
isa = PBXCopyFilesBuildPhase; | |||
buildActionMask = 2147483647; | |||
dstPath = ""; | |||
dstSubfolderSpec = 10; | |||
files = ( | |||
); | |||
name = "Embed Frameworks"; | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXCopyFilesBuildPhase section */ | |||
/* Begin PBXFileReference section */ | |||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | |||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | |||
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; | |||
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | |||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; | |||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | |||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | |||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; | |||
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; | |||
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; | |||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | |||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | |||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||
/* End PBXFileReference section */ | |||
/* Begin PBXFrameworksBuildPhase section */ | |||
97C146EB1CF9000F007C117D /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXFrameworksBuildPhase section */ | |||
/* Begin PBXGroup section */ | |||
331C8082294A63A400263BE5 /* RunnerTests */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
331C807B294A618700263BE5 /* RunnerTests.swift */, | |||
); | |||
path = RunnerTests; | |||
sourceTree = "<group>"; | |||
}; | |||
9740EEB11CF90186004384FC /* Flutter */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, | |||
9740EEB21CF90195004384FC /* Debug.xcconfig */, | |||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */, | |||
9740EEB31CF90195004384FC /* Generated.xcconfig */, | |||
); | |||
name = Flutter; | |||
sourceTree = "<group>"; | |||
}; | |||
97C146E51CF9000F007C117D = { | |||
isa = PBXGroup; | |||
children = ( | |||
9740EEB11CF90186004384FC /* Flutter */, | |||
97C146F01CF9000F007C117D /* Runner */, | |||
97C146EF1CF9000F007C117D /* Products */, | |||
331C8082294A63A400263BE5 /* RunnerTests */, | |||
); | |||
sourceTree = "<group>"; | |||
}; | |||
97C146EF1CF9000F007C117D /* Products */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
97C146EE1CF9000F007C117D /* Runner.app */, | |||
331C8081294A63A400263BE5 /* RunnerTests.xctest */, | |||
); | |||
name = Products; | |||
sourceTree = "<group>"; | |||
}; | |||
97C146F01CF9000F007C117D /* Runner */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
97C146FA1CF9000F007C117D /* Main.storyboard */, | |||
97C146FD1CF9000F007C117D /* Assets.xcassets */, | |||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, | |||
97C147021CF9000F007C117D /* Info.plist */, | |||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, | |||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, | |||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */, | |||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, | |||
); | |||
path = Runner; | |||
sourceTree = "<group>"; | |||
}; | |||
/* End PBXGroup section */ | |||
/* Begin PBXNativeTarget section */ | |||
331C8080294A63A400263BE5 /* RunnerTests */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; | |||
buildPhases = ( | |||
331C807D294A63A400263BE5 /* Sources */, | |||
331C807F294A63A400263BE5 /* Resources */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
331C8086294A63A400263BE5 /* PBXTargetDependency */, | |||
); | |||
name = RunnerTests; | |||
productName = RunnerTests; | |||
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; | |||
productType = "com.apple.product-type.bundle.unit-test"; | |||
}; | |||
97C146ED1CF9000F007C117D /* Runner */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; | |||
buildPhases = ( | |||
9740EEB61CF901F6004384FC /* Run Script */, | |||
97C146EA1CF9000F007C117D /* Sources */, | |||
97C146EB1CF9000F007C117D /* Frameworks */, | |||
97C146EC1CF9000F007C117D /* Resources */, | |||
9705A1C41CF9048500538489 /* Embed Frameworks */, | |||
3B06AD1E1E4923F5004D2608 /* Thin Binary */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
); | |||
name = Runner; | |||
productName = Runner; | |||
productReference = 97C146EE1CF9000F007C117D /* Runner.app */; | |||
productType = "com.apple.product-type.application"; | |||
}; | |||
/* End PBXNativeTarget section */ | |||
/* Begin PBXProject section */ | |||
97C146E61CF9000F007C117D /* Project object */ = { | |||
isa = PBXProject; | |||
attributes = { | |||
BuildIndependentTargetsInParallel = YES; | |||
LastUpgradeCheck = 1510; | |||
ORGANIZATIONNAME = ""; | |||
TargetAttributes = { | |||
331C8080294A63A400263BE5 = { | |||
CreatedOnToolsVersion = 14.0; | |||
TestTargetID = 97C146ED1CF9000F007C117D; | |||
}; | |||
97C146ED1CF9000F007C117D = { | |||
CreatedOnToolsVersion = 7.3.1; | |||
LastSwiftMigration = 1100; | |||
}; | |||
}; | |||
}; | |||
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; | |||
compatibilityVersion = "Xcode 9.3"; | |||
developmentRegion = en; | |||
hasScannedForEncodings = 0; | |||
knownRegions = ( | |||
en, | |||
Base, | |||
); | |||
mainGroup = 97C146E51CF9000F007C117D; | |||
productRefGroup = 97C146EF1CF9000F007C117D /* Products */; | |||
projectDirPath = ""; | |||
projectRoot = ""; | |||
targets = ( | |||
97C146ED1CF9000F007C117D /* Runner */, | |||
331C8080294A63A400263BE5 /* RunnerTests */, | |||
); | |||
}; | |||
/* End PBXProject section */ | |||
/* Begin PBXResourcesBuildPhase section */ | |||
331C807F294A63A400263BE5 /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
97C146EC1CF9000F007C117D /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, | |||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, | |||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, | |||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXResourcesBuildPhase section */ | |||
/* Begin PBXShellScriptBuildPhase section */ | |||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
alwaysOutOfDate = 1; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputPaths = ( | |||
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", | |||
); | |||
name = "Thin Binary"; | |||
outputPaths = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
shellPath = /bin/sh; | |||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; | |||
}; | |||
9740EEB61CF901F6004384FC /* Run Script */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
alwaysOutOfDate = 1; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputPaths = ( | |||
); | |||
name = "Run Script"; | |||
outputPaths = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
shellPath = /bin/sh; | |||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | |||
}; | |||
/* End PBXShellScriptBuildPhase section */ | |||
/* Begin PBXSourcesBuildPhase section */ | |||
331C807D294A63A400263BE5 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
97C146EA1CF9000F007C117D /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, | |||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXSourcesBuildPhase section */ | |||
/* Begin PBXTargetDependency section */ | |||
331C8086294A63A400263BE5 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 97C146ED1CF9000F007C117D /* Runner */; | |||
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; | |||
}; | |||
/* End PBXTargetDependency section */ | |||
/* Begin PBXVariantGroup section */ | |||
97C146FA1CF9000F007C117D /* Main.storyboard */ = { | |||
isa = PBXVariantGroup; | |||
children = ( | |||
97C146FB1CF9000F007C117D /* Base */, | |||
); | |||
name = Main.storyboard; | |||
sourceTree = "<group>"; | |||
}; | |||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { | |||
isa = PBXVariantGroup; | |||
children = ( | |||
97C147001CF9000F007C117D /* Base */, | |||
); | |||
name = LaunchScreen.storyboard; | |||
sourceTree = "<group>"; | |||
}; | |||
/* End PBXVariantGroup section */ | |||
/* Begin XCBuildConfiguration section */ | |||
249021D3217E4FDB00AE95B9 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ALWAYS_SEARCH_USER_PATHS = NO; | |||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | |||
CLANG_ANALYZER_NONNULL = YES; | |||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | |||
CLANG_CXX_LIBRARY = "libc++"; | |||
CLANG_ENABLE_MODULES = YES; | |||
CLANG_ENABLE_OBJC_ARC = YES; | |||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |||
CLANG_WARN_BOOL_CONVERSION = YES; | |||
CLANG_WARN_COMMA = YES; | |||
CLANG_WARN_CONSTANT_CONVERSION = YES; | |||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |||
CLANG_WARN_EMPTY_BODY = YES; | |||
CLANG_WARN_ENUM_CONVERSION = YES; | |||
CLANG_WARN_INFINITE_RECURSION = YES; | |||
CLANG_WARN_INT_CONVERSION = YES; | |||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | |||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |||
CLANG_WARN_STRICT_PROTOTYPES = YES; | |||
CLANG_WARN_SUSPICIOUS_MOVE = YES; | |||
CLANG_WARN_UNREACHABLE_CODE = YES; | |||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | |||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | |||
COPY_PHASE_STRIP = NO; | |||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | |||
ENABLE_NS_ASSERTIONS = NO; | |||
ENABLE_STRICT_OBJC_MSGSEND = YES; | |||
ENABLE_USER_SCRIPT_SANDBOXING = NO; | |||
GCC_C_LANGUAGE_STANDARD = gnu99; | |||
GCC_NO_COMMON_BLOCKS = YES; | |||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |||
GCC_WARN_UNDECLARED_SELECTOR = YES; | |||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |||
GCC_WARN_UNUSED_FUNCTION = YES; | |||
GCC_WARN_UNUSED_VARIABLE = YES; | |||
IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||
MTL_ENABLE_DEBUG_INFO = NO; | |||
SDKROOT = iphoneos; | |||
SUPPORTED_PLATFORMS = iphoneos; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
VALIDATE_PRODUCT = YES; | |||
}; | |||
name = Profile; | |||
}; | |||
249021D4217E4FDB00AE95B9 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CLANG_ENABLE_MODULES = YES; | |||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | |||
ENABLE_BITCODE = NO; | |||
INFOPLIST_FILE = Runner/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | |||
SWIFT_VERSION = 5.0; | |||
VERSIONING_SYSTEM = "apple-generic"; | |||
}; | |||
name = Profile; | |||
}; | |||
331C8088294A63A400263BE5 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CODE_SIGN_STYLE = Automatic; | |||
CURRENT_PROJECT_VERSION = 1; | |||
GENERATE_INFOPLIST_FILE = YES; | |||
MARKETING_VERSION = 1.0; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001.RunnerTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | |||
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | |||
SWIFT_VERSION = 5.0; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | |||
}; | |||
name = Debug; | |||
}; | |||
331C8089294A63A400263BE5 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CODE_SIGN_STYLE = Automatic; | |||
CURRENT_PROJECT_VERSION = 1; | |||
GENERATE_INFOPLIST_FILE = YES; | |||
MARKETING_VERSION = 1.0; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001.RunnerTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | |||
}; | |||
name = Release; | |||
}; | |||
331C808A294A63A400263BE5 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CODE_SIGN_STYLE = Automatic; | |||
CURRENT_PROJECT_VERSION = 1; | |||
GENERATE_INFOPLIST_FILE = YES; | |||
MARKETING_VERSION = 1.0; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001.RunnerTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; | |||
}; | |||
name = Profile; | |||
}; | |||
97C147031CF9000F007C117D /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ALWAYS_SEARCH_USER_PATHS = NO; | |||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | |||
CLANG_ANALYZER_NONNULL = YES; | |||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | |||
CLANG_CXX_LIBRARY = "libc++"; | |||
CLANG_ENABLE_MODULES = YES; | |||
CLANG_ENABLE_OBJC_ARC = YES; | |||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |||
CLANG_WARN_BOOL_CONVERSION = YES; | |||
CLANG_WARN_COMMA = YES; | |||
CLANG_WARN_CONSTANT_CONVERSION = YES; | |||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |||
CLANG_WARN_EMPTY_BODY = YES; | |||
CLANG_WARN_ENUM_CONVERSION = YES; | |||
CLANG_WARN_INFINITE_RECURSION = YES; | |||
CLANG_WARN_INT_CONVERSION = YES; | |||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | |||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |||
CLANG_WARN_STRICT_PROTOTYPES = YES; | |||
CLANG_WARN_SUSPICIOUS_MOVE = YES; | |||
CLANG_WARN_UNREACHABLE_CODE = YES; | |||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | |||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | |||
COPY_PHASE_STRIP = NO; | |||
DEBUG_INFORMATION_FORMAT = dwarf; | |||
ENABLE_STRICT_OBJC_MSGSEND = YES; | |||
ENABLE_TESTABILITY = YES; | |||
ENABLE_USER_SCRIPT_SANDBOXING = NO; | |||
GCC_C_LANGUAGE_STANDARD = gnu99; | |||
GCC_DYNAMIC_NO_PIC = NO; | |||
GCC_NO_COMMON_BLOCKS = YES; | |||
GCC_OPTIMIZATION_LEVEL = 0; | |||
GCC_PREPROCESSOR_DEFINITIONS = ( | |||
"DEBUG=1", | |||
"$(inherited)", | |||
); | |||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |||
GCC_WARN_UNDECLARED_SELECTOR = YES; | |||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |||
GCC_WARN_UNUSED_FUNCTION = YES; | |||
GCC_WARN_UNUSED_VARIABLE = YES; | |||
IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||
MTL_ENABLE_DEBUG_INFO = YES; | |||
ONLY_ACTIVE_ARCH = YES; | |||
SDKROOT = iphoneos; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
}; | |||
name = Debug; | |||
}; | |||
97C147041CF9000F007C117D /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
ALWAYS_SEARCH_USER_PATHS = NO; | |||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | |||
CLANG_ANALYZER_NONNULL = YES; | |||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | |||
CLANG_CXX_LIBRARY = "libc++"; | |||
CLANG_ENABLE_MODULES = YES; | |||
CLANG_ENABLE_OBJC_ARC = YES; | |||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |||
CLANG_WARN_BOOL_CONVERSION = YES; | |||
CLANG_WARN_COMMA = YES; | |||
CLANG_WARN_CONSTANT_CONVERSION = YES; | |||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |||
CLANG_WARN_EMPTY_BODY = YES; | |||
CLANG_WARN_ENUM_CONVERSION = YES; | |||
CLANG_WARN_INFINITE_RECURSION = YES; | |||
CLANG_WARN_INT_CONVERSION = YES; | |||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | |||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |||
CLANG_WARN_STRICT_PROTOTYPES = YES; | |||
CLANG_WARN_SUSPICIOUS_MOVE = YES; | |||
CLANG_WARN_UNREACHABLE_CODE = YES; | |||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | |||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | |||
COPY_PHASE_STRIP = NO; | |||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | |||
ENABLE_NS_ASSERTIONS = NO; | |||
ENABLE_STRICT_OBJC_MSGSEND = YES; | |||
ENABLE_USER_SCRIPT_SANDBOXING = NO; | |||
GCC_C_LANGUAGE_STANDARD = gnu99; | |||
GCC_NO_COMMON_BLOCKS = YES; | |||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |||
GCC_WARN_UNDECLARED_SELECTOR = YES; | |||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |||
GCC_WARN_UNUSED_FUNCTION = YES; | |||
GCC_WARN_UNUSED_VARIABLE = YES; | |||
IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||
MTL_ENABLE_DEBUG_INFO = NO; | |||
SDKROOT = iphoneos; | |||
SUPPORTED_PLATFORMS = iphoneos; | |||
SWIFT_COMPILATION_MODE = wholemodule; | |||
SWIFT_OPTIMIZATION_LEVEL = "-O"; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
VALIDATE_PRODUCT = YES; | |||
}; | |||
name = Release; | |||
}; | |||
97C147061CF9000F007C117D /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CLANG_ENABLE_MODULES = YES; | |||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | |||
ENABLE_BITCODE = NO; | |||
INFOPLIST_FILE = Runner/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | |||
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | |||
SWIFT_VERSION = 5.0; | |||
VERSIONING_SYSTEM = "apple-generic"; | |||
}; | |||
name = Debug; | |||
}; | |||
97C147071CF9000F007C117D /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CLANG_ENABLE_MODULES = YES; | |||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | |||
ENABLE_BITCODE = NO; | |||
INFOPLIST_FILE = Runner/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | |||
SWIFT_VERSION = 5.0; | |||
VERSIONING_SYSTEM = "apple-generic"; | |||
}; | |||
name = Release; | |||
}; | |||
/* End XCBuildConfiguration section */ | |||
/* Begin XCConfigurationList section */ | |||
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
331C8088294A63A400263BE5 /* Debug */, | |||
331C8089294A63A400263BE5 /* Release */, | |||
331C808A294A63A400263BE5 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
97C147031CF9000F007C117D /* Debug */, | |||
97C147041CF9000F007C117D /* Release */, | |||
249021D3217E4FDB00AE95B9 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
97C147061CF9000F007C117D /* Debug */, | |||
97C147071CF9000F007C117D /* Release */, | |||
249021D4217E4FDB00AE95B9 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
/* End XCConfigurationList section */ | |||
}; | |||
rootObject = 97C146E61CF9000F007C117D /* Project object */; | |||
} |
@@ -0,0 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Workspace | |||
version = "1.0"> | |||
<FileRef | |||
location = "self:"> | |||
</FileRef> | |||
</Workspace> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>IDEDidComputeMac32BitWarning</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>PreviewsEnabled</key> | |||
<false/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,98 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Scheme | |||
LastUpgradeVersion = "1510" | |||
version = "1.3"> | |||
<BuildAction | |||
parallelizeBuildables = "YES" | |||
buildImplicitDependencies = "YES"> | |||
<BuildActionEntries> | |||
<BuildActionEntry | |||
buildForTesting = "YES" | |||
buildForRunning = "YES" | |||
buildForProfiling = "YES" | |||
buildForArchiving = "YES" | |||
buildForAnalyzing = "YES"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "97C146ED1CF9000F007C117D" | |||
BuildableName = "Runner.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</BuildActionEntry> | |||
</BuildActionEntries> | |||
</BuildAction> | |||
<TestAction | |||
buildConfiguration = "Debug" | |||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
shouldUseLaunchSchemeArgsEnv = "YES"> | |||
<MacroExpansion> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "97C146ED1CF9000F007C117D" | |||
BuildableName = "Runner.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</MacroExpansion> | |||
<Testables> | |||
<TestableReference | |||
skipped = "NO" | |||
parallelizable = "YES"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "331C8080294A63A400263BE5" | |||
BuildableName = "RunnerTests.xctest" | |||
BlueprintName = "RunnerTests" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</TestableReference> | |||
</Testables> | |||
</TestAction> | |||
<LaunchAction | |||
buildConfiguration = "Debug" | |||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
launchStyle = "0" | |||
useCustomWorkingDirectory = "NO" | |||
ignoresPersistentStateOnLaunch = "NO" | |||
debugDocumentVersioning = "YES" | |||
debugServiceExtension = "internal" | |||
allowLocationSimulation = "YES"> | |||
<BuildableProductRunnable | |||
runnableDebuggingMode = "0"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "97C146ED1CF9000F007C117D" | |||
BuildableName = "Runner.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</BuildableProductRunnable> | |||
</LaunchAction> | |||
<ProfileAction | |||
buildConfiguration = "Profile" | |||
shouldUseLaunchSchemeArgsEnv = "YES" | |||
savedToolIdentifier = "" | |||
useCustomWorkingDirectory = "NO" | |||
debugDocumentVersioning = "YES"> | |||
<BuildableProductRunnable | |||
runnableDebuggingMode = "0"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "97C146ED1CF9000F007C117D" | |||
BuildableName = "Runner.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</BuildableProductRunnable> | |||
</ProfileAction> | |||
<AnalyzeAction | |||
buildConfiguration = "Debug"> | |||
</AnalyzeAction> | |||
<ArchiveAction | |||
buildConfiguration = "Release" | |||
revealArchiveInOrganizer = "YES"> | |||
</ArchiveAction> | |||
</Scheme> |
@@ -0,0 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Workspace | |||
version = "1.0"> | |||
<FileRef | |||
location = "group:Runner.xcodeproj"> | |||
</FileRef> | |||
</Workspace> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>IDEDidComputeMac32BitWarning</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>PreviewsEnabled</key> | |||
<false/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,13 @@ | |||
import Flutter | |||
import UIKit | |||
@main | |||
@objc class AppDelegate: FlutterAppDelegate { | |||
override func application( | |||
_ application: UIApplication, | |||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? | |||
) -> Bool { | |||
GeneratedPluginRegistrant.register(with: self) | |||
return super.application(application, didFinishLaunchingWithOptions: launchOptions) | |||
} | |||
} |
@@ -0,0 +1,122 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"size" : "20x20", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-20x20@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "20x20", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-20x20@3x.png", | |||
"scale" : "3x" | |||
}, | |||
{ | |||
"size" : "29x29", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-29x29@1x.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "29x29", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-29x29@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "29x29", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-29x29@3x.png", | |||
"scale" : "3x" | |||
}, | |||
{ | |||
"size" : "40x40", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-40x40@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "40x40", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-40x40@3x.png", | |||
"scale" : "3x" | |||
}, | |||
{ | |||
"size" : "60x60", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-60x60@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "60x60", | |||
"idiom" : "iphone", | |||
"filename" : "Icon-App-60x60@3x.png", | |||
"scale" : "3x" | |||
}, | |||
{ | |||
"size" : "20x20", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-20x20@1x.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "20x20", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-20x20@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "29x29", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-29x29@1x.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "29x29", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-29x29@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "40x40", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-40x40@1x.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "40x40", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-40x40@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "76x76", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-76x76@1x.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "76x76", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-76x76@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "83.5x83.5", | |||
"idiom" : "ipad", | |||
"filename" : "Icon-App-83.5x83.5@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "1024x1024", | |||
"idiom" : "ios-marketing", | |||
"filename" : "Icon-App-1024x1024@1x.png", | |||
"scale" : "1x" | |||
} | |||
], | |||
"info" : { | |||
"version" : 1, | |||
"author" : "xcode" | |||
} | |||
} |
@@ -0,0 +1,23 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"idiom" : "universal", | |||
"filename" : "LaunchImage.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"filename" : "LaunchImage@2x.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"filename" : "LaunchImage@3x.png", | |||
"scale" : "3x" | |||
} | |||
], | |||
"info" : { | |||
"version" : 1, | |||
"author" : "xcode" | |||
} | |||
} |
@@ -0,0 +1,5 @@ | |||
# Launch Screen Assets | |||
You can customize the launch screen with your own desired assets by replacing the image files in this directory. | |||
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. |
@@ -0,0 +1,37 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<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"> | |||
<dependencies> | |||
<deployment identifier="iOS"/> | |||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/> | |||
</dependencies> | |||
<scenes> | |||
<!--View Controller--> | |||
<scene sceneID="EHf-IW-A2E"> | |||
<objects> | |||
<viewController id="01J-lp-oVM" sceneMemberID="viewController"> | |||
<layoutGuides> | |||
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/> | |||
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/> | |||
</layoutGuides> | |||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | |||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |||
<subviews> | |||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"> | |||
</imageView> | |||
</subviews> | |||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |||
<constraints> | |||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/> | |||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/> | |||
</constraints> | |||
</view> | |||
</viewController> | |||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | |||
</objects> | |||
<point key="canvasLocation" x="53" y="375"/> | |||
</scene> | |||
</scenes> | |||
<resources> | |||
<image name="LaunchImage" width="168" height="185"/> | |||
</resources> | |||
</document> |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<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"> | |||
<dependencies> | |||
<deployment identifier="iOS"/> | |||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> | |||
</dependencies> | |||
<scenes> | |||
<!--Flutter View Controller--> | |||
<scene sceneID="tne-QT-ifu"> | |||
<objects> | |||
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController"> | |||
<layoutGuides> | |||
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> | |||
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> | |||
</layoutGuides> | |||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> | |||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/> | |||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | |||
</view> | |||
</viewController> | |||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> | |||
</objects> | |||
</scene> | |||
</scenes> | |||
</document> |
@@ -0,0 +1,49 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>$(DEVELOPMENT_LANGUAGE)</string> | |||
<key>CFBundleDisplayName</key> | |||
<string>Demo001</string> | |||
<key>CFBundleExecutable</key> | |||
<string>$(EXECUTABLE_NAME)</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
<string>demo001</string> | |||
<key>CFBundlePackageType</key> | |||
<string>APPL</string> | |||
<key>CFBundleShortVersionString</key> | |||
<string>$(FLUTTER_BUILD_NAME)</string> | |||
<key>CFBundleSignature</key> | |||
<string>????</string> | |||
<key>CFBundleVersion</key> | |||
<string>$(FLUTTER_BUILD_NUMBER)</string> | |||
<key>LSRequiresIPhoneOS</key> | |||
<true/> | |||
<key>UILaunchStoryboardName</key> | |||
<string>LaunchScreen</string> | |||
<key>UIMainStoryboardFile</key> | |||
<string>Main</string> | |||
<key>UISupportedInterfaceOrientations</key> | |||
<array> | |||
<string>UIInterfaceOrientationPortrait</string> | |||
<string>UIInterfaceOrientationLandscapeLeft</string> | |||
<string>UIInterfaceOrientationLandscapeRight</string> | |||
</array> | |||
<key>UISupportedInterfaceOrientations~ipad</key> | |||
<array> | |||
<string>UIInterfaceOrientationPortrait</string> | |||
<string>UIInterfaceOrientationPortraitUpsideDown</string> | |||
<string>UIInterfaceOrientationLandscapeLeft</string> | |||
<string>UIInterfaceOrientationLandscapeRight</string> | |||
</array> | |||
<key>CADisableMinimumFrameDurationOnPhone</key> | |||
<true/> | |||
<key>UIApplicationSupportsIndirectInputEvents</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1 @@ | |||
#import "GeneratedPluginRegistrant.h" |
@@ -0,0 +1,12 @@ | |||
import Flutter | |||
import UIKit | |||
import XCTest | |||
class RunnerTests: XCTestCase { | |||
func testExample() { | |||
// If you add code to the Runner application, consider adding tests here. | |||
// See https://developer.apple.com/documentation/xctest for more information about using XCTest. | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
import 'package:audioplayers/audioplayers.dart'; | |||
import 'dart:typed_data'; | |||
import 'dart:async'; | |||
import 'dart:io'; | |||
import 'package:demo001/plugin/xunfei/audiotranslate/result_audio.dart'; | |||
class AudioPlayerHandler { | |||
final AudioPlayer _audioPlayer = AudioPlayer(); | |||
final Xunfei_AudioTranslation_Result_Audio _audioStream; | |||
AudioPlayerHandler(this._audioStream); | |||
// 播放音频流 | |||
Future<void> playAudio() async { | |||
// 从音频流获取数据并播放 | |||
await for (Uint8List audioData in _audioStream.audioStream) { | |||
await _playAudioData(audioData); | |||
} | |||
} | |||
// 播放音频数据 | |||
Future<void> _playAudioData(Uint8List audioData) async { | |||
// 暂时将音频数据保存到文件系统 | |||
final file = await _saveToFile(audioData); | |||
// 播放文件 | |||
await _audioPlayer.play(DeviceFileSource(file.path)); | |||
} | |||
// 保存音频数据到文件 | |||
Future<File> _saveToFile(Uint8List audioData) async { | |||
final directory = await Directory.systemTemp.createTemp(); | |||
final file = File('${directory.path}/audio.pcm'); | |||
await file.writeAsBytes(audioData); | |||
return file; | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
import 'package:demo001/scenes/HomeScene.dart'; | |||
import 'package:flutter/material.dart'; | |||
void main() { | |||
WidgetsFlutterBinding.ensureInitialized(); | |||
runApp(const MyApp()); | |||
} | |||
class MyApp extends StatelessWidget { | |||
const MyApp({super.key}); | |||
// This widget is the root of your application. | |||
@override | |||
Widget build(BuildContext context) { | |||
return MaterialApp( | |||
title: 'Flutter Demo', | |||
theme: ThemeData( | |||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), | |||
useMaterial3: true, | |||
), | |||
home: const MyHomePage(title: 'Flutter Demo Home Page'), | |||
); | |||
} | |||
} |
@@ -0,0 +1,209 @@ | |||
import 'dart:convert'; | |||
import 'package:crypto/crypto.dart'; | |||
import 'package:demo001/plugin/xunfei/audiototext/result_test.dart'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:web_socket_channel/web_socket_channel.dart'; | |||
typedef ResponseCallback = void Function( | |||
Xunfei_AudioToText_Result_Text_Item text); | |||
class Xunfei_AudioToText { | |||
static const int STATUS_FIRST_FRAME = 0; | |||
static const int STATUS_CONTINUE_FRAME = 1; | |||
static const int STATUS_LAST_FRAME = 2; | |||
final String appId; | |||
final String apiKey; | |||
final String apiSecret; | |||
final String host = "iat-api.xfyun.cn"; | |||
final String requestUri = "/v2/iat"; | |||
WebSocketChannel? _channel; | |||
final ResponseCallback onResponse; // 回调函数类型 | |||
late Xunfei_AudioToText_Result_Text currtext; | |||
// 静态变量保存唯一实例 | |||
static Xunfei_AudioToText? _instance; | |||
Xunfei_AudioToText._internal({ | |||
required this.appId, | |||
required this.apiKey, | |||
required this.apiSecret, | |||
required this.onResponse, // 在构造函数中传递回调 | |||
}); | |||
// 工厂构造函数 | |||
factory Xunfei_AudioToText({ | |||
required String appId, | |||
required String apiKey, | |||
required String apiSecret, | |||
required ResponseCallback onResponse, | |||
}) { | |||
_instance ??= Xunfei_AudioToText._internal( | |||
appId: appId, | |||
apiKey: apiKey, | |||
apiSecret: apiSecret, | |||
onResponse: onResponse, | |||
); | |||
return _instance!; | |||
} | |||
// 创建 WebSocket URL | |||
String _createUrl() { | |||
final now = DateTime.now(); | |||
final date = | |||
DateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'").format(now.toUtc()); | |||
final signatureOrigin = | |||
"host: $host\ndate: $date\nGET $requestUri HTTP/1.1"; | |||
// 使用 HmacUtil 计算 HMAC-SHA256 签名 | |||
final signature = _hmacSha256(apiSecret, signatureOrigin); | |||
final authorization = base64.encode(utf8.encode( | |||
"hmac username=\"$apiKey\", algorithm=\"hmac-sha256\", headers=\"host date request-line\", signature=\"$signature\"")); | |||
final queryParams = { | |||
"host": host, | |||
"date": date, | |||
"authorization": authorization, | |||
}; | |||
final wsUri = | |||
'ws://$host$requestUri?${Uri(queryParameters: queryParams).query}'; | |||
return wsUri; | |||
} | |||
//测试sdk | |||
Future<void> start() async { | |||
String wsUrl = _createUrl(); | |||
await _connect(wsUrl); | |||
await Future.delayed(const Duration(seconds: 3)); | |||
return; | |||
} | |||
// 上传音频 | |||
Future<void> pushaudio(Stream<List<int>> audioStream) async { | |||
int frameSize = 1280; // 每一帧的音频大小 | |||
double interval = 0.04; // 发送音频间隔(单位:s) | |||
int status = STATUS_FIRST_FRAME; // 音频的状态信息,标识音频是第一帧,还是中间帧、最后一帧 | |||
currtext = Xunfei_AudioToText_Result_Text(); | |||
int index = 0; | |||
List<int> buffer = []; | |||
try { | |||
await for (List<int> frame in audioStream) { | |||
// 将音频数据添加到 buffer | |||
buffer.addAll(frame); | |||
while (buffer.length >= frameSize) { | |||
List<int> sendFrame = buffer.sublist(0, frameSize); | |||
buffer = buffer.sublist(frameSize); | |||
// 判断是否读取到足够的帧 | |||
if (index + frameSize <= buffer.length) { | |||
frame = buffer.sublist(index, index + frameSize); | |||
index += frameSize; | |||
} else { | |||
frame = buffer.sublist(index); | |||
index = buffer.length; // 结束 | |||
} | |||
// 第一帧处理 | |||
if (status == STATUS_FIRST_FRAME) { | |||
final param = { | |||
"common": { | |||
"app_id": appId, | |||
}, | |||
"business": { | |||
"language": "zh_cn", | |||
"domain": "iat", | |||
"accent": "mandarin", | |||
}, | |||
"data": { | |||
"status": status, | |||
"format": "audio/L16;rate=16000", | |||
"audio": base64Encode(sendFrame), | |||
"encoding": "raw", | |||
} | |||
}; | |||
String data = json.encode(param); | |||
_channel?.sink.add(data); | |||
// print('第一帧已发送...' + data); | |||
status = STATUS_CONTINUE_FRAME; | |||
} | |||
// 中间帧处理 | |||
else if (status == STATUS_CONTINUE_FRAME) { | |||
final param = { | |||
"data": { | |||
"status": status, | |||
"format": "audio/L16;rate=16000", | |||
"audio": base64Encode(sendFrame), | |||
"encoding": "raw", | |||
} | |||
}; | |||
String data = json.encode(param); | |||
_channel?.sink.add(data); | |||
// print('中间帧已发送...'); | |||
} | |||
// 最后一帧处理 | |||
else if (status == STATUS_LAST_FRAME) { | |||
final param = { | |||
"data": { | |||
"status": status, | |||
"format": "audio/L16;rate=16000", | |||
"audio": base64Encode(sendFrame), | |||
"encoding": "raw", | |||
} | |||
}; | |||
// print('最后一帧已发送...'); | |||
String data = json.encode(param); | |||
_channel?.sink.add(data); | |||
break; | |||
} | |||
// 模拟音频采样间隔 | |||
await Future.delayed( | |||
Duration(milliseconds: (interval * 1000).toInt())); | |||
} | |||
} | |||
status = STATUS_LAST_FRAME; | |||
String data = json.encode({ | |||
"data": { | |||
"status": status, | |||
"format": "audio/L16;rate=16000", | |||
"audio": base64Encode([]), | |||
"encoding": "raw", | |||
} | |||
}); | |||
_channel?.sink.add(data); | |||
} catch (e) { | |||
print("push msg: $e"); | |||
} | |||
print('音频处理完成'); | |||
} | |||
// 创建WebSocket连接 | |||
Future<void> _connect(String url) async { | |||
_channel = WebSocketChannel.connect(Uri.parse(url)); | |||
_channel?.stream.listen( | |||
(message) { | |||
onMessage(message); | |||
}, | |||
onError: (error) { | |||
print('连接失败: $error'); | |||
}, | |||
onDone: () { | |||
print('WebSocket 连接已关闭'); | |||
}, | |||
cancelOnError: true, | |||
); | |||
Future.delayed(const Duration(seconds: 1)); | |||
} | |||
Future<void> onMessage(String message) async {} | |||
// 使用SHA-256算法计算HMAC | |||
String _hmacSha256(String key, String message) { | |||
var keyBytes = utf8.encode(key); // 将密钥转为字节数组 | |||
var messageBytes = utf8.encode(message); // 将消息转为字节数组 | |||
var hmac = Hmac(sha256, keyBytes); // 创建 HMAC 对象,指定哈希算法和密钥 | |||
var digest = hmac.convert(messageBytes); // 计算消息的哈希 | |||
return base64.encode(digest.bytes); // 返回 base64 编码的哈希值 | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
// ignore: camel_case_types | |||
import 'dart:convert'; | |||
// ignore: camel_case_types | |||
class Xunfei_AudioToText_Result_Text_Item { | |||
final int sn; | |||
final String pgs; | |||
final List<int> rg; | |||
final List<dynamic> ws; | |||
Xunfei_AudioToText_Result_Text_Item({ | |||
required this.sn, | |||
required this.pgs, | |||
required this.rg, | |||
required this.ws, | |||
}); | |||
} | |||
//同声翻译 返回的 文本结果处理对象 | |||
// ignore: camel_case_types | |||
class Xunfei_AudioToText_Result_Text { | |||
final Map<int, Xunfei_AudioToText_Result_Text_Item> results = {}; | |||
Xunfei_AudioToText_Result_Text(); | |||
void add(String result) { | |||
print("添加文本结果:$result"); | |||
var resultMap = json.decode(result); | |||
int sn = resultMap["sn"] as int; | |||
String pgs = resultMap["pgs"] as String; | |||
List<int> rg = resultMap["rg"] != null | |||
? List<int>.from(resultMap["rg"]) | |||
: []; // 默认值为空列表 | |||
List<dynamic> ws = resultMap["ws"] as List<dynamic>; | |||
var item = | |||
Xunfei_AudioToText_Result_Text_Item(sn: sn, pgs: pgs, rg: rg, ws: ws); | |||
results[sn] = item; | |||
} | |||
String result() { | |||
if (results.isNotEmpty) { | |||
String resultStr = ""; | |||
Map<int, Xunfei_AudioToText_Result_Text_Item> _results = {}; | |||
var sortedKeys = results.keys.toList()..sort(); | |||
for (var key in sortedKeys) { | |||
var item = results[key]; | |||
if (item != null) { | |||
if (item.pgs == "rpl") { | |||
var start = item.rg[0]; | |||
var end = item.rg[1]; | |||
for (int i = start; i <= end; i++) { | |||
_results.remove(i); | |||
} | |||
} | |||
_results[item.sn] = item; | |||
} | |||
} | |||
var keys = _results.keys.toList()..sort(); | |||
for (var key in keys) { | |||
var item = results[key]; | |||
if (item != null) { | |||
for (var ws in item.ws) { | |||
var it = ws as Map<String, dynamic>; | |||
var cw = it["cw"] as List<dynamic>; | |||
for (var ct in cw) { | |||
resultStr += ct["w"] as String; | |||
} | |||
} | |||
} | |||
} | |||
return resultStr; | |||
} | |||
return ""; | |||
} | |||
} |
@@ -0,0 +1,273 @@ | |||
import 'dart:convert'; | |||
import 'package:crypto/crypto.dart'; | |||
import 'package:demo001/plugin/xunfei/audiotranslate/result_audio.dart'; | |||
import 'package:demo001/plugin/xunfei/audiotranslate/result_test.dart'; | |||
import 'package:web_socket_channel/web_socket_channel.dart'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:flutter/services.dart' show rootBundle; | |||
import 'dart:io'; | |||
typedef ResponseCallback = void Function( | |||
Xunfei_AudioTranslation_Result_Text text, | |||
Xunfei_AudioTranslation_Result_Audio audio); // 定义回调函数类型 | |||
class Xunfei_AudioTranslation { | |||
static const int STATUS_FIRST_FRAME = 0; | |||
static const int STATUS_CONTINUE_FRAME = 1; | |||
static const int STATUS_LAST_FRAME = 2; | |||
// 静态变量保存唯一实例 | |||
static Xunfei_AudioTranslation? _instance; | |||
final String appId; | |||
final String apiKey; | |||
final String apiSecret; | |||
final String host = "ws-api.xf-yun.com"; | |||
final String httpProto = "HTTP/1.1"; | |||
final String httpMethod = "GET"; | |||
final String requestUri = "/v1/private/simult_interpretation"; | |||
final String algorithm = "hmac-sha256"; | |||
final int state = 0; //0未初始化 1已连接 2翻译中 | |||
final String msg = ""; | |||
WebSocketChannel? _channel; | |||
final ResponseCallback onResponse; // 回调函数类型 | |||
late Xunfei_AudioTranslation_Result_Text currtest; //翻译结果对象 文本 | |||
late Xunfei_AudioTranslation_Result_Audio curraudio; //翻译结果对象 音频 | |||
Xunfei_AudioTranslation._internal({ | |||
required this.appId, | |||
required this.apiKey, | |||
required this.apiSecret, | |||
required this.onResponse, // 在构造函数中传递回调 | |||
}); | |||
// 工厂构造函数 | |||
factory Xunfei_AudioTranslation({ | |||
required String appId, | |||
required String apiKey, | |||
required String apiSecret, | |||
required ResponseCallback onResponse, | |||
}) { | |||
_instance ??= Xunfei_AudioTranslation._internal( | |||
appId: appId, | |||
apiKey: apiKey, | |||
apiSecret: apiSecret, | |||
onResponse: onResponse, | |||
); | |||
return _instance!; | |||
} | |||
// 创建 WebSocket URL | |||
String _createUrl() { | |||
final now = DateTime.now(); | |||
final date = | |||
DateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'").format(now.toUtc()); | |||
final signatureOrigin = | |||
"host: $host\ndate: $date\nGET $requestUri HTTP/1.1"; | |||
// 使用 HmacUtil 计算 HMAC-SHA256 签名 | |||
final signature = _hmacSha256(apiSecret, signatureOrigin); | |||
final authorization = base64.encode(utf8.encode( | |||
"api_key=\"$apiKey\", algorithm=\"hmac-sha256\", headers=\"host date request-line\", signature=\"$signature\"")); | |||
final queryParams = { | |||
"authorization": authorization, | |||
"date": date, | |||
"host": host, | |||
"serviceId": "simult_interpretation" | |||
}; | |||
final wsUri = | |||
'ws://$host$requestUri?${Uri(queryParameters: queryParams).query}'; | |||
return wsUri; | |||
} | |||
// 创建参数 | |||
Map<String, dynamic> _createParams( | |||
String appId, int status, List<int> audio) { | |||
final param = { | |||
"header": { | |||
"app_id": appId, | |||
"status": status, | |||
}, | |||
"parameter": { | |||
"ist": { | |||
"accent": "mandarin", | |||
"domain": "ist_ed_open", | |||
"language": "zh_cn", | |||
"vto": 15000, | |||
"eos": 150000 | |||
}, | |||
"streamtrans": {"from": "cn", "to": "en"}, | |||
"tts": { | |||
"vcn": "x2_catherine", | |||
"tts_results": { | |||
"encoding": "raw", | |||
"sample_rate": 16000, | |||
"channels": 1, | |||
"bit_depth": 16, | |||
"frame_size": 0 | |||
} | |||
} | |||
}, | |||
"payload": { | |||
"data": { | |||
"audio": base64.encode(audio), | |||
"encoding": "raw", | |||
"sample_rate": 16000, | |||
"seq": 1, | |||
"status": status | |||
} | |||
} | |||
}; | |||
return param; | |||
} | |||
// 使用SHA-256算法计算HMAC | |||
String _hmacSha256(String key, String message) { | |||
var keyBytes = utf8.encode(key); // 将密钥转为字节数组 | |||
var messageBytes = utf8.encode(message); // 将消息转为字节数组 | |||
var hmac = Hmac(sha256, keyBytes); // 创建 HMAC 对象,指定哈希算法和密钥 | |||
var digest = hmac.convert(messageBytes); // 计算消息的哈希 | |||
return base64.encode(digest.bytes); // 返回 base64 编码的哈希值 | |||
} | |||
//测试sdk | |||
Future<void> start() async { | |||
String wsUrl = _createUrl(); | |||
await _connect(wsUrl); | |||
await Future.delayed(const Duration(seconds: 3)); | |||
return; | |||
} | |||
// 创建WebSocket连接 | |||
Future<void> _connect(String url) async { | |||
_channel = WebSocketChannel.connect(Uri.parse(url)); | |||
_channel?.stream.listen( | |||
(message) { | |||
onMessage(message); | |||
}, | |||
onError: (error) { | |||
print('连接失败: $error'); | |||
}, | |||
onDone: () { | |||
print('WebSocket 连接已关闭'); | |||
}, | |||
cancelOnError: true, | |||
); | |||
Future.delayed(const Duration(seconds: 1)); | |||
} | |||
// 上传音频 | |||
Future<void> pushaudio(Stream<List<int>> audioStream) async { | |||
int frameSize = 1280; // 每一帧的音频大小 | |||
double interval = 0.04; // 发送音频间隔(单位:s) | |||
int status = STATUS_FIRST_FRAME; // 音频的状态信息,标识音频是第一帧,还是中间帧、最后一帧 | |||
currtest = Xunfei_AudioTranslation_Result_Text(); | |||
int index = 0; | |||
List<int> buffer = []; | |||
try { | |||
await for (List<int> frame in audioStream) { | |||
// 将音频数据添加到 buffer | |||
buffer.addAll(frame); | |||
while (buffer.length >= frameSize) { | |||
List<int> sendFrame = buffer.sublist(0, frameSize); | |||
buffer = buffer.sublist(frameSize); | |||
// 判断是否读取到足够的帧 | |||
if (index + frameSize <= buffer.length) { | |||
frame = buffer.sublist(index, index + frameSize); | |||
index += frameSize; | |||
} else { | |||
frame = buffer.sublist(index); | |||
index = buffer.length; // 结束 | |||
} | |||
// 第一帧处理 | |||
if (status == STATUS_FIRST_FRAME) { | |||
String data = json.encode(_createParams(appId, status, sendFrame)); | |||
_channel?.sink.add(data); | |||
// print('第一帧已发送...' + data); | |||
status = STATUS_CONTINUE_FRAME; | |||
} | |||
// 中间帧处理 | |||
else if (status == STATUS_CONTINUE_FRAME) { | |||
String data = json.encode(_createParams(appId, status, sendFrame)); | |||
_channel?.sink.add(data); | |||
// print('中间帧已发送...'); | |||
} | |||
// 最后一帧处理 | |||
else if (status == STATUS_LAST_FRAME) { | |||
// print('最后一帧已发送...'); | |||
String data = json.encode(_createParams(appId, status, sendFrame)); | |||
_channel?.sink.add(data); | |||
break; | |||
} | |||
// 模拟音频采样间隔 | |||
await Future.delayed( | |||
Duration(milliseconds: (interval * 1000).toInt())); | |||
} | |||
} | |||
status = STATUS_LAST_FRAME; | |||
String data = json.encode(_createParams(appId, status, [])); | |||
_channel?.sink.add(data); | |||
} catch (e) { | |||
print("push msg: $e"); | |||
} | |||
print('音频处理完成'); | |||
} | |||
// 处理接收到的消息 | |||
Future<void> onMessage(String message) async { | |||
try { | |||
print("收到的消息:$message"); | |||
} catch (e) { | |||
print("receive msg, but parse exception: $e"); | |||
} | |||
// 对结果进行解析 | |||
var messageMap = json.decode(message); | |||
var status = messageMap["header"]["status"]; | |||
var sid = messageMap["header"]["sid"]; | |||
// 接收到的识别结果写到文本 | |||
if (messageMap.containsKey('payload') && | |||
messageMap['payload'].containsKey('recognition_results')) { | |||
var result = messageMap['payload']['recognition_results']['text']; | |||
var asrresult = utf8.decode(base64.decode(result)); | |||
currtest.add(asrresult); //加入到结果对象中 | |||
} | |||
// 接收到的翻译结果写到文本 | |||
// if (messageMap['payload'].containsKey('streamtrans_results')) { | |||
// var result = messageMap['payload']['streamtrans_results']['text']; | |||
// var transresult = utf8.decode(base64.decode(result)); | |||
// } | |||
// 把接收到的音频流合成PCM | |||
if (messageMap.containsKey('payload') && | |||
messageMap['payload'].containsKey('tts_results')) { | |||
var audio = messageMap['payload']['tts_results']['audio']; | |||
var audioData = base64.decode(audio); | |||
curraudio.addAudioData(audioData); | |||
// var file = File('output/audio/trans.pcm'); | |||
// await file.writeAsBytes(audioData, mode: FileMode.append); | |||
} | |||
onResponse(currtest, curraudio); | |||
if (status == 2) { | |||
print("数据处理完毕,等待实时转译结束!同传后的音频文件请到output/audio/目录查看..."); | |||
await Future.delayed(Duration(seconds: 3)); | |||
close(); | |||
} | |||
return; | |||
} | |||
// 关闭WebSocket连接 | |||
void close() { | |||
_channel?.sink.close(); | |||
} | |||
} |
@@ -0,0 +1,25 @@ | |||
import 'dart:typed_data'; | |||
import 'dart:async'; | |||
// ignore: camel_case_types | |||
class Xunfei_AudioTranslation_Result_Audio { | |||
final List<Uint8List> _buffer = []; | |||
final _streamController = StreamController<Uint8List>(); | |||
// 向音频流添加数据 | |||
void addAudioData(Uint8List data) { | |||
_buffer.add(data); | |||
_streamController.add(data); // 每当添加新数据时,推送到流 | |||
} | |||
// 获取音频数据流 | |||
Stream<Uint8List> get audioStream => _streamController.stream; | |||
// 获取当前缓存的所有数据 | |||
List<Uint8List> get buffer => List.from(_buffer); | |||
// 关闭流 | |||
void close() { | |||
_streamController.close(); | |||
} | |||
} |
@@ -0,0 +1,73 @@ | |||
// ignore: camel_case_types | |||
import 'dart:convert'; | |||
class Xunfei_AudioTranslation_Result_Text_Item { | |||
final int sn; | |||
final String pgs; | |||
final List<int> rg; | |||
final List<dynamic> ws; | |||
Xunfei_AudioTranslation_Result_Text_Item({ | |||
required this.sn, | |||
required this.pgs, | |||
required this.rg, | |||
required this.ws, | |||
}); | |||
} | |||
//同声翻译 返回的 文本结果处理对象 | |||
// ignore: camel_case_types | |||
class Xunfei_AudioTranslation_Result_Text { | |||
final Map<int, Xunfei_AudioTranslation_Result_Text_Item> results = {}; | |||
Xunfei_AudioTranslation_Result_Text(); | |||
void add(String result) { | |||
print("添加文本结果:$result"); | |||
var resultMap = json.decode(result); | |||
int sn = resultMap["sn"] as int; | |||
String pgs = resultMap["pgs"] as String; | |||
List<int> rg = resultMap["rg"] != null | |||
? List<int>.from(resultMap["rg"]) | |||
: []; // 默认值为空列表 | |||
List<dynamic> ws = resultMap["ws"] as List<dynamic>; | |||
var item = Xunfei_AudioTranslation_Result_Text_Item( | |||
sn: sn, pgs: pgs, rg: rg, ws: ws); | |||
results[sn] = item; | |||
} | |||
String result() { | |||
if (results.isNotEmpty) { | |||
String resultStr = ""; | |||
Map<int, Xunfei_AudioTranslation_Result_Text_Item> _results = {}; | |||
var sortedKeys = results.keys.toList()..sort(); | |||
for (var key in sortedKeys) { | |||
var item = results[key]; | |||
if (item != null) { | |||
if (item.pgs == "rpl") { | |||
var start = item.rg[0]; | |||
var end = item.rg[1]; | |||
for (int i = start; i <= end; i++) { | |||
_results.remove(i); | |||
} | |||
} | |||
_results[item.sn] = item; | |||
} | |||
} | |||
var keys = _results.keys.toList()..sort(); | |||
for (var key in keys) { | |||
var item = results[key]; | |||
if (item != null) { | |||
for (var ws in item.ws) { | |||
var it = ws as Map<String, dynamic>; | |||
var cw = it["cw"] as List<dynamic>; | |||
for (var ct in cw) { | |||
resultStr += ct["w"] as String; | |||
} | |||
} | |||
} | |||
} | |||
return resultStr; | |||
} | |||
return ""; | |||
} | |||
} |
@@ -0,0 +1,19 @@ | |||
import 'dart:convert'; | |||
import 'package:crypto/crypto.dart'; | |||
class XunFeiUtils { | |||
// 使用SHA-256算法计算HMAC | |||
static String hmacSha256(String apiSecret, String signatureOrigin) { | |||
// 将 apiSecret 和 signatureOrigin 转换为 UTF-8 编码的字节 | |||
var key = utf8.encode(apiSecret); | |||
var message = utf8.encode(signatureOrigin); | |||
// 使用 HMAC-SHA256 算法生成签名 | |||
var hmac = Hmac(sha256, key); // 初始化 HMAC(使用 SHA256) | |||
var signatureSha = hmac.convert(message); // 计算签名 | |||
// 将生成的签名进行 Base64 编码 | |||
String base64Signature = base64.encode(signatureSha.bytes); | |||
return base64Signature; // 返回 Base64 编码后的签名 | |||
} | |||
} |
@@ -0,0 +1,112 @@ | |||
import 'package:demo001/plugin/xunfei/audiotranslate/audiotranslate.dart'; | |||
import 'package:demo001/plugin/xunfei/audiotranslate/result_audio.dart'; | |||
import 'package:demo001/plugin/xunfei/audiotranslate/result_test.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:flutter/services.dart'; | |||
class MyHomePage extends StatefulWidget { | |||
const MyHomePage({super.key, required this.title}); | |||
final String title; | |||
@override | |||
State<MyHomePage> createState() => _MyHomePageState(); | |||
} | |||
class _MyHomePageState extends State<MyHomePage> { | |||
late Xunfei_AudioTranslation xunfei; | |||
String _result = ""; | |||
// 在 initState 中初始化 | |||
@override | |||
void initState() { | |||
super.initState(); | |||
xunfei = new Xunfei_AudioTranslation( | |||
appId: "137dc132", | |||
apiKey: "1c1891a475e71250ecd1320303ad6545", | |||
apiSecret: "MjZhNDA1NTI1NWZkZDQxOTMxYzMyN2Yw", | |||
onResponse: _onResponse, | |||
); | |||
} | |||
void _onResponse(Xunfei_AudioTranslation_Result_Text text, | |||
Xunfei_AudioTranslation_Result_Audio audio) { | |||
setState(() { | |||
_result = "接受消息:${text.result()}"; | |||
}); | |||
} | |||
//测试链接 | |||
Future<void> _connectTest() async { | |||
await xunfei.start(); | |||
setState(() { | |||
_result = "链接状态:${xunfei.state}"; | |||
}); | |||
} | |||
// 读取本地文件转流对象 | |||
Stream<List<int>> _getAudioStream() async* { | |||
// 从 assets 中读取音频文件 | |||
final byteData = await rootBundle.load('assests/original.pcm'); | |||
final buffer = byteData.buffer.asUint8List(); | |||
// 按块生成流,块大小为 frameSize | |||
int frameSize = 1280; // 每一帧的音频大小 | |||
for (int i = 0; i < buffer.length; i += frameSize) { | |||
int end = | |||
(i + frameSize <= buffer.length) ? i + frameSize : buffer.length; | |||
yield buffer.sublist(i, end); | |||
} | |||
} | |||
//测试翻译 | |||
Future<void> _translationTest() async { | |||
Stream<List<int>> audioStream = _getAudioStream(); | |||
await xunfei.pushaudio(audioStream); | |||
} | |||
//测试录音 | |||
void _recordTest() {} | |||
@override | |||
Widget build(BuildContext context) { | |||
return Scaffold( | |||
appBar: AppBar( | |||
backgroundColor: Theme.of(context).colorScheme.inversePrimary, | |||
title: Text(widget.title), | |||
), | |||
body: Center( | |||
child: Column( | |||
mainAxisAlignment: MainAxisAlignment.center, | |||
children: <Widget>[ | |||
const Text( | |||
'测试结果', | |||
), | |||
Text( | |||
_result, | |||
style: Theme.of(context).textTheme.headlineMedium, | |||
), | |||
], | |||
), | |||
), | |||
// 页面底部的按钮 | |||
bottomNavigationBar: Padding( | |||
padding: const EdgeInsets.all(8.0), | |||
child: Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceAround, // 按钮等距排列 | |||
children: <Widget>[ | |||
ElevatedButton( | |||
onPressed: _connectTest, | |||
child: const Text('测试链接'), | |||
), | |||
ElevatedButton( | |||
onPressed: _translationTest, | |||
child: const Text('测试翻译'), | |||
), | |||
ElevatedButton( | |||
onPressed: _recordTest, | |||
child: const Text('测试录音'), | |||
), | |||
], | |||
), | |||
), | |||
); | |||
} | |||
} |
@@ -0,0 +1 @@ | |||
flutter/ephemeral |
@@ -0,0 +1,145 @@ | |||
# Project-level configuration. | |||
cmake_minimum_required(VERSION 3.10) | |||
project(runner LANGUAGES CXX) | |||
# The name of the executable created for the application. Change this to change | |||
# the on-disk name of your application. | |||
set(BINARY_NAME "demo001") | |||
# The unique GTK application identifier for this application. See: | |||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID | |||
set(APPLICATION_ID "com.example.demo001") | |||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent | |||
# versions of CMake. | |||
cmake_policy(SET CMP0063 NEW) | |||
# Load bundled libraries from the lib/ directory relative to the binary. | |||
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") | |||
# Root filesystem for cross-building. | |||
if(FLUTTER_TARGET_PLATFORM_SYSROOT) | |||
set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) | |||
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | |||
endif() | |||
# Define build configuration options. | |||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) | |||
set(CMAKE_BUILD_TYPE "Debug" CACHE | |||
STRING "Flutter build mode" FORCE) | |||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS | |||
"Debug" "Profile" "Release") | |||
endif() | |||
# Compilation settings that should be applied to most targets. | |||
# | |||
# Be cautious about adding new options here, as plugins use this function by | |||
# default. In most cases, you should add new options to specific targets instead | |||
# of modifying this function. | |||
function(APPLY_STANDARD_SETTINGS TARGET) | |||
target_compile_features(${TARGET} PUBLIC cxx_std_14) | |||
target_compile_options(${TARGET} PRIVATE -Wall -Werror) | |||
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>") | |||
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>") | |||
endfunction() | |||
# Flutter library and tool build rules. | |||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") | |||
add_subdirectory(${FLUTTER_MANAGED_DIR}) | |||
# System-level dependencies. | |||
find_package(PkgConfig REQUIRED) | |||
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) | |||
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") | |||
# Define the application target. To change its name, change BINARY_NAME above, | |||
# not the value here, or `flutter run` will no longer work. | |||
# | |||
# Any new source files that you add to the application should be added here. | |||
add_executable(${BINARY_NAME} | |||
"main.cc" | |||
"my_application.cc" | |||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" | |||
) | |||
# Apply the standard set of build settings. This can be removed for applications | |||
# that need different build settings. | |||
apply_standard_settings(${BINARY_NAME}) | |||
# Add dependency libraries. Add any application-specific dependencies here. | |||
target_link_libraries(${BINARY_NAME} PRIVATE flutter) | |||
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) | |||
# Run the Flutter tool portions of the build. This must not be removed. | |||
add_dependencies(${BINARY_NAME} flutter_assemble) | |||
# Only the install-generated bundle's copy of the executable will launch | |||
# correctly, since the resources must in the right relative locations. To avoid | |||
# people trying to run the unbundled copy, put it in a subdirectory instead of | |||
# the default top-level location. | |||
set_target_properties(${BINARY_NAME} | |||
PROPERTIES | |||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" | |||
) | |||
# Generated plugin build rules, which manage building the plugins and adding | |||
# them to the application. | |||
include(flutter/generated_plugins.cmake) | |||
# === Installation === | |||
# By default, "installing" just makes a relocatable bundle in the build | |||
# directory. | |||
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") | |||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) | |||
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) | |||
endif() | |||
# Start with a clean build bundle directory every time. | |||
install(CODE " | |||
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") | |||
" COMPONENT Runtime) | |||
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") | |||
set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") | |||
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" | |||
COMPONENT Runtime) | |||
install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" | |||
COMPONENT Runtime) | |||
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | |||
COMPONENT Runtime) | |||
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) | |||
install(FILES "${bundled_library}" | |||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | |||
COMPONENT Runtime) | |||
endforeach(bundled_library) | |||
# Copy the native assets provided by the build.dart from all packages. | |||
set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") | |||
install(DIRECTORY "${NATIVE_ASSETS_DIR}" | |||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | |||
COMPONENT Runtime) | |||
# Fully re-copy the assets directory on each build to avoid having stale files | |||
# from a previous install. | |||
set(FLUTTER_ASSET_DIR_NAME "flutter_assets") | |||
install(CODE " | |||
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") | |||
" COMPONENT Runtime) | |||
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" | |||
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) | |||
# Install the AOT library on non-Debug builds only. | |||
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") | |||
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" | |||
COMPONENT Runtime) | |||
endif() |
@@ -0,0 +1,88 @@ | |||
# This file controls Flutter-level build steps. It should not be edited. | |||
cmake_minimum_required(VERSION 3.10) | |||
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") | |||
# Configuration provided via flutter tool. | |||
include(${EPHEMERAL_DIR}/generated_config.cmake) | |||
# TODO: Move the rest of this into files in ephemeral. See | |||
# https://github.com/flutter/flutter/issues/57146. | |||
# Serves the same purpose as list(TRANSFORM ... PREPEND ...), | |||
# which isn't available in 3.10. | |||
function(list_prepend LIST_NAME PREFIX) | |||
set(NEW_LIST "") | |||
foreach(element ${${LIST_NAME}}) | |||
list(APPEND NEW_LIST "${PREFIX}${element}") | |||
endforeach(element) | |||
set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) | |||
endfunction() | |||
# === Flutter Library === | |||
# System-level dependencies. | |||
find_package(PkgConfig REQUIRED) | |||
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) | |||
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) | |||
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) | |||
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") | |||
# Published to parent scope for install step. | |||
set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) | |||
set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) | |||
set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) | |||
set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) | |||
list(APPEND FLUTTER_LIBRARY_HEADERS | |||
"fl_basic_message_channel.h" | |||
"fl_binary_codec.h" | |||
"fl_binary_messenger.h" | |||
"fl_dart_project.h" | |||
"fl_engine.h" | |||
"fl_json_message_codec.h" | |||
"fl_json_method_codec.h" | |||
"fl_message_codec.h" | |||
"fl_method_call.h" | |||
"fl_method_channel.h" | |||
"fl_method_codec.h" | |||
"fl_method_response.h" | |||
"fl_plugin_registrar.h" | |||
"fl_plugin_registry.h" | |||
"fl_standard_message_codec.h" | |||
"fl_standard_method_codec.h" | |||
"fl_string_codec.h" | |||
"fl_value.h" | |||
"fl_view.h" | |||
"flutter_linux.h" | |||
) | |||
list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") | |||
add_library(flutter INTERFACE) | |||
target_include_directories(flutter INTERFACE | |||
"${EPHEMERAL_DIR}" | |||
) | |||
target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") | |||
target_link_libraries(flutter INTERFACE | |||
PkgConfig::GTK | |||
PkgConfig::GLIB | |||
PkgConfig::GIO | |||
) | |||
add_dependencies(flutter flutter_assemble) | |||
# === Flutter tool backend === | |||
# _phony_ is a non-existent file to force this command to run every time, | |||
# since currently there's no way to get a full input/output list from the | |||
# flutter tool. | |||
add_custom_command( | |||
OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} | |||
${CMAKE_CURRENT_BINARY_DIR}/_phony_ | |||
COMMAND ${CMAKE_COMMAND} -E env | |||
${FLUTTER_TOOL_ENVIRONMENT} | |||
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" | |||
${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} | |||
VERBATIM | |||
) | |||
add_custom_target(flutter_assemble DEPENDS | |||
"${FLUTTER_LIBRARY}" | |||
${FLUTTER_LIBRARY_HEADERS} | |||
) |
@@ -0,0 +1,15 @@ | |||
// | |||
// Generated file. Do not edit. | |||
// | |||
// clang-format off | |||
#include "generated_plugin_registrant.h" | |||
#include <audioplayers_linux/audioplayers_linux_plugin.h> | |||
void fl_register_plugins(FlPluginRegistry* registry) { | |||
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar = | |||
fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin"); | |||
audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar); | |||
} |
@@ -0,0 +1,15 @@ | |||
// | |||
// Generated file. Do not edit. | |||
// | |||
// clang-format off | |||
#ifndef GENERATED_PLUGIN_REGISTRANT_ | |||
#define GENERATED_PLUGIN_REGISTRANT_ | |||
#include <flutter_linux/flutter_linux.h> | |||
// Registers Flutter plugins. | |||
void fl_register_plugins(FlPluginRegistry* registry); | |||
#endif // GENERATED_PLUGIN_REGISTRANT_ |
@@ -0,0 +1,24 @@ | |||
# | |||
# Generated file, do not edit. | |||
# | |||
list(APPEND FLUTTER_PLUGIN_LIST | |||
audioplayers_linux | |||
) | |||
list(APPEND FLUTTER_FFI_PLUGIN_LIST | |||
) | |||
set(PLUGIN_BUNDLED_LIBRARIES) | |||
foreach(plugin ${FLUTTER_PLUGIN_LIST}) | |||
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) | |||
target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) | |||
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>) | |||
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) | |||
endforeach(plugin) | |||
foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) | |||
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) | |||
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) | |||
endforeach(ffi_plugin) |
@@ -0,0 +1,6 @@ | |||
#include "my_application.h" | |||
int main(int argc, char** argv) { | |||
g_autoptr(MyApplication) app = my_application_new(); | |||
return g_application_run(G_APPLICATION(app), argc, argv); | |||
} |
@@ -0,0 +1,124 @@ | |||
#include "my_application.h" | |||
#include <flutter_linux/flutter_linux.h> | |||
#ifdef GDK_WINDOWING_X11 | |||
#include <gdk/gdkx.h> | |||
#endif | |||
#include "flutter/generated_plugin_registrant.h" | |||
struct _MyApplication { | |||
GtkApplication parent_instance; | |||
char** dart_entrypoint_arguments; | |||
}; | |||
G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) | |||
// Implements GApplication::activate. | |||
static void my_application_activate(GApplication* application) { | |||
MyApplication* self = MY_APPLICATION(application); | |||
GtkWindow* window = | |||
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); | |||
// Use a header bar when running in GNOME as this is the common style used | |||
// by applications and is the setup most users will be using (e.g. Ubuntu | |||
// desktop). | |||
// If running on X and not using GNOME then just use a traditional title bar | |||
// in case the window manager does more exotic layout, e.g. tiling. | |||
// If running on Wayland assume the header bar will work (may need changing | |||
// if future cases occur). | |||
gboolean use_header_bar = TRUE; | |||
#ifdef GDK_WINDOWING_X11 | |||
GdkScreen* screen = gtk_window_get_screen(window); | |||
if (GDK_IS_X11_SCREEN(screen)) { | |||
const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); | |||
if (g_strcmp0(wm_name, "GNOME Shell") != 0) { | |||
use_header_bar = FALSE; | |||
} | |||
} | |||
#endif | |||
if (use_header_bar) { | |||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); | |||
gtk_widget_show(GTK_WIDGET(header_bar)); | |||
gtk_header_bar_set_title(header_bar, "demo001"); | |||
gtk_header_bar_set_show_close_button(header_bar, TRUE); | |||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); | |||
} else { | |||
gtk_window_set_title(window, "demo001"); | |||
} | |||
gtk_window_set_default_size(window, 1280, 720); | |||
gtk_widget_show(GTK_WIDGET(window)); | |||
g_autoptr(FlDartProject) project = fl_dart_project_new(); | |||
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); | |||
FlView* view = fl_view_new(project); | |||
gtk_widget_show(GTK_WIDGET(view)); | |||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); | |||
fl_register_plugins(FL_PLUGIN_REGISTRY(view)); | |||
gtk_widget_grab_focus(GTK_WIDGET(view)); | |||
} | |||
// Implements GApplication::local_command_line. | |||
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { | |||
MyApplication* self = MY_APPLICATION(application); | |||
// Strip out the first argument as it is the binary name. | |||
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); | |||
g_autoptr(GError) error = nullptr; | |||
if (!g_application_register(application, nullptr, &error)) { | |||
g_warning("Failed to register: %s", error->message); | |||
*exit_status = 1; | |||
return TRUE; | |||
} | |||
g_application_activate(application); | |||
*exit_status = 0; | |||
return TRUE; | |||
} | |||
// Implements GApplication::startup. | |||
static void my_application_startup(GApplication* application) { | |||
//MyApplication* self = MY_APPLICATION(object); | |||
// Perform any actions required at application startup. | |||
G_APPLICATION_CLASS(my_application_parent_class)->startup(application); | |||
} | |||
// Implements GApplication::shutdown. | |||
static void my_application_shutdown(GApplication* application) { | |||
//MyApplication* self = MY_APPLICATION(object); | |||
// Perform any actions required at application shutdown. | |||
G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); | |||
} | |||
// Implements GObject::dispose. | |||
static void my_application_dispose(GObject* object) { | |||
MyApplication* self = MY_APPLICATION(object); | |||
g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); | |||
G_OBJECT_CLASS(my_application_parent_class)->dispose(object); | |||
} | |||
static void my_application_class_init(MyApplicationClass* klass) { | |||
G_APPLICATION_CLASS(klass)->activate = my_application_activate; | |||
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; | |||
G_APPLICATION_CLASS(klass)->startup = my_application_startup; | |||
G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; | |||
G_OBJECT_CLASS(klass)->dispose = my_application_dispose; | |||
} | |||
static void my_application_init(MyApplication* self) {} | |||
MyApplication* my_application_new() { | |||
return MY_APPLICATION(g_object_new(my_application_get_type(), | |||
"application-id", APPLICATION_ID, | |||
"flags", G_APPLICATION_NON_UNIQUE, | |||
nullptr)); | |||
} |
@@ -0,0 +1,18 @@ | |||
#ifndef FLUTTER_MY_APPLICATION_H_ | |||
#define FLUTTER_MY_APPLICATION_H_ | |||
#include <gtk/gtk.h> | |||
G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, | |||
GtkApplication) | |||
/** | |||
* my_application_new: | |||
* | |||
* Creates a new Flutter-based application. | |||
* | |||
* Returns: a new #MyApplication. | |||
*/ | |||
MyApplication* my_application_new(); | |||
#endif // FLUTTER_MY_APPLICATION_H_ |
@@ -0,0 +1,7 @@ | |||
# Flutter-related | |||
**/Flutter/ephemeral/ | |||
**/Pods/ | |||
# Xcode-related | |||
**/dgph | |||
**/xcuserdata/ |
@@ -0,0 +1 @@ | |||
#include "ephemeral/Flutter-Generated.xcconfig" |
@@ -0,0 +1 @@ | |||
#include "ephemeral/Flutter-Generated.xcconfig" |
@@ -0,0 +1,14 @@ | |||
// | |||
// Generated file. Do not edit. | |||
// | |||
import FlutterMacOS | |||
import Foundation | |||
import audioplayers_darwin | |||
import path_provider_foundation | |||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | |||
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) | |||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) | |||
} |
@@ -0,0 +1,705 @@ | |||
// !$*UTF8*$! | |||
{ | |||
archiveVersion = 1; | |||
classes = { | |||
}; | |||
objectVersion = 54; | |||
objects = { | |||
/* Begin PBXAggregateTarget section */ | |||
33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { | |||
isa = PBXAggregateTarget; | |||
buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; | |||
buildPhases = ( | |||
33CC111E2044C6BF0003C045 /* ShellScript */, | |||
); | |||
dependencies = ( | |||
); | |||
name = "Flutter Assemble"; | |||
productName = FLX; | |||
}; | |||
/* End PBXAggregateTarget section */ | |||
/* Begin PBXBuildFile section */ | |||
331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; | |||
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; | |||
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; | |||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; | |||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; | |||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; | |||
/* End PBXBuildFile section */ | |||
/* Begin PBXContainerItemProxy section */ | |||
331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 33CC10E52044A3C60003C045 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 33CC10EC2044A3C60003C045; | |||
remoteInfo = Runner; | |||
}; | |||
33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 33CC10E52044A3C60003C045 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 33CC111A2044C6BA0003C045; | |||
remoteInfo = FLX; | |||
}; | |||
/* End PBXContainerItemProxy section */ | |||
/* Begin PBXCopyFilesBuildPhase section */ | |||
33CC110E2044A8840003C045 /* Bundle Framework */ = { | |||
isa = PBXCopyFilesBuildPhase; | |||
buildActionMask = 2147483647; | |||
dstPath = ""; | |||
dstSubfolderSpec = 10; | |||
files = ( | |||
); | |||
name = "Bundle Framework"; | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXCopyFilesBuildPhase section */ | |||
/* Begin PBXFileReference section */ | |||
331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; | |||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; }; | |||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; }; | |||
33CC10ED2044A3C60003C045 /* demo001.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "demo001.app"; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | |||
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; }; | |||
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; }; | |||
33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; }; | |||
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; }; | |||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; }; | |||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; }; | |||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; }; | |||
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; }; | |||
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; }; | |||
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; }; | |||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; | |||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; | |||
/* End PBXFileReference section */ | |||
/* Begin PBXFrameworksBuildPhase section */ | |||
331C80D2294CF70F00263BE5 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
33CC10EA2044A3C60003C045 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXFrameworksBuildPhase section */ | |||
/* Begin PBXGroup section */ | |||
331C80D6294CF71000263BE5 /* RunnerTests */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
331C80D7294CF71000263BE5 /* RunnerTests.swift */, | |||
); | |||
path = RunnerTests; | |||
sourceTree = "<group>"; | |||
}; | |||
33BA886A226E78AF003329D5 /* Configs */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
33E5194F232828860026EE4D /* AppInfo.xcconfig */, | |||
9740EEB21CF90195004384FC /* Debug.xcconfig */, | |||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */, | |||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */, | |||
); | |||
path = Configs; | |||
sourceTree = "<group>"; | |||
}; | |||
33CC10E42044A3C60003C045 = { | |||
isa = PBXGroup; | |||
children = ( | |||
33FAB671232836740065AC1E /* Runner */, | |||
33CEB47122A05771004F2AC0 /* Flutter */, | |||
331C80D6294CF71000263BE5 /* RunnerTests */, | |||
33CC10EE2044A3C60003C045 /* Products */, | |||
D73912EC22F37F3D000D13A0 /* Frameworks */, | |||
); | |||
sourceTree = "<group>"; | |||
}; | |||
33CC10EE2044A3C60003C045 /* Products */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
33CC10ED2044A3C60003C045 /* demo001.app */, | |||
331C80D5294CF71000263BE5 /* RunnerTests.xctest */, | |||
); | |||
name = Products; | |||
sourceTree = "<group>"; | |||
}; | |||
33CC11242044D66E0003C045 /* Resources */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
33CC10F22044A3C60003C045 /* Assets.xcassets */, | |||
33CC10F42044A3C60003C045 /* MainMenu.xib */, | |||
33CC10F72044A3C60003C045 /* Info.plist */, | |||
); | |||
name = Resources; | |||
path = ..; | |||
sourceTree = "<group>"; | |||
}; | |||
33CEB47122A05771004F2AC0 /* Flutter */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, | |||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, | |||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, | |||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, | |||
); | |||
path = Flutter; | |||
sourceTree = "<group>"; | |||
}; | |||
33FAB671232836740065AC1E /* Runner */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
33CC10F02044A3C60003C045 /* AppDelegate.swift */, | |||
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, | |||
33E51913231747F40026EE4D /* DebugProfile.entitlements */, | |||
33E51914231749380026EE4D /* Release.entitlements */, | |||
33CC11242044D66E0003C045 /* Resources */, | |||
33BA886A226E78AF003329D5 /* Configs */, | |||
); | |||
path = Runner; | |||
sourceTree = "<group>"; | |||
}; | |||
D73912EC22F37F3D000D13A0 /* Frameworks */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
); | |||
name = Frameworks; | |||
sourceTree = "<group>"; | |||
}; | |||
/* End PBXGroup section */ | |||
/* Begin PBXNativeTarget section */ | |||
331C80D4294CF70F00263BE5 /* RunnerTests */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; | |||
buildPhases = ( | |||
331C80D1294CF70F00263BE5 /* Sources */, | |||
331C80D2294CF70F00263BE5 /* Frameworks */, | |||
331C80D3294CF70F00263BE5 /* Resources */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
331C80DA294CF71000263BE5 /* PBXTargetDependency */, | |||
); | |||
name = RunnerTests; | |||
productName = RunnerTests; | |||
productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; | |||
productType = "com.apple.product-type.bundle.unit-test"; | |||
}; | |||
33CC10EC2044A3C60003C045 /* Runner */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; | |||
buildPhases = ( | |||
33CC10E92044A3C60003C045 /* Sources */, | |||
33CC10EA2044A3C60003C045 /* Frameworks */, | |||
33CC10EB2044A3C60003C045 /* Resources */, | |||
33CC110E2044A8840003C045 /* Bundle Framework */, | |||
3399D490228B24CF009A79C7 /* ShellScript */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
33CC11202044C79F0003C045 /* PBXTargetDependency */, | |||
); | |||
name = Runner; | |||
productName = Runner; | |||
productReference = 33CC10ED2044A3C60003C045 /* demo001.app */; | |||
productType = "com.apple.product-type.application"; | |||
}; | |||
/* End PBXNativeTarget section */ | |||
/* Begin PBXProject section */ | |||
33CC10E52044A3C60003C045 /* Project object */ = { | |||
isa = PBXProject; | |||
attributes = { | |||
BuildIndependentTargetsInParallel = YES; | |||
LastSwiftUpdateCheck = 0920; | |||
LastUpgradeCheck = 1510; | |||
ORGANIZATIONNAME = ""; | |||
TargetAttributes = { | |||
331C80D4294CF70F00263BE5 = { | |||
CreatedOnToolsVersion = 14.0; | |||
TestTargetID = 33CC10EC2044A3C60003C045; | |||
}; | |||
33CC10EC2044A3C60003C045 = { | |||
CreatedOnToolsVersion = 9.2; | |||
LastSwiftMigration = 1100; | |||
ProvisioningStyle = Automatic; | |||
SystemCapabilities = { | |||
com.apple.Sandbox = { | |||
enabled = 1; | |||
}; | |||
}; | |||
}; | |||
33CC111A2044C6BA0003C045 = { | |||
CreatedOnToolsVersion = 9.2; | |||
ProvisioningStyle = Manual; | |||
}; | |||
}; | |||
}; | |||
buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; | |||
compatibilityVersion = "Xcode 9.3"; | |||
developmentRegion = en; | |||
hasScannedForEncodings = 0; | |||
knownRegions = ( | |||
en, | |||
Base, | |||
); | |||
mainGroup = 33CC10E42044A3C60003C045; | |||
productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; | |||
projectDirPath = ""; | |||
projectRoot = ""; | |||
targets = ( | |||
33CC10EC2044A3C60003C045 /* Runner */, | |||
331C80D4294CF70F00263BE5 /* RunnerTests */, | |||
33CC111A2044C6BA0003C045 /* Flutter Assemble */, | |||
); | |||
}; | |||
/* End PBXProject section */ | |||
/* Begin PBXResourcesBuildPhase section */ | |||
331C80D3294CF70F00263BE5 /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
33CC10EB2044A3C60003C045 /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, | |||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXResourcesBuildPhase section */ | |||
/* Begin PBXShellScriptBuildPhase section */ | |||
3399D490228B24CF009A79C7 /* ShellScript */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
alwaysOutOfDate = 1; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
); | |||
inputPaths = ( | |||
); | |||
outputFileListPaths = ( | |||
); | |||
outputPaths = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
shellPath = /bin/sh; | |||
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; | |||
}; | |||
33CC111E2044C6BF0003C045 /* ShellScript */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
Flutter/ephemeral/FlutterInputs.xcfilelist, | |||
); | |||
inputPaths = ( | |||
Flutter/ephemeral/tripwire, | |||
); | |||
outputFileListPaths = ( | |||
Flutter/ephemeral/FlutterOutputs.xcfilelist, | |||
); | |||
outputPaths = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
shellPath = /bin/sh; | |||
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; | |||
}; | |||
/* End PBXShellScriptBuildPhase section */ | |||
/* Begin PBXSourcesBuildPhase section */ | |||
331C80D1294CF70F00263BE5 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
33CC10E92044A3C60003C045 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, | |||
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, | |||
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXSourcesBuildPhase section */ | |||
/* Begin PBXTargetDependency section */ | |||
331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 33CC10EC2044A3C60003C045 /* Runner */; | |||
targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; | |||
}; | |||
33CC11202044C79F0003C045 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; | |||
targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; | |||
}; | |||
/* End PBXTargetDependency section */ | |||
/* Begin PBXVariantGroup section */ | |||
33CC10F42044A3C60003C045 /* MainMenu.xib */ = { | |||
isa = PBXVariantGroup; | |||
children = ( | |||
33CC10F52044A3C60003C045 /* Base */, | |||
); | |||
name = MainMenu.xib; | |||
path = Runner; | |||
sourceTree = "<group>"; | |||
}; | |||
/* End PBXVariantGroup section */ | |||
/* Begin XCBuildConfiguration section */ | |||
331C80DB294CF71000263BE5 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CURRENT_PROJECT_VERSION = 1; | |||
GENERATE_INFOPLIST_FILE = YES; | |||
MARKETING_VERSION = 1.0; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001.RunnerTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo001.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/demo001"; | |||
}; | |||
name = Debug; | |||
}; | |||
331C80DC294CF71000263BE5 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CURRENT_PROJECT_VERSION = 1; | |||
GENERATE_INFOPLIST_FILE = YES; | |||
MARKETING_VERSION = 1.0; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001.RunnerTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo001.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/demo001"; | |||
}; | |||
name = Release; | |||
}; | |||
331C80DD294CF71000263BE5 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CURRENT_PROJECT_VERSION = 1; | |||
GENERATE_INFOPLIST_FILE = YES; | |||
MARKETING_VERSION = 1.0; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.example.demo001.RunnerTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo001.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/demo001"; | |||
}; | |||
name = Profile; | |||
}; | |||
338D0CE9231458BD00FA5F75 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_SEARCH_USER_PATHS = NO; | |||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | |||
CLANG_ANALYZER_NONNULL = YES; | |||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | |||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | |||
CLANG_CXX_LIBRARY = "libc++"; | |||
CLANG_ENABLE_MODULES = YES; | |||
CLANG_ENABLE_OBJC_ARC = YES; | |||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |||
CLANG_WARN_BOOL_CONVERSION = YES; | |||
CLANG_WARN_CONSTANT_CONVERSION = YES; | |||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | |||
CLANG_WARN_EMPTY_BODY = YES; | |||
CLANG_WARN_ENUM_CONVERSION = YES; | |||
CLANG_WARN_INFINITE_RECURSION = YES; | |||
CLANG_WARN_INT_CONVERSION = YES; | |||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |||
CLANG_WARN_SUSPICIOUS_MOVE = YES; | |||
CODE_SIGN_IDENTITY = "-"; | |||
COPY_PHASE_STRIP = NO; | |||
DEAD_CODE_STRIPPING = YES; | |||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | |||
ENABLE_NS_ASSERTIONS = NO; | |||
ENABLE_STRICT_OBJC_MSGSEND = YES; | |||
ENABLE_USER_SCRIPT_SANDBOXING = NO; | |||
GCC_C_LANGUAGE_STANDARD = gnu11; | |||
GCC_NO_COMMON_BLOCKS = YES; | |||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |||
GCC_WARN_UNUSED_FUNCTION = YES; | |||
GCC_WARN_UNUSED_VARIABLE = YES; | |||
MACOSX_DEPLOYMENT_TARGET = 10.14; | |||
MTL_ENABLE_DEBUG_INFO = NO; | |||
SDKROOT = macosx; | |||
SWIFT_COMPILATION_MODE = wholemodule; | |||
SWIFT_OPTIMIZATION_LEVEL = "-O"; | |||
}; | |||
name = Profile; | |||
}; | |||
338D0CEA231458BD00FA5F75 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CLANG_ENABLE_MODULES = YES; | |||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; | |||
CODE_SIGN_STYLE = Automatic; | |||
COMBINE_HIDPI_IMAGES = YES; | |||
INFOPLIST_FILE = Runner/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/../Frameworks", | |||
); | |||
PROVISIONING_PROFILE_SPECIFIER = ""; | |||
SWIFT_VERSION = 5.0; | |||
}; | |||
name = Profile; | |||
}; | |||
338D0CEB231458BD00FA5F75 /* Profile */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
CODE_SIGN_STYLE = Manual; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
}; | |||
name = Profile; | |||
}; | |||
33CC10F92044A3C60003C045 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_SEARCH_USER_PATHS = NO; | |||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | |||
CLANG_ANALYZER_NONNULL = YES; | |||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | |||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | |||
CLANG_CXX_LIBRARY = "libc++"; | |||
CLANG_ENABLE_MODULES = YES; | |||
CLANG_ENABLE_OBJC_ARC = YES; | |||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |||
CLANG_WARN_BOOL_CONVERSION = YES; | |||
CLANG_WARN_CONSTANT_CONVERSION = YES; | |||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | |||
CLANG_WARN_EMPTY_BODY = YES; | |||
CLANG_WARN_ENUM_CONVERSION = YES; | |||
CLANG_WARN_INFINITE_RECURSION = YES; | |||
CLANG_WARN_INT_CONVERSION = YES; | |||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |||
CLANG_WARN_SUSPICIOUS_MOVE = YES; | |||
CODE_SIGN_IDENTITY = "-"; | |||
COPY_PHASE_STRIP = NO; | |||
DEAD_CODE_STRIPPING = YES; | |||
DEBUG_INFORMATION_FORMAT = dwarf; | |||
ENABLE_STRICT_OBJC_MSGSEND = YES; | |||
ENABLE_TESTABILITY = YES; | |||
ENABLE_USER_SCRIPT_SANDBOXING = NO; | |||
GCC_C_LANGUAGE_STANDARD = gnu11; | |||
GCC_DYNAMIC_NO_PIC = NO; | |||
GCC_NO_COMMON_BLOCKS = YES; | |||
GCC_OPTIMIZATION_LEVEL = 0; | |||
GCC_PREPROCESSOR_DEFINITIONS = ( | |||
"DEBUG=1", | |||
"$(inherited)", | |||
); | |||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |||
GCC_WARN_UNUSED_FUNCTION = YES; | |||
GCC_WARN_UNUSED_VARIABLE = YES; | |||
MACOSX_DEPLOYMENT_TARGET = 10.14; | |||
MTL_ENABLE_DEBUG_INFO = YES; | |||
ONLY_ACTIVE_ARCH = YES; | |||
SDKROOT = macosx; | |||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | |||
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | |||
}; | |||
name = Debug; | |||
}; | |||
33CC10FA2044A3C60003C045 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_SEARCH_USER_PATHS = NO; | |||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | |||
CLANG_ANALYZER_NONNULL = YES; | |||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | |||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; | |||
CLANG_CXX_LIBRARY = "libc++"; | |||
CLANG_ENABLE_MODULES = YES; | |||
CLANG_ENABLE_OBJC_ARC = YES; | |||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |||
CLANG_WARN_BOOL_CONVERSION = YES; | |||
CLANG_WARN_CONSTANT_CONVERSION = YES; | |||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | |||
CLANG_WARN_EMPTY_BODY = YES; | |||
CLANG_WARN_ENUM_CONVERSION = YES; | |||
CLANG_WARN_INFINITE_RECURSION = YES; | |||
CLANG_WARN_INT_CONVERSION = YES; | |||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |||
CLANG_WARN_SUSPICIOUS_MOVE = YES; | |||
CODE_SIGN_IDENTITY = "-"; | |||
COPY_PHASE_STRIP = NO; | |||
DEAD_CODE_STRIPPING = YES; | |||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | |||
ENABLE_NS_ASSERTIONS = NO; | |||
ENABLE_STRICT_OBJC_MSGSEND = YES; | |||
ENABLE_USER_SCRIPT_SANDBOXING = NO; | |||
GCC_C_LANGUAGE_STANDARD = gnu11; | |||
GCC_NO_COMMON_BLOCKS = YES; | |||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |||
GCC_WARN_UNUSED_FUNCTION = YES; | |||
GCC_WARN_UNUSED_VARIABLE = YES; | |||
MACOSX_DEPLOYMENT_TARGET = 10.14; | |||
MTL_ENABLE_DEBUG_INFO = NO; | |||
SDKROOT = macosx; | |||
SWIFT_COMPILATION_MODE = wholemodule; | |||
SWIFT_OPTIMIZATION_LEVEL = "-O"; | |||
}; | |||
name = Release; | |||
}; | |||
33CC10FC2044A3C60003C045 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CLANG_ENABLE_MODULES = YES; | |||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; | |||
CODE_SIGN_STYLE = Automatic; | |||
COMBINE_HIDPI_IMAGES = YES; | |||
INFOPLIST_FILE = Runner/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/../Frameworks", | |||
); | |||
PROVISIONING_PROFILE_SPECIFIER = ""; | |||
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | |||
SWIFT_VERSION = 5.0; | |||
}; | |||
name = Debug; | |||
}; | |||
33CC10FD2044A3C60003C045 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CLANG_ENABLE_MODULES = YES; | |||
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; | |||
CODE_SIGN_STYLE = Automatic; | |||
COMBINE_HIDPI_IMAGES = YES; | |||
INFOPLIST_FILE = Runner/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/../Frameworks", | |||
); | |||
PROVISIONING_PROFILE_SPECIFIER = ""; | |||
SWIFT_VERSION = 5.0; | |||
}; | |||
name = Release; | |||
}; | |||
33CC111C2044C6BA0003C045 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
CODE_SIGN_STYLE = Manual; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
}; | |||
name = Debug; | |||
}; | |||
33CC111D2044C6BA0003C045 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
buildSettings = { | |||
CODE_SIGN_STYLE = Automatic; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
}; | |||
name = Release; | |||
}; | |||
/* End XCBuildConfiguration section */ | |||
/* Begin XCConfigurationList section */ | |||
331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
331C80DB294CF71000263BE5 /* Debug */, | |||
331C80DC294CF71000263BE5 /* Release */, | |||
331C80DD294CF71000263BE5 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
33CC10F92044A3C60003C045 /* Debug */, | |||
33CC10FA2044A3C60003C045 /* Release */, | |||
338D0CE9231458BD00FA5F75 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
33CC10FC2044A3C60003C045 /* Debug */, | |||
33CC10FD2044A3C60003C045 /* Release */, | |||
338D0CEA231458BD00FA5F75 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
33CC111C2044C6BA0003C045 /* Debug */, | |||
33CC111D2044C6BA0003C045 /* Release */, | |||
338D0CEB231458BD00FA5F75 /* Profile */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
/* End XCConfigurationList section */ | |||
}; | |||
rootObject = 33CC10E52044A3C60003C045 /* Project object */; | |||
} |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>IDEDidComputeMac32BitWarning</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,98 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Scheme | |||
LastUpgradeVersion = "1510" | |||
version = "1.3"> | |||
<BuildAction | |||
parallelizeBuildables = "YES" | |||
buildImplicitDependencies = "YES"> | |||
<BuildActionEntries> | |||
<BuildActionEntry | |||
buildForTesting = "YES" | |||
buildForRunning = "YES" | |||
buildForProfiling = "YES" | |||
buildForArchiving = "YES" | |||
buildForAnalyzing = "YES"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "33CC10EC2044A3C60003C045" | |||
BuildableName = "demo001.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</BuildActionEntry> | |||
</BuildActionEntries> | |||
</BuildAction> | |||
<TestAction | |||
buildConfiguration = "Debug" | |||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
shouldUseLaunchSchemeArgsEnv = "YES"> | |||
<MacroExpansion> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "33CC10EC2044A3C60003C045" | |||
BuildableName = "demo001.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</MacroExpansion> | |||
<Testables> | |||
<TestableReference | |||
skipped = "NO" | |||
parallelizable = "YES"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "331C80D4294CF70F00263BE5" | |||
BuildableName = "RunnerTests.xctest" | |||
BlueprintName = "RunnerTests" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</TestableReference> | |||
</Testables> | |||
</TestAction> | |||
<LaunchAction | |||
buildConfiguration = "Debug" | |||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
launchStyle = "0" | |||
useCustomWorkingDirectory = "NO" | |||
ignoresPersistentStateOnLaunch = "NO" | |||
debugDocumentVersioning = "YES" | |||
debugServiceExtension = "internal" | |||
allowLocationSimulation = "YES"> | |||
<BuildableProductRunnable | |||
runnableDebuggingMode = "0"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "33CC10EC2044A3C60003C045" | |||
BuildableName = "demo001.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</BuildableProductRunnable> | |||
</LaunchAction> | |||
<ProfileAction | |||
buildConfiguration = "Profile" | |||
shouldUseLaunchSchemeArgsEnv = "YES" | |||
savedToolIdentifier = "" | |||
useCustomWorkingDirectory = "NO" | |||
debugDocumentVersioning = "YES"> | |||
<BuildableProductRunnable | |||
runnableDebuggingMode = "0"> | |||
<BuildableReference | |||
BuildableIdentifier = "primary" | |||
BlueprintIdentifier = "33CC10EC2044A3C60003C045" | |||
BuildableName = "demo001.app" | |||
BlueprintName = "Runner" | |||
ReferencedContainer = "container:Runner.xcodeproj"> | |||
</BuildableReference> | |||
</BuildableProductRunnable> | |||
</ProfileAction> | |||
<AnalyzeAction | |||
buildConfiguration = "Debug"> | |||
</AnalyzeAction> | |||
<ArchiveAction | |||
buildConfiguration = "Release" | |||
revealArchiveInOrganizer = "YES"> | |||
</ArchiveAction> | |||
</Scheme> |
@@ -0,0 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Workspace | |||
version = "1.0"> | |||
<FileRef | |||
location = "group:Runner.xcodeproj"> | |||
</FileRef> | |||
</Workspace> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>IDEDidComputeMac32BitWarning</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,9 @@ | |||
import Cocoa | |||
import FlutterMacOS | |||
@main | |||
class AppDelegate: FlutterAppDelegate { | |||
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { | |||
return true | |||
} | |||
} |
@@ -0,0 +1,68 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"size" : "16x16", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_16.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "16x16", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_32.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "32x32", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_32.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "32x32", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_64.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "128x128", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_128.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "128x128", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_256.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "256x256", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_256.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "256x256", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_512.png", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"size" : "512x512", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_512.png", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"size" : "512x512", | |||
"idiom" : "mac", | |||
"filename" : "app_icon_1024.png", | |||
"scale" : "2x" | |||
} | |||
], | |||
"info" : { | |||
"version" : 1, | |||
"author" : "xcode" | |||
} | |||
} |