From b119afb77da251bf2750c9173e7ccabf2d066946 Mon Sep 17 00:00:00 2001 From: Marco Romano Date: Thu, 13 Jun 2024 23:53:25 +0200 Subject: [PATCH] v0.1 (#11) Complete app rewrite. --- .github/workflows/main.yml | 34 + .gitignore | 41 +- .travis.yml | 9 - Browsy.xcodeproj/project.pbxproj | 583 +++++++++---- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 15 + .../xcschemes/Browsy.xcscheme | 103 --- .../xcschemes/xcschememanagement.plist | 22 - Browsy/AppDelegate.swift | 69 -- .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 66 +- .../AppIcon.appiconset/browsy1024.png | Bin 0 -> 30014 bytes .../AppIcon.appiconset/browsy128.png | Bin 0 -> 3031 bytes .../AppIcon.appiconset/browsy16.png | Bin 0 -> 479 bytes .../AppIcon.appiconset/browsy256 1.png | Bin 0 -> 6534 bytes .../AppIcon.appiconset/browsy256.png | Bin 0 -> 6534 bytes .../AppIcon.appiconset/browsy32 1.png | Bin 0 -> 798 bytes .../AppIcon.appiconset/browsy32.png | Bin 0 -> 798 bytes .../AppIcon.appiconset/browsy512 1.png | Bin 0 -> 13747 bytes .../AppIcon.appiconset/browsy512.png | Bin 0 -> 13747 bytes .../AppIcon.appiconset/browsy64.png | Bin 0 -> 1574 bytes .../AppIcon.appiconset/dsadas-1.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-2.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-3.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-4.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-5.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-6.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-7.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-8.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas-9.png | Bin 3526 -> 0 bytes .../AppIcon.appiconset/dsadas.png | Bin 3526 -> 0 bytes .../Background.colorset/Contents.json | 38 + Browsy/Assets.xcassets/Contents.json | 6 + .../MenuIcon.imageset/Contents.json | 21 + .../MenuIcon.imageset/browsymenu16.png | Bin 0 -> 356 bytes .../MenuIcon.imageset/browsymenu32.png | Bin 0 -> 564 bytes Browsy/Base.lproj/Main.storyboard | 801 ------------------ Browsy/BrowserManager/Browser.swift | 19 + Browsy/BrowserManager/BrowserManager.swift | 69 ++ Browsy/Browsy.entitlements | 12 + Browsy/BrowsyApp.swift | 24 + Browsy/BrowsyAppDelegate.swift | 38 + .../ChooserScreenBindingView.swift | 19 + .../ChooserScreenPresenter.swift | 35 + Browsy/ChooserScreen/ChooserScreenView.swift | 50 ++ .../ChooserScreen/ChooserWindowManager.swift | 39 + Browsy/Dependencies.swift | 63 ++ Browsy/Info.plist | 70 +- Browsy/MenuView.swift | 28 + .../Preview Assets.xcassets/Contents.json | 6 + Browsy/ViewController.swift | 137 --- BrowsyTests/BrowsyTests.swift | 29 +- .../ChooserScreenPresenterTest.swift | 52 ++ BrowsyTests/Info.plist | 22 - BrowsyUITests/BrowsyUITests.swift | 41 + BrowsyUITests/BrowsyUITestsLaunchTests.swift | 32 + 57 files changed, 1182 insertions(+), 1432 deletions(-) create mode 100644 .github/workflows/main.yml delete mode 100644 .travis.yml create mode 100644 Browsy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Browsy.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/Browsy.xcscheme delete mode 100644 Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 Browsy/AppDelegate.swift create mode 100644 Browsy/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy1024.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy128.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy16.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy256 1.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy256.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy32 1.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy32.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy512 1.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy512.png create mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/browsy64.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-1.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-2.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-3.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-4.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-5.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-6.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-7.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-8.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-9.png delete mode 100644 Browsy/Assets.xcassets/AppIcon.appiconset/dsadas.png create mode 100644 Browsy/Assets.xcassets/Background.colorset/Contents.json create mode 100644 Browsy/Assets.xcassets/Contents.json create mode 100644 Browsy/Assets.xcassets/MenuIcon.imageset/Contents.json create mode 100644 Browsy/Assets.xcassets/MenuIcon.imageset/browsymenu16.png create mode 100644 Browsy/Assets.xcassets/MenuIcon.imageset/browsymenu32.png delete mode 100644 Browsy/Base.lproj/Main.storyboard create mode 100644 Browsy/BrowserManager/Browser.swift create mode 100644 Browsy/BrowserManager/BrowserManager.swift create mode 100644 Browsy/Browsy.entitlements create mode 100644 Browsy/BrowsyApp.swift create mode 100644 Browsy/BrowsyAppDelegate.swift create mode 100644 Browsy/ChooserScreen/ChooserScreenBindingView.swift create mode 100644 Browsy/ChooserScreen/ChooserScreenPresenter.swift create mode 100644 Browsy/ChooserScreen/ChooserScreenView.swift create mode 100644 Browsy/ChooserScreen/ChooserWindowManager.swift create mode 100644 Browsy/Dependencies.swift create mode 100644 Browsy/MenuView.swift create mode 100644 Browsy/Preview Content/Preview Assets.xcassets/Contents.json delete mode 100644 Browsy/ViewController.swift create mode 100644 BrowsyTests/ChooserScreen/ChooserScreenPresenterTest.swift delete mode 100644 BrowsyTests/Info.plist create mode 100644 BrowsyUITests/BrowsyUITests.swift create mode 100644 BrowsyUITests/BrowsyUITestsLaunchTests.swift diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..a0310eb --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,34 @@ +name: CI + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + workflow_dispatch: + +jobs: + build: + + runs-on: macos-14 + timeout-minutes: 10 + + steps: + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.4' + - uses: actions/checkout@v4 + - name: Build + run: xcodebuild -project Browsy.xcodeproj -scheme Browsy -sdk macosx CODE_SIGNING_ALLOWED=NO + # Temporarily disabled until we have a way to run tests and sign the app. + # - name: Test + # run: xcodebuild -project Browsy.xcodeproj -scheme Browsy -sdk macosx CODE_SIGNING_ALLOWED=NO test + # - name: Archive + # run: xcodebuild -project Browsy.xcodeproj -scheme Browsy -sdk macosx -archivePath Browsy CODE_SIGNING_ALLOWED=NO archive + # - name: Zip + # run: zip -r Browsy.xcarchive.zip Browsy.xcarchive + # - name: Upload + # uses: actions/upload-artifact@v4 + # with: + # name: Browsy.xcarchive.zip + # path: Browsy.xcarchive.zip diff --git a/.gitignore b/.gitignore index 2c22487..52fe2f7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,27 +2,13 @@ # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore -## Build generated -build/ -DerivedData/ - -## Various settings -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 +## User settings xcuserdata/ -## Other -*.moved-aside -*.xcuserstate - ## Obj-C/Swift specific *.hmap + +## App packaging *.ipa *.dSYM.zip *.dSYM @@ -35,6 +21,14 @@ playground.xcworkspace # # 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 @@ -44,22 +38,25 @@ playground.xcworkspace # 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 +Carthage/Build/ # 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. +# 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://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md +# https://docs.fastlane.tools/best-practices/source-control/#source-control fastlane/report.xml fastlane/Preview.html -fastlane/screenshots +fastlane/screenshots/**/*.png fastlane/test_output diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 89914b6..0000000 --- a/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -os: osx -osx_image: xcode9.2 -language: swift -xcode_project: Browsy.xcodeproj # path to your xcodeproj folder -xcode_scheme: Browsy -script: - - xcodebuild -scheme Browsy -configuration Release build test -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/Browsy.xcodeproj/project.pbxproj b/Browsy.xcodeproj/project.pbxproj index 2b7f771..96d2967 100644 --- a/Browsy.xcodeproj/project.pbxproj +++ b/Browsy.xcodeproj/project.pbxproj @@ -3,48 +3,87 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ - 19BCEE671E8FC82500871C0A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BCEE661E8FC82500871C0A /* ViewController.swift */; }; - 19E1A0771FF7E1180072376A /* BrowsyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E1A0761FF7E1180072376A /* BrowsyTests.swift */; }; - 19E940C01E8EEACC003F354A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E940BF1E8EEACC003F354A /* AppDelegate.swift */; }; - 19E940C41E8EEACC003F354A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 19E940C31E8EEACC003F354A /* Assets.xcassets */; }; - 19E940C71E8EEACC003F354A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 19E940C51E8EEACC003F354A /* Main.storyboard */; }; + 1914FE292C1B782800F32B05 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 1914FE282C1B782800F32B05 /* Sparkle */; }; + 194634C92C0BB1AE002F8AFE /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194634C82C0BB1AE002F8AFE /* MenuView.swift */; }; + 19626BA12C0881C30034D54F /* BrowsyApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19626BA02C0881C30034D54F /* BrowsyApp.swift */; }; + 19626BA52C0881C40034D54F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 19626BA42C0881C40034D54F /* Assets.xcassets */; }; + 19626BA82C0881C40034D54F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 19626BA72C0881C40034D54F /* Preview Assets.xcassets */; }; + 19626BB32C0881C50034D54F /* BrowsyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19626BB22C0881C50034D54F /* BrowsyTests.swift */; }; + 19626BBD2C0881C50034D54F /* BrowsyUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19626BBC2C0881C50034D54F /* BrowsyUITests.swift */; }; + 19626BBF2C0881C50034D54F /* BrowsyUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19626BBE2C0881C50034D54F /* BrowsyUITestsLaunchTests.swift */; }; + 197019582C08AA8800D63B8E /* ChooserScreenBindingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197019572C08AA8800D63B8E /* ChooserScreenBindingView.swift */; }; + 1979A8C42C09B58000E3E062 /* ChooserScreenPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1979A8C32C09B58000E3E062 /* ChooserScreenPresenter.swift */; }; + 1979A8C62C09B6BA00E3E062 /* BrowserManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1979A8C52C09B6BA00E3E062 /* BrowserManager.swift */; }; + 1979A8C82C09BC2300E3E062 /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1979A8C72C09BC2300E3E062 /* Dependencies.swift */; }; + 1979A8CA2C09CAD900E3E062 /* ChooserWindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1979A8C92C09CAD900E3E062 /* ChooserWindowManager.swift */; }; + 1979A8CC2C09D51000E3E062 /* BrowsyAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1979A8CB2C09D51000E3E062 /* BrowsyAppDelegate.swift */; }; + 1981D6A72C0A662000D60F8B /* ChooserScreenPresenterTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1981D6A62C0A662000D60F8B /* ChooserScreenPresenterTest.swift */; }; + 1981D6AA2C0A735B00D60F8B /* ChooserScreenView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1981D6A92C0A735B00D60F8B /* ChooserScreenView.swift */; }; + 1981D6AD2C0A741900D60F8B /* Browser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1981D6AC2C0A741900D60F8B /* Browser.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 19E1A0791FF7E1180072376A /* PBXContainerItemProxy */ = { + 19626BAF2C0881C50034D54F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 19E940B41E8EEACC003F354A /* Project object */; + containerPortal = 19626B952C0881C30034D54F /* Project object */; proxyType = 1; - remoteGlobalIDString = 19E940BB1E8EEACC003F354A; + remoteGlobalIDString = 19626B9C2C0881C30034D54F; + remoteInfo = Browsy; + }; + 19626BB92C0881C50034D54F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 19626B952C0881C30034D54F /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19626B9C2C0881C30034D54F; remoteInfo = Browsy; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 19BCEE661E8FC82500871C0A /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 19E1A0741FF7E1180072376A /* BrowsyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BrowsyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 19E1A0761FF7E1180072376A /* BrowsyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsyTests.swift; sourceTree = ""; }; - 19E1A0781FF7E1180072376A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 19E940BC1E8EEACC003F354A /* Browsy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Browsy.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 19E940BF1E8EEACC003F354A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 19E940C31E8EEACC003F354A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 19E940C61E8EEACC003F354A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 19E940C81E8EEACC003F354A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 194634C82C0BB1AE002F8AFE /* MenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = ""; }; + 19626B9D2C0881C30034D54F /* Browsy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Browsy.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 19626BA02C0881C30034D54F /* BrowsyApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsyApp.swift; sourceTree = ""; }; + 19626BA42C0881C40034D54F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 19626BA72C0881C40034D54F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 19626BA92C0881C40034D54F /* Browsy.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Browsy.entitlements; sourceTree = ""; }; + 19626BAE2C0881C50034D54F /* BrowsyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BrowsyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 19626BB22C0881C50034D54F /* BrowsyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsyTests.swift; sourceTree = ""; }; + 19626BB82C0881C50034D54F /* BrowsyUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BrowsyUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 19626BBC2C0881C50034D54F /* BrowsyUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsyUITests.swift; sourceTree = ""; }; + 19626BBE2C0881C50034D54F /* BrowsyUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsyUITestsLaunchTests.swift; sourceTree = ""; }; + 197019572C08AA8800D63B8E /* ChooserScreenBindingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooserScreenBindingView.swift; sourceTree = ""; }; + 1970195E2C08C28000D63B8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 1979A8C32C09B58000E3E062 /* ChooserScreenPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooserScreenPresenter.swift; sourceTree = ""; }; + 1979A8C52C09B6BA00E3E062 /* BrowserManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserManager.swift; sourceTree = ""; }; + 1979A8C72C09BC2300E3E062 /* Dependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dependencies.swift; sourceTree = ""; }; + 1979A8C92C09CAD900E3E062 /* ChooserWindowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooserWindowManager.swift; sourceTree = ""; }; + 1979A8CB2C09D51000E3E062 /* BrowsyAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowsyAppDelegate.swift; sourceTree = ""; }; + 1981D6A62C0A662000D60F8B /* ChooserScreenPresenterTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooserScreenPresenterTest.swift; sourceTree = ""; }; + 1981D6A92C0A735B00D60F8B /* ChooserScreenView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooserScreenView.swift; sourceTree = ""; }; + 1981D6AC2C0A741900D60F8B /* Browser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Browser.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 19E1A0711FF7E1180072376A /* Frameworks */ = { + 19626B9A2C0881C30034D54F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1914FE292C1B782800F32B05 /* Sparkle in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 19626BAB2C0881C50034D54F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 19E940B91E8EEACC003F354A /* Frameworks */ = { + 19626BB52C0881C50034D54F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -54,236 +93,296 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 19E1A0751FF7E1180072376A /* BrowsyTests */ = { + 19626B942C0881C30034D54F = { isa = PBXGroup; children = ( - 19E1A0761FF7E1180072376A /* BrowsyTests.swift */, - 19E1A0781FF7E1180072376A /* Info.plist */, + 19626B9F2C0881C30034D54F /* Browsy */, + 19626BB12C0881C50034D54F /* BrowsyTests */, + 19626BBB2C0881C50034D54F /* BrowsyUITests */, + 19626B9E2C0881C30034D54F /* Products */, + ); + sourceTree = ""; + }; + 19626B9E2C0881C30034D54F /* Products */ = { + isa = PBXGroup; + children = ( + 19626B9D2C0881C30034D54F /* Browsy.app */, + 19626BAE2C0881C50034D54F /* BrowsyTests.xctest */, + 19626BB82C0881C50034D54F /* BrowsyUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 19626B9F2C0881C30034D54F /* Browsy */ = { + isa = PBXGroup; + children = ( + 1981D6AB2C0A73E400D60F8B /* BrowserManager */, + 1981D6A52C0A63FD00D60F8B /* ChooserScreen */, + 1970195E2C08C28000D63B8E /* Info.plist */, + 19626BA02C0881C30034D54F /* BrowsyApp.swift */, + 19626BA42C0881C40034D54F /* Assets.xcassets */, + 19626BA92C0881C40034D54F /* Browsy.entitlements */, + 19626BA62C0881C40034D54F /* Preview Content */, + 1979A8C72C09BC2300E3E062 /* Dependencies.swift */, + 1979A8CB2C09D51000E3E062 /* BrowsyAppDelegate.swift */, + 194634C82C0BB1AE002F8AFE /* MenuView.swift */, + ); + path = Browsy; + sourceTree = ""; + }; + 19626BA62C0881C40034D54F /* Preview Content */ = { + isa = PBXGroup; + children = ( + 19626BA72C0881C40034D54F /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 19626BB12C0881C50034D54F /* BrowsyTests */ = { + isa = PBXGroup; + children = ( + 1981D6A82C0A67C200D60F8B /* ChooserScreen */, + 19626BB22C0881C50034D54F /* BrowsyTests.swift */, ); path = BrowsyTests; sourceTree = ""; }; - 19E940B31E8EEACC003F354A = { + 19626BBB2C0881C50034D54F /* BrowsyUITests */ = { isa = PBXGroup; children = ( - 19E940BE1E8EEACC003F354A /* Browsy */, - 19E1A0751FF7E1180072376A /* BrowsyTests */, - 19E940BD1E8EEACC003F354A /* Products */, + 19626BBC2C0881C50034D54F /* BrowsyUITests.swift */, + 19626BBE2C0881C50034D54F /* BrowsyUITestsLaunchTests.swift */, ); + path = BrowsyUITests; sourceTree = ""; }; - 19E940BD1E8EEACC003F354A /* Products */ = { + 1981D6A52C0A63FD00D60F8B /* ChooserScreen */ = { isa = PBXGroup; children = ( - 19E940BC1E8EEACC003F354A /* Browsy.app */, - 19E1A0741FF7E1180072376A /* BrowsyTests.xctest */, + 1979A8C92C09CAD900E3E062 /* ChooserWindowManager.swift */, + 197019572C08AA8800D63B8E /* ChooserScreenBindingView.swift */, + 1979A8C32C09B58000E3E062 /* ChooserScreenPresenter.swift */, + 1981D6A92C0A735B00D60F8B /* ChooserScreenView.swift */, ); - name = Products; + path = ChooserScreen; sourceTree = ""; }; - 19E940BE1E8EEACC003F354A /* Browsy */ = { + 1981D6A82C0A67C200D60F8B /* ChooserScreen */ = { isa = PBXGroup; children = ( - 19BCEE661E8FC82500871C0A /* ViewController.swift */, - 19E940BF1E8EEACC003F354A /* AppDelegate.swift */, - 19E940C31E8EEACC003F354A /* Assets.xcassets */, - 19E940C51E8EEACC003F354A /* Main.storyboard */, - 19E940C81E8EEACC003F354A /* Info.plist */, + 1981D6A62C0A662000D60F8B /* ChooserScreenPresenterTest.swift */, ); - path = Browsy; + path = ChooserScreen; + sourceTree = ""; + }; + 1981D6AB2C0A73E400D60F8B /* BrowserManager */ = { + isa = PBXGroup; + children = ( + 1979A8C52C09B6BA00E3E062 /* BrowserManager.swift */, + 1981D6AC2C0A741900D60F8B /* Browser.swift */, + ); + path = BrowserManager; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 19E1A0731FF7E1180072376A /* BrowsyTests */ = { + 19626B9C2C0881C30034D54F /* Browsy */ = { isa = PBXNativeTarget; - buildConfigurationList = 19E1A07D1FF7E1180072376A /* Build configuration list for PBXNativeTarget "BrowsyTests" */; + buildConfigurationList = 19626BC22C0881C50034D54F /* Build configuration list for PBXNativeTarget "Browsy" */; buildPhases = ( - 19E1A0701FF7E1180072376A /* Sources */, - 19E1A0711FF7E1180072376A /* Frameworks */, - 19E1A0721FF7E1180072376A /* Resources */, + 19626B992C0881C30034D54F /* Sources */, + 19626B9A2C0881C30034D54F /* Frameworks */, + 19626B9B2C0881C30034D54F /* Resources */, ); buildRules = ( ); dependencies = ( - 19E1A07A1FF7E1180072376A /* PBXTargetDependency */, + ); + name = Browsy; + packageProductDependencies = ( + 1914FE282C1B782800F32B05 /* Sparkle */, + ); + productName = Browsy; + productReference = 19626B9D2C0881C30034D54F /* Browsy.app */; + productType = "com.apple.product-type.application"; + }; + 19626BAD2C0881C50034D54F /* BrowsyTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 19626BC52C0881C50034D54F /* Build configuration list for PBXNativeTarget "BrowsyTests" */; + buildPhases = ( + 19626BAA2C0881C50034D54F /* Sources */, + 19626BAB2C0881C50034D54F /* Frameworks */, + 19626BAC2C0881C50034D54F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 19626BB02C0881C50034D54F /* PBXTargetDependency */, ); name = BrowsyTests; productName = BrowsyTests; - productReference = 19E1A0741FF7E1180072376A /* BrowsyTests.xctest */; + productReference = 19626BAE2C0881C50034D54F /* BrowsyTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 19E940BB1E8EEACC003F354A /* Browsy */ = { + 19626BB72C0881C50034D54F /* BrowsyUITests */ = { isa = PBXNativeTarget; - buildConfigurationList = 19E940CB1E8EEACC003F354A /* Build configuration list for PBXNativeTarget "Browsy" */; + buildConfigurationList = 19626BC82C0881C50034D54F /* Build configuration list for PBXNativeTarget "BrowsyUITests" */; buildPhases = ( - 19E940B81E8EEACC003F354A /* Sources */, - 19E940B91E8EEACC003F354A /* Frameworks */, - 19E940BA1E8EEACC003F354A /* Resources */, + 19626BB42C0881C50034D54F /* Sources */, + 19626BB52C0881C50034D54F /* Frameworks */, + 19626BB62C0881C50034D54F /* Resources */, ); buildRules = ( ); dependencies = ( + 19626BBA2C0881C50034D54F /* PBXTargetDependency */, ); - name = Browsy; - productName = Browsy; - productReference = 19E940BC1E8EEACC003F354A /* Browsy.app */; - productType = "com.apple.product-type.application"; + name = BrowsyUITests; + productName = BrowsyUITests; + productReference = 19626BB82C0881C50034D54F /* BrowsyUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 19E940B41E8EEACC003F354A /* Project object */ = { + 19626B952C0881C30034D54F /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0920; - ORGANIZATIONNAME = kJulio; + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1540; + LastUpgradeCheck = 1540; TargetAttributes = { - 19E1A0731FF7E1180072376A = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - TestTargetID = 19E940BB1E8EEACC003F354A; + 19626B9C2C0881C30034D54F = { + CreatedOnToolsVersion = 15.4; }; - 19E940BB1E8EEACC003F354A = { - CreatedOnToolsVersion = 8.3; - DevelopmentTeam = C4T5VAUNJX; - LastSwiftMigration = 0910; - ProvisioningStyle = Automatic; + 19626BAD2C0881C50034D54F = { + CreatedOnToolsVersion = 15.4; + TestTargetID = 19626B9C2C0881C30034D54F; + }; + 19626BB72C0881C50034D54F = { + CreatedOnToolsVersion = 15.4; + TestTargetID = 19626B9C2C0881C30034D54F; }; }; }; - buildConfigurationList = 19E940B71E8EEACC003F354A /* Build configuration list for PBXProject "Browsy" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = 19626B982C0881C30034D54F /* Build configuration list for PBXProject "Browsy" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 19E940B31E8EEACC003F354A; - productRefGroup = 19E940BD1E8EEACC003F354A /* Products */; + mainGroup = 19626B942C0881C30034D54F; + packageReferences = ( + 1914FE272C1B782800F32B05 /* XCRemoteSwiftPackageReference "Sparkle" */, + ); + productRefGroup = 19626B9E2C0881C30034D54F /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 19E940BB1E8EEACC003F354A /* Browsy */, - 19E1A0731FF7E1180072376A /* BrowsyTests */, + 19626B9C2C0881C30034D54F /* Browsy */, + 19626BAD2C0881C50034D54F /* BrowsyTests */, + 19626BB72C0881C50034D54F /* BrowsyUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 19E1A0721FF7E1180072376A /* Resources */ = { + 19626B9B2C0881C30034D54F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 19626BA82C0881C40034D54F /* Preview Assets.xcassets in Resources */, + 19626BA52C0881C40034D54F /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 19E940BA1E8EEACC003F354A /* Resources */ = { + 19626BAC2C0881C50034D54F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 19626BB62C0881C50034D54F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 19E940C41E8EEACC003F354A /* Assets.xcassets in Resources */, - 19E940C71E8EEACC003F354A /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 19E1A0701FF7E1180072376A /* Sources */ = { + 19626B992C0881C30034D54F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1979A8CC2C09D51000E3E062 /* BrowsyAppDelegate.swift in Sources */, + 194634C92C0BB1AE002F8AFE /* MenuView.swift in Sources */, + 1979A8C82C09BC2300E3E062 /* Dependencies.swift in Sources */, + 1981D6AA2C0A735B00D60F8B /* ChooserScreenView.swift in Sources */, + 1979A8CA2C09CAD900E3E062 /* ChooserWindowManager.swift in Sources */, + 197019582C08AA8800D63B8E /* ChooserScreenBindingView.swift in Sources */, + 1979A8C62C09B6BA00E3E062 /* BrowserManager.swift in Sources */, + 1981D6AD2C0A741900D60F8B /* Browser.swift in Sources */, + 1979A8C42C09B58000E3E062 /* ChooserScreenPresenter.swift in Sources */, + 19626BA12C0881C30034D54F /* BrowsyApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 19626BAA2C0881C50034D54F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 19E1A0771FF7E1180072376A /* BrowsyTests.swift in Sources */, + 1981D6A72C0A662000D60F8B /* ChooserScreenPresenterTest.swift in Sources */, + 19626BB32C0881C50034D54F /* BrowsyTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 19E940B81E8EEACC003F354A /* Sources */ = { + 19626BB42C0881C50034D54F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 19BCEE671E8FC82500871C0A /* ViewController.swift in Sources */, - 19E940C01E8EEACC003F354A /* AppDelegate.swift in Sources */, + 19626BBF2C0881C50034D54F /* BrowsyUITestsLaunchTests.swift in Sources */, + 19626BBD2C0881C50034D54F /* BrowsyUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 19E1A07A1FF7E1180072376A /* PBXTargetDependency */ = { + 19626BB02C0881C50034D54F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 19E940BB1E8EEACC003F354A /* Browsy */; - targetProxy = 19E1A0791FF7E1180072376A /* PBXContainerItemProxy */; + target = 19626B9C2C0881C30034D54F /* Browsy */; + targetProxy = 19626BAF2C0881C50034D54F /* PBXContainerItemProxy */; }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 19E940C51E8EEACC003F354A /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 19E940C61E8EEACC003F354A /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; + 19626BBA2C0881C50034D54F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 19626B9C2C0881C30034D54F /* Browsy */; + targetProxy = 19626BB92C0881C50034D54F /* PBXContainerItemProxy */; }; -/* End PBXVariantGroup section */ +/* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 19E1A07B1FF7E1180072376A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = BrowsyTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; - PRODUCT_BUNDLE_IDENTIFIER = net.kjulio.BrowsyTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Browsy.app/Contents/MacOS/Browsy"; - }; - name = Debug; - }; - 19E1A07C1FF7E1180072376A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = BrowsyTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; - PRODUCT_BUNDLE_IDENTIFIER = net.kjulio.BrowsyTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Browsy.app/Contents/MacOS/Browsy"; - }; - name = Release; - }; - 19E940C91E8EEACC003F354A /* Debug */ = { + 19626BC02C0881C50034D54F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -291,19 +390,22 @@ 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; - CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -317,29 +419,33 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 14.5; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; - 19E940CA1E8EEACC003F354A /* Release */ = { + 19626BC12C0881C50034D54F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -347,19 +453,22 @@ 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; - CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -367,74 +476,208 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.12; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 14.5; MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; }; name = Release; }; - 19E940CC1E8EEACC003F354A /* Debug */ = { + 19626BC32C0881C50034D54F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Browsy/Browsy.entitlements; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Browsy/Preview Content\""; DEVELOPMENT_TEAM = C4T5VAUNJX; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Browsy/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = net.kjulio.Browsy; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; + INFOPLIST_KEY_LSUIElement = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = net.marcoromano.Browsy; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; }; name = Debug; }; - 19E940CD1E8EEACC003F354A /* Release */ = { + 19626BC42C0881C50034D54F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Browsy/Browsy.entitlements; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Browsy/Preview Content\""; DEVELOPMENT_TEAM = C4T5VAUNJX; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Browsy/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = net.kjulio.Browsy; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; + INFOPLIST_KEY_LSUIElement = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = net.marcoromano.Browsy; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 19626BC62C0881C50034D54F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = C4T5VAUNJX; + GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 14.5; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.marcoromano.BrowsyTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Browsy.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Browsy"; + }; + name = Debug; + }; + 19626BC72C0881C50034D54F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = C4T5VAUNJX; + GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 14.5; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.marcoromano.BrowsyTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Browsy.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Browsy"; + }; + name = Release; + }; + 19626BC92C0881C50034D54F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = C4T5VAUNJX; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.marcoromano.BrowsyUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Browsy; + }; + name = Debug; + }; + 19626BCA2C0881C50034D54F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = C4T5VAUNJX; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = net.marcoromano.BrowsyUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Browsy; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 19E1A07D1FF7E1180072376A /* Build configuration list for PBXNativeTarget "BrowsyTests" */ = { + 19626B982C0881C30034D54F /* Build configuration list for PBXProject "Browsy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 19626BC02C0881C50034D54F /* Debug */, + 19626BC12C0881C50034D54F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 19626BC22C0881C50034D54F /* Build configuration list for PBXNativeTarget "Browsy" */ = { isa = XCConfigurationList; buildConfigurations = ( - 19E1A07B1FF7E1180072376A /* Debug */, - 19E1A07C1FF7E1180072376A /* Release */, + 19626BC32C0881C50034D54F /* Debug */, + 19626BC42C0881C50034D54F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 19E940B71E8EEACC003F354A /* Build configuration list for PBXProject "Browsy" */ = { + 19626BC52C0881C50034D54F /* Build configuration list for PBXNativeTarget "BrowsyTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 19E940C91E8EEACC003F354A /* Debug */, - 19E940CA1E8EEACC003F354A /* Release */, + 19626BC62C0881C50034D54F /* Debug */, + 19626BC72C0881C50034D54F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 19E940CB1E8EEACC003F354A /* Build configuration list for PBXNativeTarget "Browsy" */ = { + 19626BC82C0881C50034D54F /* Build configuration list for PBXNativeTarget "BrowsyUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 19E940CC1E8EEACC003F354A /* Debug */, - 19E940CD1E8EEACC003F354A /* Release */, + 19626BC92C0881C50034D54F /* Debug */, + 19626BCA2C0881C50034D54F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 1914FE272C1B782800F32B05 /* XCRemoteSwiftPackageReference "Sparkle" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sparkle-project/Sparkle"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.6.3; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 1914FE282C1B782800F32B05 /* Sparkle */ = { + isa = XCSwiftPackageProductDependency; + package = 1914FE272C1B782800F32B05 /* XCRemoteSwiftPackageReference "Sparkle" */; + productName = Sparkle; + }; +/* End XCSwiftPackageProductDependency section */ }; - rootObject = 19E940B41E8EEACC003F354A /* Project object */; + rootObject = 19626B952C0881C30034D54F /* Project object */; } diff --git a/Browsy.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Browsy.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 29790dc..919434a 100644 --- a/Browsy.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Browsy.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/Browsy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Browsy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Browsy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Browsy.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Browsy.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..d380910 --- /dev/null +++ b/Browsy.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "e721da7f9826abdffcb6185e886155efa2514bd6234475f1afa893e29eb258d6", + "pins" : [ + { + "identity" : "sparkle", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sparkle-project/Sparkle", + "state" : { + "revision" : "b456fd404954a9e13f55aa0c88cd5a40b8399638", + "version" : "2.6.3" + } + } + ], + "version" : 3 +} diff --git a/Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/Browsy.xcscheme b/Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/Browsy.xcscheme deleted file mode 100644 index 2a1c96f..0000000 --- a/Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/Browsy.xcscheme +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/xcschememanagement.plist b/Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 6adc0a7..0000000 --- a/Browsy.xcodeproj/xcuserdata/julionb.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - Browsy.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - 19E940BB1E8EEACC003F354A - - primary - - - - - diff --git a/Browsy/AppDelegate.swift b/Browsy/AppDelegate.swift deleted file mode 100644 index 79947fa..0000000 --- a/Browsy/AppDelegate.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// AppDelegate.swift -// Browsy -// -// Created by julionb on 31/03/2017. -// Copyright © 2017 kJulio. All rights reserved. -// - -import Cocoa - -@NSApplicationMain -class AppDelegate: NSObject, NSApplicationDelegate { - - var lastUrl: URL? { - didSet { - NotificationCenter.default.post( - name: NSNotification.Name(rawValue: "lastUrl"), - object: nil) - } - } - - func applicationDidFinishLaunching(_ aNotification: Notification) { - // Insert code here to initialize your application - } - - func applicationWillTerminate(_ aNotification: Notification) { - // Insert code here to tear down your application - } - - override func awakeFromNib() { - let eventManager = NSAppleEventManager.shared() - eventManager.setEventHandler( - self, - andSelector: #selector(self.handleGetURLEvent(replyEvent:)), - forEventClass: AEEventClass(kInternetEventClass), - andEventID: AEEventID(kAEGetURL) - ) - } - - @objc func handleGetURLEvent(replyEvent: NSAppleEventDescriptor?) { - if let aeEventDescriptor = replyEvent? - .paramDescriptor(forKeyword: AEKeyword(keyDirectObject)) { - let urlStr = aeEventDescriptor.stringValue - lastUrl = URL(string: urlStr!)! - } - - } - - /// appId: `nil` use the default HTTP client, or set what you want, - /// e.g. Safari `com.apple.Safari` - func openInSpecificBrowser(url: URL, appId: String? = nil) -> Bool { - return NSWorkspace.shared.open( - [url], - withAppBundleIdentifier: appId, - options: NSWorkspace.LaunchOptions.default, - additionalEventParamDescriptor: nil, - launchIdentifiers: nil - ) - } - - func openLastUrl(appId: String? = nil) -> Bool { - if (lastUrl != nil) { - return openInSpecificBrowser(url: lastUrl!, appId: appId) - } else { - return false - } - } - -} diff --git a/Browsy/Assets.xcassets/AccentColor.colorset/Contents.json b/Browsy/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Browsy/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/Contents.json b/Browsy/Assets.xcassets/AppIcon.appiconset/Contents.json index 388ddf3..6fa1116 100644 --- a/Browsy/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Browsy/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { "images" : [ { - "size" : "16x16", + "filename" : "browsy16.png", "idiom" : "mac", - "filename" : "dsadas-9.png", - "scale" : "1x" + "scale" : "1x", + "size" : "16x16" }, { - "size" : "16x16", + "filename" : "browsy32 1.png", "idiom" : "mac", - "filename" : "dsadas-8.png", - "scale" : "2x" + "scale" : "2x", + "size" : "16x16" }, { - "size" : "32x32", + "filename" : "browsy32.png", "idiom" : "mac", - "filename" : "dsadas-7.png", - "scale" : "1x" + "scale" : "1x", + "size" : "32x32" }, { - "size" : "32x32", + "filename" : "browsy64.png", "idiom" : "mac", - "filename" : "dsadas-6.png", - "scale" : "2x" + "scale" : "2x", + "size" : "32x32" }, { - "size" : "128x128", + "filename" : "browsy128.png", "idiom" : "mac", - "filename" : "dsadas-5.png", - "scale" : "1x" + "scale" : "1x", + "size" : "128x128" }, { - "size" : "128x128", + "filename" : "browsy256 1.png", "idiom" : "mac", - "filename" : "dsadas-4.png", - "scale" : "2x" + "scale" : "2x", + "size" : "128x128" }, { - "size" : "256x256", + "filename" : "browsy256.png", "idiom" : "mac", - "filename" : "dsadas-3.png", - "scale" : "1x" + "scale" : "1x", + "size" : "256x256" }, { - "size" : "256x256", + "filename" : "browsy512 1.png", "idiom" : "mac", - "filename" : "dsadas-2.png", - "scale" : "2x" + "scale" : "2x", + "size" : "256x256" }, { - "size" : "512x512", + "filename" : "browsy512.png", "idiom" : "mac", - "filename" : "dsadas-1.png", - "scale" : "1x" + "scale" : "1x", + "size" : "512x512" }, { - "size" : "512x512", + "filename" : "browsy1024.png", "idiom" : "mac", - "filename" : "dsadas.png", - "scale" : "2x" + "scale" : "2x", + "size" : "512x512" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy1024.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy1024.png new file mode 100644 index 0000000000000000000000000000000000000000..dc05e88c941a53cdbff21717ab1d7c7d49f79962 GIT binary patch literal 30014 zcmeEv`CpCs|Mzu@Y|)sAqKpw~6=mt91w&40q0mBE+EY=7l+?k{%-ByVZ90aOCD9^L z3S&vDWC<;3J4BmGX}O=TD>L`~{R8gbzMscqn7Ph%z1P?Jd_CXq&!1KnCSyk{jAj^S zEN|s+YZzu2{&g5LQVM^CDykpAU!%6KwDV_}arfyT&LiJsXFQbWFSq4e`?~T2Hv73S z0RaJ89zI_FTQ_fa(em|ki~X`#fnk1Oc)u;N*&Wwh6>!RF=f1(gm*>rwHtl0f$7oKF zH68Z*Fm2uO(|<8vFk$trdooMrYNY)&`&Xlh5zAjnn99zyGrl$Y?8W8gI)z zZ*~8CQSjg&J3U54m*%uI`cFIV-|$msvSo?(iSNBRExFzsH*Vx$VD=8F<@C4l2YLL- zh@_wiDPBK+@?kSP3rl#;!s zBbX}BgUT(IX{&@weA_Zt2@{21Ez-U@4eIxYOMm;6I%)7zs1%cNNRQ{(^C{JBR^W%! zyb!&Dx603itMM^Gw2ci4@Zm zxHnw7H0N;tNuFVxbER+z!x+@oD+f4N|FXTqX>d`x`}m3@946>ttFnGyr(ldSk61687rA`mtn@ZSqYENtkmf^)_uEa1k>ag z&+{>xH@)ECT&es$u8d%K7GIb<(3|NZtagEA^W5qqoFY6@nzJO|TjClc&1esfPA)>jcbEEvHEdUW+WEQa?j>Zn$(-7;d}PYyG1)~R9d>%oJ{_eWAufaA)Ipatw3nb7#>Wulxd@quN`Ev6~su#7@&RU!ku{b0MUIUQm$Di`056F{Wq~ z6H{Em3pwrlpnN*K!RvJ1u~qFgiOV*H$TRM82g3Vi7d$cxW0-uS?AZnHc#g9bC0ZUb z#yYPI3o3c*X1|5^@U8DrPO$KE5&yJXMELGrrS?Oo|Zk#q_Ws{&>v#R~@ZhJL`Nx2*biM`_T1lt<}zjBhVgZml+8|Idj3+x_f5mBrb#hDOC5x=;c*jX4Dd^y zIJ_=T7;JR4xQT;hJC~`Vr(aNgP#;ry5^}OGUs*A6nfpd5M#1Bxa+GrA9a=KoeV@XQ z@Y+4aKiP+K1S{-xJHB`*Y@~IGd2AlteMk^x7FHG{&FJ1+!@Fvc=0QVtUmBp&vr>2w zt!YXzx8C^iLZX~^v%hSyChZiLPtO=<8FOAg<%IK=4SkZ3JNtzNJ9+Cg6qkO2^n6L% zBCJu7Uqjv4KR(C1v8vrh{8LPVEW;1G8y(PG^T3E<_^Hq5wR~m@qsE=>(c_?nc^$`Q zdE0V_4cM8On4AfEVl{4UMPBHj^knT{cxnIqY<7PAoCFi5DC~Q9@S=i@dy2YqC7Cf> z+mv6=Q7a}JJ)EJ zH2U{Sm#F^lc}lwOR_iwIe4f*?w?%!!xUzF!R;GCi*PDiw#r2*VC-Tq~*0p21L{o~Q zbyS`uSy~G72HVbtDFwY8bQ~P$*KvM);>xX$m*nR;Kh6tI$$VjN$A7wf%ImRZ_ZRTm zW0l{i1g2~sWBzy)Q+>EgdA)OW@5qR{VNBVJ7m?4`IcR=@J31sY?aaITVQ&4MFH28M zUsnF߼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 literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy16.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy16.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d7739de49bbc0e9c73ee29784fa8f3ce470034 GIT binary patch literal 479 zcmV<50U-W~P)bp{a)pAS(asKv)PyiPm=I!3iX`N=ZVMTq*5tzxg3(%?RKWbI{(CP7>!1B zyInlbV=|dgtJNqLiy_@bgX8f?zuynulGtvyWHOm=y2yFpCCuk@dc9tVzi5!nW?3v2 z%x1G7>tHbWy@BI6*tSi*UZ>G$01%6XJNB8-Jdej?hQlGA=P{j50cbXxrsON;r$I7L zrBcy)y*B6IK~hk`kgxH)O{dee+wCAtG#bUWZCb4s$z;-}Ur#Yu#y0+GnM{K};S*Nv V+>$s(-6Q}2002ovPDHLkV1j`Q%gq1) literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy256 1.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy256 1.png new file mode 100644 index 0000000000000000000000000000000000000000..4384c44631ea5ddae4456edc3530b04ced549d59 GIT binary patch literal 6534 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 literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy256.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy256.png new file mode 100644 index 0000000000000000000000000000000000000000..4384c44631ea5ddae4456edc3530b04ced549d59 GIT binary patch literal 6534 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 literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy32 1.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy32 1.png new file mode 100644 index 0000000000000000000000000000000000000000..3d291e2e27151d65ae692082f736cd6d5f7fec3b GIT binary patch literal 798 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 literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy512.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy512.png new file mode 100644 index 0000000000000000000000000000000000000000..62b222a45241902a145b96d4a5e93fc57c8f3f20 GIT binary patch literal 13747 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 literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/browsy64.png b/Browsy/Assets.xcassets/AppIcon.appiconset/browsy64.png new file mode 100644 index 0000000000000000000000000000000000000000..fd24a3ab006f271ebcd4eb7d2f63d8d986e5f8f4 GIT binary patch literal 1574 zcmV+>2HE+EP){QOu8VLoP&}z+MEi|$NLsUi)T^Q9xffr^Qwd+>Y zMTkfQQ6h8Ql~7Py6h*9dA=zMGyC!ra*p`8oGh)W9Q_h^dcvFNt@0|CecbZ-QFgHFQ z=YRgbbIyC7^Gu!)g8wsI*(Q)}%nFcg0@=o_0NEyxZFo$?6aYT~RX{QDrLByNBMuAz z9Y8xUZX`I*z&7Xw>VXE}3nPO#h!LO}XaW9F2~ZW_8{l`~d(+gM#S@?!=+ES+B0vcc z1-{PYc3Rtv^ge|`h$li3 zCr+FYfaTAE1q;NXLx)5x7E>KshQB_{K|04wyTH%Dcc%2WfYH%W&YnF>X=y3fuV1&4 zsth=w=b$G*0r0Dp(XApLkF#~_Rw9vzl{CMh&1FXD2@v8lSnX4(6m@lV+`4tkY>FbZ zEqg}j2@o_pqTNWR)6~?|Fg!eLHianxzA-zR9^7s>`}XbQ!Gi}RlS#(M$LZ|sWYeZi zx^eM%oYSXIn;lj@7o8Qd!|0NmX&1=P&lgv(UX{j2A`#tquh%Qa#>R}&5+CMbco)bs zE4K_yO-*dsvPEjIt*zzY!GltJB9WlIz1_^v(z!Tx81ngi95|r6BLQ&q=urv^q>DBk z9UXSka!!CyD5Ugu=kxhkvu2Id{`~oKJ83y5fZy*|_FcAYnbh|B^=mumOu;b$Mn^}L zeTRmIq_+9<=i5PN3XTcT+1aV&mrN#k`0%0BzGTS~yC?w;3eelztMoQ^;lc&o$Goz# z(oR~=mc;h&->fV-QC@cjEv~Uc|0CYo;+zg zAIAll#PIO2p%dPzQ>R$9YL)Fga-uBm^?KQ{W5*}Sof85i5(xr<0C(@+wLN!E2msn~ zc;m*6+`oU{*1S0*0Kl6!Z`i(lyOqMoN60Aw0A9R!p?hRDikuSwpslTqd-v|yk}D?# z5JGU~%o$s9<)i?h-9p7;G0SQt%SF;f(^9Ssc))YjI{Xmh*W zG&VM}Yu7I2d{3V~wam#e0g8%>ICktW>nL$s0cC_Bxti$bg zbN>8!&Ye4FCOi(@ks0*_7)NV7&MMZeTSr${mr{3$1WiCvX3TW#Y5{7{IxZbUVPPTR zaG2e@cT-(mOa)v#Ow8% z$}p7{m%lpyV<&D*?vWFhDcKK(S997>02Y?^Zek}1>EQ}JwfnR_C3X=z8 zzZjWB0b1*6721>WmC*z?BZl@5YDe3;r3>CnFeAW!3ORc(U>9Zu$Top&V^)A{6Ua9H Y1!yp-cnQqI0000007*qoM6N<$g7bFp(f|Me literal 0 HcmV?d00001 diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-1.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-1.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-2.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-2.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 zcmV;%4LS0OP)bYV5G?9%D=ZfhmU&85l?0V>nl{-Gti z<7hj=T5&8LY6W%e7E7nJCW0Vf(xsReNOFF^{Ua~t<%ZO#ejYc`Y^F%Re_!>Zqm2ib9%_q{2DX0h{7lV<jn9AK6GPAKa)8|t^b>rG$&m~sUWjozPA(2={$0ah^S3V;_H4J0_CjNJs<-I?F{ zaxC`bIiq<}G$jfk8eNr@_rdJX5z}f2z5vE7)0vVH$XNzItE9WS^4edB#hQCeXPQW$ z3m{(ctwjzwYY2Kjh(BgJPbvgBO{zZz>l3vN+mD#eGoHW|fC5xkvGz`8t_1K8rt`Q# zRQHf_ye6^rB?8oRp5X#h0R5ldPkmWLzr)Peo6h3}5qXoqv6@8Fvq32Y;{~7q#VgBJ zIx62|=1-c=;|B#^C(yTR;#>Ea&SJCxHr140%c7eBEH|0M6j9xS5LIlbZ#rx$gOLJg zsI1Ia>in*N)-wj=e(Q07;kQ;`CXcjb50`gK9cmjZb7p|v+~h@U3lYCrm$>I66x zQoXmjaoZuU`(m#ABa0N;4-bdDdV{Yb6WuUJ5>$B8}?6V*E%uwKU*1XST^6en)SAb|V8ir>7 z%$|I62)I$G^Qm2{R;7JIE$srx?KqXN-}B8Q(A_QbXV<5Hd>ZO1OYbA1pQPKVLJFmh5o*7A^`i%4%x^#)Q(ZvoM0NgjvzX?yYmh>_il7v$&a?}IXo>z99*heKCon~pKYKkn|p{1d&V zV?YFdiD=Gsm76zrPqgo(-U9OTqSaJ0FmmWX6?!-2L#R_MK>lO*Q4$ z3TS=CsVrZSYDHaj=~WZ$cfkTsfLL_%j32r^6)}gQ+Bo5E7y4zqvTP-0=tCRR0f9e1 z@Zo)2;}$?P8f8c2d+x`we5H6qFYsZ1+ycn&JoROJqh}f*+*DstdiQw0PFes8kcfWA zyHuIEc+MrJBP4b4oOz}rBt<}UyjOvw8#h&~UCzuecpEEy*M4mkauW5m$<6Wnq2{z) z)cpa%Xa724TY-KAIoX-tA-t^nERN^S!ik)MjM^dP)fiR)L;sWgBT3|o8MQtjJ13ZT z>!!LK>C3zk!IvIew{GaKbEp6cI&zl*oLPBU!N(}s)Eonlc1ftN?L-=ZRwP*4VLvioqX=SC-G`{?)atnMtl;K#NVsu*?upF>8RH z__6$^#Vks8a;F)JK$kO-PN~(nEH_CJE2zkH49gIrB8JGtrgK}5;QMNoRxl8_o0-sV zI*4TkLEBh~Yyr$vs%@-F@0-qHnZj+%q(@E1unZxzGC(b+b694mqLr1@7QhU}&=!_n z`h)2pmKjc1-r{qGb6NrEFdfG7nc#1=bvur6EEW@hJzuBZ3Kjtl5ugkJ3LG#U$nqDn z9smX&4rP`7X5&}}><5OP4$k_G*({d-_`?F&P`~9}2#%NyWcfzra7}#cNnqFvA`8?EV$C`kcy=6AjYBIn$Znwr}v~p#q4-o;=6k zXEW{rz=?P4)n&K!_4VTY6Ypl+4g=4`V$DONz(&jzs-(L}>Ap-mdGnQhIPuQg$j$R+ z+JPm@SK`v*;LU0E*1`Qa`sY85*p^pNfWDs0N8PobK8cRMoyoWzAhc`vPa_JTE3f^9 z+|HuY49v->4^^B#ek`LVF65J+zRk0?GjZnqQ+V&4w@t?wmx!GFXorqiQFO$x@K~(5 zhg5&;Ybwh(%=DwRJ9dnixOnVy0jy8>mdNs%vvc&8F$GZDu>FXr?(rv(YT`fq z%jnHXp9~`9xc7-HKPe;WIZavsHHob+iO8GYMzVaPc&(Q(1l? z;9&xiUPT)B;n12y)3XY^?p-X)4+4F)sVk^eiIhJhWe(%q`KLiSks#e zH|t!(KtpZA_6Z01OlpRZt^$by5}1qJ$6EsvWr)+)htns#yZ@0A!I94VuJ2A}*GaDu zQCCrZ2eH1GekvCc;gU<|dv>=m9qp%1;_R8fPQ0TJ##<>o>AtBnTvt{07y;|kN@e*% zRTH(1+a|sGdrFf;b>(-}3Sb{139jGe^hEwGl><^LfLQFwb0O7x?X)sMBpt%I_g}Vb zNoj$il&6WSZrpZAL1UI7x6Bd^{nLi}ro*Wo7fPqI7hgGeX!(+x3IY0bI>%e?Qq}qm zjZKfIb8OlZMPBhvd$mG;p6>CMJ4EnI@zM5_-uH(~y8u=bJb>IJg6fRyW$S#wXAg4e8&zaq+9*g-Hs&kfZ{-3Bz(J@Cm(RR003a) z<2z4vbXIZ8n_>xKMLeNBhb?{(M$tQ|;{a;~j0g=5}lnGU>UvR9w z^q;r>)RSrbUHuG@OhaYqJ*u?RE>4vy=>X_~n)tT=^0F7t3jhEbDoYnTL{BlW*pL3E zf#0z>_f#cz{L$->_{HBc=93eLSB63V9S!_H$D;Rp$Mto3Zfaka+v_V1k{Bj=POl-|M;`t z{rmn3FkD@A=~X0@0AZ!c90on7Bvq3cz3UaD1u&?-s_ZT(9s%Jd(^>o=&{s)#<3tZ_ z_#qGl000V5eMRZr1Vq8~Dbsm8p?HmehpQT!p1;uJT7C*l0Sr=r>Z{8>OMlg-Q#6oD>)LEB48 zB4-L|IVrD(;7ec>n$DDrK+Z7m3=rB?c(!lv=n0vEXi5~oaF4B9m)#xdxt*C-C};%% zR~rqaa#%sTiD-9ce%rp`lQ2#NQ?39;OFXz{UQZ~plvI}z%PkPT4vbk|^d*q95dQtZ zVhj5L-ak0&_Ea_H3t%(_C|+4UACPMVR19b_fi4H62t-8+DpE);fNU0I1O2OL12|9M zZi2Q!wGH4l5L#8y%Fq@kEN|7;?Kl>+4{@3Le`0`d_7+*hJpcdz07*qoM6N<$g5CJm A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-3.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-3.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-4.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-4.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-5.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-5.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-6.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-6.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-7.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-7.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-8.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-8.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-9.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas-9.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 zcmV;%4LS0OP)bYV5G?9%D=ZfhmU&85l?0V>nl{-Gti z<7hj=T5&8LY6W%e7E7nJCW0Vf(xsReNOFF^{Ua~t<%ZO#ejYc`Y^F%Re_!>Zqm2ib9%_q{2DX0h{7lV<jn9AK6GPAKa)8|t^b>rG$&m~sUWjozPA(2={$0ah^S3V;_H4J0_CjNJs<-I?F{ zaxC`bIiq<}G$jfk8eNr@_rdJX5z}f2z5vE7)0vVH$XNzItE9WS^4edB#hQCeXPQW$ z3m{(ctwjzwYY2Kjh(BgJPbvgBO{zZz>l3vN+mD#eGoHW|fC5xkvGz`8t_1K8rt`Q# zRQHf_ye6^rB?8oRp5X#h0R5ldPkmWLzr)Peo6h3}5qXoqv6@8Fvq32Y;{~7q#VgBJ zIx62|=1-c=;|B#^C(yTR;#>Ea&SJCxHr140%c7eBEH|0M6j9xS5LIlbZ#rx$gOLJg zsI1Ia>in*N)-wj=e(Q07;kQ;`CXcjb50`gK9cmjZb7p|v+~h@U3lYCrm$>I66x zQoXmjaoZuU`(m#ABa0N;4-bdDdV{Yb6WuUJ5>$B8}?6V*E%uwKU*1XST^6en)SAb|V8ir>7 z%$|I62)I$G^Qm2{R;7JIE$srx?KqXN-}B8Q(A_QbXV<5Hd>ZO1OYbA1pQPKVLJFmh5o*7A^`i%4%x^#)Q(ZvoM0NgjvzX?yYmh>_il7v$&a?}IXo>z99*heKCon~pKYKkn|p{1d&V zV?YFdiD=Gsm76zrPqgo(-U9OTqSaJ0FmmWX6?!-2L#R_MK>lO*Q4$ z3TS=CsVrZSYDHaj=~WZ$cfkTsfLL_%j32r^6)}gQ+Bo5E7y4zqvTP-0=tCRR0f9e1 z@Zo)2;}$?P8f8c2d+x`we5H6qFYsZ1+ycn&JoROJqh}f*+*DstdiQw0PFes8kcfWA zyHuIEc+MrJBP4b4oOz}rBt<}UyjOvw8#h&~UCzuecpEEy*M4mkauW5m$<6Wnq2{z) z)cpa%Xa724TY-KAIoX-tA-t^nERN^S!ik)MjM^dP)fiR)L;sWgBT3|o8MQtjJ13ZT z>!!LK>C3zk!IvIew{GaKbEp6cI&zl*oLPBU!N(}s)Eonlc1ftN?L-=ZRwP*4VLvioqX=SC-G`{?)atnMtl;K#NVsu*?upF>8RH z__6$^#Vks8a;F)JK$kO-PN~(nEH_CJE2zkH49gIrB8JGtrgK}5;QMNoRxl8_o0-sV zI*4TkLEBh~Yyr$vs%@-F@0-qHnZj+%q(@E1unZxzGC(b+b694mqLr1@7QhU}&=!_n z`h)2pmKjc1-r{qGb6NrEFdfG7nc#1=bvur6EEW@hJzuBZ3Kjtl5ugkJ3LG#U$nqDn z9smX&4rP`7X5&}}><5OP4$k_G*({d-_`?F&P`~9}2#%NyWcfzra7}#cNnqFvA`8?EV$C`kcy=6AjYBIn$Znwr}v~p#q4-o;=6k zXEW{rz=?P4)n&K!_4VTY6Ypl+4g=4`V$DONz(&jzs-(L}>Ap-mdGnQhIPuQg$j$R+ z+JPm@SK`v*;LU0E*1`Qa`sY85*p^pNfWDs0N8PobK8cRMoyoWzAhc`vPa_JTE3f^9 z+|HuY49v->4^^B#ek`LVF65J+zRk0?GjZnqQ+V&4w@t?wmx!GFXorqiQFO$x@K~(5 zhg5&;Ybwh(%=DwRJ9dnixOnVy0jy8>mdNs%vvc&8F$GZDu>FXr?(rv(YT`fq z%jnHXp9~`9xc7-HKPe;WIZavsHHob+iO8GYMzVaPc&(Q(1l? z;9&xiUPT)B;n12y)3XY^?p-X)4+4F)sVk^eiIhJhWe(%q`KLiSks#e zH|t!(KtpZA_6Z01OlpRZt^$by5}1qJ$6EsvWr)+)htns#yZ@0A!I94VuJ2A}*GaDu zQCCrZ2eH1GekvCc;gU<|dv>=m9qp%1;_R8fPQ0TJ##<>o>AtBnTvt{07y;|kN@e*% zRTH(1+a|sGdrFf;b>(-}3Sb{139jGe^hEwGl><^LfLQFwb0O7x?X)sMBpt%I_g}Vb zNoj$il&6WSZrpZAL1UI7x6Bd^{nLi}ro*Wo7fPqI7hgGeX!(+x3IY0bI>%e?Qq}qm zjZKfIb8OlZMPBhvd$mG;p6>CMJ4EnI@zM5_-uH(~y8u=bJb>IJg6fRyW$S#wXAg4e8&zaq+9*g-Hs&kfZ{-3Bz(J@Cm(RR003a) z<2z4vbXIZ8n_>xKMLeNBhb?{(M$tQ|;{a;~j0g=5}lnGU>UvR9w z^q;r>)RSrbUHuG@OhaYqJ*u?RE>4vy=>X_~n)tT=^0F7t3jhEbDoYnTL{BlW*pL3E zf#0z>_f#cz{L$->_{HBc=93eLSB63V9S!_H$D;Rp$Mto3Zfaka+v_V1k{Bj=POl-|M;`t z{rmn3FkD@A=~X0@0AZ!c90on7Bvq3cz3UaD1u&?-s_ZT(9s%Jd(^>o=&{s)#<3tZ_ z_#qGl000V5eMRZr1Vq8~Dbsm8p?HmehpQT!p1;uJT7C*l0Sr=r>Z{8>OMlg-Q#6oD>)LEB48 zB4-L|IVrD(;7ec>n$DDrK+Z7m3=rB?c(!lv=n0vEXi5~oaF4B9m)#xdxt*C-C};%% zR~rqaa#%sTiD-9ce%rp`lQ2#NQ?39;OFXz{UQZ~plvI}z%PkPT4vbk|^d*q95dQtZ zVhj5L-ak0&_Ea_H3t%(_C|+4UACPMVR19b_fi4H62t-8+DpE);fNU0I1O2OL12|9M zZi2Q!wGH4l5L#8y%Fq@kEN|7;?Kl>+4{@3Le`0`d_7+*hJpcdz07*qoM6N<$g5CJm A761SM diff --git a/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas.png b/Browsy/Assets.xcassets/AppIcon.appiconset/dsadas.png deleted file mode 100644 index 5b0bc5ebaf447e22ba0f341d4a088f05198be6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 A761SM diff --git a/Browsy/Assets.xcassets/Background.colorset/Contents.json b/Browsy/Assets.xcassets/Background.colorset/Contents.json new file mode 100644 index 0000000..0425637 --- /dev/null +++ b/Browsy/Assets.xcassets/Background.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Browsy/Assets.xcassets/Contents.json b/Browsy/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Browsy/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Browsy/Assets.xcassets/MenuIcon.imageset/Contents.json b/Browsy/Assets.xcassets/MenuIcon.imageset/Contents.json new file mode 100644 index 0000000..6a12339 --- /dev/null +++ b/Browsy/Assets.xcassets/MenuIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "browsymenu16.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "browsymenu32.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Browsy/Assets.xcassets/MenuIcon.imageset/browsymenu16.png b/Browsy/Assets.xcassets/MenuIcon.imageset/browsymenu16.png new file mode 100644 index 0000000000000000000000000000000000000000..66e6369e1439d9bc5fb44d8ea5ff3671a1d6ed74 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#Xwpegc-FsC;9^!k|nMY zCBgY=CFO}lsSM@i<$9TU*~Q6;1*v-ZMd`EO*+>Buee`s346*2)dTGBNYoGwzhx2rRj zeL6ee*eE#dkm4rR_d5=H&5d^AZRx;Zdb);?P&rs{lvP{PXH@2F; zG5d5*-Dvra<|Ce;`F2@pyk&NdNqd%S{DXJ%n}hM&eZ0N_JgTe~DWM4fz(-TC!BSB%lWiDksX{Em0HfxW5m zsxsZ!3}85a;R-@m0E4{OH9*9raRB_pW$eKg9KpkkcLh7!1X#yx#(y^hG2bS@gX|zo z;cKGLqdI_1%Hu^&h%v6>O+wmNH)s=psTw^b+G3jkC$e7-VH(F1(#JLd&V>+8XS6$* zNwhz&9kt;xT*pluz$A`gG2{J$=`Js#3ndp(lO<>p%XnO392dYryb2-g?g{`7<4Fi% zqALKH#nnp37&qY{*Hk=I{&xlmG+ls!~J<|kW^9cIN2INQpb2%Y|utT~W58`!J zX|M-=V=mzhxS#M3=lQm(VGq}^AG>f8&uTvY0h3*n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Browsy/BrowserManager/Browser.swift b/Browsy/BrowserManager/Browser.swift new file mode 100644 index 0000000..66a2183 --- /dev/null +++ b/Browsy/BrowserManager/Browser.swift @@ -0,0 +1,19 @@ +// +// Browser.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import Foundation +import AppKit + +struct Browser: Hashable { + let name: String + let icon: NSImage + let appUrl: URL +} + +func aBrowserList(number: Int = 3) -> [Browser] { + (1...number).map { i in Browser(name: "Browser \(i)", icon: NSImage(named: NSImage.actionTemplateName)!, appUrl: URL(string: "browser\(i).com")!) } +} diff --git a/Browsy/BrowserManager/BrowserManager.swift b/Browsy/BrowserManager/BrowserManager.swift new file mode 100644 index 0000000..6566a18 --- /dev/null +++ b/Browsy/BrowserManager/BrowserManager.swift @@ -0,0 +1,69 @@ +// +// BrowserManager.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import AppKit + +protocol BrowserManager { + func getBrowserIdentifiers() -> [Browser] + func openURL(_ url: URL, in browserId: URL) + func setAsDefaultBrowser() +} + +class BrowserManagerImpl : BrowserManager { + + private let bundleMainUrl: URL + private let nsWorkspace: NSWorkspace + + init( + bundleMainUrl: URL, + nsWorkspace: NSWorkspace + ) { + self.bundleMainUrl = bundleMainUrl + self.nsWorkspace = nsWorkspace + } + + func getBrowserIdentifiers() -> [Browser] { + guard let schemeURL = URL(string: "https:") else { + return [] + } + let htmlHandlerAppsURLs: [URL] + let httpsHandlerAppsURLs: [URL] + htmlHandlerAppsURLs = nsWorkspace.urlsForApplications(toOpen: .html) + httpsHandlerAppsURLs = nsWorkspace.urlsForApplications(toOpen: schemeURL) + + return Set(htmlHandlerAppsURLs) + .intersection(httpsHandlerAppsURLs) + .filter { $0 != bundleMainUrl } + .compactMap { url in + guard let bundle = Bundle(url: url) else { + return nil + } + let icon = nsWorkspace.icon(forFile: url.path) + let name = bundle.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "Unknown" + return Browser(name: name, icon: icon, appUrl: url) + } + } + + func openURL(_ url: URL, in browserId: URL) { + nsWorkspace.open( + [url], + withApplicationAt: browserId, + configuration: NSWorkspace.OpenConfiguration() + ) { (app, error) in + if let error = error { + print("Failed to open URL \(url) with application \(browserId): \(error)") + } + } + } + + func setAsDefaultBrowser() { + nsWorkspace.setDefaultApplication( + at: bundleMainUrl, + toOpenURLsWithScheme: "http" + ) + } +} diff --git a/Browsy/Browsy.entitlements b/Browsy/Browsy.entitlements new file mode 100644 index 0000000..625af03 --- /dev/null +++ b/Browsy/Browsy.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + com.apple.security.network.client + + + diff --git a/Browsy/BrowsyApp.swift b/Browsy/BrowsyApp.swift new file mode 100644 index 0000000..ee13414 --- /dev/null +++ b/Browsy/BrowsyApp.swift @@ -0,0 +1,24 @@ +// +// BrowsyApp.swift +// Browsy +// +// Created by julionb on 30/05/24. +// + +import SwiftUI + +@main +struct BrowsyApp: App { + static let dependencies = Dependencies() + + @NSApplicationDelegateAdaptor(BrowsyAppDelegate.self) var appDelegate: BrowsyAppDelegate + + var body: some Scene { + MenuBarExtra("Browsy", image: "MenuIcon") { + MenuView( + quitAction: { NSApplication.shared.terminate(self) }, + checkForUpdates: { BrowsyApp.dependencies.spuStandardUpdaterController.updater.checkForUpdates() } + ) + } + } +} diff --git a/Browsy/BrowsyAppDelegate.swift b/Browsy/BrowsyAppDelegate.swift new file mode 100644 index 0000000..b7c53f5 --- /dev/null +++ b/Browsy/BrowsyAppDelegate.swift @@ -0,0 +1,38 @@ +// +// BrowsyAppDelegate.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import AppKit + +class BrowsyAppDelegate: NSObject, NSApplicationDelegate { + + private let chooserWindowManager: ChooserWindowManager + private let browserManager: BrowserManager + + override init() { + chooserWindowManager = BrowsyApp.dependencies.chooserWindowManager + browserManager = BrowsyApp.dependencies.browserManager() + } + + func applicationDidFinishLaunching(_ notification: Notification) { + NSAppleEventManager.shared().setEventHandler( + self, + andSelector: #selector(handleGetURLEvent(event:replyEvent:)), + forEventClass: AEEventClass(kInternetEventClass), + andEventID: AEEventID(kAEGetURL) + ) + browserManager.setAsDefaultBrowser() + } + + @objc func handleGetURLEvent( + event: NSAppleEventDescriptor, + replyEvent: NSAppleEventDescriptor + ) { + if let urlString = event.paramDescriptor(forKeyword: keyDirectObject)?.stringValue, let url = URL(string: urlString) { + chooserWindowManager.showChooserWindow(url: url) + } + } +} diff --git a/Browsy/ChooserScreen/ChooserScreenBindingView.swift b/Browsy/ChooserScreen/ChooserScreenBindingView.swift new file mode 100644 index 0000000..2f8da04 --- /dev/null +++ b/Browsy/ChooserScreen/ChooserScreenBindingView.swift @@ -0,0 +1,19 @@ +// +// ChooserScreenBindingView.swift +// Browsy +// +// Created by julionb on 30/05/24. +// + +import SwiftUI + +struct ChooserScreenBindingView: View { + @ObservedObject var presenter: ChooserScreenPresenter + + var body: some View { + ChooserScreenView( + state: presenter.state, + onBrowserClicked: presenter.onBrowserClicked + ) + } +} diff --git a/Browsy/ChooserScreen/ChooserScreenPresenter.swift b/Browsy/ChooserScreen/ChooserScreenPresenter.swift new file mode 100644 index 0000000..3e405fb --- /dev/null +++ b/Browsy/ChooserScreen/ChooserScreenPresenter.swift @@ -0,0 +1,35 @@ +// +// ChooserScreenPresenter.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import AppKit + +class ChooserScreenPresenter: ObservableObject { + + @Published private(set) var state: ChooserScreenState = ChooserScreenState(url: nil, browsers: []) + + private let browserManager: BrowserManager + private let url: URL + + init( + browserManager: BrowserManager, + url: URL + ) { + self.browserManager = browserManager + self.url = url + self.state = ChooserScreenState(url: url.host(), browsers: browserManager.getBrowserIdentifiers()) + } + + func onBrowserClicked(_ browser: URL) { + browserManager.openURL(url, in: browser) + NSApplication.shared.keyWindow?.close() + } +} + +struct ChooserScreenState { + let url: String? + let browsers: [Browser] +} diff --git a/Browsy/ChooserScreen/ChooserScreenView.swift b/Browsy/ChooserScreen/ChooserScreenView.swift new file mode 100644 index 0000000..b4e3b7b --- /dev/null +++ b/Browsy/ChooserScreen/ChooserScreenView.swift @@ -0,0 +1,50 @@ +// +// ChooserScreenView.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import SwiftUI + +struct ChooserScreenView: View { + let state: ChooserScreenState + let onBrowserClicked: (URL) -> () + + var body: some View { + VStack(spacing: 0) { + Text(state.url ?? "") + List(state.browsers, id: \.self) { browser in + HStack { + Image(nsImage: browser.icon) + .resizable() + .scaledToFit() + .frame(width: 32, height: 32) + Text(browser.name) + .font(.headline) + Spacer() + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .onTapGesture { + onBrowserClicked(browser.appUrl) + } + .listRowBackground(Color(.background)) + } + }.listStyle(.plain) + .scrollContentBackground(.hidden) + .background(Color(.background)) + .cornerRadius(10) + .frame(minWidth:200, minHeight: 200) + .fixedSize() + } +} + +#Preview { + ChooserScreenView( + state: ChooserScreenState( + url: "www.apple.com", + browsers: aBrowserList(number: 6) + ), + onBrowserClicked: { _ in} + ) +} diff --git a/Browsy/ChooserScreen/ChooserWindowManager.swift b/Browsy/ChooserScreen/ChooserWindowManager.swift new file mode 100644 index 0000000..f5cad9a --- /dev/null +++ b/Browsy/ChooserScreen/ChooserWindowManager.swift @@ -0,0 +1,39 @@ +// +// ChooserWindowManager.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import SwiftUI + +protocol ChooserWindowManager { + func showChooserWindow(url: URL) +} + +class ChooserWindowManagerImpl: ChooserWindowManager { + private let chooserScreenPresenterFactory: (URL) -> ChooserScreenPresenter + private let window: NSPanel + + init( + chooserScreenPresenterFactory: @escaping (URL) -> ChooserScreenPresenter + ) { + self.chooserScreenPresenterFactory = chooserScreenPresenterFactory + window = NSPanel( + contentRect: NSRect(x: 0, y: 0, width: 0, height: 0), + styleMask: [], + backing: .buffered, + defer: false + ) + window.backgroundColor = NSColor.clear + window.isReleasedWhenClosed = false + } + + func showChooserWindow(url: URL) { + window.contentView = NSHostingView( + rootView: ChooserScreenBindingView(presenter: chooserScreenPresenterFactory(url)) + ) + window.setFrameOrigin(NSEvent.mouseLocation) + window.orderFront(nil) + } +} diff --git a/Browsy/Dependencies.swift b/Browsy/Dependencies.swift new file mode 100644 index 0000000..fb8f7b2 --- /dev/null +++ b/Browsy/Dependencies.swift @@ -0,0 +1,63 @@ +// +// Dependencies.swift +// Browsy +// +// Created by julionb on 31/05/24. +// + +import AppKit +import Sparkle + +class Dependencies { + + lazy var spuStandardUpdaterController: SPUStandardUpdaterController = spuStandardUpdaterControllerFactory() + + lazy var chooserWindowManager: ChooserWindowManager = chooserWindowManagerFactory( + { url in + self.chooserScreenPresenterFactory( + self.browserManagerFactory(self.bundleMainUrlFactory(), self.nsWorkspaceFactory()), + url + ) + } + ) + + func browserManager() -> BrowserManager { + return browserManagerFactory(bundleMainUrlFactory(), nsWorkspaceFactory()) + } + + func chooserScreenPresenter(url: URL) -> ChooserScreenPresenter { + return chooserScreenPresenterFactory( + browserManagerFactory(bundleMainUrlFactory(), nsWorkspaceFactory()), + url + ) + } + + private let chooserWindowManagerFactory: (@escaping (URL) -> ChooserScreenPresenter) -> ChooserWindowManager = { chooserScreenPresenterFactory in + return ChooserWindowManagerImpl( + chooserScreenPresenterFactory: chooserScreenPresenterFactory + ) + } + + private let browserManagerFactory: (URL, NSWorkspace) -> BrowserManager = { bundleMainUrl, nsWorkspace in + return BrowserManagerImpl( + bundleMainUrl: bundleMainUrl, + nsWorkspace: nsWorkspace + ) + } + + private let chooserScreenPresenterFactory = { browserManager, url in + ChooserScreenPresenter(browserManager: browserManager, url: url) + } + + private let bundleMainUrlFactory: () -> URL = { Bundle.main.bundleURL } + + private let nsWorkspaceFactory: () -> NSWorkspace = { NSWorkspace.shared } + + private let spuStandardUpdaterControllerFactory: () -> SPUStandardUpdaterController = { + SPUStandardUpdaterController( + startingUpdater: true, + updaterDelegate: nil, + userDriverDelegate: nil + ) + } +} diff --git a/Browsy/Info.plist b/Browsy/Info.plist index 7cacf3f..fa667a4 100644 --- a/Browsy/Info.plist +++ b/Browsy/Info.plist @@ -2,44 +2,56 @@ - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleURLTypes + CFBundleDocumentTypes + CFBundleTypeName + HTML document + CFBundleTypeRole + Viewer + LSHandlerRank + Default + LSItemContentTypes + + public.html + + + + CFBundleTypeName + XHTML document CFBundleTypeRole - Editor + Viewer + LSHandlerRank + Default + LSItemContentTypes + + public.xhtml + + + + CFBundleURLTypes + + CFBundleURLName - Browsy + Web site URL CFBundleURLSchemes http + https + + + + CFBundleURLName + Local file URL + CFBundleURLSchemes + + file - CFBundleVersion - 1 - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - Copyright © 2017 kJulio. All rights reserved. - NSMainStoryboardFile - Main - NSPrincipalClass - NSApplication + SUFeedURL + https://julioromano.github.io/Browsy/appcast.xml + SUPublicEDKey + KQG1xpXYiIMtaQazFvIvP0dZ5D/cpFfMoVUJ7XK766s= diff --git a/Browsy/MenuView.swift b/Browsy/MenuView.swift new file mode 100644 index 0000000..966cf32 --- /dev/null +++ b/Browsy/MenuView.swift @@ -0,0 +1,28 @@ +// +// MenuView.swift +// Browsy +// +// Created by julionb on 01/06/24. +// + +import SwiftUI + +struct MenuView: View { + let quitAction: () -> Void + let checkForUpdates: () -> Void + + var body: some View { + Text("Browsy v0.1") + Button(action: checkForUpdates, label: { Text("Check for updates...") }) + Divider() + Button(action: quitAction, label: { Text("Quit") }) + .keyboardShortcut("q", modifiers: .command) + } +} + +#Preview { + MenuView( + quitAction: {}, + checkForUpdates: {} + ) +} diff --git a/Browsy/Preview Content/Preview Assets.xcassets/Contents.json b/Browsy/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Browsy/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Browsy/ViewController.swift b/Browsy/ViewController.swift deleted file mode 100644 index 02d0454..0000000 --- a/Browsy/ViewController.swift +++ /dev/null @@ -1,137 +0,0 @@ - -// -// ViewController.swift -// Browsy -// -// Created by julionb on 31/03/2017. -// Copyright © 2017 kJulio. All rights reserved. -// - -import Cocoa - -class ViewController: NSViewController { - - @IBOutlet weak var urlField: NSTextField! - @IBOutlet weak var tableView: NSTableView! - var browserItems: [Bundle]? - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - tableView.delegate = self - tableView.dataSource = self - NotificationCenter.default.addObserver( - self, - selector: #selector(self.refreshView(notification:)), - name: NSNotification.Name(rawValue: "lastUrl"), - object: nil - ) - reloadBrowserList() - } - - @objc func refreshView(notification: NSNotification) { - let appDelegate = NSApplication.shared.delegate as! AppDelegate - urlField.stringValue = (appDelegate.lastUrl?.absoluteString)! - } - - override var representedObject: Any? { - didSet { - // Update the view, if already loaded. - } - } - - func getInstalledBrowsers () -> [ Bundle ] { - var browsers = [ Bundle ]() - let array = LSCopyAllHandlersForURLScheme("https" as CFString)? - .takeRetainedValue() - // let array = LSCopyAllRoleHandlersForContentType( - // "public.html" as CFString, LSRolesMask.all)?.takeRetainedValue() - for i in 0.. Int { - return browserItems?.count ?? 0 - } - -} - -extension ViewController: NSTableViewDelegate { - - fileprivate enum CellIdentifiers { - static let NameCell = "NameCellID" - static let DescriptionCell = "DescriptionCellID" - } - - func tableView(_ tableView: NSTableView, - viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { - var image: NSImage? - var text: String = "" - var cellIdentifier: String = "" - let dateFormatter = DateFormatter() - dateFormatter.dateStyle = .long - dateFormatter.timeStyle = .long - // 1 - guard let item = browserItems?[row] else { - return nil - } - // 2 - if tableColumn == tableView.tableColumns[0] { - - let appPath: String = item.bundlePath - let appIcon: NSImage = NSWorkspace.shared.icon(forFile: appPath) - - image = appIcon - text = item.bundleURL.lastPathComponent - cellIdentifier = CellIdentifiers.NameCell - } - // 3 - if let cell = tableView - .makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: cellIdentifier), owner: nil) as? NSTableCellView { - cell.textField?.stringValue = text - cell.imageView?.image = image ?? nil - return cell - } - return nil - } - - func tableViewSelectionDidChange(_ notification: Notification) { - let appDelegate = NSApplication.shared.delegate as! AppDelegate - let itemsSelected = tableView.selectedRowIndexes - for row in itemsSelected { - appDelegate.openLastUrl(appId: browserItems?[row].bundleIdentifier) - } - NSApplication.shared.terminate(self) - } - -} - -extension Bundle { - var displayName: String? { - return object(forInfoDictionaryKey: "CFBundleDisplayName") as? String - } -} diff --git a/BrowsyTests/BrowsyTests.swift b/BrowsyTests/BrowsyTests.swift index 0e71be3..14bfc86 100644 --- a/BrowsyTests/BrowsyTests.swift +++ b/BrowsyTests/BrowsyTests.swift @@ -2,34 +2,35 @@ // BrowsyTests.swift // BrowsyTests // -// Created by Marco Romano on 30/12/2017. -// Copyright © 2017 kJulio. All rights reserved. +// Created by julionb on 30/05/24. // import XCTest +@testable import Browsy -class BrowsyTests: XCTestCase { - - override func setUp() { - super.setUp() +final class BrowsyTests: XCTestCase { + + override func setUpWithError() throws { // Put setup code here. This method is called before the invocation of each test method in the class. } - - override func tearDown() { + + override func tearDownWithError() throws { // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() } - - func testExample() { + + func testExample() throws { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. } - - func testPerformanceExample() { + + func testPerformanceExample() throws { // This is an example of a performance test case. self.measure { // Put the code you want to measure the time of here. } } - + } diff --git a/BrowsyTests/ChooserScreen/ChooserScreenPresenterTest.swift b/BrowsyTests/ChooserScreen/ChooserScreenPresenterTest.swift new file mode 100644 index 0000000..bf7e672 --- /dev/null +++ b/BrowsyTests/ChooserScreen/ChooserScreenPresenterTest.swift @@ -0,0 +1,52 @@ +// +// ChooserScreenPresenterTest.swift +// BrowsyTests +// +// Created by julionb on 31/05/24. +// + +import XCTest +@testable import Browsy + +class ChooserScreenPresenterTests: XCTestCase { + var presenter: ChooserScreenPresenter! + + override func setUp() { + super.setUp() + presenter = ChooserScreenPresenter( + browserManager: BrowserManagerFake(), + url: URL(string: "https://www.apple.com")! + ) + } + + override func tearDown() { + presenter = nil + super.tearDown() + } + + func testOnBrowserClicked() { + // Arrange + let testBrowser = URL(string: "https://www.example.com")! + + // Act + presenter.onBrowserClicked(testBrowser) + + // Assert + // Replace this with the actual expected behavior + XCTAssertEqual(presenter.state.url, "www.apple.com") + } +} + +class BrowserManagerFake: BrowserManager { + func getBrowserIdentifiers() -> [Browser] { + return aBrowserList() + } + + func openURL(_ url: URL, in browserId: URL) { + // no-op + } + + func setAsDefaultBrowser() { + // no-op + } +} diff --git a/BrowsyTests/Info.plist b/BrowsyTests/Info.plist deleted file mode 100644 index 6c40a6c..0000000 --- a/BrowsyTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/BrowsyUITests/BrowsyUITests.swift b/BrowsyUITests/BrowsyUITests.swift new file mode 100644 index 0000000..a3a9732 --- /dev/null +++ b/BrowsyUITests/BrowsyUITests.swift @@ -0,0 +1,41 @@ +// +// BrowsyUITests.swift +// BrowsyUITests +// +// Created by julionb on 30/05/24. +// + +import XCTest + +final class BrowsyUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/BrowsyUITests/BrowsyUITestsLaunchTests.swift b/BrowsyUITests/BrowsyUITestsLaunchTests.swift new file mode 100644 index 0000000..e7e1b9a --- /dev/null +++ b/BrowsyUITests/BrowsyUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// BrowsyUITestsLaunchTests.swift +// BrowsyUITests +// +// Created by julionb on 30/05/24. +// + +import XCTest + +final class BrowsyUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +}