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:
+55
@@ -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
|
||||
|
||||
@@ -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")
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user