Basic application setup (#1)

This PR contains the work done to define the necessary setup from which the app will be built upon.

To provide further details on what has been done:
* created the app, the unit tests and the UI tests targets in the Xcode project;
* updated the bundle identifiers and OS deployment targets of all targets;
* added a `.gitignore` file tailored specifically for the project;
* added a `README` file that defines in details the goal of the project;
* added the [Swift Format](https://github.com/swiftlang/swift-format) rules that the source code should abide to;
* cleaned the boilerplate source code on all targets.

Reviewed-on: rock-n-code/todos-app#1
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-02-08 20:20:11 +00:00
committed by javier
parent 1a178a6be6
commit e6e9afe7fa
13 changed files with 234 additions and 98 deletions
+55
View File
@@ -0,0 +1,55 @@
# Xcode
# General
.DS_Store
.AppleDouble
.LSOverride
# Build generated
build/
DerivedData/
*.o
*.obj
# Xcode
xcuserdata/
*.xcuserstate
*.xcscmblueprint
*.xccheckout
*.xcdebugger
*.hmap
*.ipa
*.dSYM
*.dSYM.zip
# Workspace settings (shared by team) - keep these under version control if desired
# Uncomment to keep WorkspaceSettings
# !xcshareddata/WorkspaceSettings.xcsettings
# Xcode project user files
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
# Swift Package Manager
/.build/
/.swiftpm/
Package.resolved
# Environment files
.env
.env.*
# Archive / export
*.xcarchive
# Ignore Swift PM artifact indexes
/.build/checkouts/
# macOS
.DS_Store
+76
View File
@@ -0,0 +1,76 @@
{
"fileScopedDeclarationPrivacy": {
"accessLevel": "private"
},
"indentBlankLines": false,
"indentConditionalCompilationBlocks": false,
"indentSwitchCaseLabels": true,
"indentation": {
"spaces": 4
},
"lineBreakAroundMultilineExpressionChainComponents": true,
"lineBreakBeforeControlFlowKeywords": true,
"lineBreakBeforeEachArgument": true,
"lineBreakBeforeEachGenericRequirement": false,
"lineBreakBetweenDeclarationAttributes": true,
"lineLength": 120,
"maximumBlankLines": 1,
"multilineTrailingCommaBehavior": "keptAsWritten",
"multiElementCollectionTrailingCommas": true,
"noAssignmentInExpressions" : {
"allowedFunctions" : [
"XCTAssertNoThrow"
]
},
"orderedImports": {
"includeConditionalImports": true,
"shouldGroupImports": true
},
"prioritizeKeepingFunctionOutputTogether": true,
"reflowMultilineStringLiterals": "always",
"respectsExistingLineBreaks": true,
"rules": {
"AllPublicDeclarationsHaveDocumentation": true,
"AlwaysUseLiteralForEmptyCollectionInit": true,
"AlwaysUseLowerCamelCase": true,
"AmbiguousTrailingClosureOverload": false,
"AvoidRetroactiveConformances": true,
"BeginDocumentationCommentWithOneLineSummary": true,
"DoNotUseSemicolons": true,
"DontRepeatTypeInStaticProperties": true,
"FullyIndirectEnum": true,
"IdentifiersMustBeASCII": true,
"NeverForceUnwrap": true,
"NeverUseForceTry": true,
"NeverUseImplicitlyUnwrappedOptionals": true,
"NoAccessLevelOnExtensionDeclarations": false,
"NoAssignmentInExpressions": true,
"NoBlockComments": true,
"NoCasesWithOnlyFallthrough": true,
"NoEmptyLinesOpeningClosingBraces": false,
"NoEmptyTrailingClosureParentheses": true,
"NoLabelsInCasePatterns": true,
"NoLeadingUnderscores": true,
"NoParensAroundConditions": true,
"NoPlaygroundLiterals": true,
"NoVoidReturnOnFunctionSignature": true,
"OneCasePerLine": true,
"OneVariableDeclarationPerLine": true,
"OnlyOneTrailingClosureArgument": true,
"OrderedImports" : true,
"ReturnVoidInsteadOfEmptyTuple": true,
"TypeNamesShouldBeCapitalized": true,
"UseEarlyExits": true,
"UseExplicitNilCheckInConditions": true,
"UseLetInEveryBoundCaseVariable": true,
"UseShorthandTypeNames": true,
"UseSynthesizedInitializer": true,
"UseTripleSlashForDocumentationComments": true,
"UseWhereClausesInForLoops": true,
"ValidateDocumentationComments": true
},
"spacesAroundRangeFormationOperators": true,
"spacesBeforeEndOfLineComments" : 2,
"tabWidth": 4,
"version": 1
}
@@ -1,17 +1,18 @@
import SwiftUI
import SwiftData
import SwiftUI
@main
struct TodosApp: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
Item.self,
Item.self
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
}
catch {
fatalError("Could not create ModelContainer: \(error)")
}
}()
@@ -4,7 +4,7 @@ import SwiftData
@Model
final class Item {
var timestamp: Date
init(timestamp: Date) {
self.timestamp = timestamp
}
@@ -1,9 +1,13 @@
import SwiftUI
import SwiftData
import SwiftUI
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
@Query private var items: [Item]
@Environment(\.modelContext)
private var modelContext
@Query
private var items: [Item]
var body: some View {
NavigationSplitView {
@@ -17,15 +21,15 @@ struct ContentView: View {
}
.onDelete(perform: deleteItems)
}
#if os(macOS)
#if os(macOS)
.navigationSplitViewColumnWidth(min: 180, ideal: 200)
#endif
#endif
.toolbar {
#if os(iOS)
#if os(iOS)
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
#endif
#endif
ToolbarItem {
Button(action: addItem) {
Label("Add Item", systemImage: "plus")
+16
View File
@@ -0,0 +1,16 @@
# TODOS
A simple, small but complete todo app created for a technical interview with [Bol](https://www.bol.com), built using [SwiftUI](https://developer.apple.com/swiftui/).
In a nutshell, this basic app should allow a user to either create, update, and/or delete tasks; as well as being able to mark tasks as completed.
Given the requirements, the app should comply to the following criteria:
* each task should have a title, optional description, due date, and a flag indicating if it’s completed.
* tasks should be grouped visually by their due date, such as Today, Upcoming, or Past.
* users should also be able to reorder tasks within a group using drag and drop functionality.
* data should be saved and loaded asynchronously, and the UI should remain responsive while these operations take place.
* should be possible to simulate delays with built-in tools if needed.
Furthermore, the app is required to be built using SwiftUI with a clear structure that separates concerns. Any architectural style can be used, but the reasoning should be visible in how the code is organized.
It is expected that the app is modular and maintainable, so the source code must reflects this requirement. It is optional to include testable parts and anything extra that might improve the app.
+68 -84
View File
@@ -3,9 +3,14 @@
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objectVersion = 90;
objects = {
/* Begin PBXBuildFile section */
0296B3232F3903E6001C3BDB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 0296B3222F3903E6001C3BDB /* README.md */; };
0296B3272F390E1A001C3BDB /* .swift-format in Resources */ = {isa = PBXBuildFile; fileRef = 0296B3262F390E1A001C3BDB /* .swift-format */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
0296B3002F38F8F7001C3BDB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
@@ -27,22 +32,24 @@
0296B2F02F38F8F7001C3BDB /* Todos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Todos.app; sourceTree = BUILT_PRODUCTS_DIR; };
0296B2FF2F38F8F7001C3BDB /* TodosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TodosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
0296B3092F38F8F7001C3BDB /* TodosUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TodosUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
0296B3222F3903E6001C3BDB /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
0296B3262F390E1A001C3BDB /* .swift-format */ = {isa = PBXFileReference; lastKnownFileType = text; path = ".swift-format"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
0296B2F22F38F8F7001C3BDB /* Todos */ = {
0296B2F22F38F8F7001C3BDB /* App */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = Todos;
path = App;
sourceTree = "<group>";
};
0296B3022F38F8F7001C3BDB /* TodosTests */ = {
0296B3022F38F8F7001C3BDB /* UnitTests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = TodosTests;
path = UnitTests;
sourceTree = "<group>";
};
0296B30C2F38F8F7001C3BDB /* TodosUITests */ = {
0296B30C2F38F8F7001C3BDB /* UITests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = TodosUITests;
path = UITests;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
@@ -50,24 +57,18 @@
/* Begin PBXFrameworksBuildPhase section */
0296B2ED2F38F8F7001C3BDB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
0296B2FC2F38F8F7001C3BDB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
0296B3062F38F8F7001C3BDB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
@@ -75,9 +76,11 @@
0296B2E72F38F8F7001C3BDB = {
isa = PBXGroup;
children = (
0296B2F22F38F8F7001C3BDB /* Todos */,
0296B3022F38F8F7001C3BDB /* TodosTests */,
0296B30C2F38F8F7001C3BDB /* TodosUITests */,
0296B3262F390E1A001C3BDB /* .swift-format */,
0296B3222F3903E6001C3BDB /* README.md */,
0296B2F22F38F8F7001C3BDB /* App */,
0296B3022F38F8F7001C3BDB /* UnitTests */,
0296B30C2F38F8F7001C3BDB /* UITests */,
0296B2F12F38F8F7001C3BDB /* Products */,
);
sourceTree = "<group>";
@@ -105,14 +108,10 @@
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
0296B2F22F38F8F7001C3BDB /* Todos */,
0296B2F22F38F8F7001C3BDB /* App */,
);
name = Todos;
packageProductDependencies = (
);
productName = Todos;
productReference = 0296B2F02F38F8F7001C3BDB /* Todos.app */;
productType = "com.apple.product-type.application";
@@ -131,11 +130,9 @@
0296B3012F38F8F7001C3BDB /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
0296B3022F38F8F7001C3BDB /* TodosTests */,
0296B3022F38F8F7001C3BDB /* UnitTests */,
);
name = TodosTests;
packageProductDependencies = (
);
productName = TodosTests;
productReference = 0296B2FF2F38F8F7001C3BDB /* TodosTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
@@ -154,11 +151,9 @@
0296B30B2F38F8F7001C3BDB /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
0296B30C2F38F8F7001C3BDB /* TodosUITests */,
0296B30C2F38F8F7001C3BDB /* UITests */,
);
name = TodosUITests;
packageProductDependencies = (
);
productName = TodosUITests;
productReference = 0296B3092F38F8F7001C3BDB /* TodosUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
@@ -172,6 +167,7 @@
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 2630;
LastUpgradeCheck = 2630;
ORGANIZATIONNAME = "Röck+Cöde VoF";
TargetAttributes = {
0296B2EF2F38F8F7001C3BDB = {
CreatedOnToolsVersion = 26.3;
@@ -195,7 +191,7 @@
);
mainGroup = 0296B2E72F38F8F7001C3BDB;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
preferredProjectObjectVersion = 90;
productRefGroup = 0296B2F12F38F8F7001C3BDB /* Products */;
projectDirPath = "";
projectRoot = "";
@@ -210,48 +206,38 @@
/* Begin PBXResourcesBuildPhase section */
0296B2EE2F38F8F7001C3BDB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0296B3232F3903E6001C3BDB /* README.md in Resources */,
0296B3272F390E1A001C3BDB /* .swift-format in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
0296B2FD2F38F8F7001C3BDB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
0296B3072F38F8F7001C3BDB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
0296B2EC2F38F8F7001C3BDB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
0296B2FB2F38F8F7001C3BDB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
0296B3052F38F8F7001C3BDB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
@@ -269,7 +255,7 @@
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
0296B3112F38F8F7001C3BDB /* Debug */ = {
0296B3112F38F8F7001C3BDB /* Debug configuration for PBXProject "Todos" */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -331,7 +317,7 @@
};
name = Debug;
};
0296B3122F38F8F7001C3BDB /* Release */ = {
0296B3122F38F8F7001C3BDB /* Release configuration for PBXProject "Todos" */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -385,7 +371,7 @@
};
name = Release;
};
0296B3142F38F8F7001C3BDB /* Debug */ = {
0296B3142F38F8F7001C3BDB /* Debug configuration for PBXNativeTarget "Todos" */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -398,6 +384,7 @@
ENABLE_PREVIEWS = YES;
ENABLE_USER_SELECTED_FILES = readonly;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
@@ -408,12 +395,12 @@
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 26.2;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.app.Todos";
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.todos.app";
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
SDKROOT = auto;
@@ -425,11 +412,11 @@
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
XROS_DEPLOYMENT_TARGET = 26.2;
XROS_DEPLOYMENT_TARGET = 26.0;
};
name = Debug;
};
0296B3152F38F8F7001C3BDB /* Release */ = {
0296B3152F38F8F7001C3BDB /* Release configuration for PBXNativeTarget "Todos" */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -442,6 +429,7 @@
ENABLE_PREVIEWS = YES;
ENABLE_USER_SELECTED_FILES = readonly;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
@@ -452,12 +440,12 @@
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 26.2;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.app.Todos";
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.todos.app";
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
SDKROOT = auto;
@@ -469,11 +457,11 @@
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
XROS_DEPLOYMENT_TARGET = 26.2;
XROS_DEPLOYMENT_TARGET = 26.0;
};
name = Release;
};
0296B3172F38F8F7001C3BDB /* Debug */ = {
0296B3172F38F8F7001C3BDB /* Debug configuration for PBXNativeTarget "TodosTests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
@@ -481,10 +469,10 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7FMNM89WKG;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.2;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MACOSX_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.app.TodosTests";
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.todos.app.unit-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -495,11 +483,11 @@
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Todos.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Todos";
XROS_DEPLOYMENT_TARGET = 26.2;
XROS_DEPLOYMENT_TARGET = 26.0;
};
name = Debug;
};
0296B3182F38F8F7001C3BDB /* Release */ = {
0296B3182F38F8F7001C3BDB /* Release configuration for PBXNativeTarget "TodosTests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
@@ -507,10 +495,10 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7FMNM89WKG;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.2;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MACOSX_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.app.TodosTests";
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.todos.app.unit-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -521,21 +509,21 @@
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Todos.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Todos";
XROS_DEPLOYMENT_TARGET = 26.2;
XROS_DEPLOYMENT_TARGET = 26.0;
};
name = Release;
};
0296B31A2F38F8F7001C3BDB /* Debug */ = {
0296B31A2F38F8F7001C3BDB /* Debug configuration for PBXNativeTarget "TodosUITests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7FMNM89WKG;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.2;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MACOSX_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.app.TodosUITests";
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.todos.app.ui-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -546,21 +534,21 @@
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_TARGET_NAME = Todos;
XROS_DEPLOYMENT_TARGET = 26.2;
XROS_DEPLOYMENT_TARGET = 26.0;
};
name = Debug;
};
0296B31B2F38F8F7001C3BDB /* Release */ = {
0296B31B2F38F8F7001C3BDB /* Release configuration for PBXNativeTarget "TodosUITests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7FMNM89WKG;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.2;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MACOSX_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.app.TodosUITests";
PRODUCT_BUNDLE_IDENTIFIER = "com.rock-n-code.assignment.todos.app.ui-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -571,7 +559,7 @@
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_TARGET_NAME = Todos;
XROS_DEPLOYMENT_TARGET = 26.2;
XROS_DEPLOYMENT_TARGET = 26.0;
};
name = Release;
};
@@ -581,37 +569,33 @@
0296B2EB2F38F8F7001C3BDB /* Build configuration list for PBXProject "Todos" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0296B3112F38F8F7001C3BDB /* Debug */,
0296B3122F38F8F7001C3BDB /* Release */,
0296B3112F38F8F7001C3BDB /* Debug configuration for PBXProject "Todos" */,
0296B3122F38F8F7001C3BDB /* Release configuration for PBXProject "Todos" */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
0296B3132F38F8F7001C3BDB /* Build configuration list for PBXNativeTarget "Todos" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0296B3142F38F8F7001C3BDB /* Debug */,
0296B3152F38F8F7001C3BDB /* Release */,
0296B3142F38F8F7001C3BDB /* Debug configuration for PBXNativeTarget "Todos" */,
0296B3152F38F8F7001C3BDB /* Release configuration for PBXNativeTarget "Todos" */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
0296B3162F38F8F7001C3BDB /* Build configuration list for PBXNativeTarget "TodosTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0296B3172F38F8F7001C3BDB /* Debug */,
0296B3182F38F8F7001C3BDB /* Release */,
0296B3172F38F8F7001C3BDB /* Debug configuration for PBXNativeTarget "TodosTests" */,
0296B3182F38F8F7001C3BDB /* Release configuration for PBXNativeTarget "TodosTests" */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
0296B3192F38F8F7001C3BDB /* Build configuration list for PBXNativeTarget "TodosUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0296B31A2F38F8F7001C3BDB /* Debug */,
0296B31B2F38F8F7001C3BDB /* Release */,
0296B31A2F38F8F7001C3BDB /* Debug configuration for PBXNativeTarget "TodosUITests" */,
0296B31B2F38F8F7001C3BDB /* Release configuration for PBXNativeTarget "TodosUITests" */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
@@ -23,5 +23,5 @@ final class TodosUITestsLaunchTests: XCTestCase {
attachment.lifetime = .keepAlways
add(attachment)
}
}
}
@@ -2,8 +2,8 @@ import Testing
struct TodosTests {
@Test func example() async throws {
@Test
func example() async throws {
// Write your test here and use APIs like `#expect(...)` to check expected conditions.
}
}