diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index e3909a15d..d4dc0c8c9 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -387,7 +387,8 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.cakewallet.cakewallet;
+ MARKETING_VERSION = 3.1.28;
+ PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -522,7 +523,8 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.cakewallet.cakewallet;
+ MARKETING_VERSION = 3.1.28;
+ PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -552,7 +554,8 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.cakewallet.cakewallet;
+ MARKETING_VERSION = 3.1.28;
+ PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 31d748e9a..40f292e53 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- $(FLUTTER_BUILD_NAME)
+ $(MARKETING_VERSION)
CFBundleSignature
????
CFBundleVersion
diff --git a/lib/src/domain/common/fs_migration.dart b/lib/src/domain/common/fs_migration.dart
new file mode 100644
index 000000000..db17cd134
--- /dev/null
+++ b/lib/src/domain/common/fs_migration.dart
@@ -0,0 +1,132 @@
+import 'dart:io';
+import 'dart:convert';
+import 'package:cake_wallet/src/domain/common/contact.dart';
+import 'package:cake_wallet/src/domain/common/crypto_currency.dart';
+import 'package:cake_wallet/src/domain/common/wallet_info.dart';
+import 'package:cake_wallet/src/domain/common/wallet_type.dart';
+import 'package:cake_wallet/src/domain/exchange/trade.dart';
+import 'package:flutter/foundation.dart';
+import 'package:hive/hive.dart';
+import 'package:path_provider/path_provider.dart';
+
+const reservedNames = ["flutter_assets", "wallets", "db"];
+
+Future migrate_android_v1() async {
+ final appDocDir = await getApplicationDocumentsDirectory();
+
+ await migrate_hives(appDocDir: appDocDir);
+ await migrate_wallets(appDocDir: appDocDir);
+}
+
+Future migrate_ios_v1() async {
+ final appDocDir = await getApplicationDocumentsDirectory();
+}
+
+Future migrate_hives({Directory appDocDir}) async {
+ final dbDir = Directory('${appDocDir.path}/db');
+ final files = List();
+
+ appDocDir.listSync().forEach((FileSystemEntity item) {
+ final ext = item.path.split('.').last;
+
+ if (item is File && (ext == "hive" || ext == "lock")) {
+ files.add(item);
+ }
+ });
+
+ if (!dbDir.existsSync()) {
+ dbDir.createSync();
+ }
+
+ files.forEach((File hive) {
+ final name = hive.path.split('/').last;
+ hive.copySync('${dbDir.path}/$name');
+ hive.deleteSync();
+ });
+}
+
+Future migrate_wallets({Directory appDocDir}) async {
+ final walletsDir = Directory('${appDocDir.path}/wallets');
+ final moneroWalletsDir = Directory('${walletsDir.path}/monero');
+ final dirs = List();
+
+ appDocDir.listSync().forEach((FileSystemEntity item) {
+ final name = item.path.split('/').last;
+
+ if (item is Directory && !reservedNames.contains(name)) {
+ dirs.add(item);
+ }
+ });
+
+ if (!moneroWalletsDir.existsSync()) {
+ await moneroWalletsDir.create(recursive: true);
+ }
+
+ dirs.forEach((Directory dir) {
+ final name = dir.path.split('/').last;
+ final newDir = Directory('${moneroWalletsDir.path}/$name');
+ newDir.createSync();
+
+ dir.listSync().forEach((file) {
+ if (file is File) {
+ final fileName = file.path.split('/').last;
+ file.copySync('${newDir.path}/$fileName');
+ file.deleteSync();
+ }
+ });
+
+ dir.deleteSync();
+ });
+}
+
+Future migrate_ios_wallet_info(
+ {@required Directory appDocDir,
+ @required Box walletsInfo}) async {
+ final walletsDir = Directory('${appDocDir.path}/wallets');
+ final moneroWalletsDir = Directory('${walletsDir.path}/monero');
+
+ moneroWalletsDir.listSync().forEach((item) async {
+ try {
+ if (item is Directory) {
+ final name = item.path.split('/').last;
+ final configFile = File('${item.path}/$name.json');
+ final config =
+ json.decode(configFile.readAsStringSync()) as Map;
+ final isRecovery = config["isRecovery"] as bool ?? false;
+ final id =
+ walletTypeToString(WalletType.monero).toLowerCase() + '_' + name;
+ final walletInfo =
+ WalletInfo(id: id, name: name, isRecovery: isRecovery);
+
+ await walletsInfo.add(walletInfo);
+ }
+ } catch (e) {
+ print(e.toString());
+ }
+ });
+}
+
+Future migrate_ios_trades_list(
+ {@required Directory appDocDir, @required Box trades}) async {
+ final adderessBookJSON = File('${appDocDir.path}/trades_list.json');
+ final List trades =
+ json.decode(adderessBookJSON.readAsStringSync()) as List;
+}
+
+Future migrate_ios_address_book(
+ {@required Directory appDocDir, @required Box contacts}) async {
+ final adderessBookJSON = File('${appDocDir.path}/address_book.json');
+ final List addresses =
+ json.decode(adderessBookJSON.readAsStringSync()) as List;
+
+ addresses.forEach((dynamic item) async {
+ final _item = item as Map;
+ final type = _item["type"] as String;
+ final address = _item["address"] as String;
+ final name = _item["name"] as String;
+ final contact = Contact(
+ address: address, name: name, type: CryptoCurrency.fromString(type));
+
+ await contacts.add(contact);
+ });
+}