Compare commits
70 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
197eae3079 | |
|
|
8fd0303427 | |
|
|
122dfd6542 | |
|
|
d125a2b470 | |
|
|
7f3961c8ea | |
|
|
2545e4e314 | |
|
|
1a157ffc6f | |
|
|
4161a9fcc8 | |
|
|
2ac88000cc | |
|
|
c7afafc3aa | |
|
|
1fc54d7526 | |
|
|
e96429fe05 | |
|
|
f050263ddf | |
|
|
bac6a7410a | |
|
|
10025b49ee | |
|
|
c6409b095c | |
|
|
f638ef23de | |
|
|
8fd6c57874 | |
|
|
db04323e36 | |
|
|
e34234da09 | |
|
|
8209b12459 | |
|
|
b7478fd785 | |
|
|
b6af1f57a4 | |
|
|
70f658f87d | |
|
|
5f4c9237c1 | |
|
|
6252f930e1 | |
|
|
951175a5cc | |
|
|
4919e72008 | |
|
|
0d2b3d6934 | |
|
|
ef2684ca5d | |
|
|
57ec197956 | |
|
|
ba2a5bad2e | |
|
|
55692c2686 | |
|
|
1ebdbf101a | |
|
|
4d42562508 | |
|
|
05b308b612 | |
|
|
5bf70505ed | |
|
|
c2dd9171b9 | |
|
|
d904eb33c4 | |
|
|
3a3458f34e | |
|
|
0902c0cd0d | |
|
|
4b65ef1e88 | |
|
|
3171ba215f | |
|
|
f79baf3a5e | |
|
|
4a03e92468 | |
|
|
a35f8f5572 | |
|
|
7c5ef98014 | |
|
|
f677fa4032 | |
|
|
6c3669350b | |
|
|
33996285f4 | |
|
|
158fbc355f | |
|
|
9d2f15c80c | |
|
|
a8d0e80555 | |
|
|
bd8ef8bb57 | |
|
|
87bc2931c3 | |
|
|
393b2ee578 | |
|
|
08cf62a845 | |
|
|
6011f52a19 | |
|
|
9d760da027 | |
|
|
094f0385dc | |
|
|
344fe4757d | |
|
|
dfcb9adcbc | |
|
|
a1a2389411 | |
|
|
00af849b1f | |
|
|
9e24bf5747 | |
|
|
7d6190040a | |
|
|
3f9661436d | |
|
|
138b4bb767 | |
|
|
ed30fc6240 | |
|
|
25029477cd |
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"flutter": "3.32.0"
|
||||||
|
}
|
||||||
|
|
@ -5,9 +5,11 @@
|
||||||
*.swp
|
*.swp
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.atom/
|
.atom/
|
||||||
|
.build/
|
||||||
.buildlog/
|
.buildlog/
|
||||||
.history
|
.history
|
||||||
.svn/
|
.svn/
|
||||||
|
.swiftpm/
|
||||||
migrate_working_dir/
|
migrate_working_dir/
|
||||||
|
|
||||||
# IntelliJ related
|
# IntelliJ related
|
||||||
|
|
@ -42,3 +44,6 @@ app.*.map.json
|
||||||
/android/app/debug
|
/android/app/debug
|
||||||
/android/app/profile
|
/android/app/profile
|
||||||
/android/app/release
|
/android/app/release
|
||||||
|
|
||||||
|
# FVM Version Cache
|
||||||
|
.fvm/
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"dart.flutterSdkPath": ".fvm/versions/3.32.0"
|
||||||
|
}
|
||||||
|
|
@ -35,6 +35,11 @@ android {
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
coreLibraryDesugaringEnabled true
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "1.8"
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
|
@ -80,8 +85,14 @@ android {
|
||||||
shrinkResources false //删除无用资源
|
shrinkResources false //删除无用资源
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
source = "../.."
|
source = "../.."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' // 核心库反糖依赖
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:enableOnBackInvokedCallback="true">
|
android:enableOnBackInvokedCallback="true">
|
||||||
|
<!-- windowTranslucentStatus 设置顶部状态栏使用-->
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
|
@ -12,6 +13,7 @@
|
||||||
android:theme="@style/LaunchTheme"
|
android:theme="@style/LaunchTheme"
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
|
android:windowTranslucentStatus="true"
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
<!-- Specifies an Android theme to apply to this Activity as soon as
|
||||||
the Android process has started. This theme is visible to the user
|
the Android process has started. This theme is visible to the user
|
||||||
|
|
@ -38,7 +40,7 @@
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2"/>
|
android:value="2"/>
|
||||||
<!-- Provider -->
|
<!-- Provider -->
|
||||||
<provider
|
<!-- <provider
|
||||||
android:name="androidx.core.content.FileProvider"
|
android:name="androidx.core.content.FileProvider"
|
||||||
android:authorities="${applicationId}.fileProvider"
|
android:authorities="${applicationId}.fileProvider"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
|
|
@ -46,6 +48,16 @@
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
android:resource="@xml/file_paths"/>
|
android:resource="@xml/file_paths"/>
|
||||||
|
</provider> -->
|
||||||
|
<!-- ✅ FileProvider 配置 - 这是必需的! -->
|
||||||
|
<provider
|
||||||
|
android:name="androidx.core.content.FileProvider"
|
||||||
|
android:authorities="${applicationId}.fileprovider"
|
||||||
|
android:exported="false"
|
||||||
|
android:grantUriPermissions="true">
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
|
android:resource="@xml/file_paths" />
|
||||||
</provider>
|
</provider>
|
||||||
</application>
|
</application>
|
||||||
<!-- 访问电话状态 -->
|
<!-- 访问电话状态 -->
|
||||||
|
|
@ -75,25 +87,21 @@
|
||||||
<!-- 屏幕常亮权限 -->
|
<!-- 屏幕常亮权限 -->
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.WAKE_LOCK"/>
|
android:name="android.permission.WAKE_LOCK"/>
|
||||||
<uses-permission
|
<!-- <uses-permission
|
||||||
android:name="android.permission.CAMERA"/>
|
android:name="android.permission.CAMERA"/> -->
|
||||||
<!-- Permissions options for the `access notification policy` group -->
|
<!-- Permissions options for the `access notification policy` group -->
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
|
android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
|
||||||
<!-- Permissions options for the `notification` group -->
|
<!-- Permissions options for the `notification` group -->
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.POST_NOTIFICATIONS"/>
|
android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||||
<!-- Required to query activities that can process text, see:
|
<!-- 注释掉文本处理权限,避免不必要的剪切板访问 -->
|
||||||
https://developer.android.com/training/package-visibility and
|
<!-- <queries>
|
||||||
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>
|
<intent>
|
||||||
<action
|
<action
|
||||||
android:name="android.intent.action.PROCESS_TEXT"/>
|
android:name="android.intent.action.PROCESS_TEXT"/>
|
||||||
<data
|
<data
|
||||||
android:mimeType="text/plain"/>
|
android:mimeType="text/plain"/>
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries> -->
|
||||||
</manifest>
|
</manifest>
|
||||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 341 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 341 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 10 KiB |
|
|
@ -3,8 +3,8 @@
|
||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
<!-- 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">
|
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
<item name="android:forceDarkAllowed">false</item>
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
<item name="android:windowFullscreen">false</item>
|
<item name="android:windowFullscreen">true</item>
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
<item name="android:windowSplashScreenBackground">#FFFFFF</item>
|
<item name="android:windowSplashScreenBackground">#FFFFFF</item>
|
||||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@
|
||||||
the Flutter engine draws its first frame -->
|
the Flutter engine draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
<item name="android:forceDarkAllowed">false</item>
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
<item name="android:windowFullscreen">false</item>
|
<item name="android:windowFullscreen">true</item>
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
<!-- 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">
|
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
<item name="android:forceDarkAllowed">false</item>
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
<item name="android:windowFullscreen">false</item>
|
<item name="android:windowFullscreen">true</item>
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
<item name="android:windowSplashScreenBackground">#FFFFFF</item>
|
<item name="android:windowSplashScreenBackground">#FFFFFF</item>
|
||||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@
|
||||||
the Flutter engine draws its first frame -->
|
the Flutter engine draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
<item name="android:forceDarkAllowed">false</item>
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
<item name="android:windowFullscreen">false</item>
|
<item name="android:windowFullscreen">true</item>
|
||||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,17 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<paths>
|
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<!-- 外部存储 -->
|
||||||
|
<external-path name="external_files" path="." />
|
||||||
|
<!-- 应用内部存储 -->
|
||||||
|
<files-path name="files" path="." />
|
||||||
|
<!-- 缓存目录 -->
|
||||||
|
<cache-path name="cache" path="." />
|
||||||
|
<!-- 外部缓存 -->
|
||||||
|
<external-cache-path name="external_cache" path="." />
|
||||||
|
<!-- 下载目录 -->
|
||||||
|
<external-path name="downloads" path="Download/" />
|
||||||
|
|
||||||
|
<!-- 如果你已有其他配置,请保留它们 -->
|
||||||
<external-path path="Android/data/com.yuanxuan.making_school_asignment_app/" name="files_root" />
|
<external-path path="Android/data/com.yuanxuan.making_school_asignment_app/" name="files_root" />
|
||||||
<external-path path="." name="external_storage_root" />
|
<external-path path="." name="external_storage_root" />
|
||||||
</paths>
|
</paths>
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<!-- 屏幕常亮权限 -->
|
<!-- 屏幕常亮权限 -->
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.WAKE_LOCK"/>
|
android:name="android.permission.WAKE_LOCK"/>
|
||||||
<uses-permission
|
<!-- <uses-permission
|
||||||
android:name="android.permission.CAMERA"/>
|
android:name="android.permission.CAMERA"/> -->
|
||||||
<!-- Permissions options for the `access notification policy` group -->
|
<!-- Permissions options for the `access notification policy` group -->
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
|
android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.6.3-all.zip
|
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.10.2-all.zip
|
||||||
|
|
@ -18,8 +18,8 @@ pluginManagement {
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||||
id "com.android.application" version "7.3.0" apply false
|
id "com.android.application" version "8.8.0" apply false
|
||||||
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
|
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
include ":app"
|
include ":app"
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
type="application/octet-stream" />
|
type="application/octet-stream" />
|
||||||
</item> -->
|
</item> -->
|
||||||
<item>
|
<item>
|
||||||
<title>Version 1.0.3+4</title>
|
<title>Version 1.0.7+8</title>
|
||||||
#发行说明-读取html方式(2选1)
|
#发行说明-读取html方式(2选1)
|
||||||
<!-- <sparkle:releaseNotesLink>
|
<!-- <sparkle:releaseNotesLink>
|
||||||
https://your_domain/your_path/release_notes.html
|
https://your_domain/your_path/release_notes.html
|
||||||
|
|
@ -39,16 +39,15 @@
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
<ul>
|
<ul>
|
||||||
<li>1、修复已知BUG</li>
|
<li>1、修复已知BUG</li>
|
||||||
<li>2、优化操作布局</li>
|
<li>2、添加缩放布局和批阅书写</li>
|
||||||
</ul>
|
</ul>
|
||||||
]]>
|
]]>
|
||||||
</description>
|
</description>
|
||||||
<pubDate>Fri, 14 Mar 2025 12:00:00 +0800</pubDate>
|
<pubDate>Tue, 30 Sep 2025 14:09:13 +0800</pubDate>
|
||||||
#你更新程序的地址
|
#你更新程序的地址
|
||||||
<enclosure url="https://dpc-job-oss.23544.com/infra-app/making_school_asignment_app/1.0.3/3/making_school_asignment_app-1.0.3+4-windows-setup.exe"
|
<enclosure url="https://dpc-job-oss.23544.com/infra-app/making_school_asignment_app/1.0.7/3/making_school_asignment_app-1.0.7+8-windows-setup.exe"
|
||||||
sparkle:dsaSignature="MEYCIQCuU0BodcdWrF+WoJrWRpY8P1pfK+dKkvrl3ZJ5KxnDdAIhAIWqp7VBNO9IaKFj2ypQ+s7DWurBUSaf6MTvexMmuvX+"
|
sparkle:dsaSignature="MEUCIQCwWC4fKrn/dfdH6uzX4Sssv7G6XVgvwjQLklrTM6+cBQIgZDY4INHcwuxrsIREuPQeTvQL4j0mvF9qPQfppjRSgsg=" length="0"
|
||||||
length="0"
|
sparkle:version="1.0.7+8"
|
||||||
sparkle:version="1.0.3+4"
|
|
||||||
sparkle:os="windows"
|
sparkle:os="windows"
|
||||||
type="application/octet-stream" />
|
type="application/octet-stream" />
|
||||||
</item>
|
</item>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 200 KiB |
|
Before Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 296 KiB |
|
Before Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 301 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 292 KiB |
BIN
making_school_asignment_app/dist/1.0.7+8/making_school_asignment_app-1.0.7+8-windows-setup.exe
vendored
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
@echo off
|
||||||
|
SETLOCAL EnableDelayedExpansion
|
||||||
|
|
||||||
|
:: 设置 UTF-8 代码页以支持中文显示
|
||||||
|
chcp 65001 > nul
|
||||||
|
|
||||||
|
:: 获取项目根目录
|
||||||
|
for %%I in ("%~dp0.") do set "PROJECT_DIR=%%~fI"
|
||||||
|
|
||||||
|
:: 1. 强制终止所有Java进程(Gradle相关)
|
||||||
|
echo Terminating processes...
|
||||||
|
taskkill /f /im java.exe 2>nul
|
||||||
|
taskkill /f /im gradlew.exe 2>nul
|
||||||
|
timeout /t 2 /nobreak >nul
|
||||||
|
|
||||||
|
:: 修复后的Flutter构建脚本
|
||||||
|
echo Running flutter clean...
|
||||||
|
call flutter clean
|
||||||
|
if !ERRORLEVEL! neq 0 (
|
||||||
|
echo flutter clean failed with error: !ERRORLEVEL!
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 3. 强制删除构建目录(带重试机制)
|
||||||
|
echo Removing residual files
|
||||||
|
call :ForceDelete "build"
|
||||||
|
call :ForceDelete ".dart_tool"
|
||||||
|
call :ForceDelete "pubspec.lock"
|
||||||
|
|
||||||
|
echo Running flutter pub get...
|
||||||
|
call flutter pub get
|
||||||
|
if !ERRORLEVEL! neq 0 (
|
||||||
|
echo flutter pub get failed with error: !ERRORLEVEL!
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Running build_runner...
|
||||||
|
call flutter packages pub run build_runner build --delete-conflicting-outputs
|
||||||
|
if !ERRORLEVEL! neq 0 (
|
||||||
|
echo build_runner failed with error: !ERRORLEVEL!
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Building release APK...
|
||||||
|
call flutter build apk --release
|
||||||
|
if !ERRORLEVEL! neq 0 (
|
||||||
|
echo APK build failed with error: !ERRORLEVEL!
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 新增:打开APK所在文件夹
|
||||||
|
echo Opening APK directory
|
||||||
|
if exist "build\app\outputs\flutter-apk\" (
|
||||||
|
explorer "build\app\outputs\flutter-apk\"
|
||||||
|
) else (
|
||||||
|
echo APK directory does not exist
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo All steps completed successfully!
|
||||||
|
echo APK file generated at: %PROJECT_DIR%\build\app\outputs\flutter-apk\
|
||||||
|
echo.
|
||||||
|
timeout /t 3 /nobreak >nul
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:: 函数区 -------------------------------------------------
|
||||||
|
:ForceDelete
|
||||||
|
setlocal
|
||||||
|
set "target=%~1"
|
||||||
|
set "max_retries=3"
|
||||||
|
set "retry_delay=1"
|
||||||
|
|
||||||
|
:: 检查目标是否存在
|
||||||
|
if not exist "%target%" (
|
||||||
|
endlocal
|
||||||
|
goto :eof
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 尝试多次删除
|
||||||
|
for /l %%i in (1,1,%max_retries%) do (
|
||||||
|
echo Attempting to delete %target% (try %%i of %max_retries%)
|
||||||
|
|
||||||
|
:: 先尝试删除文件
|
||||||
|
del /f /q /s "%target%\*" 2>nul
|
||||||
|
:: 再尝试删除目录
|
||||||
|
rmdir /s /q "%target%" 2>nul
|
||||||
|
|
||||||
|
:: 检查是否删除成功
|
||||||
|
if not exist "%target%" (
|
||||||
|
echo Successfully deleted %target%
|
||||||
|
endlocal
|
||||||
|
goto :eof
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 如果未成功,等待后重试
|
||||||
|
if %%i lss %max_retries% (
|
||||||
|
timeout /t %retry_delay% /nobreak >nul
|
||||||
|
set /a retry_delay*=2 :: 指数退避策略
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 如果所有尝试都失败
|
||||||
|
echo Warning: Could not completely delete %target%, some files may be in use
|
||||||
|
endlocal
|
||||||
|
goto :eof
|
||||||
|
|
@ -0,0 +1,159 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Ensure UTF-8 locale for macOS terminals
|
||||||
|
export LANG=en_US.UTF-8
|
||||||
|
export LC_ALL=en_US.UTF-8
|
||||||
|
|
||||||
|
# Resolve project directory (script location)
|
||||||
|
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
|
echo "Project dir: $PROJECT_DIR"
|
||||||
|
|
||||||
|
# To save credentials in macOS Keychain for non-interactive uploads, run:
|
||||||
|
# security add-generic-password -s "TransporterCredentials" -w "you@example.com:app-specific-password" -a transporter -U
|
||||||
|
# The script will read that item and expect the stored password string in the form: "APPLE_ID:APPLE_PASSWORD"
|
||||||
|
|
||||||
|
force_delete() {
|
||||||
|
local target="$1"
|
||||||
|
local max_retries=3
|
||||||
|
local retry_delay=1
|
||||||
|
|
||||||
|
if [ ! -e "$PROJECT_DIR/$target" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in $(seq 1 $max_retries); do
|
||||||
|
echo "Attempting to delete $target (try $i of $max_retries)"
|
||||||
|
rm -rf "$PROJECT_DIR/$target" 2>/dev/null || true
|
||||||
|
if [ ! -e "$PROJECT_DIR/$target" ]; then
|
||||||
|
echo "Successfully deleted $target"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ "$i" -lt "$max_retries" ]; then
|
||||||
|
sleep $retry_delay
|
||||||
|
retry_delay=$((retry_delay * 2))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Warning: Could not completely delete $target, some files may be in use"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
|
||||||
|
echo "Running flutter clean..."
|
||||||
|
if ! flutter clean; then
|
||||||
|
echo "flutter clean failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Removing residual files"
|
||||||
|
force_delete build || true
|
||||||
|
force_delete .dart_tool || true
|
||||||
|
force_delete pubspec.lock || true
|
||||||
|
|
||||||
|
echo "Running flutter pub get..."
|
||||||
|
if ! flutter pub get; then
|
||||||
|
echo "flutter pub get failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running build_runner (if present)..."
|
||||||
|
if ! flutter packages pub run build_runner build --delete-conflicting-outputs; then
|
||||||
|
echo "build_runner failed or not present — continuing"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building iOS IPA (verbose)..."
|
||||||
|
if ! flutter build ipa --release --verbose; then
|
||||||
|
echo "IPA build failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Try to find the generated .ipa (searching under build/)
|
||||||
|
IPA_PATH="$(find "$PROJECT_DIR/build" -type f -name '*.ipa' -print -quit || true)"
|
||||||
|
if [ -z "$IPA_PATH" ]; then
|
||||||
|
echo "No .ipa found in build output"
|
||||||
|
echo "Build finished but no IPA to upload. Exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Found IPA: $IPA_PATH"
|
||||||
|
|
||||||
|
# Upload via Transporter (if installed). Prefer environment vars APPLE_ID and APPLE_PASSWORD (app-specific password).
|
||||||
|
ITMS_TRANSPORTER="/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter"
|
||||||
|
if [ -x "$ITMS_TRANSPORTER" ]; then
|
||||||
|
echo "Using Transporter at $ITMS_TRANSPORTER"
|
||||||
|
|
||||||
|
# Read credentials from env, then try macOS Keychain, otherwise prompt
|
||||||
|
if [ -z "${APPLE_ID:-}" ] || [ -z "${APPLE_PASSWORD:-}" ]; then
|
||||||
|
# Try to read combined credentials from Keychain (service: TransporterCredentials)
|
||||||
|
if command -v security >/dev/null 2>&1; then
|
||||||
|
KC_PAIR="$(security find-generic-password -s "TransporterCredentials" -w 2>/dev/null || true)"
|
||||||
|
if [ -n "$KC_PAIR" ]; then
|
||||||
|
# Expect stored value in form: appleid:app-specific-password
|
||||||
|
APPLE_ID="${KC_PAIR%%:*}"
|
||||||
|
APPLE_PASSWORD="${KC_PAIR#*:}"
|
||||||
|
if [ -n "${APPLE_ID}" ] && [ -n "${APPLE_PASSWORD}" ]; then
|
||||||
|
echo "Credentials loaded from Keychain (service: TransporterCredentials)."
|
||||||
|
else
|
||||||
|
# clear if parsing failed
|
||||||
|
APPLE_ID=""
|
||||||
|
APPLE_PASSWORD=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${APPLE_ID:-}" ] || [ -z "${APPLE_PASSWORD:-}" ]; then
|
||||||
|
echo "Provide App Store Connect credentials for upload. You can set APPLE_ID and APPLE_PASSWORD (app-specific password) in the environment or save a keychain item named 'TransporterCredentials' to avoid prompts."
|
||||||
|
read -p "Apple ID (email): " APPLE_ID
|
||||||
|
read -s -p "App-specific password (will not echo): " APPLE_PASSWORD
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Uploading $IPA_PATH to App Store Connect (this may take a while)..."
|
||||||
|
# Try transporter with a small retry loop
|
||||||
|
UPLOAD_EXIT=0
|
||||||
|
MAX_UPLOAD_TRIES=2
|
||||||
|
for try in $(seq 1 $MAX_UPLOAD_TRIES); do
|
||||||
|
echo "Transporter upload attempt $try of $MAX_UPLOAD_TRIES..."
|
||||||
|
if "$ITMS_TRANSPORTER" -m upload -u "$APPLE_ID" -p "$APPLE_PASSWORD" -f "$IPA_PATH"; then
|
||||||
|
echo "Upload succeeded"
|
||||||
|
UPLOAD_EXIT=0
|
||||||
|
break
|
||||||
|
else
|
||||||
|
UPLOAD_EXIT=$?
|
||||||
|
echo "Transporter upload attempt $try failed (exit $UPLOAD_EXIT)"
|
||||||
|
# small delay before retry
|
||||||
|
sleep $((try * 2))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $UPLOAD_EXIT -ne 0 ]; then
|
||||||
|
echo "Transporter upload failed after $MAX_UPLOAD_TRIES attempts (exit $UPLOAD_EXIT)."
|
||||||
|
echo "Opening Transporter app so you can upload the IPA manually..."
|
||||||
|
# Try to open Transporter GUI with the IPA as argument (may import the file)
|
||||||
|
if command -v open >/dev/null 2>&1; then
|
||||||
|
if open -a Transporter "$IPA_PATH" 2>/dev/null; then
|
||||||
|
echo "Transporter app opened. Please complete the upload there."
|
||||||
|
else
|
||||||
|
echo "Failed to open Transporter with the IPA. Opening Transporter app without file..."
|
||||||
|
open -a Transporter || true
|
||||||
|
echo "Transporter opened. Please drag the IPA ($IPA_PATH) into the app to upload."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Cannot open Transporter GUI: 'open' command not found. Please upload IPA manually: $IPA_PATH"
|
||||||
|
fi
|
||||||
|
# Do not exit with error here so the script can finish and user can manually complete upload
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Transporter not found at $ITMS_TRANSPORTER. Please install Transporter app from the Mac App Store or upload the IPA manually."
|
||||||
|
echo "IPA path: $IPA_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "All steps completed successfully!"
|
||||||
|
echo "IPA: $IPA_PATH"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
@ -5,12 +5,15 @@ flutter_native_splash:
|
||||||
# 如需恢复默认的白屏,执行如下命令
|
# 如需恢复默认的白屏,执行如下命令
|
||||||
# flutter pub run flutter_native_splash:remove
|
# flutter pub run flutter_native_splash:remove
|
||||||
# 设置闪屏页的默认态logo或背景图片路径
|
# 设置闪屏页的默认态logo或背景图片路径
|
||||||
color: "#FFFFFF"
|
background_image: assets/images/splash_native.png
|
||||||
image_ios: assets/images/splash_native.png
|
|
||||||
background_image_android: assets/images/splash_native.png
|
# 全屏模式
|
||||||
|
fullscreen: true
|
||||||
|
|
||||||
android_12:
|
android_12:
|
||||||
image: assets/images/splash2.png
|
color: "#FFFFFF"
|
||||||
|
image: assets/images/logo_splash.png
|
||||||
android: true
|
android: true
|
||||||
ios: true
|
ios: true
|
||||||
android_gravity: fill
|
# android_gravity: clip_vertical
|
||||||
ios_content_mode: scaleToFill
|
# ios_content_mode: scaleToFill
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,6 @@
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.0</string>
|
<string>1.0</string>
|
||||||
<key>MinimumOSVersion</key>
|
<key>MinimumOSVersion</key>
|
||||||
<string>12.0</string>
|
<string>13.0</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# Uncomment this line to define a global platform for your project
|
# Uncomment this line to define a global platform for your project
|
||||||
# platform :ios, '12.0'
|
# platform :ios, '13.0'
|
||||||
|
|
||||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|
|
||||||
|
|
@ -477,9 +477,10 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
|
@ -495,7 +496,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 6;
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
DEVELOPMENT_TEAM = Z778GC45N8;
|
DEVELOPMENT_TEAM = Z778GC45N8;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
|
@ -503,7 +504,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3;
|
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.yuanxuan.makingS--buneng--choolAsignmentApp";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.yuanxuan.makingS--buneng--choolAsignmentApp";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|
@ -524,7 +525,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp.RunnerTests;
|
||||||
|
|
@ -542,7 +543,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
DEVELOPMENT_TEAM = Z778GC45N8;
|
DEVELOPMENT_TEAM = Z778GC45N8;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
|
|
@ -559,7 +560,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp.RunnerTests;
|
||||||
|
|
@ -619,10 +620,11 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
|
@ -671,9 +673,10 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
SWIFT_COMPILATION_MODE = wholemodule;
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
|
@ -689,7 +692,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 6;
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
DEVELOPMENT_TEAM = Z778GC45N8;
|
DEVELOPMENT_TEAM = Z778GC45N8;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
|
@ -697,7 +700,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3;
|
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
|
@ -719,7 +722,7 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 6;
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
DEVELOPMENT_TEAM = Z778GC45N8;
|
DEVELOPMENT_TEAM = Z778GC45N8;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
|
@ -727,7 +730,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3;
|
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yuanxuan.makingSchoolAsignmentApp;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
|
|
@ -54,11 +55,13 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
debugServiceExtension = "internal"
|
debugServiceExtension = "internal"
|
||||||
|
enableGPUValidationMode = "1"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable
|
<BuildableProductRunnable
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0">
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import Flutter
|
import Flutter
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
@UIApplicationMain
|
@main
|
||||||
@objc class AppDelegate: FlutterAppDelegate {
|
@objc class AppDelegate: FlutterAppDelegate {
|
||||||
override func application(
|
override func application(
|
||||||
_ application: UIApplication,
|
_ application: UIApplication,
|
||||||
|
|
|
||||||
|
|
@ -1,122 +1,158 @@
|
||||||
{
|
{
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-20x20@2x.png",
|
"size": "20x20",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "2x",
|
"filename": "icon-20@2x.png",
|
||||||
"size": "20x20"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-20x20@3x.png",
|
"size": "20x20",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "3x",
|
"filename": "icon-20@3x.png",
|
||||||
"size": "20x20"
|
"scale": "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-29x29@1x.png",
|
"size": "29x29",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "1x",
|
"filename": "icon-29.png",
|
||||||
"size": "29x29"
|
"scale": "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-29x29@2x.png",
|
"size": "29x29",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "2x",
|
"filename": "icon-29@2x.png",
|
||||||
"size": "29x29"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-29x29@3x.png",
|
"size": "29x29",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "3x",
|
"filename": "icon-29@3x.png",
|
||||||
"size": "29x29"
|
"scale": "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-40x40@2x.png",
|
"size": "40x40",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "2x",
|
"filename": "icon-40@2x.png",
|
||||||
"size": "40x40"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-40x40@3x.png",
|
"size": "40x40",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "3x",
|
"filename": "icon-40@3x.png",
|
||||||
"size": "40x40"
|
"scale": "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-60x60@2x.png",
|
"size": "57x57",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "2x",
|
"filename": "icon-57.png",
|
||||||
"size": "60x60"
|
"scale": "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-60x60@3x.png",
|
"size": "57x57",
|
||||||
"idiom": "iphone",
|
"idiom": "iphone",
|
||||||
"scale": "3x",
|
"filename": "icon-57@2x.png",
|
||||||
"size": "60x60"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-20x20@1x.png",
|
"size": "60x60",
|
||||||
"idiom": "ipad",
|
"idiom": "iphone",
|
||||||
"scale": "1x",
|
"filename": "icon-60@2x.png",
|
||||||
"size": "20x20"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-20x20@2x.png",
|
"size": "60x60",
|
||||||
"idiom": "ipad",
|
"idiom": "iphone",
|
||||||
"scale": "2x",
|
"filename": "icon-60@3x.png",
|
||||||
"size": "20x20"
|
"scale": "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-29x29@1x.png",
|
"size": "20x20",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "1x",
|
"filename": "icon-20-ipad.png",
|
||||||
"size": "29x29"
|
"scale": "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-29x29@2x.png",
|
"size": "20x20",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "2x",
|
"filename": "icon-20@2x-ipad.png",
|
||||||
"size": "29x29"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-40x40@1x.png",
|
"size": "29x29",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "1x",
|
"filename": "icon-29-ipad.png",
|
||||||
"size": "40x40"
|
"scale": "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-40x40@2x.png",
|
"size": "29x29",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "2x",
|
"filename": "icon-29@2x-ipad.png",
|
||||||
"size": "40x40"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-76x76@1x.png",
|
"size": "40x40",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "1x",
|
"filename": "icon-40.png",
|
||||||
"size": "76x76"
|
"scale": "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-76x76@2x.png",
|
"size": "40x40",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "2x",
|
"filename": "icon-40@2x.png",
|
||||||
"size": "76x76"
|
"scale": "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-83.5x83.5@2x.png",
|
"size": "50x50",
|
||||||
"idiom": "ipad",
|
"idiom": "ipad",
|
||||||
"scale": "2x",
|
"filename": "icon-50.png",
|
||||||
"size": "83.5x83.5"
|
"scale": "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "Icon-App-1024x1024@1x.png",
|
"size": "50x50",
|
||||||
"idiom": "ios-marketing",
|
"idiom": "ipad",
|
||||||
"scale": "1x",
|
"filename": "icon-50@2x.png",
|
||||||
"size": "1024x1024"
|
"scale": "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "72x72",
|
||||||
|
"idiom": "ipad",
|
||||||
|
"filename": "icon-72.png",
|
||||||
|
"scale": "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "72x72",
|
||||||
|
"idiom": "ipad",
|
||||||
|
"filename": "icon-72@2x.png",
|
||||||
|
"scale": "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "76x76",
|
||||||
|
"idiom": "ipad",
|
||||||
|
"filename": "icon-76.png",
|
||||||
|
"scale": "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "76x76",
|
||||||
|
"idiom": "ipad",
|
||||||
|
"filename": "icon-76@2x.png",
|
||||||
|
"scale": "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "83.5x83.5",
|
||||||
|
"idiom": "ipad",
|
||||||
|
"filename": "icon-83.5@2x.png",
|
||||||
|
"scale": "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "1024x1024",
|
||||||
|
"idiom": "ios-marketing",
|
||||||
|
"filename": "icon-1024.png",
|
||||||
|
"scale": "1x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info": {
|
||||||
|
"version": 1,
|
||||||
|
"author": "icon.wuruihong.com"
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"info": {
|
|
||||||
"author": "icons_launcher",
|
|
||||||
"version": 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 961 B |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 981 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 7.1 KiB |