From 40535054f3ae50438658f116631d6ae54267003a Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Fri, 4 Oct 2024 22:18:55 +0000 Subject: [PATCH] [App] basic menu bar layout UI (#2) This PR contains the work done to implement a very basic menu bar UI layout where to build the app. In addition, the .gitignore and the README file have been added to the project. Reviewed-on: https://repo.rock-n-code.com/rock-n-code/piper-app/pulls/2 Co-authored-by: Javier Cicchelli Co-committed-by: Javier Cicchelli --- .gitignore | 57 +++++++++++++++++++++++++++++++ Piper.xcodeproj/project.pbxproj | 14 ++++++++ Piper/Resources/Plists/Info.plist | 5 +++ Piper/Sources/App/PiperApp.swift | 27 +++++++++++++-- README.md | 1 + 5 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 Piper/Resources/Plists/Info.plist create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..162f8a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Swift ### +# Xcode + +## User settings +xcuserdata/ + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +Packages/ +Package.resolved +*.xcodeproj +.swiftpm +.build/ diff --git a/Piper.xcodeproj/project.pbxproj b/Piper.xcodeproj/project.pbxproj index 4306b5c..c7de080 100644 --- a/Piper.xcodeproj/project.pbxproj +++ b/Piper.xcodeproj/project.pbxproj @@ -54,11 +54,21 @@ ); target = 46D4BEE12CB07CB600FCFB84 /* UITests */; }; + 46D4BF532CB08A9500FCFB84 /* Exceptions for "Piper" folder in "Piper" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Resources/Plists/Info.plist, + ); + target = 46D4BE762CB06ED300FCFB84 /* Piper */; + }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ 46D4BE792CB06ED300FCFB84 /* Piper */ = { isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 46D4BF532CB08A9500FCFB84 /* Exceptions for "Piper" folder in "Piper" target */, + ); path = Piper; sourceTree = ""; }; @@ -424,8 +434,10 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Piper/Resources/Plists/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Piper; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; + INFOPLIST_KEY_LSUIElement = YES; INFOPLIST_KEY_NSHumanReadableCopyright = ""; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -454,8 +466,10 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Piper/Resources/Plists/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Piper; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; + INFOPLIST_KEY_LSUIElement = YES; INFOPLIST_KEY_NSHumanReadableCopyright = ""; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/Piper/Resources/Plists/Info.plist b/Piper/Resources/Plists/Info.plist new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Piper/Resources/Plists/Info.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Piper/Sources/App/PiperApp.swift b/Piper/Sources/App/PiperApp.swift index b783cb0..b08661e 100644 --- a/Piper/Sources/App/PiperApp.swift +++ b/Piper/Sources/App/PiperApp.swift @@ -11,6 +11,9 @@ import SwiftData @main struct PiperApp: App { + + // MARK: Properties + var sharedModelContainer: ModelContainer = { let schema = Schema([ Item.self, @@ -23,11 +26,29 @@ struct PiperApp: App { fatalError("Could not create ModelContainer: \(error)") } }() + + // MARK: Body var body: some Scene { - WindowGroup { - ContentView() + MenuBarExtra { + VStack(alignment: .leading) { + Text("Some text goes here...") + .foregroundStyle(.primary) + + Divider() + + Button { + // ... + } label: { + Text("Some text goes here...") + .frame(maxWidth: .infinity) + } + } + .padding() + } label: { + Image(systemName: "circle.fill") } - .modelContainer(sharedModelContainer) + .menuBarExtraStyle(.window) } + } diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f4b5cc --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Piper \ No newline at end of file