changeset 128:87f02d4f9c26

Add custom build configuration Now I can add logic when the app is built under the Screenshots scheme
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Mon, 16 Aug 2021 18:21:39 +0100
parents 0e693e85db9b
children 1fd9e27df5be
files Simoleon.xcodeproj/project.pbxproj Simoleon.xcodeproj/xcshareddata/xcschemes/Screenshots.xcscheme Simoleon/Favorites.swift Simoleon/Helpers/CurrencySelector.swift Simoleon/Settings.swift
diffstat 5 files changed, 190 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/Simoleon.xcodeproj/project.pbxproj	Sun Aug 15 15:16:56 2021 +0100
+++ b/Simoleon.xcodeproj/project.pbxproj	Mon Aug 16 18:21:39 2021 +0100
@@ -739,8 +739,10 @@
 					"@executable_path/Frameworks",
 					"@loader_path/Frameworks",
 				);
+				OTHER_SWIFT_FLAGS = "";
 				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonScreenshots;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				TEST_TARGET_NAME = Simoleon;
@@ -759,13 +761,168 @@
 					"@executable_path/Frameworks",
 					"@loader_path/Frameworks",
 				);
+				OTHER_SWIFT_FLAGS = "";
 				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonScreenshots;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = Simoleon;
+			};
+			name = Release;
+		};
+		95B9EECD26CAC9EF00D94D60 /* Screenshots */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 14.4;
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+			};
+			name = Screenshots;
+		};
+		95B9EECE26CAC9EF00D94D60 /* Screenshots */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9585BB0F26A6B58500E3193E /* Config.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_ENTITLEMENTS = Simoleon/Simoleon.entitlements;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_ASSET_PATHS = "\"Simoleon/Preview Content\"";
+				DEVELOPMENT_TEAM = MTX83R5H8X;
+				ENABLE_PREVIEWS = YES;
+				INFOPLIST_FILE = Simoleon/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.3.1;
+				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.Simoleon;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = SCREENSHOTS;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Screenshots;
+		};
+		95B9EECF26CAC9EF00D94D60 /* Screenshots */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = MTX83R5H8X;
+				INFOPLIST_FILE = SimoleonTests/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonTests;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Simoleon.app/Simoleon";
+			};
+			name = Screenshots;
+		};
+		95B9EED026CAC9EF00D94D60 /* Screenshots */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = MTX83R5H8X;
+				INFOPLIST_FILE = SimoleonUITests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonUITests;
+				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				TEST_TARGET_NAME = Simoleon;
 			};
-			name = Release;
+			name = Screenshots;
+		};
+		95B9EED126CAC9EF00D94D60 /* Screenshots */ = {
+			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",
+				);
+				OTHER_SWIFT_FLAGS = "";
+				PRODUCT_BUNDLE_IDENTIFIER = io.dennistech.SimoleonScreenshots;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = Simoleon;
+			};
+			name = Screenshots;
 		};
 		95C5B24C2697752700941585 /* Debug */ = {
 			isa = XCBuildConfiguration;
@@ -1028,6 +1185,7 @@
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				959F6DEF26BBD53500101E53 /* Debug */,
+				95B9EED126CAC9EF00D94D60 /* Screenshots */,
 				959F6DF026BBD53500101E53 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
@@ -1037,6 +1195,7 @@
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				95C5B24C2697752700941585 /* Debug */,
+				95B9EECD26CAC9EF00D94D60 /* Screenshots */,
 				95C5B24D2697752700941585 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
@@ -1046,6 +1205,7 @@
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				95C5B24F2697752700941585 /* Debug */,
+				95B9EECE26CAC9EF00D94D60 /* Screenshots */,
 				95C5B2502697752700941585 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
@@ -1055,6 +1215,7 @@
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				95C5B2522697752700941585 /* Debug */,
+				95B9EECF26CAC9EF00D94D60 /* Screenshots */,
 				95C5B2532697752700941585 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
@@ -1064,6 +1225,7 @@
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				95C5B2552697752700941585 /* Debug */,
+				95B9EED026CAC9EF00D94D60 /* Screenshots */,
 				95C5B2562697752700941585 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
--- a/Simoleon.xcodeproj/xcshareddata/xcschemes/Screenshots.xcscheme	Sun Aug 15 15:16:56 2021 +0100
+++ b/Simoleon.xcodeproj/xcshareddata/xcschemes/Screenshots.xcscheme	Mon Aug 16 18:21:39 2021 +0100
@@ -65,7 +65,7 @@
       </BuildActionEntries>
    </BuildAction>
    <TestAction
-      buildConfiguration = "Debug"
+      buildConfiguration = "Screenshots"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       shouldUseLaunchSchemeArgsEnv = "YES"
--- a/Simoleon/Favorites.swift	Sun Aug 15 15:16:56 2021 +0100
+++ b/Simoleon/Favorites.swift	Mon Aug 16 18:21:39 2021 +0100
@@ -11,14 +11,15 @@
     @Environment(\.managedObjectContext) private var viewContext
     @FetchRequest(
         sortDescriptors: [NSSortDescriptor(keyPath: \Favorite.currencyPair, ascending: true)],
-        animation: .default) private var favorite: FetchedResults<Favorite>
+        animation: .default) private var favorites: FetchedResults<Favorite>
     
     var body: some View {
         VStack {
-            if favorite.isEmpty {
+            if favorites.isEmpty {
                 Group {
                     Image(systemName: "star")
                         .font(.title)
+                    
                     Text("Search a currency pair and add it to favourites.")
                         .padding(.top, 5)
                 }
@@ -27,7 +28,7 @@
                 .padding(.horizontal, 50)
             } else {
                 List {
-                    ForEach(favorite) { favorite in
+                    ForEach(favorites) { favorite in
                         NavigationLink(destination: Conversion(showNavigationView: false, currencyPair: favorite.currencyPair)) {
                             CurrencyRow(currencyPairName: favorite.currencyPair)
                         }
@@ -47,15 +48,15 @@
             NavigationView { content }
         }
         .onAppear {
-            #if DEBUG
-            generateFavoritesToScreenshots()
+            #if SCREENSHOTS
+            generateFavoritesForScreenshots()
             #endif
         }
     }
     
     private func removeFromFavorites(offsets: IndexSet) {
         withAnimation {
-            offsets.map { favorite[$0] }.forEach(viewContext.delete)
+            offsets.map { favorites[$0] }.forEach(viewContext.delete)
             
             do {
                 try viewContext.save()
@@ -66,17 +67,22 @@
         }
     }
 
-    #if DEBUG
-    private func generateFavoritesToScreenshots() {
-        if favorite.isEmpty {
-            let favoriteCurrencies = [
-                "EUR/USD", "BTC/USD", "USD/HKD", "USD/JPY", "AUD/USD",
-                "XAU/GBP", "DASH/ETH", "EUR/USD", "XAG/CAD"
-            ]
-            
-            for favoriteCurrency in favoriteCurrencies {
-                let favorite = Favorite(context: viewContext)
-                favorite.currencyPair = favoriteCurrency
+    #if SCREENSHOTS
+    /*
+     Save currencies to favourites to take screenshots for the App Store
+     */
+    private func generateFavoritesForScreenshots() {
+        let favoriteCurrencies = [
+            "EUR/USD", "BTC/USD", "USD/HKD", "USD/JPY", "AUD/USD",
+            "XAU/GBP", "DASH/ETH", "EUR/USD", "XAG/CAD"
+        ]
+        
+        let coreDataCurrencyPairs = favorites.map { $0.currencyPair }
+        
+        for favoriteCurrency in favoriteCurrencies {
+            if !coreDataCurrencyPairs.contains(favoriteCurrency) {
+                let favorites = Favorite(context: viewContext)
+                favorites.currencyPair = favoriteCurrency
                 
                 do {
                     try viewContext.save()
--- a/Simoleon/Helpers/CurrencySelector.swift	Sun Aug 15 15:16:56 2021 +0100
+++ b/Simoleon/Helpers/CurrencySelector.swift	Mon Aug 16 18:21:39 2021 +0100
@@ -40,6 +40,7 @@
             VStack {
                 SearchBar(placeholder: "Search...", text: $searchCurrency)
                     .padding()
+                    .accessibilityIdentifier("CurrencySearchBar")
                 
                 List {
                     if entitlementIsActive {
@@ -97,7 +98,7 @@
     
     // Check if user subscription is active
     private func checkEntitlement() {
-        #if DEBUG
+        #if SCREENSHOTS
         entitlementIsActive = true
         #else
         Purchases.shared.purchaserInfo { (purchaserInfo, error) in
--- a/Simoleon/Settings.swift	Sun Aug 15 15:16:56 2021 +0100
+++ b/Simoleon/Settings.swift	Mon Aug 16 18:21:39 2021 +0100
@@ -150,7 +150,7 @@
     
     // Check if user subscription is active
     private func checkEntitlement() {
-        #if DEBUG
+        #if SCREENSHOTS
         entitlementIsActive = true
         #else
         Purchases.shared.purchaserInfo { (purchaserInfo, error) in