diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/ApplicationLibrary.swift b/iOS-SwiftUI-Code/ApplicationLibrary/ApplicationLibrary.swift
deleted file mode 100644
index b8246da..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/ApplicationLibrary.swift
+++ /dev/null
@@ -1,6 +0,0 @@
-import Foundation
-
-public class ApplicationLibrary {
- public static let bundle = Bundle(for: ApplicationLibrary.self)
- public static let inPreview = false
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/Contents.json b/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/Contents.json
deleted file mode 100644
index 73c0059..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/save.symbolset/Contents.json b/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/save.symbolset/Contents.json
deleted file mode 100644
index 51af668..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/save.symbolset/Contents.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "info": {
- "author": "xcode",
- "version": 1
- },
- "symbols": [
- {
- "filename": "save-save_symbol.svg",
- "idiom": "universal"
- }
- ]
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/save.symbolset/save-save_symbol.svg b/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/save.symbolset/save-save_symbol.svg
deleted file mode 100644
index 2b67790..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Assets.xcassets/save.symbolset/save-save_symbol.svg
+++ /dev/null
@@ -1,127 +0,0 @@
-
\ No newline at end of file
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Service/ProfileUpdateTask.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Service/ProfileUpdateTask.swift
deleted file mode 100644
index 65ce3d7..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Service/ProfileUpdateTask.swift
+++ /dev/null
@@ -1,76 +0,0 @@
-import Foundation
-import Library
-
-public enum ProfileUpdateTask {
- static let minUpdateInterval: TimeInterval = 15 * 60
- static let defaultUpdateInterval: TimeInterval = 60 * 60
-
- private static var timer: Timer?
-
- public static func configure() async throws {
- timer?.invalidate()
- timer = nil
- let profiles = try await ProfileManager.listAutoUpdateEnabled()
- if profiles.isEmpty {
- return
- }
- var updateInterval = profiles.map { it in
- it.autoUpdateIntervalOrDefault
- }.min()!
- if updateInterval < minUpdateInterval {
- updateInterval = minUpdateInterval
- }
- timer = Timer(fire: calculateEarliestBeginDate(profiles), interval: updateInterval, repeats: true) { _ in
- Task {
- await getAndupdateProfiles()
- }
- }
- }
-
- static func calculateEarliestBeginDate(_ profiles: [Profile]) -> Date {
- let nowTime = Date.now
- var earliestBeginDate = profiles.map { it in
- it.lastUpdated!.addingTimeInterval(it.autoUpdateIntervalOrDefault)
- }.min()!
- if earliestBeginDate <= nowTime {
- earliestBeginDate = nowTime
- }
- return earliestBeginDate
- }
-
- private nonisolated static func getAndupdateProfiles() async {
- do {
- _ = try await updateProfiles(ProfileManager.listAutoUpdateEnabled())
- NSLog("profile update task succeed")
- } catch {
- NSLog("profile update task failed: \(error.localizedDescription)")
- }
- }
-
- static func updateProfiles(_ profiles: [Profile]) async -> Bool {
- var success = true
- for profile in profiles {
- if profile.lastUpdated! > Date(timeIntervalSinceNow: -profile.autoUpdateIntervalOrDefault) {
- continue
- }
- do {
- try await profile.updateRemoteProfile()
- NSLog("Updated profile \(profile.name)")
- } catch {
- NSLog("Update profile \(profile.name) failed: \(error.localizedDescription)")
- success = false
- }
- }
- return success
- }
-}
-
-extension Profile {
- var autoUpdateIntervalOrDefault: TimeInterval {
- if autoUpdateInterval > 0 {
- return TimeInterval(autoUpdateInterval * 60)
- } else {
- return ProfileUpdateTask.defaultUpdateInterval
- }
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Service/StoreManager.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Service/StoreManager.swift
deleted file mode 100644
index dce0e0d..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Service/StoreManager.swift
+++ /dev/null
@@ -1,139 +0,0 @@
-//
-// File.swift
-// LoginKit
-//
-// Created by Mac on 2024/10/12.
-//
-
-import Foundation
-import Foundation
-
-//MACOS
-// 创建一个全局的 UserManager 类,负责从 UserDefaults 中读取和存储用户信息及登录状态
-class StoreManager {
- static let shared = StoreManager()
-
-
- public let configURL = "https://api.gooapis.com/api/vpnconfig.php"
-
- // UserDefaults keys
- private let loginStatusKey = "isLoggedIn"
- private let userEmailKey = "userEmail"
- private let avatarurlKey = "avatar_url"
- private let autodataKey = "autodata"
- private let subURLDataKey = "subURLData"
- private let baseURLKey = "baseURLKey"
-
-
- // UserDefaults 引用
- private let defaults = UserDefaults.standard
-
- func baseURL()-> String{
- return UserDefaults.standard.string(forKey: "baseURLKey") ?? ""
- }
-
- func mainregisterURL()-> String{
- UserDefaults.standard.string(forKey: "mainregisterURLKey") ?? ""
- }
-
- func paymentURL()-> String{
- UserDefaults.standard.string(forKey: "paymentURLKey") ?? ""
- }
- func telegramUrl()-> String{
- UserDefaults.standard.string(forKey: "telegramUrlKey") ?? ""
- }
- func kefuUrl()-> String{
- UserDefaults.standard.string(forKey: "kefuUrlKey") ?? ""
- }
- func websiteURL()-> String{
- UserDefaults.standard.string(forKey: "websiteURLKey") ?? ""
- }
-
- //存储 URL 相关信息
- func storebaseURLData(data: String) {
- defaults.set(data, forKey: "baseURLKey")
- defaults.synchronize()
- }
-
- func storemainregisterURLData(data: String) {
- defaults.set(data, forKey: "mainregisterURLKey")
- defaults.synchronize()
- }
-
- func storepaymentURLData(data: String) {
- defaults.set(data, forKey: "paymentURLKey")
- defaults.synchronize()
- }
-
- func storetelegramUrlData(data: String) {
- defaults.set(data, forKey: "telegramUrlKey")
- defaults.synchronize()
- }
-
- func storekefuUrlData(data: String) {
- defaults.set(data, forKey: "kefuUrlKey")
- defaults.synchronize()
- }
- func storewebsiteURLData(data: String) {
- defaults.set(data, forKey: "websiteURLKey")
- defaults.synchronize()
- }
-
-
- // 更新登录状态
- func updateLoginStatus(_ loggedIn: Bool) {
- defaults.set(loggedIn, forKey: loginStatusKey)
- defaults.synchronize()
- }
-
-
- // 检查是否已登录
- func isUserLoggedIn() -> Bool {
- return defaults.bool(forKey: loginStatusKey)
- }
-
- // 存储用户信息
- func storeUserInfo(email: String, avator: String) {
- defaults.set(email, forKey: userEmailKey)
- defaults.set(avator, forKey: avatarurlKey) // 假设 info 是 JSON 字符串
- defaults.synchronize()
- }
-
- // 读取用户信息
- func getUserInfo() -> (email: String, avator: String) {
- let email = defaults.string(forKey: userEmailKey) ?? ""
- let avator = defaults.string(forKey: avatarurlKey) ?? ""
- return (email, avator)
- }
-
- // 存储 autodata
- func storeAutoData(data: String) {
- defaults.set(data, forKey: autodataKey)
- defaults.synchronize()
- }
-
- // 读取 autodata
- func getSuburlData() -> String {
- return defaults.string(forKey: subURLDataKey) ?? ""
- }
-
- // 存储 autodata
- func storeSuburlData(data: String) {
- defaults.set(data, forKey: subURLDataKey)
- defaults.synchronize()
- }
-
- // 读取 autodata
- func getAutoData() -> String {
- return defaults.string(forKey: autodataKey) ?? ""
- }
-
- // 清除所有数据(例如在登出时)
- func clearUserData() {
- defaults.removeObject(forKey: loginStatusKey)
- defaults.removeObject(forKey: userEmailKey)
- defaults.removeObject(forKey: avatarurlKey)
- defaults.removeObject(forKey: autodataKey)
- defaults.removeObject(forKey: subURLDataKey)
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Service/UIProfileUpdateTask.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Service/UIProfileUpdateTask.swift
deleted file mode 100644
index 4fde2a7..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Service/UIProfileUpdateTask.swift
+++ /dev/null
@@ -1,79 +0,0 @@
-import BackgroundTasks
-import Foundation
-import Library
-#if canImport(UIKit)
- import UIKit
-#endif
-
-#if os(iOS) || os(tvOS)
- public class UIProfileUpdateTask: BGAppRefreshTask {
- private static let taskSchedulerPermittedIdentifier = "\(FilePath.packageName).update_profiles"
-
- private static var registered = false
- public static func configure() throws {
- if !registered {
- let success = BGTaskScheduler.shared.register(forTaskWithIdentifier: taskSchedulerPermittedIdentifier, using: nil) { task in
- NSLog("profile update task started")
- Task {
- await UIProfileUpdateTask.getAndUpdateProfiles(task)
- }
- }
- if !success {
- throw NSError(domain: "register task failed", code: 0)
- }
- registered = true
- }
- Task {
- BGTaskScheduler.shared.cancelAllTaskRequests()
- let profiles = try await ProfileManager.listAutoUpdateEnabled()
- if profiles.isEmpty {
- return
- }
- try scheduleUpdate(ProfileUpdateTask.calculateEarliestBeginDate(profiles))
- }
- Task {
- if await UIApplication.shared.backgroundRefreshStatus != .available {
- await updateOnce()
- }
- }
- }
-
- private nonisolated static func updateOnce() async {
- NSLog("update profiles at start since background refresh unavailable")
- let profiles: [Profile]
- do {
- profiles = try await ProfileManager.listAutoUpdateEnabled()
- } catch {
- return
- }
- if profiles.isEmpty {
- return
- }
- _ = await ProfileUpdateTask.updateProfiles(profiles)
- }
-
- private nonisolated static func getAndUpdateProfiles(_ task: BGTask) async {
- let profiles: [Profile]
- do {
- profiles = try await ProfileManager.listAutoUpdateEnabled()
- } catch {
- return
- }
- if profiles.isEmpty {
- return
- }
- let success = await ProfileUpdateTask.updateProfiles(profiles)
- try? scheduleUpdate(ProfileUpdateTask.calculateEarliestBeginDate(profiles))
- task.setTaskCompleted(success: success)
- task.expirationHandler = {
- try? scheduleUpdate(nil)
- }
- }
-
- private static func scheduleUpdate(_ earliestBeginDate: Date?) throws {
- let request = BGAppRefreshTaskRequest(identifier: taskSchedulerPermittedIdentifier)
- request.earliestBeginDate = earliestBeginDate
- try BGTaskScheduler.shared.submit(request)
- }
- }
-#endif
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Alert.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Alert.swift
deleted file mode 100644
index 7de1feb..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Alert.swift
+++ /dev/null
@@ -1,74 +0,0 @@
-import Foundation
-import SwiftUI
-
-public extension Alert {
- init(_ error: Error, _ dismissAction: (() -> Void)? = nil) {
- self.init(
- errorMessage: error.localizedDescription,
- dismissAction
- )
- }
-
- init(errorMessage: String, _ dismissAction: (() -> Void)? = nil) {
- self.init(
- title: Text("错误提示"),
- message: Text(errorMessage),
- dismissButton: .default(Text("确定")) {
- dismissAction?()
- }
- )
- }
-
- init(title: String = "提示", okMessage: String, _ dismissAction: (() -> Void)? = nil) {
- self.init(
- title: Text(title),
- message: Text(okMessage),
- dismissButton: .default(Text("确定")) {
- dismissAction?()
- }
- )
- }
-
- init(OKORNOtitle: String = "提示", YesOrNOMessage: String, _ primaryAction: (() -> Void)? = nil) {
- self.init(
- title: Text(OKORNOtitle),
- message: Text(YesOrNOMessage),
- primaryButton: .default(Text("确定"), action: {
- primaryAction?()
- }),
- secondaryButton: .cancel(Text("取消"), action: {
- })
- )
- }
-
-}
-
-public extension View {
- func alertBinding(_ binding: Binding) -> some View {
-
- alert(isPresented: Binding(get: {
- binding.wrappedValue != nil
- }, set: { newValue, _ in
- if !newValue {
- binding.wrappedValue = nil
- }
- })) {
- binding.wrappedValue!
-
- }
-
-
- }
-
- func alertBinding(_ binding: Binding, _ isLoading: Binding) -> some View {
- alert(isPresented: Binding(get: {
- binding.wrappedValue != nil
- }, set: { newValue, _ in
- if !newValue, !isLoading.wrappedValue {
- binding.wrappedValue = nil
- }
- })) {
- binding.wrappedValue!
- }
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/BackButton.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/BackButton.swift
deleted file mode 100644
index afcbdeb..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/BackButton.swift
+++ /dev/null
@@ -1,14 +0,0 @@
-import Foundation
-import SwiftUI
-
-public struct BackButton: View {
- @Environment(\.dismiss) private var dismiss
-
- public var body: some View {
- Button {
- dismiss()
- } label: {
- Image(systemName: "chevron.backward")
- }
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Binding+Setter.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Binding+Setter.swift
deleted file mode 100644
index 395f4fe..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Binding+Setter.swift
+++ /dev/null
@@ -1,12 +0,0 @@
-import Foundation
-import SwiftUI
-
-public extension Binding {
- func withSetter(_ setter: @escaping (Value) -> Void) -> Binding {
- Binding {
- wrappedValue
- } set: { [setter] newValue, _ in
- setter(newValue)
- }
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Binding+Unwrap.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Binding+Unwrap.swift
deleted file mode 100644
index 25bf0fd..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/Binding+Unwrap.swift
+++ /dev/null
@@ -1,29 +0,0 @@
-import SwiftUI
-
-public extension Binding {
- func unwrapped(_ defaultValue: T) -> Binding where Value == T? {
- Binding(get: {
- wrappedValue ?? defaultValue
- }, set: { newValue in
- wrappedValue = newValue
- })
- }
-}
-
-public extension Binding where Value == Int32 {
- func stringBinding(defaultValue: Int32) -> Binding {
- Binding {
- var intValue = wrappedValue
- if intValue == 0 {
- intValue = defaultValue
- }
- return String(intValue)
- } set: { newValue in
- var newIntValue = Int32(newValue) ?? defaultValue
- if newIntValue == 0 {
- newIntValue = defaultValue
- }
- wrappedValue = newIntValue
- }
- }
-}
diff --git a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/DeleteButton.swift b/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/DeleteButton.swift
deleted file mode 100644
index 746f8c1..0000000
--- a/iOS-SwiftUI-Code/ApplicationLibrary/Views/Abstract/DeleteButton.swift
+++ /dev/null
@@ -1,46 +0,0 @@
-import Foundation
-import SwiftUI
-
-public struct DeleteButton