Initial Commit
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"default-configuration": "Release",
|
||||
"configurations": [
|
||||
"Debug",
|
||||
"Release",
|
||||
],
|
||||
"localizations": {
|
||||
"development": "en",
|
||||
"supported": [
|
||||
"Base",
|
||||
],
|
||||
},
|
||||
"files": [
|
||||
{ "kind": "folder", "path": "MikeMail", "target-membership": [ "MikeMail" ] },
|
||||
{ "kind": "folder", "path": "MikeMailTests", "target-membership": [ "MikeMailTests" ] },
|
||||
{ "kind": "folder", "path": "MikeMailUITests", "target-membership": [ "MikeMailUITests" ] },
|
||||
{
|
||||
"kind": "group",
|
||||
"name": "Products",
|
||||
"children": [
|
||||
{ "path": "<PRODUCTS>/MikeMail.app", "id": "4C847ED9309E3BBF00AA96B9", "type": "wrapper.application", "index": false },
|
||||
{ "path": "<PRODUCTS>/MikeMailTests.xctest", "id": "4C847EE8309E3BC000AA96B9", "type": "wrapper.cfbundle", "index": false },
|
||||
{ "path": "<PRODUCTS>/MikeMailUITests.xctest", "id": "4C847EF2309E3BC000AA96B9", "type": "wrapper.cfbundle", "index": false },
|
||||
],
|
||||
},
|
||||
],
|
||||
"targets": [
|
||||
{
|
||||
"name": "MikeMail",
|
||||
"id": "4C847ED8309E3BBF00AA96B9",
|
||||
"product": "Products/MikeMail.app",
|
||||
"product-type": "application",
|
||||
"build-phases": [
|
||||
"compile-sources",
|
||||
"frameworks",
|
||||
"resources",
|
||||
],
|
||||
"build-settings": {
|
||||
"ASSETCATALOG_COMPILER_APPICON_NAME": "AppIcon",
|
||||
"ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME": "AccentColor",
|
||||
"CODE_SIGN_STYLE": "Automatic",
|
||||
"COMBINE_HIDPI_IMAGES": "YES",
|
||||
"CURRENT_PROJECT_VERSION": "1",
|
||||
"DEVELOPMENT_TEAM": "GQR972L9NJ",
|
||||
"ENABLE_APP_SANDBOX": "YES",
|
||||
"ENABLE_HARDENED_RUNTIME": "YES",
|
||||
"ENABLE_PREVIEWS": "YES",
|
||||
"ENABLE_USER_SELECTED_FILES": "readonly",
|
||||
"GENERATE_INFOPLIST_FILE": "YES",
|
||||
"INFOPLIST_KEY_NSHumanReadableCopyright": "",
|
||||
"LD_RUNPATH_SEARCH_PATHS": [
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
],
|
||||
"MARKETING_VERSION": "1.0",
|
||||
"PRODUCT_BUNDLE_IDENTIFIER": "Dr.-med.-Michael-Ku-bler.MikeMail",
|
||||
"PRODUCT_NAME": "$(TARGET_NAME)",
|
||||
"REGISTER_APP_GROUPS": "YES",
|
||||
"STRING_CATALOG_GENERATE_SYMBOLS": "YES",
|
||||
"SWIFT_APPROACHABLE_CONCURRENCY": "YES",
|
||||
"SWIFT_DEFAULT_ACTOR_ISOLATION": "MainActor",
|
||||
"SWIFT_EMIT_LOC_STRINGS": "YES",
|
||||
"SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY": "YES",
|
||||
"SWIFT_VERSION": "5.0",
|
||||
},
|
||||
}, {
|
||||
"name": "MikeMailTests",
|
||||
"id": "4C847EE7309E3BC000AA96B9",
|
||||
"product": "Products/MikeMailTests.xctest",
|
||||
"product-type": "bundle.unit-test",
|
||||
"test-host-target": "MikeMail",
|
||||
"dependencies": [
|
||||
"MikeMail",
|
||||
],
|
||||
"build-phases": [
|
||||
"compile-sources",
|
||||
"frameworks",
|
||||
"resources",
|
||||
],
|
||||
"build-settings": {
|
||||
"BUNDLE_LOADER": "$(TEST_HOST)",
|
||||
"CODE_SIGN_STYLE": "Automatic",
|
||||
"CURRENT_PROJECT_VERSION": "1",
|
||||
"DEVELOPMENT_TEAM": "GQR972L9NJ",
|
||||
"GENERATE_INFOPLIST_FILE": "YES",
|
||||
"MACOSX_DEPLOYMENT_TARGET": "27.2",
|
||||
"MARKETING_VERSION": "1.0",
|
||||
"PRODUCT_BUNDLE_IDENTIFIER": "Dr.-med.-Michael-Ku-bler.MikeMailTests",
|
||||
"PRODUCT_NAME": "$(TARGET_NAME)",
|
||||
"STRING_CATALOG_GENERATE_SYMBOLS": "NO",
|
||||
"SWIFT_APPROACHABLE_CONCURRENCY": "YES",
|
||||
"SWIFT_EMIT_LOC_STRINGS": "NO",
|
||||
"SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY": "YES",
|
||||
"SWIFT_VERSION": "5.0",
|
||||
"TEST_HOST": "$(BUILT_PRODUCTS_DIR)/MikeMail.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MikeMail",
|
||||
},
|
||||
}, {
|
||||
"name": "MikeMailUITests",
|
||||
"id": "4C847EF1309E3BC000AA96B9",
|
||||
"product": "Products/MikeMailUITests.xctest",
|
||||
"product-type": "bundle.ui-testing",
|
||||
"test-host-target": "MikeMail",
|
||||
"dependencies": [
|
||||
"MikeMail",
|
||||
],
|
||||
"build-phases": [
|
||||
"compile-sources",
|
||||
"frameworks",
|
||||
"resources",
|
||||
],
|
||||
"build-settings": {
|
||||
"CODE_SIGN_STYLE": "Automatic",
|
||||
"CURRENT_PROJECT_VERSION": "1",
|
||||
"DEVELOPMENT_TEAM": "GQR972L9NJ",
|
||||
"GENERATE_INFOPLIST_FILE": "YES",
|
||||
"MARKETING_VERSION": "1.0",
|
||||
"PRODUCT_BUNDLE_IDENTIFIER": "Dr.-med.-Michael-Ku-bler.MikeMailUITests",
|
||||
"PRODUCT_NAME": "$(TARGET_NAME)",
|
||||
"STRING_CATALOG_GENERATE_SYMBOLS": "NO",
|
||||
"SWIFT_APPROACHABLE_CONCURRENCY": "YES",
|
||||
"SWIFT_EMIT_LOC_STRINGS": "NO",
|
||||
"SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY": "YES",
|
||||
"SWIFT_VERSION": "5.0",
|
||||
"TEST_TARGET_NAME": "MikeMail",
|
||||
},
|
||||
},
|
||||
],
|
||||
"build-settings": {
|
||||
"ALWAYS_SEARCH_USER_PATHS": "NO",
|
||||
"ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS": "YES",
|
||||
"CLANG_ANALYZER_NONNULL": "YES",
|
||||
"CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION": "YES_AGGRESSIVE",
|
||||
"CLANG_CXX_LANGUAGE_STANDARD": "gnu++20",
|
||||
"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[config=Debug]": "dwarf",
|
||||
"DEBUG_INFORMATION_FORMAT[config=Release]": "dwarf-with-dsym",
|
||||
"DEVELOPMENT_TEAM": "GQR972L9NJ",
|
||||
"ENABLE_NS_ASSERTIONS[config=Release]": "NO",
|
||||
"ENABLE_STRICT_OBJC_MSGSEND": "YES",
|
||||
"ENABLE_TESTABILITY[config=Debug]": "YES",
|
||||
"ENABLE_USER_SCRIPT_SANDBOXING": "YES",
|
||||
"GCC_C_LANGUAGE_STANDARD": "gnu17",
|
||||
"GCC_DYNAMIC_NO_PIC[config=Debug]": "NO",
|
||||
"GCC_NO_COMMON_BLOCKS": "YES",
|
||||
"GCC_OPTIMIZATION_LEVEL[config=Debug]": "0",
|
||||
"GCC_PREPROCESSOR_DEFINITIONS[config=Debug]": [
|
||||
"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",
|
||||
"LOCALIZATION_PREFERS_STRING_CATALOGS": "YES",
|
||||
"MACOSX_DEPLOYMENT_TARGET": "27.2",
|
||||
"MTL_ENABLE_DEBUG_INFO[config=Debug]": "INCLUDE_SOURCE",
|
||||
"MTL_ENABLE_DEBUG_INFO[config=Release]": "NO",
|
||||
"MTL_FAST_MATH": "YES",
|
||||
"ONLY_ACTIVE_ARCH[config=Debug]": "YES",
|
||||
"SDKROOT": "macosx",
|
||||
"SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]": "DEBUG $(inherited)",
|
||||
"SWIFT_COMPILATION_MODE[config=Release]": "wholemodule",
|
||||
"SWIFT_OPTIMIZATION_LEVEL[config=Debug]": "-Onone",
|
||||
},
|
||||
"last-upgrade": "27.2",
|
||||
"last-swift-update": "27.2",
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?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>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>MikeMail.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "16x16"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "16x16"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "32x32"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "32x32"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "128x128"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "128x128"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "256x256"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "256x256"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "512x512"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "512x512"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
//
|
||||
// ContentView.swift
|
||||
// MikeMail
|
||||
//
|
||||
// Created by Dr. med. Michael Kübler on 06.11.26.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
struct ContentView: View {
|
||||
@Environment(\.modelContext) private var modelContext
|
||||
@Query private var items: [Item]
|
||||
|
||||
var body: some View {
|
||||
NavigationSplitView {
|
||||
List {
|
||||
ForEach(items) { item in
|
||||
NavigationLink {
|
||||
Text("Item at \(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard))")
|
||||
} label: {
|
||||
Text(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard))
|
||||
}
|
||||
}
|
||||
.onDelete(perform: deleteItems)
|
||||
}
|
||||
.navigationSplitViewColumnWidth(min: 180, ideal: 200)
|
||||
.toolbar {
|
||||
ToolbarItem {
|
||||
Button(action: addItem) {
|
||||
Label("Add Item", systemImage: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
} detail: {
|
||||
Text("Select an item")
|
||||
}
|
||||
}
|
||||
|
||||
private func addItem() {
|
||||
withAnimation {
|
||||
let newItem = Item(timestamp: Date())
|
||||
modelContext.insert(newItem)
|
||||
}
|
||||
}
|
||||
|
||||
private func deleteItems(offsets: IndexSet) {
|
||||
withAnimation {
|
||||
for index in offsets {
|
||||
modelContext.delete(items[index])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
ContentView()
|
||||
.modelContainer(for: Item.self, inMemory: true)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// Item.swift
|
||||
// MikeMail
|
||||
//
|
||||
// Created by Dr. med. Michael Kübler on 06.11.26.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftData
|
||||
|
||||
@Model
|
||||
final class Item {
|
||||
var timestamp: Date
|
||||
|
||||
init(timestamp: Date) {
|
||||
self.timestamp = timestamp
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
//
|
||||
// MikeMailApp.swift
|
||||
// MikeMail
|
||||
//
|
||||
// Created by Dr. med. Michael Kübler on 06.11.26.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
@main
|
||||
struct MikeMailApp: App {
|
||||
var sharedModelContainer: ModelContainer = {
|
||||
let schema = Schema([
|
||||
Item.self,
|
||||
])
|
||||
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
|
||||
|
||||
do {
|
||||
return try ModelContainer(for: schema, configurations: [modelConfiguration])
|
||||
} catch {
|
||||
fatalError("Could not create ModelContainer: \(error)")
|
||||
}
|
||||
}()
|
||||
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ContentView()
|
||||
}
|
||||
.modelContainer(sharedModelContainer)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// MikeMailTests.swift
|
||||
// MikeMailTests
|
||||
//
|
||||
// Created by Dr. med. Michael Kübler on 06.11.26.
|
||||
//
|
||||
|
||||
import Testing
|
||||
@testable import MikeMail
|
||||
|
||||
struct MikeMailTests {
|
||||
|
||||
@Test func example() async throws {
|
||||
// Write your test here and use APIs like `#expect(...)` to check expected conditions.
|
||||
// Swift Testing Documentation
|
||||
// https://developer.apple.com/documentation/testing
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
//
|
||||
// MikeMailUITests.swift
|
||||
// MikeMailUITests
|
||||
//
|
||||
// Created by Dr. med. Michael Kübler on 06.11.26.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
final class MikeMailUITests: XCTestCase {
|
||||
|
||||
override func setUpWithError() throws {
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
|
||||
// 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.
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func testExample() throws {
|
||||
// UI tests must launch the application that they test.
|
||||
let app = XCUIApplication()
|
||||
app.launch()
|
||||
|
||||
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||
// XCUIAutomation Documentation
|
||||
// https://developer.apple.com/documentation/xcuiautomation
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func testLaunchPerformance() throws {
|
||||
// This measures how long it takes to launch your application.
|
||||
measure(metrics: [XCTApplicationLaunchMetric()]) {
|
||||
XCUIApplication().launch()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user