feat: Cross-platform logic updates
88
lib/app.dart
@ -115,27 +115,7 @@ class AppGlobalModel extends _$AppGlobalModel {
|
|||||||
Future<void> initApp() async {
|
Future<void> initApp() async {
|
||||||
if (_initialized) return;
|
if (_initialized) return;
|
||||||
// init Data
|
// init Data
|
||||||
final userProfileDir = Platform.environment["USERPROFILE"];
|
final applicationSupportDir = await _initAppDir();
|
||||||
final applicationSupportDir =
|
|
||||||
(await getApplicationSupportDirectory()).absolute.path;
|
|
||||||
String? applicationBinaryModuleDir;
|
|
||||||
try {
|
|
||||||
await initDPrintFile(applicationSupportDir);
|
|
||||||
} catch (e) {
|
|
||||||
dPrint("initDPrintFile Error: $e");
|
|
||||||
}
|
|
||||||
if (ConstConf.isMSE && userProfileDir != null) {
|
|
||||||
applicationBinaryModuleDir =
|
|
||||||
"$userProfileDir\\AppData\\Local\\Temp\\SCToolbox\\modules";
|
|
||||||
} else {
|
|
||||||
applicationBinaryModuleDir = "$applicationSupportDir\\modules";
|
|
||||||
}
|
|
||||||
dPrint("applicationSupportDir == $applicationSupportDir");
|
|
||||||
dPrint("applicationBinaryModuleDir == $applicationBinaryModuleDir");
|
|
||||||
state = state.copyWith(
|
|
||||||
applicationSupportDir: applicationSupportDir,
|
|
||||||
applicationBinaryModuleDir: applicationBinaryModuleDir,
|
|
||||||
);
|
|
||||||
|
|
||||||
// init Rust bridge
|
// init Rust bridge
|
||||||
await RustLib.init();
|
await RustLib.init();
|
||||||
@ -170,11 +150,13 @@ class AppGlobalModel extends _$AppGlobalModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// init powershell
|
// init powershell
|
||||||
try {
|
if (Platform.isWindows) {
|
||||||
await SystemHelper.initPowershellPath();
|
try {
|
||||||
dPrint("---- Powershell init -----");
|
await SystemHelper.initPowershellPath();
|
||||||
} catch (e) {
|
dPrint("---- Powershell init -----");
|
||||||
dPrint("powershell init failed : $e");
|
} catch (e) {
|
||||||
|
dPrint("powershell init failed : $e");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get windows info
|
// get windows info
|
||||||
@ -187,19 +169,20 @@ class AppGlobalModel extends _$AppGlobalModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// init windows
|
// init windows
|
||||||
|
|
||||||
windowManager.waitUntilReadyToShow().then((_) async {
|
windowManager.waitUntilReadyToShow().then((_) async {
|
||||||
await windowManager.setTitle("SCToolBox");
|
await windowManager.setTitle("SCToolBox");
|
||||||
await windowManager.setSize(const Size(1280, 810));
|
await windowManager.setSize(const Size(1280, 810));
|
||||||
await windowManager.setMinimumSize(const Size(1280, 810));
|
await windowManager.setMinimumSize(const Size(1280, 810));
|
||||||
await windowManager.setSkipTaskbar(false);
|
await windowManager.setSkipTaskbar(false);
|
||||||
await windowManager.show();
|
await windowManager.show();
|
||||||
await Window.initialize();
|
if (Platform.isWindows) {
|
||||||
await Window.hideWindowControls();
|
await Window.initialize();
|
||||||
if (windowsDeviceInfo?.productName.contains("Windows 11") ?? false) {
|
await Window.hideWindowControls();
|
||||||
await Window.setEffect(
|
if (windowsDeviceInfo?.productName.contains("Windows 11") ?? false) {
|
||||||
effect: WindowEffect.acrylic,
|
await Window.setEffect(
|
||||||
);
|
effect: WindowEffect.acrylic,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -248,6 +231,7 @@ class AppGlobalModel extends _$AppGlobalModel {
|
|||||||
ConstConf.appVersionDate, checkUpdateError.toString()));
|
ConstConf.appVersionDate, checkUpdateError.toString()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!Platform.isWindows) return false;
|
||||||
final lastVersion = ConstConf.isMSE
|
final lastVersion = ConstConf.isMSE
|
||||||
? state.networkVersionData?.mSELastVersionCode
|
? state.networkVersionData?.mSELastVersionCode
|
||||||
: state.networkVersionData?.lastVersionCode;
|
: state.networkVersionData?.lastVersionCode;
|
||||||
@ -332,6 +316,44 @@ class AppGlobalModel extends _$AppGlobalModel {
|
|||||||
state = state.copyWith(appLocale: value);
|
state = state.copyWith(appLocale: value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<String> _initAppDir() async {
|
||||||
|
if (Platform.isWindows) {
|
||||||
|
final userProfileDir = Platform.environment["USERPROFILE"];
|
||||||
|
final applicationSupportDir =
|
||||||
|
(await getApplicationSupportDirectory()).absolute.path;
|
||||||
|
String? applicationBinaryModuleDir;
|
||||||
|
try {
|
||||||
|
await initDPrintFile(applicationSupportDir);
|
||||||
|
} catch (e) {
|
||||||
|
dPrint("initDPrintFile Error: $e");
|
||||||
|
}
|
||||||
|
if (ConstConf.isMSE && userProfileDir != null) {
|
||||||
|
applicationBinaryModuleDir =
|
||||||
|
"$userProfileDir\\AppData\\Local\\Temp\\SCToolbox\\modules";
|
||||||
|
} else {
|
||||||
|
applicationBinaryModuleDir = "$applicationSupportDir\\modules";
|
||||||
|
}
|
||||||
|
dPrint("applicationSupportDir == $applicationSupportDir");
|
||||||
|
dPrint("applicationBinaryModuleDir == $applicationBinaryModuleDir");
|
||||||
|
state = state.copyWith(
|
||||||
|
applicationSupportDir: applicationSupportDir,
|
||||||
|
applicationBinaryModuleDir: applicationBinaryModuleDir,
|
||||||
|
);
|
||||||
|
return applicationSupportDir;
|
||||||
|
} else {
|
||||||
|
final applicationSupportDir =
|
||||||
|
(await getApplicationSupportDirectory()).absolute.path;
|
||||||
|
final applicationBinaryModuleDir = "$applicationSupportDir/modules";
|
||||||
|
dPrint("applicationSupportDir == $applicationSupportDir");
|
||||||
|
dPrint("applicationBinaryModuleDir == $applicationBinaryModuleDir");
|
||||||
|
state = state.copyWith(
|
||||||
|
applicationSupportDir: applicationSupportDir,
|
||||||
|
applicationBinaryModuleDir: applicationBinaryModuleDir,
|
||||||
|
);
|
||||||
|
return applicationSupportDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@freezed
|
@freezed
|
||||||
|
@ -7,6 +7,7 @@ import 'package:starcitizen_doctor/common/utils/log.dart';
|
|||||||
|
|
||||||
class SCLoggerHelper {
|
class SCLoggerHelper {
|
||||||
static Future<String?> getLogFilePath() async {
|
static Future<String?> getLogFilePath() async {
|
||||||
|
if (!Platform.isWindows) return null;
|
||||||
Map<String, String> envVars = Platform.environment;
|
Map<String, String> envVars = Platform.environment;
|
||||||
final appDataPath = envVars["appdata"];
|
final appDataPath = envVars["appdata"];
|
||||||
if (appDataPath == null) {
|
if (appDataPath == null) {
|
||||||
@ -30,6 +31,7 @@ class SCLoggerHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Future<List?> getLauncherLogList() async {
|
static Future<List?> getLauncherLogList() async {
|
||||||
|
if (!Platform.isWindows) return [];
|
||||||
final jsonLogPath = await getLogFilePath();
|
final jsonLogPath = await getLogFilePath();
|
||||||
if (jsonLogPath == null) return null;
|
if (jsonLogPath == null) return null;
|
||||||
var jsonString = utf8.decode(await File(jsonLogPath).readAsBytes());
|
var jsonString = utf8.decode(await File(jsonLogPath).readAsBytes());
|
||||||
|
@ -263,13 +263,18 @@ foreach ($adapter in $adapterMemory) {
|
|||||||
|
|
||||||
static Future openDir(path, {bool isFile = false}) async {
|
static Future openDir(path, {bool isFile = false}) async {
|
||||||
dPrint("SystemHelper.openDir path === $path");
|
dPrint("SystemHelper.openDir path === $path");
|
||||||
await Process.run(SystemHelper.powershellPath,
|
if (Platform.isWindows) {
|
||||||
["explorer.exe", isFile ? "/select,$path" : "\"/select,\"$path\"\""]);
|
await Process.run(SystemHelper.powershellPath,
|
||||||
|
["explorer.exe", isFile ? "/select,$path" : "\"/select,\"$path\"\""]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static String getHostsFilePath() {
|
static String getHostsFilePath() {
|
||||||
final envVars = Platform.environment;
|
if (Platform.isWindows) {
|
||||||
final systemRoot = envVars["SYSTEMROOT"];
|
final envVars = Platform.environment;
|
||||||
return "$systemRoot\\System32\\drivers\\etc\\hosts";
|
final systemRoot = envVars["SYSTEMROOT"];
|
||||||
|
return "$systemRoot\\System32\\drivers\\etc\\hosts";
|
||||||
|
}
|
||||||
|
return "/etc/hosts";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,10 @@ void dPrint(src) async {
|
|||||||
Future<void> initDPrintFile(String applicationSupportDir) async {
|
Future<void> initDPrintFile(String applicationSupportDir) async {
|
||||||
final now = DateTime.now();
|
final now = DateTime.now();
|
||||||
final logFile =
|
final logFile =
|
||||||
File("$applicationSupportDir\\logs\\${now.millisecondsSinceEpoch}.log");
|
File("$applicationSupportDir/logs/${now.millisecondsSinceEpoch}.log");
|
||||||
await logFile.create(recursive: true);
|
await logFile.create(recursive: true);
|
||||||
_logFile = logFile;
|
_logFile = logFile;
|
||||||
final logsDir = Directory("$applicationSupportDir\\logs");
|
final logsDir = Directory("$applicationSupportDir/logs");
|
||||||
await for (final files in logsDir.list()) {
|
await for (final files in logsDir.list()) {
|
||||||
if (files is File) {
|
if (files is File) {
|
||||||
final stat = await files.stat();
|
final stat = await files.stat();
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import 'dart:io';
|
||||||
import 'package:desktop_webview_window/desktop_webview_window.dart';
|
import 'package:desktop_webview_window/desktop_webview_window.dart';
|
||||||
import 'package:fluent_ui/fluent_ui.dart';
|
import 'package:fluent_ui/fluent_ui.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
@ -86,6 +87,7 @@ Widget _defaultWebviewTitleBar(BuildContext context) {
|
|||||||
child: Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
|
if (Platform.isMacOS) const SizedBox(width: 96),
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: !state.canGoBack ? null : controller.back,
|
onPressed: !state.canGoBack ? null : controller.back,
|
||||||
icon: const Icon(FluentIcons.chevron_left),
|
icon: const Icon(FluentIcons.chevron_left),
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:desktop_webview_window/desktop_webview_window.dart';
|
import 'package:desktop_webview_window/desktop_webview_window.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
@ -63,7 +64,7 @@ class WebViewModel {
|
|||||||
windowWidth: loginMode ? 960 : 1920,
|
windowWidth: loginMode ? 960 : 1920,
|
||||||
windowHeight: loginMode ? 720 : 1080,
|
windowHeight: loginMode ? 720 : 1080,
|
||||||
userDataFolderWindows: "$applicationSupportDir/webview_data",
|
userDataFolderWindows: "$applicationSupportDir/webview_data",
|
||||||
title: title));
|
title: Platform.isMacOS ? "" : title));
|
||||||
// webview.openDevToolsWindow();
|
// webview.openDevToolsWindow();
|
||||||
webview.isNavigating.addListener(() async {
|
webview.isNavigating.addListener(() async {
|
||||||
if (!webview.isNavigating.value && localizationResource.isNotEmpty) {
|
if (!webview.isNavigating.value && localizationResource.isNotEmpty) {
|
||||||
|
@ -55,7 +55,7 @@ SPEC CHECKSUMS:
|
|||||||
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
||||||
macos_window_utils: 933f91f64805e2eb91a5bd057cf97cd097276663
|
macos_window_utils: 933f91f64805e2eb91a5bd057cf97cd097276663
|
||||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||||
rust_builder: 00402adf154e18cc4598fc3c131257e884010a50
|
rust_builder: 4b521d57bf67224da65f32b529be8fab420fca32
|
||||||
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
|
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
|
||||||
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
|
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
|
||||||
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
|
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
||||||
33CC10ED2044A3C60003C045 /* app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = app.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
33CC10ED2044A3C60003C045 /* SCToolBox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SCToolBox.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
@ -132,7 +132,7 @@
|
|||||||
33CC10EE2044A3C60003C045 /* Products */ = {
|
33CC10EE2044A3C60003C045 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
33CC10ED2044A3C60003C045 /* app.app */,
|
33CC10ED2044A3C60003C045 /* SCToolBox.app */,
|
||||||
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
|
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
@ -236,7 +236,7 @@
|
|||||||
);
|
);
|
||||||
name = Runner;
|
name = Runner;
|
||||||
productName = Runner;
|
productName = Runner;
|
||||||
productReference = 33CC10ED2044A3C60003C045 /* app.app */;
|
productReference = 33CC10ED2044A3C60003C045 /* SCToolBox.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
@ -562,6 +562,7 @@
|
|||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = SCToolBox;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
@ -696,6 +697,7 @@
|
|||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = SCToolBox;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
@ -718,6 +720,7 @@
|
|||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = SCToolBox;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
BuildableName = "app.app"
|
BuildableName = "SCToolBox.app"
|
||||||
BlueprintName = "Runner"
|
BlueprintName = "Runner"
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
@ -31,7 +31,7 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
BuildableName = "app.app"
|
BuildableName = "SCToolBox.app"
|
||||||
BlueprintName = "Runner"
|
BlueprintName = "Runner"
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
@ -65,7 +65,7 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
BuildableName = "app.app"
|
BuildableName = "SCToolBox.app"
|
||||||
BlueprintName = "Runner"
|
BlueprintName = "Runner"
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
@ -82,7 +82,7 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
BuildableName = "app.app"
|
BuildableName = "SCToolBox.app"
|
||||||
BlueprintName = "Runner"
|
BlueprintName = "Runner"
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
|
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png
Normal file
After Width: | Height: | Size: 909 B |
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
macos/Runner/Assets.xcassets/AppIcon.appiconset/64.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
@ -1,68 +1 @@
|
|||||||
{
|
{"images":[{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 520 B |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 2.2 KiB |
@ -5,10 +5,10 @@
|
|||||||
// 'flutter create' template.
|
// 'flutter create' template.
|
||||||
|
|
||||||
// The application's name. By default this is also the title of the Flutter window.
|
// The application's name. By default this is also the title of the Flutter window.
|
||||||
PRODUCT_NAME = app
|
PRODUCT_NAME = SCToolBox
|
||||||
|
|
||||||
// The application's bundle identifier
|
// The application's bundle identifier
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.app
|
PRODUCT_BUNDLE_IDENTIFIER = com.xkeyc.tools.sctoolbox
|
||||||
|
|
||||||
// The copyright displayed in application information
|
// The copyright displayed in application information
|
||||||
PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved.
|
PRODUCT_COPYRIGHT = Copyright © 2024 xkeyC Studio All rights reserved.
|
||||||
|
@ -6,6 +6,12 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.allow-jit</key>
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>com.apple.security.files.downloads.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.files.user-selected.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.security.network.server</key>
|
<key>com.apple.security.network.server</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
@ -22,6 +22,11 @@
|
|||||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>$(PRODUCT_COPYRIGHT)</string>
|
<string>$(PRODUCT_COPYRIGHT)</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
|
@ -4,5 +4,13 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>com.apple.security.files.downloads.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.files.user-selected.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.network.server</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
@ -18,10 +18,10 @@ dependencies:
|
|||||||
hooks_riverpod: ^2.4.10
|
hooks_riverpod: ^2.4.10
|
||||||
json_annotation: ^4.8.1
|
json_annotation: ^4.8.1
|
||||||
go_router: ^14.0.1
|
go_router: ^14.0.1
|
||||||
window_manager: ^0.3.2
|
window_manager: ^0.3.9
|
||||||
fluent_ui: ^4.8.6
|
fluent_ui: ^4.8.6
|
||||||
flutter_staggered_grid_view: ^0.7.0
|
flutter_staggered_grid_view: ^0.7.0
|
||||||
flutter_acrylic: ^1.1.0
|
flutter_acrylic: ^1.1.4
|
||||||
url_launcher: ^6.1.10
|
url_launcher: ^6.1.10
|
||||||
font_awesome_flutter: ^10.5.0
|
font_awesome_flutter: ^10.5.0
|
||||||
cupertino_icons: ^1.0.2
|
cupertino_icons: ^1.0.2
|
||||||
|
@ -19,8 +19,8 @@ A new Flutter FFI plugin project.
|
|||||||
# `../src/*` so that the C sources can be shared among all target platforms.
|
# `../src/*` so that the C sources can be shared among all target platforms.
|
||||||
s.source = { :path => '.' }
|
s.source = { :path => '.' }
|
||||||
s.source_files = 'Classes/**/*'
|
s.source_files = 'Classes/**/*'
|
||||||
|
s.frameworks = 'SystemConfiguration'
|
||||||
s.dependency 'FlutterMacOS'
|
s.dependency 'FlutterMacOS'
|
||||||
|
|
||||||
s.platform = :osx, '10.11'
|
s.platform = :osx, '10.11'
|
||||||
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
|
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
|
||||||
s.swift_version = '5.0'
|
s.swift_version = '5.0'
|
||||||
|