mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: backup restore
This commit is contained in:
@@ -85,7 +85,7 @@ After you read the above, you can:
|
||||
|
||||
## 💡 My other apps
|
||||
- [GPT Box](https://github.com/lollipopkit/flutter_gpt_box) - A third-party GPT Client for OpenAI API on all platforms.
|
||||
- [2fa Box](https://github.com/lollipopkit/flutter_2fa) - Open source 2FA app for Android, iOS and the web.
|
||||
- [2FA Box](https://github.com/lollipopkit/flutter_2fa) - Open source 2FA app for Android, iOS and the web.
|
||||
- [More](https://github.com/lollipopkit) - Tools & etc.
|
||||
|
||||
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
|
||||
|
||||
## 💡 我的其它 Apps
|
||||
- [GPT Box](https://github.com/lollipopkit/flutter_gpt_box) - 一个支持 OpenAI API 的 第三方全平台客户端。
|
||||
- [2fa Box](https://github.com/lollipopkit/flutter_2fa) - 开源的 2FA 应用,支持 Android、iOS 和 Web。
|
||||
- [GPT Box](https://github.com/lollipopkit/flutter_gpt_box) - 支持 OpenAI API 的 第三方全平台客户端。
|
||||
- [2FA Box](https://github.com/lollipopkit/flutter_2fa) - 开源的 2FA 应用。
|
||||
- [更多](https://github.com/lollipopkit) - 工具 & etc.
|
||||
|
||||
|
||||
|
||||
@@ -586,7 +586,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||
@@ -596,7 +596,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
@@ -720,7 +720,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||
@@ -730,7 +730,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
@@ -748,7 +748,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||
@@ -758,7 +758,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
@@ -779,7 +779,7 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -792,7 +792,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
||||
@@ -818,7 +818,7 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -831,7 +831,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -854,7 +854,7 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -867,7 +867,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -890,7 +890,7 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -902,7 +902,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
||||
@@ -931,7 +931,7 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -943,7 +943,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
||||
PRODUCT_NAME = ServerBox;
|
||||
@@ -969,7 +969,7 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 717;
|
||||
CURRENT_PROJECT_VERSION = 719;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -981,7 +981,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.717;
|
||||
MARKETING_VERSION = 1.0.719;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
||||
PRODUCT_NAME = ServerBox;
|
||||
|
||||
@@ -78,12 +78,30 @@ extension BoxX on Box {
|
||||
}
|
||||
|
||||
extension StoreX on PersistentStore {
|
||||
_StoreProperty<T> property<T>(String key, T defaultValue) {
|
||||
return _StoreProperty<T>(box, key, defaultValue);
|
||||
_StoreProperty<T> property<T>(
|
||||
String key,
|
||||
T defaultValue, {
|
||||
bool updateLastModified = true,
|
||||
}) {
|
||||
return _StoreProperty<T>(
|
||||
box,
|
||||
key,
|
||||
defaultValue,
|
||||
updateLastModified: updateLastModified,
|
||||
);
|
||||
}
|
||||
|
||||
_StoreListProperty<T> listProperty<T>(String key, List<T> defaultValue) {
|
||||
return _StoreListProperty<T>(box, key, defaultValue);
|
||||
_StoreListProperty<T> listProperty<T>(
|
||||
String key,
|
||||
List<T> defaultValue, {
|
||||
bool updateLastModified = true,
|
||||
}) {
|
||||
return _StoreListProperty<T>(
|
||||
box,
|
||||
key,
|
||||
defaultValue,
|
||||
updateLastModified: updateLastModified,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,11 +113,17 @@ abstract class StorePropertyBase<T> {
|
||||
}
|
||||
|
||||
class _StoreProperty<T> implements StorePropertyBase<T> {
|
||||
_StoreProperty(this._box, this._key, this.defaultValue);
|
||||
_StoreProperty(
|
||||
this._box,
|
||||
this._key,
|
||||
this.defaultValue, {
|
||||
this.updateLastModified = true,
|
||||
});
|
||||
|
||||
final Box _box;
|
||||
final String _key;
|
||||
T defaultValue;
|
||||
bool updateLastModified;
|
||||
|
||||
@override
|
||||
ValueListenable<T> listenable() {
|
||||
@@ -117,7 +141,7 @@ class _StoreProperty<T> implements StorePropertyBase<T> {
|
||||
|
||||
@override
|
||||
Future<void> put(T value) {
|
||||
_box.updateLastModified();
|
||||
if (updateLastModified) _box.updateLastModified();
|
||||
return _box.put(_key, value);
|
||||
}
|
||||
|
||||
@@ -128,11 +152,17 @@ class _StoreProperty<T> implements StorePropertyBase<T> {
|
||||
}
|
||||
|
||||
class _StoreListProperty<T> implements StorePropertyBase<List<T>> {
|
||||
_StoreListProperty(this._box, this._key, this.defaultValue);
|
||||
_StoreListProperty(
|
||||
this._box,
|
||||
this._key,
|
||||
this.defaultValue, {
|
||||
this.updateLastModified = true,
|
||||
});
|
||||
|
||||
final Box _box;
|
||||
final String _key;
|
||||
List<T> defaultValue;
|
||||
bool updateLastModified;
|
||||
|
||||
@override
|
||||
ValueListenable<List<T>> listenable() {
|
||||
@@ -152,6 +182,7 @@ class _StoreListProperty<T> implements StorePropertyBase<List<T>> {
|
||||
|
||||
@override
|
||||
Future<void> put(List<T> value) {
|
||||
if (updateLastModified) _box.updateLastModified();
|
||||
return _box.put(_key, value);
|
||||
}
|
||||
|
||||
|
||||
@@ -205,12 +205,7 @@ abstract final class ICloud {
|
||||
}
|
||||
final dlFile = await File(await Paths.bak).readAsString();
|
||||
final dlBak = await Computer.shared.start(Backup.fromJsonString, dlFile);
|
||||
final restore = await dlBak.restore();
|
||||
switch (restore) {
|
||||
case true:
|
||||
_logger.info('Restore from ${dlBak.lastModTime} success');
|
||||
break;
|
||||
case false:
|
||||
await dlBak.restore();
|
||||
await Backup.backup();
|
||||
final uploadResult = await upload(relativePath: Paths.bakName);
|
||||
if (uploadResult != null) {
|
||||
@@ -218,10 +213,5 @@ abstract final class ICloud {
|
||||
} else {
|
||||
_logger.info('Upload backup success');
|
||||
}
|
||||
break;
|
||||
case null:
|
||||
_logger.info('Skip sync');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,18 +117,8 @@ abstract final class Webdav {
|
||||
await backup();
|
||||
return;
|
||||
}
|
||||
final restore = await dlFile.restore();
|
||||
switch (restore) {
|
||||
case true:
|
||||
_logger.info('Restore from ${dlFile.lastModTime} success');
|
||||
break;
|
||||
case false:
|
||||
await dlFile.restore();
|
||||
await backup();
|
||||
break;
|
||||
case null:
|
||||
_logger.info('Skip sync');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a local backup and upload it to WebDAV
|
||||
|
||||
@@ -86,34 +86,116 @@ class Backup {
|
||||
/// - Return null if same time
|
||||
/// - Return false if local is newer
|
||||
/// - Return true if restore success
|
||||
Future<bool?> restore({bool force = false}) async {
|
||||
Future<void> restore({bool force = false}) async {
|
||||
final curTime = Stores.lastModTime ?? 0;
|
||||
final bakTime = lastModTime ?? 0;
|
||||
if (curTime == bakTime && !force) {
|
||||
return null;
|
||||
final shouldRestore = force || curTime < bakTime;
|
||||
|
||||
// Settings
|
||||
final nowSettingsKeys = Stores.setting.box.keys.toSet();
|
||||
final bakSettingsKeys = settings.keys.toSet();
|
||||
final newSettingsKeys = bakSettingsKeys.difference(nowSettingsKeys);
|
||||
final delSettingsKeys = nowSettingsKeys.difference(bakSettingsKeys);
|
||||
final updateSettingsKeys = nowSettingsKeys.intersection(bakSettingsKeys);
|
||||
for (final k in newSettingsKeys) {
|
||||
Stores.setting.box.put(k, settings[k]);
|
||||
}
|
||||
if (curTime > bakTime && !force) {
|
||||
return false;
|
||||
if (shouldRestore) {
|
||||
for (final k in delSettingsKeys) {
|
||||
Stores.setting.box.delete(k);
|
||||
}
|
||||
for (final s in settings.keys) {
|
||||
Stores.setting.box.put(s, settings[s]);
|
||||
for (final k in updateSettingsKeys) {
|
||||
Stores.setting.box.put(k, settings[k]);
|
||||
}
|
||||
for (final s in snippets) {
|
||||
}
|
||||
|
||||
// Snippets
|
||||
final nowSnippets = Stores.snippet.fetch().toSet();
|
||||
final bakSnippets = snippets.toSet();
|
||||
final newSnippets = bakSnippets.difference(nowSnippets);
|
||||
final delSnippets = nowSnippets.difference(bakSnippets);
|
||||
final updateSnippets = nowSnippets.intersection(bakSnippets);
|
||||
for (final s in newSnippets) {
|
||||
Stores.snippet.put(s);
|
||||
}
|
||||
for (final s in spis) {
|
||||
if (shouldRestore) {
|
||||
for (final s in delSnippets) {
|
||||
Stores.snippet.delete(s);
|
||||
}
|
||||
for (final s in updateSnippets) {
|
||||
Stores.snippet.put(s);
|
||||
}
|
||||
}
|
||||
|
||||
// ServerPrivateInfo
|
||||
final nowSpis = Stores.server.fetch().toSet();
|
||||
final bakSpis = spis.toSet();
|
||||
final newSpis = bakSpis.difference(nowSpis);
|
||||
final delSpis = nowSpis.difference(bakSpis);
|
||||
final updateSpis = nowSpis.intersection(bakSpis);
|
||||
for (final s in newSpis) {
|
||||
Stores.server.put(s);
|
||||
}
|
||||
for (final s in keys) {
|
||||
if (shouldRestore) {
|
||||
for (final s in delSpis) {
|
||||
Stores.server.delete(s.id);
|
||||
}
|
||||
for (final s in updateSpis) {
|
||||
Stores.server.put(s);
|
||||
}
|
||||
}
|
||||
|
||||
// PrivateKeyInfo
|
||||
final nowKeys = Stores.key.fetch().toSet();
|
||||
final bakKeys = keys.toSet();
|
||||
final newKeys = bakKeys.difference(nowKeys);
|
||||
final delKeys = nowKeys.difference(bakKeys);
|
||||
final updateKeys = nowKeys.intersection(bakKeys);
|
||||
for (final s in newKeys) {
|
||||
Stores.key.put(s);
|
||||
}
|
||||
for (final s in history.keys) {
|
||||
if (shouldRestore) {
|
||||
for (final s in delKeys) {
|
||||
Stores.key.delete(s);
|
||||
}
|
||||
for (final s in updateKeys) {
|
||||
Stores.key.put(s);
|
||||
}
|
||||
}
|
||||
|
||||
// History
|
||||
final nowHistory = Stores.history.box.keys.toSet();
|
||||
final bakHistory = history.keys.toSet();
|
||||
final newHistory = bakHistory.difference(nowHistory);
|
||||
final delHistory = nowHistory.difference(bakHistory);
|
||||
final updateHistory = nowHistory.intersection(bakHistory);
|
||||
for (final s in newHistory) {
|
||||
Stores.history.box.put(s, history[s]);
|
||||
}
|
||||
for (final k in container.keys) {
|
||||
final val = container[k];
|
||||
if (val != null && val is String && val.isNotEmpty) {
|
||||
Stores.docker.put(k, val);
|
||||
if (shouldRestore) {
|
||||
for (final s in delHistory) {
|
||||
Stores.history.box.delete(s);
|
||||
}
|
||||
for (final s in updateHistory) {
|
||||
Stores.history.box.put(s, history[s]);
|
||||
}
|
||||
}
|
||||
|
||||
// Container
|
||||
final nowContainer = Stores.docker.box.keys.toSet();
|
||||
final bakContainer = container.keys.toSet();
|
||||
final newContainer = bakContainer.difference(nowContainer);
|
||||
final delContainer = nowContainer.difference(bakContainer);
|
||||
final updateContainer = nowContainer.intersection(bakContainer);
|
||||
for (final s in newContainer) {
|
||||
Stores.docker.put(s, container[s]);
|
||||
}
|
||||
if (shouldRestore) {
|
||||
for (final s in delContainer) {
|
||||
Stores.docker.box.delete(s);
|
||||
}
|
||||
for (final s in updateContainer) {
|
||||
Stores.docker.put(s, container[s]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,8 +204,6 @@ class Backup {
|
||||
|
||||
Pros.reload();
|
||||
RebuildNodes.app.rebuild();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Backup.fromJsonString(String raw)
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
class BuildData {
|
||||
static const String name = "ServerBox";
|
||||
static const int build = 717;
|
||||
static const int build = 719;
|
||||
static const String engine = "3.16.8";
|
||||
static const String buildAt = "2024-01-22 16:31:50";
|
||||
static const int modifications = 6;
|
||||
static const String buildAt = "2024-01-23 22:32:15";
|
||||
static const int modifications = 3;
|
||||
static const int script = 36;
|
||||
}
|
||||
|
||||
@@ -201,10 +201,10 @@ class SettingStore extends PersistentStore {
|
||||
late final showSuspendTip = property('showSuspendTip', true);
|
||||
|
||||
/// Webdav sync
|
||||
late final webdavSync = property('webdavSync', false);
|
||||
late final webdavUrl = property('webdavUrl', '');
|
||||
late final webdavUser = property('webdavUser', '');
|
||||
late final webdavPwd = property('webdavPwd', '');
|
||||
late final webdavSync = property('webdavSync', false, updateLastModified: false);
|
||||
late final webdavUrl = property('webdavUrl', '', updateLastModified: false);
|
||||
late final webdavUser = property('webdavUser', '', updateLastModified: false);
|
||||
late final webdavPwd = property('webdavPwd', '', updateLastModified: false);
|
||||
|
||||
/// Whether collapse UI items by default
|
||||
late final collapseUIDefault = property('collapseUIDefault', true);
|
||||
|
||||
@@ -437,11 +437,9 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
@@ -453,7 +451,6 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||
PRODUCT_NAME = "Server Box";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = serverbox;
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Profile;
|
||||
@@ -573,11 +570,9 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
|
||||
DEVELOPMENT_TEAM = BA88US33G6;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
@@ -589,7 +584,6 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||
PRODUCT_NAME = "Server Box";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = serverbox;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user