changeset 111:887ea63452b5

Merge pull request #12 from DennisTechnologies/development Submit beta 1.3 Build 6 committer: GitHub <noreply@github.com>
author Dennis C. M. <dennis@denniscm.com>
date Thu, 05 Aug 2021 09:45:48 +0100
parents dd4d99fa8966 (current diff) 42e9c7812f5e (diff)
children 71c781a30068 50855a25db8a
files Simoleon.xcodeproj/xcshareddata/xcschemes/Screenshots.xcscheme Simoleon.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme SimoleonScreenshots/Info.plist fastlane/metadata/it/description.txt fastlane/metadata/it/keywords.txt fastlane/metadata/it/marketing_url.txt fastlane/metadata/it/name.txt fastlane/metadata/it/privacy_url.txt fastlane/metadata/it/release_notes.txt fastlane/metadata/it/support_url.txt fastlane/metadata/ru/description.txt fastlane/metadata/ru/keywords.txt fastlane/metadata/ru/marketing_url.txt fastlane/metadata/ru/name.txt fastlane/metadata/ru/privacy_url.txt fastlane/metadata/ru/release_notes.txt fastlane/metadata/ru/support_url.txt
diffstat 70 files changed, 426 insertions(+), 358 deletions(-) [+]
line wrap: on
line diff
--- a/.github/workflows/ios.yml	Tue Aug 03 18:54:55 2021 +0100
+++ b/.github/workflows/ios.yml	Thu Aug 05 09:45:48 2021 +0100
@@ -2,9 +2,9 @@
 
 on:
   push:
-    branches: [ main ]
+    branches: [ development ]
   pull_request:
-    branches: [ main ]
+    branches: [ main, beta ]
 
 jobs:
   build:
@@ -14,15 +14,9 @@
     steps:
       - name: Checkout
         uses: actions/checkout@v2
-      - name: Set Default Scheme
-        run: |
-          scheme_list=$(xcodebuild -list -json | tr -d "\n")
-          default=$(echo $scheme_list | ruby -e "require 'json'; puts JSON.parse(STDIN.gets)['project']['targets'][0]")
-          echo $default | cat >default
-          echo Using default scheme: $default
       - name: Build
         env:
-          scheme: ${{ 'default' }}
+          scheme: ${{ 'Simoleon' }}
           platform: ${{ 'iOS Simulator' }}
         run: |
           # xcrun xctrace returns via stderr, not the expected stdout (see https://developer.apple.com/forums/thread/663959)
@@ -33,7 +27,7 @@
           xcodebuild build-for-testing -scheme "$scheme" -"$filetype_parameter" "$file_to_build" -destination "platform=$platform,name=$device"
       - name: Test
         env:
-          scheme: ${{ 'default' }}
+          scheme: ${{ 'Simoleon' }}
           platform: ${{ 'iOS Simulator' }}
         run: |
           # xcrun xctrace returns via stderr, not the expected stdout (see https://developer.apple.com/forums/thread/663959)
--- a/.gitignore	Tue Aug 03 18:54:55 2021 +0100
+++ b/.gitignore	Thu Aug 05 09:45:48 2021 +0100
@@ -30,4 +30,11 @@
 Temporary Items
 .apdisk
 
+# Fastlane builds
+Simoleon.ipa
+Simoleon.app.dSYM.zip
+fastlane/Preview.html
+fastlane/screenshots
+report.xml
+
 # End of https://www.toptal.com/developers/gitignore/api/macos
--- a/Configuration.storekit	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-{
-  "identifier" : "DAA348ED",
-  "nonRenewingSubscriptions" : [
-
-  ],
-  "products" : [
-
-  ],
-  "settings" : {
-    "_timeRate" : 4
-  },
-  "subscriptionGroups" : [
-    {
-      "id" : "22DC70A2",
-      "localizations" : [
-
-      ],
-      "name" : "Simoleon Subscription",
-      "subscriptions" : [
-        {
-          "adHocOffers" : [
-
-          ],
-          "displayPrice" : "0.99",
-          "familyShareable" : true,
-          "groupNumber" : 1,
-          "internalID" : "5C46FFC9",
-          "introductoryOffer" : null,
-          "localizations" : [
-            {
-              "description" : "",
-              "displayName" : "",
-              "locale" : "en_US"
-            }
-          ],
-          "productID" : "simoleon_all_monthly",
-          "recurringSubscriptionPeriod" : "P1M",
-          "referenceName" : "All Access",
-          "subscriptionGroupID" : "22DC70A2",
-          "type" : "RecurringSubscription"
-        }
-      ]
-    }
-  ],
-  "version" : {
-    "major" : 1,
-    "minor" : 1
-  }
-}
--- a/Simoleon.xcodeproj/project.pbxproj	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon.xcodeproj/project.pbxproj	Thu Aug 05 09:45:48 2021 +0100
@@ -15,20 +15,15 @@
 		95561E3F26AF25EF00CCB543 /* SubscriptionFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95561E3E26AF25EF00CCB543 /* SubscriptionFeature.swift */; };
 		95562D4D26A8962A0047E778 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95562D4C26A8962A0047E778 /* StoreKit.framework */; };
 		95562D5226A8AEF60047E778 /* Purchases in Frameworks */ = {isa = PBXBuildFile; productRef = 95562D5126A8AEF60047E778 /* Purchases */; };
-		956088B626B9307600A4FD6C /* SnapshotHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956088B526B9307600A4FD6C /* SnapshotHelper.swift */; };
 		957065E226A5FE0400523E68 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 957065E126A5FE0400523E68 /* Settings.swift */; };
 		958526C326B41D60001FC826 /* CurrencyPairModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 958526C226B41D60001FC826 /* CurrencyPairModel.swift */; };
 		9585BB1226A6B71B00E3193E /* ReadConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9585BB1126A6B71B00E3193E /* ReadConfig.swift */; };
 		9585BB1426A6B7F400E3193E /* NetworkRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9585BB1326A6B7F400E3193E /* NetworkRequest.swift */; };
 		9585BB1A26A6E8FD00E3193E /* SimpleSuccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9585BB1926A6E8FD00E3193E /* SimpleSuccess.swift */; };
 		9587598D26B2A68B004086F0 /* CurrencyMetadata.json in Resources */ = {isa = PBXBuildFile; fileRef = 9587598F26B2A68B004086F0 /* CurrencyMetadata.json */; };
-		9587599E26B2ACA6004086F0 /* Configuration.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 9587599D26B2ACA6004086F0 /* Configuration.storekit */; };
-		9587599F26B2ACA6004086F0 /* Configuration.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 9587599D26B2ACA6004086F0 /* Configuration.storekit */; };
-		958759A026B2ACA6004086F0 /* Configuration.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 9587599D26B2ACA6004086F0 /* Configuration.storekit */; };
-		958759A226B2AE85004086F0 /* StoreKitTestCertificate.cer in Resources */ = {isa = PBXBuildFile; fileRef = 958759A126B2AE85004086F0 /* StoreKitTestCertificate.cer */; };
-		958759A326B2AE85004086F0 /* StoreKitTestCertificate.cer in Resources */ = {isa = PBXBuildFile; fileRef = 958759A126B2AE85004086F0 /* StoreKitTestCertificate.cer */; };
-		958759A426B2AE85004086F0 /* StoreKitTestCertificate.cer in Resources */ = {isa = PBXBuildFile; fileRef = 958759A126B2AE85004086F0 /* StoreKitTestCertificate.cer */; };
 		95909CB326B07BFC00D051AB /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95909CB226B07BFC00D051AB /* SearchBar.swift */; };
+		959F6DEB26BBD53500101E53 /* SimoleonScreenshots.swift in Sources */ = {isa = PBXBuildFile; fileRef = 959F6DEA26BBD53500101E53 /* SimoleonScreenshots.swift */; };
+		959F6DF326BBD54400101E53 /* SnapshotHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956088B526B9307600A4FD6C /* SnapshotHelper.swift */; };
 		95AEBC9526A03ECB00613729 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AEBC9426A03ECB00613729 /* ContentView.swift */; };
 		95AEBC9B26A04A4200613729 /* CurrencyMetadataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AEBC9A26A04A4200613729 /* CurrencyMetadataModel.swift */; };
 		95AEBC9D26A04D4600613729 /* CurrencyRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AEBC9C26A04D4600613729 /* CurrencyRow.swift */; };
@@ -64,6 +59,13 @@
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+		959F6DED26BBD53500101E53 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 95C5B21C2697752600941585 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 95C5B2232697752600941585;
+			remoteInfo = Simoleon;
+		};
 		95C5B23B2697752700941585 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 95C5B21C2697752600941585 /* Project object */;
@@ -132,9 +134,10 @@
 		9587599A26B2A6A8004086F0 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "pt-PT"; path = "pt-PT.lproj/CurrencyMetadata.json"; sourceTree = "<group>"; };
 		9587599B26B2A6A8004086F0 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = ru; path = ru.lproj/CurrencyMetadata.json; sourceTree = "<group>"; };
 		9587599C26B2A6AA004086F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = es; path = es.lproj/CurrencyMetadata.json; sourceTree = "<group>"; };
-		9587599D26B2ACA6004086F0 /* Configuration.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Configuration.storekit; sourceTree = SOURCE_ROOT; };
-		958759A126B2AE85004086F0 /* StoreKitTestCertificate.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = StoreKitTestCertificate.cer; sourceTree = "<group>"; };
 		95909CB226B07BFC00D051AB /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = "<group>"; };
+		959F6DE826BBD53500101E53 /* SimoleonScreenshots.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimoleonScreenshots.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		959F6DEA26BBD53500101E53 /* SimoleonScreenshots.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimoleonScreenshots.swift; sourceTree = "<group>"; };
+		959F6DEC26BBD53500101E53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		95A70BE926B0550000CC0273 /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS7.4.sdk/System/Library/Frameworks/CloudKit.framework; sourceTree = DEVELOPER_DIR; };
 		95AEBC9426A03ECB00613729 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
 		95AEBC9A26A04A4200613729 /* CurrencyMetadataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyMetadataModel.swift; sourceTree = "<group>"; };
@@ -180,6 +183,13 @@
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+		959F6DE526BBD53500101E53 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		95C5B2212697752600941585 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -241,6 +251,15 @@
 			path = Resources;
 			sourceTree = "<group>";
 		};
+		959F6DE926BBD53500101E53 /* SimoleonScreenshots */ = {
+			isa = PBXGroup;
+			children = (
+				959F6DEA26BBD53500101E53 /* SimoleonScreenshots.swift */,
+				959F6DEC26BBD53500101E53 /* Info.plist */,
+			);
+			path = SimoleonScreenshots;
+			sourceTree = "<group>";
+		};
 		95B5F52526AADE4B00BDCE89 /* Localization */ = {
 			isa = PBXGroup;
 			children = (
@@ -253,7 +272,6 @@
 			isa = PBXGroup;
 			children = (
 				95B5F52726AADE4B00BDCE89 /* Localized Contents */,
-				95B5F52926AADE4B00BDCE89 /* Notes */,
 				95B5F52A26AADE4B00BDCE89 /* contents.json */,
 				95B5F52B26AADE4B00BDCE89 /* Source Contents */,
 			);
@@ -268,13 +286,6 @@
 			path = "Localized Contents";
 			sourceTree = "<group>";
 		};
-		95B5F52926AADE4B00BDCE89 /* Notes */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = Notes;
-			sourceTree = "<group>";
-		};
 		95B5F52B26AADE4B00BDCE89 /* Source Contents */ = {
 			isa = PBXGroup;
 			children = (
@@ -295,12 +306,11 @@
 		95C5B21B2697752600941585 = {
 			isa = PBXGroup;
 			children = (
-				9587599D26B2ACA6004086F0 /* Configuration.storekit */,
-				958759A126B2AE85004086F0 /* StoreKitTestCertificate.cer */,
 				956088B526B9307600A4FD6C /* SnapshotHelper.swift */,
 				95C5B2262697752600941585 /* Simoleon */,
 				95C5B23D2697752700941585 /* SimoleonTests */,
 				95C5B2482697752700941585 /* SimoleonUITests */,
+				959F6DE926BBD53500101E53 /* SimoleonScreenshots */,
 				95C5B2252697752600941585 /* Products */,
 				95E76438269E0037008E9F31 /* Frameworks */,
 			);
@@ -312,6 +322,7 @@
 				95C5B2242697752600941585 /* Simoleon.app */,
 				95C5B23A2697752700941585 /* SimoleonTests.xctest */,
 				95C5B2452697752700941585 /* SimoleonUITests.xctest */,
+				959F6DE826BBD53500101E53 /* SimoleonScreenshots.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -402,6 +413,24 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
+		959F6DE726BBD53500101E53 /* SimoleonScreenshots */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 959F6DF126BBD53500101E53 /* Build configuration list for PBXNativeTarget "SimoleonScreenshots" */;
+			buildPhases = (
+				959F6DE426BBD53500101E53 /* Sources */,
+				959F6DE526BBD53500101E53 /* Frameworks */,
+				959F6DE626BBD53500101E53 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				959F6DEE26BBD53500101E53 /* PBXTargetDependency */,
+			);
+			name = SimoleonScreenshots;
+			productName = SimoleonScreenshots;
+			productReference = 959F6DE826BBD53500101E53 /* SimoleonScreenshots.xctest */;
+			productType = "com.apple.product-type.bundle.ui-testing";
+		};
 		95C5B2232697752600941585 /* Simoleon */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 95C5B24E2697752700941585 /* Build configuration list for PBXNativeTarget "Simoleon" */;
@@ -468,6 +497,10 @@
 				LastSwiftUpdateCheck = 1250;
 				LastUpgradeCheck = 1250;
 				TargetAttributes = {
+					959F6DE726BBD53500101E53 = {
+						CreatedOnToolsVersion = 12.5.1;
+						TestTargetID = 95C5B2232697752600941585;
+					};
 					95C5B2232697752600941585 = {
 						CreatedOnToolsVersion = 12.5.1;
 					};
@@ -508,18 +541,24 @@
 				95C5B2232697752600941585 /* Simoleon */,
 				95C5B2392697752700941585 /* SimoleonTests */,
 				95C5B2442697752700941585 /* SimoleonUITests */,
+				959F6DE726BBD53500101E53 /* SimoleonScreenshots */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
+		959F6DE626BBD53500101E53 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		95C5B2222697752600941585 /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 				95DD4ABB269B33810027CA1F /* CurrencyPairs.json in Resources */,
-				9587599E26B2ACA6004086F0 /* Configuration.storekit in Resources */,
-				958759A226B2AE85004086F0 /* StoreKitTestCertificate.cer in Resources */,
 				95C5B22F2697752700941585 /* Preview Assets.xcassets in Resources */,
 				95E76436269DFC1A008E9F31 /* LaunchScreen.storyboard in Resources */,
 				9587598D26B2A68B004086F0 /* CurrencyMetadata.json in Resources */,
@@ -535,8 +574,6 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				9587599F26B2ACA6004086F0 /* Configuration.storekit in Resources */,
-				958759A326B2AE85004086F0 /* StoreKitTestCertificate.cer in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -544,14 +581,21 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				958759A026B2ACA6004086F0 /* Configuration.storekit in Resources */,
-				958759A426B2AE85004086F0 /* StoreKitTestCertificate.cer in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
+		959F6DE426BBD53500101E53 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				959F6DEB26BBD53500101E53 /* SimoleonScreenshots.swift in Sources */,
+				959F6DF326BBD54400101E53 /* SnapshotHelper.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		95C5B2202697752600941585 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -605,13 +649,17 @@
 			buildActionMask = 2147483647;
 			files = (
 				95C5B24A2697752700941585 /* SimoleonUITests.swift in Sources */,
-				956088B626B9307600A4FD6C /* SnapshotHelper.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+		959F6DEE26BBD53500101E53 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 95C5B2232697752600941585 /* Simoleon */;
+			targetProxy = 959F6DED26BBD53500101E53 /* PBXContainerItemProxy */;
+		};
 		95C5B23C2697752700941585 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 95C5B2232697752600941585 /* Simoleon */;
@@ -677,6 +725,46 @@
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
+		959F6DEF26BBD53500101E53 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = MTX83R5H8X;
+				INFOPLIST_FILE = SimoleonScreenshots/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 14.5;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonScreenshots;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = Simoleon;
+			};
+			name = Debug;
+		};
+		959F6DF026BBD53500101E53 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = MTX83R5H8X;
+				INFOPLIST_FILE = SimoleonScreenshots/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 14.5;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonScreenshots;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = Simoleon;
+			};
+			name = Release;
+		};
 		95C5B24C2697752700941585 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -804,7 +892,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = Simoleon/Simoleon.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 6;
 				DEVELOPMENT_ASSET_PATHS = "\"Simoleon/Preview Content\"";
 				DEVELOPMENT_TEAM = MTX83R5H8X;
 				ENABLE_PREVIEWS = YES;
@@ -829,7 +917,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = Simoleon/Simoleon.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 6;
 				DEVELOPMENT_ASSET_PATHS = "\"Simoleon/Preview Content\"";
 				DEVELOPMENT_TEAM = MTX83R5H8X;
 				ENABLE_PREVIEWS = YES;
@@ -934,6 +1022,15 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
+		959F6DF126BBD53500101E53 /* Build configuration list for PBXNativeTarget "SimoleonScreenshots" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				959F6DEF26BBD53500101E53 /* Debug */,
+				959F6DF026BBD53500101E53 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		95C5B21F2697752600941585 /* Build configuration list for PBXProject "Simoleon" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
Binary file Simoleon.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- a/Simoleon.xcodeproj/xcshareddata/xcschemes/Screenshots.xcscheme	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon.xcodeproj/xcshareddata/xcschemes/Screenshots.xcscheme	Thu Aug 05 09:45:48 2021 +0100
@@ -22,10 +22,10 @@
          </BuildActionEntry>
          <BuildActionEntry
             buildForTesting = "YES"
-            buildForRunning = "YES"
+            buildForRunning = "NO"
             buildForProfiling = "NO"
             buildForArchiving = "NO"
-            buildForAnalyzing = "NO">
+            buildForAnalyzing = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "95C5B2442697752700941585"
@@ -34,16 +34,45 @@
                ReferencedContainer = "container:Simoleon.xcodeproj">
             </BuildableReference>
          </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "NO"
+            buildForProfiling = "NO"
+            buildForArchiving = "NO"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "95C5B2392697752700941585"
+               BuildableName = "SimoleonTests.xctest"
+               BlueprintName = "SimoleonTests"
+               ReferencedContainer = "container:Simoleon.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "NO"
+            buildForArchiving = "NO"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "959F6DE726BBD53500101E53"
+               BuildableName = "SimoleonScreenshots.xctest"
+               BlueprintName = "SimoleonScreenshots"
+               ReferencedContainer = "container:Simoleon.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
       </BuildActionEntries>
    </BuildAction>
    <TestAction
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      disableMainThreadChecker = "YES">
       <Testables>
          <TestableReference
-            skipped = "NO">
+            skipped = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "95C5B2392697752700941585"
@@ -53,7 +82,7 @@
             </BuildableReference>
          </TestableReference>
          <TestableReference
-            skipped = "NO">
+            skipped = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "95C5B2442697752700941585"
@@ -62,12 +91,23 @@
                ReferencedContainer = "container:Simoleon.xcodeproj">
             </BuildableReference>
          </TestableReference>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "959F6DE726BBD53500101E53"
+               BuildableName = "SimoleonScreenshots.xctest"
+               BlueprintName = "SimoleonScreenshots"
+               ReferencedContainer = "container:Simoleon.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
       </Testables>
    </TestAction>
    <LaunchAction
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      disableMainThreadChecker = "YES"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
       ignoresPersistentStateOnLaunch = "NO"
@@ -84,9 +124,6 @@
             ReferencedContainer = "container:Simoleon.xcodeproj">
          </BuildableReference>
       </BuildableProductRunnable>
-      <StoreKitConfigurationFileReference
-         identifier = "../../Configuration.storekit">
-      </StoreKitConfigurationFileReference>
    </LaunchAction>
    <ProfileAction
       buildConfiguration = "Release"
--- a/Simoleon.xcodeproj/xcshareddata/xcschemes/Simoleon.xcscheme	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon.xcodeproj/xcshareddata/xcschemes/Simoleon.xcscheme	Thu Aug 05 09:45:48 2021 +0100
@@ -48,6 +48,16 @@
                ReferencedContainer = "container:Simoleon.xcodeproj">
             </BuildableReference>
          </TestableReference>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "959F6DE726BBD53500101E53"
+               BuildableName = "SimoleonScreenshots.xctest"
+               BlueprintName = "SimoleonScreenshots"
+               ReferencedContainer = "container:Simoleon.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
       </Testables>
    </TestAction>
    <LaunchAction
--- a/Simoleon.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1250"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "95C5B2232697752600941585"
-               BuildableName = "Simoleon.app"
-               BlueprintName = "Simoleon"
-               ReferencedContainer = "container:Simoleon.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "NO"
-            buildForArchiving = "NO"
-            buildForAnalyzing = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "95C5B2442697752700941585"
-               BuildableName = "SimoleonUITests.xctest"
-               BlueprintName = "SimoleonUITests"
-               ReferencedContainer = "container:Simoleon.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "95C5B2392697752700941585"
-               BuildableName = "SimoleonTests.xctest"
-               BlueprintName = "SimoleonTests"
-               ReferencedContainer = "container:Simoleon.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "95C5B2442697752700941585"
-               BuildableName = "SimoleonUITests.xctest"
-               BlueprintName = "SimoleonUITests"
-               ReferencedContainer = "container:Simoleon.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "95C5B2232697752600941585"
-            BuildableName = "Simoleon.app"
-            BlueprintName = "Simoleon"
-            ReferencedContainer = "container:Simoleon.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-      <StoreKitConfigurationFileReference
-         identifier = "../../Configuration.storekit">
-      </StoreKitConfigurationFileReference>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "95C5B2232697752600941585"
-            BuildableName = "Simoleon.app"
-            BlueprintName = "Simoleon"
-            ReferencedContainer = "container:Simoleon.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
--- a/Simoleon.xcodeproj/xcuserdata/dennis.xcuserdatad/xcschemes/xcschememanagement.plist	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon.xcodeproj/xcuserdata/dennis.xcuserdatad/xcschemes/xcschememanagement.plist	Thu Aug 05 09:45:48 2021 +0100
@@ -28,12 +28,12 @@
 		<key>Screenshots.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>1</integer>
+			<integer>0</integer>
 		</dict>
 		<key>Simoleon.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>3</integer>
+			<integer>1</integer>
 		</dict>
 		<key>SimoleonWatchOS (Complication).xcscheme_^#shared#^_</key>
 		<dict>
@@ -50,14 +50,14 @@
 			<key>orderHint</key>
 			<integer>1</integer>
 		</dict>
-		<key>Tests.xcscheme_^#shared#^_</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>2</integer>
-		</dict>
 	</dict>
 	<key>SuppressBuildableAutocreation</key>
 	<dict>
+		<key>959F6DE726BBD53500101E53</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
 		<key>95C5B2232697752600941585</key>
 		<dict>
 			<key>primary</key>
--- a/Simoleon/Conversion.swift	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon/Conversion.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -33,7 +33,6 @@
                                     .padding(.horizontal)
                             )
                     }
-                    .accessibilityIdentifier("CurrencySelector")
                     
                     FavoriteButton(currencyPair: currencyPair)
                 }
--- a/Simoleon/Helpers/ConversionBox.swift	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon/Helpers/ConversionBox.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -41,7 +41,6 @@
                 .font(Font.title.weight(.semibold))
                 .lineLimit(1)
                 .padding(.bottom, 10)
-                .accessibilityIdentifier("ConversionTextfield")
             }
             
             Divider()
--- a/Simoleon/Helpers/CurrencySelector.swift	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon/Helpers/CurrencySelector.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -40,27 +40,26 @@
             VStack {
                 SearchBar(placeholder: "Search...", text: $searchCurrency)
                     .padding()
-                    .accessibilityIdentifier("SearchBar")
                 
-                if entitlementIsActive {
-                    List(searchResults, id: \.self) { currencyPair in
-                        Button(action: {
-                            self.currencyPair = currencyPair.name
-                            showingCurrencySelector = false
-                        }) {
-                            CurrencyRow(currencyPairName: currencyPair.name)
+                List {
+                    if entitlementIsActive {
+                        ForEach(searchResults, id: \.self) { currencyPair in
+                            Button(action: {
+                                self.currencyPair = currencyPair.name
+                                showingCurrencySelector = false
+                            }) {
+                                CurrencyRow(currencyPairName: currencyPair.name)
+                            }
                         }
-                        .accessibilityIdentifier("CurrencyRow")
-                    }
-                    .listStyle()
-                } else {
-                    List(searchResults, id: \.self) { currencyPair in
-                        Button(action: { select(currencyPair) }) {
-                            CurrencyRow(currencyPairName: currencyPair.name, isLocked: currencyPair.isLocked)
+                    } else {
+                        ForEach(searchResults, id: \.self) { currencyPair in
+                            Button(action: { select(currencyPair) }) {
+                                CurrencyRow(currencyPairName: currencyPair.name, isLocked: currencyPair.isLocked)
+                            }
                         }
                     }
-                    .listStyle()
                 }
+                .id(UUID())
             }
             .navigationTitle("Currencies")
             .navigationBarTitleDisplayMode(.inline)
--- a/Simoleon/Helpers/FavoriteButton.swift	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon/Helpers/FavoriteButton.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -27,7 +27,6 @@
                         .foregroundColor(Color(.systemYellow))
                 )
         }
-        .accessibilityIdentifier("FavoriteButton")
     }
     
     /*
--- a/Simoleon/Helpers/Sidebar.swift	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon/Helpers/Sidebar.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -20,7 +20,6 @@
             NavigationLink(destination: Favorites()) {
                 Label("Favorites", systemImage: "star")
             }
-            .accessibility(identifier: "Favorites")
             
             NavigationLink(destination: Settings()) {
                 Label("Settings", systemImage: "gear")
--- a/Simoleon/Info.plist	Tue Aug 03 18:54:55 2021 +0100
+++ b/Simoleon/Info.plist	Thu Aug 05 09:45:48 2021 +0100
@@ -23,7 +23,7 @@
 	<key>CFBundleShortVersionString</key>
 	<string>$(MARKETING_VERSION)</string>
 	<key>CFBundleVersion</key>
-	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<string>6</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
 	<key>PURCHASES_KEY</key>
Binary file Simoleon/Localization/en.xcloc/Source Contents/Simoleon/de.lproj/Localizable.strings has changed
Binary file Simoleon/Localization/en.xcloc/Source Contents/Simoleon/es.lproj/Localizable.strings has changed
Binary file Simoleon/Localization/en.xcloc/Source Contents/Simoleon/fr.lproj/Localizable.strings has changed
Binary file Simoleon/Localization/en.xcloc/Source Contents/Simoleon/it.lproj/Localizable.strings has changed
Binary file Simoleon/Localization/en.xcloc/Source Contents/Simoleon/nl.lproj/Localizable.strings has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SimoleonScreenshots/Info.plist	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SimoleonScreenshots/SimoleonScreenshots.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,73 @@
+//
+//  SimoleonScreenshots.swift
+//  SimoleonScreenshots
+//
+//  Created by Dennis Concepción Martín on 5/8/21.
+//
+
+import XCTest
+
+class SimoleonScreenshots: XCTestCase {
+    var screnshotEndingName = ""
+
+    override func setUpWithError() throws {
+        // Put setup code here. This method is called before the invocation of each test method in the class.
+        if UIDevice.current.userInterfaceIdiom == .pad {
+            XCUIDevice.shared.orientation = .landscapeLeft
+            screnshotEndingName = "-force_landscapeleft"
+        }
+        
+        let app = XCUIApplication()
+        setupSnapshot(app)
+        app.launch()
+
+        // In UI tests it is usually best to stop immediately when a failure occurs.
+        continueAfterFailure = false
+
+        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
+    }
+
+    override func tearDownWithError() throws {
+        // Put teardown code here. This method is called after the invocation of each test method in the class.
+    }
+
+    // MARK: - Automate screenshots
+    func testLaunch() {
+        if UIDevice.current.userInterfaceIdiom == .pad {
+            XCUIApplication().tables.buttons.firstMatch.tap()
+        }
+        
+        snapshot("1Launch\(screnshotEndingName)")
+    }
+    
+    func testCurrencySelector() {
+        if UIDevice.current.userInterfaceIdiom == .pad {
+            XCUIApplication().tables.buttons.firstMatch.tap()
+        }
+        
+        XCUIApplication().scrollViews.buttons.firstMatch.tap()
+        snapshot("2CurrencySelector\(screnshotEndingName)")
+        
+        XCUIApplication().tables.buttons.element(boundBy: 6).tap()
+        let conversionTextfield = XCUIApplication().textFields.firstMatch
+        conversionTextfield.tap()
+        for _ in (0..<4) {
+            conversionTextfield.typeText(XCUIKeyboardKey.delete.rawValue)
+        }
+        
+        conversionTextfield.typeText("\n")
+        
+        snapshot("3Amount\(screnshotEndingName)")
+    }
+    
+    func testFavorites() throws {
+        // Go to favorites
+        if UIDevice.current.userInterfaceIdiom == .pad {
+            XCUIApplication().tables.buttons.element(boundBy: 1).tap()
+        } else {
+            XCUIApplication().tabBars.buttons.element(boundBy: 1).tap()
+        }
+
+        snapshot("4Favorites\(screnshotEndingName)")
+    }
+}
--- a/SimoleonTests/Info.plist	Tue Aug 03 18:54:55 2021 +0100
+++ b/SimoleonTests/Info.plist	Thu Aug 05 09:45:48 2021 +0100
@@ -17,6 +17,6 @@
 	<key>CFBundleShortVersionString</key>
 	<string>1.0</string>
 	<key>CFBundleVersion</key>
-	<string>2</string>
+	<string>6</string>
 </dict>
 </plist>
--- a/SimoleonUITests/Info.plist	Tue Aug 03 18:54:55 2021 +0100
+++ b/SimoleonUITests/Info.plist	Thu Aug 05 09:45:48 2021 +0100
@@ -17,6 +17,6 @@
 	<key>CFBundleShortVersionString</key>
 	<string>1.0</string>
 	<key>CFBundleVersion</key>
-	<string>2</string>
+	<string>6</string>
 </dict>
 </plist>
--- a/SimoleonUITests/SimoleonUITests.swift	Tue Aug 03 18:54:55 2021 +0100
+++ b/SimoleonUITests/SimoleonUITests.swift	Thu Aug 05 09:45:48 2021 +0100
@@ -21,61 +21,7 @@
     override func tearDownWithError() throws {
         // Put teardown code here. This method is called after the invocation of each test method in the class.
     }
-    
-    // MARK: - Automate screenshots
-    func testLaunchScreenshots() {
-        let app = XCUIApplication()
-        setupSnapshot(app)
-        app.launch()
-        snapshot("0-Launch")
 
-        // Remove 100 from conversion textfield and type custom amount
-        let conversionTextfield = app.textFields["ConversionTextfield"]
-        conversionTextfield.tap()
-        for _ in (0..<4) {
-            conversionTextfield.typeText(XCUIKeyboardKey.delete.rawValue)
-        }
-        conversionTextfield.typeText("1470.10")
-        snapshot("1-Convert")
-
-        // Remove custom amount and type again 1000
-        for _ in (0..<7) {
-            conversionTextfield.typeText(XCUIKeyboardKey.delete.rawValue)
-        }
-        conversionTextfield.typeText("1000\n")
-    }
-    
-    func testCurrencySelectorScreenshots() throws {
-        let app = XCUIApplication()
-        setupSnapshot(app)
-        app.launch()
-
-        // Open currency selector, search BTC, and select first row
-        app.buttons["CurrencySelector"].tap()
-        snapshot("2-CurrencySelector")
-
-        let searchBar = app.textFields["SearchBar"]
-        searchBar.tap()
-        searchBar.typeText("BTC")
-        app.buttons["CurrencyRow"].firstMatch.tap()
-        snapshot("3-Bitcoin")
-    }
-    
-    func testFavorites() throws {
-        let app = XCUIApplication()
-        setupSnapshot(app)
-        app.launch()
-        
-        // Go to favorites
-        if UIDevice.current.userInterfaceIdiom == .pad {
-            app.navigationBars.buttons.element(boundBy: 0).tap()
-            app.buttons["Favorites"].tap()
-        } else {
-            app.tabBars.buttons.element(boundBy: 1).tap()
-        }
-
-        snapshot("4-Favorites")
-    }
 
     func testLaunchPerformance() throws {
         if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
Binary file StoreKitTestCertificate.cer has changed
--- a/fastlane/Fastfile	Tue Aug 03 18:54:55 2021 +0100
+++ b/fastlane/Fastfile	Thu Aug 05 09:45:48 2021 +0100
@@ -20,14 +20,20 @@
   desc "Push a new beta build to TestFlight"
   lane :beta do
     increment_build_number(
-      build_number: latest_testflight_build_number(
-        initial_build_number: 1,
-        version: get_version_number(xcodeproj: "Simoleon.xcodeproj"),
-        live: false
-      ) + 1,
+      build_number: latest_testflight_build_number + 1,
+      xcodeproj: "Simoleon.xcodeproj"
     )
+    
     build_app(scheme: "Simoleon")
-    upload_to_testflight
+    upload_to_testflight(
+      beta_app_review_info: {
+        contact_email: "dmartin@dennistech.io",
+        contact_first_name: "Dennis",
+        contact_last_name: "Concepcion Martin",
+        contact_phone: "+34 639 465 931",
+        notes: "Go and crash it. Thank you for reviewing <3"
+      }
+    )
   end
 
   desc "Release new version to App Store"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/README.md	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,34 @@
+fastlane documentation
+================
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```
+xcode-select --install
+```
+
+Install _fastlane_ using
+```
+[sudo] gem install fastlane -NV
+```
+or alternatively using `brew install fastlane`
+
+# Available Actions
+## iOS
+### ios beta
+```
+fastlane ios beta
+```
+Push a new beta build to TestFlight
+### ios release
+```
+fastlane ios release
+```
+Release new version to App Store
+
+----
+
+This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
+More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
+The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
--- a/fastlane/Snapfile	Tue Aug 03 18:54:55 2021 +0100
+++ b/fastlane/Snapfile	Thu Aug 05 09:45:48 2021 +0100
@@ -1,10 +1,8 @@
-# Uncomment the lines below you want to change by removing the # in the beginning
-
 # A list of devices you want to take the screenshots from
 devices([
 	"iPhone 8 Plus",
 	"iPhone 12 Pro Max",
-	"iPad Pro (12.9-inch) (4th generation)"
+	"iPad Pro (12.9-inch) (5th generation)"
 ])
 
 languages([
@@ -15,27 +13,27 @@
 	"fr-FR",
 	"pt-PT",
 	"nl-NL",
-	"it-IT",
-	"ru-RU"
+	"it",
+	"ru"
 ])
 
-# The name of the scheme which contains the UI Tests
+# The name of the scheme which contains the UI Tests.
 scheme("Screenshots")
 
-# Where should the resulting screenshots be stored?
-# output_directory("./screenshots")
+# Enabling this option will automatically uninstall the application before running it.
+# reinstall_app(true)
 
-# remove the '#' to clear all previously generated screenshots before creating new ones
+# Should the project be cleaned before building it?
+clean(true)
+
+# Enabling this option will configure the Simulator's system language.
+localize_simulator(true)
+
+# Clear all previously generated screenshots before creating new ones.
 clear_previous_screenshots(true)
 
-# Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception. See also override_status_bar_arguments for custom options.
+# Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception.
 override_status_bar(true)
 
-# Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments
-# launch_arguments(["-favColor red"])
-
-# Enabling this option will configure the Simulator's system language
-localize_simulator(true)
-
 # For more information about all available options run
 # fastlane action snapshot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/de-DE/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Währungsumrechner in Echtzeit
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/en-GB/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Real-time currency converter
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/en-US/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Real-time currency converter
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/es-ES/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Conversor de divisas
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/fr-FR/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Convertisseur de devises
\ No newline at end of file
--- a/fastlane/metadata/it-IT/description.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-Simoleon è un convertitore di valuta in tempo reale con oltre 170 valute globali e 2000 coppie di valute supportate. La facilità d'uso e il tasso di cambio reale lo rendono l'app perfetta per i viaggiatori che vogliono sapere quanto vale la loro valuta in ogni momento.
-
-- 170 valute globali, criptovalute come Bitcoin, Ethereum e Dash, e materie prime come oro, argento e platino.
-- Quotazioni direttamente dai trading floor europei.
-- Seleziona la tua coppia di valute predefinita e salva le tue valute preferite.
-- Simoleon è sincronizzato su tutti i tuoi dispositivi.
-- Interfaccia semplice e veloce.
-
-Informativa sulla privacy: https://dennistech.io/simoleon-privacy-policy
-Termini di utilizzo: https://dennistech.io/simoleon-terms-of-use
\ No newline at end of file
--- a/fastlane/metadata/it-IT/keywords.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-valuta, forex, convertitore, soldi, euro, dollaro, yen, viaggio, scambio, mercati, finanza
\ No newline at end of file
--- a/fastlane/metadata/it-IT/marketing_url.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://dennistech.io/apps/simoleon
\ No newline at end of file
--- a/fastlane/metadata/it-IT/name.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Simoleon
\ No newline at end of file
--- a/fastlane/metadata/it-IT/privacy_url.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://dennistech.io/simoleon-privacy-policy
\ No newline at end of file
--- a/fastlane/metadata/it-IT/release_notes.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Ciao a tutti! Questo è un grande aggiornamento, speriamo che vi piaccia:
-- Simoleon è disponibile in spagnolo, tedesco, francese, italiano, olandese, portoghese e russo. Se noti una traduzione sbagliata o strana, contattaci: https://dennistech.io/contact
-- Implementati gli acquisti promozionali In-App.
-- Ora, è possibile utilizzare Simoleon per convertire tra le coppie di valute più popolari gratuitamente.
-- Aggiornamenti dell'interfaccia utente.
-- Correzione di bug.
\ No newline at end of file
--- a/fastlane/metadata/it-IT/support_url.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://dennistech.io/contact
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/description.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,10 @@
+Simoleon è un convertitore di valuta in tempo reale con oltre 170 valute globali e 2000 coppie di valute supportate. La facilità d'uso e il tasso di cambio reale lo rendono l'app perfetta per i viaggiatori che vogliono sapere quanto vale la loro valuta in ogni momento.
+
+- 170 valute globali, criptovalute come Bitcoin, Ethereum e Dash, e materie prime come oro, argento e platino.
+- Quotazioni direttamente dai trading floor europei.
+- Seleziona la tua coppia di valute predefinita e salva le tue valute preferite.
+- Simoleon è sincronizzato su tutti i tuoi dispositivi.
+- Interfaccia semplice e veloce.
+
+Informativa sulla privacy: https://dennistech.io/simoleon-privacy-policy
+Termini di utilizzo: https://dennistech.io/simoleon-terms-of-use
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/keywords.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+valuta, forex, convertitore, soldi, euro, dollaro, yen, viaggio, scambio, mercati, finanza
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/marketing_url.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+https://dennistech.io/apps/simoleon
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/name.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Simoleon
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/privacy_url.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+https://dennistech.io/simoleon-privacy-policy
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/release_notes.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,6 @@
+Ciao a tutti! Questo è un grande aggiornamento, speriamo che vi piaccia:
+- Simoleon è disponibile in spagnolo, tedesco, francese, italiano, olandese, portoghese e russo. Se noti una traduzione sbagliata o strana, contattaci: https://dennistech.io/contact
+- Implementati gli acquisti promozionali In-App.
+- Ora, è possibile utilizzare Simoleon per convertire tra le coppie di valute più popolari gratuitamente.
+- Aggiornamenti dell'interfaccia utente.
+- Correzione di bug.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Convertitore di valuta
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/it/support_url.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+https://dennistech.io/contact
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/nl-NL/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Realtime valutacalculator
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/pt-PT/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Conversor de moeda
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/description.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-Simoleon - это конвертер валют в реальном времени с поддержкой более 170 мировых валют и 2000 валютных пар. Простота использования и реальный обменный курс делают это приложение идеальным для путешественников, которые хотят знать, сколько стоит их валюта в каждый момент времени.
-
-- 170 мировых валют, криптовалюты, такие как Bitcoin, Ethereum и Dash, и сырьевые товары, такие как золото, серебро и платина.
-- Котировки прямо с европейских торговых площадок.
-- Выберите валютную пару по умолчанию и сохраните любимые валюты.
-- Simoleon синхронизируется на всех ваших устройствах.
-- Быстрый и простой интерфейс.
-
-Политика конфиденциальности: https://dennistech.io/simoleon-privacy-policy
-Условия использования: https://dennistech.io/simoleon-terms-of-use
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/keywords.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-валюта,форекс,конвертер,деньги,евро,доллар,йена,путешествия,обмен,рынки,финансы
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/marketing_url.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://dennistech.io/apps/simoleon
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/name.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Simoleon
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/privacy_url.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://dennistech.io/simoleon-privacy-policy
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/release_notes.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Привет! Это большое обновление, мы надеемся, что оно вам понравится:
-- Simoleon доступен на испанском, немецком, французском, итальянском, голландском, португальском и русском языках. Если вы заметили неправильный или странный перевод, пожалуйста, свяжитесь с нами: https://dennistech.io/contact.
-- Внедрены рекламные покупки In-App.
-- Теперь вы можете использовать Simoleon для конвертации между самыми популярными валютными парами бесплатно.
-- Обновления пользовательского интерфейса.
-- Исправлены ошибки.
\ No newline at end of file
--- a/fastlane/metadata/ru-RU/support_url.txt	Tue Aug 03 18:54:55 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://dennistech.io/contact
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/description.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,10 @@
+Simoleon - это конвертер валют в реальном времени с поддержкой более 170 мировых валют и 2000 валютных пар. Простота использования и реальный обменный курс делают это приложение идеальным для путешественников, которые хотят знать, сколько стоит их валюта в каждый момент времени.
+
+- 170 мировых валют, криптовалюты, такие как Bitcoin, Ethereum и Dash, и сырьевые товары, такие как золото, серебро и платина.
+- Котировки прямо с европейских торговых площадок.
+- Выберите валютную пару по умолчанию и сохраните любимые валюты.
+- Simoleon синхронизируется на всех ваших устройствах.
+- Быстрый и простой интерфейс.
+
+Политика конфиденциальности: https://dennistech.io/simoleon-privacy-policy
+Условия использования: https://dennistech.io/simoleon-terms-of-use
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/keywords.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+валюта,форекс,конвертер,деньги,евро,доллар,йена,путешествия,обмен,рынки,финансы
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/marketing_url.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+https://dennistech.io/apps/simoleon
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/name.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Simoleon
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/privacy_url.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+https://dennistech.io/simoleon-privacy-policy
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/release_notes.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,6 @@
+Привет! Это большое обновление, мы надеемся, что оно вам понравится:
+- Simoleon доступен на испанском, немецком, французском, итальянском, голландском, португальском и русском языках. Если вы заметили неправильный или странный перевод, пожалуйста, свяжитесь с нами: https://dennistech.io/contact.
+- Внедрены рекламные покупки In-App.
+- Теперь вы можете использовать Simoleon для конвертации между самыми популярными валютными парами бесплатно.
+- Обновления пользовательского интерфейса.
+- Исправлены ошибки.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/subtitle.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Конвертер валют
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/metadata/ru/support_url.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+https://dennistech.io/contact
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/review_information/email_address.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+dmartin@dennistech.io
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/review_information/first_name.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Dennis
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/review_information/last_name.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
+Concepcion Martin
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fastlane/review_information/phone_number.txt	Thu Aug 05 09:45:48 2021 +0100
@@ -0,0 +1,1 @@
++34 639 465 931
\ No newline at end of file