From e854ca99bfa3beb6be02048d2815cce9786b1afd Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 6 Apr 2022 01:20:14 +0800 Subject: [PATCH 1/5] Add Swift Package support --- Package.resolved | 16 ++++++++++++++++ Package.swift | 28 ++++++++++++++++++++++++++++ Tests/Tests.swift | 4 ++-- dockutil.xcodeproj/project.pbxproj | 4 ---- dockutil/DockUtil.swift | 1 + dockutil/main.swift | 11 ----------- 6 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 Package.resolved create mode 100644 Package.swift delete mode 100644 dockutil/main.swift diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..0b38b66 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "swift-argument-parser", + "repositoryURL": "https://github.com/apple/swift-argument-parser.git", + "state": { + "branch": null, + "revision": "82905286cc3f0fa8adc4674bf49437cab65a8373", + "version": "1.1.1" + } + } + ] + }, + "version": 1 +} diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..e7a9a13 --- /dev/null +++ b/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version:5.5 + +import PackageDescription + +let package = Package( + name: "DockUtil", + platforms: [.macOS(.v10_15)], + products: [ + .executable(name: "dockutil", targets: ["DockUtil"]) + ], + dependencies: [ + .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.0"), + ], + targets: [ + .executableTarget( + name: "DockUtil", + dependencies: [ + .product(name: "ArgumentParser", package: "swift-argument-parser") + ], + path: "dockutil" + ), + .testTarget( + name: "DockUtilTests", + dependencies: ["DockUtil"], + path: "Tests" + ), + ] +) diff --git a/Tests/Tests.swift b/Tests/Tests.swift index c045a70..296e282 100644 --- a/Tests/Tests.swift +++ b/Tests/Tests.swift @@ -22,8 +22,8 @@ class Tests: XCTestCase { func testDock() throws { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - let dock = Dock() - XCTAssert(dock.items.count > 0) +// let dock = Dock() +// XCTAssert(dock.items.count > 0) // XCTAssert(dock.apps() as Any is [PersistentApp]) // XCTAssert(dock.apps().count > 0, "There should be some apps in dock") } diff --git a/dockutil.xcodeproj/project.pbxproj b/dockutil.xcodeproj/project.pbxproj index 7fc87f7..655d454 100644 --- a/dockutil.xcodeproj/project.pbxproj +++ b/dockutil.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 4A0940A427BB88A800A1F9D7 /* DockUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0940A327BB88A800A1F9D7 /* DockUtil.swift */; }; - 4AE244C4249C586900836787 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244C3249C586900836787 /* main.swift */; }; 4AE244D4249C5CF700836787 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244D3249C5CF700836787 /* Tests.swift */; }; 4AE244DA249C5DC000836787 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244D9249C5DC000836787 /* Dock.swift */; }; 4AE244DB249C5DC000836787 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244D9249C5DC000836787 /* Dock.swift */; }; @@ -32,7 +31,6 @@ /* Begin PBXFileReference section */ 4A0940A327BB88A800A1F9D7 /* DockUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DockUtil.swift; sourceTree = ""; }; 4AE244C0249C586900836787 /* dockutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dockutil; sourceTree = BUILT_PRODUCTS_DIR; }; - 4AE244C3249C586900836787 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 4AE244D1249C5CF700836787 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 4AE244D3249C5CF700836787 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 4AE244D5249C5CF700836787 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -81,7 +79,6 @@ 4AE244C2249C586900836787 /* dockutil */ = { isa = PBXGroup; children = ( - 4AE244C3249C586900836787 /* main.swift */, 4A0940A327BB88A800A1F9D7 /* DockUtil.swift */, 4AE244D9249C5DC000836787 /* Dock.swift */, 4AE244DF249C637900836787 /* DockTile.swift */, @@ -198,7 +195,6 @@ 4A0940A427BB88A800A1F9D7 /* DockUtil.swift in Sources */, 4AE244E0249C637900836787 /* DockTile.swift in Sources */, 4AE244DA249C5DC000836787 /* Dock.swift in Sources */, - 4AE244C4249C586900836787 /* main.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/dockutil/DockUtil.swift b/dockutil/DockUtil.swift index 4ae7839..8913363 100644 --- a/dockutil/DockUtil.swift +++ b/dockutil/DockUtil.swift @@ -119,6 +119,7 @@ struct TileTypeArgument: ExpressibleByArgument { } } +@main struct Dockutil: ParsableCommand { static var configuration = CommandConfiguration( diff --git a/dockutil/main.swift b/dockutil/main.swift deleted file mode 100644 index dc0f661..0000000 --- a/dockutil/main.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// main.swift -// dockutil -// -// Created by Kyle Crawford on 6/18/20. -// Copyright © 2022 Kyle Crawford. All rights reserved. -// - -import Foundation - -Dockutil.main() From 98fe6780654821fdb8654d15e0df4b9624c0e3db Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 6 Apr 2022 01:20:24 +0800 Subject: [PATCH 2/5] Update file structure to standard swift package --- Package.swift | 11 +--- {dockutil => Sources/DockUtil}/Dock.swift | 0 {dockutil => Sources/DockUtil}/DockTile.swift | 0 {dockutil => Sources/DockUtil}/DockUtil.swift | 0 {dockutil => Sources/DockUtil}/Info.plist | 0 Tests/{ => DockUtilTests}/Info.plist | 0 Tests/{ => DockUtilTests}/Tests.swift | 0 dockutil.xcodeproj/project.pbxproj | 66 +++++++++---------- 8 files changed, 35 insertions(+), 42 deletions(-) rename {dockutil => Sources/DockUtil}/Dock.swift (100%) rename {dockutil => Sources/DockUtil}/DockTile.swift (100%) rename {dockutil => Sources/DockUtil}/DockUtil.swift (100%) rename {dockutil => Sources/DockUtil}/Info.plist (100%) rename Tests/{ => DockUtilTests}/Info.plist (100%) rename Tests/{ => DockUtilTests}/Tests.swift (100%) diff --git a/Package.swift b/Package.swift index e7a9a13..48a9993 100644 --- a/Package.swift +++ b/Package.swift @@ -14,15 +14,8 @@ let package = Package( targets: [ .executableTarget( name: "DockUtil", - dependencies: [ - .product(name: "ArgumentParser", package: "swift-argument-parser") - ], - path: "dockutil" - ), - .testTarget( - name: "DockUtilTests", - dependencies: ["DockUtil"], - path: "Tests" + dependencies: [.product(name: "ArgumentParser", package: "swift-argument-parser")] ), + .testTarget(name: "DockUtilTests", dependencies: ["DockUtil"]), ] ) diff --git a/dockutil/Dock.swift b/Sources/DockUtil/Dock.swift similarity index 100% rename from dockutil/Dock.swift rename to Sources/DockUtil/Dock.swift diff --git a/dockutil/DockTile.swift b/Sources/DockUtil/DockTile.swift similarity index 100% rename from dockutil/DockTile.swift rename to Sources/DockUtil/DockTile.swift diff --git a/dockutil/DockUtil.swift b/Sources/DockUtil/DockUtil.swift similarity index 100% rename from dockutil/DockUtil.swift rename to Sources/DockUtil/DockUtil.swift diff --git a/dockutil/Info.plist b/Sources/DockUtil/Info.plist similarity index 100% rename from dockutil/Info.plist rename to Sources/DockUtil/Info.plist diff --git a/Tests/Info.plist b/Tests/DockUtilTests/Info.plist similarity index 100% rename from Tests/Info.plist rename to Tests/DockUtilTests/Info.plist diff --git a/Tests/Tests.swift b/Tests/DockUtilTests/Tests.swift similarity index 100% rename from Tests/Tests.swift rename to Tests/DockUtilTests/Tests.swift diff --git a/dockutil.xcodeproj/project.pbxproj b/dockutil.xcodeproj/project.pbxproj index 655d454..aa71b99 100644 --- a/dockutil.xcodeproj/project.pbxproj +++ b/dockutil.xcodeproj/project.pbxproj @@ -7,13 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 4A0940A427BB88A800A1F9D7 /* DockUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0940A327BB88A800A1F9D7 /* DockUtil.swift */; }; - 4AE244D4249C5CF700836787 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244D3249C5CF700836787 /* Tests.swift */; }; - 4AE244DA249C5DC000836787 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244D9249C5DC000836787 /* Dock.swift */; }; - 4AE244DB249C5DC000836787 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244D9249C5DC000836787 /* Dock.swift */; }; - 4AE244E0249C637900836787 /* DockTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244DF249C637900836787 /* DockTile.swift */; }; - 4AE244E1249C637900836787 /* DockTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE244DF249C637900836787 /* DockTile.swift */; }; + 27D8D4B229DB0AEE0071860C /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582BD27FCAEA1002B3633 /* Tests.swift */; }; 4AE244E4249C6D0800836787 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = 4AE244E3249C6D0800836787 /* ArgumentParser */; }; + AEC582B927FCAE94002B3633 /* DockUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582B527FCAE94002B3633 /* DockUtil.swift */; }; + AEC582BA27FCAE94002B3633 /* DockTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582B627FCAE94002B3633 /* DockTile.swift */; }; + AEC582BB27FCAE94002B3633 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582B727FCAE94002B3633 /* Dock.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -29,14 +27,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 4A0940A327BB88A800A1F9D7 /* DockUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DockUtil.swift; sourceTree = ""; }; 4AE244C0249C586900836787 /* dockutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dockutil; sourceTree = BUILT_PRODUCTS_DIR; }; 4AE244D1249C5CF700836787 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 4AE244D3249C5CF700836787 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; - 4AE244D5249C5CF700836787 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4AE244D9249C5DC000836787 /* Dock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dock.swift; sourceTree = ""; }; - 4AE244DF249C637900836787 /* DockTile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DockTile.swift; sourceTree = ""; }; - 94F771CE27C81B5C00393378 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AEC582B527FCAE94002B3633 /* DockUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockUtil.swift; sourceTree = ""; }; + AEC582B627FCAE94002B3633 /* DockTile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockTile.swift; sourceTree = ""; }; + AEC582B727FCAE94002B3633 /* Dock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Dock.swift; sourceTree = ""; }; + AEC582B827FCAE94002B3633 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AEC582BD27FCAEA1002B3633 /* Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; + AEC582BE27FCAEA1002B3633 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -61,8 +59,8 @@ 4AE244B7249C586900836787 = { isa = PBXGroup; children = ( - 4AE244C2249C586900836787 /* dockutil */, - 4AE244D2249C5CF700836787 /* Tests */, + AEC582BC27FCAEA1002B3633 /* DockUtilTests */, + AEC582B427FCAE94002B3633 /* DockUtil */, 4AE244C1249C586900836787 /* Products */, ); sourceTree = ""; @@ -76,24 +74,26 @@ name = Products; sourceTree = ""; }; - 4AE244C2249C586900836787 /* dockutil */ = { + AEC582B427FCAE94002B3633 /* DockUtil */ = { isa = PBXGroup; children = ( - 4A0940A327BB88A800A1F9D7 /* DockUtil.swift */, - 4AE244D9249C5DC000836787 /* Dock.swift */, - 4AE244DF249C637900836787 /* DockTile.swift */, - 94F771CE27C81B5C00393378 /* Info.plist */, + AEC582B527FCAE94002B3633 /* DockUtil.swift */, + AEC582B627FCAE94002B3633 /* DockTile.swift */, + AEC582B727FCAE94002B3633 /* Dock.swift */, + AEC582B827FCAE94002B3633 /* Info.plist */, ); - path = dockutil; + name = DockUtil; + path = Sources/DockUtil; sourceTree = ""; }; - 4AE244D2249C5CF700836787 /* Tests */ = { + AEC582BC27FCAEA1002B3633 /* DockUtilTests */ = { isa = PBXGroup; children = ( - 4AE244D3249C5CF700836787 /* Tests.swift */, - 4AE244D5249C5CF700836787 /* Info.plist */, + AEC582BD27FCAEA1002B3633 /* Tests.swift */, + AEC582BE27FCAEA1002B3633 /* Info.plist */, ); - path = Tests; + name = DockUtilTests; + path = Tests/DockUtilTests; sourceTree = ""; }; /* End PBXGroup section */ @@ -192,9 +192,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4A0940A427BB88A800A1F9D7 /* DockUtil.swift in Sources */, - 4AE244E0249C637900836787 /* DockTile.swift in Sources */, - 4AE244DA249C5DC000836787 /* Dock.swift in Sources */, + AEC582B927FCAE94002B3633 /* DockUtil.swift in Sources */, + AEC582BB27FCAE94002B3633 /* Dock.swift in Sources */, + AEC582BA27FCAE94002B3633 /* DockTile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -202,9 +202,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4AE244E1249C637900836787 /* DockTile.swift in Sources */, - 4AE244DB249C5DC000836787 /* Dock.swift in Sources */, - 4AE244D4249C5CF700836787 /* Tests.swift in Sources */, + 27D8D4B229DB0AEE0071860C /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -334,11 +332,12 @@ 4AE244C8249C586900836787 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; CODE_SIGN_STYLE = Automatic; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - DEVELOPMENT_TEAM = Z5J8CJBUWC; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = "$(SRCROOT)/dockutil/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/dockutil/Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 3.0.2; PRODUCT_BUNDLE_IDENTIFIER = dockutil.cli.tool; @@ -354,8 +353,9 @@ CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; DEVELOPMENT_TEAM = Z5J8CJBUWC; + "DEVELOPMENT_TEAM[sdk=macosx*]" = ""; ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = "$(SRCROOT)/dockutil/Info.plist"; + INFOPLIST_FILE = "$(SRCROOT)/Sources/dockutil/Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.15; MARKETING_VERSION = 3.0.2; PRODUCT_BUNDLE_IDENTIFIER = dockutil.cli.tool; From 1f4aff2462e2460485bb1115927553b7518216d3 Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 6 Apr 2022 01:20:32 +0800 Subject: [PATCH 3/5] Fix SPM warning --- Package.swift | 9 +++++++-- Sources/DockUtil/DockUtil.swift | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 48a9993..c91c641 100644 --- a/Package.swift +++ b/Package.swift @@ -14,8 +14,13 @@ let package = Package( targets: [ .executableTarget( name: "DockUtil", - dependencies: [.product(name: "ArgumentParser", package: "swift-argument-parser")] + dependencies: [.product(name: "ArgumentParser", package: "swift-argument-parser")], + exclude: ["Info.plist"] + ), + .testTarget( + name: "DockUtilTests", + dependencies: ["DockUtil"], + exclude: ["Info.plist"] ), - .testTarget(name: "DockUtilTests", dependencies: ["DockUtil"]), ] ) diff --git a/Sources/DockUtil/DockUtil.swift b/Sources/DockUtil/DockUtil.swift index 8913363..d4c4d0e 100644 --- a/Sources/DockUtil/DockUtil.swift +++ b/Sources/DockUtil/DockUtil.swift @@ -10,7 +10,13 @@ import Foundation import ArgumentParser import Darwin +#if SWIFT_PACKAGE +// FIXME: SPM does not support custom Info.plist since it will conflict with the generated one used by Xcode +// See more info here: https://forums.swift.org/t/add-info-plist-on-spm-bundle/40274/4 +let VERSION = "3.0.2" +#else let VERSION = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String +#endif var gv = 0 // Global verbosity struct DockAdditionOptions { From 230aca09813c5d5ceb55ab15165ee5f4cfab2ad5 Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 3 Apr 2023 22:11:31 +0800 Subject: [PATCH 4/5] Remove xcodeproj support --- .gitignore | 3 + Package.swift | 10 +- Sources/DockUtil/DockUtil.swift | 6 - Sources/DockUtil/Info.plist | 16 - Tests/DockUtilTests/Info.plist | 22 - build.sh | 2 +- dockutil.xcodeproj/project.pbxproj | 461 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/swiftpm/Package.resolved | 16 - .../UserInterfaceState.xcuserstate | Bin 57152 -> 0 bytes .../WorkspaceSettings.xcsettings | 18 - .../xcshareddata/xcschemes/Tests.xcscheme | 52 -- .../xcshareddata/xcschemes/dockutil.xcscheme | 125 ----- .../xcschemes/xcschememanagement.plist | 32 -- 16 files changed, 9 insertions(+), 777 deletions(-) delete mode 100644 Sources/DockUtil/Info.plist delete mode 100644 Tests/DockUtilTests/Info.plist delete mode 100644 dockutil.xcodeproj/project.pbxproj delete mode 100644 dockutil.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 dockutil.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 dockutil.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 dockutil.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 dockutil.xcodeproj/project.xcworkspace/xcuserdata/kc.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 dockutil.xcodeproj/project.xcworkspace/xcuserdata/kc.xcuserdatad/WorkspaceSettings.xcsettings delete mode 100644 dockutil.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme delete mode 100644 dockutil.xcodeproj/xcshareddata/xcschemes/dockutil.xcscheme delete mode 100644 dockutil.xcodeproj/xcuserdata/kc.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.gitignore b/.gitignore index b779a88..d3e0a41 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ .DS_Store *.log build + +.swiftpm +.vscode \ No newline at end of file diff --git a/Package.swift b/Package.swift index c91c641..7a8fb0b 100644 --- a/Package.swift +++ b/Package.swift @@ -3,7 +3,7 @@ import PackageDescription let package = Package( - name: "DockUtil", + name: "dockutil", platforms: [.macOS(.v10_15)], products: [ .executable(name: "dockutil", targets: ["DockUtil"]) @@ -14,13 +14,13 @@ let package = Package( targets: [ .executableTarget( name: "DockUtil", - dependencies: [.product(name: "ArgumentParser", package: "swift-argument-parser")], - exclude: ["Info.plist"] + dependencies: [ + .product(name: "ArgumentParser", package: "swift-argument-parser"), + ] ), .testTarget( name: "DockUtilTests", - dependencies: ["DockUtil"], - exclude: ["Info.plist"] + dependencies: ["DockUtil"] ), ] ) diff --git a/Sources/DockUtil/DockUtil.swift b/Sources/DockUtil/DockUtil.swift index d4c4d0e..802d34d 100644 --- a/Sources/DockUtil/DockUtil.swift +++ b/Sources/DockUtil/DockUtil.swift @@ -10,13 +10,7 @@ import Foundation import ArgumentParser import Darwin -#if SWIFT_PACKAGE -// FIXME: SPM does not support custom Info.plist since it will conflict with the generated one used by Xcode -// See more info here: https://forums.swift.org/t/add-info-plist-on-spm-bundle/40274/4 let VERSION = "3.0.2" -#else -let VERSION = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String -#endif var gv = 0 // Global verbosity struct DockAdditionOptions { diff --git a/Sources/DockUtil/Info.plist b/Sources/DockUtil/Info.plist deleted file mode 100644 index ccc39b8..0000000 --- a/Sources/DockUtil/Info.plist +++ /dev/null @@ -1,16 +0,0 @@ - - - - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/Tests/DockUtilTests/Info.plist b/Tests/DockUtilTests/Info.plist deleted file mode 100644 index 64d65ca..0000000 --- a/Tests/DockUtilTests/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 - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/build.sh b/build.sh index c80ed64..7d3dcc6 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/bin/bash -xcodebuild -project dockutil.xcodeproj -scheme dockutil -configuration Release archive DEVELOPMENT_TEAM="Z5J8CJBUWC" +swift build -c release \ No newline at end of file diff --git a/dockutil.xcodeproj/project.pbxproj b/dockutil.xcodeproj/project.pbxproj deleted file mode 100644 index aa71b99..0000000 --- a/dockutil.xcodeproj/project.pbxproj +++ /dev/null @@ -1,461 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 52; - objects = { - -/* Begin PBXBuildFile section */ - 27D8D4B229DB0AEE0071860C /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582BD27FCAEA1002B3633 /* Tests.swift */; }; - 4AE244E4249C6D0800836787 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = 4AE244E3249C6D0800836787 /* ArgumentParser */; }; - AEC582B927FCAE94002B3633 /* DockUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582B527FCAE94002B3633 /* DockUtil.swift */; }; - AEC582BA27FCAE94002B3633 /* DockTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582B627FCAE94002B3633 /* DockTile.swift */; }; - AEC582BB27FCAE94002B3633 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC582B727FCAE94002B3633 /* Dock.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4AE244BE249C586900836787 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 4AE244C0249C586900836787 /* dockutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dockutil; sourceTree = BUILT_PRODUCTS_DIR; }; - 4AE244D1249C5CF700836787 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - AEC582B527FCAE94002B3633 /* DockUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockUtil.swift; sourceTree = ""; }; - AEC582B627FCAE94002B3633 /* DockTile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockTile.swift; sourceTree = ""; }; - AEC582B727FCAE94002B3633 /* Dock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Dock.swift; sourceTree = ""; }; - AEC582B827FCAE94002B3633 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AEC582BD27FCAEA1002B3633 /* Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; - AEC582BE27FCAEA1002B3633 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4AE244BD249C586900836787 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4AE244E4249C6D0800836787 /* ArgumentParser in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4AE244CE249C5CF700836787 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4AE244B7249C586900836787 = { - isa = PBXGroup; - children = ( - AEC582BC27FCAEA1002B3633 /* DockUtilTests */, - AEC582B427FCAE94002B3633 /* DockUtil */, - 4AE244C1249C586900836787 /* Products */, - ); - sourceTree = ""; - }; - 4AE244C1249C586900836787 /* Products */ = { - isa = PBXGroup; - children = ( - 4AE244C0249C586900836787 /* dockutil */, - 4AE244D1249C5CF700836787 /* Tests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - AEC582B427FCAE94002B3633 /* DockUtil */ = { - isa = PBXGroup; - children = ( - AEC582B527FCAE94002B3633 /* DockUtil.swift */, - AEC582B627FCAE94002B3633 /* DockTile.swift */, - AEC582B727FCAE94002B3633 /* Dock.swift */, - AEC582B827FCAE94002B3633 /* Info.plist */, - ); - name = DockUtil; - path = Sources/DockUtil; - sourceTree = ""; - }; - AEC582BC27FCAEA1002B3633 /* DockUtilTests */ = { - isa = PBXGroup; - children = ( - AEC582BD27FCAEA1002B3633 /* Tests.swift */, - AEC582BE27FCAEA1002B3633 /* Info.plist */, - ); - name = DockUtilTests; - path = Tests/DockUtilTests; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4AE244BF249C586900836787 /* dockutil */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4AE244C7249C586900836787 /* Build configuration list for PBXNativeTarget "dockutil" */; - buildPhases = ( - 4AE244BC249C586900836787 /* Sources */, - 4AE244BD249C586900836787 /* Frameworks */, - 4AE244BE249C586900836787 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 4A0940A627C47DBF00A1F9D7 /* PBXTargetDependency */, - ); - name = dockutil; - packageProductDependencies = ( - 4AE244E3249C6D0800836787 /* ArgumentParser */, - ); - productName = dockutil; - productReference = 4AE244C0249C586900836787 /* dockutil */; - productType = "com.apple.product-type.tool"; - }; - 4AE244D0249C5CF700836787 /* Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4AE244D6249C5CF700836787 /* Build configuration list for PBXNativeTarget "Tests" */; - buildPhases = ( - 4AE244CD249C5CF700836787 /* Sources */, - 4AE244CE249C5CF700836787 /* Frameworks */, - 4AE244CF249C5CF700836787 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Tests; - productName = Tests; - productReference = 4AE244D1249C5CF700836787 /* Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4AE244B8249C586900836787 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1140; - LastUpgradeCheck = 1140; - ORGANIZATIONNAME = KC; - TargetAttributes = { - 4AE244BF249C586900836787 = { - CreatedOnToolsVersion = 11.4; - }; - 4AE244D0249C5CF700836787 = { - CreatedOnToolsVersion = 11.4; - }; - }; - }; - buildConfigurationList = 4AE244BB249C586900836787 /* Build configuration list for PBXProject "dockutil" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 4AE244B7249C586900836787; - packageReferences = ( - 4AE244E2249C6D0800836787 /* XCRemoteSwiftPackageReference "swift-argument-parser" */, - ); - productRefGroup = 4AE244C1249C586900836787 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4AE244BF249C586900836787 /* dockutil */, - 4AE244D0249C5CF700836787 /* Tests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 4AE244CF249C5CF700836787 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4AE244BC249C586900836787 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AEC582B927FCAE94002B3633 /* DockUtil.swift in Sources */, - AEC582BB27FCAE94002B3633 /* Dock.swift in Sources */, - AEC582BA27FCAE94002B3633 /* DockTile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4AE244CD249C5CF700836787 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 27D8D4B229DB0AEE0071860C /* Tests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 4A0940A627C47DBF00A1F9D7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - productRef = 4A0940A527C47DBF00A1F9D7 /* ArgumentParser */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 4AE244C5249C586900836787 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 4AE244C6249C586900836787 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - 4AE244C8249C586900836787 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - CODE_SIGN_STYLE = Automatic; - CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - DEVELOPMENT_TEAM = ""; - ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/dockutil/Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 3.0.2; - PRODUCT_BUNDLE_IDENTIFIER = dockutil.cli.tool; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 4AE244C9249C586900836787 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "Developer ID Application"; - CODE_SIGN_STYLE = Manual; - CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - DEVELOPMENT_TEAM = Z5J8CJBUWC; - "DEVELOPMENT_TEAM[sdk=macosx*]" = ""; - ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = "$(SRCROOT)/Sources/dockutil/Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 3.0.2; - PRODUCT_BUNDLE_IDENTIFIER = dockutil.cli.tool; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 4AE244D7249C5CF700836787 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 8GVQX66V4V; - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.crawford.kyle.Tests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 4AE244D8249C5CF700836787 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 8GVQX66V4V; - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.crawford.kyle.Tests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4AE244BB249C586900836787 /* Build configuration list for PBXProject "dockutil" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4AE244C5249C586900836787 /* Debug */, - 4AE244C6249C586900836787 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4AE244C7249C586900836787 /* Build configuration list for PBXNativeTarget "dockutil" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4AE244C8249C586900836787 /* Debug */, - 4AE244C9249C586900836787 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4AE244D6249C5CF700836787 /* Build configuration list for PBXNativeTarget "Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4AE244D7249C5CF700836787 /* Debug */, - 4AE244D8249C5CF700836787 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 4AE244E2249C6D0800836787 /* XCRemoteSwiftPackageReference "swift-argument-parser" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/apple/swift-argument-parser"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.0.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 4A0940A527C47DBF00A1F9D7 /* ArgumentParser */ = { - isa = XCSwiftPackageProductDependency; - package = 4AE244E2249C6D0800836787 /* XCRemoteSwiftPackageReference "swift-argument-parser" */; - productName = ArgumentParser; - }; - 4AE244E3249C6D0800836787 /* ArgumentParser */ = { - isa = XCSwiftPackageProductDependency; - package = 4AE244E2249C6D0800836787 /* XCRemoteSwiftPackageReference "swift-argument-parser" */; - productName = ArgumentParser; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 4AE244B8249C586900836787 /* Project object */; -} diff --git a/dockutil.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/dockutil.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/dockutil.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/dockutil.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/dockutil.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/dockutil.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/dockutil.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/dockutil.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/dockutil.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/dockutil.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/dockutil.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 73f5636..0000000 --- a/dockutil.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,16 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "swift-argument-parser", - "repositoryURL": "https://github.com/apple/swift-argument-parser", - "state": { - "branch": null, - "revision": "e1465042f195f374b94f915ba8ca49de24300a0d", - "version": "1.0.2" - } - } - ] - }, - "version": 1 -} diff --git a/dockutil.xcodeproj/project.xcworkspace/xcuserdata/kc.xcuserdatad/UserInterfaceState.xcuserstate b/dockutil.xcodeproj/project.xcworkspace/xcuserdata/kc.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 34a9cd55d0e73d268e38af2cc8ce7a7240f66350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57152 zcmeFa2S8Lu*EfEr?A_g4_FmN33yK<}g7l&>N>!{VU{|ujiYTzif{MoEP7+P8CZ?JQ z8jZxnnBJS|%|uP_y;sxg|I97BAV|#fCjak!zRwVF_ueUI&iv-gnRCv}EUc-l2-U^M z?-!7O1tL(vC5VDskY){B9;gjf1gmEc^w*Xyu7Gbv1M7k{vjzqiE(w&@g*pjn-KG*< zn^HJ2&=4rgv=coqcm!{8VV%D&V4$5*^iM$+6rr2YUFabU6NU@1LYy!{h!+xsL}7w3 zQJ5r57N!VOg#uxkFkL7ViiBcenNTZ)ggT*KST3v(RtgQmDq*#7g0Mz7M>tnFPdHz= zK)6s?FI*&CB3vb0Ei?&Rh1-PNg*${hg}a2ig?of2g{Oq4g=d6kg+0Ox!i&O7!pp+z z!rQ{8KOxjJl!js0Zqa;!y%hL`f(arJz)lhSE_6 z8i_`sW6@}I92$e>qIqaOT7XK>@yL%BqEb|b0%#E`M@vu@3ZfchAcjsxr=U~OT67jV z8(oOjqbtyr=qhwIx&~c`cA?wR9q38)6nYvxgPuiu&eTF_q-=d$;ADChn zma&F=;oi6p?u+~37(5UU#l!Fj9FJ3QCeFgyI0xtAd^`ac;AyxR&%k9kfEVF%yck#D zAP(U=yb7O)&&L;wgUlqe$ZRr)%q8>4e6oO)kpNjj>PS6VPF9eWq=B45P9>&OmrBe{j#O70~0l4r=XWDj|cJWuwLePlm*le|UVChw5X$gdPr z4^^m2qv%nz2klAw(7tpaJ(>=o$Iw`sN=MUdI*yK~lV|~*MvLhTI)~QM5Ur#2bU9r? zSJDQ$ims+7P=lUEPp4gwv|>gDR^ig68e4RMWi zWxBFl*{&Q{t}D+q&NbeZ@0#G6;wpB{aLshhcP(%&a+SLlyDD7ET(z#%u9ID-yUuo< zps^*u18&uxt?Gr!9x=Y<< z?#1qnZ+?Ts=a^LK}#eJ*$HuvrBJKT4= z?{eSmzQ_H5`!V+(_jB&&-LJS`b${zV;Qr42z556EkM5t`Kf8Z%|LXqDBY4~%&7*s| zdwO^hJc*tpPqHV)lj=$Hqo*kYWJ-a-&dT#UF<+|N>&dF#Aqd(ZKn>pjnVzV`y} zh2Hhvi@XDdtdRs>V3`oy7vw5 zo8EW5pLjp@e(OEp{m%Qn_XqDE-an;oQg^9`)Klsu^_KcbeWiX~45?9Sk~T|Q zq-&(D(l+T@X}i=cT_^37Zj)}8?v?J79+e)G9+#ewo|pDYpGu!epG#jzUrJv|UrXOe z-%1Ch@1&okKV?A{Ww)%!x*R3_EvLQ41Wcd{NRC%p@hJ3z!seGAyxqOAZS>7VwBi}3E zC*LnWAU`NSB=43VmLHKHm7kQKmtT@!mfx1&k>8a+l|NI6LKT-HDsIK2coj*J6-7~% zD5bm7SLvr5tqf6)Q4*9yWr8wMnWRisrYKXD0%e*qT`5$GlvzrN5>OT?)k;vQQC2Dq z$_2`W%6jD@F+^;;KysW&UysEsWyso^V zys5mUysf;WysLbue4%`)e5HJ?{Gj}({HY2mQn5-@Syj}5>L7KndbB!3Jw_d>4pWD# zv1*)}sAi~R)UoP#HD8^kPFI(xOVvuXO08CdYK^)~tyM#6ow`yzNi|fao~E9zp08e@ zUZ`HKUZLKs-lE>B-lpEJ-l5*9-lg8H-lN{DKBzvfKCA9gUs7LIUr}FG-&NmJe^q}| ze^>ud|MUqy(hNvzD~aGz8=2*z5%`%-!R{BUyd)=m**Sj8}G~aP4G?h zP4Z3lP4P|l&GyalE%cT8%6tLeB44#H=&ScN_*VH&_MPH8)pxq@BHyLH%Y3_hH~DV% z-Qv5|cbo5a-yOa?eRuip_TBG$)c2V0ao=;k=Y5~}KJ|U(``q`1?@QlTzOQ}X_`dZW z@crofLlZT(=Fy_H{@MU7MjNON(gtfsYeTeSw4qv@mZGIzdw0@2N-Y{q;fmFnze5s3+-Z`e;2<&(SC76ZJ`YnI6y=>E-%jy+U82FV!pc zD!p0{>NWZ@y;cwDb$Y$d^po{d^i%b<`a1nI{dE0Y{Zjoh{c`;Z{YrhSzD>VYzfQkf zzem4UzfZqke?Wg&e@uT|e_G$Gzo@^Wf2e<|f2Mz>f31I~f3N>sJg~aHvT~oG3O+#- zbfL4*b>@`9xTS%H&>Z;J)+J{QEUom1LQO)H(8<6CX%e~!M;Vl%kBxOD`oNUr`0UiA zywuo?^pyD6`3#pPP`Em7S23RHApu&&iz`tX&$a@s|d2f~ECUf$BP^ z=AOa;VdyrYm(W}2BlH#e3DH7-!)1tu+wd4(Lo(!TLX0p_7$gjaL_>r@hQiPX#&Cu{ zgk;@};YLDicrPE%D~Kuy2XVR)#a4| zcvGSeX<4yVM9GxG>48vPu+|UBO?5lRU*|8;`$5vo(mK%B!@Oussoo<}YcN>3&|jPH z)LNokFe%`0rES{ST6bo26H7(@SCoC=hM+3a-qiNac8=vLt* z!4Q~mvT%xUsxjC&+8AOSV+=KhZH0kw8vG6t&J@mq0T2tn!;KL}Jnz70=sM`EaFJQT zy1a_Yx5)9lQw1~W^{L8VR)ltRvf z3m$M#Dq9*s;<`xfodYXt{MBWxD);O)<@?3LhD}D?Ug1*VGU0OJiaC~8uLfZ^%la4y zEtpa`xxS7It<2h5f5T=-ccriq<^=QWtSN<4P4faYa`o!?;nDGHhDWbXOiLUdospQj zW{p+NrWVy~7Pge=ox_FZRG7&1*Fwpgg=>V3^QII=o;lsKO}K$~&$YsKp;@?2*dbhR zBpJy@ijiuh8R@)xZWMM2Lxh`!TcBeyi~^8ZGmTlid-?#2xRjb&UD=Rd4c!7j2SLqY z3k)sMyTN;NG!@nQt3ws=%;X$&Pq&<`ap7LI(@%!6YDrzE%<1*j)lgnmWw3Ns=0w?hQG2t;I!;sVYe{!8sR?Se&GS(LE#}|q%q1k));LZca88c zv}lO%nDDqU2HMlj$T4Q{79HhKoa^*!U7!l+9ppUEtc0;s*1##O&I{H~39Kma*8}*> zhLz|EkZ!zxc_6RJBHM_nR za@0-o*H@P=F0>juJ+KH^UR@dhR9j$pPT0R$cwX2m>@&t1nMRh8J*y0OR}Z3pzVjh^ z(4c5&Y1fwDlM^$NGg8wMGg2(Pz9PH|Sh2BL7^vGUydu0NY%HEq2w$wK-Vio43U3;@ zM%;_SJHordd!W+1FMJ?;D0~FJp9r4{pTRugs2-DorG73&7eoeWfxm7sFgz@-rU%Wz z9k8B5&MJRJbtE|-(lF3gPF>`b8F^<2#yI#bHu8)j=!3A-3kx^S$hh2oUF}iAT@ps`5m}Q{zEPJ4(oYVpU%&Z0eirOaOPhsO=>b0cfSYC)H=(Y)O5~W5N=m!0bMMk-?7!(W`2?N4-X*Ell zGe(><`StH8k*zTtVn((KvS!Ia9Tn3;6F9n~bS*<=W7?btYCzrmOGWEYYLmsWL(ml$mK%pwT%6V)ssgLwhkDD~?4WKen#^_99ViQB zqa2ir^3XUm9_6D6Xd;>f^W+j^sZnWE8P!J6s4~N=sjWH+=1q zTU#5fwX_=OjNEE2e?U>=ufhej&c#ITDfJwZrg0Jv8wXE0#%E8S7VtKO;)^<{pGHh)JEw;5CSU{ttsB)9B(vn=Sq3R|+ zL+QxrvSnx`s5Ph-I;{@XqvdFYu^Kw+1Y?bHqH)qz)PPn&m%tA?(J+kDpab~N>AVa0 z;@M%VIRzKh27rFPnk-yeQBxBrN>g;wE$pe{r*McB4s4!kjwbET2k;9OGoZ6FtbS6+6(~ zs21Ie?n5ik1JIG@LU*2LoNt_DT(Av21l{LSSi9|DXXD4#24FqEgjZvTj3}x0F!Q{ z>n&KdLVLpS=+wl-2(O<*dpWP4H!f;K`;3b_>in0`tGst#7M?dY7-MY@ukSN4|&qH_W@0Z^r?OF=q2Tz(sUAPn8Yv4P%$5&$2@rN&tP!2B_BVq#@h zL2a-M7Odf%U!bqTBz|pN9)ZIF^gVPg6gIXI{a{=X>Ghw{ui+QJ8COPL{D~2~z=E;S zfdkh8<3gNzn@}ubk5e7?8dry_!wOb~p_?{^OT#)o3YvtYa3|aucQG1`CS$X)Wee_# zyW#G*t8tC7)z}7q`G~hV+*HW38n{q27m87n{GqyVS6b_nuEo`hB1_N~iMv~61j>r@ zTbJWd9*z48U4cLtz+48mDz`8QwiQ^YIcW#sqoI{}uyJi89%5|oFwb5=!^3ebj)RT{ zdj}Wu1>BL{S}ilKGn%LB*DiE?+z1ou65ZK^DJgUJzFphzsJpt!BQ<%wF@pVHldQyyU1oiW8GFtH=BG`b zs9tfSCr&D!HMgw1ronoPko7Mtm|Oq1%9Kbr0VjfG5XMlYW!sxtUsqXC9pFZ&i27;s zdoxbL$y|6HX8IC+VM$Tlxa=7TsW~%>B6WZgn3x**+M-Hx)=jgkE16MPl9UihXR@#m z%yppNhYb-WPJgE2Q5=hDI2~u;k;e7L4aQF6#x3|*JQ^Q|k2Q7~HyJm>-~Yd`n1{z5 zHWnx1$sCK5j9VJ<6yw&v#Nu?oA}qr?#^P;LqfoFl7`t}s^Phupi>T3L-V_&GHAJhWTB2i#)j}t~iEJy*w ze#`-*XSq-V5g;qTI(8Yvc5DMH%?)77cn%ii@4{;PV_2+yC;SeP8y=)uLkMK3^dKG#q}{8c)Gr7}DHM50b(%6k0YNQ<*dkt6{Ej zeR(`sFZ~cb1cuFlkjYwowo1XZ5116e$jPm4B|2AL+DpcLNC7)d&lYK_xPb*sbpUj3 zifF$8Tg+SKf=13QQ0-I_UW0K`Od|@uG@_v6D})1^xBsG z+am13JMoQp7uY-Y8!s3y@}j%irU__jVQH`?ki9qrPy>{yniFw0+8x|lChivla_%-ltb;M2j7eD zgQ@v`{D81t_z>^L56||4@h-^OKHDs^C{SB9yNVZ*?GFX!aNBU1N#z{#wMmNcy77_+ zj9af6Z|sNC9>tI0$MF-whe*Ot0Tm#(Dl1AW>T)VVHI@Dbt5atI6RY@aRa6Ir8LvY2 zm${bk41N~xnGLSSklFXfEAv6xRhRi|%gnW+HRnE$_nMJxj`hz>x*0!@_X!)pByH7T zC4B+Ecn~8jCP3{?_$59Ub9-u-OW~IXJ&$m&I#?aBihd2hUZV5$RO{TWI-v=_!Rz>o zR1Rp~!tZe9@@?a-M*ObvHU~$4u-w)b)N(UwZJ;b06rOVMo#n0s>ouPW@^eBKs6RA8 z?G*G0{+t8(Q~a6nuJK+I7nr7~gaVH;*Svf*Oac!}pv4%@g4qw6Z^gKVIv3>Q;75mmtb4LxfWzE_?>LO;@^3;-;9qN@gK$~yp2(y z+=M-Mrru_@iC|&FW|L=n1fCSD>D+4#)(-1uTMQ9;0sGrj~$ zzB1O$haw|7&OH7t;x*ObE2nI-zZ`7f_1vV-#a~#4aZh4+4s@#QMtZfWvbQjV^fkVL zD!+v)p@@htF=p&}MoV^)7y|0@K_qjDoNasuUGqLySvV14cO@snsXLB<7k8(wkr5=G zB#=asM3PAgNhN6{on(-aWE44;j5dBSel&hEel~tFel>nGemDLw{$xmC2tpe%Lxds9 z%NRq(3cE-a$p(H6B6;v>Jba%(CXz|QAckBFMHvMQbz-P9Gz>iIN10!`@`nQ$dXAy@ zfnc-SZ0Bvb@4y>oabR+NWnD!LIJ&t%wxG763f2vi{0+f+@VF#eOU%jsl@(PLtH6O+ zRpYO%2nG3694O)IQyV;XQSfw58Wvz38chqXz;j{@xqEnXbw>H%} zn8`W={Wg6j)fUN`4Np`5Yv9h%AssTZA{1_d1EUh+hoMJ~XGm-$3mI~EH24+?8=6Qt zSKH>BuTJMX^6O$sckD+*4pC|_I${s(e8IRh+oK_rng zK?F@H4C7}~pt_v`M_cL`Q!piQETOYA{UX1 z$p+yQaw)ltq23I2XQ-c1%n-DtSBX9%Y{IsB+;*~AZlH)w874W)CvVBhD}@7%WFtd8 z!tNllNdSKfLp`}~CA_`}`%U(dt%63jk!#6z;lsJ$WijJ#il{wh~rR))WCL|4;%O}B!pr)B7 zo<1PI>MP5*6f1z>tmy&Jyh3##W4L!P#9e8o_DWtLuLwgolNZTLu z+#&#ZBfuYSdc->cF<_Lnt2d`xE+ZYYu79C95MV^vwnRv7KCzhgu5e%*d5^qLJ|G{G zkI2X56Ncg$8p}{QLm&W7Waw&!nvKGj$>-z?@+J8S`t)n^4f&QFAm0fek{`&A@b_o( z3+U7i>RJJPiWzIwpCgWkNO2v}Rt682wi=+cE)WS9fcTGUGZ@JpG6$!RYW0@a(-QZP z+o30-UWLsh3?(x(8p1mj;Nx1@#ZVeUi40|!j7)HCiCGsr=?NRa_&A4o*C{vZ7?Rb<50CnGwsSpGehb2 zxJ_v@ZXs4`DQpV~58KFxNR{?5q#&AL?2RnZV-E^;`+=*X04uy<>q$Q&7-BbTByWLGU!uL8f4+sb2`|1%f4COME7X|~3 z1+;`7PyKWuEv02Nz|bUyCNngJp{Wdk5;={b=?oPz zRK!qmGc6am8a#+DrIoY_{tXHsWoK~JlPjNd7&@LIKmWK8o`KrgGt$i#4B{-4uelEH z-S#Dj&B+zjpn}%GYO3AW*&ubZgRo-?JP)uCYBxoHD;pGnUK>l8hU zp}CFp9ERp`Ev#owpt8O zI;hOQD@lrL>#K(x(^e)l)9XOMT@NxLj^0RNh%aL($Opw@QzU?d0PVP@wMe*`-eQRa zdIv*Q3{^NHfuTx^_jmEm0F`7(L=xO*jp?PW#&r8yoTIO`5WwVGd!Y6KSA1!(D$ZX6 z%Q8z=$8lv1LIq3oG)uUef0Mv@#-A3}*VF`S+lbm$X~J4%TmJ0flRe!F{Mk=mpf57C z+@3x|CV$p2w3?w4TJz^+`btD(HZWA@@W&CEZ*h_NHhqV_%TPT-D;QcCVbmVbb3kM+ z2Q6pf94@*3N?bw|T10|c+A#gr5|XQIAsKs^Lej3Pg@F9l=KHF@3ph|iO#hdoF1Io# zh1xRucbJ_1bP2%d-(7_K!qCa)#s`;gkkp{FKSw9WZ-wv2Ec<4T69 z$u-n9%r)E<>xy%YaK*b4T!}7F!OmdlOol*+oy`zPp>r8JkD>D!x`3ezn_Vf^)a1%= zjRdF+a*gIw(|TuWx`d%CVN}A*wDHKyWCqd4h5o^r$u$v#p=%OD7uhqDYbwl4t^(II z{>#wC3~jLf8il$?k8-+umTL}7OfHzUE^TzpW$3cQo0wcBu7!LmS?}`0ti;geFqOE< z_*8O5n~5nZ^ZS_lzqTeLr`jd1Dsv`sRhl!=RUKq+Gl*RwE-hWl$≈t_D7cH`~$@ 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 - - - - BuildLocationStyle - UseAppPreferences - CustomBuildLocationType - RelativeToDerivedData - DerivedDataLocationStyle - Default - IssueFilterStyle - ShowActiveSchemeOnly - LiveSourceIssuesEnabled - - ShowSharedSchemesAutomaticallyEnabled - - - diff --git a/dockutil.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme b/dockutil.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme deleted file mode 100644 index 9cf124d..0000000 --- a/dockutil.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/dockutil.xcodeproj/xcshareddata/xcschemes/dockutil.xcscheme b/dockutil.xcodeproj/xcshareddata/xcschemes/dockutil.xcscheme deleted file mode 100644 index 004bf3b..0000000 --- a/dockutil.xcodeproj/xcshareddata/xcschemes/dockutil.xcscheme +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dockutil.xcodeproj/xcuserdata/kc.xcuserdatad/xcschemes/xcschememanagement.plist b/dockutil.xcodeproj/xcuserdata/kc.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 2f30be2..0000000 --- a/dockutil.xcodeproj/xcuserdata/kc.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - SchemeUserState - - Tests.xcscheme_^#shared#^_ - - orderHint - 1 - - dockutil.xcscheme_^#shared#^_ - - orderHint - 0 - - - SuppressBuildableAutocreation - - 4AE244BF249C586900836787 - - primary - - - 4AE244D0249C5CF700836787 - - primary - - - - - From c39d00f0183c257977624f70352e6e2ab9ff3354 Mon Sep 17 00:00:00 2001 From: Rui Lopes Date: Sat, 24 Jun 2023 17:55:06 +0100 Subject: [PATCH 5/5] add the github actions workflow --- .github/workflows/build.yml | 41 +++++++++++++++++++++++++++++++++++++ build.sh | 14 ++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0a4e21b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,41 @@ +name: Build +on: [push] +jobs: + build: + strategy: + fail-fast: false + matrix: + include: + - arch: x86_64 + - arch: arm64 + runs-on: macos-13 + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build + run: ./build.sh ${{ matrix.arch }} + - name: Archive binary + uses: actions/upload-artifact@v3 + with: + name: dockutil-${{ matrix.arch }} + path: | + .build/dockutil-${{ matrix.arch }}.tar.gz + release: + if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-22.04 + needs: + - build + permissions: + contents: write + steps: + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + path: .artifacts + - name: Release + uses: ncipollo/release-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + draft: true + artifacts: | + .artifacts/*/* diff --git a/build.sh b/build.sh index 7d3dcc6..82e7fd7 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,15 @@ #!/bin/bash +set -euo pipefail -swift build -c release \ No newline at end of file +ARCH="${1:-x86_64}" + +# build. +swift build \ + --arch "$ARCH" \ + --configuration release + +# package. +rm -f ".build/dockutil-$ARCH.tar.gz" +tar czf ".build/dockutil-$ARCH.tar.gz" \ + -C ".build/$ARCH-apple-macosx/release" \ + dockutil