├── AvocadoToast
├── Assets.xcassets
│ ├── Contents.json
│ └── AppIcon.appiconset
│ │ ├── ARI-bv-64x64.png
│ │ ├── ARI-bv-128x128.png
│ │ ├── ARI-bv-256x256.png
│ │ ├── ARI-bv-256x256-1.png
│ │ └── Contents.json
├── AvocadoToast.entitlements
├── AppDelegate.swift
├── Info.plist
└── Base.lproj
│ └── MainMenu.xib
├── Sources
└── AvocadoToast
│ ├── main.swift
│ ├── MainPage.swift
│ ├── OrderDetail.swift
│ ├── OrderHistory.swift
│ ├── OrderPage.swift
│ └── Model.swift
├── AvocadoToast.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── LICENSE.txt
├── CONTRIBUTING.md
├── Package.swift
├── .github
└── workflows
│ └── swift.yml
├── README.md
├── .gitignore
└── Makefile
/AvocadoToast/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SwiftWebUI/AvocadoToast/HEAD/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-64x64.png
--------------------------------------------------------------------------------
/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SwiftWebUI/AvocadoToast/HEAD/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-128x128.png
--------------------------------------------------------------------------------
/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SwiftWebUI/AvocadoToast/HEAD/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-256x256.png
--------------------------------------------------------------------------------
/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-256x256-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SwiftWebUI/AvocadoToast/HEAD/AvocadoToast/Assets.xcassets/AppIcon.appiconset/ARI-bv-256x256-1.png
--------------------------------------------------------------------------------
/Sources/AvocadoToast/main.swift:
--------------------------------------------------------------------------------
1 | // This is used when running AvocadoToast as a SwiftPM
2 | // tool (vs the Avocado Toast wrapper app).
3 |
4 | import SwiftWebUI
5 |
6 | SwiftWebUI.serve(MainPage())
7 |
--------------------------------------------------------------------------------
/AvocadoToast.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The source code is distributed under the terms of the Bad Code License.
2 | You are forbidden from distributing software containing the code to end
3 | users, because it is bad.
4 |
5 | Questions? wrong@alwaysrightinstitute.com.
6 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | ## Legal
2 |
3 | By submitting a pull request, you represent that you have the right to license
4 | your contribution to ZeeZide and the community, and agree by submitting the patch
5 | that your contributions are licensed under the Apache 2.0 license.
6 |
7 |
--------------------------------------------------------------------------------
/AvocadoToast.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AvocadoToast/AvocadoToast.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.files.user-selected.read-only
8 |
9 | com.apple.security.network.client
10 |
11 | com.apple.security.network.server
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.1
2 |
3 | import PackageDescription
4 |
5 | let package = Package(
6 | name: "AvocadoToast",
7 | platforms: [
8 | .macOS(.v10_15), .iOS(.v13)
9 | ],
10 | products: [
11 | .executable(name: "AvocadoToast", targets: [ "AvocadoToast" ])
12 | ],
13 | dependencies: [
14 | .package(url: "https://github.com/SwiftWebUI/SwiftWebUI.git",
15 | from: "0.3.2")
16 | ],
17 | targets: [
18 | .target(name: "AvocadoToast", dependencies: [ "SwiftWebUI" ])
19 | ]
20 | )
21 |
--------------------------------------------------------------------------------
/Sources/AvocadoToast/MainPage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AvocadoApp.swift
3 | // AvocadoToast
4 | //
5 | // Created by Helge Heß on 28.06.19.
6 | // Copyright © 2019 ZeeZide GmbH. All rights reserved.
7 | //
8 |
9 | import SwiftWebUI
10 |
11 | struct MainPage: View {
12 |
13 | var body: some View {
14 | TabView {
15 |
16 | OrderPage()
17 | .tabItem(Text("Order"))
18 |
19 | OrderHistory(previousOrders: previousOrders)
20 | .tabItem(Text("History"))
21 | }
22 | .padding()
23 | .relativeWidth(0.95)
24 | .relativeHeight(0.95)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/.github/workflows/swift.yml:
--------------------------------------------------------------------------------
1 | name: Build and Test
2 |
3 | on:
4 | push:
5 | pull_request:
6 | schedule:
7 | - cron: "0 9 * * 3"
8 |
9 | jobs:
10 | linux:
11 | runs-on: ubuntu-latest
12 | strategy:
13 | fail-fast: false
14 | matrix:
15 | image:
16 | - swift:5.9.2-focal
17 | container: ${{ matrix.image }}
18 | steps:
19 | - name: Checkout Repository
20 | uses: actions/checkout@v3
21 | - name: Build Swift Debug Package
22 | run: swift build -c debug
23 | - name: Build Swift Release Package
24 | run: swift build -c release
25 | nextstep:
26 | runs-on: macos-13
27 | steps:
28 | - name: Select latest available Xcode
29 | uses: maxim-lobanov/setup-xcode@v1
30 | with:
31 | xcode-version: '15.2.0'
32 | - name: Checkout Repository
33 | uses: actions/checkout@v3
34 | - name: Build Swift Debug Package
35 | run: swift build -c debug
36 | - name: Build Swift Release Package
37 | run: swift build -c release
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
SwiftWebUI: AvocadoToast
2 |
4 |
5 |
6 | 
7 | 
8 | 
9 | 
10 |
11 | A small SwiftWebUI sample based on the
12 | [SwiftUI Essentials](https://developer.apple.com/videos/play/wwdc2019/216)
13 | "Avocado Toast App".
14 |
15 | More details can be found on the related blog post at the
16 | [Always Right Institute](http://www.alwaysrightinstitute.com).
17 |
18 |
19 |
20 | ### Who
21 |
22 | Brought to you by
23 | [Helge Heß](https://github.com/helje5/) / [ZeeZide](https://zeezide.de).
24 | We like feedback, GitHub stars, cool contract work,
25 | presumably any form of praise you can think of.
26 |
--------------------------------------------------------------------------------
/Sources/AvocadoToast/OrderDetail.swift:
--------------------------------------------------------------------------------
1 | //
2 | // OrderDetail.swift
3 | // AvocadoToast
4 | //
5 | // Created by Helge Heß on 28.06.19.
6 | // Copyright © 2019 ZeeZide GmbH. All rights reserved.
7 | //
8 |
9 | import SwiftWebUI
10 |
11 | struct OrderDetail: View {
12 | let order : CompletedOrder
13 |
14 | var body: some View {
15 | VStack {
16 | Text(order.summary).font(.title)
17 |
18 | VStack(alignment: .leading) {
19 | Text(order.purchaseDate)
20 |
21 | HStack {
22 | if order.includeSalt {
23 | SaltIcon()
24 | }
25 | else {}
26 | if order.includeRedPepperFlakes {
27 | RedPepperFlakesIcon()
28 | }
29 | else {}
30 | }
31 |
32 | Spacer()
33 |
34 | Image.unsplash(size : UXSize(width: 480, height: 320),
35 | terms : order.summary
36 | .components(separatedBy: " ")
37 | .filter { $0 != "with" })
38 | }
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/AvocadoToast/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // AvocadoToast
4 | //
5 | // Created by Helge Heß on 28.06.19.
6 | // Copyright © 2019 Helge Heß. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 | import WebKit
11 | import SwiftWebUI
12 |
13 | @NSApplicationMain
14 | class AppDelegate: NSObject, NSApplicationDelegate, WKNavigationDelegate {
15 |
16 | @IBOutlet weak var window : NSWindow!
17 | @IBOutlet weak var webView : WKWebView!
18 |
19 | let request = URLRequest(url: URL(string: "http://127.0.0.1:1338/Tinker/")!)
20 |
21 | func applicationDidFinishLaunching(_ aNotification: Notification) {
22 | SwiftWebUI.serve(port: 1338, waitUntilDone: false) {
23 | MainPage()
24 | }
25 |
26 | webView.navigationDelegate = self
27 |
28 | // Give NIO a moment to bind
29 | DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(200)) {
30 | self.webView.load(self.request)
31 | self.window.makeKeyAndOrderFront(nil)
32 | }
33 | }
34 |
35 | func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication)
36 | -> Bool
37 | {
38 | return true
39 | }
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/Sources/AvocadoToast/OrderHistory.swift:
--------------------------------------------------------------------------------
1 | //
2 | // OrderHistory.swift
3 | // AvocadoToast
4 | //
5 | // Created by Helge Heß on 27.06.19.
6 | // Copyright © 2019 ZeeZide GmbH. All rights reserved.
7 | //
8 |
9 | import SwiftWebUI
10 |
11 | struct SaltIcon: View {
12 | let body = Text("🧂")
13 | }
14 | struct RedPepperFlakesIcon: View {
15 | let body = Text("🌶")
16 | }
17 |
18 | struct OrderCell: View {
19 | let order : CompletedOrder
20 |
21 | var body: some View {
22 | HStack {
23 | VStack(alignment: .leading) {
24 | Text(order.summary)
25 | Text(order.purchaseDate)
26 | .font(.subheadline)
27 | .foregroundColor(.secondary)
28 | }
29 | Spacer()
30 | if order.includeSalt {
31 | SaltIcon()
32 | }
33 | else {}
34 | if order.includeRedPepperFlakes {
35 | RedPepperFlakesIcon()
36 | }
37 | else {}
38 | }
39 | }
40 | }
41 |
42 | struct OrderHistory: View {
43 | let previousOrders : [ CompletedOrder ]
44 |
45 | var body: some View {
46 | NavigationView(emptyView: OrderDetail(order: previousOrders[0])) {
47 | List(previousOrders) { order in
48 | NavigationLink(destination: OrderDetail(order: order)) {
49 | OrderCell(order: order)
50 | }
51 | }
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/AvocadoToast/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | Copyright © 2019 Helge Heß. All rights reserved.
27 | NSMainNibFile
28 | MainMenu
29 | NSPrincipalClass
30 | NSApplication
31 | NSSupportsAutomaticTermination
32 |
33 | NSSupportsSuddenTermination
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/AvocadoToast/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "size" : "32x32",
20 | "idiom" : "mac",
21 | "filename" : "ARI-bv-64x64.png",
22 | "scale" : "2x"
23 | },
24 | {
25 | "size" : "128x128",
26 | "idiom" : "mac",
27 | "filename" : "ARI-bv-128x128.png",
28 | "scale" : "1x"
29 | },
30 | {
31 | "size" : "128x128",
32 | "idiom" : "mac",
33 | "filename" : "ARI-bv-256x256.png",
34 | "scale" : "2x"
35 | },
36 | {
37 | "size" : "256x256",
38 | "idiom" : "mac",
39 | "filename" : "ARI-bv-256x256-1.png",
40 | "scale" : "1x"
41 | },
42 | {
43 | "idiom" : "mac",
44 | "size" : "256x256",
45 | "scale" : "2x"
46 | },
47 | {
48 | "idiom" : "mac",
49 | "size" : "512x512",
50 | "scale" : "1x"
51 | },
52 | {
53 | "idiom" : "mac",
54 | "size" : "512x512",
55 | "scale" : "2x"
56 | }
57 | ],
58 | "info" : {
59 | "version" : 1,
60 | "author" : "xcode"
61 | }
62 | }
--------------------------------------------------------------------------------
/Sources/AvocadoToast/OrderPage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // OrderPage.swift
3 | // AvocadoToast
4 | //
5 | // Created by Helge Heß on 27.06.19.
6 | // Copyright © 2019 ZeeZide GmbH. All rights reserved.
7 | //
8 |
9 | import SwiftWebUI
10 |
11 | struct OrderPage: View {
12 |
13 | @State var order = Order()
14 |
15 | func submitOrder() {
16 | }
17 |
18 | var body: some View {
19 | Form {
20 | Section(header: Text("Avocado Toast").font(.title)) {
21 | Picker(selection: $order.breadType, label: Text("Bread")) {
22 | ForEach(BreadType.allCases) { breadType in
23 | Text(breadType.name).tag(breadType)
24 | }
25 | }
26 | .pickerStyle(.radioGroup)
27 |
28 | Picker(selection: $order.avocadoStyle, label: Text("Avocado")) {
29 | Text("Sliced").tag(AvocadoStyle.sliced)
30 | Text("Mashed").tag(AvocadoStyle.mashed)
31 | }
32 | .pickerStyle(.radioGroup)
33 |
34 | Picker(selection: $order.spread, label: Text("Spread")) {
35 | ForEach(Spread.allCases) { spread in
36 | Text(spread.name).tag(spread) // there is no .name?!
37 | }
38 | }
39 | }
40 |
41 | Section {
42 | Toggle(isOn: $order.includeSalt) {
43 | Text("Include Salt")
44 | }
45 | Toggle(isOn: $order.includeRedPepperFlakes) {
46 | Text("Include Red Pepper Flakes")
47 | }
48 | Stepper(value: $order.quantity, in: 1...10) {
49 | Text("Quantity: \(order.quantity)")
50 | }
51 | }
52 | Section {
53 | Button(action: submitOrder) {
54 | Text("🍞")
55 | Text("Order")
56 | }
57 | }
58 | }.padding()
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xcuserstate
23 |
24 | ## Obj-C/Swift specific
25 | *.hmap
26 | *.ipa
27 | *.dSYM.zip
28 | *.dSYM
29 |
30 | ## Playgrounds
31 | timeline.xctimeline
32 | playground.xcworkspace
33 |
34 | # Swift Package Manager
35 | #
36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
37 | # Packages/
38 | .build/
39 |
40 | # CocoaPods
41 | #
42 | # We recommend against adding the Pods directory to your .gitignore. However
43 | # you should judge for yourself, the pros and cons are mentioned at:
44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
45 | #
46 | # Pods/
47 |
48 | # Carthage
49 | #
50 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
51 | # Carthage/Checkouts
52 |
53 | Carthage/Build
54 |
55 | # fastlane
56 | #
57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
58 | # screenshots whenever they are needed.
59 | # For more information about the recommended setup visit:
60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
61 |
62 | fastlane/report.xml
63 | fastlane/Preview.html
64 | fastlane/screenshots
65 | fastlane/test_output
66 |
67 | # hh
68 | Packages
69 | Package.pins
70 | Package.resolved
71 | .docker.build
72 | *.old
73 |
74 | .buildzz
75 | .DS_Store
76 | .docker.build
77 | *~
78 |
79 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | # Makefile
2 |
3 | TOOL_NAME=AvocadoToast
4 |
5 | # local config
6 | SWIFT_BUILD=swift build
7 | SWIFT_CLEAN=swift package clean
8 | SWIFT_BUILD_DIR=.build
9 | SWIFT_TEST=swift test
10 | CONFIGURATION=release
11 |
12 | # docker config
13 | DOCKER_BUILD_DIR=".docker.build"
14 | #SWIFT_BUILD_IMAGE="swift:5.5.3"
15 | SWIFT_BUILD_IMAGE="helje5/arm64v8-swift-dev:5.5.3"
16 | SWIFT_DOCKER_BUILD_DIR="$(DOCKER_BUILD_DIR)/aarch64-unknown-linux/$(CONFIGURATION)"
17 | #SWIFT_DOCKER_BUILD_DIR="$(DOCKER_BUILD_DIR)/x86_64-unknown-linux/$(CONFIGURATION)"
18 | DOCKER_BUILD_PRODUCT="$(DOCKER_BUILD_DIR)/$(TOOL_NAME)"
19 |
20 |
21 | SWIFT_SOURCES=\
22 | Sources/*/*/*.swift \
23 | Sources/*/*/*/*.swift
24 |
25 | all:
26 | $(SWIFT_BUILD) -c $(CONFIGURATION)
27 |
28 | # Cannot test in `release` configuration?!
29 | test:
30 | $(SWIFT_TEST)
31 |
32 | clean :
33 | $(SWIFT_CLEAN)
34 | # We have a different definition of "clean", might be just German
35 | # pickyness.
36 | rm -rf $(SWIFT_BUILD_DIR)
37 |
38 | $(DOCKER_BUILD_PRODUCT): $(SWIFT_SOURCES)
39 | time docker run --rm \
40 | -v "$(PWD):/src" \
41 | -v "$(PWD)/$(DOCKER_BUILD_DIR):/src/.build" \
42 | "$(SWIFT_BUILD_IMAGE)" \
43 | bash -c 'cd /src && swift build -c $(CONFIGURATION)'
44 | ls -lah $(DOCKER_BUILD_PRODUCT)
45 |
46 | docker-all: $(DOCKER_BUILD_PRODUCT)
47 |
48 |
49 | docker-clean:
50 | rm -rf $(DOCKER_BUILD_PRODUCT)
51 |
52 | docker-distclean:
53 | rm -rf $(DOCKER_BUILD_DIR)
54 |
55 | distclean: clean docker-distclean
56 |
57 | docker-run:
58 | docker run --rm -it -p "127.0.0.1:1337:1337" \
59 | --name $(TOOL_NAME) \
60 | -v "$(PWD):/src" \
61 | -v "$(PWD)/$(DOCKER_BUILD_DIR):/src/.build" \
62 | "$(SWIFT_BUILD_IMAGE)" \
63 | /src/$(SWIFT_BUILD_DIR)/x86_64-unknown-linux/$(CONFIGURATION)/$(TOOL_NAME)
64 |
65 | docker-emacs:
66 | docker run --rm -it \
67 | -v "$(PWD):/src" \
68 | -v "$(PWD)/$(DOCKER_BUILD_DIR):/src/.build" \
69 | "$(SWIFT_BUILD_IMAGE)" \
70 | emacs /src
71 |
--------------------------------------------------------------------------------
/Sources/AvocadoToast/Model.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Model.swift
3 | // AvocadoToast
4 | //
5 | // Created by Helge Heß on 28.06.19.
6 | // Copyright © 2019-2024 ZeeZide GmbH. All rights reserved.
7 | //
8 |
9 | struct Order {
10 | var includeSalt = false
11 | var includeRedPepperFlakes = false
12 | var quantity = 0
13 | var avocadoStyle = AvocadoStyle.sliced
14 | var spread = Spread.none
15 | var breadType = BreadType.wheat
16 | }
17 |
18 | struct CompletedOrder: Identifiable {
19 | var id : Int
20 | var summary : String
21 | var purchaseDate : String
22 | var includeSalt = false
23 | var includeRedPepperFlakes = false
24 | }
25 |
26 |
27 | enum AvocadoStyle {
28 | case sliced, mashed
29 | }
30 |
31 | enum BreadType: CaseIterable, Hashable, Identifiable {
32 | case wheat, white, rhy
33 |
34 | var name: String { return "\(self)".capitalized }
35 | var id : Self { self }
36 | }
37 |
38 | enum Spread: CaseIterable, Hashable, Identifiable {
39 | case none, almondButter, peanutButter, honey
40 | case almou, tapenade, hummus, mayonnaise
41 | case kyopolou, adjvar, pindjur
42 | case vegemite, chutney, cannedCheese, feroce
43 | case kartoffelkase, tartarSauce
44 |
45 | var name: String {
46 | return "\(self)".map { $0.isUppercase ? " \($0)" : "\($0)" }
47 | .joined().capitalized
48 | }
49 | var id : Self { self }
50 | }
51 |
52 | let previousOrders : [ CompletedOrder ] = [
53 | .init(id: 1, summary: "Rye with Almond Butter", purchaseDate: "2019-05-30"),
54 | .init(id: 2, summary: "Multi-Grain with Hummus", purchaseDate: "2019-06-02",
55 | includeRedPepperFlakes: true),
56 | .init(id: 3, summary: "Sourdough with Chutney", purchaseDate: "2019-06-08",
57 | includeSalt: true, includeRedPepperFlakes: true),
58 | .init(id: 4, summary: "Rye with Peanut Butter", purchaseDate: "2019-06-09"),
59 | .init(id: 5, summary: "Wheat with Tapenade", purchaseDate: "2019-06-12"),
60 | .init(id: 6, summary: "Sourdough with Vegemite", purchaseDate: "2019-06-14",
61 | includeSalt: true),
62 | .init(id: 7, summary: "Wheat with Féroce", purchaseDate: "2019-06-31"),
63 | .init(id: 8, summary: "Rhy with Honey", purchaseDate: "2019-07-03"),
64 | .init(id: 9, summary: "Multigrain Toast", purchaseDate: "2019-07-04",
65 | includeSalt: true),
66 | .init(id: 10, summary: "Sourdough with Chutney", purchaseDate: "2019-07-06")
67 | ]
68 |
--------------------------------------------------------------------------------
/AvocadoToast.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | E8710E4E22C6BAD000692B84 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8710E4D22C6BAD000692B84 /* AppDelegate.swift */; };
11 | E8710E5022C6BAD200692B84 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E8710E4F22C6BAD200692B84 /* Assets.xcassets */; };
12 | E8710E5322C6BAD200692B84 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E8710E5122C6BAD200692B84 /* MainMenu.xib */; };
13 | E8710E6622C6BDD800692B84 /* OrderDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8710E6122C6BDD800692B84 /* OrderDetail.swift */; };
14 | E8710E6722C6BDD800692B84 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8710E6222C6BDD800692B84 /* Model.swift */; };
15 | E8710E6822C6BDD800692B84 /* MainPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8710E6322C6BDD800692B84 /* MainPage.swift */; };
16 | E8710E6922C6BDD800692B84 /* OrderHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8710E6422C6BDD800692B84 /* OrderHistory.swift */; };
17 | E8710E6A22C6BDD800692B84 /* OrderPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8710E6522C6BDD800692B84 /* OrderPage.swift */; };
18 | E896D2C72B6E7A21008FF8C8 /* SwiftWebUI in Frameworks */ = {isa = PBXBuildFile; productRef = E896D2C62B6E7A21008FF8C8 /* SwiftWebUI */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXFileReference section */
22 | E8710E4A22C6BAD000692B84 /* AvocadoToast.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AvocadoToast.app; sourceTree = BUILT_PRODUCTS_DIR; };
23 | E8710E4D22C6BAD000692B84 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
24 | E8710E4F22C6BAD200692B84 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
25 | E8710E5222C6BAD200692B84 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
26 | E8710E5422C6BAD200692B84 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
27 | E8710E5522C6BAD200692B84 /* AvocadoToast.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AvocadoToast.entitlements; sourceTree = ""; };
28 | E8710E5B22C6BBD100692B84 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; };
29 | E8710E5C22C6BBD200692B84 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
30 | E8710E5D22C6BBD200692B84 /* CONTRIBUTING.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CONTRIBUTING.md; sourceTree = ""; };
31 | E8710E6122C6BDD800692B84 /* OrderDetail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderDetail.swift; sourceTree = ""; };
32 | E8710E6222C6BDD800692B84 /* Model.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; };
33 | E8710E6322C6BDD800692B84 /* MainPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainPage.swift; sourceTree = ""; };
34 | E8710E6422C6BDD800692B84 /* OrderHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderHistory.swift; sourceTree = ""; };
35 | E8710E6522C6BDD800692B84 /* OrderPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderPage.swift; sourceTree = ""; };
36 | E8DC6B6F22CBB00A00ED5DA3 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
37 | /* End PBXFileReference section */
38 |
39 | /* Begin PBXFrameworksBuildPhase section */
40 | E8710E4722C6BAD000692B84 /* Frameworks */ = {
41 | isa = PBXFrameworksBuildPhase;
42 | buildActionMask = 2147483647;
43 | files = (
44 | E896D2C72B6E7A21008FF8C8 /* SwiftWebUI in Frameworks */,
45 | );
46 | runOnlyForDeploymentPostprocessing = 0;
47 | };
48 | /* End PBXFrameworksBuildPhase section */
49 |
50 | /* Begin PBXGroup section */
51 | E8710E4122C6BAD000692B84 = {
52 | isa = PBXGroup;
53 | children = (
54 | E8710E5C22C6BBD200692B84 /* README.md */,
55 | E8DC6B6D22CBA9CA00ED5DA3 /* Sources */,
56 | E8710E4C22C6BAD000692B84 /* AvocadoToast */,
57 | E8710E5D22C6BBD200692B84 /* CONTRIBUTING.md */,
58 | E8710E5B22C6BBD100692B84 /* LICENSE.txt */,
59 | E8710E4B22C6BAD000692B84 /* Products */,
60 | );
61 | sourceTree = "";
62 | };
63 | E8710E4B22C6BAD000692B84 /* Products */ = {
64 | isa = PBXGroup;
65 | children = (
66 | E8710E4A22C6BAD000692B84 /* AvocadoToast.app */,
67 | );
68 | name = Products;
69 | sourceTree = "";
70 | };
71 | E8710E4C22C6BAD000692B84 /* AvocadoToast */ = {
72 | isa = PBXGroup;
73 | children = (
74 | E8710E4D22C6BAD000692B84 /* AppDelegate.swift */,
75 | E8710E4F22C6BAD200692B84 /* Assets.xcassets */,
76 | E8710E5122C6BAD200692B84 /* MainMenu.xib */,
77 | E8710E5422C6BAD200692B84 /* Info.plist */,
78 | E8710E5522C6BAD200692B84 /* AvocadoToast.entitlements */,
79 | );
80 | path = AvocadoToast;
81 | sourceTree = "";
82 | };
83 | E8DC6B6D22CBA9CA00ED5DA3 /* Sources */ = {
84 | isa = PBXGroup;
85 | children = (
86 | E8DC6B6E22CBA9E300ED5DA3 /* AvocadoToast */,
87 | );
88 | path = Sources;
89 | sourceTree = "";
90 | };
91 | E8DC6B6E22CBA9E300ED5DA3 /* AvocadoToast */ = {
92 | isa = PBXGroup;
93 | children = (
94 | E8DC6B6F22CBB00A00ED5DA3 /* main.swift */,
95 | E8710E6322C6BDD800692B84 /* MainPage.swift */,
96 | E8710E6222C6BDD800692B84 /* Model.swift */,
97 | E8710E6122C6BDD800692B84 /* OrderDetail.swift */,
98 | E8710E6422C6BDD800692B84 /* OrderHistory.swift */,
99 | E8710E6522C6BDD800692B84 /* OrderPage.swift */,
100 | );
101 | path = AvocadoToast;
102 | sourceTree = "";
103 | };
104 | /* End PBXGroup section */
105 |
106 | /* Begin PBXNativeTarget section */
107 | E8710E4922C6BAD000692B84 /* AvocadoToast */ = {
108 | isa = PBXNativeTarget;
109 | buildConfigurationList = E8710E5822C6BAD200692B84 /* Build configuration list for PBXNativeTarget "AvocadoToast" */;
110 | buildPhases = (
111 | E8710E4622C6BAD000692B84 /* Sources */,
112 | E8710E4722C6BAD000692B84 /* Frameworks */,
113 | E8710E4822C6BAD000692B84 /* Resources */,
114 | );
115 | buildRules = (
116 | );
117 | dependencies = (
118 | E8710E6C22C6BE8600692B84 /* PBXTargetDependency */,
119 | );
120 | name = AvocadoToast;
121 | packageProductDependencies = (
122 | E896D2C62B6E7A21008FF8C8 /* SwiftWebUI */,
123 | );
124 | productName = AvocadoToast;
125 | productReference = E8710E4A22C6BAD000692B84 /* AvocadoToast.app */;
126 | productType = "com.apple.product-type.application";
127 | };
128 | /* End PBXNativeTarget section */
129 |
130 | /* Begin PBXProject section */
131 | E8710E4222C6BAD000692B84 /* Project object */ = {
132 | isa = PBXProject;
133 | attributes = {
134 | BuildIndependentTargetsInParallel = YES;
135 | LastSwiftUpdateCheck = 1100;
136 | LastUpgradeCheck = 1520;
137 | ORGANIZATIONNAME = "Helge Heß";
138 | TargetAttributes = {
139 | E8710E4922C6BAD000692B84 = {
140 | CreatedOnToolsVersion = 11.0;
141 | };
142 | };
143 | };
144 | buildConfigurationList = E8710E4522C6BAD000692B84 /* Build configuration list for PBXProject "AvocadoToast" */;
145 | compatibilityVersion = "Xcode 9.3";
146 | developmentRegion = en;
147 | hasScannedForEncodings = 0;
148 | knownRegions = (
149 | en,
150 | Base,
151 | );
152 | mainGroup = E8710E4122C6BAD000692B84;
153 | packageReferences = (
154 | E896D2C52B6E7A21008FF8C8 /* XCRemoteSwiftPackageReference "SwiftWebUI" */,
155 | );
156 | productRefGroup = E8710E4B22C6BAD000692B84 /* Products */;
157 | projectDirPath = "";
158 | projectRoot = "";
159 | targets = (
160 | E8710E4922C6BAD000692B84 /* AvocadoToast */,
161 | );
162 | };
163 | /* End PBXProject section */
164 |
165 | /* Begin PBXResourcesBuildPhase section */
166 | E8710E4822C6BAD000692B84 /* Resources */ = {
167 | isa = PBXResourcesBuildPhase;
168 | buildActionMask = 2147483647;
169 | files = (
170 | E8710E5022C6BAD200692B84 /* Assets.xcassets in Resources */,
171 | E8710E5322C6BAD200692B84 /* MainMenu.xib in Resources */,
172 | );
173 | runOnlyForDeploymentPostprocessing = 0;
174 | };
175 | /* End PBXResourcesBuildPhase section */
176 |
177 | /* Begin PBXSourcesBuildPhase section */
178 | E8710E4622C6BAD000692B84 /* Sources */ = {
179 | isa = PBXSourcesBuildPhase;
180 | buildActionMask = 2147483647;
181 | files = (
182 | E8710E6922C6BDD800692B84 /* OrderHistory.swift in Sources */,
183 | E8710E6A22C6BDD800692B84 /* OrderPage.swift in Sources */,
184 | E8710E6722C6BDD800692B84 /* Model.swift in Sources */,
185 | E8710E6822C6BDD800692B84 /* MainPage.swift in Sources */,
186 | E8710E4E22C6BAD000692B84 /* AppDelegate.swift in Sources */,
187 | E8710E6622C6BDD800692B84 /* OrderDetail.swift in Sources */,
188 | );
189 | runOnlyForDeploymentPostprocessing = 0;
190 | };
191 | /* End PBXSourcesBuildPhase section */
192 |
193 | /* Begin PBXTargetDependency section */
194 | E8710E6C22C6BE8600692B84 /* PBXTargetDependency */ = {
195 | isa = PBXTargetDependency;
196 | productRef = E8710E6B22C6BE8600692B84 /* SwiftWebUI */;
197 | };
198 | /* End PBXTargetDependency section */
199 |
200 | /* Begin PBXVariantGroup section */
201 | E8710E5122C6BAD200692B84 /* MainMenu.xib */ = {
202 | isa = PBXVariantGroup;
203 | children = (
204 | E8710E5222C6BAD200692B84 /* Base */,
205 | );
206 | name = MainMenu.xib;
207 | sourceTree = "";
208 | };
209 | /* End PBXVariantGroup section */
210 |
211 | /* Begin XCBuildConfiguration section */
212 | E8710E5622C6BAD200692B84 /* Debug */ = {
213 | isa = XCBuildConfiguration;
214 | buildSettings = {
215 | ALWAYS_SEARCH_USER_PATHS = NO;
216 | CLANG_ANALYZER_NONNULL = YES;
217 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
218 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
219 | CLANG_CXX_LIBRARY = "libc++";
220 | CLANG_ENABLE_MODULES = YES;
221 | CLANG_ENABLE_OBJC_ARC = YES;
222 | CLANG_ENABLE_OBJC_WEAK = YES;
223 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
224 | CLANG_WARN_BOOL_CONVERSION = YES;
225 | CLANG_WARN_COMMA = YES;
226 | CLANG_WARN_CONSTANT_CONVERSION = YES;
227 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
228 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
229 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
230 | CLANG_WARN_EMPTY_BODY = YES;
231 | CLANG_WARN_ENUM_CONVERSION = YES;
232 | CLANG_WARN_INFINITE_RECURSION = YES;
233 | CLANG_WARN_INT_CONVERSION = YES;
234 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
235 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
236 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
237 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
238 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
239 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
240 | CLANG_WARN_STRICT_PROTOTYPES = YES;
241 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
242 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
243 | CLANG_WARN_UNREACHABLE_CODE = YES;
244 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
245 | COPY_PHASE_STRIP = NO;
246 | DEAD_CODE_STRIPPING = YES;
247 | DEBUG_INFORMATION_FORMAT = dwarf;
248 | ENABLE_STRICT_OBJC_MSGSEND = YES;
249 | ENABLE_TESTABILITY = YES;
250 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
251 | GCC_C_LANGUAGE_STANDARD = gnu11;
252 | GCC_DYNAMIC_NO_PIC = NO;
253 | GCC_NO_COMMON_BLOCKS = YES;
254 | GCC_OPTIMIZATION_LEVEL = 0;
255 | GCC_PREPROCESSOR_DEFINITIONS = (
256 | "DEBUG=1",
257 | "$(inherited)",
258 | );
259 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
260 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
261 | GCC_WARN_UNDECLARED_SELECTOR = YES;
262 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
263 | GCC_WARN_UNUSED_FUNCTION = YES;
264 | GCC_WARN_UNUSED_VARIABLE = YES;
265 | MACOSX_DEPLOYMENT_TARGET = 10.15;
266 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
267 | MTL_FAST_MATH = YES;
268 | ONLY_ACTIVE_ARCH = YES;
269 | SDKROOT = macosx;
270 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
271 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
272 | };
273 | name = Debug;
274 | };
275 | E8710E5722C6BAD200692B84 /* Release */ = {
276 | isa = XCBuildConfiguration;
277 | buildSettings = {
278 | ALWAYS_SEARCH_USER_PATHS = NO;
279 | CLANG_ANALYZER_NONNULL = YES;
280 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
281 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
282 | CLANG_CXX_LIBRARY = "libc++";
283 | CLANG_ENABLE_MODULES = YES;
284 | CLANG_ENABLE_OBJC_ARC = YES;
285 | CLANG_ENABLE_OBJC_WEAK = YES;
286 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
287 | CLANG_WARN_BOOL_CONVERSION = YES;
288 | CLANG_WARN_COMMA = YES;
289 | CLANG_WARN_CONSTANT_CONVERSION = YES;
290 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
291 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
292 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
293 | CLANG_WARN_EMPTY_BODY = YES;
294 | CLANG_WARN_ENUM_CONVERSION = YES;
295 | CLANG_WARN_INFINITE_RECURSION = YES;
296 | CLANG_WARN_INT_CONVERSION = YES;
297 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
298 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
299 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
300 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
301 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
302 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
303 | CLANG_WARN_STRICT_PROTOTYPES = YES;
304 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
305 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
306 | CLANG_WARN_UNREACHABLE_CODE = YES;
307 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
308 | COPY_PHASE_STRIP = NO;
309 | DEAD_CODE_STRIPPING = YES;
310 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
311 | ENABLE_NS_ASSERTIONS = NO;
312 | ENABLE_STRICT_OBJC_MSGSEND = YES;
313 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
314 | GCC_C_LANGUAGE_STANDARD = gnu11;
315 | GCC_NO_COMMON_BLOCKS = YES;
316 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
317 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
318 | GCC_WARN_UNDECLARED_SELECTOR = YES;
319 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
320 | GCC_WARN_UNUSED_FUNCTION = YES;
321 | GCC_WARN_UNUSED_VARIABLE = YES;
322 | MACOSX_DEPLOYMENT_TARGET = 10.15;
323 | MTL_ENABLE_DEBUG_INFO = NO;
324 | MTL_FAST_MATH = YES;
325 | SDKROOT = macosx;
326 | SWIFT_COMPILATION_MODE = wholemodule;
327 | SWIFT_OPTIMIZATION_LEVEL = "-O";
328 | };
329 | name = Release;
330 | };
331 | E8710E5922C6BAD200692B84 /* Debug */ = {
332 | isa = XCBuildConfiguration;
333 | buildSettings = {
334 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
335 | CODE_SIGN_ENTITLEMENTS = AvocadoToast/AvocadoToast.entitlements;
336 | CODE_SIGN_STYLE = Automatic;
337 | COMBINE_HIDPI_IMAGES = YES;
338 | DEAD_CODE_STRIPPING = YES;
339 | INFOPLIST_FILE = AvocadoToast/Info.plist;
340 | LD_RUNPATH_SEARCH_PATHS = (
341 | "$(inherited)",
342 | "@executable_path/../Frameworks",
343 | );
344 | PRODUCT_BUNDLE_IDENTIFIER = de.zeezide.tests.swiftui.AvocadoToast;
345 | PRODUCT_NAME = "$(TARGET_NAME)";
346 | SWIFT_VERSION = 5.0;
347 | };
348 | name = Debug;
349 | };
350 | E8710E5A22C6BAD200692B84 /* Release */ = {
351 | isa = XCBuildConfiguration;
352 | buildSettings = {
353 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
354 | CODE_SIGN_ENTITLEMENTS = AvocadoToast/AvocadoToast.entitlements;
355 | CODE_SIGN_STYLE = Automatic;
356 | COMBINE_HIDPI_IMAGES = YES;
357 | DEAD_CODE_STRIPPING = YES;
358 | INFOPLIST_FILE = AvocadoToast/Info.plist;
359 | LD_RUNPATH_SEARCH_PATHS = (
360 | "$(inherited)",
361 | "@executable_path/../Frameworks",
362 | );
363 | PRODUCT_BUNDLE_IDENTIFIER = de.zeezide.tests.swiftui.AvocadoToast;
364 | PRODUCT_NAME = "$(TARGET_NAME)";
365 | SWIFT_VERSION = 5.0;
366 | };
367 | name = Release;
368 | };
369 | /* End XCBuildConfiguration section */
370 |
371 | /* Begin XCConfigurationList section */
372 | E8710E4522C6BAD000692B84 /* Build configuration list for PBXProject "AvocadoToast" */ = {
373 | isa = XCConfigurationList;
374 | buildConfigurations = (
375 | E8710E5622C6BAD200692B84 /* Debug */,
376 | E8710E5722C6BAD200692B84 /* Release */,
377 | );
378 | defaultConfigurationIsVisible = 0;
379 | defaultConfigurationName = Release;
380 | };
381 | E8710E5822C6BAD200692B84 /* Build configuration list for PBXNativeTarget "AvocadoToast" */ = {
382 | isa = XCConfigurationList;
383 | buildConfigurations = (
384 | E8710E5922C6BAD200692B84 /* Debug */,
385 | E8710E5A22C6BAD200692B84 /* Release */,
386 | );
387 | defaultConfigurationIsVisible = 0;
388 | defaultConfigurationName = Release;
389 | };
390 | /* End XCConfigurationList section */
391 |
392 | /* Begin XCRemoteSwiftPackageReference section */
393 | E8710E5E22C6BD1800692B84 /* XCRemoteSwiftPackageReference "SwiftWebUI" */ = {
394 | isa = XCRemoteSwiftPackageReference;
395 | repositoryURL = "https://github.com/helje5/SwiftWebUI.git";
396 | requirement = {
397 | kind = upToNextMajorVersion;
398 | minimumVersion = 0.3.2;
399 | };
400 | };
401 | E896D2C52B6E7A21008FF8C8 /* XCRemoteSwiftPackageReference "SwiftWebUI" */ = {
402 | isa = XCRemoteSwiftPackageReference;
403 | repositoryURL = "https://github.com/SwiftWebUI/SwiftWebUI.git";
404 | requirement = {
405 | kind = upToNextMajorVersion;
406 | minimumVersion = 0.3.2;
407 | };
408 | };
409 | /* End XCRemoteSwiftPackageReference section */
410 |
411 | /* Begin XCSwiftPackageProductDependency section */
412 | E8710E6B22C6BE8600692B84 /* SwiftWebUI */ = {
413 | isa = XCSwiftPackageProductDependency;
414 | package = E8710E5E22C6BD1800692B84 /* XCRemoteSwiftPackageReference "SwiftWebUI" */;
415 | productName = SwiftWebUI;
416 | };
417 | E896D2C62B6E7A21008FF8C8 /* SwiftWebUI */ = {
418 | isa = XCSwiftPackageProductDependency;
419 | package = E896D2C52B6E7A21008FF8C8 /* XCRemoteSwiftPackageReference "SwiftWebUI" */;
420 | productName = SwiftWebUI;
421 | };
422 | /* End XCSwiftPackageProductDependency section */
423 | };
424 | rootObject = E8710E4222C6BAD000692B84 /* Project object */;
425 | }
426 |
--------------------------------------------------------------------------------
/AvocadoToast/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
--------------------------------------------------------------------------------