From 09ae571405d0efff99851e9f329d265e3db71d1a Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 12:05:43 +0200 Subject: [PATCH 01/15] prepared xcode project files --- quickpkg => quickpkg.py | 0 quickpkg.xcodeproj/project.pbxproj | 289 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 10229 bytes .../xcschemes/xcschememanagement.plist | 14 + quickpkg/main.swift | 11 + testpost.sh => test/testpost.sh | 0 testpre.sh => test/testpre.sh | 0 {testscripts => test/testscripts}/postinstall | 0 {testscripts => test/testscripts}/preinstall | 0 todo.txt | 17 +- 12 files changed, 338 insertions(+), 8 deletions(-) rename quickpkg => quickpkg.py (100%) create mode 100644 quickpkg.xcodeproj/project.pbxproj create mode 100644 quickpkg.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 quickpkg.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 quickpkg/main.swift rename testpost.sh => test/testpost.sh (100%) rename testpre.sh => test/testpre.sh (100%) rename {testscripts => test/testscripts}/postinstall (100%) rename {testscripts => test/testscripts}/preinstall (100%) diff --git a/quickpkg b/quickpkg.py similarity index 100% rename from quickpkg rename to quickpkg.py diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj new file mode 100644 index 0000000..910ffd3 --- /dev/null +++ b/quickpkg.xcodeproj/project.pbxproj @@ -0,0 +1,289 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + C6A91AF42A824AAF00EB41D4 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AF32A824AAF00EB41D4 /* main.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + C6A91AEE2A824AAF00EB41D4 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + C6A91AF02A824AAF00EB41D4 /* quickpkg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = quickpkg; sourceTree = BUILT_PRODUCTS_DIR; }; + C6A91AF32A824AAF00EB41D4 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C6A91AED2A824AAF00EB41D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + C6A91AE72A824AAF00EB41D4 = { + isa = PBXGroup; + children = ( + C6A91AF22A824AAF00EB41D4 /* quickpkg */, + C6A91AF12A824AAF00EB41D4 /* Products */, + ); + sourceTree = ""; + }; + C6A91AF12A824AAF00EB41D4 /* Products */ = { + isa = PBXGroup; + children = ( + C6A91AF02A824AAF00EB41D4 /* quickpkg */, + ); + name = Products; + sourceTree = ""; + }; + C6A91AF22A824AAF00EB41D4 /* quickpkg */ = { + isa = PBXGroup; + children = ( + C6A91AF32A824AAF00EB41D4 /* main.swift */, + ); + path = quickpkg; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C6A91AEF2A824AAF00EB41D4 /* quickpkg */ = { + isa = PBXNativeTarget; + buildConfigurationList = C6A91AF72A824AAF00EB41D4 /* Build configuration list for PBXNativeTarget "quickpkg" */; + buildPhases = ( + C6A91AEC2A824AAF00EB41D4 /* Sources */, + C6A91AED2A824AAF00EB41D4 /* Frameworks */, + C6A91AEE2A824AAF00EB41D4 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = quickpkg; + productName = quickpkg; + productReference = C6A91AF02A824AAF00EB41D4 /* quickpkg */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C6A91AE82A824AAF00EB41D4 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1430; + LastUpgradeCheck = 1430; + TargetAttributes = { + C6A91AEF2A824AAF00EB41D4 = { + CreatedOnToolsVersion = 14.3.1; + }; + }; + }; + buildConfigurationList = C6A91AEB2A824AAF00EB41D4 /* Build configuration list for PBXProject "quickpkg" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = C6A91AE72A824AAF00EB41D4; + productRefGroup = C6A91AF12A824AAF00EB41D4 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + C6A91AEF2A824AAF00EB41D4 /* quickpkg */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + C6A91AEC2A824AAF00EB41D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C6A91AF42A824AAF00EB41D4 /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + C6A91AF52A824AAF00EB41D4 /* 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++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; + 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_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; + 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 = 13.3; + 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; + }; + C6A91AF62A824AAF00EB41D4 /* 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++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; + 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_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; + 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 = 13.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + C6A91AF82A824AAF00EB41D4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = JME5BW3F3R; + ENABLE_HARDENED_RUNTIME = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + C6A91AF92A824AAF00EB41D4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = JME5BW3F3R; + ENABLE_HARDENED_RUNTIME = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C6A91AEB2A824AAF00EB41D4 /* Build configuration list for PBXProject "quickpkg" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C6A91AF52A824AAF00EB41D4 /* Debug */, + C6A91AF62A824AAF00EB41D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C6A91AF72A824AAF00EB41D4 /* Build configuration list for PBXNativeTarget "quickpkg" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C6A91AF82A824AAF00EB41D4 /* Debug */, + C6A91AF92A824AAF00EB41D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = C6A91AE82A824AAF00EB41D4 /* Project object */; +} diff --git a/quickpkg.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/quickpkg.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/quickpkg.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c68a041a22bdc6989528598f7d274c25e9115b4f GIT binary patch literal 10229 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 N`@*<~l)lHl{C{sJg&qI^ literal 0 HcmV?d00001 diff --git a/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist b/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..5549098 --- /dev/null +++ b/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + quickpkg.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/quickpkg/main.swift b/quickpkg/main.swift new file mode 100644 index 0000000..7360c17 --- /dev/null +++ b/quickpkg/main.swift @@ -0,0 +1,11 @@ +// +// main.swift +// quickpkg +// +// Created by Armin Briegel on 2023-08-08. +// + +import Foundation + +print("Hello, World!") + diff --git a/testpost.sh b/test/testpost.sh similarity index 100% rename from testpost.sh rename to test/testpost.sh diff --git a/testpre.sh b/test/testpre.sh similarity index 100% rename from testpre.sh rename to test/testpre.sh diff --git a/testscripts/postinstall b/test/testscripts/postinstall similarity index 100% rename from testscripts/postinstall rename to test/testscripts/postinstall diff --git a/testscripts/preinstall b/test/testscripts/preinstall similarity index 100% rename from testscripts/preinstall rename to test/testscripts/preinstall diff --git a/todo.txt b/todo.txt index c495142..d377545 100644 --- a/todo.txt +++ b/todo.txt @@ -1,11 +1,12 @@ -- move to python3 -- grab minimum OS version from app bundle and use when building pkg -- identify shell scripts and build a payload free package +- [ ] move to swift +- [ ] grab minimum OS version from app bundle and use when building pkg +- [ ] create dist pkg by default, component as option +- [ ] signing and notarization as options +- [ ] modern compression as option +- [ ] identify shell scripts and build a payload free package - problems with this: - how to determine if the given file is a script? executable bit? parse the #! ? - how to choose id and version? (for true payload free packages, this may not matter since they don't leave a receipt anyway?) -- use some preference setting to determine default package name syntax -- support for tar, gzip and bzip -? other possible file formats: prefpanes, Safari extensions? -? identify app just by name or id (could use: mdfind "kMDItemKind == 'Application' && kMDItemDisplayName == 'iTunes'") -? identify mobileconfigs and build a package installer if make-profile-pkg is present +- [ ] use some preference setting to determine default package name syntax +- [ ] support for tar, gzip and bzip +- [ ] ? identify app just by name or id (could use: mdfind "kMDItemKind == 'Application' && kMDItemDisplayName == 'iTunes'") From 796cf37314ce095b641b49ecb27db7d2b1bb4af6 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 12:09:53 +0200 Subject: [PATCH 02/15] added ArgumentParser --- quickpkg.xcodeproj/project.pbxproj | 39 ++++++++++++++++-- .../UserInterfaceState.xcuserstate | Bin 10229 -> 16387 bytes quickpkg/main.swift | 11 ----- quickpkg/quickpkg.swift | 16 +++++++ 4 files changed, 51 insertions(+), 15 deletions(-) delete mode 100644 quickpkg/main.swift create mode 100644 quickpkg/quickpkg.swift diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj index 910ffd3..30e27eb 100644 --- a/quickpkg.xcodeproj/project.pbxproj +++ b/quickpkg.xcodeproj/project.pbxproj @@ -7,7 +7,8 @@ objects = { /* Begin PBXBuildFile section */ - C6A91AF42A824AAF00EB41D4 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AF32A824AAF00EB41D4 /* main.swift */; }; + C6A91AFC2A824B2600EB41D4 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C6A91AFB2A824B2600EB41D4 /* ArgumentParser */; }; + C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -24,7 +25,7 @@ /* Begin PBXFileReference section */ C6A91AF02A824AAF00EB41D4 /* quickpkg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = quickpkg; sourceTree = BUILT_PRODUCTS_DIR; }; - C6A91AF32A824AAF00EB41D4 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; + C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = quickpkg.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -32,6 +33,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + C6A91AFC2A824B2600EB41D4 /* ArgumentParser in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -57,7 +59,7 @@ C6A91AF22A824AAF00EB41D4 /* quickpkg */ = { isa = PBXGroup; children = ( - C6A91AF32A824AAF00EB41D4 /* main.swift */, + C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */, ); path = quickpkg; sourceTree = ""; @@ -78,6 +80,9 @@ dependencies = ( ); name = quickpkg; + packageProductDependencies = ( + C6A91AFB2A824B2600EB41D4 /* ArgumentParser */, + ); productName = quickpkg; productReference = C6A91AF02A824AAF00EB41D4 /* quickpkg */; productType = "com.apple.product-type.tool"; @@ -94,6 +99,7 @@ TargetAttributes = { C6A91AEF2A824AAF00EB41D4 = { CreatedOnToolsVersion = 14.3.1; + LastSwiftMigration = 1430; }; }; }; @@ -106,6 +112,9 @@ Base, ); mainGroup = C6A91AE72A824AAF00EB41D4; + packageReferences = ( + C6A91AFA2A824B2600EB41D4 /* XCRemoteSwiftPackageReference "swift-argument-parser" */, + ); productRefGroup = C6A91AF12A824AAF00EB41D4 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -120,7 +129,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6A91AF42A824AAF00EB41D4 /* main.swift in Sources */, + C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -243,10 +252,12 @@ C6A91AF82A824AAF00EB41D4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = JME5BW3F3R; ENABLE_HARDENED_RUNTIME = YES; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Debug; @@ -254,6 +265,7 @@ C6A91AF92A824AAF00EB41D4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = JME5BW3F3R; ENABLE_HARDENED_RUNTIME = YES; @@ -284,6 +296,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + C6A91AFA2A824B2600EB41D4 /* XCRemoteSwiftPackageReference "swift-argument-parser" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-argument-parser.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + C6A91AFB2A824B2600EB41D4 /* ArgumentParser */ = { + isa = XCSwiftPackageProductDependency; + package = C6A91AFA2A824B2600EB41D4 /* XCRemoteSwiftPackageReference "swift-argument-parser" */; + productName = ArgumentParser; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = C6A91AE82A824AAF00EB41D4 /* Project object */; } diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index c68a041a22bdc6989528598f7d274c25e9115b4f..5ffb014d1aecca0e9ef0d218d61fb441ab81e387 100644 GIT binary patch literal 16387 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 delta 4821 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 Date: Tue, 8 Aug 2023 12:09:53 +0200 Subject: [PATCH 03/15] added ArgumentParser --- .../xcshareddata/swiftpm/Package.resolved | 14 ++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 16387 -> 16402 bytes 2 files changed, 14 insertions(+) create mode 100644 quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..aa0f83b --- /dev/null +++ b/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", + "version" : "1.2.0" + } + } + ], + "version" : 2 +} diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 5ffb014d1aecca0e9ef0d218d61fb441ab81e387..d2df9a4f6c339257265ed9e051c0f747d6912be7 100644 GIT binary patch delta 582 zcmXwxTS(J!6vuz(oc}Ib>Ncg;42Lu?(^~&_wVS2s)M+zYx@jfMxneThXzMb9_8W!0 zDfuT#qtIa&i(xW}had|(< zs&CJ4Qe?vw<0Yj6u+Thgo zpwB9eq&I6fS5#K+FjQ67)EaB*q$aaX>2-TLVx7T+biw>xEZ|hY+4{)Tyo3W+su-7Z zjam~~P?hf7W!f$7FOQ9`~H^4oH(0D~QrtOG<9DI~w*KkQU2IwS9&_*dL3{ z?&Sru`*{&pe{4MDINa1MC9ETYv#q^DTC*C;+Fd@kr+a857>MV(jyl}kHOG1+y)Cld zH({$yI@@~t2HhTSXmmJovCE%`oR6n_T`SHuU;in$rzI4Kha#i?bBVOiH7H)Pi~kr7 z1cPRgDVdt-n1LCYnK@Voi?Sd3XXDSb#-Xf_JbCzi|t0#~wU`XEBLmIF3^|gK3<@2lxmd<08Jt zRs4cqagB;eM|!Fw3pG3BLlhRa}{m`g}%9Z>TF>hgF<2!GA?k|Cml+^$L delta 504 zcmbQ#z}VctxPe!i(Q-4NbR;vY>IWOM*PC}+H@xxwh| zaFTTHT8TwLAUCx0?g5pnZ~@C)`&%1TWxx#Hz*>f@{G=RaA? zG#_ZzEK?0_7uVpBIKSZV%)FHRa-YP?{L+#|!5)`fT*Ja+{DNIFlS?x5^Ad|H7lnCD zeru{wpT|(c(84f-VKKuhhRqDe7#=XZVfewQ$Y{bCz?jBZ$XLbL$=J=<%h=C2fpHS! zWX7qC(-~(n&S9L#xPWmH;}XVYj4K)UGahAp!^F)b$mGTp%@o5_!c@)F%+$v;m1#QD zOs3gPbD8EdEn_;!bdBi-(=Dbu%*@RE%p%P4%o@z*PRv%!&dff{dCdLHtC`m_uV>!K ze46<&^9$zh%)glbv+%I+Gk^gTBZOv%gwjxoMQ-yYGj Date: Tue, 8 Aug 2023 12:13:50 +0200 Subject: [PATCH 04/15] updated gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e0dcece..f8f81a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.pyc .DS_Store -*.pkg \ No newline at end of file +*.pkg + +UserInterfaceState.xcuserstate From 050c22c051cf154af1572a365590bbe7b5a18ffb Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 12:19:50 +0200 Subject: [PATCH 05/15] updated .gitignore --- .gitignore | 3 ++- .../UserInterfaceState.xcuserstate | Bin 16402 -> 16371 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f8f81a0..b3b4020 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .DS_Store *.pkg -UserInterfaceState.xcuserstate +xcuserdata/ + diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index d2df9a4f6c339257265ed9e051c0f747d6912be7..71daefb21ff9b6865b416a6e1ce2ed58b9bd28eb 100644 GIT binary patch delta 507 zcmbQ#!1%d-Lxvp7*~B=7%{g*u!a@&{3UV@wOAHLIFfuW-u(GkMPn5J^zAqp!S>8yD zOIBV%QAt@vRatGavymx#m|t+Hr>D#02}bUM0`Y#q;hA|U`Q<)|mHDM5#gnfZX-^h5 zj?!yjZeRdHR>21T295?s0fq*)1|dPA{PhCD8k$<#I=XuL2A1{?j_!W`0l{ID=Nfx5 z8JSFeVVuooXk=_+W-)oAi16eb6Al5>2F``%4ZID4m#wUgZEWo(x0qzHI61qxPX1(~ zBI4o};TPc{b*vnhl$9J-p=?rZr=fI#iRL3m}bi3r_91}I&i@Q~pxBLkx*qbp-HV;W;VV;y4yV-sTw zV=H4jV<%%bV=vJ`k5v&O=gQP zpPam$qN1{js+zinrn=T-dm~ecaKB*BV(-+-Fu&kXPfwQ!5Z5;`GjDRWk^AJUMw*ik z83|ARXB1_?*}%-%zyO4-f(`r)j13$D3=M1zLV`m1>ji{$boKNN42_IUY@Jb^ zEAvZB7KM6Ua&wP}jPVP0$xJTE%+E_Ks$3M|HTjyULVW>49YY(#EQX~FYZ}9yX z@QUFZBNL-Gqa9-uV*z6|V+-SC#;J_c8D}!iVw}x5mvJ8B0>(v*OBk0ku4G)zxR!A} z<3`3UjHehcFn(teW0GMCWJ+U7XR2pvW9nm?$+UoJ5z`W;WlSrWRxxd4I>Ypk=`qt& zrsvFj%u>wq%vx^D#>`I4uFQVS;mnoHvzWIr?_l1=yodQ3^E>9xEKDq{EL<$&EK&?$ jz{Cil8KR*ylw#4`yxB~iQ}Ggn&%^|wS^80xnOy+@G8m3o From da597b438e770a33799fc39ed775dfd9246c1f63 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 15:04:38 +0200 Subject: [PATCH 06/15] transferred arguments --- quickpkg.xcodeproj/project.pbxproj | 4 ++ quickpkg/Constants.swift | 13 ++++++ quickpkg/quickpkg.swift | 72 +++++++++++++++++++++++++++++- 3 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 quickpkg/Constants.swift diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj index 30e27eb..ae29edb 100644 --- a/quickpkg.xcodeproj/project.pbxproj +++ b/quickpkg.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ C6A91AFC2A824B2600EB41D4 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C6A91AFB2A824B2600EB41D4 /* ArgumentParser */; }; C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */; }; + C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFF2A8266B100EB41D4 /* Constants.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -26,6 +27,7 @@ /* Begin PBXFileReference section */ C6A91AF02A824AAF00EB41D4 /* quickpkg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = quickpkg; sourceTree = BUILT_PRODUCTS_DIR; }; C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = quickpkg.swift; sourceTree = ""; }; + C6A91AFF2A8266B100EB41D4 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -60,6 +62,7 @@ isa = PBXGroup; children = ( C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */, + C6A91AFF2A8266B100EB41D4 /* Constants.swift */, ); path = quickpkg; sourceTree = ""; @@ -130,6 +133,7 @@ buildActionMask = 2147483647; files = ( C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */, + C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/quickpkg/Constants.swift b/quickpkg/Constants.swift new file mode 100644 index 0000000..8d16c3b --- /dev/null +++ b/quickpkg/Constants.swift @@ -0,0 +1,13 @@ +// +// Constants.swift +// quickpkg +// +// Created by Armin Briegel on 2023-08-08. +// + +import Foundation + +struct Constants { + static let version = "2.0beta" + static let supportedExtensions = ["dmg", "app", "zip", "xip"] +} diff --git a/quickpkg/quickpkg.swift b/quickpkg/quickpkg.swift index af4ee4b..fb0d5d1 100644 --- a/quickpkg/quickpkg.swift +++ b/quickpkg/quickpkg.swift @@ -9,8 +9,76 @@ import Foundation import ArgumentParser @main -struct Hello: ParsableCommand { +struct QuickPkg: ParsableCommand { + static var configuration = CommandConfiguration( + abstract: "Build installer packages from apps or archives.", + usage: "quickpkg [options] ", + discussion: "Attempts to build an installation package from the input. Input can be a dmg, zip, or app.", + version: Constants.version + ) + + @Argument(help: ArgumentHelp( + "Path to the item to build a installer pkg from.", + valueName: "installer-item")) + var itemPath: String + + struct ScriptsOptions: ParsableArguments { + @Option(name: .customLong("scripts"), + help: "Path to a folder with scripts.") + var scriptsFolder: String + + @Option(name: .customLong("preinstall"), + help: "Path to the preinstall script.") + var preinstall: String + + @Option(name: .customLong("postinstall"), + help: "Path to the postinstall script.") + var postinstall: String + } + + @OptionGroup(title: "Installation Scripts") + var scriptsOptions: ScriptsOptions + + @Option(name: .long, help: "Install-location for the resulting pkg.") + var installLocation: String = "/Applications" + + @Option(help: """ +Path where the package file will be created. +You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is a directory, then the package will be created with the default filename {name}-{version}.pkg +""") + var output: String + + enum Ownership: String, ExpressibleByArgument { + case recommended, preserve, preserveOther = "preserve-other" + } + + @Option(name: .long, help: "Sets the ownership.") + var ownership: Ownership? + + @Flag(inversion: .prefixedNo, help: ArgumentHelp("Clean up temp files.", visibility: .hidden)) + var clean = true + + @Flag(inversion: .prefixedNo, help: "Sets BundleIsRelocatable in the PackageInfo to true.") + var relocatable = false + + struct SignOptions: ParsableArguments { + @Option(name: .long, help: "Adds a digital signature to the resulting package.") + var sign: String + + @Option(name: .long, help: "Specify a specific keychain to search for the signing identity.") + var keychain: String + + @Option(name: .long, help: "Specify an intermediate certificate to be embedded in the package.") + var cert: String + } + + @OptionGroup(title: "Signing") + var signOptions: SignOptions + + @Flag(name: .shortAndLong, help: "Controls amount of logging output (max -vvv).") + var verbosity: Int + func run() { - print("Hello, quickpkg!") + print("installer-item: \(itemPath), verbosity: \(verbosity)") } } From af4d4ff1b81aa57fb0e051c0f277dd8fbbf75f9b Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 15:07:40 +0200 Subject: [PATCH 07/15] updated gitignore --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b3b4020..d4a31bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -*.pyc .DS_Store *.pkg - +*.pyc xcuserdata/ - From c372a26e82909be41565fc2904ab069563e40c2f Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 15:07:59 +0200 Subject: [PATCH 08/15] odd project files... --- .../UserInterfaceState.xcuserstate | Bin 16371 -> 24702 bytes .../xcschemes/xcschememanagement.plist | 8 ++++++++ 2 files changed, 8 insertions(+) diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 71daefb21ff9b6865b416a6e1ce2ed58b9bd28eb..8a11e0be21615cdcc013ae2c40f266a5dbcada4e 100644 GIT binary patch literal 24702 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 z%0D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 diff --git a/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist b/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist index 5549098..0d9a1b5 100644 --- a/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/quickpkg.xcodeproj/xcuserdata/armin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -10,5 +10,13 @@ 0 + SuppressBuildableAutocreation + + C6A91AEF2A824AAF00EB41D4 + + primary + + + From c72a99b8e01a8e409da46066d1b50760f7e2ceb2 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 15:08:40 +0200 Subject: [PATCH 09/15] more odd files --- .../xcshareddata/xcschemes/quickpkg.xcscheme | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme diff --git a/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme b/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme new file mode 100644 index 0000000..5f18c4e --- /dev/null +++ b/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 4b13e319eb5efc3e6678f858b9a0ff8a784c9de1 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:20:02 +0200 Subject: [PATCH 10/15] starting out... --- .../UserInterfaceState.xcuserstate | Bin 24702 -> 28578 bytes .../xcshareddata/xcschemes/quickpkg.xcscheme | 6 +- quickpkg/quickpkg.swift | 110 +++++++++++++++--- 3 files changed, 94 insertions(+), 22 deletions(-) diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 8a11e0be21615cdcc013ae2c40f266a5dbcada4e..66d834479bdcc79721413690a6378aeda89b9b70 100644 GIT binary patch delta 12590 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 C_nwCU delta 9835 zcmZ`-30zZ0x4&~|?j_A}Zj%?ZtmP!&iv1u|I9ga>Mnz~d%@gd zKyB`;2kzV84!8>*fydwp9Y_b!d|E&U(?VKAhtOhLLWk1fw3?2g^>h+#q?^;JbQ;}( zE~Goso#@VV7rKb>@ubbopjho&}@1uX957XD^>+}u!CVh*(P2ZvK()Z|J>HG9U`Z@iA zeo6lYDaeEVFaQQZF_geasDf%31@$l%#=|7o0=@^+U>3B(JZOh)U|ZM@_JjT509XzO z!a=YC4u+L*2pkHB!75k{Yv6E*;rq}%5l(_1z{zk5oC;^dMet+z30w@9z@=~%Tn*R2 z^>8!X2lvAR@LPBg9)jP&!|(|F5jMc{@DjWX@56`i5qt*!fPcbQ@GnFmgc#(H0+0X& zBQcU78Hzwkl!T0^IWnPSl!98I_fShzfLy4x8?`}gQ9INgbwGuv81+RZs1%iqr`_O)L z2z`f6q6TydoknNSS#$~gjIN-o=q|d4eq|VjW&9W(UvGdq~Q%y-N&<|Na=oMkRDKQWh?E6j~v%pK+t z^MZNFykP;$uq^Ax3fN#)%!adaR>d}B<5&Y5&nB>mY%4aEO=Htp8*67BtdlKZyRb!U zSGF75oh@ejvIE$1wvrvij%LTOlh_Z~$?O!*C1eJ9o(N{4^f&G`_ZJ4i7$jhj$VFjb z#Gv`s!_4nIzeU{V+4zlGcF|aGx8*Ev%ykf(KkA z_YpUsSLu+F;e*R6Yg}cO{c8q@0y5qWc?$lbOl!e2@CSGfUVxY2Pw)!725-Py?qlu~ zZZWrnTgn+fv#|sb1X9cS;pEDm8!} z=vAtm`>K{6#O?AbC8dYZRRkhE6m;fxbN%Y*YHA?2$CDh{ENm=2!3Tak0l&`+zM81J z#|M5AJ;w|F19~z&g`P@Jqo>m|=$Z5^dNy}}`<6S%9pb*@zUO}64s%DiqigB8P2lG@ zS!59bf2;}o@g|F$_JLpN1;2{>@g4ZJ9-CSjyqVtW1;2$mQA=;*PI|%1=$-T~pGCeR z7HRN8+(RIq@@!Ts!uHb#eek~}@X!3Gt#R#-&}Y5ykJ88JAL--t3Hl`6K%b&d(`UGI z+{lZ=5uB@fcHNpQ09HM_FYk!%*zuE-RxSO8yX{r2H3Sefss%RR1z(cBYGQ#5RNdC8!mgZekXW>heYgN80` z3KMI}2bXCr2Q6vqzpgfOPaCK{R546|iJjXNT8nGS>Rvnc&_Rs(djUgDlKYLSm^E2|D9Yjw0Pxa zbAQ&t9PX7z5uM!33o#!WnxKt7$~}G8+W`y6VnZkQrWU%mx1Q0_Q9atj?v!*5>;Ma4 zN7xB=hFxG0>EYPdMHypoC`mM^Dqd3A6&4zzJG|4xm36=u?aa zzBiTJ^lo|qVrq?Vr)+>5d$uWTT{66;xNk)n*)hfSa0A>#l@i^&U+=8E1%64HRuU_3 zgI~aTa0lGkXloq?(Zt*s#9*Lb3BQ87;BL5w{O-aa7K3IO#9?4)EHv{BO<3>tZj0}m zwnckOLM`{SSH~fx#iP~5HR|Rq(u~PISV!TpUIdm8m8Ghxcyv8HN>x*(K1LoVCma>R zK~D7!-zj*8Y(Z~bEj)`s5=ZnS&JlU8!KI8`Yia0UvM_M>wC{ zTR3T6bJILmh^JjZj>nzk9|WKJnp*T0IvSgJo)f`xfB4c@-O}@6Qe6;y>-$RmPp8pF zMIiLmruP;)n}%L6M(}vP+Dy+IW7|N!@59_%xX{y1ILmXRc_=T$S7-46(~&@h@59<# znAapDNyzs^CbRjGD26hvLMo(2QAmTdNQa0W^D(etV8_6LffIuQ3|y;_9>oF!ibHBj z@3mxW4BB{)7!tnOwhl~g20FDu2 zgCY#bZ#N9OW6)y->W+G#o~Re%J6q};}D5S zYSDNM%4!kWNBu}^6f+S`LLYe6v<2!7LdXhnH-jnQ}-&=4^;dmGP{oHX%9 zp^z1b!xSn_OtXaMEmG6Xxt_Z%$D@s>4?p(|Y-I^2g})m7coC8H0fEX+9fu65s22J+ zsH5bbtX5hXY0*ZL7F|)^sN%uosHzqsa<()!hLOg&_*%o?Zc<1!BqkZ-J?2(=#m2J} zr;>J4%5pL|xpP(7(6ZthA>Hs^%T`2itZ?J$BjKbyExs-wupuKe%Uh}4c;S;+QkflJ zXUX|n>feP1YhHe%@QjUTCrOjNE_mxlCwA013hJCr?Yje~&ed9*J_Dgy{eT0No4fI+1GJVH4|KG=9 z$9L#_??C!_|9*&G5`jUz9Kl>|+HkyOxq7N|`hyh_x1qOqcgM(;3 zS^y4m#OGCFFoc^&m@`TADO%=b$7dJ}twpsM3~OY^3c`+6UUv8qc2u<$uJ#zT}L-Cn1;c0PePu{jqaltlxZFM4gHQDpoi!YdW@c+r|22_13kxp1Q)X~ zn2o_44CZ1$mYXcC2ZQ+-EWlvlI`ooCLa)$k^ai~}e=!sT7@C0?eB`}8evH8<7%awM z2?iH1xP-wS4DMobJ=63Sste01%1XAr$kTy95fehZ!XaujBlhTR&B7NoTAm4Iq}|&T zIx0)cMzt%h8BoWBdCG0t5(N`MnaC~D=S&zCaVCr!gQfooe;6$jM;s%gW1^WDM$g1D z%`o^B1Hyo17!U^3VNk!4F);B=0+Yy)s~`r;F(B~{S>$sVocBDijgL-avWP91bS8tz z#9$=`t1wty&zOCVbWM~0oNLc{&qfWaXY7oFA?Nd248F#Mf~xaOYo-m;mT5-?GwqoU zOd->e=|pvBx-dmdS9p!e^Y9#-41`U)I0}Px7!a!LCjO0+o@IJ6y_nu)Tpy;G>C2Qb zrA!&q&vU~unEwR^>oM4Y!B-f3?&;-BD;(&Zd=OK?kRx*g2AeV1N?ai`lo>_@bfl7) znr@C#a(yoES6)`tsc|(i*yy#-re5!Y_r&Uv<^5`Wt3Hw$QnG6bQm+F|(OD-G&kp_yRNxzQkZ>Z(*j#!p}_diJZrHx)Xu<5(dXG`0j5;aZ!yC8uPuER6j6>8FC7JkHKLKjx>= zOhoq8CQtMBl7C~#J93=!k>lvUk^@1XhUtwO7Uc{tuPALtZj;_Pk-6&K+Sf2R;SCL$ zo22FzbGx@tRx-S*ikK>|w7h0Wm7RF>A)aIHdG3=Koc&h|F~2hR$@(n&kA*NegF!>% z0uh7#w~ZeEZ6k6Bp8ltePW`_&QZ=g3blNg+8Iqjxol@lT%hD|Lq<4}lk(b?}4r|^& zz*mhftSK%TB&0nM{^#y?T85>`q)1RILM&$VnA2ETYV zbyZ}s3OK8djbN1+T*lz$e-2Jo&FV-pfQ@1`tQLbS7+l5RT0I+0=~+Dn*S%5T4bR># z&S*A?P5!r@DWoTf&u@8q-u5IF#TeNPmV~0q*-SQzHM7|m+{55k4DMs_+j2IC&4s&I zLfYRkc+yCxXPys=%nH`Uw)YNd&9-6Nvh6TG?heuf09rcpTm01Idk;oeDp1D`L~Pa^0MCo|YO$4X4Vf5^{?iN}m3d zS}mc})F@I@O`ZW%88x`^DW)o^V$$yWt|WKPL^7g+jIG}Ks)qu)KcrWZ$mu3Y_&+77 zewHNq10f#@VF*d}OQDivNm`SXetVLt7(+7kGvP;Y8QciB5MQ;Q)iwRie%nn zkc}kJ%TRw3dQU+s(K?b4-$Rn&-;;>rD7uB-GLU4s#f;{EM`xY|eMD{xxu8-!DxA_# z@l|%B)`x#ry*0U?vRqSOyf4^M6k$$WEw)ySw`_gZ>-`9S7 z{f_ya@w@7G-S4K~ZQcal6y7}EVqPt8C2u2dH*X*B0Pi60Fz+buN8SnEecqq`&>#7; z{=xoX{t^Ds{;~dX{_*~a{w@7myZt-*7yDQG5A(0~AK^dBe~kYW|7rd+{AUG70-^$9 z1L6YW0}=yT1hfoD4M-2j4Cobr1L^|43OEq(ZNQ;`;{lfft_R!=_#@zDz^j0_fm9$J z7#t`H6bFU|_6RHwtO~3N91%Dwa7^IDzz+ha1WpT_5jZPwPvHF^MNocF&!DOx_t>Bb zL0r)LL7t$cL92qc27M86AH$F3$MNI&Dg1Q4mEWCT%Adra z!C%MU$N!OkoPUDfz`xAD#=pV8&A-e4mH&eOlK&_FwZLB>6UYS-f=Gc{pb_WS7x1gh-v!F<@La;@!O|V_CGZ+Png2ln1!C}EA!9#|hgs4GuT69))UUX4(N%V{8is(&9L`Zf>-;l{6?$1L`ggg)n#0GJS zxTQE%oG!MCTZ`L@+lvduoy1+lUB%tR{lx>t72+Y{Vd84>T=7zIop`x;rFflqy?CQ| zvv{xgsQ5?mIq@a&P4Q##bMZ^@D+wi`B}l?bf+Pw_tRz!nmRKaYl01n`;*b9Suc5z%J_vmj`XuyO=yNHO`bqtzK~jNKC{2*2NzGD=G*@buI;AdY8);8z zAL(Fem9$1WLONDDUh0-&>0Iej=@#iW>2~Q(srxJGZt2(3z0&>CZ>5K%KS_UZ<;m`^!y&I=C+4+6SomKsJl_WM*SA`z#a7{>WPNZKn3i>ho+ZikY=c+N>ig5tr@EsuW@T;YZhzjG|M$BHLEon zHJdeCHD73UXwGYe+Ei`6)}bxXw$ZlJcF=a$mTD`s!?h!|oOX(KruJj)678qjT5Y{{ zg?5A1y+gZCdqDeG`%1^xNpwnGoGw9^q%-MKbnofPbd|c1y3xAHx@o!@y4kw9x_P=~ zx;47(x*v2$b;orLx-+`-x}S8v=&tH+=$`9d>R#*KMuTV+?H3&o&5sU_7DY!yCr7)Y zdqYb4*T5UW`4)8B-E7 zA?D+lqcIIJ7h^8P+>E&&^C0GN%(IvmdPX0l57vk1L-i4Qm0qKd*6a1{^b_=J^;`8{ z==bY?&>z(w*Ei@d=r8Fn>#yl==zr5c)xU{l;skM`IC)%bTvFV7ak+8r;tJzB$GN-4 z^@!^o*EeoRTvgogxKVLq<0i!6xQTJAW0m}~GD78({AY7NT`D-CN5TMSzb+YR3sP8-e{E*gF|TrpfX+%nuX+&4Th zJT^Ry2k|hTiRZ=7iC+@`Y5cPIdUyPT_}B4o6Q~53@JYg|gf$845;i3Kndq13pBR`Z zNbH_CAaP(~MdFaeEs5VG?n^w7cqplNQbkf_($J)8qska>Of(veCZpMCG3FZcjkAr5 zjcbkTjhl>HjoXc18h0DNG5%;gX*_K_YrJ5*Wcm3$@nZu0%)2g#3< zpC!Ld0VycOFC`!)C`Fsn(w)*SWl+kfl+h_;QpTlxl(IZ!Rm$3w^(mWDwxk?OIh*n% z<&Tt?t#-FM*y{II&r%~(C#KF#{Wx_=>Sw8SsVh=9q;5*xnz}u8XX;m}CsS{xzD)~H zOG&e&S<`H3&a~EPZPNy(Rj18O^Q0|Ix1^V*4@)1DK0cjGpO`*5eNOtk^abheMd^#v zm!@w^|33X{`s<9a3|)pkBQ7H$!pXr0kHqdH?m#^}sGnS(QHGDl{P$sC_KDRWBZ z^vqeAb24{iUdobWS+bm2U9!4m^~~y%RgzVfH7#o%$to_)`Yh}7tj$^5vUX(c&iXoQ zZ`S^-i&?MD{${mVYmPBDGsl~g%qF+Fg}IeE-JE5%n2XHa%{|S1%q8Z2=5lj|d5F2n zJls6WJjT4#eAs-+d^-pRdZjj%>r z#kJA6s`?4_d#s9=0B{p0!@L-m>1Y{%U=i z2l7y!U!H$nNM3ASLSAm3E3Zplx4fQtOY>IdZOPk_cOdU*-t)ZI`TG3K{G$Bg{89Pi z^XKP(k-sy4SN@*-z4-_759WWLe#~v?Var<_I~zq`yhLbeY~BsPqa_A&#|wyueWcqpR}L0pR-@I z|7^cvziz)}zw36;4#wf<2ypNn!Hy7z!V&8*I1(L3N2VjoVRl#?PDfuye}~(F9UjN$ zj*X7Zj%|(|jxQa%9S0o^jx&z)j*E`lj(d*Z91k5&9M7Eo&JbsqQ|?qc)y@QGinFCN z&6(-6I&Dse)8%aA?BOhTj&n|S&T%er);rxRook$*JGVNwJ9j#FIrlh^JI^~WI&V84 zI-fZIaK3cDE?^3H1%U;E0#SjuAfh0qpm~9#pmRa*g1!Z11p^8O71R`rC>T{RreIvb zgn}gnUlv>{c;=#AjEmEHP5xc^^t3tYmIBWYmaNM>wxQ!>zM0=tHE`~b + isEnabled = "NO"> + argument = "/path/to/item.app" + isEnabled = "YES"> diff --git a/quickpkg/quickpkg.swift b/quickpkg/quickpkg.swift index fb0d5d1..657afc3 100644 --- a/quickpkg/quickpkg.swift +++ b/quickpkg/quickpkg.swift @@ -17,6 +17,8 @@ struct QuickPkg: ParsableCommand { version: Constants.version ) + // MARK: Arguments and Options + @Argument(help: ArgumentHelp( "Path to the item to build a installer pkg from.", valueName: "installer-item")) @@ -25,20 +27,34 @@ struct QuickPkg: ParsableCommand { struct ScriptsOptions: ParsableArguments { @Option(name: .customLong("scripts"), help: "Path to a folder with scripts.") - var scriptsFolder: String + var scriptsFolder: String? @Option(name: .customLong("preinstall"), help: "Path to the preinstall script.") - var preinstall: String + var preinstall: String? @Option(name: .customLong("postinstall"), help: "Path to the postinstall script.") - var postinstall: String + var postinstall: String? } @OptionGroup(title: "Installation Scripts") var scriptsOptions: ScriptsOptions + struct SignOptions: ParsableArguments { + @Option(name: .long, help: "Adds a digital signature to the resulting package.") + var sign: String? + + @Option(name: .long, help: "Specify a specific keychain to search for the signing identity.") + var keychain: String? + + @Option(name: .long, help: "Specify an intermediate certificate to be embedded in the package.") + var cert: String? + } + + @OptionGroup(title: "Signing") + var signOptions: SignOptions + @Option(name: .long, help: "Install-location for the resulting pkg.") var installLocation: String = "/Applications" @@ -46,7 +62,7 @@ struct QuickPkg: ParsableCommand { Path where the package file will be created. You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is a directory, then the package will be created with the default filename {name}-{version}.pkg """) - var output: String + var output: String? enum Ownership: String, ExpressibleByArgument { case recommended, preserve, preserveOther = "preserve-other" @@ -61,24 +77,80 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is @Flag(inversion: .prefixedNo, help: "Sets BundleIsRelocatable in the PackageInfo to true.") var relocatable = false - struct SignOptions: ParsableArguments { - @Option(name: .long, help: "Adds a digital signature to the resulting package.") - var sign: String - - @Option(name: .long, help: "Specify a specific keychain to search for the signing identity.") - var keychain: String + @Flag(name: .shortAndLong, help: "Controls amount of logging output (max -vvv).") + var verbosity: Int - @Option(name: .long, help: "Specify an intermediate certificate to be embedded in the package.") - var cert: String + // MARK: Properties + + lazy var tempDir: URL = { + var randomNumber = Int.random(in:1000000...9999999) + var tempDir = FileManager.default.temporaryDirectory + .appendingPathComponent( + "quickpkg.\(randomNumber)", + isDirectory: true + ) + while FileManager.default.fileExists(atPath: tempDir.path) { + randomNumber += 1 + tempDir = FileManager.default.temporaryDirectory + .appendingPathComponent( + "quickpkg.\(randomNumber)", + isDirectory: true + ) + } + do { + try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: false) + return tempDir + } catch { + print("Could not create temporary directory at \(tempDir.path)!") + cleanupAndExit(code: 1) + } + }() + + lazy var itemURL: URL = URL(filePath: itemPath) + + lazy var itemBasename = itemURL.deletingPathExtension().lastPathComponent + lazy var itemExtension = itemURL.pathExtension + + + // MARK: functions + + func cleanupAndExit(code: Int32 = 0) -> Never { + if code != 0 { + Self.exit(withError: ExitCode(code)) + } + Self.exit() } - @OptionGroup(title: "Signing") - var signOptions: SignOptions + // MARK: main + mutating func run() { + // remove trailing '/' + if itemPath.hasSuffix("/") { + itemPath = String(itemPath.dropLast()) + } - @Flag(name: .shortAndLong, help: "Controls amount of logging output (max -vvv).") - var verbosity: Int + // expand homedir tilde + itemPath = NSString(string: itemPath).expandingTildeInPath - func run() { - print("installer-item: \(itemPath), verbosity: \(verbosity)") - } + if !Constants.supportedExtensions.contains(itemExtension) { + print("\(itemExtension) is not a supported file type!") + cleanupAndExit(code: 1) + } + + // extract app path from archive + + // copy or move app + + // get metadata from app + + // create the component plist + + // prepare pkgbuild command + + // prepare scripts folder + + // run pkgbuild command + + // cleanup + + } } From dcef5a7f82d69501167972a8d95468ed21684114 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 9 Aug 2023 09:10:30 +0200 Subject: [PATCH 11/15] implemented app copy --- quickpkg.xcodeproj/project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 28578 -> 31861 bytes .../xcshareddata/xcschemes/quickpkg.xcscheme | 6 +- quickpkg/Extensions.swift | 14 ++++ quickpkg/quickpkg.swift | 72 +++++++++++++++--- 5 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 quickpkg/Extensions.swift diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj index ae29edb..b8db692 100644 --- a/quickpkg.xcodeproj/project.pbxproj +++ b/quickpkg.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + C66ED2EB2A82AED300E2FE12 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EA2A82AED300E2FE12 /* Extensions.swift */; }; C6A91AFC2A824B2600EB41D4 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C6A91AFB2A824B2600EB41D4 /* ArgumentParser */; }; C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */; }; C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFF2A8266B100EB41D4 /* Constants.swift */; }; @@ -25,6 +26,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + C66ED2EA2A82AED300E2FE12 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; C6A91AF02A824AAF00EB41D4 /* quickpkg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = quickpkg; sourceTree = BUILT_PRODUCTS_DIR; }; C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = quickpkg.swift; sourceTree = ""; }; C6A91AFF2A8266B100EB41D4 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -63,6 +65,7 @@ children = ( C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */, C6A91AFF2A8266B100EB41D4 /* Constants.swift */, + C66ED2EA2A82AED300E2FE12 /* Extensions.swift */, ); path = quickpkg; sourceTree = ""; @@ -133,6 +136,7 @@ buildActionMask = 2147483647; files = ( C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */, + C66ED2EB2A82AED300E2FE12 /* Extensions.swift in Sources */, C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 66d834479bdcc79721413690a6378aeda89b9b70..1d11f4f0c11d4732ffae9bbed695ee69fb83e0f2 100644 GIT binary patch delta 15674 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 delta 13184 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 + + @@ -64,7 +68,7 @@ isEnabled = "NO"> diff --git a/quickpkg/Extensions.swift b/quickpkg/Extensions.swift new file mode 100644 index 0000000..78b765c --- /dev/null +++ b/quickpkg/Extensions.swift @@ -0,0 +1,14 @@ +// +// Extensions.swift +// quickpkg +// +// Created by Armin Briegel on 2023-08-08. +// + +import Foundation + +extension URL { + var basename: String { + self.deletingPathExtension().lastPathComponent + } +} diff --git a/quickpkg/quickpkg.swift b/quickpkg/quickpkg.swift index 657afc3..fcc72ba 100644 --- a/quickpkg/quickpkg.swift +++ b/quickpkg/quickpkg.swift @@ -82,6 +82,8 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is // MARK: Properties + var sourceAppURL: URL? + lazy var tempDir: URL = { var randomNumber = Int.random(in:1000000...9999999) var tempDir = FileManager.default.temporaryDirectory @@ -101,26 +103,51 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: false) return tempDir } catch { - print("Could not create temporary directory at \(tempDir.path)!") - cleanupAndExit(code: 1) + cleanupAndExit("Could not create temporary directory at \(tempDir.path)!", code: 1) } }() - lazy var itemURL: URL = URL(filePath: itemPath) + lazy var payloadDir: URL = { + let payloadDir = tempDir.appendingPathComponent("payload", isDirectory: true) + do { + try FileManager.default.createDirectory(at: payloadDir, withIntermediateDirectories: false) + return payloadDir + } catch { + cleanupAndExit("Could not create payload directory at \(payloadDir.path)!", code: 1) + } + + }() - lazy var itemBasename = itemURL.deletingPathExtension().lastPathComponent - lazy var itemExtension = itemURL.pathExtension + lazy var scriptsDir: URL = { + tempDir.appendingPathComponent("scripts", isDirectory: true) + }() + + lazy var itemURL: URL = URL(filePath: itemPath) // MARK: functions - func cleanupAndExit(code: Int32 = 0) -> Never { + mutating func cleanupAndExit(_ text: String = "", code: Int32 = 0) -> Never { + let message = text.isEmpty ? "Exit Code \(code)" : text + log(message, level: 0) + + // delete tmp files, respecting options + if clean { + try? FileManager.default.removeItem(at: tempDir) + } + if code != 0 { Self.exit(withError: ExitCode(code)) } Self.exit() } + func log(_ message: String, level: Int = 1) { + if level <= verbosity { + print(message) + } + } + // MARK: main mutating func run() { // remove trailing '/' @@ -131,15 +158,36 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is // expand homedir tilde itemPath = NSString(string: itemPath).expandingTildeInPath - if !Constants.supportedExtensions.contains(itemExtension) { - print("\(itemExtension) is not a supported file type!") - cleanupAndExit(code: 1) + if !Constants.supportedExtensions.contains(itemURL.pathExtension) { + cleanupAndExit("\(itemURL.pathExtension) is not a supported file type!", code: 1) } - // extract app path from archive + if !FileManager.default.fileExists(atPath: itemPath) { + cleanupAndExit("Nothing found at \(itemPath)!", code: 41) + } - // copy or move app + // extract app path from itemPath + switch itemURL.pathExtension { + case "app": + sourceAppURL = itemURL + default: + cleanupAndExit("Re-packaging '\(itemURL.pathExtension)' is not implemented yet!", code: 99) + } + + guard let sourceAppURL else { + cleanupAndExit("Could not determine app.", code: 4) + } + log("found app \(sourceAppURL.path)") + + // copy or move app + let destAppURL = payloadDir.appendingPathComponent(itemURL.lastPathComponent) + do { + log("copying to \(destAppURL.path)") + try FileManager.default.copyItem(at: sourceAppURL, to: destAppURL) + } catch { + cleanupAndExit("could not create a copy of /(sourceAppURL)", code: 5) + } // get metadata from app // create the component plist @@ -151,6 +199,6 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is // run pkgbuild command // cleanup - + cleanupAndExit("Done!") } } From d98e9ef73359017751bd9e7be33ddf70dd2d300e Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 9 Aug 2023 12:26:49 +0200 Subject: [PATCH 12/15] creates component plist --- quickpkg.xcodeproj/project.pbxproj | 8 ++ .../UserInterfaceState.xcuserstate | Bin 31861 -> 34616 bytes quickpkg/AppMetadata.swift | 37 ++++++ quickpkg/Extensions.swift | 7 ++ quickpkg/Process-Launch.swift | 118 ++++++++++++++++++ quickpkg/quickpkg.swift | 38 +++++- 6 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 quickpkg/AppMetadata.swift create mode 100644 quickpkg/Process-Launch.swift diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj index b8db692..c371166 100644 --- a/quickpkg.xcodeproj/project.pbxproj +++ b/quickpkg.xcodeproj/project.pbxproj @@ -8,6 +8,8 @@ /* Begin PBXBuildFile section */ C66ED2EB2A82AED300E2FE12 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EA2A82AED300E2FE12 /* Extensions.swift */; }; + C66ED2ED2A83737F00E2FE12 /* AppMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EC2A83737F00E2FE12 /* AppMetadata.swift */; }; + C66ED2EF2A837D8200E2FE12 /* Process-Launch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EE2A837D8200E2FE12 /* Process-Launch.swift */; }; C6A91AFC2A824B2600EB41D4 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C6A91AFB2A824B2600EB41D4 /* ArgumentParser */; }; C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */; }; C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFF2A8266B100EB41D4 /* Constants.swift */; }; @@ -27,6 +29,8 @@ /* Begin PBXFileReference section */ C66ED2EA2A82AED300E2FE12 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + C66ED2EC2A83737F00E2FE12 /* AppMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMetadata.swift; sourceTree = ""; }; + C66ED2EE2A837D8200E2FE12 /* Process-Launch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Process-Launch.swift"; sourceTree = ""; }; C6A91AF02A824AAF00EB41D4 /* quickpkg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = quickpkg; sourceTree = BUILT_PRODUCTS_DIR; }; C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = quickpkg.swift; sourceTree = ""; }; C6A91AFF2A8266B100EB41D4 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -64,8 +68,10 @@ isa = PBXGroup; children = ( C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */, + C66ED2EC2A83737F00E2FE12 /* AppMetadata.swift */, C6A91AFF2A8266B100EB41D4 /* Constants.swift */, C66ED2EA2A82AED300E2FE12 /* Extensions.swift */, + C66ED2EE2A837D8200E2FE12 /* Process-Launch.swift */, ); path = quickpkg; sourceTree = ""; @@ -136,7 +142,9 @@ buildActionMask = 2147483647; files = ( C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */, + C66ED2EF2A837D8200E2FE12 /* Process-Launch.swift in Sources */, C66ED2EB2A82AED300E2FE12 /* Extensions.swift in Sources */, + C66ED2ED2A83737F00E2FE12 /* AppMetadata.swift in Sources */, C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 1d11f4f0c11d4732ffae9bbed695ee69fb83e0f2..075b9a59444d4931702aea64fed08c40dd02b94d 100644 GIT binary patch delta 15319 zcma*O2V4}#`}n^zTaT{DQBRJeoV0_ZqtZbIrNhxYjsuR4AYwPUo!B)R^^7eh3RtnX z*b-xliQQmtv3FyPCTcA4H+u)>^Z6wI@9QtwyS?3+*?B+DGtbQP?BtJEV8={2OACIO zU3yYq3MxP)s0DSP5ex;x!3Z!0j0JkYg9%_FmE0CT}wunw#T8^A`e32X*i zz*evgd<}MiePBQM5gZ0TfevsQoB>zBRqzLR0bYVv;7{-xya8{)JMb5H4@qbSZD2R( z2%Vrabb%7+sfS)L8pgm_7zg8F0!)NSupjIX2f#rv8|J`5SOm*pIn=>=I0R0Dli?IN z6;6ZG;iqs0oC!aJv*29#1zZfjgl%vcTnpF1_3&%B9iD`z;7_mvo`z@OS$GbfhZo>Q zcop7;ciX0N}&2vX;eCuL8+)bN<)=U zTB?*PqiU%-Y6LZs8byt!^b}7`pe9o@sF~CpY96(i`jT2o=~qxIsa4b->N{#LwU63Q z9iR?U-&2REAE+Ox!_*P#D0PfFPFKb*Ox=TH!exsgI&#B+3KdARK zK?9nmMYJRBL_5**nM1KmgurJLwU^kjMpJ(ZqDPp3bnXV5e0#q^i-SM(BkDcwS^qu0|L=#BIydK>*U z{SEysy^r2c|3IIn&(LS-bM$%oD*ZEkjlNFbrSH*?=*RRk`Z@iQentPu&`8fFO7#C*bxXC^QcnMurKW(qTvF)(wP&zX75SIl~57qgq$$Na$j$Q)x% zF+VY9nRCn~=4a+6bBnphJYpU*zp%8PWmuNwSP^T+nzI(HC2Pf6v$m`g>&&{aGS;2- zW&K!xR>6j`;cNukmrY^^v01E&&13V~!E6buWp!)?+rW-s$FV$%*oo{^b{adA{fu3} zE@79mtJ!vTJ-eCR!ft1Gu>05_*%NFBdzwANUSO}V`m5{>_D}XT`-XkXzGMGl-*W^9 zILMJ4%UN+fI6F?l_2j%bIp@m-a1mS#m&7G=saz(P#i_U>BN6xPy_}8H7EueP{NPpXY(uh zZ}<-W0skHWTLiojh~nK(6N3qBLQNDC8ld9|-kGn`*bJ(uuG94n2nfg>rfV7&pfx-d z`^n=P8&h@7+H!5PRxxa3bw%@kR;@8st3cQX6f_`6ACGf-&OFxK9M9dEqUZ1~DPhn-?P zA7R+rXMK;qF=iOAj?&n~;z~h=UmTp+ImSz43|5XUxu1ijf;8uW`CtK92o`}az+&(v z_zEoH$MGNWAM<*i=Mn!2Kc1h!PizM*gdAW`0hWUmL;(I?P00C4ybYg^|EBUYc^Urx zY>VC{7sPBQnp?mQeljoZAgl;$u$yRJ2EM_y@WD^PC51z3<9V8}G~Pb|z9+;j;2=M( z1svk18-SfW`v^Erh+Dx?5XgVZ4{ik~KrlapFXl^%%Nxpu*XxEf57G^(Y_94?O>zJ3 zDPjEA)!tcfL8u!K&hzE`tX2>VPT-m|4BcEDbAJX81ng_zI=BIDf?MD=xC8Ejd*D7l zhd1zZ`Oo=z{Cs`^zmQ+Vf6)#ec49vPzk;V2`x(Yw+==}a-^MS)*vm0?4(JXE%nbqm zWhXbJ3(?JVb}a2KI1#%sZNP>k_f{|(RTynC#d3D3r- z6A<=T#egd?AQa=etr*Zj1?4aZ6T)858~Q+B=m-6w0tUc9sN`4itNC_*4ZoIO z$FJu%@EiF}?J(Fx2*XW^g?%vL=1#(Gor>LMB#ed00$~cjrHe2XYZj&v0m8v=#aa~( zsf}exIZh`syc7Z(w4u%?mU5(jy2<#=8edoWh+g$HzrUF)*c&jk)Zh^N1 zm)~jPZGdA0-bOeSHo;-A84iad;7B+Mj^@AR_we8Gd-;9*e*OS|kpG@P)DFjX^6EQz z$79|fI(d(F@}4sC#>3eH?;QTeF5b@t-g%gJ0p>l7S&tZb&274Ob@eN_R3Ki$A8Uav z{BeO;441=I0`Uq=d_o{zP1N%z4VgWA+HZiHO=O!e*-x!RJzUMZ;(JC-?tljbvYl`j z+zr2h-@-lcJGd9_gZuf@{2Bf%e~v%TU*IqDm-x&4m3DZrlk7)$7#;yMJch}xc9LD^ z@9=lAt={X@lztI98@Hb6X{0n?4 za6Q3Xw*;==uqJQ+izd6dQ0}odomRZJtI0p%TNC>m%zj_c>TkI2Z6iAgNlVO5k|aga zBtxuq$mGJCp*~-vy+a0rOn$vo_s@E=*!39ljK2$*4Q<39u}O!x?N zGxFP#^#cD81kAexFx0R^F6lOk93w!EM!>R#9E*UJfSE?>$xnnn2a<>%jDR(^QE~$B zih#{Oe6h_(U7S?vAmE6A69Uc%xF8^DC%@_>Z6({tWtez{K-#m5REmHn0$u{NypwgSz`6|q z*Dlr_M%M4heFE!V1l(H4{RqeeRtNGBd00^C48( zah(ykdI?-d1X*~PG`ALkC7^ld?!%-g+OR06$QE+6LwBU$0Rr>X{S0U zjxxivln8LJkd{-?0GbLDBru>$0)r69L?BDhY_?Gb$y6ei0fnn4cgbJ?mI0Mar3eQC_`iXsPwd80 zYhsR$IeP}336{Aa7U&CjS=)a-(^Y%|5M=BDZ)l?ap=q5}ds zW19wQt^owt_M!~b=R{?GT6VUvOjq0Usf9w@3lJ!6p%x)fX6PFb7-J_0$GxBejXzj6f9v)dVnv0(i(_@6>=mBVJ@u+psZgr*=>~sa@1=?A2`$7%JF769U5!z~UW_z=$mlffgX( z1a+DST1K6uPEkKm9SDp<0DH4B2#j4uouSTB=cw}tj6(p6{bL05hHT}cgd5bIHtHsI zi@J>fkH91Zu=wV7k=&ym5kYO#ed+=A5CMe1CkTvhqaIVgP-hUBfWSoDpdm15LF^0a z^}m&TL%pTmAut(%DF{sE-Q8n47prB2)DsfY4jK~HG)YrixL`+0Kh3CRnxR>BT6XI2 zW^HMm4l7&RhA(kMrAhVL&fd{xbT=Ys1$Cdcpe?C~v^9-ogZua?0yA(o5txaIYy{>YU@)G{=G`?mvgE|1xU%Nz5!Hr=;dX{?;Zya3c4?_eyQh}E z2p@p8Tb$ESt{pAaHcOR3y@SF`J@ueHi$C-u)1 zJ;-$9OT(tfRuP?P`n3cHUU?R@%Ji${?+D6fkTGDP3urA7w305Qi|E0$nl7d_bO{1& z2w+=Zj=%~8RwA$pfz>PNQo0PMS9Eldus%Vc9f392c;O*jcFV55y?}}yMq`Jtif*Qd z(ni&qV;wgkK}D9f2JP>|9RIqvz8L=!GH( zI|TM3un(UY`V7=sciHD=8jtv;OAXftNF2MaZKro)-$3K%?{A^;Ll5A)ZuB1dJ9@8y zNp^Mo9)W}D-N>`0jdj(-ngavR07z1Fa!Q6FD!I4q1{)j3%GTc5)m`oz5FFkoDlW+o z88?nTweG~X3kwbM${p7lNr+E-Y|v!ObAdHV<@T!a#jaS1;~i~k4DY(sPeDuWb;jCe0x;8gW>Tp%QD8Ezs} z)ue0GX`5|eM?_?Ap@nX^g*~pgKwm|xnR!QaOssI#L@@UJr#7a=mbVT}Z5=eo-L!Znh}N`p_t>GPU+%GUM;XsrGI6_Eini>W zT*Iz}D!mTWfFWQc7!5uKv%ylZ8Yh1@f}LPD*o)J=H^Czu%Km{BIPUln9>v+%tMD4m!rq6!!PllfK+xGURp&SU zvKCHBk;y?Epbr|>C;F1#(}xUK5*GygNFNvM=`ekSK1v@$;0FYLMBp$2N0!ki=#%s* z`X>aAB5(qMlL(v^?CFE;T%a!rwsR4IV=eS$1da=qMWuIxiH7KY*`ihE7WU3=9&#VU z7yX6-)?nSgo?FV(9WD}IKf}rXZqzb=MS$T%|Dn}`iBbZuf(b+{B-Rlph*LxdafUcY zTp+Fz_lXC@BjPFX22j8PSOW(j0X=~fc!CfR0ir-Ohy_VF^Ii)+1*=TZAA}HS`rY*j z4jN{~I)CW?4f>YQ{hJ7!YN7FT^OMo^?_<+{D40HlO~1q7ot%xW`Pll629#XX?HBr2 zp~@2k&a}`^5jbnC@;k2bqN~ce4^`gaD%p78`UbqF-wQ&1L%*fp(RiJRC3Xn`EU_zi z&@zC5orCr&0zaDu?fCADIU^)07z+fhwJ=r)T*uFnGE8^+JElk1!)_QH2R-p(>=|b~ z*)a}`Bjbd?Ed(&loi=&_BVl?Poyc7T?iu`3A9iQtj5qf8OfLi;wlF>jJTiEv`Fb-7 zlXL%I%bo6l31UKtpjIZB2|)l;|7!RsZIGVn%M2ib)-X{_G!w(bGI2~ilfWc0NlZVc zKLWoY@Cgz~9|*ia;3WdD5cm^;*9g2>!z2>{%s^%klggwq=}ZQb$z(Cv2)q@t ziE5hM@<2+l*W4Z#fvZba~VVP=$O>*{o6TLz@N0}DpWl;Vk~CozsGGmOmec6?_v za7M>e6s2V+4=LA;%Fs4fwKA24of)!nrk1HAf|f4roZpxRJijrG2*STt7tAmQr!H17 z&CGCS1T&Hu#f(OfM36#|Mvy^}MUY#;jAh0#AK_0uoVg#)b?1NxG z1TzpUO^Lm6O<&ifky;Hdi+c>A=0e#$0D^6gFZ@Fs-5y?1`X6 zV-sbNMn(mg8oJHgDZOS+pFfZ31JTx549b5i{`4dN0%&*K- z<~QaU^PKse`Ga}EykuS>=#HQVf}RL^At*<%7lPgh`XK0wpkF)l+LRh${$k#<1fW@n zBP-}{%8ekXL@*S=Fkw*=Zi=i}8@y;^yCJCPjI7umII?2xSg~**7=U1)=@Um*EjF&5 zLzk7XuGoLD7&oYe#U>JLP-^6Q4_0mrtXMA`Siuk+IpH*qD^3&rZzk70*2UyEZNBVk zF@Oy+MqR9uFGn!q|GTcn#;L3cPr|x{hWf^aA=q*)(Fn#N7;m(7yO|8GHIIsH>0l}3ToV1d+uL4rV1It9|-D3El% z@*e_eWQYDOkTe7b{6iok1%ZrW^`qG_2qq&q5WztoMn79g+X@0n5yBHeAl?4?!llzs z{HrV`nPidr@3PPtWl?36g+8}w_>f-z0zJzJZNSi_T?Y z-_Up@W&HzssQ}%=wz7DF$wn|2LA~m4=vgM{oGxhVgoYu*nzcikhjqR*`oEAjn2_`S z9l61XTxUei&lD038MT#yruF~j>)D;mN_IE<4W`}+G6m{lqo2p)uE>a8%n$ts_I~!j z-`Hgc;sM_2<-3gkuz-DpJ<1+KP>o;-g4!->8*6qadrHtXev$_3+OV&vho1aDE&ZYi zwe;UnKQ^K^8Bx1j$W8Va>^9k3>}~cAdzZb(-e(`M57|fTV+3^wRv?H?7#jp0*?5T5 z1|x_?Rgd71cJ_(MZ?ex!IXU(Pf&FGfm){)PnUjOVO*uJ^!d{cZGjwC8*W|c=O)GbH zjI-vtVQ8hwQ_AH6>%#OY(a4T2NfZ>)Hp41tMOuxYvjt`g` zTJqmIwt<(3@43U=5$-5=3|sMW;vjc|I|)W}KXDzzIAR=knma=jb7#17c+SMGvdM6% zWNObw8yg!t1Y2!3@`UaC&VR<~pS!?aG<>CXqT9Gj+-1XJZDe=uDt8TsCfv^mE^Fbg zBe>iUSnd*ao4V7=-Qn&cxB|hof3McL2iz|>$;&GA}67eSY$795IG|FHGVIe{9Nhm(z{Pz zUc_7SHf=aD!`t%qyb~`uosbxj)UUt6uBw(AI4CvEFrmt$dulpPg{PO+=*pUf`tIcyrz;yyb2yJchT_U50nzFF1ko9B-m~3E#kX@IBr`N8*>Oo@8&b zFBz@Jo8>CWW^yz+ft*1uCYO+_@D{jDc>CKn{A%j~`4sPW`<;A2N${(kAS#C%PR$nH z98mMAZ8*z*5hu$Z;jLvas8`f$oOkx8!{`XQH{F+3;k{zRaN=@2J?DSYCZoF&CdO|) zLE~iSG=d`>2^rx>D2d)g43SBwa6-43eoDV!NSvz><6MIbZ~pRPe2rVbf|z8c5y#1M z@fNNHIKo|wH*zgyT5%k^0>`lJcstht=6k%M>nL*qZ|FM1oM$dFS8%j;gL#F+8gINu zD;4j-n!|2j^*`a|g0P#)f^+1Y@g6Ey&W&^DJn=*s!iC{|RK2;rTr?MpcT2T$SMWxs zRMAJGX`&gT&qQ-Xb4Bw+ZK5@z?V_Ec-J);Ja?I3bRc1rYMw*Q?n`k!2Y`)n-voFk+ znzfoOGh1P{-|UpxMYBt0SIq91{bKga?2Xx9=7ioHnp5VM=I-V`=Hcdv=Kal+%?FvM znP-@*%{As)^D^^?<}c0vvLGy=1!ZAwVQFD)(aplvBE%xkVwA-!i-i`8EEZcVx7cj4 z)8adeV-_bZezG`Yan9m`#T|=#77r{QSq53gSPrmEu^eQXW|?7GU|D3Tw$xZ^Ez2wo zmisOBzgf9h1zQcU%CyR{Qd#9&Ra*_S`p9ak)pV;FR-akTwz^<-!|I9EbE`kBURu4i z`pcTIhSp}*-K?FgmDatj3$3-*$a=o@GVA5mE38*pZ?oQEz03Mr>+h`hS)Z^zX?@DN z!}^-_P3zm%_pBdSKeB#h{o4Ai^&U)jF4eQWzy526R`LG@sIa6Qa=$b0nbQPbno9vgd{>+#yo(JsO+*RI%3YgcBc zvm0VJ(r&cfSi6tx^mfQ@yxl~*$#zrhKDS$7x5(~GyCrrlc6;oO+MTlNusdUS(eAR{ zRl93;kL+HHNwJ<1Gh&gryVzbV70bi{;t+9|I6@pHjuFR+6U52le6dbEMm$dZv6vTs zBAy_gB%UIkCjL}BQ`{zAE?y~KEnXvDC*C05B;G3CF5V^nMtoR&RD4`~(!Qs?uf4y0 zfW6Xwy!|ZuIreky=h@$~e`^2C{&)Kq4)G4@4w(+wdWT$x7Kil?8yz+~Y;}Z=){fmA zZ5{0#)s8ieb&f+E8=YL7yq$cV{G9@vnw<1b$Z5ROMCYE)zRt1E@y?0P{hS9lr#KIC zPIJz1&T`Iiu6C|IdARdP=h4n%oj-EcJ1=(L?R?DzxOln@bZKyz>9Wq{ zh|6i0b1wP|E|*+xxjc4x;_}qxnal4kFI-+pXbC4VlUPcuCEX+nNgqk9BwmszNtO(h zq)O5y#S*QgMlw<|PV%vYmrRsQmQ0mQmn@R3lzb!EBiSq2FF7bVB>7QtL~=}WLUKxS zM{-Z{K=MfPi{w|yZ<6PdKO`?De@fo;bm$r0vq<0bqn<52f9Uzh)y&n~wV!LcYnE${ ztIAd5TIE{fTIV{%wb8Z7Rqy(V>jc-yu2Ws7yRLHG=DN%E8`nLq2VB2*{lWFH>jl@# zuD4z9x;}S(<@(z7trSQ}DJ^BCVyU|{LfTu}R~jvimBvdGrTwG>q$$!tQmwR1s*_eq ztEKu{X}z>TI#fDLI$SzZI#;?ydS3dco5U@_tuDy)?>ZLMvrYC+dX!A?Dja~aoppQ$2E@|9=AO1dpz`b?D51y z|IX9Q)78_>)7{h4Q|{^Q>Feq58Q`h(4E7x0nc_LfGtD!@Gs`o_Q{|cOS?D>~v)FU2 z=OWKNp4Yu7FCVWouX?Xfy;gf|_S)vP-D{`Uey^im$GuK^{p5Ap>#Wy#uiIYtydHQx z_Il#=RBkDElDo>?z!BpbkB5)k$H&LtC(tL!XMj(N&mf;PpG==@pIo0jpF*F(KE*y`eHQub@wx6x`TF># z`PTb>>bu%^v+p+F9lpDK5BMJQJ>h%Gw?prH#`m1>E#JGo4}2f{{_6XipOv4ppVUw0 z=jrF;=jRvTr}T^Ui}y?S%kfkB75EkVmH3tU>HM1gkl#GNg?@|umiV>$E%#gHx5jV1 z-zLAUeuw>z`JM1P<=5eN*6)JfWxuO_*Zpq#-S!9mQvXE%3jb;T8~xAtKUZ{D1SldD z`aX(iMXVxOk)_B{s1*5%Ld9T3wW3bZplDJISBzB5RkSEpC{`=hC^jm#D7GoKD-J0R zD>@Ws6gL!i755d76i*e;6n`jQ1~37(0lflz0~7(ufRKRjfZhR70kHuI0sR7s0*V7l z0!jnQ11bZm18M{60~!OG0-6J62W->_oC$al=oAyMgxu9|k@S{4?-v;Cm%h(n?n8p;Rivlo854%2;K*GD+EAsZ!=Eb;=rLow7mM ztQ?^ntsJYIrkt-_tK6X6tlXyDq1>(9qui%FsQf{BM0rhlQ+Zo?S9xFgNU49K{7v~> z`9k?h`8voxC@iQjXk5_JphH0qgGIr;f|G*Nf-{42f>ptq;Hu!-;32_7gPVg#1dj?H z6FfP1TJVhES;2sZ4ZaFehetOtf zVN1i>!j^}v3R@GlK5SFi*08U`c7z=WyA<|3oC%kN2Zi?y&k3&&Zw?<5z9f8k_{Q)Z z;opa!2>&VkO!)cmOX0V|?}k4Je;od6_-_$r5uOpT5yK)zN1%xD5uZjFBIZRbj9478 zBw}sEmWZz-c1C;?aUkMQ#Nmiz5ho&EMtbTaGb0Nl2S-*%HbxGM91%G>l8+o8IVo~# z|YN-~arfdL#661pCGKr}RD4DJ?D#G5C*vRL6SxGs1g`||1iyrUgrJ1bgouPb z3DF7Z37H8w33&;H3F?HBgwh0ELS@33gc%7f30o6>O!ztBw}khJ7K!$WPKlC4X`*|g zSE4d8Br!a(cVbjxY+`((E^&I|lEh<)KPNs){5|ny;_JkBNkoz;$s)-*se6)Ll6{gQ zDL$zvNk1ZKeA0xZiAj@_T9Y;;ZBE*jv?FPE(zi($l5QmZ)erQelCLJ;O|ec9r^KWz zOWBmNE9Kjiy(tG$4yBw-=}0-7av|k%%GH$L2XX`52KF78JaEv!^nqCea|h-PY)ajg zdN%cD>Ydd4sgF{hq&`hEPwSDUObba1PrI4+YudB4Khj?5)83@LOLs_jOOH;EOHWMy zHKTimYeugO-wZ{DG9x4-DkC-{A){YLa>l@n(u@%qpJlXXe4o*gaW>;Z#^sEkGp=X6 z$)qyfGCeZoSyoxjS+Xq8tX^5ZSwUH$SrJ)%vZAtdS<|xiXWh@X%kG)&o2|%JW`|^l zXGdnMvn#SIv-LIE!?OA8iP=-Kr)ST~o|8Q{dtUbX>{HoSvwzQinf*HZT@H~$<}f*; z9E%+5obEYxIes|-Im(=noba69IZ-*WISD!aa*}ff<)q~d&G{;4W6tiJpL1U1y5t7t z#^mPaj>?^wyD)cc?uOhQxd(F(=bp{Io_jO**W9PMzvVv9eXGxXuYxLC)m`PPlBqmZ zy;Qy`g-WT4R>i3jRsB^ds#I0FDpNIB)u@`JnyXr>+N;{HI;lFRx~RIMx~96TdZ2ow zdZK!oN9Q@@`Q!!XMd!ukCFb?dOUX;kOV4Y}`!sK3-u}GndB5iq`91U9@;&n9`9Asn z`GNUC`Jwsxw0v!TWB!!qN@5=u+e{cSQ{6qOa=D#i=3(N{E3v3E(3+xJH1^xxW z1z`md1$_!q3bG5D3Pu*pD`+cNQLw6DO~KZJeFX;#4iy|O=qR{WaHHUM!QFyi3+Y0$ zLTRCQVMt+kVei5*h2sl9E1X-nv~YFdnZk=jRFP9rN>QG^sII7?sHtdp(Ws)aMIRTT zq6tNli>4JVDQYcRRzR z(`qYqH+2uSSnaCrrS?@T)Jk=TI!qm*?yc^xPEn_-Gt}AYTy>LLub!Zuq@Jptsh*{t zqn@j7Q?FI)*Q=(2N!FKwZ-MdmBls1 zb;S+EQ;Me-&n%u@Jhym$@xtQP;?>1#i#HT+F5X(aulQi`55-4{Zxr7uep>vz_>baO z8d}3?%rur7vBq8Fsp+Nh(e&3;X=*h?G>w{Jnh~1Odd*nP$C~+?MVc=)OEqnp6`EC= zO`08=-I_g`eVPNBQ<~G7bDE2qUo@{Z?=XN#WAtgggrj^VnnN?yanOCx~#iJG8sCd$jwsXSCFCn2r5~5_rJs~eD4kq7 zwRC#vs?r}yAC*~_Da-Q8#+EHA+gWz5>{{8)vO8t>%AS_}S@x#vUD^9`P)?THl-rhz z%N@&I%6pdgDIZXtTAp5>Ri0N~P+nB7F0U&eUH)-7Up~HkO8K<%Ps?YPe_6hwe0BNS z@(tzs9p$IX&y`;+e_j4gN9af$qZ8>YbXK}IV&3)4mF`sfmM19fS-OkIvn zr7P1_=&E$Jx>35Zx{q|cZia4_ZjSDA-B-Fbx^=pZy3M-pbZ2zub(eHkb=P&bba!Yi1w6=oF{6;>5C6}A<274{X5`U;ndo)yxHsEWZAd_`-;p^C?qHkARDX_d8= z&6Oi7$5f81oLD)ta#rP>%DI*EDi>5PuUu8RrgDAdrphgqrz)>j-mJV`d9U(u<&(;% zmCvd`l~t8(m0guXm88nG%B{-1DyXVYRd!W=Rb$mBRbNznRn=0ptZHRdd)2zCudDV| z=?_-@P<5p0c-5(@j;d=_H>>Vc-LHCB^|I=9)!VA~)m*h*wL`U2wWQjo+P^xWI;c9P zI=(uwx_@;>byoG*>N(Xbt9MtQsJ>DCqQxm0tt=621!ng=zHYo64+trgX} z)Oyth)b_1SsO?vqTsx>XyH-`3Ut3hGu5G9tRXe73a_y{IL+!lUg|&-om)EYUT~oWh zc2n(^+HYzP)&5lbp!P-W`#M-h*Ku{`bv^3Dbq;k-buM*1>-yFe)QzkAysouwdEKhI zHFfLihHj`kPt6x&Ts=1*v-G%=LA>p4W+w|S_+1&L1 E06Duv)c^nh delta 13543 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 + + /// runs the command with the arguments + /// - Parameters: + /// - path: absolute file path to the command + /// - arguments: optional array of arguments for the command + /// - terminationHandler: code block that is run when command is finished + static func launch( + path: String, + arguments: [String] = [], + terminationHandler: @escaping (LaunchResult) -> Void + ) { + let process = Process() + let outPipe = Pipe() + let errorPipe = Pipe() + process.standardOutput = outPipe + process.standardError = errorPipe + process.arguments = arguments + process.launchPath = path + process.terminationHandler = { process in + let outData = outPipe.fileHandleForReading.readDataToEndOfFile() + let errorData = errorPipe.fileHandleForReading.readDataToEndOfFile() + let exitCode = Int(process.terminationStatus) + let data = LaunchData( + exitCode: exitCode, + standardOutData: outData, + standardErrorData: errorData + ) + terminationHandler(.success(data)) + } + do { + try process.run() + } catch { + terminationHandler(.failure(error)) + } + } + + /// runs the command with the arguments + /// - Parameters: + /// - url: file url with the absolute file path to the command + /// - arguments: optional array of arguments for the command + /// - terminationHandler: code block that is run when command is finished + static func launch( + _ url: URL, + arguments: [String] = [], + terminationHandler: @escaping (LaunchResult) -> Void + ) { + launch(path: url.path, arguments: arguments, terminationHandler: terminationHandler) + } + + /// runs the command with the arguments + /// - Parameters: + /// - path: absolute file path to the command + /// - arguments: optional array of arguments for the command + /// - Returns: LaunchResult struct with the data from the command + static func launch( + path: String, + arguments: [String] = [] + ) async -> (LaunchResult) { + await withCheckedContinuation { continuation in + launch(path: path, arguments: arguments) { result in + continuation.resume(returning: (result)) + } + } + } + + /// runs the command with the arguments + /// - Parameters: + /// - url: file url with the absolute file path to the command + /// - arguments: optional array of arguments for the command + /// - Returns: LaunchResult struct with the data from the command + static func launch( + _ url: URL, + arguments: [String] = [] + ) async -> (LaunchResult) { + return await launch(path: url.path, arguments: arguments) + } +} diff --git a/quickpkg/quickpkg.swift b/quickpkg/quickpkg.swift index fcc72ba..538c81d 100644 --- a/quickpkg/quickpkg.swift +++ b/quickpkg/quickpkg.swift @@ -9,7 +9,7 @@ import Foundation import ArgumentParser @main -struct QuickPkg: ParsableCommand { +struct QuickPkg: AsyncParsableCommand { static var configuration = CommandConfiguration( abstract: "Build installer packages from apps or archives.", usage: "quickpkg [options] ", @@ -148,8 +148,33 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is } } + mutating func createComponentPlist(app: AppMetadata) async -> URL { + let plist = tempDir.appending(component: "\(app.identifier).plist") + + let pkgbuildPath = "/usr/bin/pkgbuild" + let arguments: [String] = [ "--analyze", + "--root", payloadDir.path, + "--identifier", app.identifier, + "--version", app.version, + "--install-location", installLocation, + plist.path] + + log("Analyzing \(app.name)") + log("pkgbuild \(arguments.joined(separator: " "))", level: 2) + let result = await Process.launch(path: pkgbuildPath, arguments: arguments) + switch result { + case .success(let data): + if data.exitCode != 0 { + cleanupAndExit("An error occured while analyzing app.name: \(data.exitCode)", code: 6) + } + return plist + case .failure: + cleanupAndExit("couldn't launch pkgbuild!", code: 5) + } + } + // MARK: main - mutating func run() { + mutating func run() async { // remove trailing '/' if itemPath.hasSuffix("/") { itemPath = String(itemPath.dropLast()) @@ -180,6 +205,13 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is log("found app \(sourceAppURL.path)") + // get metadata from app + guard let appData = AppMetadata(url: sourceAppURL) else { + cleanupAndExit("Couldn't get App Metadata", code: 5) + } + + log("Name: \(appData.name), id: \(appData.identifier), version: \(appData.version), minOS: \(appData.minOSVersion)") + // copy or move app let destAppURL = payloadDir.appendingPathComponent(itemURL.lastPathComponent) do { @@ -188,9 +220,9 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is } catch { cleanupAndExit("could not create a copy of /(sourceAppURL)", code: 5) } - // get metadata from app // create the component plist + let componentPlist = await createComponentPlist(app: appData) // prepare pkgbuild command From f81bdacfb926ae7c9e9ca929d16503739b1d394c Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 9 Aug 2023 15:06:55 +0200 Subject: [PATCH 13/15] basic implementation of .app re-packaging --- quickpkg.xcodeproj/project.pbxproj | 23 ++++ .../UserInterfaceState.xcuserstate | Bin 34616 -> 35410 bytes .../xcshareddata/xcschemes/quickpkg.xcscheme | 22 +++- quickpkg/Constants.swift | 2 + quickpkg/Extensions.swift | 18 ++++ quickpkg/quickpkg.swift | 102 +++++++++++++++--- 6 files changed, 152 insertions(+), 15 deletions(-) diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj index c371166..e7c7125 100644 --- a/quickpkg.xcodeproj/project.pbxproj +++ b/quickpkg.xcodeproj/project.pbxproj @@ -83,6 +83,7 @@ isa = PBXNativeTarget; buildConfigurationList = C6A91AF72A824AAF00EB41D4 /* Build configuration list for PBXNativeTarget "quickpkg" */; buildPhases = ( + C66ED30B2A83C6AD00E2FE12 /* Swiftlint */, C6A91AEC2A824AAF00EB41D4 /* Sources */, C6A91AED2A824AAF00EB41D4 /* Frameworks */, C6A91AEE2A824AAF00EB41D4 /* CopyFiles */, @@ -136,6 +137,28 @@ }; /* End PBXProject section */ +/* Begin PBXShellScriptBuildPhase section */ + C66ED30B2A83C6AD00E2FE12 /* Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = Swiftlint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint > /dev/null; then\n swiftlint --fix && swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ C6A91AEC2A824AAF00EB41D4 /* Sources */ = { isa = PBXSourcesBuildPhase; diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 075b9a59444d4931702aea64fed08c40dd02b94d..34932976dbbfee762c128fcdfb96961cc20db68f 100644 GIT binary patch delta 17283 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 delta 16187 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 CMw~JL diff --git a/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme b/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme index a78f69b..2359fde 100644 --- a/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme +++ b/quickpkg.xcodeproj/xcshareddata/xcschemes/quickpkg.xcscheme @@ -56,19 +56,35 @@ isEnabled = "NO"> + + + + + + + + + isEnabled = "YES"> diff --git a/quickpkg/Constants.swift b/quickpkg/Constants.swift index 8d16c3b..183b5fb 100644 --- a/quickpkg/Constants.swift +++ b/quickpkg/Constants.swift @@ -10,4 +10,6 @@ import Foundation struct Constants { static let version = "2.0beta" static let supportedExtensions = ["dmg", "app", "zip", "xip"] + static let pkgbuild = "/usr/bin/pkgbuild" + static let productbuild = "/usr/bin/productbuild" } diff --git a/quickpkg/Extensions.swift b/quickpkg/Extensions.swift index 9895926..c943045 100644 --- a/quickpkg/Extensions.swift +++ b/quickpkg/Extensions.swift @@ -7,12 +7,30 @@ import Foundation +extension String { + var expandingTildeInPath: String { + NSString(string: self).expandingTildeInPath as String + } +} + extension URL { var basename: String { self.deletingPathExtension().lastPathComponent } } +extension FileManager { + var currentDirectoryURL: URL { + URL(filePath: self.currentDirectoryPath) + } + + func fileExistsAndIsDirectory(atPath path: String) -> Bool { + var isDir: ObjCBool = false + let fileExists = self.fileExists(atPath: path, isDirectory: &isDir) + return fileExists && isDir.boolValue + } +} + // from: https://www.swiftbysundell.com/articles/extending-optionals-in-swift/ extension Optional where Wrapped: Collection { var isNilOrEmpty: Bool { diff --git a/quickpkg/quickpkg.swift b/quickpkg/quickpkg.swift index 538c81d..c9dfc4e 100644 --- a/quickpkg/quickpkg.swift +++ b/quickpkg/quickpkg.swift @@ -74,7 +74,7 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is @Flag(inversion: .prefixedNo, help: ArgumentHelp("Clean up temp files.", visibility: .hidden)) var clean = true - @Flag(inversion: .prefixedNo, help: "Sets BundleIsRelocatable in the PackageInfo to true.") + @Flag(inversion: .prefixedNo, help: "Sets BundleIsRelocatable in the PackageInfo.") var relocatable = false @Flag(name: .shortAndLong, help: "Controls amount of logging output (max -vvv).") @@ -151,7 +151,6 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is mutating func createComponentPlist(app: AppMetadata) async -> URL { let plist = tempDir.appending(component: "\(app.identifier).plist") - let pkgbuildPath = "/usr/bin/pkgbuild" let arguments: [String] = [ "--analyze", "--root", payloadDir.path, "--identifier", app.identifier, @@ -161,18 +160,103 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is log("Analyzing \(app.name)") log("pkgbuild \(arguments.joined(separator: " "))", level: 2) - let result = await Process.launch(path: pkgbuildPath, arguments: arguments) + let result = await Process.launch(path: Constants.pkgbuild, arguments: arguments) switch result { case .success(let data): if data.exitCode != 0 { cleanupAndExit("An error occured while analyzing app.name: \(data.exitCode)", code: 6) } + + if !relocatable { + do { + let components = try NSMutableArray(contentsOf: plist, error: ()) + for anyComponent in components { + if let component = anyComponent as? NSMutableDictionary { + component.setValue(false, forKey: "BundleIsRelocatable") + } + } + try components.write(to: plist) + } catch { + cleanupAndExit("Error updating component plist!", code: 6) + } + } + return plist case .failure: cleanupAndExit("couldn't launch pkgbuild!", code: 5) } } + func outputURL(pkgName: String) -> URL { + // default behavior, create file relative to CWD + var outputURL: URL = URL(filePath: pkgName, relativeTo: FileManager.default.currentDirectoryURL) + // if output variable is set, generate based on that + if let output { + let expandedOutput = output.expandingTildeInPath + outputURL = URL(filePath: expandedOutput, relativeTo: FileManager.default.currentDirectoryURL) + + if FileManager.default.fileExistsAndIsDirectory(atPath: outputURL.path) { + outputURL.append(component: pkgName) + } + + if outputURL.pathExtension != "pkg" { + outputURL.appendPathExtension("pkg") + } + } + return outputURL + } + + mutating func buildPKG(app: AppMetadata) async -> URL { + // create the component plist + let componentPlist = await createComponentPlist(app: app) + + // prepare pkgbuild command + let pkgName = "\(app.name)-\(app.version).pkg".replacingOccurrences(of: " ", with: "") + // TODO: re-implement sustitution logic + + let outputURL = outputURL(pkgName: pkgName) + + var arguments = ["--root", payloadDir.path, + "--component-plist", componentPlist.path, + "--identifier", app.identifier, + "--version", app.version, + "--install-location", installLocation, + outputURL.path] + // prepare scripts folder + // TODO: parse scripts arguments and create folder + + // add signing options + if let sign = signOptions.sign { + arguments.append(contentsOf: ["--sign", sign]) + } + + if let keychain = signOptions.keychain { + arguments.append(contentsOf: ["--keychain", keychain]) + } + + if let cert = signOptions.cert { + arguments.append(contentsOf: ["--cert", cert]) + } + + // run pkgbuild command + log("Building \(pkgName)") + log("pkgbuild \(arguments.joined(separator: " "))", level: 2) + let result = await Process.launch(path: Constants.pkgbuild, arguments: arguments) + switch result { + case .success(let data): + if verbosity > 0 && !data.standardOutString.isNilOrEmpty { + print(data.standardOutString ?? "") + } + if data.exitCode != 0 { + cleanupAndExit("Error building pkg!", code: 7) + } + print("Wrote package to \(outputURL.path)") + return outputURL + case .failure: + cleanupAndExit("could not launch pkgbuild", code: 8) + } + } + // MARK: main mutating func run() async { // remove trailing '/' @@ -181,7 +265,7 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is } // expand homedir tilde - itemPath = NSString(string: itemPath).expandingTildeInPath + itemPath = itemPath.expandingTildeInPath if !Constants.supportedExtensions.contains(itemURL.pathExtension) { cleanupAndExit("\(itemURL.pathExtension) is not a supported file type!", code: 1) @@ -221,14 +305,8 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is cleanupAndExit("could not create a copy of /(sourceAppURL)", code: 5) } - // create the component plist - let componentPlist = await createComponentPlist(app: appData) - - // prepare pkgbuild command - - // prepare scripts folder - - // run pkgbuild command + // build pkg + let outputURL = await buildPKG(app: appData) // cleanup cleanupAndExit("Done!") From efec47a4fac0206ade8c28fc8e0e7181bdf8b0a3 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 9 Aug 2023 15:11:24 +0200 Subject: [PATCH 14/15] added swiftlint --- .swiftlint.yml | 45 ++++++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 35410 -> 35171 bytes quickpkg/quickpkg.swift | 8 ++-- 3 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 .swiftlint.yml diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..bba0976 --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,45 @@ +disabled_rules: # rule identifiers turned on by default to exclude from running + - todo + +#opt_in_rules: # some rules are turned off by default, so you need to opt-in +# - empty_count # Find all the available rules by running: `swiftlint rules` + +# Alternatively, specify all rules explicitly by uncommenting this option: +# only_rules: # delete `disabled_rules` & `opt_in_rules` if using this +# - empty_parameters +# - vertical_whitespace + +#analyzer_rules: # Rules run by `swiftlint analyze` +# - explicit_self + +# If true, SwiftLint will not fail if no lintable files are found. +allow_zero_lintable_files: false + +# configurable rules can be customized from this configuration file +# line_length: 120 +# they can set both implicitly with an array +# type_body_length: +# - 300 # warning +# - 400 # error +# or they can set both explicitly +#file_length: +# warning: 500 +# error: 1200 +# naming rules can set warnings/errors for min_length and max_length +# additionally they can set excluded names +type_name: + min_length: 3 # only warning + max_length: # warning and error + warning: 30 + error: 50 + excluded: iPhone # excluded via string + allowed_symbols: ["_"] # these are allowed in type names +identifier_name: + min_length: # only min_length + error: 3 # only error + excluded: # excluded via string array + - id + - URL + - x + - y +reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging, summary) \ No newline at end of file diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 34932976dbbfee762c128fcdfb96961cc20db68f..1e9ab8a4fcac23785662466452e90dbab83ea48b 100644 GIT binary patch delta 13584 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 yrroB!rURzKrctwe5{TeC>o^+#zkdVr`e Never { @@ -152,7 +152,7 @@ You can use '{name}', '{version}' and '{identifier}' as placeholders. If this is let plist = tempDir.appending(component: "\(app.identifier).plist") let arguments: [String] = [ "--analyze", - "--root", payloadDir.path, + "--root", payloadDir.path, "--identifier", app.identifier, "--version", app.version, "--install-location", installLocation, From 37410df1c2a98a25290e89c19d11f22bf3751222 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 18 Feb 2025 14:07:22 +0100 Subject: [PATCH 15/15] updated --- quickpkg.xcodeproj/project.pbxproj | 8 ++++++-- .../xcshareddata/swiftpm/Package.resolved | 7 ++++--- .../UserInterfaceState.xcuserstate | Bin 35171 -> 58478 bytes quickpkg/DMGHelper.swift | 18 ++++++++++++++++++ quickpkg/quickpkg.swift | 6 ++++-- 5 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 quickpkg/DMGHelper.swift diff --git a/quickpkg.xcodeproj/project.pbxproj b/quickpkg.xcodeproj/project.pbxproj index e7c7125..f93434d 100644 --- a/quickpkg.xcodeproj/project.pbxproj +++ b/quickpkg.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ C66ED2EB2A82AED300E2FE12 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EA2A82AED300E2FE12 /* Extensions.swift */; }; C66ED2ED2A83737F00E2FE12 /* AppMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EC2A83737F00E2FE12 /* AppMetadata.swift */; }; C66ED2EF2A837D8200E2FE12 /* Process-Launch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED2EE2A837D8200E2FE12 /* Process-Launch.swift */; }; + C66ED30D2A83CA4D00E2FE12 /* DMGHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66ED30C2A83CA4D00E2FE12 /* DMGHelper.swift */; }; C6A91AFC2A824B2600EB41D4 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C6A91AFB2A824B2600EB41D4 /* ArgumentParser */; }; C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */; }; C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A91AFF2A8266B100EB41D4 /* Constants.swift */; }; @@ -31,6 +32,7 @@ C66ED2EA2A82AED300E2FE12 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; C66ED2EC2A83737F00E2FE12 /* AppMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMetadata.swift; sourceTree = ""; }; C66ED2EE2A837D8200E2FE12 /* Process-Launch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Process-Launch.swift"; sourceTree = ""; }; + C66ED30C2A83CA4D00E2FE12 /* DMGHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMGHelper.swift; sourceTree = ""; }; C6A91AF02A824AAF00EB41D4 /* quickpkg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = quickpkg; sourceTree = BUILT_PRODUCTS_DIR; }; C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = quickpkg.swift; sourceTree = ""; }; C6A91AFF2A8266B100EB41D4 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -68,6 +70,7 @@ isa = PBXGroup; children = ( C6A91AFD2A824B9F00EB41D4 /* quickpkg.swift */, + C66ED30C2A83CA4D00E2FE12 /* DMGHelper.swift */, C66ED2EC2A83737F00E2FE12 /* AppMetadata.swift */, C6A91AFF2A8266B100EB41D4 /* Constants.swift */, C66ED2EA2A82AED300E2FE12 /* Extensions.swift */, @@ -166,6 +169,7 @@ files = ( C6A91AFE2A824B9F00EB41D4 /* quickpkg.swift in Sources */, C66ED2EF2A837D8200E2FE12 /* Process-Launch.swift in Sources */, + C66ED30D2A83CA4D00E2FE12 /* DMGHelper.swift in Sources */, C66ED2EB2A82AED300E2FE12 /* Extensions.swift in Sources */, C66ED2ED2A83737F00E2FE12 /* AppMetadata.swift in Sources */, C6A91B002A8266B100EB41D4 /* Constants.swift in Sources */, @@ -225,7 +229,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 13.3; + MACOSX_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -279,7 +283,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 13.3; + MACOSX_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index aa0f83b..d3fbce1 100644 --- a/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/quickpkg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,14 +1,15 @@ { + "originHash" : "59ba1edda695b389d6c9ac1809891cd779e4024f505b0ce1a9d5202b6762e38a", "pins" : [ { "identity" : "swift-argument-parser", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser.git", "state" : { - "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", - "version" : "1.2.0" + "revision" : "41982a3656a71c768319979febd796c6fd111d5c", + "version" : "1.5.0" } } ], - "version" : 2 + "version" : 3 } diff --git a/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate b/quickpkg.xcodeproj/project.xcworkspace/xcuserdata/armin.xcuserdatad/UserInterfaceState.xcuserstate index 1e9ab8a4fcac23785662466452e90dbab83ea48b..c1f00d25bd5c2265b03f9c14f12fc7b07f2dd74a 100644 GIT binary patch literal 58478 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 ZYy6^Smk|suvJ(F(Tp`2qH-cDX{D0jvA@TqK diff --git a/quickpkg/DMGHelper.swift b/quickpkg/DMGHelper.swift new file mode 100644 index 0000000..c5c0dee --- /dev/null +++ b/quickpkg/DMGHelper.swift @@ -0,0 +1,18 @@ +// +// DMGHelper.swift +// quickpkg +// +// Created by Armin Briegel on 2023-08-09. +// + +import Foundation + +class DMGHelper { + static var shared = DMGHelper() + + var volumes: [String] = [] + + func attach(_ url: URL) { + + } +} diff --git a/quickpkg/quickpkg.swift b/quickpkg/quickpkg.swift index 87921b2..f43dafe 100644 --- a/quickpkg/quickpkg.swift +++ b/quickpkg/quickpkg.swift @@ -212,7 +212,7 @@ If this is a directory, then the package will be created with the default filena // prepare pkgbuild command let pkgName = "\(app.name)-\(app.version).pkg".replacingOccurrences(of: " ", with: "") - // TODO: re-implement sustitution logic + // TODO: re-implement substitution logic let outputURL = outputURL(pkgName: pkgName) @@ -250,7 +250,6 @@ If this is a directory, then the package will be created with the default filena if data.exitCode != 0 { cleanupAndExit("Error building pkg!", code: 7) } - print("Wrote package to \(outputURL.path)") return outputURL case .failure: cleanupAndExit("could not launch pkgbuild", code: 8) @@ -279,6 +278,8 @@ If this is a directory, then the package will be created with the default filena switch itemURL.pathExtension { case "app": sourceAppURL = itemURL + case "dmg": + break default: cleanupAndExit("Re-packaging '\(itemURL.pathExtension)' is not implemented yet!", code: 99) } @@ -307,6 +308,7 @@ If this is a directory, then the package will be created with the default filena // build pkg let outputURL = await buildPKG(app: appData) + print("Wrote package to \(outputURL.path)") // cleanup cleanupAndExit("Done!")