From 4e0e91dd295bf09d1e9f9ba4ba5ce3f24168615e Mon Sep 17 00:00:00 2001 From: chanhihi Date: Wed, 16 Aug 2023 03:07:07 +0900 Subject: [PATCH 1/8] =?UTF-8?q?build(xcode):=20=ED=98=91=EC=97=85=EC=97=90?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contents.xcworkspacedata | 7 ------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 -------- .../UserInterfaceState.xcuserstate | Bin 205684 -> 0 bytes 3 files changed, 15 deletions(-) delete mode 100644 Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate b/Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 4022600f611713d7c999fb92150eadc0465a14b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205684 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 Date: Wed, 16 Aug 2023 03:10:24 +0900 Subject: [PATCH 2/8] =?UTF-8?q?docs(git):=20.gitignore=20=F0=9F=93=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f031450..ed7c9da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,101 @@ +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +### Xcode ### + +## Xcode 8 and earlier + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings + .DS_Store Box42/.DS_Store -Box42.xcodeproj/xcuserdata/ - .prettierrc .swift-format \ No newline at end of file From bb39daee91fbed668f952117441f6753b97064a2 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 18 Aug 2023 02:36:54 +0900 Subject: [PATCH 3/8] =?UTF-8?q?refactor(webview):=20webview=EB=A5=BC=20con?= =?UTF-8?q?tentGroup=EC=9C=BC=EB=A1=9C=20=EC=9D=BC=EC=9E=84=ED=95=A9?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.=20-=20clickBtn=EB=A1=9C=EC=A7=81=EB=A7=8C?= =?UTF-8?q?=20BoxBaseContainerViewController=EC=97=90=EC=84=9C=20=EA=B0=96?= =?UTF-8?q?=EA=B3=A0=20=EC=9E=88=EC=9D=8C=EC=9C=BC=EB=A1=9C=EC=8D=A8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B5=AC=EC=84=B1=EC=9D=84=20Vie?= =?UTF-8?q?w=EB=93=A4=EC=97=90=EA=B2=8C=20=EB=A7=A1=EA=B2=BC=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Box/BoxBaseContainerViewController.swift | 13 +- Box42/Box/BoxButtonViewGroup.swift | 149 +++++++----------- Box42/Box/BoxContentsViewGroup.swift | 35 +++- Box42/Resources/AppDelegate.swift | 1 - Box42/Resources/Info.plist | 8 +- Box42/Shared/Constants.swift | 13 ++ 6 files changed, 111 insertions(+), 108 deletions(-) create mode 100644 Box42/Shared/Constants.swift diff --git a/Box42/Box/BoxBaseContainerViewController.swift b/Box42/Box/BoxBaseContainerViewController.swift index ceff194..dd38da3 100644 --- a/Box42/Box/BoxBaseContainerViewController.swift +++ b/Box42/Box/BoxBaseContainerViewController.swift @@ -21,7 +21,6 @@ class BoxBaseContainerViewController: NSViewController { func BoxButtonViewGroupInit() -> BoxButtonViewGroup { let buttonGroup = BoxButtonViewGroup { sender in - // 버튼을 클릭할 때 실행할 코드 self.clickBtn(sender: sender) } view.addSubview(buttonGroup) @@ -31,9 +30,8 @@ class BoxBaseContainerViewController: NSViewController { func clickBtn(sender: NSButton) { guard let clickCount = NSApp.currentEvent?.clickCount else { return } if sender.title == "Preferences" { -// boxView.contentGroup.subviews.removeAll() -// boxView.contentGroup.addSubview(preferencesVC.view) -// preferencesVC.viewDidAppear() + contentGroup.removeAllSubviews() + contentGroup.showPreferences() return } if clickCount == 2 { @@ -44,11 +42,8 @@ class BoxBaseContainerViewController: NSViewController { // WebViewList.shared.list[sender.title]!.load(rqURL) print("Triple Click") } else if clickCount < 2 { -// boxView.contentGroup.subviews.removeAll() -// boxView.contentGroup.addSubview(WebViewList.shared.list[sender.title]!) - WebViewList.shared.list[sender.title]!.configuration.preferences.javaScriptCanOpenWindowsAutomatically = true - WebViewList.shared.list[sender.title]!.configuration.preferences.javaScriptEnabled = true - WebViewList.shared.list[sender.title]?.viewDidMoveToSuperview() + contentGroup.removeAllSubviews() + contentGroup.showWebviews(sender) } } diff --git a/Box42/Box/BoxButtonViewGroup.swift b/Box42/Box/BoxButtonViewGroup.swift index e71a3f8..0859e19 100644 --- a/Box42/Box/BoxButtonViewGroup.swift +++ b/Box42/Box/BoxButtonViewGroup.swift @@ -6,6 +6,7 @@ // import Cocoa +import SnapKit class BoxButtonViewGroup: NSView { var boxVM: WebViewModel! = WebViewModel() @@ -13,12 +14,11 @@ class BoxButtonViewGroup: NSView { var pinSwitch : NSSwitch = NSSwitch() var clickAction: ((NSButton) -> Void)? var lastAddedButton: NSView? + var loginInfo: NSView? init(clickAction: @escaping (NSButton) -> Void) { self.clickAction = clickAction super.init(frame: BoxSizeManager.shared.buttonGroupSizeNSRect) - -// self.wantsLayer = true setupButtons() divide() } @@ -32,112 +32,77 @@ class BoxButtonViewGroup: NSView { } private func setupButtons() { - createHomeButton() + for subview in self.subviews { + subview.removeFromSuperview() + } + for (name, _) in boxVM.webViewURL.URLstring { self.createButton(name) } + createLoginInfo() preferencesButton() createQuitButton() createPinButton() } + func createLoginInfo() { + + } + @objc private func clickBtn(sender: NSButton) { - clickAction?(sender) // 클로저 실행 + clickAction?(sender) } private func createButton(_ title: String) { - let button = NSButton() - - button.title = title - button.setButtonType(.momentaryLight) - - button.translatesAutoresizingMaskIntoConstraints = false + let button: NSButton + + if title == "home" { + button = NSButton(title: "home", image: NSImage(imageLiteralResourceName: "42box_logo"), target: self, action: #selector(clickBtn(sender:))) + button.imagePosition = .imageOnly + button.isBordered = false + } else { + button = HoverButton() + button.title = title + + button.wantsLayer = true + button.contentTintColor = NSColor.black + button.layer?.borderColor = NSColor.black.cgColor + button.layer?.borderWidth = 1.0 + button.layer?.cornerRadius = 5.0 + button.layer?.opacity = 0.7 + } + super.addSubview(button) button.target = self button.action = #selector(clickBtn(sender:)) - button.isBordered = true - button.bezelStyle = .roundRect - button.showsBorderOnlyWhileMouseInside = true - - super.addSubview(button) - - NSLayoutConstraint.activate([ - button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20), - // 이전 버튼의 bottom anchor와 연결 - button.topAnchor.constraint(equalTo: lastAddedButton?.bottomAnchor ?? self.topAnchor, constant: 10), - button.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), - button.heightAnchor.constraint(equalToConstant: 30) - ]) - - lastAddedButton = button - } - -// func createHomeButton() { -// let button = NSButton(title: "home", image: NSImage(imageLiteralResourceName: "42box_logo"), target: self, action: #selector(clickBtn(sender:))) -// -// button.translatesAutoresizingMaskIntoConstraints = false -// button.isBordered = false -// button.imagePosition = .imageOnly -// -// super.addSubview(button) -// -// NSLayoutConstraint.activate([ -// button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20), -// // 이전 버튼의 bottom anchor와 연결 -// button.topAnchor.constraint(equalTo: lastAddedButton?.bottomAnchor ?? self.topAnchor, constant: 10), -// button.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), -// button.heightAnchor.constraint(equalToConstant: 30) -// ]) -// -// lastAddedButton = button -// } - - func createHomeButton() { - let button = NSButton(title: "home", image: NSImage(imageLiteralResourceName: "42box_logo"), target: self, action: #selector(clickBtn(sender:))) - super.addSubview(button) + let fontSize: CGFloat = 16.0 + button.font = NSFont.systemFont(ofSize: fontSize) + button.setButtonType(.momentaryLight) button.translatesAutoresizingMaskIntoConstraints = false - button.isBordered = false - button.imagePosition = .imageOnly - - -// NSLayoutConstraint.activate([ -// button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20), -// button.topAnchor.constraint(equalTo: self.topAnchor, constant: 0), -// button.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), -//// button.heightAnchor.constraint(equalToConstant: 30) -// ]) - NSLayoutConstraint.activate([ - button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20), // 좌측 간격을 100에서 20으로 변경 - button.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), // 우측 간격을 80에서 20으로 변경 - button.heightAnchor.constraint(equalToConstant: 30) - ]) - - lastAddedButton = nil // home 버튼 이후의 버튼들이 상단에 연결되지 않도록 설정 + button.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.leading.equalToSuperview().offset(10) + make.trailing.equalToSuperview().offset(-10) + + if title == "home" { + make.height.equalTo(50) + } else { + make.height.equalTo(50) + } + + if let lastButton = lastAddedButton { + make.top.equalTo(lastButton.snp.bottom).offset(10) + } else { + make.top.equalToSuperview().offset(10) + } + } + lastAddedButton = button } - -// func createQuitButton() { -// let button = NSButton() -// button.title = "Quit Box" -// button.setButtonType(.momentaryLight) -// -// button.translatesAutoresizingMaskIntoConstraints = false -// button.action = #selector(NSApplication.terminate(_:)) -// button.isBordered = true -// button.bezelStyle = .roundRect -// button.showsBorderOnlyWhileMouseInside = true -// -// self.addSubview(button) -// -// button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20).isActive = true -// button.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10).isActive = true -// button.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20).isActive = true -// } - func createQuitButton() { let button = NSButton() button.title = "Quit Box" @@ -151,16 +116,14 @@ class BoxButtonViewGroup: NSView { self.addSubview(button) - NSLayoutConstraint.activate([ - button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20), - button.topAnchor.constraint(equalTo: lastAddedButton?.bottomAnchor ?? self.topAnchor, constant: 10), // 이 부분 수정 - button.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), - button.heightAnchor.constraint(equalToConstant: 30) - ]) + button.snp.makeConstraints { make in + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.bottom.equalToSuperview() + } lastAddedButton = button // 이 부분 추가 } - func createPinButton() { let button = NSButton() diff --git a/Box42/Box/BoxContentsViewGroup.swift b/Box42/Box/BoxContentsViewGroup.swift index ed20f4a..78c9b96 100644 --- a/Box42/Box/BoxContentsViewGroup.swift +++ b/Box42/Box/BoxContentsViewGroup.swift @@ -11,6 +11,7 @@ import WebKit class BoxContentsViewGroup: NSView { var webVC: WebViewController? var webView: WKWebView! + var preferencesVC = PreferencesViewController() init() { let webVC = WebViewController(nibName: nil, bundle: nil) @@ -28,8 +29,40 @@ class BoxContentsViewGroup: NSView { override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) - // Drawing code here. } + + func removeAllSubviews() { + for subview in self.subviews { + subview.removeFromSuperview() + } + } + + func showPreferences() { + self.addSubview(preferencesVC.view) + preferencesVC.viewDidAppear() + } + + func showWebviews(_ sender: NSButton) { + guard let currentWebview = WebViewList.shared.list[sender.title] else { + print("No WebView found for title: \(sender.title)") + return + } + + currentWebview.frame = self.bounds // WebView의 크기 및 위치 설정 + self.addSubview(currentWebview) + + // WebView 설정 + currentWebview.configuration.preferences.javaScriptCanOpenWindowsAutomatically = true + currentWebview.configuration.preferences.javaScriptEnabled = true + + // WebView 내용 로드 확인 (옵셔널) + if currentWebview.url == nil { + print("WebView for \(sender.title) has no content loaded.") + } + + currentWebview.viewDidMoveToSuperview() + } + } diff --git a/Box42/Resources/AppDelegate.swift b/Box42/Resources/AppDelegate.swift index e3ea76a..26df5dd 100644 --- a/Box42/Resources/AppDelegate.swift +++ b/Box42/Resources/AppDelegate.swift @@ -12,7 +12,6 @@ class AppDelegate: NSObject, NSApplicationDelegate { var menubarController = MenubarViewController() lazy var storage = Storage() - func applicationWillFinishLaunching(_ notification: Notification) { menubarController.menubarViewControllerInit() } diff --git a/Box42/Resources/Info.plist b/Box42/Resources/Info.plist index 6529386..b61be39 100644 --- a/Box42/Resources/Info.plist +++ b/Box42/Resources/Info.plist @@ -2,8 +2,6 @@ - LSUIElement - CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -24,6 +22,8 @@ 1 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) + LSUIElement + NSMainStoryboardFile Main NSPrincipalClass @@ -39,10 +39,10 @@ UISceneClassName - UISceneDelegateClassName - UISceneConfigurationName + UISceneDelegateClassName + UISceneStoryboardFile diff --git a/Box42/Shared/Constants.swift b/Box42/Shared/Constants.swift new file mode 100644 index 0000000..3e4ff73 --- /dev/null +++ b/Box42/Shared/Constants.swift @@ -0,0 +1,13 @@ +// +// Constants.swift +// Box42 +// +// Created by Chanhee Kim on 8/17/23. +// + +struct Constants { + struct url { + static let InitialName = "home" + static let InitialPage = "https://42box.github.io/front-end/" + } +} From 1b6b6fc7f4fde39719f3ff7b8f0c30a556392927 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 18 Aug 2023 02:38:50 +0900 Subject: [PATCH 4/8] =?UTF-8?q?refactor(webview):=20MVVM=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=A9=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.=20-=20url=20view=20model=EC=9D=84=20=EB=B0=94?= =?UTF-8?q?=EC=9D=B8=EB=94=A9=ED=95=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42/WebView/WebViewController.swift | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Box42/WebView/WebViewController.swift b/Box42/WebView/WebViewController.swift index 51028b9..55991ed 100644 --- a/Box42/WebView/WebViewController.swift +++ b/Box42/WebView/WebViewController.swift @@ -7,16 +7,21 @@ import Cocoa import WebKit +import Combine class WebViewController: NSViewController, WKScriptMessageHandler, WKUIDelegate, WKNavigationDelegate { var URLVM = WebViewModel() var webView: WKWebView! + // Cancellables array to manage the bindings + var cancellables: Set = [] + override func loadView() { self.webView = addWebView() self.view = webView loadWebViewInit() webViewInit() +// bindViewModel() } func loadWebViewInit() { @@ -24,21 +29,27 @@ class WebViewController: NSViewController, WKScriptMessageHandler, WKUIDelegate, for (key, value) in URLVM.URLdict { let wkWebView = addWebView() WebViewList.shared.list[key] = wkWebView - let rqURL = URLRequest(url:value) DispatchQueue.main.async { - wkWebView.load(rqURL) + wkWebView.load(self.URLVM.requestURL(value)) } } } func webViewInit() { - let request = URLRequest(url: URLVM.URLdict["home"]!) -// let request = URLRequest(url: URL(fileURLWithPath: "https://github.com/CHANhihi")) DispatchQueue.main.async { - self.webView.load(request) + self.webView.load(self.URLVM.requestURL(self.URLVM.safeURL())) } } + func bindViewModel() { + // Whenever URLdict changes, it will call loadWebViewInit + URLVM.$URLdict + .sink { [weak self] _ in + self?.loadWebViewInit() + } + .store(in: &cancellables) + } + func addWebView() -> WKWebView { let preferences = WKPreferences() preferences.javaScriptEnabled = true From 4ea7f5aa61404b4e023d29dd6484ce7d9ddcd03b Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 18 Aug 2023 02:39:45 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat(webview):=20ViewModel=EC=9D=98=20CRUD?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EA=B5=AC=ED=98=84=ED=95=A9?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42/WebView/WebViewModel.swift | 72 +++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/Box42/WebView/WebViewModel.swift b/Box42/WebView/WebViewModel.swift index b3f64ad..2e091a0 100644 --- a/Box42/WebView/WebViewModel.swift +++ b/Box42/WebView/WebViewModel.swift @@ -5,38 +5,70 @@ // Created by Chan on 2023/03/19. // +import Combine import WebKit -// Singleton -class WebViewList { - static let shared = WebViewList() +typealias URLMapping = [String: URL] - var list: [String : WKWebView]! - - private init() { - list = [:] - } -} - -// CRUD 4가지 형태의 데이터 가공 create, read, update, delete +// WebView 관련 CRUD 4가지 형태의 데이터 가공 create, read, update, delete class WebViewModel: ObservableObject { - var webViewURL: URLModels - @Published var URLdict: [String: URL] - + @Published var webViewURL: URLModels + @Published var URLdict: URLMapping + private var cancellables = Set() + init() { - self.webViewURL = URLModels(info: [URLModel(name: "home", url: "https://42box.github.io/front-end/")]) - self.URLdict = [String: URL]() + self.webViewURL = URLModels(info: [URLModel(name: Constants.url.InitialName, url: Constants.url.InitialPage)]) + self.URLdict = URLMapping() + + $webViewURL.sink { (WVURL) in + self.setUpURLdict() + }.store(in: &cancellables) } func setUpURLdict() { -// for urlModel in webViewURL.info { -// URLdict[urlModel.name] = URL(string: urlModel.url) -// } for urlModel in webViewURL.URLstring { - URLdict[urlModel.0] = URL(string: urlModel.1) + URLdict[urlModel.name] = URL(string: urlModel.url) + } + } + + // Create + func createURL(_ name: String, _ url: String) { + let newURL = URLModel(name: name, url: url) + self.webViewURL.info.append(newURL) + } + + // Read + func readURLString(_ index: Int) -> URLModel { + return webViewURL.info[index] + } + + func readURL(_ index: Int) -> URL { + return URL(string: webViewURL.info[index].url) ?? URL(string: Constants.url.InitialPage)! + } + + func safeURL() -> URL { + return URL(string: webViewURL.info.first?.url ?? Constants.url.InitialPage)! + } + + func requestURL(_ url: URL) -> URLRequest { + return URLRequest(url: url) + } + + // Update + func updateURL(_ id: UUID, _ name: String, _ url: String) { + if let selectedIndex = webViewURL.info.firstIndex(where: { user in user.id == id }) { + webViewURL.info[selectedIndex].name = name + webViewURL.info[selectedIndex].url = url } } + // Delete + func deleteURL(id: UUID) { + if let selectedIndex = webViewURL.info.firstIndex(where: { user in user.id == id }) { + cancellables.removeAll() + webViewURL.info.remove(at: selectedIndex) + } + } } From fa333ebeb40ca4ad34c9b1d77bca889546b735bc Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 18 Aug 2023 02:41:12 +0900 Subject: [PATCH 6/8] =?UTF-8?q?refactor(webview):=20url=EB=AA=A8=EB=8D=B8?= =?UTF-8?q?=EC=9D=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=ED=95=A9?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42/WebView/URL/URLModel.swift | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Box42/WebView/URL/URLModel.swift b/Box42/WebView/URL/URLModel.swift index 9763fce..d27e9e3 100644 --- a/Box42/WebView/URL/URLModel.swift +++ b/Box42/WebView/URL/URLModel.swift @@ -7,6 +7,8 @@ import Foundation +typealias nameUrl = (name: String, url: String) + struct URLModel { var id: UUID var name: String @@ -22,25 +24,19 @@ struct URLModel { struct URLModels { var info: [URLModel] - // Network logic - let URLstring: [(String, String)] = [ + // Network logic api call 날려서 받아올 것. + let URLstring: [nameUrl] = [ ("home", "https://42box.github.io/front-end/"), // ("home", "http://127.0.0.1:3000/"), ("Box 42", "https://42box.github.io/front-end/#/box"), ("Intra 42", "https://intra.42.fr"), ("Jiphyeonjeon", "https://42library.kr"), - ("E-Library", "https://42seoul.dkyobobook.co.kr/main.ink"), + ("42STAT", "https://stat.42seoul.kr/home"), ("24Hane", "https://24hoursarenotenough.42seoul.kr"), - ("80000Coding", "https://80000coding.oopy.io"), + ("80kCoding", "https://80000coding.oopy.io"), ("where42", "https://www.where42.kr"), ("cabi", "https://cabi.42seoul.io/"), ("42gg", "https://42gg.kr/"), - ("textart", "https://textart.sh/") + ("textart", "https://textart.sh/"), ] - - mutating func urlSetup() { - URLstring.forEach { (name, url) in - info.append(URLModel(name: name, url: url)) - } - } } From aef20ae9c8b2be9f565e6fbb14f474ba73dad542 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 18 Aug 2023 02:42:00 +0900 Subject: [PATCH 7/8] feat(window): window UI prototype --- Box42/Menubar/MenubarViewController.swift | 63 +++++++++++------------ Box42/Shared/StateManager.swift | 12 ++++- Box42/UI/GradientView.swift | 37 +++++++++++++ Box42/UI/HoverButton.swift | 46 +++++++++++++++++ Box42/WebView/WebViewList.swift | 20 +++++++ Box42/Window/BoxWindowController.swift | 26 ++++++++-- 6 files changed, 167 insertions(+), 37 deletions(-) create mode 100644 Box42/UI/GradientView.swift create mode 100644 Box42/UI/HoverButton.swift create mode 100644 Box42/WebView/WebViewList.swift diff --git a/Box42/Menubar/MenubarViewController.swift b/Box42/Menubar/MenubarViewController.swift index 0165ed7..09540d6 100644 --- a/Box42/Menubar/MenubarViewController.swift +++ b/Box42/Menubar/MenubarViewController.swift @@ -15,8 +15,7 @@ class MenubarViewController: NSWorkspace { let menuBarView = MenuBarView() lazy var eventMonitor: EventMonitor = self.setupEventMonitor() var boxWindowController: BoxWindowController? - - + func menubarViewControllerInit() { self.buttonInit() } @@ -44,11 +43,11 @@ class MenubarViewController: NSWorkspace { statusBarVM.stopRunning() } - func buttonInit() { + func buttonInit() { buttonImageChange("Cat") statusBarVM.statusButtonAppear() - } - + } + func buttonImageChange(_ img: String) { statusBarVM.changeStatusBarIcon(img) } @@ -62,7 +61,7 @@ class MenubarViewController: NSWorkspace { let boxViewController = BoxViewController(nibName: nil, bundle: nil) popover.contentViewController = boxViewController } - + func setupEventMonitor() -> EventMonitor { return EventMonitor(mask: [.leftMouseDown, .rightMouseDown, .otherMouseDown]) { [weak self] event in if let strongSelf = self, strongSelf.popover.isShown { @@ -94,7 +93,7 @@ class MenubarViewController: NSWorkspace { popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY) } } - + func closePopover(sender: Any?) { popover.performClose(sender) } @@ -102,33 +101,33 @@ class MenubarViewController: NSWorkspace { extension MenubarViewController: MenubarViewControllerDelegate { func toggleWindow(sender: Any?) { - StateManager.shared.setToggleIsShowWindow(); - if StateManager.shared.getToggleIsShowWindow() == false { - boxWindowController?.close() - print("close") - return - } - boxWindowController = BoxWindowController(window: nil) - - // status bar 버튼의 위치를 얻어옵니다. - if let button = statusBarVM.statusBar.statusItem.button, - let window = boxWindowController?.window { - - let buttonFrame = button.window?.convertToScreen(button.frame) ?? NSZeroRect - - // 버튼 위치 아래에 윈도우를 표시하려면 - let desiredPosition = NSPoint(x: buttonFrame.origin.x, y: buttonFrame.origin.y - window.frame.height) - - // 혹은, 버튼 위치의 중앙에 윈도우를 표시하려면 -// let desiredPosition = NSPoint(x: buttonFrame.midX - window.frame.width / 2, y: buttonFrame.origin.y - window.frame.height) - - // 윈도우의 위치를 설정 - window.setFrameOrigin(desiredPosition) - window.level = .floating + StateManager.shared.setToggleIsShowWindow() + if StateManager.shared.getIsShowWindow() == false { + if let window = boxWindowController?.window { + if window.isVisible { + window.orderOut(sender) + print("hide") + } + } + } else { + if boxWindowController == nil { + boxWindowController = BoxWindowController(window: nil) + } + if let button = statusBarVM.statusBar.statusItem.button, + let window = boxWindowController?.window { + if StateManager.shared.getIsShowFirstWindow() == false { + let buttonFrame = button.window?.convertToScreen(button.frame) ?? NSZeroRect + let desiredPosition = NSPoint(x: buttonFrame.origin.x, y: buttonFrame.origin.y - window.frame.height) + + window.setFrameOrigin(desiredPosition) + StateManager.shared.setToggleIsShowFirstWindow() + } + window.level = .floating + } + boxWindowController?.showWindow(sender) } - - boxWindowController?.showWindow(sender) } + } protocol MenubarViewControllerDelegate: AnyObject { diff --git a/Box42/Shared/StateManager.swift b/Box42/Shared/StateManager.swift index c5a0fec..0e8ca1d 100644 --- a/Box42/Shared/StateManager.swift +++ b/Box42/Shared/StateManager.swift @@ -11,11 +11,13 @@ class StateManager { private var isPin: Bool! private var isShowCPUUsage: Bool! private var isShowWindow: Bool! + private var isShowFirstWindow: Bool! private init() { isPin = false isShowCPUUsage = false isShowWindow = false + isShowFirstWindow = false } func getIsPin() -> Bool { @@ -34,11 +36,19 @@ class StateManager { isShowCPUUsage.toggle() } - func getToggleIsShowWindow() -> Bool { + func getIsShowWindow() -> Bool { return isShowWindow } func setToggleIsShowWindow() { isShowWindow.toggle() } + + func getIsShowFirstWindow() -> Bool { + return isShowFirstWindow + } + + func setToggleIsShowFirstWindow() { + isShowFirstWindow.toggle() + } } diff --git a/Box42/UI/GradientView.swift b/Box42/UI/GradientView.swift new file mode 100644 index 0000000..7afd87e --- /dev/null +++ b/Box42/UI/GradientView.swift @@ -0,0 +1,37 @@ +// +// GradientView.swift +// Box42 +// +// Created by Chanhee Kim on 8/18/23. +// + +import Cocoa + +//layer caching 기법. +//레이어 캐싱: 복잡한 그래픽 연산이 필요한 뷰의 경우 wantsLayer를 true로 설정하고 shouldRasterize 속성을 true로 설정하여 렌더링 결과를 캐시할 수 있습니다. 하지만 이를 과도하게 사용하면 메모리 사용량이 증가할 수 있으므로 주의가 필요합니다. +class GradientView: NSView { + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + self.setupLayerCaching() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + self.setupLayerCaching() + } + + private func setupLayerCaching() { + self.wantsLayer = true + self.layer?.shouldRasterize = true + self.layer?.rasterizationScale = self.window?.backingScaleFactor ?? 1.0 + } + + override func draw(_ dirtyRect: NSRect) { + super.draw(dirtyRect) + + let startingColor = NSColor(red: 1.0, green: 0.804, blue: 0.0, alpha: 0.9) + let endingColor = NSColor(red: 1.0, green: 0.447, blue: 0.0, alpha: 0.7) + let gradient = NSGradient(starting: startingColor, ending: endingColor) + gradient?.draw(in: self.bounds, angle: 90) + } +} diff --git a/Box42/UI/HoverButton.swift b/Box42/UI/HoverButton.swift new file mode 100644 index 0000000..c7bbcfe --- /dev/null +++ b/Box42/UI/HoverButton.swift @@ -0,0 +1,46 @@ +// +// HoverButton.swift +// Box42 +// +// Created by Chanhee Kim on 8/18/23. +// + +import Cocoa + +class HoverButton: NSButton { + + private var trackingArea: NSTrackingArea? + + override func awakeFromNib() { + super.awakeFromNib() + + self.wantsLayer = true + self.layer?.borderColor = NSColor.black.cgColor + self.layer?.borderWidth = 1.0 + self.layer?.cornerRadius = 5.0 + } + + override func updateTrackingAreas() { + super.updateTrackingAreas() + + if let trackingArea = self.trackingArea { + self.removeTrackingArea(trackingArea) + } + + let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeAlways] + trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil) + self.addTrackingArea(trackingArea!) + } + + override func mouseEntered(with event: NSEvent) { + // 호버 상태일 때의 스타일을 정의합니다. + self.layer?.backgroundColor = NSColor.gray.cgColor + self.layer?.opacity = 1.0 + } + + override func mouseExited(with event: NSEvent) { + // 호버 상태가 아닐 때의 스타일을 정의합니다. +// self.layer?.backgroundColor = NSColor.white.cgColor + self.layer?.opacity = 0.7 + } +} diff --git a/Box42/WebView/WebViewList.swift b/Box42/WebView/WebViewList.swift new file mode 100644 index 0000000..e4535fc --- /dev/null +++ b/Box42/WebView/WebViewList.swift @@ -0,0 +1,20 @@ +// +// WebViewList.swift +// Box42 +// +// Created by Chanhee Kim on 8/17/23. +// + +import WebKit + +typealias WebViewMapping = [String : WKWebView] + +class WebViewList { + static let shared = WebViewList() + + var list: WebViewMapping! + + private init() { + list = [:] + } +} diff --git a/Box42/Window/BoxWindowController.swift b/Box42/Window/BoxWindowController.swift index db80f60..41f4a87 100644 --- a/Box42/Window/BoxWindowController.swift +++ b/Box42/Window/BoxWindowController.swift @@ -8,18 +8,26 @@ import Cocoa class BoxWindowController: NSWindowController { + var windowInstance: NSWindow! + var gradientView: NSView! override init(window: NSWindow?) { let contentRect = BoxSizeManager.shared.boxViewSizeNSRect let styleMask: NSWindow.StyleMask = [.titled, .closable, .resizable, .miniaturizable] - let windowInstance = NSWindow(contentRect: contentRect, styleMask: styleMask, backing: .buffered, defer: false) + windowInstance = NSWindow(contentRect: contentRect, styleMask: styleMask, backing: .buffered, defer: false) windowInstance.title = "Box" windowInstance.styleMask.insert(.resizable) + windowInstance.isReleasedWhenClosed = false + windowInstance.isOpaque = false + + super.init(window: windowInstance) + gradientView = GradientView(frame: contentRect) let boxViewController = BoxViewController(nibName: nil, bundle: nil) windowInstance.contentViewController = boxViewController - - super.init(window: windowInstance) + windowInstance.contentView?.addSubview(gradientView, positioned: .below, relativeTo: nil) + gradientView.translatesAutoresizingMaskIntoConstraints = false + gradientViewAutoLayout() } required init?(coder: NSCoder) { @@ -28,6 +36,16 @@ class BoxWindowController: NSWindowController { override func windowDidLoad() { super.windowDidLoad() - // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. + } + + func gradientViewAutoLayout() { + if let contentView = windowInstance.contentView { + NSLayoutConstraint.activate([ + gradientView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + gradientView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + gradientView.topAnchor.constraint(equalTo: contentView.topAnchor), + gradientView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) + ]) + } } } From 1ad2d385fe4f0621b22d86213e5231ee322e3f2c Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 18 Aug 2023 02:42:31 +0900 Subject: [PATCH 8/8] =?UTF-8?q?build(xcode):=20=F0=9F=96=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42.xcodeproj/project.pbxproj | 57 ++++++++++++++++++- .../contents.xcworkspacedata | 7 +++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++ .../xcshareddata/swiftpm/Package.resolved | 16 ++++++ 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/Box42.xcodeproj/project.pbxproj b/Box42.xcodeproj/project.pbxproj index 10e6af2..235e566 100644 --- a/Box42.xcodeproj/project.pbxproj +++ b/Box42.xcodeproj/project.pbxproj @@ -19,6 +19,11 @@ DE018BF32A509B3300FF0AA3 /* MenubarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BF22A509B3300FF0AA3 /* MenubarModel.swift */; }; DE018BF62A509B3600FF0AA3 /* MenubarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BF52A509B3600FF0AA3 /* MenubarView.swift */; }; DE018C032A509B5D00FF0AA3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DE018C022A509B5D00FF0AA3 /* Main.storyboard */; }; + DE0A915D2A8E348D00D1D6F1 /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = DE0A915C2A8E348D00D1D6F1 /* SnapKit */; }; + DE0A91632A8E6A5400D1D6F1 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91622A8E6A5400D1D6F1 /* Constants.swift */; }; + DE0A91672A8E6CA700D1D6F1 /* WebViewList.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A91662A8E6CA700D1D6F1 /* WebViewList.swift */; }; + DE0A916D2A8E7DD700D1D6F1 /* HoverButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A916C2A8E7DD700D1D6F1 /* HoverButton.swift */; }; + DE0A91702A8E8BDE00D1D6F1 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0A916F2A8E8BDE00D1D6F1 /* GradientView.swift */; }; DE1F1A142A8B506600A88DD8 /* importMacOSInfo.sh in Resources */ = {isa = PBXBuildFile; fileRef = DE1F1A112A8B506600A88DD8 /* importMacOSInfo.sh */; }; DE1F1A152A8B506600A88DD8 /* exportMacOSInfo.sh in Resources */ = {isa = PBXBuildFile; fileRef = DE1F1A122A8B506600A88DD8 /* exportMacOSInfo.sh */; }; DE1F1A162A8B506600A88DD8 /* keyMapping.sh in Resources */ = {isa = PBXBuildFile; fileRef = DE1F1A132A8B506600A88DD8 /* keyMapping.sh */; }; @@ -63,6 +68,10 @@ DE018BF52A509B3600FF0AA3 /* MenubarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenubarView.swift; sourceTree = ""; }; DE018C022A509B5D00FF0AA3 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; DE018C192A509DBA00FF0AA3 /* Box42.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Box42.entitlements; sourceTree = ""; }; + DE0A91622A8E6A5400D1D6F1 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + DE0A91662A8E6CA700D1D6F1 /* WebViewList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewList.swift; sourceTree = ""; }; + DE0A916C2A8E7DD700D1D6F1 /* HoverButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoverButton.swift; sourceTree = ""; }; + DE0A916F2A8E8BDE00D1D6F1 /* GradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientView.swift; sourceTree = ""; }; DE1F1A112A8B506600A88DD8 /* importMacOSInfo.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = importMacOSInfo.sh; sourceTree = ""; }; DE1F1A122A8B506600A88DD8 /* exportMacOSInfo.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = exportMacOSInfo.sh; sourceTree = ""; }; DE1F1A132A8B506600A88DD8 /* keyMapping.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = keyMapping.sh; sourceTree = ""; }; @@ -97,6 +106,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DE0A915D2A8E348D00D1D6F1 /* SnapKit in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -123,8 +133,8 @@ DE018BB12A5099F900FF0AA3 /* Box42 */ = { isa = PBXGroup; children = ( + DE0A916B2A8E7DC700D1D6F1 /* UI */, DE1F1A202A8B50CA00A88DD8 /* Main */, - DE1F1A182A8B50BB00A88DD8 /* Box */, DEF749302A85655E00D987C8 /* Extensions */, DEB862E82A853F6800278FCD /* Window */, DEB862D22A8511D600278FCD /* Scripts */, @@ -133,6 +143,7 @@ DE018C0C2A509BDF00FF0AA3 /* Resources */, DE018C062A509B9000FF0AA3 /* System */, DE018C082A509BB500FF0AA3 /* WebView */, + DE1F1A182A8B50BB00A88DD8 /* Box */, DE018C0E2A509C0C00FF0AA3 /* Menubar */, ); path = Box42; @@ -155,6 +166,7 @@ DE018C0B2A509BC100FF0AA3 /* URL */, DE018BE92A509B2100FF0AA3 /* WebViewModel.swift */, DE018BE62A509B1E00FF0AA3 /* WebViewController.swift */, + DE0A91662A8E6CA700D1D6F1 /* WebViewList.swift */, ); path = WebView; sourceTree = ""; @@ -191,6 +203,15 @@ path = Menubar; sourceTree = ""; }; + DE0A916B2A8E7DC700D1D6F1 /* UI */ = { + isa = PBXGroup; + children = ( + DE0A916C2A8E7DD700D1D6F1 /* HoverButton.swift */, + DE0A916F2A8E8BDE00D1D6F1 /* GradientView.swift */, + ); + path = UI; + sourceTree = ""; + }; DE17AF722A834A1600325BF4 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -223,6 +244,7 @@ children = ( DE1F1A282A8B50E200A88DD8 /* BoxSizeManager.swift */, DE77BA552A82637900713683 /* StateManager.swift */, + DE0A91622A8E6A5400D1D6F1 /* Constants.swift */, ); path = Shared; sourceTree = ""; @@ -295,6 +317,9 @@ dependencies = ( ); name = Box42; + packageProductDependencies = ( + DE0A915C2A8E348D00D1D6F1 /* SnapKit */, + ); productName = Box42; productReference = DE018BAF2A5099F900FF0AA3 /* Box42.app */; productType = "com.apple.product-type.application"; @@ -322,6 +347,9 @@ Base, ); mainGroup = DE018BA62A5099F900FF0AA3; + packageReferences = ( + DE0A915B2A8E348D00D1D6F1 /* XCRemoteSwiftPackageReference "SnapKit" */, + ); productRefGroup = DE018BB02A5099F900FF0AA3 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -368,9 +396,12 @@ DE874F4E2A591DEA00FC3B77 /* Hotkey.swift in Sources */, DE1F1A252A8B50D500A88DD8 /* BoxViewModel.swift in Sources */, DE018BB32A5099F900FF0AA3 /* AppDelegate.swift in Sources */, + DE0A91632A8E6A5400D1D6F1 /* Constants.swift in Sources */, DE018BF32A509B3300FF0AA3 /* MenubarModel.swift in Sources */, DE7A257A2A6D8CA20043225A /* PreferencesViewController.swift in Sources */, + DE0A916D2A8E7DD700D1D6F1 /* HoverButton.swift in Sources */, DE1F1A242A8B50D500A88DD8 /* BoxButtonHandler.swift in Sources */, + DE0A91672A8E6CA700D1D6F1 /* WebViewList.swift in Sources */, DE018BED2A509B2600FF0AA3 /* URLModel.swift in Sources */, DE1F1A1E2A8B50C500A88DD8 /* BoxButtonViewGroup.swift in Sources */, DEB862EB2A853F7F00278FCD /* BoxWindowController.swift in Sources */, @@ -382,6 +413,7 @@ DE2AD3292A824EEB00002D51 /* Accessibility.swift in Sources */, DE874F572A591F2500FC3B77 /* Icon.swift in Sources */, DE1F1A2E2A8BCC9800A88DD8 /* Storage.swift in Sources */, + DE0A91702A8E8BDE00D1D6F1 /* GradientView.swift in Sources */, DE1F1A312A8BD68F00A88DD8 /* Double.swift in Sources */, DE018BEA2A509B2100FF0AA3 /* WebViewModel.swift in Sources */, ); @@ -441,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -496,7 +528,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -568,6 +600,25 @@ }; /* End XCConfigurationList section */ +/* Begin XCRemoteSwiftPackageReference section */ + DE0A915B2A8E348D00D1D6F1 /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit.git"; + requirement = { + kind = exactVersion; + version = 5.6.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DE0A915C2A8E348D00D1D6F1 /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = DE0A915B2A8E348D00D1D6F1 /* XCRemoteSwiftPackageReference "SnapKit" */; + productName = SnapKit; + }; +/* End XCSwiftPackageProductDependency section */ + /* Begin XCVersionGroup section */ DE018BB62A5099F900FF0AA3 /* Box42.xcdatamodeld */ = { isa = XCVersionGroup; diff --git a/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..19d4e8c --- /dev/null +++ b/Box42.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "SnapKit", + "repositoryURL": "https://github.com/SnapKit/SnapKit.git", + "state": { + "branch": null, + "revision": "f222cbdf325885926566172f6f5f06af95473158", + "version": "5.6.0" + } + } + ] + }, + "version": 1 +}