commit 35e7d1ea65e988b0b158fd2aa25cd9bb86f4190d from: Oliver Lowe date: Fri May 13 14:11:34 2022 UTC apple: get main app interface working with test data commit - 1ed36f6257c611d45fc129e4436a63b4513ba59e commit + 35e7d1ea65e988b0b158fd2aa25cd9bb86f4190d blob - 193ee72409b8b2a15037f9abbe1ec93489efbd1e (mode 644) blob + /dev/null --- apple/Alias.swift +++ /dev/null @@ -1,10 +0,0 @@ -import Foundation -import SwiftUI - -struct Alias: Hashable, Codable, Identifiable { - var id: Int - var recipient: String - var destination: String - var expiry: String - var note: String -} \ No newline at end of file blob - ee70c2e55a9cdf49943c48ccf17bf8db1752792a (mode 644) blob + /dev/null --- apple/AliasApp.swift +++ /dev/null @@ -1,10 +0,0 @@ -import SwiftUI - -@main -struct AliasApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} blob - /dev/null blob + 1d7727f6836df33996b61fa8eec8ac9602905853 (mode 644) --- /dev/null +++ apple/Shared/Alias.swift @@ -0,0 +1,25 @@ +import Foundation +import SwiftUI + +struct Alias: Hashable, Codable, Identifiable { + var id: String + var recipient: String + var destination: String + var expiry: Date + var note: String +} + +struct fAlias: Hashable, Codable { + var Recipient: String + var Destination: String + var Expiry: String + var Note: String +} + +func createAlias(note: String, expiry: Date) -> Void { + print("TODO tried to create an alias") +} + +func deleteAlias(recipient: String) -> Void { + print("TODO tried to delete \(recipient)") +} blob - /dev/null blob + 2e4904004e9ef2d86622b33d5ace5951419d6e77 (mode 644) --- /dev/null +++ apple/Shared/AliasData.swift @@ -0,0 +1,40 @@ +import Foundation + +var aliases: [Alias] = load("aliases.json") + +func load(_ filename: String) -> [Alias] { + let data: Data + + guard let file = Bundle.main.url(forResource: filename, withExtension: nil) + else { + fatalError("Couldn't find \(filename) in main bundle.") + } + + do { + data = try Data(contentsOf: file) + } catch { + fatalError("Couldn't load \(filename) from main bundle:\n\(error)") + } + + do { + let decoder = JSONDecoder() + var faliases: [fAlias] + var aliases = [Alias]() + faliases = try decoder.decode([fAlias].self, from: data) + let rfc3339 = DateFormatter() + rfc3339.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" + for fa in faliases { + let a = Alias( + id: fa.Recipient, + recipient: fa.Recipient, + destination: fa.Destination, + expiry: rfc3339.date(from: fa.Expiry) ?? Date(timeIntervalSince1970: 0), + note: fa.Note + ) + aliases.append(a) + } + return aliases + } catch { + fatalError("Couldn't parse \(filename): \(error)") + } +} blob - /dev/null blob + 9eaba13a4141a66a8956d2c31da261e80e4e8b95 (mode 644) --- /dev/null +++ apple/Shared/AliasDetail.swift @@ -0,0 +1,39 @@ +import SwiftUI + +struct AliasDetail: View { + var alias: Alias + + var body: some View { + List { + AliasAttribute(key: "Recipient", value: alias.recipient) + AliasAttribute(key: "Destination", value: alias.destination) + AliasAttribute(key: "Expiry", value: alias.expiry.description) + Section(header: Text("Note")) { + Text(alias.note) + } + } + .listStyle(.automatic) + .navigationTitle(alias.recipient) + .toolbar { + ToolbarItem(placement: .destructiveAction) { + Button(action: { + deleteAlias(recipient: alias.recipient) + }) { + Label("Delete", systemImage: "trash").foregroundColor(.red) + } + } + } + } +} + +struct AliasAttribute: View { + var key: String + var value: String + var body: some View { + HStack { + Text(key).bold() + Spacer() + Text(value) + } + } +} blob - /dev/null blob + 0ba64ae6c0442b7d1002d9510c7392aecacf3526 (mode 644) --- /dev/null +++ apple/Shared/AliasRow.swift @@ -0,0 +1,10 @@ +import SwiftUI + +struct AliasRow: View { + var alias: Alias + var body: some View { + HStack { + Text(alias.recipient) + } + } +} blob - /dev/null blob + eb8789700816459c1e1480e0b34781d9fb78a1ca (mode 644) --- /dev/null +++ apple/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} blob - /dev/null blob + c136eaff76757e350b64c7b5982d9c1f1dd4481f (mode 644) --- /dev/null +++ apple/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,148 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + }, + { + "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 + } +} blob - /dev/null blob + 73c00596a7fca3f3d4bdd64053b69d86745f9e10 (mode 644) --- /dev/null +++ apple/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} blob - /dev/null blob + 833de7c1dda364a437a3c8d23bb4329e1d5477e2 (mode 644) --- /dev/null +++ apple/Shared/aliases.json @@ -0,0 +1,14 @@ +[ + { + "Recipient": "windclothes_isoamarine17", + "Destination": "o@olowe.co", + "Expiry": "1970-01-01T00:00:00Z", + "Note": "for Acme Insurance marketing mail" + }, + { + "Recipient": "kotukutuku_cryptogamic30", + "Destination": "o@olowe.co", + "Expiry": "2023-06-10T10:23:45Z", + "Note": "newsletter for spam.example.org" + } +] blob - /dev/null blob + 6e254c565bfa91f843fd20f222472df2245483d9 (mode 644) --- /dev/null +++ apple/Shared/mailmuxApp.swift @@ -0,0 +1,80 @@ +import SwiftUI + +@main +struct mailmuxApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + .commands { + CommandGroup(after: CommandGroupPlacement.newItem) { + Button("New Alias...", action: { + print("clicked new from menu") + }) + } + } + #if os(macOS) + Settings { + Preferences() + } + #endif + } +} + +struct ContentView: View { + var body: some View { + AliasList(aliases: aliases) + } +} + +struct AliasList: View { + var aliases: [Alias] + @State private var createPresented: Bool = false + var body: some View { + NavigationView { + List(aliases) { alias in + NavigationLink { + AliasDetail(alias: alias) + } + label: { + AliasRow(alias: alias) + } + } + .navigationTitle("Aliases") + .sheet(isPresented: $createPresented) { + Create(presented: $createPresented) + } + .toolbar { + ToolbarItem(placement: .primaryAction) { + Button(action: { + createPresented = true + }) { + Label("Create", systemImage: "plus") + } + } + } + } + } +} + +struct CredentialsForm: View { + @AppStorage("username") private var username = "" + @AppStorage("password") private var password = "" + + var body: some View { + Form { + TextField(text: $username, prompt: Text("me@example.com")) { + Text("Username:") + } + SecureField(text: $password, prompt: Text("Required")) { + Text("Password:") + } + } + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} blob - 1a4f6ecc8d51ee6db1cf36fd216aa631bcce0d71 (mode 644) blob + /dev/null --- apple/AliasData.swift +++ /dev/null @@ -1,25 +0,0 @@ -import Foundation - -var aliases: [Alias] = load("aliases.json") - -func load(_ filename: String) -> T { - let data: Data - - guard let file = Bundle.main.url(forResource: filename, withExtension: nil) - else { - fatalError("Couldn't find \(filename) in main bundle.") - } - - do { - data = try Data(contentsOf: file) - } catch { - fatalError("Couldn't load \(filename) from main bundle:\n\(error)") - } - - do { - let decoder = JSONDecoder() - return try decoder.decode(T.self, from: data) - } catch { - fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") - } -} blob - /dev/null blob + 801d4508191112976ad8efbcbc377429c0926e8c (mode 644) --- /dev/null +++ apple/iOS/Create.swift @@ -0,0 +1,33 @@ +import SwiftUI + +struct Create: View { + @Binding var presented: Bool + @State private var note = "" + @State private var expiry = Date() + var body: some View { + NavigationView { + Form { + DatePicker("Expiry:", selection: $expiry, in: PartialRangeFrom(Date())) + Section(header: Text("Note")) { + TextEditor(text: $note) + } + } + .toolbar { + ToolbarItem(placement: .confirmationAction) { + Button("Create", action: { + createAlias(note: note, expiry: expiry) + presented = false + }) + .keyboardShortcut(.return) + } + ToolbarItem(placement: .cancellationAction) { + Button("Cancel", action: { + presented = false + }) + .keyboardShortcut(.cancelAction) + } + } + + } + } +} blob - /dev/null blob + 6ae8ce1425c4b42fd87fd78105f6c9d965663378 (mode 644) --- /dev/null +++ apple/iOS/Settings.swift @@ -0,0 +1,7 @@ +import SwiftUI + +struct Settings: View { + var body: some View { + CredentialsForm() + } +} blob - 38af6c41384a010c8dfa4f15d470d4f0d35f4936 (mode 644) blob + /dev/null --- apple/AliasDetail.swift +++ /dev/null @@ -1,31 +0,0 @@ -import SwiftUI - -struct AliasDetail: View { - var alias: Alias - - var body: some View { - ScrollView { - VStack(alignment: .leading) { - Text(alias.recipient) - .font(.title) - - HStack { - Text("Delivers to \(alias.destination)") - Spacer() - Text("Expires \(alias.expiry)") - } - .font(.subheadline) - .foregroundColor(.secondary) - - Divider() - - Text("Note") - .font(.title2) - Text(alias.note) - } - .padding() - } - .navigationTitle(alias.recipient) - .navigationBarTitleDisplayMode(.inline) - } -} \ No newline at end of file blob - /dev/null blob + e1f94bbb40f8ed1739ba272652318d701a8a4d18 (mode 644) --- /dev/null +++ apple/macOS/Create.swift @@ -0,0 +1,27 @@ +import SwiftUI + +struct Create: View { + @Binding var presented: Bool + @State private var note = "" + @State private var expiry = Date() + var body: some View { + Spacer() + HStack { + Spacer() + Form { + DatePicker("Expiry:", selection: $expiry, in: PartialRangeFrom(Date())) + TextField("Note:", text: $note, prompt: Text("Optional")) + HStack { + Button("Cancel", action: { + presented = false + }).keyboardShortcut(.cancelAction) + Button("Create", action: { + createAlias(note: note, expiry: expiry) + }).keyboardShortcut(.return) + } + } + Spacer() + } + Spacer() + } +} blob - /dev/null blob + 983e6002d278b14e1d2d88402e885aa98ebdb151 (mode 644) --- /dev/null +++ apple/macOS/Preferences.swift @@ -0,0 +1,13 @@ +import SwiftUI + +struct Preferences: View { + var body: some View { + Spacer() + HStack { + Spacer() + CredentialsForm() + Spacer() + } + Spacer() + } +} blob - /dev/null blob + f2ef3ae0265b40c475e8ef90e3a311c31786c594 (mode 644) --- /dev/null +++ apple/macOS/macOS.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + blob - 77b4451c90fc7372139d078016fe037b55378461 (mode 644) blob + /dev/null --- apple/AliasList.swift +++ /dev/null @@ -1,22 +0,0 @@ -import SwiftUI - -struct AliasList: View { - var body: some View { - NavigationView { - List(aliases) { alias in - NavigationLink { - AliasDetail(alias: alias) - } label: { - AliasRow(alias: alias) - } - } - .navigationTitle("Aliases") - } - } -} - -struct LandmarkList_Previews: PreviewProvider { - static var previews: some View { - AliasList() - } -} blob - /dev/null blob + a3f6560f003e204b3f28e611394adc841c641f48 (mode 644) --- /dev/null +++ apple/mailmux.xcodeproj/project.pbxproj @@ -0,0 +1,745 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 405422A8282E36E700B778CF /* Tests_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422A7282E36E700B778CF /* Tests_iOS.swift */; }; + 405422AA282E36E700B778CF /* Tests_iOSLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422A9282E36E700B778CF /* Tests_iOSLaunchTests.swift */; }; + 405422B4282E36E700B778CF /* Tests_macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422B3282E36E700B778CF /* Tests_macOS.swift */; }; + 405422B6282E36E700B778CF /* Tests_macOSLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422B5282E36E700B778CF /* Tests_macOSLaunchTests.swift */; }; + 405422B8282E36E700B778CF /* mailmuxApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4054228F282E36E400B778CF /* mailmuxApp.swift */; }; + 405422BB282E36E700B778CF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 40542291282E36E700B778CF /* Assets.xcassets */; }; + 405422BC282E36E700B778CF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 40542291282E36E700B778CF /* Assets.xcassets */; }; + 405422D4282E38A100B778CF /* AliasList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422CB282E38A100B778CF /* AliasList.swift */; }; + 405422D5282E38A100B778CF /* aliases.json in Resources */ = {isa = PBXBuildFile; fileRef = 405422CC282E38A100B778CF /* aliases.json */; }; + 405422D8282E38A100B778CF /* AliasData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422CF282E38A100B778CF /* AliasData.swift */; }; + 405422DA282E38A100B778CF /* Alias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422D1282E38A100B778CF /* Alias.swift */; }; + 405422DC282E38A100B778CF /* AliasRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422D3282E38A100B778CF /* AliasRow.swift */; }; + 4068C10D282E730300455B04 /* mailmuxApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4054228F282E36E400B778CF /* mailmuxApp.swift */; }; + 4068C10E282E730600455B04 /* Alias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422D1282E38A100B778CF /* Alias.swift */; }; + 4068C10F282E730900455B04 /* AliasData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422CF282E38A100B778CF /* AliasData.swift */; }; + 4068C110282E730C00455B04 /* AliasRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422D3282E38A100B778CF /* AliasRow.swift */; }; + 4068C111282E730F00455B04 /* AliasList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405422CB282E38A100B778CF /* AliasList.swift */; }; + 4068C113282E732E00455B04 /* aliases.json in Resources */ = {isa = PBXBuildFile; fileRef = 405422CC282E38A100B778CF /* aliases.json */; }; + 4068C115282E74A300455B04 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4068C114282E74A300455B04 /* Create.swift */; }; + 408C2D95282E8DEF00540E59 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408C2D94282E8DEF00540E59 /* Create.swift */; }; + 408C2D97282E9B1600540E59 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408C2D96282E9B1600540E59 /* Settings.swift */; }; + 40E153E5282E6CF900D30F9B /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40E153E4282E6CF900D30F9B /* Preferences.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 405422A4282E36E700B778CF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4054228A282E36E400B778CF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40542295282E36E700B778CF; + remoteInfo = "mailmux (iOS)"; + }; + 405422B0282E36E700B778CF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4054228A282E36E400B778CF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4054229B282E36E700B778CF; + remoteInfo = "mailmux (macOS)"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 4054228F282E36E400B778CF /* mailmuxApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = mailmuxApp.swift; sourceTree = ""; }; + 40542291282E36E700B778CF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 40542296282E36E700B778CF /* mailmux.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mailmux.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4054229C282E36E700B778CF /* mailmux.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mailmux.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4054229E282E36E700B778CF /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = ""; }; + 405422A3282E36E700B778CF /* Tests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 405422A7282E36E700B778CF /* Tests_iOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_iOS.swift; sourceTree = ""; }; + 405422A9282E36E700B778CF /* Tests_iOSLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_iOSLaunchTests.swift; sourceTree = ""; }; + 405422AF282E36E700B778CF /* Tests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 405422B3282E36E700B778CF /* Tests_macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_macOS.swift; sourceTree = ""; }; + 405422B5282E36E700B778CF /* Tests_macOSLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_macOSLaunchTests.swift; sourceTree = ""; }; + 405422CB282E38A100B778CF /* AliasList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AliasList.swift; path = Shared/AliasList.swift; sourceTree = SOURCE_ROOT; }; + 405422CC282E38A100B778CF /* aliases.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = aliases.json; path = Shared/aliases.json; sourceTree = SOURCE_ROOT; }; + 405422CF282E38A100B778CF /* AliasData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AliasData.swift; path = Shared/AliasData.swift; sourceTree = SOURCE_ROOT; }; + 405422D1282E38A100B778CF /* Alias.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Alias.swift; path = Shared/Alias.swift; sourceTree = SOURCE_ROOT; }; + 405422D3282E38A100B778CF /* AliasRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AliasRow.swift; path = Shared/AliasRow.swift; sourceTree = SOURCE_ROOT; }; + 4068C114282E74A300455B04 /* Create.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Create.swift; sourceTree = ""; }; + 408C2D94282E8DEF00540E59 /* Create.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Create.swift; sourceTree = ""; }; + 408C2D96282E9B1600540E59 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; + 40E153E4282E6CF900D30F9B /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 40542293282E36E700B778CF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40542299282E36E700B778CF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 405422A0282E36E700B778CF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 405422AC282E36E700B778CF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 40542289282E36E400B778CF = { + isa = PBXGroup; + children = ( + 408C2D93282E8DE400540E59 /* iOS */, + 4054228E282E36E400B778CF /* Shared */, + 4054229D282E36E700B778CF /* macOS */, + 405422A6282E36E700B778CF /* Tests iOS */, + 405422B2282E36E700B778CF /* Tests macOS */, + 40542297282E36E700B778CF /* Products */, + ); + sourceTree = ""; + }; + 4054228E282E36E400B778CF /* Shared */ = { + isa = PBXGroup; + children = ( + 4054228F282E36E400B778CF /* mailmuxApp.swift */, + 405422D1282E38A100B778CF /* Alias.swift */, + 405422CF282E38A100B778CF /* AliasData.swift */, + 405422D3282E38A100B778CF /* AliasRow.swift */, + 405422CB282E38A100B778CF /* AliasList.swift */, + 40542291282E36E700B778CF /* Assets.xcassets */, + 405422CC282E38A100B778CF /* aliases.json */, + ); + path = Shared; + sourceTree = ""; + usesTabs = 1; + }; + 40542297282E36E700B778CF /* Products */ = { + isa = PBXGroup; + children = ( + 40542296282E36E700B778CF /* mailmux.app */, + 4054229C282E36E700B778CF /* mailmux.app */, + 405422A3282E36E700B778CF /* Tests iOS.xctest */, + 405422AF282E36E700B778CF /* Tests macOS.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 4054229D282E36E700B778CF /* macOS */ = { + isa = PBXGroup; + children = ( + 4068C114282E74A300455B04 /* Create.swift */, + 40E153E4282E6CF900D30F9B /* Preferences.swift */, + 4054229E282E36E700B778CF /* macOS.entitlements */, + ); + path = macOS; + sourceTree = ""; + }; + 405422A6282E36E700B778CF /* Tests iOS */ = { + isa = PBXGroup; + children = ( + 405422A7282E36E700B778CF /* Tests_iOS.swift */, + 405422A9282E36E700B778CF /* Tests_iOSLaunchTests.swift */, + ); + path = "Tests iOS"; + sourceTree = ""; + }; + 405422B2282E36E700B778CF /* Tests macOS */ = { + isa = PBXGroup; + children = ( + 405422B3282E36E700B778CF /* Tests_macOS.swift */, + 405422B5282E36E700B778CF /* Tests_macOSLaunchTests.swift */, + ); + path = "Tests macOS"; + sourceTree = ""; + }; + 408C2D93282E8DE400540E59 /* iOS */ = { + isa = PBXGroup; + children = ( + 408C2D94282E8DEF00540E59 /* Create.swift */, + 408C2D96282E9B1600540E59 /* Settings.swift */, + ); + path = iOS; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 40542295282E36E700B778CF /* mailmux (iOS) */ = { + isa = PBXNativeTarget; + buildConfigurationList = 405422BF282E36E700B778CF /* Build configuration list for PBXNativeTarget "mailmux (iOS)" */; + buildPhases = ( + 40542292282E36E700B778CF /* Sources */, + 40542293282E36E700B778CF /* Frameworks */, + 40542294282E36E700B778CF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "mailmux (iOS)"; + productName = "mailmux (iOS)"; + productReference = 40542296282E36E700B778CF /* mailmux.app */; + productType = "com.apple.product-type.application"; + }; + 4054229B282E36E700B778CF /* mailmux (macOS) */ = { + isa = PBXNativeTarget; + buildConfigurationList = 405422C2282E36E700B778CF /* Build configuration list for PBXNativeTarget "mailmux (macOS)" */; + buildPhases = ( + 40542298282E36E700B778CF /* Sources */, + 40542299282E36E700B778CF /* Frameworks */, + 4054229A282E36E700B778CF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "mailmux (macOS)"; + productName = "mailmux (macOS)"; + productReference = 4054229C282E36E700B778CF /* mailmux.app */; + productType = "com.apple.product-type.application"; + }; + 405422A2282E36E700B778CF /* Tests iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 405422C5282E36E700B778CF /* Build configuration list for PBXNativeTarget "Tests iOS" */; + buildPhases = ( + 4054229F282E36E700B778CF /* Sources */, + 405422A0282E36E700B778CF /* Frameworks */, + 405422A1282E36E700B778CF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 405422A5282E36E700B778CF /* PBXTargetDependency */, + ); + name = "Tests iOS"; + productName = "Tests iOS"; + productReference = 405422A3282E36E700B778CF /* Tests iOS.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 405422AE282E36E700B778CF /* Tests macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 405422C8282E36E700B778CF /* Build configuration list for PBXNativeTarget "Tests macOS" */; + buildPhases = ( + 405422AB282E36E700B778CF /* Sources */, + 405422AC282E36E700B778CF /* Frameworks */, + 405422AD282E36E700B778CF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 405422B1282E36E700B778CF /* PBXTargetDependency */, + ); + name = "Tests macOS"; + productName = "Tests macOS"; + productReference = 405422AF282E36E700B778CF /* Tests macOS.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4054228A282E36E400B778CF /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1330; + LastUpgradeCheck = 1330; + TargetAttributes = { + 40542295282E36E700B778CF = { + CreatedOnToolsVersion = 13.3.1; + }; + 4054229B282E36E700B778CF = { + CreatedOnToolsVersion = 13.3.1; + }; + 405422A2282E36E700B778CF = { + CreatedOnToolsVersion = 13.3.1; + TestTargetID = 40542295282E36E700B778CF; + }; + 405422AE282E36E700B778CF = { + CreatedOnToolsVersion = 13.3.1; + TestTargetID = 4054229B282E36E700B778CF; + }; + }; + }; + buildConfigurationList = 4054228D282E36E400B778CF /* Build configuration list for PBXProject "mailmux" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 40542289282E36E400B778CF; + productRefGroup = 40542297282E36E700B778CF /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 40542295282E36E700B778CF /* mailmux (iOS) */, + 4054229B282E36E700B778CF /* mailmux (macOS) */, + 405422A2282E36E700B778CF /* Tests iOS */, + 405422AE282E36E700B778CF /* Tests macOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 40542294282E36E700B778CF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4068C113282E732E00455B04 /* aliases.json in Resources */, + 405422BB282E36E700B778CF /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4054229A282E36E700B778CF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 405422D5282E38A100B778CF /* aliases.json in Resources */, + 405422BC282E36E700B778CF /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 405422A1282E36E700B778CF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 405422AD282E36E700B778CF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 40542292282E36E700B778CF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4068C10E282E730600455B04 /* Alias.swift in Sources */, + 4068C10F282E730900455B04 /* AliasData.swift in Sources */, + 4068C10D282E730300455B04 /* mailmuxApp.swift in Sources */, + 4068C110282E730C00455B04 /* AliasRow.swift in Sources */, + 408C2D97282E9B1600540E59 /* Settings.swift in Sources */, + 408C2D95282E8DEF00540E59 /* Create.swift in Sources */, + 4068C111282E730F00455B04 /* AliasList.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40542298282E36E700B778CF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 405422DA282E38A100B778CF /* Alias.swift in Sources */, + 405422DC282E38A100B778CF /* AliasRow.swift in Sources */, + 405422B8282E36E700B778CF /* mailmuxApp.swift in Sources */, + 405422D4282E38A100B778CF /* AliasList.swift in Sources */, + 40E153E5282E6CF900D30F9B /* Preferences.swift in Sources */, + 4068C115282E74A300455B04 /* Create.swift in Sources */, + 405422D8282E38A100B778CF /* AliasData.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4054229F282E36E700B778CF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 405422AA282E36E700B778CF /* Tests_iOSLaunchTests.swift in Sources */, + 405422A8282E36E700B778CF /* Tests_iOS.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 405422AB282E36E700B778CF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 405422B6282E36E700B778CF /* Tests_macOSLaunchTests.swift in Sources */, + 405422B4282E36E700B778CF /* Tests_macOS.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 405422A5282E36E700B778CF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40542295282E36E700B778CF /* mailmux (iOS) */; + targetProxy = 405422A4282E36E700B778CF /* PBXContainerItemProxy */; + }; + 405422B1282E36E700B778CF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4054229B282E36E700B778CF /* mailmux (macOS) */; + targetProxy = 405422B0282E36E700B778CF /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 405422BD282E36E700B778CF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + 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; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 405422BE282E36E700B778CF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + 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-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + 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; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 405422C0282E36E700B778CF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.mailmux.mailmux; + PRODUCT_NAME = mailmux; + SDKROOT = iphoneos; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 405422C1282E36E700B778CF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.mailmux.mailmux; + PRODUCT_NAME = mailmux; + SDKROOT = iphoneos; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 405422C3282E36E700B778CF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.mailmux.mailmux; + PRODUCT_NAME = mailmux; + SDKROOT = macosx; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 405422C4282E36E700B778CF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.mailmux.mailmux; + PRODUCT_NAME = mailmux; + SDKROOT = macosx; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 405422C6282E36E700B778CF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "net.mailmux.Tests-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = "mailmux (iOS)"; + }; + name = Debug; + }; + 405422C7282E36E700B778CF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "net.mailmux.Tests-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = "mailmux (iOS)"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 405422C9282E36E700B778CF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "net.mailmux.Tests-macOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = "mailmux (macOS)"; + }; + name = Debug; + }; + 405422CA282E36E700B778CF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "net.mailmux.Tests-macOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = "mailmux (macOS)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4054228D282E36E400B778CF /* Build configuration list for PBXProject "mailmux" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 405422BD282E36E700B778CF /* Debug */, + 405422BE282E36E700B778CF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 405422BF282E36E700B778CF /* Build configuration list for PBXNativeTarget "mailmux (iOS)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 405422C0282E36E700B778CF /* Debug */, + 405422C1282E36E700B778CF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 405422C2282E36E700B778CF /* Build configuration list for PBXNativeTarget "mailmux (macOS)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 405422C3282E36E700B778CF /* Debug */, + 405422C4282E36E700B778CF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 405422C5282E36E700B778CF /* Build configuration list for PBXNativeTarget "Tests iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 405422C6282E36E700B778CF /* Debug */, + 405422C7282E36E700B778CF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 405422C8282E36E700B778CF /* Build configuration list for PBXNativeTarget "Tests macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 405422C9282E36E700B778CF /* Debug */, + 405422CA282E36E700B778CF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4054228A282E36E400B778CF /* Project object */; +} blob - /dev/null blob + 919434a6254f0e9651f402737811be6634a03e9c (mode 644) --- /dev/null +++ apple/mailmux.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + blob - /dev/null blob + 18d981003d68d0546c4804ac2ff47dd97c6e7921 (mode 644) --- /dev/null +++ apple/mailmux.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + blob - /dev/null blob + 3faa664ef66e1539df9d1ad48962039e29646a90 (mode 644) Binary files /dev/null and apple/mailmux.xcodeproj/project.xcworkspace/xcuserdata/otl.xcuserdatad/UserInterfaceState.xcuserstate differ blob - /dev/null blob + 2e0c08c1054ad49fe3b0478a470b3d4398aaec68 (mode 644) --- /dev/null +++ apple/mailmux.xcodeproj/xcuserdata/otl.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + blob - /dev/null blob + b5c30e0501b4caeb0bff655b62f2d7aa147d29df (mode 644) --- /dev/null +++ apple/mailmux.xcodeproj/xcuserdata/otl.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,19 @@ + + + + + SchemeUserState + + mailmux (iOS).xcscheme_^#shared#^_ + + orderHint + 1 + + mailmux (macOS).xcscheme_^#shared#^_ + + orderHint + 0 + + + + blob - 39d0dd052dfbd852651230635bb6780dbd1337d3 (mode 644) blob + /dev/null --- apple/AliasRow.swift +++ /dev/null @@ -1,21 +0,0 @@ -import SwiftUI - -struct AliasRow: View { - var alias: Alias - - var body: some View { - HStack { - Text(alias.recipient) - } - } -} - -struct LandmarkRow_Previews: PreviewProvider { - static var previews: some View { - Group { - AliasRow(alias: aliases[0]) - AliasRow(alias: aliases[1]) - } - .previewLayout(.fixed(width: 300, height: 70)) - } -} blob - a4fc745a011e67b81d1c1bc2732d56e8f5d55a15 (mode 644) blob + /dev/null --- apple/ContentView.swift +++ /dev/null @@ -1,13 +0,0 @@ -import SwiftUI - -struct ContentView: View { - var body: some View { - AliasList() - } -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} blob - 09888a84e017e83bc71e1e843ba854aad514ef1f (mode 644) blob + /dev/null --- apple/Login.swift +++ /dev/null @@ -1,13 +0,0 @@ -import SwiftUI - -struct Login: View { - var body: some View { - Form { - TextField(text: $username, prompt: Text("me@example.com")) { - Text("Username") - } - SecureField(text: $password, prompt: Text("Required")) { - Text("Password") - } - } -} \ No newline at end of file blob - a8aba7b257748713587713472bae813d4ef56353 blob + 8fe5766bd560d0ad5698e0ff91814aaf5e263b2f --- apple/README +++ apple/README @@ -1,2 +1 @@ -This is untested barebones SwiftUI code for creating a CRUD macOS, iOS, iPadOS -app for mailmux. +A macOS, iOS, iPadOS app for interacting with mailmux as a non-administrative user. blob - aa73bf51dee87c2735db641552498e2e93b21b03 (mode 644) blob + /dev/null --- apple/aliases.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "Recipient": "windclothes_isoamarine17", - "Destination": "o@olowe.co", - "Expiry": "1970-01-01T00:00:00Z", - "Note": "" - }, - { - "Recipient": "kotukutuku_cryptogamic30", - "Destination": "o@olowe.co", - "Expiry": "1970-01-01T00:00:00Z", - "Note": "" - } -] \ No newline at end of file