diff --git a/.github/config.yml b/.github/config.yml deleted file mode 100644 index 74c84afc8..000000000 --- a/.github/config.yml +++ /dev/null @@ -1,2 +0,0 @@ -todo: - exclude: "^Carthage/" \ No newline at end of file diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index eba9663f2..c2b404050 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -17,16 +17,14 @@ jobs: # https://github.com/actions/checkout#usage - uses: actions/checkout@master with: + # Fetch tags for script/version + fetch-depth: 0 # https://docs.github.com/en/actions/reference/authentication-in-a-workflow token: ${{ secrets.GITHUB_TOKEN }} - name: Bootstrap run: script/bootstrap # https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsenv - env: - # Carthage looks for GITHUB_ACCESS_TOKEN - # https://github.com/Carthage/Carthage/blob/master/Source/CarthageKit/GitHub.swift#L118 - GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build run: script/build diff --git a/.gitignore b/.gitignore index 5621b3e6d..18eb50cab 100644 --- a/.gitignore +++ b/.gitignore @@ -22,9 +22,11 @@ .VolumeIcon.icns ._* .apdisk +.build/ .envrc .fseventsd .rubygems/ +.swiftpm/ Carthage/ DerivedData Pods/ @@ -34,3 +36,4 @@ build/ default.profraw releases/ xcuserdata +Sources/MasKit/Package.swift diff --git a/.hound.yml b/.hound.yml index 88e27f479..79acba67b 100644 --- a/.hound.yml +++ b/.hound.yml @@ -15,3 +15,6 @@ rubocop: shellcheck: enabled: true + +swiftlint: + enabled: false diff --git a/Brewfile b/Brewfile index 61f7eebc2..0afd05fc2 100644 --- a/Brewfile +++ b/Brewfile @@ -1,5 +1,3 @@ -brew "carthage" -brew "make" brew "shfmt" brew "swift-format" brew "swiftformat" diff --git a/Brewfile.lock.json b/Brewfile.lock.json index 796e61a09..8d0927dc3 100644 --- a/Brewfile.lock.json +++ b/Brewfile.lock.json @@ -1,69 +1,6 @@ { "entries": { "brew": { - "carthage": { - "version": "0.37.0", - "bottle": { - "rebuild": 0, - "root_url": "https://ghcr.io/v2/homebrew/core", - "files": { - "arm64_big_sur": { - "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/carthage/blobs/sha256:cd0c716682b5b094b82a589fb79def4eb696f70a3fd92423923a5cb86c2c79b3", - "sha256": "cd0c716682b5b094b82a589fb79def4eb696f70a3fd92423923a5cb86c2c79b3" - }, - "big_sur": { - "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/carthage/blobs/sha256:0770b4dd885f3018031c2d27fc090a34027d5856a248f33fa2a415d58da74632", - "sha256": "0770b4dd885f3018031c2d27fc090a34027d5856a248f33fa2a415d58da74632" - }, - "catalina": { - "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/carthage/blobs/sha256:8a07c198835cb179d4054313b199ce126e64bb9414eaaa91f55162a4aed63134", - "sha256": "8a07c198835cb179d4054313b199ce126e64bb9414eaaa91f55162a4aed63134" - }, - "mojave": { - "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/carthage/blobs/sha256:7fb777ac169aa4cb05683f0f8bfb5b56dbb0b0e8b673df995ef2fb2bbe0d90d2", - "sha256": "7fb777ac169aa4cb05683f0f8bfb5b56dbb0b0e8b673df995ef2fb2bbe0d90d2" - } - } - } - }, - "make": { - "version": "4.3", - "bottle": { - "rebuild": 1, - "root_url": "https://ghcr.io/v2/homebrew/core", - "files": { - "arm64_big_sur": { - "cellar": "/opt/homebrew/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:eab3fbc3688aecec0fe90b8d0fe3cb7beb84ed773ba0411fc2f855c66deaf882", - "sha256": "eab3fbc3688aecec0fe90b8d0fe3cb7beb84ed773ba0411fc2f855c66deaf882" - }, - "big_sur": { - "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:2019ba646e4471d42e09c28a0992c59dd82e292bf8275b0b3bfcce3220ef9c1b", - "sha256": "2019ba646e4471d42e09c28a0992c59dd82e292bf8275b0b3bfcce3220ef9c1b" - }, - "catalina": { - "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:39fc5ebff5ff708c2e3eea597b9f2eb79b910a122d30c3ac9bb93ebe313f030c", - "sha256": "39fc5ebff5ff708c2e3eea597b9f2eb79b910a122d30c3ac9bb93ebe313f030c" - }, - "mojave": { - "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:0c0a08eef68bcd78b0345f5f57a6efffcc7be877bcb3b803f39ac8916b882477", - "sha256": "0c0a08eef68bcd78b0345f5f57a6efffcc7be877bcb3b803f39ac8916b882477" - }, - "high_sierra": { - "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:429177235322c3209e1657bea36364cd84222075b636939f6ed93a1cd04aeb21", - "sha256": "429177235322c3209e1657bea36364cd84222075b636939f6ed93a1cd04aeb21" - } - } - } - }, "shfmt": { "version": "3.2.4", "bottle": { diff --git a/Cartfile b/Cartfile deleted file mode 100644 index 2e93317c2..000000000 --- a/Cartfile +++ /dev/null @@ -1 +0,0 @@ -github "Carthage/Commandant" diff --git a/Cartfile.private b/Cartfile.private deleted file mode 100644 index e95f845e7..000000000 --- a/Cartfile.private +++ /dev/null @@ -1,2 +0,0 @@ -github "Quick/Quick" -github "Quick/Nimble" \ No newline at end of file diff --git a/Cartfile.resolved b/Cartfile.resolved deleted file mode 100644 index c2e80d1ed..000000000 --- a/Cartfile.resolved +++ /dev/null @@ -1,3 +0,0 @@ -github "Carthage/Commandant" "0.18.0" -github "Quick/Nimble" "v9.0.1" -github "Quick/Quick" "v3.1.2" diff --git a/Dangerfile b/Dangerfile index bcc98a36f..274fc0196 100644 --- a/Dangerfile +++ b/Dangerfile @@ -8,14 +8,12 @@ # Sometimes it's a README fix, or something like that - which isn't relevant for # including in a project's CHANGELOG for example -has_app_changes = !git.modified_files.grep(/MasKit/).empty? -has_test_changes = !git.modified_files.grep(/MasKitTests/).empty? +has_app_changes = !git.modified_files.grep(/Sources/).empty? +has_test_changes = !git.modified_files.grep(/Tests/).empty? is_version_bump = git.modified_files.sort == [ - "mas/mas-Info.plist", - "mas-cli.xcodeproj/project.pbxproj", - "MasKit/SupportingFiles/Info.plist", - "MasKitTests/SupportingFiles/Info.plist" + "Package.swift", + "MasKit/SupportingFiles/Package.swift" ].sort message(":bookmark: Version bump!") if is_version_bump diff --git a/Gemfile.lock b/Gemfile.lock index 6c8e2b4b9..69e84f571 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,13 +24,17 @@ GEM no_proxy_fix octokit (~> 4.7) terminal-table (>= 1, < 4) - faraday (1.3.0) + faraday (1.4.1) + faraday-excon (~> 1.1) faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.1) multipart-post (>= 1.2, < 3) - ruby2_keywords + ruby2_keywords (>= 0.0.4) + faraday-excon (1.1.0) faraday-http-cache (2.2.0) faraday (>= 0.8) faraday-net_http (1.0.1) + faraday-net_http_persistent (1.1.0) git (1.8.1) rchardet (~> 1.8) kramdown (2.3.1) @@ -40,13 +44,13 @@ GEM multipart-post (2.1.1) nap (1.1.0) no_proxy_fix (0.1.2) - octokit (4.20.0) + octokit (4.21.0) faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) open4 (1.3.4) public_suffix (4.0.6) rchardet (1.8.0) - rexml (3.2.4) + rexml (3.2.5) rouge (2.0.7) ruby2_keywords (0.0.4) sawyer (0.8.2) diff --git a/Homebrew/mas-tap.rb b/Homebrew/mas-tap.rb index 68bd669c4..6678ee52d 100644 --- a/Homebrew/mas-tap.rb +++ b/Homebrew/mas-tap.rb @@ -18,27 +18,14 @@ class Mas < Formula sha256 cellar: :any, el_capitan: "d54d864976f78665d5175fd9e69ab81b3911fa28fd6ae627b61a18d55d68191a" end - depends_on "carthage" => :build depends_on :macos if Hardware::CPU.arm? depends_on xcode: ["12.2", :build] else - depends_on xcode: ["11.4", :build] + depends_on xcode: ["12.0", :build] end def install - # Working around build issues in dependencies - # - Prevent warnings from causing build failures - # - Prevent linker errors by telling all lib builds to use max size install names - xcconfig = buildpath/"Overrides.xcconfig" - xcconfig.write <<~EOS - GCC_TREAT_WARNINGS_AS_ERRORS = NO - OTHER_LDFLAGS = -headerpad_max_install_names - EOS - ENV["XCODE_XCCONFIG_FILE"] = xcconfig - - # Only build necessary dependencies - system "carthage", "bootstrap", "--platform", "macOS", "Commandant" system "script/install", prefix bash_completion.install "contrib/completion/mas-completion.bash" => "mas" diff --git a/Homebrew/mas.rb b/Homebrew/mas.rb index 232ad873b..1aba3a839 100644 --- a/Homebrew/mas.rb +++ b/Homebrew/mas.rb @@ -13,27 +13,14 @@ class Mas < Formula sha256 cellar: :any, catalina: "2e7ffedf674543f98c2b95868b6a23db208cb2e6a3ec1ddbb3553ddab0cf9a68" end - depends_on "carthage" => :build depends_on :macos if Hardware::CPU.arm? depends_on xcode: ["12.2", :build] else - depends_on xcode: ["11.4", :build] + depends_on xcode: ["12.0", :build] end def install - # Working around build issues in dependencies - # - Prevent warnings from causing build failures - # - Prevent linker errors by telling all lib builds to use max size install names - xcconfig = buildpath/"Overrides.xcconfig" - xcconfig.write <<~EOS - GCC_TREAT_WARNINGS_AS_ERRORS = NO - OTHER_LDFLAGS = -headerpad_max_install_names - EOS - ENV["XCODE_XCCONFIG_FILE"] = xcconfig - - # Only build necessary dependencies - system "carthage", "bootstrap", "--platform", "macOS", "Commandant" system "script/install", prefix bash_completion.install "contrib/completion/mas-completion.bash" => "mas" diff --git a/MasKit/SupportingFiles/Info.plist b/MasKit/SupportingFiles/Info.plist deleted file mode 100644 index f78d04b9d..000000000 --- a/MasKit/SupportingFiles/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright Š 2018 Andrew Naylor. All rights reserved. - - diff --git a/MasKit/SupportingFiles/MasKit.h b/MasKit/SupportingFiles/MasKit.h deleted file mode 100644 index 154841cfc..000000000 --- a/MasKit/SupportingFiles/MasKit.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MasKit.h -// MasKit -// -// Created by Ben Chatelain on 7/8/18. -// Copyright Š 2018 Andrew Naylor. All rights reserved. -// - -@import Foundation; - -//! Project version number for MasKit. -FOUNDATION_EXPORT double MasKitVersionNumber; - -//! Project version string for MasKit. -FOUNDATION_EXPORT const unsigned char MasKitVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import diff --git a/MasKitTests/OutputListener.swift b/MasKitTests/OutputListener.swift deleted file mode 100644 index 7f4b8c894..000000000 --- a/MasKitTests/OutputListener.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// OutputListener.swift -// MasKitTests -// -// Created by Ben Chatelain on 1/7/19. -// Copyright Š 2019 mas-cli. All rights reserved. -// - -import Foundation - -/// Test helper for monitoring strings written to stdout. Modified from: -/// https://medium.com/@thesaadismail/eavesdropping-on-swifts-print-statements-57f0215efb42 -class OutputListener { - /// consumes the messages on STDOUT - let inputPipe = Pipe() - - /// outputs messages back to STDOUT - let outputPipe = Pipe() - - /// Buffers strings written to stdout - var contents = "" - - init() { - // Set up a read handler which fires when data is written to our inputPipe - inputPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in - strongify(self) { context in - let data = fileHandle.availableData - if let string = String(data: data, encoding: String.Encoding.utf8) { - context.contents += string - } - - // Write input back to stdout - context.outputPipe.fileHandleForWriting.write(data) - } - } - } -} - -extension OutputListener { - /// Sets up the "tee" of piped output, intercepting stdout then passing it through. - /// - /// ## [dup2 documentation](https://linux.die.net/man/2/dup2) - /// `int dup2(int oldfd, int newfd);` - /// `dup2()` makes `newfd` be the copy of `oldfd`, closing `newfd` first if necessary. - func openConsolePipe() { - var dupStatus: Int32 - - // Copy STDOUT file descriptor to outputPipe for writing strings back to STDOUT - dupStatus = dup2(stdoutFileDescriptor, outputPipe.fileHandleForWriting.fileDescriptor) - // Status should equal newfd - assert(dupStatus == outputPipe.fileHandleForWriting.fileDescriptor) - - // Intercept STDOUT with inputPipe - // newFileDescriptor is the pipe's file descriptor and the old file descriptor is STDOUT_FILENO - dupStatus = dup2(inputPipe.fileHandleForWriting.fileDescriptor, stdoutFileDescriptor) - // Status should equal newfd - assert(dupStatus == stdoutFileDescriptor) - - // Don't have any tests on stderr yet - // dup2(inputPipe.fileHandleForWriting.fileDescriptor, stderr) - } - - /// Tears down the "tee" of piped output. - func closeConsolePipe() { - // Restore stdout - freopen("/dev/stdout", "a", stdout) - - [inputPipe.fileHandleForReading, outputPipe.fileHandleForWriting] - .forEach { file in - file.closeFile() - } - } -} - -extension OutputListener { - /// File descriptor for stdout (aka STDOUT_FILENO) - var stdoutFileDescriptor: Int32 { - FileHandle.standardOutput.fileDescriptor - } - - /// File descriptor for stderr (aka STDERR_FILENO) - var stderrFileDescriptor: Int32 { - FileHandle.standardError.fileDescriptor - } -} diff --git a/MasKitTests/SupportingFiles/Info.plist b/MasKitTests/SupportingFiles/Info.plist deleted file mode 100644 index 26b175dc1..000000000 --- a/MasKitTests/SupportingFiles/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 000000000..e66dde2e5 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,61 @@ +{ + "object": { + "pins": [ + { + "package": "Commandant", + "repositoryURL": "https://github.com/Carthage/Commandant.git", + "state": { + "branch": null, + "revision": "a1671cf728db837cf5ec1980a80d276bbba748f6", + "version": "0.18.0" + } + }, + { + "package": "CwlCatchException", + "repositoryURL": "https://github.com/mattgallagher/CwlCatchException.git", + "state": { + "branch": null, + "revision": "f809deb30dc5c9d9b78c872e553261a61177721a", + "version": "2.0.0" + } + }, + { + "package": "CwlPreconditionTesting", + "repositoryURL": "https://github.com/mattgallagher/CwlPreconditionTesting.git", + "state": { + "branch": null, + "revision": "02b7a39a99c4da27abe03cab2053a9034379639f", + "version": "2.0.0" + } + }, + { + "package": "Nimble", + "repositoryURL": "https://github.com/Quick/Nimble.git", + "state": { + "branch": null, + "revision": "7a54aaf19a8ef16f67787c260fda81ead7ba4d67", + "version": "9.0.1" + } + }, + { + "package": "Quick", + "repositoryURL": "https://github.com/Quick/Quick.git", + "state": { + "branch": null, + "revision": "8cce6acd38f965f5baa3167b939f86500314022b", + "version": "3.1.2" + } + }, + { + "package": "Version", + "repositoryURL": "https://github.com/mxcl/Version.git", + "state": { + "branch": null, + "revision": "a94b48f36763c05629fc102837398505032dead9", + "version": "2.0.0" + } + } + ] + }, + "version": 1 +} diff --git a/Package.swift b/Package.swift new file mode 100644 index 000000000..b2769ff6f --- /dev/null +++ b/Package.swift @@ -0,0 +1,70 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "mas", + platforms: [ + .macOS(.v10_11), + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .executable( + name: "mas", + targets: ["mas"] + ), + .library( + name: "MasKit", + targets: ["MasKit"] + ), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Carthage/Commandant.git", from: "0.18.0"), + .package(url: "https://github.com/Quick/Nimble.git", from: "9.0.1"), + .package(url: "https://github.com/Quick/Quick.git", from: "3.1.2"), + .package(url: "https://github.com/mxcl/Version.git", from: "2.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "mas", + dependencies: ["MasKit"], + swiftSettings: [ + .unsafeFlags([ + "-I", "Sources/PrivateFrameworks/CommerceKit", + "-I", "Sources/PrivateFrameworks/StoreFoundation", + ]), + ] + ), + .target( + name: "MasKit", + dependencies: ["Commandant", "Version"], + swiftSettings: [ + .unsafeFlags([ + "-I", "Sources/PrivateFrameworks/CommerceKit", + "-I", "Sources/PrivateFrameworks/StoreFoundation", + ]), + ], + linkerSettings: [ + .linkedFramework("CommerceKit"), + .linkedFramework("StoreFoundation"), + .unsafeFlags(["-F", "/System/Library/PrivateFrameworks"]), + ] + ), + .testTarget( + name: "MasKitTests", + dependencies: ["MasKit", "Nimble", "Quick"], + resources: [.copy("JSON")], + swiftSettings: [ + .unsafeFlags([ + "-I", "Sources/PrivateFrameworks/CommerceKit", + "-I", "Sources/PrivateFrameworks/StoreFoundation", + ]), + ] + ), + ], + swiftLanguageVersions: [.v5] +) diff --git a/Package/Components.plist b/Package/Components.plist deleted file mode 100644 index e331ddae1..000000000 --- a/Package/Components.plist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - BundleIsVersionChecked - - BundleOverwriteAction - upgrade - ChildBundles - - - BundleOverwriteAction - - RootRelativeBundlePath - Frameworks/MasKit.framework/Versions/A/Frameworks/Commandant.framework - - - RootRelativeBundlePath - Frameworks/MasKit.framework - - - diff --git a/Package/Distribution.plist b/Package/Distribution.plist index fe00d1134..09ab7ebd7 100644 --- a/Package/Distribution.plist +++ b/Package/Distribution.plist @@ -5,7 +5,7 @@ - + diff --git a/README.md b/README.md index 3badbd95e..85eedb3e9 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ A simple command line interface for the Mac App Store. Designed for scripting an [![Swift 5](https://img.shields.io/badge/Language-Swift_5-orange.svg)](https://swift.org) [![GitHub Release](https://img.shields.io/github/release/mas-cli/mas.svg)](https://github.com/mas-cli/mas/releases) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) -[![Pipeline Status](https://jenkins.log-g.co/buildStatus/icon?job=mas-cli/mas/master)](https://jenkins.log-g.co/job/mas-cli/job/mas/job/master/) +[![Build & Test](https://github.com/mas-cli/mas/actions/workflows/build-test.yml/badge.svg?branch=master)](https://github.com/mas-cli/mas/actions/workflows/build-test.yml?query=branch%3Amaster) ## 📲 Install @@ -205,7 +205,7 @@ reattach-to-user-namespace mas install ## ℹī¸ Build from source -You can now build from Xcode by opening `mas-cli.xcodeproj`, or from the Terminal: +You can build from Xcode by opening the root `mas` directory, or from the Terminal: ```bash script/build diff --git a/MasKit/AppStore/CKSoftwareMap+SoftwareMap.swift b/Sources/MasKit/AppStore/CKSoftwareMap+SoftwareMap.swift similarity index 100% rename from MasKit/AppStore/CKSoftwareMap+SoftwareMap.swift rename to Sources/MasKit/AppStore/CKSoftwareMap+SoftwareMap.swift diff --git a/MasKit/AppStore/CKSoftwareProduct+SoftwareProduct.swift b/Sources/MasKit/AppStore/CKSoftwareProduct+SoftwareProduct.swift similarity index 100% rename from MasKit/AppStore/CKSoftwareProduct+SoftwareProduct.swift rename to Sources/MasKit/AppStore/CKSoftwareProduct+SoftwareProduct.swift diff --git a/MasKit/AppStore/Downloader.swift b/Sources/MasKit/AppStore/Downloader.swift similarity index 100% rename from MasKit/AppStore/Downloader.swift rename to Sources/MasKit/AppStore/Downloader.swift diff --git a/MasKit/AppStore/ISStoreAccount.swift b/Sources/MasKit/AppStore/ISStoreAccount.swift similarity index 100% rename from MasKit/AppStore/ISStoreAccount.swift rename to Sources/MasKit/AppStore/ISStoreAccount.swift diff --git a/MasKit/AppStore/PurchaseDownloadObserver.swift b/Sources/MasKit/AppStore/PurchaseDownloadObserver.swift similarity index 100% rename from MasKit/AppStore/PurchaseDownloadObserver.swift rename to Sources/MasKit/AppStore/PurchaseDownloadObserver.swift diff --git a/MasKit/AppStore/SSPurchase.swift b/Sources/MasKit/AppStore/SSPurchase.swift similarity index 100% rename from MasKit/AppStore/SSPurchase.swift rename to Sources/MasKit/AppStore/SSPurchase.swift diff --git a/MasKit/AppStore/StoreAccount.swift b/Sources/MasKit/AppStore/StoreAccount.swift similarity index 100% rename from MasKit/AppStore/StoreAccount.swift rename to Sources/MasKit/AppStore/StoreAccount.swift diff --git a/MasKit/Commands/Account.swift b/Sources/MasKit/Commands/Account.swift similarity index 100% rename from MasKit/Commands/Account.swift rename to Sources/MasKit/Commands/Account.swift diff --git a/MasKit/Commands/Home.swift b/Sources/MasKit/Commands/Home.swift similarity index 100% rename from MasKit/Commands/Home.swift rename to Sources/MasKit/Commands/Home.swift diff --git a/MasKit/Commands/Info.swift b/Sources/MasKit/Commands/Info.swift similarity index 100% rename from MasKit/Commands/Info.swift rename to Sources/MasKit/Commands/Info.swift diff --git a/MasKit/Commands/Install.swift b/Sources/MasKit/Commands/Install.swift similarity index 100% rename from MasKit/Commands/Install.swift rename to Sources/MasKit/Commands/Install.swift diff --git a/MasKit/Commands/List.swift b/Sources/MasKit/Commands/List.swift similarity index 100% rename from MasKit/Commands/List.swift rename to Sources/MasKit/Commands/List.swift diff --git a/MasKit/Commands/Lucky.swift b/Sources/MasKit/Commands/Lucky.swift similarity index 100% rename from MasKit/Commands/Lucky.swift rename to Sources/MasKit/Commands/Lucky.swift diff --git a/MasKit/Commands/Open.swift b/Sources/MasKit/Commands/Open.swift similarity index 99% rename from MasKit/Commands/Open.swift rename to Sources/MasKit/Commands/Open.swift index 732c1448a..8394ac3a9 100644 --- a/MasKit/Commands/Open.swift +++ b/Sources/MasKit/Commands/Open.swift @@ -7,6 +7,7 @@ // import Commandant +import Foundation private let markerValue = "appstore" private let masScheme = "macappstore" diff --git a/MasKit/Commands/Outdated.swift b/Sources/MasKit/Commands/Outdated.swift similarity index 99% rename from MasKit/Commands/Outdated.swift rename to Sources/MasKit/Commands/Outdated.swift index dbba1e7cb..e8f5f0053 100644 --- a/MasKit/Commands/Outdated.swift +++ b/Sources/MasKit/Commands/Outdated.swift @@ -7,6 +7,7 @@ // import Commandant +import Foundation /// Command which displays a list of installed apps which have available updates /// ready to be installed from the Mac App Store. diff --git a/MasKit/Commands/Purchase.swift b/Sources/MasKit/Commands/Purchase.swift similarity index 100% rename from MasKit/Commands/Purchase.swift rename to Sources/MasKit/Commands/Purchase.swift diff --git a/MasKit/Commands/Reset.swift b/Sources/MasKit/Commands/Reset.swift similarity index 100% rename from MasKit/Commands/Reset.swift rename to Sources/MasKit/Commands/Reset.swift diff --git a/MasKit/Commands/Search.swift b/Sources/MasKit/Commands/Search.swift similarity index 100% rename from MasKit/Commands/Search.swift rename to Sources/MasKit/Commands/Search.swift diff --git a/MasKit/Commands/SignIn.swift b/Sources/MasKit/Commands/SignIn.swift similarity index 96% rename from MasKit/Commands/SignIn.swift rename to Sources/MasKit/Commands/SignIn.swift index bb595f4b4..77fc12810 100644 --- a/MasKit/Commands/SignIn.swift +++ b/Sources/MasKit/Commands/SignIn.swift @@ -31,7 +31,7 @@ public struct SignInCommand: CommandProtocol { printInfo("Signing in to Apple ID: \(options.username)") let password: String = { - if options.password == "", !options.dialog { + if options.password.isEmpty, !options.dialog { return String(validatingUTF8: getpass("Password: "))! } return options.password diff --git a/MasKit/Commands/SignOut.swift b/Sources/MasKit/Commands/SignOut.swift similarity index 100% rename from MasKit/Commands/SignOut.swift rename to Sources/MasKit/Commands/SignOut.swift diff --git a/MasKit/Commands/Uninstall.swift b/Sources/MasKit/Commands/Uninstall.swift similarity index 100% rename from MasKit/Commands/Uninstall.swift rename to Sources/MasKit/Commands/Uninstall.swift diff --git a/MasKit/Commands/Upgrade.swift b/Sources/MasKit/Commands/Upgrade.swift similarity index 99% rename from MasKit/Commands/Upgrade.swift rename to Sources/MasKit/Commands/Upgrade.swift index baf09c259..b243d8e32 100644 --- a/MasKit/Commands/Upgrade.swift +++ b/Sources/MasKit/Commands/Upgrade.swift @@ -7,6 +7,7 @@ // import Commandant +import Foundation /// Command which upgrades apps with new versions available in the Mac App Store. public struct UpgradeCommand: CommandProtocol { diff --git a/MasKit/Commands/Vendor.swift b/Sources/MasKit/Commands/Vendor.swift similarity index 100% rename from MasKit/Commands/Vendor.swift rename to Sources/MasKit/Commands/Vendor.swift diff --git a/MasKit/Commands/Version.swift b/Sources/MasKit/Commands/Version.swift similarity index 77% rename from MasKit/Commands/Version.swift rename to Sources/MasKit/Commands/Version.swift index bdf3c608e..8feaf482d 100644 --- a/MasKit/Commands/Version.swift +++ b/Sources/MasKit/Commands/Version.swift @@ -18,10 +18,7 @@ public struct VersionCommand: CommandProtocol { /// Runs the command. public func run(_: Options) -> Result { - let plist = Bundle.main.infoDictionary - if let versionString = plist?["CFBundleShortVersionString"] { - print(versionString) - } + print(Package.Version) return .success(()) } } diff --git a/MasKit/Controllers/AppLibrary.swift b/Sources/MasKit/Controllers/AppLibrary.swift similarity index 75% rename from MasKit/Controllers/AppLibrary.swift rename to Sources/MasKit/Controllers/AppLibrary.swift index c02bf40d4..ac5ade453 100644 --- a/MasKit/Controllers/AppLibrary.swift +++ b/Sources/MasKit/Controllers/AppLibrary.swift @@ -19,18 +19,6 @@ protocol AppLibrary { /// - Returns: Software Product of app if found; nil otherwise. func installedApp(forId: UInt64) -> SoftwareProduct? - /// Finds an app by it's bundle identifier. - /// - /// - Parameter forBundleId: Bundle identifier of app. - /// - Returns: Software Product of app if found; nil otherwise. - func installedApp(forBundleId: String) -> SoftwareProduct? - - /// Finds an app by name. - /// - /// - Parameter named: Name of app. - /// - Returns: Software Product of app if found; nil otherwise. - func installedApp(named: String) -> SoftwareProduct? - /// Uninstalls an app. /// /// - Parameter app: App to be removed. diff --git a/MasKit/Controllers/MasAppLibrary.swift b/Sources/MasKit/Controllers/MasAppLibrary.swift similarity index 100% rename from MasKit/Controllers/MasAppLibrary.swift rename to Sources/MasKit/Controllers/MasAppLibrary.swift diff --git a/MasKit/Controllers/MasStoreSearch.swift b/Sources/MasKit/Controllers/MasStoreSearch.swift similarity index 100% rename from MasKit/Controllers/MasStoreSearch.swift rename to Sources/MasKit/Controllers/MasStoreSearch.swift diff --git a/MasKit/Controllers/SoftwareMap.swift b/Sources/MasKit/Controllers/SoftwareMap.swift similarity index 100% rename from MasKit/Controllers/SoftwareMap.swift rename to Sources/MasKit/Controllers/SoftwareMap.swift diff --git a/MasKit/Controllers/StoreSearch.swift b/Sources/MasKit/Controllers/StoreSearch.swift similarity index 100% rename from MasKit/Controllers/StoreSearch.swift rename to Sources/MasKit/Controllers/StoreSearch.swift diff --git a/MasKit/Errors/MASError.swift b/Sources/MasKit/Errors/MASError.swift similarity index 100% rename from MasKit/Errors/MASError.swift rename to Sources/MasKit/Errors/MASError.swift diff --git a/MasKit/Extensions/String+PercentEncoding.swift b/Sources/MasKit/Extensions/String+PercentEncoding.swift similarity index 100% rename from MasKit/Extensions/String+PercentEncoding.swift rename to Sources/MasKit/Extensions/String+PercentEncoding.swift diff --git a/MasKit/ExternalCommands/ExternalCommand.swift b/Sources/MasKit/ExternalCommands/ExternalCommand.swift similarity index 100% rename from MasKit/ExternalCommands/ExternalCommand.swift rename to Sources/MasKit/ExternalCommands/ExternalCommand.swift diff --git a/MasKit/ExternalCommands/OpenSystemCommand.swift b/Sources/MasKit/ExternalCommands/OpenSystemCommand.swift similarity index 100% rename from MasKit/ExternalCommands/OpenSystemCommand.swift rename to Sources/MasKit/ExternalCommands/OpenSystemCommand.swift diff --git a/MasKit/Formatters/AppInfoFormatter.swift b/Sources/MasKit/Formatters/AppInfoFormatter.swift similarity index 100% rename from MasKit/Formatters/AppInfoFormatter.swift rename to Sources/MasKit/Formatters/AppInfoFormatter.swift diff --git a/MasKit/Formatters/AppListFormatter.swift b/Sources/MasKit/Formatters/AppListFormatter.swift similarity index 76% rename from MasKit/Formatters/AppListFormatter.swift rename to Sources/MasKit/Formatters/AppListFormatter.swift index b1e06ce01..778ae40b1 100644 --- a/MasKit/Formatters/AppListFormatter.swift +++ b/Sources/MasKit/Formatters/AppListFormatter.swift @@ -19,18 +19,14 @@ struct AppListFormatter { /// - Returns: Multiliune text outoutp. static func format(products: [SoftwareProduct]) -> String { // find longest appName for formatting, default 50 - let maxLength = - products.map(\.appNameOrBbundleIdentifier) - .max(by: { $1.count > $0.count })? - .count - ?? nameColumnMinWidth + let maxLength = products.map(\.appNameOrBundleIdentifier.count).max() ?? nameColumnMinWidth var output: String = "" for product in products { let appId = product.itemIdentifier.stringValue .padding(toLength: idColumnMinWidth, withPad: " ", startingAt: 0) - let appName = product.appNameOrBbundleIdentifier.padding(toLength: maxLength, withPad: " ", startingAt: 0) + let appName = product.appNameOrBundleIdentifier.padding(toLength: maxLength, withPad: " ", startingAt: 0) let version = product.bundleVersion output += "\(appId) \(appName) (\(version))\n" diff --git a/MasKit/Formatters/SearchResultFormatter.swift b/Sources/MasKit/Formatters/SearchResultFormatter.swift similarity index 100% rename from MasKit/Formatters/SearchResultFormatter.swift rename to Sources/MasKit/Formatters/SearchResultFormatter.swift diff --git a/MasKit/Formatters/Utilities.swift b/Sources/MasKit/Formatters/Utilities.swift similarity index 73% rename from MasKit/Formatters/Utilities.swift rename to Sources/MasKit/Formatters/Utilities.swift index 97ef68a74..60d88eda0 100644 --- a/MasKit/Formatters/Utilities.swift +++ b/Sources/MasKit/Formatters/Utilities.swift @@ -13,6 +13,23 @@ import Foundation /// Terminal Control Sequence Indicator let csi = "\u{001B}[" +var printObserver: ((String) -> Void)? + +// Override global print for testability. +// See MasKitTests/OutputListener.swift. +func print(_ items: Any..., separator: String = " ", terminator: String = "\n") { + let output = items + .map { "\($0)" } + .joined(separator: separator) + .appending(terminator) + + if let observer = printObserver { + observer(output) + } + + Swift.print(output) +} + func printInfo(_ message: String) { guard isatty(fileno(stdout)) != 0 else { print("==> \(message)") diff --git a/MasKit/Models/SearchResult.swift b/Sources/MasKit/Models/SearchResult.swift similarity index 100% rename from MasKit/Models/SearchResult.swift rename to Sources/MasKit/Models/SearchResult.swift diff --git a/MasKit/Models/SearchResultList.swift b/Sources/MasKit/Models/SearchResultList.swift similarity index 100% rename from MasKit/Models/SearchResultList.swift rename to Sources/MasKit/Models/SearchResultList.swift diff --git a/MasKit/Models/SoftwareProduct.swift b/Sources/MasKit/Models/SoftwareProduct.swift similarity index 94% rename from MasKit/Models/SoftwareProduct.swift rename to Sources/MasKit/Models/SoftwareProduct.swift index de232d3a3..6c5d129ba 100644 --- a/MasKit/Models/SoftwareProduct.swift +++ b/Sources/MasKit/Models/SoftwareProduct.swift @@ -29,8 +29,8 @@ extension SoftwareProduct { } /// Returns bundleIdentifier if appName is empty string. - var appNameOrBbundleIdentifier: String { - appName == "" ? bundleIdentifier : appName + var appNameOrBundleIdentifier: String { + appName.isEmpty ? bundleIdentifier : appName } func isOutdatedWhenComparedTo(_ storeApp: SearchResult) -> Bool { diff --git a/MasKit/Network/NetworkManager.swift b/Sources/MasKit/Network/NetworkManager.swift similarity index 100% rename from MasKit/Network/NetworkManager.swift rename to Sources/MasKit/Network/NetworkManager.swift diff --git a/MasKit/Network/NetworkSession.swift b/Sources/MasKit/Network/NetworkSession.swift similarity index 100% rename from MasKit/Network/NetworkSession.swift rename to Sources/MasKit/Network/NetworkSession.swift diff --git a/MasKit/Network/URLSession+NetworkSession.swift b/Sources/MasKit/Network/URLSession+NetworkSession.swift similarity index 100% rename from MasKit/Network/URLSession+NetworkSession.swift rename to Sources/MasKit/Network/URLSession+NetworkSession.swift diff --git a/PrivateFrameworks/CommerceKit/CKAccountStore.h b/Sources/PrivateFrameworks/CommerceKit/CKAccountStore.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKAccountStore.h rename to Sources/PrivateFrameworks/CommerceKit/CKAccountStore.h diff --git a/PrivateFrameworks/CommerceKit/CKDownloadDirectory.h b/Sources/PrivateFrameworks/CommerceKit/CKDownloadDirectory.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKDownloadDirectory.h rename to Sources/PrivateFrameworks/CommerceKit/CKDownloadDirectory.h diff --git a/PrivateFrameworks/CommerceKit/CKDownloadQueue.h b/Sources/PrivateFrameworks/CommerceKit/CKDownloadQueue.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKDownloadQueue.h rename to Sources/PrivateFrameworks/CommerceKit/CKDownloadQueue.h diff --git a/PrivateFrameworks/CommerceKit/CKDownloadQueueObserver.h b/Sources/PrivateFrameworks/CommerceKit/CKDownloadQueueObserver.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKDownloadQueueObserver.h rename to Sources/PrivateFrameworks/CommerceKit/CKDownloadQueueObserver.h diff --git a/PrivateFrameworks/CommerceKit/CKPurchaseController.h b/Sources/PrivateFrameworks/CommerceKit/CKPurchaseController.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKPurchaseController.h rename to Sources/PrivateFrameworks/CommerceKit/CKPurchaseController.h diff --git a/PrivateFrameworks/CommerceKit/CKServiceInterface.h b/Sources/PrivateFrameworks/CommerceKit/CKServiceInterface.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKServiceInterface.h rename to Sources/PrivateFrameworks/CommerceKit/CKServiceInterface.h diff --git a/PrivateFrameworks/CommerceKit/CKSoftwareMap.h b/Sources/PrivateFrameworks/CommerceKit/CKSoftwareMap.h similarity index 100% rename from PrivateFrameworks/CommerceKit/CKSoftwareMap.h rename to Sources/PrivateFrameworks/CommerceKit/CKSoftwareMap.h diff --git a/PrivateFrameworks/CommerceKit/module.modulemap b/Sources/PrivateFrameworks/CommerceKit/module.modulemap similarity index 100% rename from PrivateFrameworks/CommerceKit/module.modulemap rename to Sources/PrivateFrameworks/CommerceKit/module.modulemap diff --git a/PrivateFrameworks/StoreFoundation/CKSoftwareProduct.h b/Sources/PrivateFrameworks/StoreFoundation/CKSoftwareProduct.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/CKSoftwareProduct.h rename to Sources/PrivateFrameworks/StoreFoundation/CKSoftwareProduct.h diff --git a/PrivateFrameworks/StoreFoundation/CKUpdate.h b/Sources/PrivateFrameworks/StoreFoundation/CKUpdate.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/CKUpdate.h rename to Sources/PrivateFrameworks/StoreFoundation/CKUpdate.h diff --git a/PrivateFrameworks/StoreFoundation/ISAccountService.h b/Sources/PrivateFrameworks/StoreFoundation/ISAccountService.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISAccountService.h rename to Sources/PrivateFrameworks/StoreFoundation/ISAccountService.h diff --git a/PrivateFrameworks/StoreFoundation/ISAuthenticationContext.h b/Sources/PrivateFrameworks/StoreFoundation/ISAuthenticationContext.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISAuthenticationContext.h rename to Sources/PrivateFrameworks/StoreFoundation/ISAuthenticationContext.h diff --git a/PrivateFrameworks/StoreFoundation/ISAuthenticationResponse.h b/Sources/PrivateFrameworks/StoreFoundation/ISAuthenticationResponse.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISAuthenticationResponse.h rename to Sources/PrivateFrameworks/StoreFoundation/ISAuthenticationResponse.h diff --git a/PrivateFrameworks/StoreFoundation/ISServiceProxy.h b/Sources/PrivateFrameworks/StoreFoundation/ISServiceProxy.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISServiceProxy.h rename to Sources/PrivateFrameworks/StoreFoundation/ISServiceProxy.h diff --git a/PrivateFrameworks/StoreFoundation/ISServiceRemoteObject.h b/Sources/PrivateFrameworks/StoreFoundation/ISServiceRemoteObject.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISServiceRemoteObject.h rename to Sources/PrivateFrameworks/StoreFoundation/ISServiceRemoteObject.h diff --git a/PrivateFrameworks/StoreFoundation/ISStoreAccount.h b/Sources/PrivateFrameworks/StoreFoundation/ISStoreAccount.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISStoreAccount.h rename to Sources/PrivateFrameworks/StoreFoundation/ISStoreAccount.h diff --git a/PrivateFrameworks/StoreFoundation/ISStoreClient.h b/Sources/PrivateFrameworks/StoreFoundation/ISStoreClient.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/ISStoreClient.h rename to Sources/PrivateFrameworks/StoreFoundation/ISStoreClient.h diff --git a/PrivateFrameworks/StoreFoundation/SSDownload.h b/Sources/PrivateFrameworks/StoreFoundation/SSDownload.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/SSDownload.h rename to Sources/PrivateFrameworks/StoreFoundation/SSDownload.h diff --git a/PrivateFrameworks/StoreFoundation/SSDownloadMetadata.h b/Sources/PrivateFrameworks/StoreFoundation/SSDownloadMetadata.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/SSDownloadMetadata.h rename to Sources/PrivateFrameworks/StoreFoundation/SSDownloadMetadata.h diff --git a/PrivateFrameworks/StoreFoundation/SSDownloadPhase.h b/Sources/PrivateFrameworks/StoreFoundation/SSDownloadPhase.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/SSDownloadPhase.h rename to Sources/PrivateFrameworks/StoreFoundation/SSDownloadPhase.h diff --git a/PrivateFrameworks/StoreFoundation/SSDownloadStatus.h b/Sources/PrivateFrameworks/StoreFoundation/SSDownloadStatus.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/SSDownloadStatus.h rename to Sources/PrivateFrameworks/StoreFoundation/SSDownloadStatus.h diff --git a/PrivateFrameworks/StoreFoundation/SSPurchase.h b/Sources/PrivateFrameworks/StoreFoundation/SSPurchase.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/SSPurchase.h rename to Sources/PrivateFrameworks/StoreFoundation/SSPurchase.h diff --git a/PrivateFrameworks/StoreFoundation/SSPurchaseResponse.h b/Sources/PrivateFrameworks/StoreFoundation/SSPurchaseResponse.h similarity index 100% rename from PrivateFrameworks/StoreFoundation/SSPurchaseResponse.h rename to Sources/PrivateFrameworks/StoreFoundation/SSPurchaseResponse.h diff --git a/PrivateFrameworks/StoreFoundation/module.modulemap b/Sources/PrivateFrameworks/StoreFoundation/module.modulemap similarity index 100% rename from PrivateFrameworks/StoreFoundation/module.modulemap rename to Sources/PrivateFrameworks/StoreFoundation/module.modulemap diff --git a/mas/main.swift b/Sources/mas/main.swift similarity index 100% rename from mas/main.swift rename to Sources/mas/main.swift diff --git a/MasKitTests/.swiftlint.yml b/Tests/MasKitTests/.swiftlint.yml similarity index 100% rename from MasKitTests/.swiftlint.yml rename to Tests/MasKitTests/.swiftlint.yml diff --git a/MasKitTests/Commands/AccountCommandSpec.swift b/Tests/MasKitTests/Commands/AccountCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/AccountCommandSpec.swift rename to Tests/MasKitTests/Commands/AccountCommandSpec.swift diff --git a/MasKitTests/Commands/HomeCommandSpec.swift b/Tests/MasKitTests/Commands/HomeCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/HomeCommandSpec.swift rename to Tests/MasKitTests/Commands/HomeCommandSpec.swift diff --git a/MasKitTests/Commands/InfoCommandSpec.swift b/Tests/MasKitTests/Commands/InfoCommandSpec.swift similarity index 90% rename from MasKitTests/Commands/InfoCommandSpec.swift rename to Tests/MasKitTests/Commands/InfoCommandSpec.swift index 0da85134d..0e964f6f4 100644 --- a/MasKitTests/Commands/InfoCommandSpec.swift +++ b/Tests/MasKitTests/Commands/InfoCommandSpec.swift @@ -59,16 +59,11 @@ class InfoCommandSpec: QuickSpec { it("displays app details") { storeSearch.apps[result.trackId] = result let output = OutputListener() - output.openConsolePipe() let result = cmd.run(InfoCommand.Options(appId: result.trackId)) expect(result).to(beSuccess()) - // output is async so need to wait for contents to be updated - expect(output.contents).toEventuallyNot(beEmpty()) expect(output.contents) == expectedOutput - - output.closeConsolePipe() } } } diff --git a/MasKitTests/Commands/InstallCommandSpec.swift b/Tests/MasKitTests/Commands/InstallCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/InstallCommandSpec.swift rename to Tests/MasKitTests/Commands/InstallCommandSpec.swift diff --git a/MasKitTests/Commands/ListCommandSpec.swift b/Tests/MasKitTests/Commands/ListCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/ListCommandSpec.swift rename to Tests/MasKitTests/Commands/ListCommandSpec.swift diff --git a/MasKitTests/Commands/LuckyCommandSpec.swift b/Tests/MasKitTests/Commands/LuckyCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/LuckyCommandSpec.swift rename to Tests/MasKitTests/Commands/LuckyCommandSpec.swift diff --git a/MasKitTests/Commands/OpenCommandSpec.swift b/Tests/MasKitTests/Commands/OpenCommandSpec.swift similarity index 99% rename from MasKitTests/Commands/OpenCommandSpec.swift rename to Tests/MasKitTests/Commands/OpenCommandSpec.swift index 97c2ec5e9..97383e7f6 100644 --- a/MasKitTests/Commands/OpenCommandSpec.swift +++ b/Tests/MasKitTests/Commands/OpenCommandSpec.swift @@ -6,6 +6,7 @@ // Copyright Š 2019 mas-cli. All rights reserved. // +import Foundation import Nimble import Quick diff --git a/MasKitTests/Commands/OutdatedCommandSpec.swift b/Tests/MasKitTests/Commands/OutdatedCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/OutdatedCommandSpec.swift rename to Tests/MasKitTests/Commands/OutdatedCommandSpec.swift diff --git a/MasKitTests/Commands/PurchaseCommandSpec.swift b/Tests/MasKitTests/Commands/PurchaseCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/PurchaseCommandSpec.swift rename to Tests/MasKitTests/Commands/PurchaseCommandSpec.swift diff --git a/MasKitTests/Commands/ResetCommandSpec.swift b/Tests/MasKitTests/Commands/ResetCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/ResetCommandSpec.swift rename to Tests/MasKitTests/Commands/ResetCommandSpec.swift diff --git a/MasKitTests/Commands/SearchCommandSpec.swift b/Tests/MasKitTests/Commands/SearchCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/SearchCommandSpec.swift rename to Tests/MasKitTests/Commands/SearchCommandSpec.swift diff --git a/MasKitTests/Commands/SignInCommandSpec.swift b/Tests/MasKitTests/Commands/SignInCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/SignInCommandSpec.swift rename to Tests/MasKitTests/Commands/SignInCommandSpec.swift diff --git a/MasKitTests/Commands/SignOutCommandSpec.swift b/Tests/MasKitTests/Commands/SignOutCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/SignOutCommandSpec.swift rename to Tests/MasKitTests/Commands/SignOutCommandSpec.swift diff --git a/MasKitTests/Commands/UninstallCommandSpec.swift b/Tests/MasKitTests/Commands/UninstallCommandSpec.swift similarity index 99% rename from MasKitTests/Commands/UninstallCommandSpec.swift rename to Tests/MasKitTests/Commands/UninstallCommandSpec.swift index f988eba6e..eeef61a73 100644 --- a/MasKitTests/Commands/UninstallCommandSpec.swift +++ b/Tests/MasKitTests/Commands/UninstallCommandSpec.swift @@ -6,6 +6,7 @@ // Copyright Š 2018 mas-cli. All rights reserved. // +import Foundation import Nimble import Quick diff --git a/MasKitTests/Commands/UpgradeCommandSpec.swift b/Tests/MasKitTests/Commands/UpgradeCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/UpgradeCommandSpec.swift rename to Tests/MasKitTests/Commands/UpgradeCommandSpec.swift diff --git a/MasKitTests/Commands/VendorCommandSpec.swift b/Tests/MasKitTests/Commands/VendorCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/VendorCommandSpec.swift rename to Tests/MasKitTests/Commands/VendorCommandSpec.swift diff --git a/MasKitTests/Commands/VersionCommandSpec.swift b/Tests/MasKitTests/Commands/VersionCommandSpec.swift similarity index 100% rename from MasKitTests/Commands/VersionCommandSpec.swift rename to Tests/MasKitTests/Commands/VersionCommandSpec.swift diff --git a/MasKitTests/Controllers/AppLibraryMock.swift b/Tests/MasKitTests/Controllers/AppLibraryMock.swift similarity index 100% rename from MasKitTests/Controllers/AppLibraryMock.swift rename to Tests/MasKitTests/Controllers/AppLibraryMock.swift diff --git a/MasKitTests/Controllers/MasAppLibrarySpec.swift b/Tests/MasKitTests/Controllers/MasAppLibrarySpec.swift similarity index 100% rename from MasKitTests/Controllers/MasAppLibrarySpec.swift rename to Tests/MasKitTests/Controllers/MasAppLibrarySpec.swift diff --git a/MasKitTests/Controllers/MasStoreSearchSpec.swift b/Tests/MasKitTests/Controllers/MasStoreSearchSpec.swift similarity index 100% rename from MasKitTests/Controllers/MasStoreSearchSpec.swift rename to Tests/MasKitTests/Controllers/MasStoreSearchSpec.swift diff --git a/MasKitTests/Controllers/StoreSearchMock.swift b/Tests/MasKitTests/Controllers/StoreSearchMock.swift similarity index 100% rename from MasKitTests/Controllers/StoreSearchMock.swift rename to Tests/MasKitTests/Controllers/StoreSearchMock.swift diff --git a/MasKitTests/Controllers/StoreSearchSpec.swift b/Tests/MasKitTests/Controllers/StoreSearchSpec.swift similarity index 100% rename from MasKitTests/Controllers/StoreSearchSpec.swift rename to Tests/MasKitTests/Controllers/StoreSearchSpec.swift diff --git a/MasKitTests/Errors/MASErrorTestCase.swift b/Tests/MasKitTests/Errors/MASErrorTestCase.swift similarity index 100% rename from MasKitTests/Errors/MASErrorTestCase.swift rename to Tests/MasKitTests/Errors/MASErrorTestCase.swift diff --git a/MasKitTests/Extensions/Bundle+JSON.swift b/Tests/MasKitTests/Extensions/Bundle+JSON.swift similarity index 52% rename from MasKitTests/Extensions/Bundle+JSON.swift rename to Tests/MasKitTests/Extensions/Bundle+JSON.swift index b05bb558a..115924393 100644 --- a/MasKitTests/Extensions/Bundle+JSON.swift +++ b/Tests/MasKitTests/Extensions/Bundle+JSON.swift @@ -13,7 +13,6 @@ extension Data { /// - Parameter file: Relative path within the JSON folder init(from fileName: String) { let fileURL = Bundle.url(for: fileName)! - print("fileURL: \(fileURL)") try! self.init(contentsOf: fileURL, options: .mappedIfSafe) } } @@ -24,22 +23,30 @@ extension Bundle { /// - Parameter fileName: Name of file to locate. /// - Returns: URL to file. static func url(for fileName: String) -> URL? { - Bundle(for: NetworkSessionMock.self).url(for: fileName) + // The Swift Package Manager places resources in a separate bundle from the executable. + // https://forums.swift.org/t/swift-5-3-spm-resources-in-tests-uses-wrong-bundle-path/37051 + let bundleURL = Bundle(for: NetworkSessionMock.self) + .bundleURL + .deletingLastPathComponent() + .appendingPathComponent("mas_MasKitTests.bundle") + guard let bundle = Bundle(url: bundleURL), + let url = bundle.url(for: fileName) + else { + fatalError("Unable to load file \(fileName)") + } + + return url } /// Builds a URL for a file in the JSON directory of the current bundle. /// /// - Parameter fileName: Name of file to locate. /// - Returns: URL to file. - func url(for fileName: String) -> URL? { - guard - let path = self.path( - forResource: fileName.fileNameWithoutExtension, - ofType: fileName.fileExtension, - inDirectory: "JSON" - ) - else { fatalError("Unable to load file \(fileName)") } - - return URL(fileURLWithPath: path) + private func url(for fileName: String) -> URL? { + url( + forResource: fileName.fileNameWithoutExtension, + withExtension: fileName.fileExtension, + subdirectory: "JSON" + ) } } diff --git a/MasKitTests/Extensions/String+FileExtension.swift b/Tests/MasKitTests/Extensions/String+FileExtension.swift similarity index 100% rename from MasKitTests/Extensions/String+FileExtension.swift rename to Tests/MasKitTests/Extensions/String+FileExtension.swift diff --git a/MasKitTests/ExternalCommands/OpenSystemCommandMock.swift b/Tests/MasKitTests/ExternalCommands/OpenSystemCommandMock.swift similarity index 100% rename from MasKitTests/ExternalCommands/OpenSystemCommandMock.swift rename to Tests/MasKitTests/ExternalCommands/OpenSystemCommandMock.swift diff --git a/MasKitTests/ExternalCommands/OpenSystemCommandSpec.swift b/Tests/MasKitTests/ExternalCommands/OpenSystemCommandSpec.swift similarity index 100% rename from MasKitTests/ExternalCommands/OpenSystemCommandSpec.swift rename to Tests/MasKitTests/ExternalCommands/OpenSystemCommandSpec.swift diff --git a/MasKitTests/Formatters/AppListFormatterSpec.swift b/Tests/MasKitTests/Formatters/AppListFormatterSpec.swift similarity index 100% rename from MasKitTests/Formatters/AppListFormatterSpec.swift rename to Tests/MasKitTests/Formatters/AppListFormatterSpec.swift diff --git a/MasKitTests/Formatters/SearchResultFormatterSpec.swift b/Tests/MasKitTests/Formatters/SearchResultFormatterSpec.swift similarity index 100% rename from MasKitTests/Formatters/SearchResultFormatterSpec.swift rename to Tests/MasKitTests/Formatters/SearchResultFormatterSpec.swift diff --git a/MasKitTests/JSON/lookup/fantastical.json b/Tests/MasKitTests/JSON/lookup/fantastical.json similarity index 100% rename from MasKitTests/JSON/lookup/fantastical.json rename to Tests/MasKitTests/JSON/lookup/fantastical.json diff --git a/MasKitTests/JSON/lookup/notability.json b/Tests/MasKitTests/JSON/lookup/notability.json similarity index 100% rename from MasKitTests/JSON/lookup/notability.json rename to Tests/MasKitTests/JSON/lookup/notability.json diff --git a/MasKitTests/JSON/lookup/slack.json b/Tests/MasKitTests/JSON/lookup/slack.json similarity index 100% rename from MasKitTests/JSON/lookup/slack.json rename to Tests/MasKitTests/JSON/lookup/slack.json diff --git a/MasKitTests/JSON/lookup/things.json b/Tests/MasKitTests/JSON/lookup/things.json similarity index 100% rename from MasKitTests/JSON/lookup/things.json rename to Tests/MasKitTests/JSON/lookup/things.json diff --git a/MasKitTests/JSON/search/bbedit.json b/Tests/MasKitTests/JSON/search/bbedit.json similarity index 100% rename from MasKitTests/JSON/search/bbedit.json rename to Tests/MasKitTests/JSON/search/bbedit.json diff --git a/MasKitTests/JSON/search/bear.json b/Tests/MasKitTests/JSON/search/bear.json similarity index 100% rename from MasKitTests/JSON/search/bear.json rename to Tests/MasKitTests/JSON/search/bear.json diff --git a/MasKitTests/JSON/search/deliveries.json b/Tests/MasKitTests/JSON/search/deliveries.json similarity index 100% rename from MasKitTests/JSON/search/deliveries.json rename to Tests/MasKitTests/JSON/search/deliveries.json diff --git a/MasKitTests/JSON/search/fantastical.json b/Tests/MasKitTests/JSON/search/fantastical.json similarity index 100% rename from MasKitTests/JSON/search/fantastical.json rename to Tests/MasKitTests/JSON/search/fantastical.json diff --git a/MasKitTests/JSON/search/mojave.json b/Tests/MasKitTests/JSON/search/mojave.json similarity index 100% rename from MasKitTests/JSON/search/mojave.json rename to Tests/MasKitTests/JSON/search/mojave.json diff --git a/MasKitTests/JSON/search/nonexistent.json b/Tests/MasKitTests/JSON/search/nonexistent.json similarity index 100% rename from MasKitTests/JSON/search/nonexistent.json rename to Tests/MasKitTests/JSON/search/nonexistent.json diff --git a/MasKitTests/JSON/search/notability.json b/Tests/MasKitTests/JSON/search/notability.json similarity index 100% rename from MasKitTests/JSON/search/notability.json rename to Tests/MasKitTests/JSON/search/notability.json diff --git a/MasKitTests/JSON/search/slack.json b/Tests/MasKitTests/JSON/search/slack.json similarity index 100% rename from MasKitTests/JSON/search/slack.json rename to Tests/MasKitTests/JSON/search/slack.json diff --git a/MasKitTests/JSON/search/things-3.json b/Tests/MasKitTests/JSON/search/things-3.json similarity index 100% rename from MasKitTests/JSON/search/things-3.json rename to Tests/MasKitTests/JSON/search/things-3.json diff --git a/MasKitTests/JSON/search/things-that-go-bump.json b/Tests/MasKitTests/JSON/search/things-that-go-bump.json similarity index 100% rename from MasKitTests/JSON/search/things-that-go-bump.json rename to Tests/MasKitTests/JSON/search/things-that-go-bump.json diff --git a/MasKitTests/JSON/search/things.json b/Tests/MasKitTests/JSON/search/things.json similarity index 100% rename from MasKitTests/JSON/search/things.json rename to Tests/MasKitTests/JSON/search/things.json diff --git a/MasKitTests/JSON/search/tweetbot.json b/Tests/MasKitTests/JSON/search/tweetbot.json similarity index 100% rename from MasKitTests/JSON/search/tweetbot.json rename to Tests/MasKitTests/JSON/search/tweetbot.json diff --git a/MasKitTests/Models/SearchResultListSpec.swift b/Tests/MasKitTests/Models/SearchResultListSpec.swift similarity index 98% rename from MasKitTests/Models/SearchResultListSpec.swift rename to Tests/MasKitTests/Models/SearchResultListSpec.swift index 8df863ea2..14e90f238 100644 --- a/MasKitTests/Models/SearchResultListSpec.swift +++ b/Tests/MasKitTests/Models/SearchResultListSpec.swift @@ -6,6 +6,7 @@ // Copyright Š 2020 mas-cli. All rights reserved. // +import Foundation import Nimble import Quick diff --git a/MasKitTests/Models/SearchResultSpec.swift b/Tests/MasKitTests/Models/SearchResultSpec.swift similarity index 97% rename from MasKitTests/Models/SearchResultSpec.swift rename to Tests/MasKitTests/Models/SearchResultSpec.swift index c9933d917..16d69d29a 100644 --- a/MasKitTests/Models/SearchResultSpec.swift +++ b/Tests/MasKitTests/Models/SearchResultSpec.swift @@ -6,6 +6,7 @@ // Copyright Š 2020 mas-cli. All rights reserved. // +import Foundation import Nimble import Quick diff --git a/MasKitTests/Models/SoftwareProductMock.swift b/Tests/MasKitTests/Models/SoftwareProductMock.swift similarity index 100% rename from MasKitTests/Models/SoftwareProductMock.swift rename to Tests/MasKitTests/Models/SoftwareProductMock.swift diff --git a/MasKitTests/Network/NetworkManagerTests.swift b/Tests/MasKitTests/Network/NetworkManagerTests.swift similarity index 100% rename from MasKitTests/Network/NetworkManagerTests.swift rename to Tests/MasKitTests/Network/NetworkManagerTests.swift diff --git a/MasKitTests/Network/NetworkSessionMock.swift b/Tests/MasKitTests/Network/NetworkSessionMock.swift similarity index 99% rename from MasKitTests/Network/NetworkSessionMock.swift rename to Tests/MasKitTests/Network/NetworkSessionMock.swift index a3e2f526a..f168cfdba 100644 --- a/MasKitTests/Network/NetworkSessionMock.swift +++ b/Tests/MasKitTests/Network/NetworkSessionMock.swift @@ -7,6 +7,7 @@ // import Foundation + @testable import MasKit /// Mock NetworkSession for testing. diff --git a/MasKitTests/Network/NetworkSessionMockFromFile.swift b/Tests/MasKitTests/Network/NetworkSessionMockFromFile.swift similarity index 98% rename from MasKitTests/Network/NetworkSessionMockFromFile.swift rename to Tests/MasKitTests/Network/NetworkSessionMockFromFile.swift index efe5d129d..539fa7777 100644 --- a/MasKitTests/Network/NetworkSessionMockFromFile.swift +++ b/Tests/MasKitTests/Network/NetworkSessionMockFromFile.swift @@ -7,7 +7,6 @@ // import Foundation -import MasKit /// Mock NetworkSession for testing with saved JSON response payload files. class NetworkSessionMockFromFile: NetworkSessionMock { diff --git a/MasKitTests/Network/TestURLSessionDelegate.swift b/Tests/MasKitTests/Network/TestURLSessionDelegate.swift similarity index 100% rename from MasKitTests/Network/TestURLSessionDelegate.swift rename to Tests/MasKitTests/Network/TestURLSessionDelegate.swift diff --git a/MasKitTests/Network/URLSessionConfiguration+Tests.swift b/Tests/MasKitTests/Network/URLSessionConfiguration+Tests.swift similarity index 100% rename from MasKitTests/Network/URLSessionConfiguration+Tests.swift rename to Tests/MasKitTests/Network/URLSessionConfiguration+Tests.swift diff --git a/MasKitTests/Network/URLSessionDataTaskMock.swift b/Tests/MasKitTests/Network/URLSessionDataTaskMock.swift similarity index 100% rename from MasKitTests/Network/URLSessionDataTaskMock.swift rename to Tests/MasKitTests/Network/URLSessionDataTaskMock.swift diff --git a/MasKitTests/Nimble/ResultPredicates.swift b/Tests/MasKitTests/Nimble/ResultPredicates.swift similarity index 100% rename from MasKitTests/Nimble/ResultPredicates.swift rename to Tests/MasKitTests/Nimble/ResultPredicates.swift diff --git a/Tests/MasKitTests/OutputListener.swift b/Tests/MasKitTests/OutputListener.swift new file mode 100644 index 000000000..47458dd98 --- /dev/null +++ b/Tests/MasKitTests/OutputListener.swift @@ -0,0 +1,28 @@ +// +// OutputListener.swift +// MasKitTests +// +// Created by Ben Chatelain on 1/7/19. +// Copyright Š 2019 mas-cli. All rights reserved. +// + +@testable import MasKit + +/// Test helper for monitoring strings written to stdout. Modified from: +/// https://stackoverflow.com/a/53569018 +class OutputListener { + /// Buffers strings written to stdout + var contents = "" + + init() { + MasKit.printObserver = { [weak self] text in + strongify(self) { context in + context.contents += text + } + } + } + + deinit { + MasKit.printObserver = nil + } +} diff --git a/MasKitTests/OutputListenerSpec.swift b/Tests/MasKitTests/OutputListenerSpec.swift similarity index 65% rename from MasKitTests/OutputListenerSpec.swift rename to Tests/MasKitTests/OutputListenerSpec.swift index dc00b24e7..8025b9a8a 100644 --- a/MasKitTests/OutputListenerSpec.swift +++ b/Tests/MasKitTests/OutputListenerSpec.swift @@ -14,22 +14,14 @@ class OutputListenerSpec: QuickSpec { xdescribe("output listener") { it("can intercept a single line written stdout") { let output = OutputListener() - output.openConsolePipe() - let expectedOutput = "hi there" print("hi there", terminator: "") - // output is async so need to wait for contents to be updated - expect(output.contents).toEventuallyNot(beEmpty()) expect(output.contents) == expectedOutput - - output.closeConsolePipe() } it("can intercept multiple lines written stdout") { let output = OutputListener() - output.openConsolePipe() - let expectedOutput = """ hi there @@ -37,11 +29,7 @@ class OutputListenerSpec: QuickSpec { print("hi there") - // output is async so need to wait for contents to be updated - expect(output.contents).toEventuallyNot(beEmpty()) expect(output.contents) == expectedOutput - - output.closeConsolePipe() } } } diff --git a/MasKitTests/Strongify.swift b/Tests/MasKitTests/Strongify.swift similarity index 100% rename from MasKitTests/Strongify.swift rename to Tests/MasKitTests/Strongify.swift diff --git a/mas-cli.xcodeproj/project.pbxproj b/mas-cli.xcodeproj/project.pbxproj deleted file mode 100644 index ea3e8b041..000000000 --- a/mas-cli.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1426 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 60D8CF3624262F92005B4004 /* PurchaseCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D8CF3524262F92005B4004 /* PurchaseCommandSpec.swift */; }; - 75FB3E761F9F7841005B6F20 /* Purchase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FB3E751F9F7841005B6F20 /* Purchase.swift */; }; - B537017421A0F85B00538F78 /* Commandant.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406B213F4DDD0044E445 /* Commandant.framework */; }; - B537017621A0F94200538F78 /* Commandant.framework in Copy Carthage Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406B213F4DDD0044E445 /* Commandant.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - B5552928219A1BB900ACB4CA /* CommerceKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F83213A62173EF75008BA8A0 /* CommerceKit.framework */; }; - B5552929219A1BC700ACB4CA /* StoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F83213A52173EF75008BA8A0 /* StoreFoundation.framework */; }; - B555292E219A218E00ACB4CA /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406A213F4DDD0044E445 /* Quick.framework */; }; - B555292F219A219100ACB4CA /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406C213F4DDD0044E445 /* Nimble.framework */; }; - B5552936219A23FF00ACB4CA /* Nimble.framework in Copy Carthage Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406C213F4DDD0044E445 /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - B5552937219A23FF00ACB4CA /* Quick.framework in Copy Carthage Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406A213F4DDD0044E445 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - B55B3D9221ED9B8C0009A1A5 /* SearchResultFormatterSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55B3D9121ED9B8C0009A1A5 /* SearchResultFormatterSpec.swift */; }; - B576FDF321E03B780016B39D /* MasStoreSearchSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDF221E03B780016B39D /* MasStoreSearchSpec.swift */; }; - B576FDF521E1078F0016B39D /* MASErrorTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDF421E1078F0016B39D /* MASErrorTestCase.swift */; }; - B576FDF721E107AA0016B39D /* OpenSystemCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDF621E107AA0016B39D /* OpenSystemCommand.swift */; }; - B576FDF921E107CA0016B39D /* SoftwareProductMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDF821E107CA0016B39D /* SoftwareProductMock.swift */; }; - B576FDFA21E1081C0016B39D /* SearchResultList.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B15521D89F5200F3AC59 /* SearchResultList.swift */; }; - B576FDFC21E10A610016B39D /* URLSessionConfiguration+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDFB21E10A610016B39D /* URLSessionConfiguration+Tests.swift */; }; - B576FDFE21E10B660016B39D /* TestURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDFD21E10B660016B39D /* TestURLSessionDelegate.swift */; }; - B576FE0021E113610016B39D /* NetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FDFF21E113610016B39D /* NetworkSession.swift */; }; - B576FE0221E1139E0016B39D /* URLSession+NetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE0121E1139E0016B39D /* URLSession+NetworkSession.swift */; }; - B576FE0421E113E90016B39D /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE0321E113E90016B39D /* NetworkManager.swift */; }; - B576FE0C21E116590016B39D /* NetworkManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE0B21E116590016B39D /* NetworkManagerTests.swift */; }; - B576FE0E21E1D6310016B39D /* String+PercentEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE0D21E1D6310016B39D /* String+PercentEncoding.swift */; }; - B576FE1221E1D82D0016B39D /* NetworkSessionMockFromFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE1121E1D82D0016B39D /* NetworkSessionMockFromFile.swift */; }; - B576FE1421E1D8A90016B39D /* Bundle+JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE1321E1D8A90016B39D /* Bundle+JSON.swift */; }; - B576FE1621E1D8CB0016B39D /* String+FileExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE1521E1D8CB0016B39D /* String+FileExtension.swift */; }; - B576FE1B21E28E8A0016B39D /* NetworkSessionMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE1A21E28E8A0016B39D /* NetworkSessionMock.swift */; }; - B576FE1D21E28EF70016B39D /* URLSessionDataTaskMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE1C21E28EF70016B39D /* URLSessionDataTaskMock.swift */; }; - B576FE2A21E4240B0016B39D /* AppInfoFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE2921E4240B0016B39D /* AppInfoFormatter.swift */; }; - B576FE2C21E42A230016B39D /* OutputListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE2B21E42A230016B39D /* OutputListener.swift */; }; - B576FE2E21E5A8010016B39D /* Strongify.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE2D21E5A8010016B39D /* Strongify.swift */; }; - B576FE3021E5BD130016B39D /* OutputListenerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE2F21E5BD130016B39D /* OutputListenerSpec.swift */; }; - B576FE3321E985250016B39D /* SearchResultFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE3221E985250016B39D /* SearchResultFormatter.swift */; }; - B576FE3521E98AAE0016B39D /* StoreSearchSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576FE3421E98AAE0016B39D /* StoreSearchSpec.swift */; }; - B578F061224FB5BD00D2086A /* ISAuthenticationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = B578F060224FB5BD00D2086A /* ISAuthenticationResponse.h */; }; - B5793E29219BDD4800135B39 /* JSON in Resources */ = {isa = PBXBuildFile; fileRef = B5793E28219BDD4800135B39 /* JSON */; }; - B588CE0221DC89490047D305 /* ExternalCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = B588CE0121DC89490047D305 /* ExternalCommand.swift */; }; - B594B12021D53A8200F3AC59 /* Uninstall.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B11F21D53A8200F3AC59 /* Uninstall.swift */; }; - B594B12221D5416100F3AC59 /* ListCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12121D5416100F3AC59 /* ListCommandSpec.swift */; }; - B594B12521D580BB00F3AC59 /* UninstallCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12421D580BB00F3AC59 /* UninstallCommandSpec.swift */; }; - B594B12721D5825800F3AC59 /* AppLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12621D5825800F3AC59 /* AppLibrary.swift */; }; - B594B12921D5831D00F3AC59 /* SoftwareProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12821D5831D00F3AC59 /* SoftwareProduct.swift */; }; - B594B12B21D5837200F3AC59 /* CKSoftwareProduct+SoftwareProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12A21D5837200F3AC59 /* CKSoftwareProduct+SoftwareProduct.swift */; }; - B594B12E21D5850700F3AC59 /* AppLibraryMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12D21D5850700F3AC59 /* AppLibraryMock.swift */; }; - B594B13021D5855D00F3AC59 /* MasAppLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B12F21D5855D00F3AC59 /* MasAppLibrary.swift */; }; - B594B13221D5876200F3AC59 /* ResultPredicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13121D5876200F3AC59 /* ResultPredicates.swift */; }; - B594B13621D6D68600F3AC59 /* VersionCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13521D6D68600F3AC59 /* VersionCommandSpec.swift */; }; - B594B13821D6D6C100F3AC59 /* UpgradeCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13721D6D6C100F3AC59 /* UpgradeCommandSpec.swift */; }; - B594B13A21D6D70400F3AC59 /* SignOutCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13921D6D70400F3AC59 /* SignOutCommandSpec.swift */; }; - B594B13C21D6D72E00F3AC59 /* SignInCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13B21D6D72E00F3AC59 /* SignInCommandSpec.swift */; }; - B594B13E21D6D78900F3AC59 /* SearchCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13D21D6D78900F3AC59 /* SearchCommandSpec.swift */; }; - B594B14021D6D8BF00F3AC59 /* ResetCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B13F21D6D8BF00F3AC59 /* ResetCommandSpec.swift */; }; - B594B14221D6D8EC00F3AC59 /* OutdatedCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14121D6D8EC00F3AC59 /* OutdatedCommandSpec.swift */; }; - B594B14421D6D91800F3AC59 /* LuckyCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14321D6D91800F3AC59 /* LuckyCommandSpec.swift */; }; - B594B14621D6D95700F3AC59 /* InstallCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14521D6D95700F3AC59 /* InstallCommandSpec.swift */; }; - B594B14821D6D98400F3AC59 /* InfoCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14721D6D98400F3AC59 /* InfoCommandSpec.swift */; }; - B594B14A21D6D9AE00F3AC59 /* AccountCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14921D6D9AE00F3AC59 /* AccountCommandSpec.swift */; }; - B594B14C21D8983700F3AC59 /* Home.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14B21D8983700F3AC59 /* Home.swift */; }; - B594B14E21D8984500F3AC59 /* HomeCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14D21D8984500F3AC59 /* HomeCommandSpec.swift */; }; - B594B15021D8998000F3AC59 /* StoreSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B14F21D8998000F3AC59 /* StoreSearch.swift */; }; - B594B15221D89A8B00F3AC59 /* MasStoreSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B15121D89A8B00F3AC59 /* MasStoreSearch.swift */; }; - B594B15421D89DF400F3AC59 /* SearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B594B15321D89DF400F3AC59 /* SearchResult.swift */; }; - B5DBF80D21DEE4E600F3B151 /* Open.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBF80C21DEE4E600F3B151 /* Open.swift */; }; - B5DBF80F21DEEB7B00F3B151 /* Vendor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBF80E21DEEB7B00F3B151 /* Vendor.swift */; }; - B5DBF81121DEEC4200F3B151 /* VendorCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBF81021DEEC4200F3B151 /* VendorCommandSpec.swift */; }; - B5DBF81321DEEC7C00F3B151 /* OpenCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBF81221DEEC7C00F3B151 /* OpenCommandSpec.swift */; }; - B5DBF81521E02BA900F3B151 /* StoreSearchMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBF81421E02BA900F3B151 /* StoreSearchMock.swift */; }; - B5DBF81721E02E3400F3B151 /* OpenSystemCommandMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DBF81621E02E3400F3B151 /* OpenSystemCommandMock.swift */; }; - C56C4FF5262A50F5004F37EB /* Version in Frameworks */ = {isa = PBXBuildFile; productRef = C56C4FF4262A50F5004F37EB /* Version */; }; - ED031A7C1B5127C00097692E /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED031A7B1B5127C00097692E /* main.swift */; }; - F80B27B62611116A00A285C9 /* AppListFormatterSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80B27B52611116A00A285C9 /* AppListFormatterSpec.swift */; }; - F80B27BA2611118E00A285C9 /* AppListFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80B27B92611118E00A285C9 /* AppListFormatter.swift */; }; - F83213892173D3E1008BA8A0 /* CKAccountStore.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB719B20F2EC4500F56FDC /* CKAccountStore.h */; }; - F832138A2173D3E1008BA8A0 /* CKDownloadQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB719C20F2EC4500F56FDC /* CKDownloadQueue.h */; }; - F832138B2173D3E1008BA8A0 /* CKDownloadQueueObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71B520F2F7E000F56FDC /* CKDownloadQueueObserver.h */; }; - F832138C2173D3E1008BA8A0 /* CKPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB719D20F2EC4500F56FDC /* CKPurchaseController.h */; }; - F832138D2173D3E1008BA8A0 /* CKServiceInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB719E20F2EC4500F56FDC /* CKServiceInterface.h */; }; - F832138E2173D3E1008BA8A0 /* CKSoftwareMap.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB719F20F2EC4500F56FDC /* CKSoftwareMap.h */; }; - F83213912173D3E1008BA8A0 /* CKDownloadDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71B620F2F87300F56FDC /* CKDownloadDirectory.h */; }; - F83213922173D5AB008BA8A0 /* CKSoftwareProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71A320F2EC4500F56FDC /* CKSoftwareProduct.h */; }; - F83213932173D5AB008BA8A0 /* CKUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71A420F2EC4500F56FDC /* CKUpdate.h */; }; - F83213942173D5AB008BA8A0 /* ISAccountService.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71A520F2EC4500F56FDC /* ISAccountService.h */; }; - F83213952173D5AB008BA8A0 /* ISAuthenticationContext.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71A620F2EC4500F56FDC /* ISAuthenticationContext.h */; }; - F83213972173D5AB008BA8A0 /* ISServiceProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71A820F2EC4500F56FDC /* ISServiceProxy.h */; }; - F83213982173D5AB008BA8A0 /* ISServiceRemoteObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71A920F2EC4500F56FDC /* ISServiceRemoteObject.h */; }; - F83213992173D5AB008BA8A0 /* ISStoreAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71AA20F2EC4500F56FDC /* ISStoreAccount.h */; }; - F832139A2173D5AB008BA8A0 /* ISStoreClient.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71AB20F2EC4500F56FDC /* ISStoreClient.h */; }; - F832139C2173D5B2008BA8A0 /* SSDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71AD20F2EC4500F56FDC /* SSDownload.h */; }; - F832139D2173D5B2008BA8A0 /* SSDownloadMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71AE20F2EC4500F56FDC /* SSDownloadMetadata.h */; }; - F832139E2173D5B2008BA8A0 /* SSDownloadPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71AF20F2EC4500F56FDC /* SSDownloadPhase.h */; }; - F832139F2173D5B2008BA8A0 /* SSDownloadStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71B020F2EC4500F56FDC /* SSDownloadStatus.h */; }; - F83213A02173D5B2008BA8A0 /* SSPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71B120F2EC4500F56FDC /* SSPurchase.h */; }; - F83213A12173D5B2008BA8A0 /* SSPurchaseResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB71B220F2EC4500F56FDC /* SSPurchaseResponse.h */; }; - F83213A22173DC13008BA8A0 /* Commandant.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406B213F4DDD0044E445 /* Commandant.framework */; }; - F83213A82173F5A7008BA8A0 /* MasKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8FB715220F2B41400F56FDC /* MasKit.framework */; }; - F83213A92173F5D0008BA8A0 /* Commandant.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 90CB406B213F4DDD0044E445 /* Commandant.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - F85DA8AE240C313900FE5650 /* MasAppLibrarySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85DA8AD240C313900FE5650 /* MasAppLibrarySpec.swift */; }; - F85DA8B0240C32FA00FE5650 /* SoftwareMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85DA8AF240C32FA00FE5650 /* SoftwareMap.swift */; }; - F85DA8B2240CBAFE00FE5650 /* CKSoftwareMap+SoftwareMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85DA8B1240CBAFE00FE5650 /* CKSoftwareMap+SoftwareMap.swift */; }; - F88CB8E12404DAAD00B691B5 /* OpenSystemCommandSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88CB8E02404DAAD00B691B5 /* OpenSystemCommandSpec.swift */; }; - F8D095EA25009640000899E6 /* SearchResultSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D095E925009640000899E6 /* SearchResultSpec.swift */; }; - F8D095EC250096A6000899E6 /* SearchResultListSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D095EB250096A6000899E6 /* SearchResultListSpec.swift */; }; - F8FB715B20F2B41400F56FDC /* MasKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8FB715220F2B41400F56FDC /* MasKit.framework */; }; - F8FB716220F2B41400F56FDC /* MasKit.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FB715420F2B41400F56FDC /* MasKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8FB716A20F2B4DD00F56FDC /* Downloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F238A1B87569C00AE40CD /* Downloader.swift */; }; - F8FB716B20F2B4DD00F56FDC /* ISStoreAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F238F1B87A56F00AE40CD /* ISStoreAccount.swift */; }; - F8FB716C20F2B4DD00F56FDC /* PurchaseDownloadObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F23881B87543D00AE40CD /* PurchaseDownloadObserver.swift */; }; - F8FB716D20F2B4DD00F56FDC /* SSPurchase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA3BE511B8B84AF00C18D70 /* SSPurchase.swift */; }; - F8FB716E20F2B4DD00F56FDC /* StoreAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8242D8020746A510026DF35 /* StoreAccount.swift */; }; - F8FB716F20F2B4DD00F56FDC /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F23861B87537200AE40CD /* Account.swift */; }; - F8FB717020F2B4DD00F56FDC /* Info.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900A1E801DBAC8CB0069B1A8 /* Info.swift */; }; - F8FB717120F2B4DD00F56FDC /* Install.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F237E1B87522400AE40CD /* Install.swift */; }; - F8FB717220F2B4DD00F56FDC /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F23821B87533A00AE40CD /* List.swift */; }; - F8FB717320F2B4DD00F56FDC /* Lucky.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8078FAA71EC4F2FB004B5B3F /* Lucky.swift */; }; - F8FB717420F2B4DD00F56FDC /* Outdated.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F23841B87536A00AE40CD /* Outdated.swift */; }; - F8FB717520F2B4DD00F56FDC /* Reset.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDCBF9521D89AC6F000039C6 /* Reset.swift */; }; - F8FB717620F2B4DD00F56FDC /* Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 693A98981CBFFA760004D3B4 /* Search.swift */; }; - F8FB717720F2B4DD00F56FDC /* SignIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDC90B641C70045E0019E396 /* SignIn.swift */; }; - F8FB717820F2B4DD00F56FDC /* SignOut.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDE296521C700F4300554778 /* SignOut.swift */; }; - F8FB717920F2B4DD00F56FDC /* Upgrade.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDD3B3621C34709400B56B88 /* Upgrade.swift */; }; - F8FB717A20F2B4DD00F56FDC /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB6CE8B1BAEC3D400648B4D /* Version.swift */; }; - F8FB717B20F2B4DD00F56FDC /* MASError.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0F238C1B8756E600AE40CD /* MASError.swift */; }; - F8FB717D20F2B4DD00F56FDC /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDCBF9541D89CFC7000039C6 /* Utilities.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - F83213872173D2EB008BA8A0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ED031A701B5127C00097692E /* Project object */; - proxyType = 1; - remoteGlobalIDString = F8FB715120F2B41400F56FDC; - remoteInfo = MasKit; - }; - F8FB715C20F2B41400F56FDC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ED031A701B5127C00097692E /* Project object */; - proxyType = 1; - remoteGlobalIDString = F8FB715120F2B41400F56FDC; - remoteInfo = MasKit; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 90CB4073213F4E070044E445 /* Copy Debugging Symbols */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 16; - files = ( - ); - name = "Copy Debugging Symbols"; - runOnlyForDeploymentPostprocessing = 0; - }; - B5552935219A23EE00ACB4CA /* Copy Carthage Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - B537017621A0F94200538F78 /* Commandant.framework in Copy Carthage Frameworks */, - B5552936219A23FF00ACB4CA /* Nimble.framework in Copy Carthage Frameworks */, - B5552937219A23FF00ACB4CA /* Quick.framework in Copy Carthage Frameworks */, - ); - name = "Copy Carthage Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - ED031A761B5127C00097692E /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; - F83213A72173F58B008BA8A0 /* Copy Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - F83213A92173F5D0008BA8A0 /* Commandant.framework in Copy Frameworks */, - ); - name = "Copy Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 60D8CF3524262F92005B4004 /* PurchaseCommandSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseCommandSpec.swift; sourceTree = ""; }; - 693A98981CBFFA760004D3B4 /* Search.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Search.swift; sourceTree = ""; }; - 75FB3E751F9F7841005B6F20 /* Purchase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Purchase.swift; sourceTree = ""; }; - 8078FAA71EC4F2FB004B5B3F /* Lucky.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lucky.swift; sourceTree = ""; }; - 900A1E801DBAC8CB0069B1A8 /* Info.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Info.swift; sourceTree = ""; }; - 90CB406A213F4DDD0044E445 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Quick.framework; sourceTree = ""; }; - 90CB406B213F4DDD0044E445 /* Commandant.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Commandant.framework; sourceTree = ""; }; - 90CB406C213F4DDD0044E445 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = ""; }; - B55B3D9121ED9B8C0009A1A5 /* SearchResultFormatterSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultFormatterSpec.swift; sourceTree = ""; }; - B576FDF221E03B780016B39D /* MasStoreSearchSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasStoreSearchSpec.swift; sourceTree = ""; }; - B576FDF421E1078F0016B39D /* MASErrorTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MASErrorTestCase.swift; sourceTree = ""; }; - B576FDF621E107AA0016B39D /* OpenSystemCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSystemCommand.swift; sourceTree = ""; }; - B576FDF821E107CA0016B39D /* SoftwareProductMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoftwareProductMock.swift; sourceTree = ""; }; - B576FDFB21E10A610016B39D /* URLSessionConfiguration+Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSessionConfiguration+Tests.swift"; sourceTree = ""; }; - B576FDFD21E10B660016B39D /* TestURLSessionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestURLSessionDelegate.swift; sourceTree = ""; }; - B576FDFF21E113610016B39D /* NetworkSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSession.swift; sourceTree = ""; }; - B576FE0121E1139E0016B39D /* URLSession+NetworkSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+NetworkSession.swift"; sourceTree = ""; }; - B576FE0321E113E90016B39D /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; - B576FE0B21E116590016B39D /* NetworkManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManagerTests.swift; sourceTree = ""; }; - B576FE0D21E1D6310016B39D /* String+PercentEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+PercentEncoding.swift"; sourceTree = ""; }; - B576FE1121E1D82D0016B39D /* NetworkSessionMockFromFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkSessionMockFromFile.swift; sourceTree = ""; }; - B576FE1321E1D8A90016B39D /* Bundle+JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+JSON.swift"; sourceTree = ""; }; - B576FE1521E1D8CB0016B39D /* String+FileExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+FileExtension.swift"; sourceTree = ""; }; - B576FE1A21E28E8A0016B39D /* NetworkSessionMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkSessionMock.swift; sourceTree = ""; }; - B576FE1C21E28EF70016B39D /* URLSessionDataTaskMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSessionDataTaskMock.swift; sourceTree = ""; }; - B576FE2921E4240B0016B39D /* AppInfoFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfoFormatter.swift; sourceTree = ""; }; - B576FE2B21E42A230016B39D /* OutputListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutputListener.swift; sourceTree = ""; }; - B576FE2D21E5A8010016B39D /* Strongify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Strongify.swift; sourceTree = ""; }; - B576FE2F21E5BD130016B39D /* OutputListenerSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutputListenerSpec.swift; sourceTree = ""; }; - B576FE3221E985250016B39D /* SearchResultFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultFormatter.swift; sourceTree = ""; }; - B576FE3421E98AAE0016B39D /* StoreSearchSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreSearchSpec.swift; sourceTree = ""; }; - B578F060224FB5BD00D2086A /* ISAuthenticationResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISAuthenticationResponse.h; sourceTree = ""; }; - B5793E28219BDD4800135B39 /* JSON */ = {isa = PBXFileReference; lastKnownFileType = folder; path = JSON; sourceTree = ""; }; - B588CE0121DC89490047D305 /* ExternalCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalCommand.swift; sourceTree = ""; }; - B594B11F21D53A8200F3AC59 /* Uninstall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Uninstall.swift; sourceTree = ""; }; - B594B12121D5416100F3AC59 /* ListCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListCommandSpec.swift; sourceTree = ""; }; - B594B12421D580BB00F3AC59 /* UninstallCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UninstallCommandSpec.swift; sourceTree = ""; }; - B594B12621D5825800F3AC59 /* AppLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLibrary.swift; sourceTree = ""; }; - B594B12821D5831D00F3AC59 /* SoftwareProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftwareProduct.swift; sourceTree = ""; }; - B594B12A21D5837200F3AC59 /* CKSoftwareProduct+SoftwareProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CKSoftwareProduct+SoftwareProduct.swift"; sourceTree = ""; }; - B594B12D21D5850700F3AC59 /* AppLibraryMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLibraryMock.swift; sourceTree = ""; }; - B594B12F21D5855D00F3AC59 /* MasAppLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasAppLibrary.swift; sourceTree = ""; }; - B594B13121D5876200F3AC59 /* ResultPredicates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultPredicates.swift; sourceTree = ""; }; - B594B13521D6D68600F3AC59 /* VersionCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionCommandSpec.swift; sourceTree = ""; }; - B594B13721D6D6C100F3AC59 /* UpgradeCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpgradeCommandSpec.swift; sourceTree = ""; }; - B594B13921D6D70400F3AC59 /* SignOutCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignOutCommandSpec.swift; sourceTree = ""; }; - B594B13B21D6D72E00F3AC59 /* SignInCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignInCommandSpec.swift; sourceTree = ""; }; - B594B13D21D6D78900F3AC59 /* SearchCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchCommandSpec.swift; sourceTree = ""; }; - B594B13F21D6D8BF00F3AC59 /* ResetCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResetCommandSpec.swift; sourceTree = ""; }; - B594B14121D6D8EC00F3AC59 /* OutdatedCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OutdatedCommandSpec.swift; sourceTree = ""; }; - B594B14321D6D91800F3AC59 /* LuckyCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LuckyCommandSpec.swift; sourceTree = ""; }; - B594B14521D6D95700F3AC59 /* InstallCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstallCommandSpec.swift; sourceTree = ""; }; - B594B14721D6D98400F3AC59 /* InfoCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfoCommandSpec.swift; sourceTree = ""; }; - B594B14921D6D9AE00F3AC59 /* AccountCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountCommandSpec.swift; sourceTree = ""; }; - B594B14B21D8983700F3AC59 /* Home.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Home.swift; sourceTree = ""; }; - B594B14D21D8984500F3AC59 /* HomeCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeCommandSpec.swift; sourceTree = ""; }; - B594B14F21D8998000F3AC59 /* StoreSearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreSearch.swift; sourceTree = ""; }; - B594B15121D89A8B00F3AC59 /* MasStoreSearch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasStoreSearch.swift; sourceTree = ""; }; - B594B15321D89DF400F3AC59 /* SearchResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResult.swift; sourceTree = ""; }; - B594B15521D89F5200F3AC59 /* SearchResultList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchResultList.swift; sourceTree = ""; }; - B5DBF80C21DEE4E600F3B151 /* Open.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Open.swift; sourceTree = ""; }; - B5DBF80E21DEEB7B00F3B151 /* Vendor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Vendor.swift; sourceTree = ""; }; - B5DBF81021DEEC4200F3B151 /* VendorCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VendorCommandSpec.swift; sourceTree = ""; }; - B5DBF81221DEEC7C00F3B151 /* OpenCommandSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenCommandSpec.swift; sourceTree = ""; }; - B5DBF81421E02BA900F3B151 /* StoreSearchMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreSearchMock.swift; sourceTree = ""; }; - B5DBF81621E02E3400F3B151 /* OpenSystemCommandMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSystemCommandMock.swift; sourceTree = ""; }; - ED031A781B5127C00097692E /* mas */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mas; sourceTree = BUILT_PRODUCTS_DIR; }; - ED031A7B1B5127C00097692E /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - ED0F237E1B87522400AE40CD /* Install.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Install.swift; sourceTree = ""; }; - ED0F23821B87533A00AE40CD /* List.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = List.swift; sourceTree = ""; }; - ED0F23841B87536A00AE40CD /* Outdated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Outdated.swift; sourceTree = ""; }; - ED0F23861B87537200AE40CD /* Account.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; - ED0F23881B87543D00AE40CD /* PurchaseDownloadObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PurchaseDownloadObserver.swift; sourceTree = ""; }; - ED0F238A1B87569C00AE40CD /* Downloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Downloader.swift; sourceTree = ""; }; - ED0F238C1B8756E600AE40CD /* MASError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MASError.swift; sourceTree = ""; }; - ED0F238F1B87A56F00AE40CD /* ISStoreAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISStoreAccount.swift; sourceTree = ""; }; - EDA3BE511B8B84AF00C18D70 /* SSPurchase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SSPurchase.swift; sourceTree = ""; }; - EDB6CE8A1BAEB95100648B4D /* mas-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "mas-Info.plist"; sourceTree = ""; }; - EDB6CE8B1BAEC3D400648B4D /* Version.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; - EDC90B641C70045E0019E396 /* SignIn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignIn.swift; sourceTree = ""; }; - EDCBF9521D89AC6F000039C6 /* Reset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reset.swift; sourceTree = ""; }; - EDCBF9541D89CFC7000039C6 /* Utilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = ""; }; - EDD3B3621C34709400B56B88 /* Upgrade.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Upgrade.swift; sourceTree = ""; }; - EDE296521C700F4300554778 /* SignOut.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignOut.swift; sourceTree = ""; }; - F80B27B52611116A00A285C9 /* AppListFormatterSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppListFormatterSpec.swift; sourceTree = ""; }; - F80B27B92611118E00A285C9 /* AppListFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppListFormatter.swift; sourceTree = ""; }; - F8242D8020746A510026DF35 /* StoreAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAccount.swift; sourceTree = ""; }; - F83213A52173EF75008BA8A0 /* StoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreFoundation.framework; path = /System/Library/PrivateFrameworks/StoreFoundation.framework; sourceTree = ""; }; - F83213A62173EF75008BA8A0 /* CommerceKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CommerceKit.framework; path = /System/Library/PrivateFrameworks/CommerceKit.framework; sourceTree = ""; }; - F85DA8AD240C313900FE5650 /* MasAppLibrarySpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasAppLibrarySpec.swift; sourceTree = ""; }; - F85DA8AF240C32FA00FE5650 /* SoftwareMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftwareMap.swift; sourceTree = ""; }; - F85DA8B1240CBAFE00FE5650 /* CKSoftwareMap+SoftwareMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CKSoftwareMap+SoftwareMap.swift"; sourceTree = ""; }; - F88CB8E02404DAAD00B691B5 /* OpenSystemCommandSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSystemCommandSpec.swift; sourceTree = ""; }; - F8D095E925009640000899E6 /* SearchResultSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultSpec.swift; sourceTree = ""; }; - F8D095EB250096A6000899E6 /* SearchResultListSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchResultListSpec.swift; sourceTree = ""; }; - F8FB715220F2B41400F56FDC /* MasKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MasKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F8FB715420F2B41400F56FDC /* MasKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MasKit.h; sourceTree = ""; }; - F8FB715520F2B41400F56FDC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F8FB715A20F2B41400F56FDC /* MasKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MasKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - F8FB716120F2B41400F56FDC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F8FB719B20F2EC4500F56FDC /* CKAccountStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKAccountStore.h; sourceTree = ""; }; - F8FB719C20F2EC4500F56FDC /* CKDownloadQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKDownloadQueue.h; sourceTree = ""; }; - F8FB719D20F2EC4500F56FDC /* CKPurchaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKPurchaseController.h; sourceTree = ""; }; - F8FB719E20F2EC4500F56FDC /* CKServiceInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKServiceInterface.h; sourceTree = ""; }; - F8FB719F20F2EC4500F56FDC /* CKSoftwareMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKSoftwareMap.h; sourceTree = ""; }; - F8FB71A320F2EC4500F56FDC /* CKSoftwareProduct.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKSoftwareProduct.h; sourceTree = ""; }; - F8FB71A420F2EC4500F56FDC /* CKUpdate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKUpdate.h; sourceTree = ""; }; - F8FB71A520F2EC4500F56FDC /* ISAccountService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISAccountService.h; sourceTree = ""; }; - F8FB71A620F2EC4500F56FDC /* ISAuthenticationContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISAuthenticationContext.h; sourceTree = ""; }; - F8FB71A820F2EC4500F56FDC /* ISServiceProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISServiceProxy.h; sourceTree = ""; }; - F8FB71A920F2EC4500F56FDC /* ISServiceRemoteObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISServiceRemoteObject.h; sourceTree = ""; }; - F8FB71AA20F2EC4500F56FDC /* ISStoreAccount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISStoreAccount.h; sourceTree = ""; }; - F8FB71AB20F2EC4500F56FDC /* ISStoreClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ISStoreClient.h; sourceTree = ""; }; - F8FB71AD20F2EC4500F56FDC /* SSDownload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SSDownload.h; sourceTree = ""; }; - F8FB71AE20F2EC4500F56FDC /* SSDownloadMetadata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SSDownloadMetadata.h; sourceTree = ""; }; - F8FB71AF20F2EC4500F56FDC /* SSDownloadPhase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SSDownloadPhase.h; sourceTree = ""; }; - F8FB71B020F2EC4500F56FDC /* SSDownloadStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SSDownloadStatus.h; sourceTree = ""; }; - F8FB71B120F2EC4500F56FDC /* SSPurchase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SSPurchase.h; sourceTree = ""; }; - F8FB71B220F2EC4500F56FDC /* SSPurchaseResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SSPurchaseResponse.h; sourceTree = ""; }; - F8FB71B320F2EC7900F56FDC /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; - F8FB71B420F2EC8800F56FDC /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; - F8FB71B520F2F7E000F56FDC /* CKDownloadQueueObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKDownloadQueueObserver.h; sourceTree = ""; }; - F8FB71B620F2F87300F56FDC /* CKDownloadDirectory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CKDownloadDirectory.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - ED031A751B5127C00097692E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F83213A82173F5A7008BA8A0 /* MasKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8FB714F20F2B41400F56FDC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F83213A22173DC13008BA8A0 /* Commandant.framework in Frameworks */, - C56C4FF5262A50F5004F37EB /* Version in Frameworks */, - B5552928219A1BB900ACB4CA /* CommerceKit.framework in Frameworks */, - B5552929219A1BC700ACB4CA /* StoreFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8FB715720F2B41400F56FDC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B537017421A0F85B00538F78 /* Commandant.framework in Frameworks */, - F8FB715B20F2B41400F56FDC /* MasKit.framework in Frameworks */, - B555292F219A219100ACB4CA /* Nimble.framework in Frameworks */, - B555292E219A218E00ACB4CA /* Quick.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 90CB4068213F4DDD0044E445 /* Carthage */ = { - isa = PBXGroup; - children = ( - 90CB406B213F4DDD0044E445 /* Commandant.framework */, - 90CB406C213F4DDD0044E445 /* Nimble.framework */, - 90CB406A213F4DDD0044E445 /* Quick.framework */, - ); - name = Carthage; - path = Carthage/Build/Mac; - sourceTree = ""; - }; - B55B3D9021ED9B6A0009A1A5 /* Formatters */ = { - isa = PBXGroup; - children = ( - F80B27B52611116A00A285C9 /* AppListFormatterSpec.swift */, - B55B3D9121ED9B8C0009A1A5 /* SearchResultFormatterSpec.swift */, - ); - path = Formatters; - sourceTree = ""; - }; - B576FE0921E114BD0016B39D /* Network */ = { - isa = PBXGroup; - children = ( - B576FE0321E113E90016B39D /* NetworkManager.swift */, - B576FDFF21E113610016B39D /* NetworkSession.swift */, - B576FE0121E1139E0016B39D /* URLSession+NetworkSession.swift */, - ); - path = Network; - sourceTree = ""; - }; - B576FE0A21E116470016B39D /* Network */ = { - isa = PBXGroup; - children = ( - B576FE0B21E116590016B39D /* NetworkManagerTests.swift */, - B576FE1A21E28E8A0016B39D /* NetworkSessionMock.swift */, - B576FE1121E1D82D0016B39D /* NetworkSessionMockFromFile.swift */, - B576FDFD21E10B660016B39D /* TestURLSessionDelegate.swift */, - B576FDFB21E10A610016B39D /* URLSessionConfiguration+Tests.swift */, - B576FE1C21E28EF70016B39D /* URLSessionDataTaskMock.swift */, - ); - path = Network; - sourceTree = ""; - }; - B576FE1721E28E1F0016B39D /* ExternalCommands */ = { - isa = PBXGroup; - children = ( - B5DBF81621E02E3400F3B151 /* OpenSystemCommandMock.swift */, - F88CB8E02404DAAD00B691B5 /* OpenSystemCommandSpec.swift */, - ); - path = ExternalCommands; - sourceTree = ""; - }; - B576FE1821E28E460016B39D /* Nimble */ = { - isa = PBXGroup; - children = ( - B594B13121D5876200F3AC59 /* ResultPredicates.swift */, - ); - path = Nimble; - sourceTree = ""; - }; - B576FE1921E28E530016B39D /* Extensions */ = { - isa = PBXGroup; - children = ( - B576FE1321E1D8A90016B39D /* Bundle+JSON.swift */, - B576FE1521E1D8CB0016B39D /* String+FileExtension.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - B576FE1E21E2904E0016B39D /* Models */ = { - isa = PBXGroup; - children = ( - B594B15321D89DF400F3AC59 /* SearchResult.swift */, - B594B15521D89F5200F3AC59 /* SearchResultList.swift */, - B594B12821D5831D00F3AC59 /* SoftwareProduct.swift */, - ); - path = Models; - sourceTree = ""; - }; - B576FE1F21E290720016B39D /* Extensions */ = { - isa = PBXGroup; - children = ( - B576FE0D21E1D6310016B39D /* String+PercentEncoding.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - B576FE2021E2908D0016B39D /* Formatters */ = { - isa = PBXGroup; - children = ( - B576FE2921E4240B0016B39D /* AppInfoFormatter.swift */, - F80B27B92611118E00A285C9 /* AppListFormatter.swift */, - B576FE3221E985250016B39D /* SearchResultFormatter.swift */, - EDCBF9541D89CFC7000039C6 /* Utilities.swift */, - ); - path = Formatters; - sourceTree = ""; - }; - B576FE2121E292F80016B39D /* Controllers */ = { - isa = PBXGroup; - children = ( - B594B12621D5825800F3AC59 /* AppLibrary.swift */, - B594B12F21D5855D00F3AC59 /* MasAppLibrary.swift */, - B594B15121D89A8B00F3AC59 /* MasStoreSearch.swift */, - F85DA8AF240C32FA00FE5650 /* SoftwareMap.swift */, - B594B14F21D8998000F3AC59 /* StoreSearch.swift */, - ); - path = Controllers; - sourceTree = ""; - }; - B576FE2221E2932B0016B39D /* Controllers */ = { - isa = PBXGroup; - children = ( - B594B12D21D5850700F3AC59 /* AppLibraryMock.swift */, - F85DA8AD240C313900FE5650 /* MasAppLibrarySpec.swift */, - B576FDF221E03B780016B39D /* MasStoreSearchSpec.swift */, - B5DBF81421E02BA900F3B151 /* StoreSearchMock.swift */, - B576FE3421E98AAE0016B39D /* StoreSearchSpec.swift */, - ); - path = Controllers; - sourceTree = ""; - }; - B576FE2321E29CAC0016B39D /* Errors */ = { - isa = PBXGroup; - children = ( - ED0F238C1B8756E600AE40CD /* MASError.swift */, - ); - path = Errors; - sourceTree = ""; - }; - B576FE2421E29CE80016B39D /* Errors */ = { - isa = PBXGroup; - children = ( - B576FDF421E1078F0016B39D /* MASErrorTestCase.swift */, - ); - path = Errors; - sourceTree = ""; - }; - B576FE2521E29D2D0016B39D /* SupportingFiles */ = { - isa = PBXGroup; - children = ( - F8FB715520F2B41400F56FDC /* Info.plist */, - F8FB715420F2B41400F56FDC /* MasKit.h */, - ); - path = SupportingFiles; - sourceTree = ""; - }; - B576FE2621E29DD90016B39D /* SupportingFiles */ = { - isa = PBXGroup; - children = ( - F8FB716120F2B41400F56FDC /* Info.plist */, - ); - path = SupportingFiles; - sourceTree = ""; - }; - B588CE0021DC89250047D305 /* ExternalCommands */ = { - isa = PBXGroup; - children = ( - B588CE0121DC89490047D305 /* ExternalCommand.swift */, - B576FDF621E107AA0016B39D /* OpenSystemCommand.swift */, - ); - path = ExternalCommands; - sourceTree = ""; - }; - B594B12321D57FF300F3AC59 /* Commands */ = { - isa = PBXGroup; - children = ( - B594B14921D6D9AE00F3AC59 /* AccountCommandSpec.swift */, - B594B14D21D8984500F3AC59 /* HomeCommandSpec.swift */, - B594B14721D6D98400F3AC59 /* InfoCommandSpec.swift */, - B594B14521D6D95700F3AC59 /* InstallCommandSpec.swift */, - B594B12121D5416100F3AC59 /* ListCommandSpec.swift */, - B594B14321D6D91800F3AC59 /* LuckyCommandSpec.swift */, - B5DBF81221DEEC7C00F3B151 /* OpenCommandSpec.swift */, - B594B14121D6D8EC00F3AC59 /* OutdatedCommandSpec.swift */, - 60D8CF3524262F92005B4004 /* PurchaseCommandSpec.swift */, - B594B13F21D6D8BF00F3AC59 /* ResetCommandSpec.swift */, - B594B13D21D6D78900F3AC59 /* SearchCommandSpec.swift */, - B594B13B21D6D72E00F3AC59 /* SignInCommandSpec.swift */, - B594B13921D6D70400F3AC59 /* SignOutCommandSpec.swift */, - B594B12421D580BB00F3AC59 /* UninstallCommandSpec.swift */, - B594B13721D6D6C100F3AC59 /* UpgradeCommandSpec.swift */, - B5DBF81021DEEC4200F3B151 /* VendorCommandSpec.swift */, - B594B13521D6D68600F3AC59 /* VersionCommandSpec.swift */, - ); - path = Commands; - sourceTree = ""; - }; - B594B12C21D584E800F3AC59 /* Models */ = { - isa = PBXGroup; - children = ( - F8D095EB250096A6000899E6 /* SearchResultListSpec.swift */, - F8D095E925009640000899E6 /* SearchResultSpec.swift */, - B576FDF821E107CA0016B39D /* SoftwareProductMock.swift */, - ); - path = Models; - sourceTree = ""; - }; - ED031A6F1B5127C00097692E = { - isa = PBXGroup; - children = ( - 90CB4068213F4DDD0044E445 /* Carthage */, - EDFC76381B642A2E00D0DBD7 /* Frameworks */, - ED031A7A1B5127C00097692E /* mas */, - F8FB715320F2B41400F56FDC /* MasKit */, - F8FB715E20F2B41400F56FDC /* MasKitTests */, - F8FB719920F2EC4500F56FDC /* PrivateFrameworks */, - ED031A791B5127C00097692E /* Products */, - ); - sourceTree = ""; - }; - ED031A791B5127C00097692E /* Products */ = { - isa = PBXGroup; - children = ( - ED031A781B5127C00097692E /* mas */, - F8FB715220F2B41400F56FDC /* MasKit.framework */, - F8FB715A20F2B41400F56FDC /* MasKitTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - ED031A7A1B5127C00097692E /* mas */ = { - isa = PBXGroup; - children = ( - ED031A7B1B5127C00097692E /* main.swift */, - EDB6CE8A1BAEB95100648B4D /* mas-Info.plist */, - ); - path = mas; - sourceTree = ""; - }; - ED0F23801B87524700AE40CD /* Commands */ = { - isa = PBXGroup; - children = ( - ED0F23861B87537200AE40CD /* Account.swift */, - B594B14B21D8983700F3AC59 /* Home.swift */, - 900A1E801DBAC8CB0069B1A8 /* Info.swift */, - ED0F237E1B87522400AE40CD /* Install.swift */, - ED0F23821B87533A00AE40CD /* List.swift */, - 8078FAA71EC4F2FB004B5B3F /* Lucky.swift */, - B5DBF80C21DEE4E600F3B151 /* Open.swift */, - ED0F23841B87536A00AE40CD /* Outdated.swift */, - 75FB3E751F9F7841005B6F20 /* Purchase.swift */, - EDCBF9521D89AC6F000039C6 /* Reset.swift */, - 693A98981CBFFA760004D3B4 /* Search.swift */, - EDC90B641C70045E0019E396 /* SignIn.swift */, - EDE296521C700F4300554778 /* SignOut.swift */, - B594B11F21D53A8200F3AC59 /* Uninstall.swift */, - EDD3B3621C34709400B56B88 /* Upgrade.swift */, - B5DBF80E21DEEB7B00F3B151 /* Vendor.swift */, - EDB6CE8B1BAEC3D400648B4D /* Version.swift */, - ); - path = Commands; - sourceTree = ""; - }; - ED0F238E1B87A54700AE40CD /* AppStore */ = { - isa = PBXGroup; - children = ( - F85DA8B1240CBAFE00FE5650 /* CKSoftwareMap+SoftwareMap.swift */, - B594B12A21D5837200F3AC59 /* CKSoftwareProduct+SoftwareProduct.swift */, - ED0F238A1B87569C00AE40CD /* Downloader.swift */, - ED0F238F1B87A56F00AE40CD /* ISStoreAccount.swift */, - ED0F23881B87543D00AE40CD /* PurchaseDownloadObserver.swift */, - EDA3BE511B8B84AF00C18D70 /* SSPurchase.swift */, - F8242D8020746A510026DF35 /* StoreAccount.swift */, - ); - path = AppStore; - sourceTree = ""; - }; - EDFC76381B642A2E00D0DBD7 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F83213A62173EF75008BA8A0 /* CommerceKit.framework */, - F83213A52173EF75008BA8A0 /* StoreFoundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - F8FB715320F2B41400F56FDC /* MasKit */ = { - isa = PBXGroup; - children = ( - ED0F238E1B87A54700AE40CD /* AppStore */, - ED0F23801B87524700AE40CD /* Commands */, - B576FE2121E292F80016B39D /* Controllers */, - B576FE2321E29CAC0016B39D /* Errors */, - B576FE1F21E290720016B39D /* Extensions */, - B588CE0021DC89250047D305 /* ExternalCommands */, - B576FE2021E2908D0016B39D /* Formatters */, - B576FE1E21E2904E0016B39D /* Models */, - B576FE0921E114BD0016B39D /* Network */, - B576FE2521E29D2D0016B39D /* SupportingFiles */, - ); - path = MasKit; - sourceTree = ""; - }; - F8FB715E20F2B41400F56FDC /* MasKitTests */ = { - isa = PBXGroup; - children = ( - B594B12321D57FF300F3AC59 /* Commands */, - B576FE2221E2932B0016B39D /* Controllers */, - B576FE2421E29CE80016B39D /* Errors */, - B576FE1921E28E530016B39D /* Extensions */, - B576FE1721E28E1F0016B39D /* ExternalCommands */, - B55B3D9021ED9B6A0009A1A5 /* Formatters */, - B5793E28219BDD4800135B39 /* JSON */, - B594B12C21D584E800F3AC59 /* Models */, - B576FE0A21E116470016B39D /* Network */, - B576FE1821E28E460016B39D /* Nimble */, - B576FE2621E29DD90016B39D /* SupportingFiles */, - B576FE2B21E42A230016B39D /* OutputListener.swift */, - B576FE2F21E5BD130016B39D /* OutputListenerSpec.swift */, - B576FE2D21E5A8010016B39D /* Strongify.swift */, - ); - path = MasKitTests; - sourceTree = ""; - }; - F8FB719920F2EC4500F56FDC /* PrivateFrameworks */ = { - isa = PBXGroup; - children = ( - F8FB719A20F2EC4500F56FDC /* CommerceKit */, - F8FB71A220F2EC4500F56FDC /* StoreFoundation */, - ); - path = PrivateFrameworks; - sourceTree = ""; - }; - F8FB719A20F2EC4500F56FDC /* CommerceKit */ = { - isa = PBXGroup; - children = ( - F8FB719B20F2EC4500F56FDC /* CKAccountStore.h */, - F8FB71B620F2F87300F56FDC /* CKDownloadDirectory.h */, - F8FB719C20F2EC4500F56FDC /* CKDownloadQueue.h */, - F8FB71B520F2F7E000F56FDC /* CKDownloadQueueObserver.h */, - F8FB719D20F2EC4500F56FDC /* CKPurchaseController.h */, - F8FB719E20F2EC4500F56FDC /* CKServiceInterface.h */, - F8FB719F20F2EC4500F56FDC /* CKSoftwareMap.h */, - F8FB71B320F2EC7900F56FDC /* module.modulemap */, - ); - path = CommerceKit; - sourceTree = ""; - }; - F8FB71A220F2EC4500F56FDC /* StoreFoundation */ = { - isa = PBXGroup; - children = ( - F8FB71A320F2EC4500F56FDC /* CKSoftwareProduct.h */, - F8FB71A420F2EC4500F56FDC /* CKUpdate.h */, - F8FB71A520F2EC4500F56FDC /* ISAccountService.h */, - F8FB71A620F2EC4500F56FDC /* ISAuthenticationContext.h */, - B578F060224FB5BD00D2086A /* ISAuthenticationResponse.h */, - F8FB71A820F2EC4500F56FDC /* ISServiceProxy.h */, - F8FB71A920F2EC4500F56FDC /* ISServiceRemoteObject.h */, - F8FB71AA20F2EC4500F56FDC /* ISStoreAccount.h */, - F8FB71AB20F2EC4500F56FDC /* ISStoreClient.h */, - F8FB71B420F2EC8800F56FDC /* module.modulemap */, - F8FB71AD20F2EC4500F56FDC /* SSDownload.h */, - F8FB71AE20F2EC4500F56FDC /* SSDownloadMetadata.h */, - F8FB71AF20F2EC4500F56FDC /* SSDownloadPhase.h */, - F8FB71B020F2EC4500F56FDC /* SSDownloadStatus.h */, - F8FB71B120F2EC4500F56FDC /* SSPurchase.h */, - F8FB71B220F2EC4500F56FDC /* SSPurchaseResponse.h */, - ); - path = StoreFoundation; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - F8FB714D20F2B41400F56FDC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F83213892173D3E1008BA8A0 /* CKAccountStore.h in Headers */, - F83213912173D3E1008BA8A0 /* CKDownloadDirectory.h in Headers */, - F832138A2173D3E1008BA8A0 /* CKDownloadQueue.h in Headers */, - F832138B2173D3E1008BA8A0 /* CKDownloadQueueObserver.h in Headers */, - F832138C2173D3E1008BA8A0 /* CKPurchaseController.h in Headers */, - F832138D2173D3E1008BA8A0 /* CKServiceInterface.h in Headers */, - F832138E2173D3E1008BA8A0 /* CKSoftwareMap.h in Headers */, - F83213922173D5AB008BA8A0 /* CKSoftwareProduct.h in Headers */, - F83213932173D5AB008BA8A0 /* CKUpdate.h in Headers */, - F83213942173D5AB008BA8A0 /* ISAccountService.h in Headers */, - F83213952173D5AB008BA8A0 /* ISAuthenticationContext.h in Headers */, - B578F061224FB5BD00D2086A /* ISAuthenticationResponse.h in Headers */, - F83213972173D5AB008BA8A0 /* ISServiceProxy.h in Headers */, - F83213982173D5AB008BA8A0 /* ISServiceRemoteObject.h in Headers */, - F83213992173D5AB008BA8A0 /* ISStoreAccount.h in Headers */, - F832139A2173D5AB008BA8A0 /* ISStoreClient.h in Headers */, - F8FB716220F2B41400F56FDC /* MasKit.h in Headers */, - F832139C2173D5B2008BA8A0 /* SSDownload.h in Headers */, - F832139D2173D5B2008BA8A0 /* SSDownloadMetadata.h in Headers */, - F832139E2173D5B2008BA8A0 /* SSDownloadPhase.h in Headers */, - F832139F2173D5B2008BA8A0 /* SSDownloadStatus.h in Headers */, - F83213A02173D5B2008BA8A0 /* SSPurchase.h in Headers */, - F83213A12173D5B2008BA8A0 /* SSPurchaseResponse.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - ED031A771B5127C00097692E /* mas */ = { - isa = PBXNativeTarget; - buildConfigurationList = ED031A7F1B5127C00097692E /* Build configuration list for PBXNativeTarget "mas" */; - buildPhases = ( - 90CB4073213F4E070044E445 /* Copy Debugging Symbols */, - ED031A741B5127C00097692E /* Sources */, - ED031A751B5127C00097692E /* Frameworks */, - ED031A761B5127C00097692E /* CopyFiles */, - E7460A391382D898934EFFBD /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - F83213882173D2EB008BA8A0 /* PBXTargetDependency */, - ); - name = mas; - productName = "mas-cli"; - productReference = ED031A781B5127C00097692E /* mas */; - productType = "com.apple.product-type.tool"; - }; - F8FB715120F2B41400F56FDC /* MasKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = F8FB716720F2B41400F56FDC /* Build configuration list for PBXNativeTarget "MasKit" */; - buildPhases = ( - F8FB714D20F2B41400F56FDC /* Headers */, - F8FB714E20F2B41400F56FDC /* Sources */, - B576FE3121E96E6C0016B39D /* 🚨 Lint */, - F8FB714F20F2B41400F56FDC /* Frameworks */, - F83213A72173F58B008BA8A0 /* Copy Frameworks */, - F8FB715020F2B41400F56FDC /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MasKit; - packageProductDependencies = ( - C56C4FF4262A50F5004F37EB /* Version */, - ); - productName = MasKit; - productReference = F8FB715220F2B41400F56FDC /* MasKit.framework */; - productType = "com.apple.product-type.framework"; - }; - F8FB715920F2B41400F56FDC /* MasKitTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = F8FB716820F2B41400F56FDC /* Build configuration list for PBXNativeTarget "MasKitTests" */; - buildPhases = ( - F8FB715620F2B41400F56FDC /* Sources */, - F8FB715720F2B41400F56FDC /* Frameworks */, - F8FB715820F2B41400F56FDC /* Resources */, - B5552935219A23EE00ACB4CA /* Copy Carthage Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - F8FB715D20F2B41400F56FDC /* PBXTargetDependency */, - ); - name = MasKitTests; - productName = MasKitTests; - productReference = F8FB715A20F2B41400F56FDC /* MasKitTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - ED031A701B5127C00097692E /* Project object */ = { - isa = PBXProject; - attributes = { - DefaultBuildSystemTypeForWorkspace = Latest; - LastSwiftMigration = 0730; - LastSwiftUpdateCheck = 1000; - LastUpgradeCheck = 1200; - ORGANIZATIONNAME = "mas-cli"; - TargetAttributes = { - ED031A771B5127C00097692E = { - CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 1020; - }; - F8FB715120F2B41400F56FDC = { - CreatedOnToolsVersion = 10.0; - LastSwiftMigration = 1020; - ProvisioningStyle = Automatic; - }; - F8FB715920F2B41400F56FDC = { - CreatedOnToolsVersion = 10.0; - LastSwiftMigration = 1020; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = ED031A731B5127C00097692E /* Build configuration list for PBXProject "mas-cli" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = ED031A6F1B5127C00097692E; - packageReferences = ( - C56C4FF0262A4ED0004F37EB /* XCRemoteSwiftPackageReference "Version" */, - ); - productRefGroup = ED031A791B5127C00097692E /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - ED031A771B5127C00097692E /* mas */, - F8FB715120F2B41400F56FDC /* MasKit */, - F8FB715920F2B41400F56FDC /* MasKitTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - E7460A391382D898934EFFBD /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8FB715020F2B41400F56FDC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8FB715820F2B41400F56FDC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B5793E29219BDD4800135B39 /* JSON in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - B576FE3121E96E6C0016B39D /* 🚨 Lint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "🚨 Lint"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/zsh; - shellScript = "script/lint\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - ED031A741B5127C00097692E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED031A7C1B5127C00097692E /* main.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8FB714E20F2B41400F56FDC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F8FB716F20F2B4DD00F56FDC /* Account.swift in Sources */, - B576FE2A21E4240B0016B39D /* AppInfoFormatter.swift in Sources */, - B594B12721D5825800F3AC59 /* AppLibrary.swift in Sources */, - F85DA8B2240CBAFE00FE5650 /* CKSoftwareMap+SoftwareMap.swift in Sources */, - B594B12B21D5837200F3AC59 /* CKSoftwareProduct+SoftwareProduct.swift in Sources */, - F8FB716A20F2B4DD00F56FDC /* Downloader.swift in Sources */, - B588CE0221DC89490047D305 /* ExternalCommand.swift in Sources */, - B594B14C21D8983700F3AC59 /* Home.swift in Sources */, - F8FB717020F2B4DD00F56FDC /* Info.swift in Sources */, - F8FB717120F2B4DD00F56FDC /* Install.swift in Sources */, - F8FB716B20F2B4DD00F56FDC /* ISStoreAccount.swift in Sources */, - F8FB717220F2B4DD00F56FDC /* List.swift in Sources */, - F8FB717320F2B4DD00F56FDC /* Lucky.swift in Sources */, - B594B13021D5855D00F3AC59 /* MasAppLibrary.swift in Sources */, - F8FB717B20F2B4DD00F56FDC /* MASError.swift in Sources */, - B594B15221D89A8B00F3AC59 /* MasStoreSearch.swift in Sources */, - B576FE0421E113E90016B39D /* NetworkManager.swift in Sources */, - B576FE0021E113610016B39D /* NetworkSession.swift in Sources */, - B5DBF80D21DEE4E600F3B151 /* Open.swift in Sources */, - B576FDF721E107AA0016B39D /* OpenSystemCommand.swift in Sources */, - F8FB717420F2B4DD00F56FDC /* Outdated.swift in Sources */, - 75FB3E761F9F7841005B6F20 /* Purchase.swift in Sources */, - F80B27BA2611118E00A285C9 /* AppListFormatter.swift in Sources */, - F8FB716C20F2B4DD00F56FDC /* PurchaseDownloadObserver.swift in Sources */, - F8FB717520F2B4DD00F56FDC /* Reset.swift in Sources */, - F8FB717620F2B4DD00F56FDC /* Search.swift in Sources */, - B594B15421D89DF400F3AC59 /* SearchResult.swift in Sources */, - B576FE3321E985250016B39D /* SearchResultFormatter.swift in Sources */, - B576FDFA21E1081C0016B39D /* SearchResultList.swift in Sources */, - F8FB717720F2B4DD00F56FDC /* SignIn.swift in Sources */, - F8FB717820F2B4DD00F56FDC /* SignOut.swift in Sources */, - F85DA8B0240C32FA00FE5650 /* SoftwareMap.swift in Sources */, - B594B12921D5831D00F3AC59 /* SoftwareProduct.swift in Sources */, - F8FB716D20F2B4DD00F56FDC /* SSPurchase.swift in Sources */, - F8FB716E20F2B4DD00F56FDC /* StoreAccount.swift in Sources */, - B594B15021D8998000F3AC59 /* StoreSearch.swift in Sources */, - B576FE0E21E1D6310016B39D /* String+PercentEncoding.swift in Sources */, - B594B12021D53A8200F3AC59 /* Uninstall.swift in Sources */, - F8FB717920F2B4DD00F56FDC /* Upgrade.swift in Sources */, - B576FE0221E1139E0016B39D /* URLSession+NetworkSession.swift in Sources */, - F8FB717D20F2B4DD00F56FDC /* Utilities.swift in Sources */, - B5DBF80F21DEEB7B00F3B151 /* Vendor.swift in Sources */, - F8FB717A20F2B4DD00F56FDC /* Version.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F8FB715620F2B41400F56FDC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B594B14A21D6D9AE00F3AC59 /* AccountCommandSpec.swift in Sources */, - B594B12E21D5850700F3AC59 /* AppLibraryMock.swift in Sources */, - B576FE1421E1D8A90016B39D /* Bundle+JSON.swift in Sources */, - B594B14E21D8984500F3AC59 /* HomeCommandSpec.swift in Sources */, - B594B14821D6D98400F3AC59 /* InfoCommandSpec.swift in Sources */, - B594B14621D6D95700F3AC59 /* InstallCommandSpec.swift in Sources */, - B594B12221D5416100F3AC59 /* ListCommandSpec.swift in Sources */, - B594B14421D6D91800F3AC59 /* LuckyCommandSpec.swift in Sources */, - F85DA8AE240C313900FE5650 /* MasAppLibrarySpec.swift in Sources */, - B576FDF521E1078F0016B39D /* MASErrorTestCase.swift in Sources */, - B576FDF321E03B780016B39D /* MasStoreSearchSpec.swift in Sources */, - B576FE0C21E116590016B39D /* NetworkManagerTests.swift in Sources */, - B576FE1B21E28E8A0016B39D /* NetworkSessionMock.swift in Sources */, - B576FE1221E1D82D0016B39D /* NetworkSessionMockFromFile.swift in Sources */, - B5DBF81321DEEC7C00F3B151 /* OpenCommandSpec.swift in Sources */, - B5DBF81721E02E3400F3B151 /* OpenSystemCommandMock.swift in Sources */, - F88CB8E12404DAAD00B691B5 /* OpenSystemCommandSpec.swift in Sources */, - B594B14221D6D8EC00F3AC59 /* OutdatedCommandSpec.swift in Sources */, - B576FE2C21E42A230016B39D /* OutputListener.swift in Sources */, - B576FE3021E5BD130016B39D /* OutputListenerSpec.swift in Sources */, - 60D8CF3624262F92005B4004 /* PurchaseCommandSpec.swift in Sources */, - B594B14021D6D8BF00F3AC59 /* ResetCommandSpec.swift in Sources */, - B594B13221D5876200F3AC59 /* ResultPredicates.swift in Sources */, - B594B13E21D6D78900F3AC59 /* SearchCommandSpec.swift in Sources */, - B55B3D9221ED9B8C0009A1A5 /* SearchResultFormatterSpec.swift in Sources */, - F8D095EC250096A6000899E6 /* SearchResultListSpec.swift in Sources */, - F8D095EA25009640000899E6 /* SearchResultSpec.swift in Sources */, - B594B13C21D6D72E00F3AC59 /* SignInCommandSpec.swift in Sources */, - B594B13A21D6D70400F3AC59 /* SignOutCommandSpec.swift in Sources */, - B576FDF921E107CA0016B39D /* SoftwareProductMock.swift in Sources */, - B5DBF81521E02BA900F3B151 /* StoreSearchMock.swift in Sources */, - B576FE3521E98AAE0016B39D /* StoreSearchSpec.swift in Sources */, - B576FE1621E1D8CB0016B39D /* String+FileExtension.swift in Sources */, - F80B27B62611116A00A285C9 /* AppListFormatterSpec.swift in Sources */, - B576FE2E21E5A8010016B39D /* Strongify.swift in Sources */, - B576FDFE21E10B660016B39D /* TestURLSessionDelegate.swift in Sources */, - B594B12521D580BB00F3AC59 /* UninstallCommandSpec.swift in Sources */, - B594B13821D6D6C100F3AC59 /* UpgradeCommandSpec.swift in Sources */, - B576FDFC21E10A610016B39D /* URLSessionConfiguration+Tests.swift in Sources */, - B576FE1D21E28EF70016B39D /* URLSessionDataTaskMock.swift in Sources */, - B5DBF81121DEEC4200F3B151 /* VendorCommandSpec.swift in Sources */, - B594B13621D6D68600F3AC59 /* VersionCommandSpec.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - F83213882173D2EB008BA8A0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F8FB715120F2B41400F56FDC /* MasKit */; - targetProxy = F83213872173D2EB008BA8A0 /* PBXContainerItemProxy */; - }; - F8FB715D20F2B41400F56FDC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F8FB715120F2B41400F56FDC /* MasKit */; - targetProxy = F8FB715C20F2B41400F56FDC /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - ED031A7D1B5127C00097692E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - CURRENT_PROJECT_VERSION = 10800000; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - 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.11; - MARKETING_VERSION = 1.8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.mphys.mas-cli"; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - ED031A7E1B5127C00097692E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CREATE_INFOPLIST_SECTION_IN_BINARY = YES; - CURRENT_PROJECT_VERSION = 10800000; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - 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.11; - MARKETING_VERSION = 1.8.1; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.mphys.mas-cli"; - SDKROOT = macosx; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - ED031A801B5127C00097692E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - INFOPLIST_FILE = "mas/mas-Info.plist"; - INSTALL_PATH = /bin; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/.", - "@executable_path/MasKit.framework/Versions/Current/Frameworks", - "@executable_path/../Frameworks", - "@executable_path/../Frameworks/MasKit.framework/Versions/Current/Frameworks", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.mphys.mas-cli"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_FORCE_DYNAMIC_LINK_STDLIB = YES; - SWIFT_FORCE_STATIC_LINK_STDLIB = NO; - SWIFT_VERSION = 5.2; - }; - name = Debug; - }; - ED031A811B5127C00097692E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEPLOYMENT_LOCATION = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - INFOPLIST_FILE = "mas/mas-Info.plist"; - INSTALL_PATH = /bin; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/.", - "@executable_path/MasKit.framework/Versions/Current/Frameworks", - "@executable_path/../Frameworks", - "@executable_path/../Frameworks/MasKit.framework/Versions/Current/Frameworks", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.mphys.mas-cli"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_FORCE_DYNAMIC_LINK_STDLIB = YES; - SWIFT_FORCE_STATIC_LINK_STDLIB = NO; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.2; - }; - name = Release; - }; - F8FB716320F2B41400F56FDC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 7.0; - DYLIB_CURRENT_VERSION = 7.0; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MasKit/SupportingFiles/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = at.phatbl.MasKit; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_INCLUDE_PATHS = "$(inherited) $(SRCROOT)/PrivateFrameworks/CommerceKit $(SRCROOT)/PrivateFrameworks/StoreFoundation"; - }; - name = Debug; - }; - F8FB716420F2B41400F56FDC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 7.0; - DYLIB_CURRENT_VERSION = 7.0; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MasKit/SupportingFiles/Info.plist; - INSTALL_PATH = /Frameworks; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = at.phatbl.MasKit; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_INCLUDE_PATHS = "$(inherited) $(SRCROOT)/PrivateFrameworks/CommerceKit $(SRCROOT)/PrivateFrameworks/StoreFoundation"; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - F8FB716520F2B41400F56FDC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MasKitTests/SupportingFiles/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = at.phatbl.MasKitTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.2; - }; - name = Debug; - }; - F8FB716620F2B41400F56FDC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MasKitTests/SupportingFiles/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = at.phatbl.MasKitTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.2; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - ED031A731B5127C00097692E /* Build configuration list for PBXProject "mas-cli" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ED031A7D1B5127C00097692E /* Debug */, - ED031A7E1B5127C00097692E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ED031A7F1B5127C00097692E /* Build configuration list for PBXNativeTarget "mas" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ED031A801B5127C00097692E /* Debug */, - ED031A811B5127C00097692E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F8FB716720F2B41400F56FDC /* Build configuration list for PBXNativeTarget "MasKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F8FB716320F2B41400F56FDC /* Debug */, - F8FB716420F2B41400F56FDC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F8FB716820F2B41400F56FDC /* Build configuration list for PBXNativeTarget "MasKitTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F8FB716520F2B41400F56FDC /* Debug */, - F8FB716620F2B41400F56FDC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - C56C4FF0262A4ED0004F37EB /* XCRemoteSwiftPackageReference "Version" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/mxcl/Version.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - C56C4FF4262A50F5004F37EB /* Version */ = { - isa = XCSwiftPackageProductDependency; - package = C56C4FF0262A4ED0004F37EB /* XCRemoteSwiftPackageReference "Version" */; - productName = Version; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = ED031A701B5127C00097692E /* Project object */; -} diff --git a/mas-cli.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mas-cli.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index e1a2a1a5e..000000000 --- a/mas-cli.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mas-cli.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mas-cli.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/mas-cli.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/mas-cli.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mas-cli.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 3ddf867a1..000000000 --- a/mas-cli.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - BuildSystemType - Latest - - diff --git a/mas-cli.xcodeproj/xcshareddata/xcschemes/MasKit.xcscheme b/mas-cli.xcodeproj/xcshareddata/xcschemes/MasKit.xcscheme deleted file mode 100644 index 554cfbc2c..000000000 --- a/mas-cli.xcodeproj/xcshareddata/xcschemes/MasKit.xcscheme +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mas-cli.xcodeproj/xcshareddata/xcschemes/mas-cli Debug.xcscheme b/mas-cli.xcodeproj/xcshareddata/xcschemes/mas-cli Debug.xcscheme deleted file mode 100644 index 8911205ad..000000000 --- a/mas-cli.xcodeproj/xcshareddata/xcschemes/mas-cli Debug.xcscheme +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mas-cli.xcodeproj/xcshareddata/xcschemes/mas-cli Release.xcscheme b/mas-cli.xcodeproj/xcshareddata/xcschemes/mas-cli Release.xcscheme deleted file mode 100644 index 15f9e076b..000000000 --- a/mas-cli.xcodeproj/xcshareddata/xcschemes/mas-cli Release.xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mas.xcworkspace/contents.xcworkspacedata b/mas.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 75bc7af5f..000000000 --- a/mas.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mas.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mas.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/mas.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/mas.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mas.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 3ddf867a1..000000000 --- a/mas.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - BuildSystemType - Latest - - diff --git a/mas.xcworkspace/xcshareddata/swiftpm/Package.resolved b/mas.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 5c4f7c3d6..000000000 --- a/mas.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,16 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "Version", - "repositoryURL": "https://github.com/mxcl/Version.git", - "state": { - "branch": null, - "revision": "a94b48f36763c05629fc102837398505032dead9", - "version": "2.0.0" - } - } - ] - }, - "version": 1 -} diff --git a/mas/mas-Info.plist b/mas/mas-Info.plist deleted file mode 100644 index cb345578d..000000000 --- a/mas/mas-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en_GB - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - mas-cli - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/script/archive b/script/archive index 4e079290f..1f405726b 100755 --- a/script/archive +++ b/script/archive @@ -6,21 +6,8 @@ # Compresses artifacts so the can be archived more easily. # -pushd build +echo "==> 🗜ī¸ Compressing mas" +zip .build/mas.zip .build/apple/Products/Release/mas -echo "==> 🗜ī¸ Compressing mas.xcarchive" -zip -r mas.xcarchive.zip mas.xcarchive - -echo "==> ī¸đŸ—œī¸ Compressing binary and framework" -pushd mas.xcarchive/Products -zip -r \ - mas-cli.zip \ - bin/mas \ - Frameworks/MasKit.framework -mv mas-cli.zip ../../ -popd - -echo "==> đŸ”ĸ Files Hashes" -shasum -a 256 mas-cli.zip mas.xcarchive.zip - -popd +echo "==> đŸ”ĸ File Hash" +shasum -a 256 .build/mas.zip diff --git a/script/bootstrap b/script/bootstrap index e14dd6227..d4e3aec27 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -18,8 +18,8 @@ main() { rm -f Brewfile.lock.json brew bundle install --no-upgrade --verbose - # Download and build project dependencies - carthage bootstrap --platform macOS --cache-builds + # Generate Package.swift + script/version } main diff --git a/script/bottle b/script/bottle index 97e8c0be3..8f5a5e7f6 100755 --- a/script/bottle +++ b/script/bottle @@ -12,12 +12,12 @@ # Variables # -BUILD_DIR="$PWD/build" +BUILD_DIR="$PWD/.build" BOTTLE_DIR="$BUILD_DIR/bottles" VERSION=$(script/version) ROOT_URL="https://dl.bintray.com/phatblat/mas-bottles" -# Supports macOS versions 11.0 (arm64 & x86_64), 10.15, 10.14, 10.13, 10.12, 10.11 +# Supports macOS versions 11 (arm64 & x86_64), 10.15, 10.14, 10.13, 10.12, 10.11 OS_NAMES=(arm64_big_sur big_sur catalina mojave high_sierra sierra el_capitan) # Semantic version number split into a list using Ugly, bash 3 compatible syntax @@ -65,11 +65,6 @@ if command -v mas >/dev/null; then script/uninstall || true # ignore failure fi -# Purge the Carthage cache to avoid this error from Homebrew sandboxing: -# A shell task (/usr/bin/env git checkout --quiet --force 0.15.0 (launched in /Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant)) failed with exit code 128: -# fatal: Unable to create '/Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant/./index.lock': Operation not permitted -rm -rf ~/Library/Caches/org.carthage.CarthageKit - ################################################################################ # # Build the formula for the current macOS version and architecture. diff --git a/script/brew_formula_update b/script/brew_formula_update index 2c3d56954..dd4db2ba3 100755 --- a/script/brew_formula_update +++ b/script/brew_formula_update @@ -32,11 +32,6 @@ else REVISION=$(git rev-parse "$VERSION") fi -# Purge the Carthage cache to avoid this error from Homebrew sandboxing: -# A shell task (/usr/bin/env git checkout --quiet --force 0.15.0 (launched in /Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant)) failed with exit code 128: -# fatal: Unable to create '/Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant/./index.lock': Operation not permitted -rm -rf ~/Library/Caches/org.carthage.CarthageKit - echo "Checking to see if this update can be a simple bump." diff "Homebrew/mas.rb" "$BREW_CORE_PATH/mas.rb" diff --git a/script/brew_release_validate b/script/brew_release_validate index 108a4143f..bc4f76709 100755 --- a/script/brew_release_validate +++ b/script/brew_release_validate @@ -7,11 +7,6 @@ # https://github.com/Homebrew/homebrew-core/blob/master/CONTRIBUTING.md#to-contribute-a-fix-to-the-foo-formula # -# Purge the Carthage cache to avoid this error from Homebrew sandboxing: -# A shell task (/usr/bin/env git checkout --quiet --force 0.15.0 (launched in /Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant)) failed with exit code 128: -# fatal: Unable to create '/Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant/./index.lock': Operation not permitted -rm -rf ~/Library/Caches/org.carthage.CarthageKit - brew uninstall --force mas brew install --build-from-source mas brew test mas diff --git a/script/build b/script/build index a0b3cba41..702c77dfc 100755 --- a/script/build +++ b/script/build @@ -3,68 +3,11 @@ # script/build # mas # -# Builds the Xcode project. Uses xcpretty gem to format output. +# Builds the Swift Package. # -# If the TRAVIS_TAG env variable is present, it generates an archive. -# https://docs.travis-ci.com/user/environment-variables/#default-environment-variables -# - -BUILD_DIR="$PWD/build" -WORKSPACE="mas.xcworkspace" -SCHEME="mas-cli Release" -CONFIG="Release" -VERSION=$(script/version) - -main() { - xcodebuild -version - script/clean - - carthage build \ - --platform macOS \ - --cache-builds \ - --configuration "$CONFIG" - - archive -} - -# OBJROOT - Intermediate Build Files Path -# The path where intermediate files will be placed during a build. Intermediate files include generated sources, object -# files, etc. Shell script build phases can place and access files here, as well. Typically this path is not set per -# target, but is set per project or per user. By default, this is set to `$(PROJECT_DIR)/build`. - -# SHARED_PRECOMPS_DIR - Precompiled Headers Cache Path -# The path where precompiled prefix header files are placed during a build. Defaults to `$(OBJROOT)/SharedPrecompiledHeaders`. -# Using a common location allows precompiled headers to be shared between multiple projects. - -# SYMROOT - Build Procucts Path -# The path at which all products will be placed when performing a build. Typically this path is not set per target, -# but is set per-project or per-user. By default, this is set to `$(PROJECT_DIR)/build`. - -build() { - echo "==> 🏗ī¸ Building mas ($VERSION)" - set -o pipefail && - xcodebuild \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -configuration "$CONFIG" \ - OBJROOT="$BUILD_DIR" \ - SYMROOT="$BUILD_DIR" \ - build | - bundle exec xcpretty --color -} -archive() { - echo "==> đŸ“Ļ Archiving mas ($VERSION)" - set -o pipefail && - xcodebuild \ - -workspace "$WORKSPACE" \ - -scheme "$SCHEME" \ - -configuration "$CONFIG" \ - -archivePath "$BUILD_DIR/mas.xcarchive" \ - OBJROOT="$BUILD_DIR" \ - SYMROOT="$BUILD_DIR" \ - archive | - bundle exec xcpretty --color -} +script/clean +script/lint -main +echo "==> 🏗ī¸ Building mas ($(script/version))" +swift build --configuration release --arch arm64 --arch x86_64 diff --git a/script/build_artifacts b/script/build_artifacts index 479ddae10..a3b3a10da 100755 --- a/script/build_artifacts +++ b/script/build_artifacts @@ -13,5 +13,4 @@ echo "Building mas $VERSION artifacts" script/clean script/build script/archive -script/install script/package diff --git a/script/clean b/script/clean index 2fbaedbd2..19b95d0b5 100755 --- a/script/clean +++ b/script/clean @@ -3,16 +3,8 @@ # script/clean # mas # -# Deletes the build and temp install directories. +# Deletes the build directory. # -BUILD_DIR=build -INSTALL_DIR=/tmp/mas-cli.dst - -main() { - rm -rf Carthage/Build - rm -rf ${BUILD_DIR:?} - rm -rf ${INSTALL_DIR:?} -} - -main +BUILD_DIR=.build +rm -rf ${BUILD_DIR:?} diff --git a/script/format b/script/format index 02969fd24..a14c36475 100755 --- a/script/format +++ b/script/format @@ -22,11 +22,11 @@ done echo echo "--> 🕊ī¸ Swift" -swiftformat . -for SOURCE in mas MasKit MasKitTests; do +for SOURCE in Package.swift Sources Tests; do + swiftformat ${SOURCE} swift-format format --in-place --configuration .swift-format --recursive ${SOURCE} + swiftlint lint --fix --strict ${SOURCE} done -swiftlint lint --fix --strict echo echo "--> 📜 Bash" diff --git a/script/install b/script/install index 3623c4e8b..20c4466d6 100755 --- a/script/install +++ b/script/install @@ -3,27 +3,15 @@ # script/install # mas # -# Installs mas into PREFIX using the following steps: -# -# 1. Invokes the xcodebuild install action. -# 2. Copies the mas binary and MasKit.framework bundle into their correct -# relative positions under PREFIX. +# Installs mas into PREFIX. # # NOTE: This script is called by the mas Homebrew formula so it has only system -# dependencies aside from xcodebuild. +# dependencies aside from Swift. # https://github.com/Homebrew/homebrew-core/blob/master/Formula/mas.rb # -BUILD_DIR="$PWD/build" -PROJECT="mas-cli.xcodeproj" -SCHEME="mas-cli Release" -CONFIG="Release" VERSION=$(script/version) -# Destination for `xcodebuild install` -INSTALL_TEMPORARY_FOLDER=${DSTROOT:-build/distributions} - -# Final destination. # Override default prefix path with optional 1st arg if test -n "$1"; then PREFIX="$1" @@ -33,23 +21,7 @@ else PREFIX=/usr/local fi -echo "==> 📲 Installing mas ($VERSION) to $PREFIX" - -xcodebuild \ - -project "$PROJECT" \ - -scheme "$SCHEME" \ - -configuration "$CONFIG" \ - OBJROOT="$BUILD_DIR" \ - SYMROOT="$BUILD_DIR" \ - DSTROOT="$INSTALL_TEMPORARY_FOLDER" \ - install - -# Deep copy MasKit.framework -ditto -v \ - "$INSTALL_TEMPORARY_FOLDER/Frameworks" \ - "$PREFIX/Frameworks" - -# Copy mas binary +echo "==> 📲 Installing mas ($VERSION) for $ARCH to $PREFIX" ditto -v \ - "$INSTALL_TEMPORARY_FOLDER/bin" \ - "$PREFIX/bin" + ".build/apple/Products/Release/mas" \ + "$PREFIX/bin/" diff --git a/script/lint b/script/lint index 82357e095..93503abc2 100755 --- a/script/lint +++ b/script/lint @@ -24,11 +24,11 @@ git diff --check echo echo "--> 🕊ī¸ Swift" -swiftformat --lint . -for SOURCE in mas MasKit MasKitTests; do +for SOURCE in Package.swift Sources Tests; do + swiftformat --lint ${SOURCE} swift-format lint --configuration .swift-format --recursive ${SOURCE} + swiftlint lint --strict ${SOURCE} done -swiftlint lint --strict echo echo "--> 📜 Bash" diff --git a/script/package b/script/package index b98961463..526c2c410 100755 --- a/script/package +++ b/script/package @@ -6,46 +6,38 @@ # Builds macOS installer component and distribution packages. # -BUILD_DIR="$PWD/build" +BUILD_DIR="$PWD/.build" COMPONENT_PACKAGE="$BUILD_DIR/mas_components.pkg" DISTRIBUTION_PACKAGE="$BUILD_DIR/mas.pkg" IDENTIFIER="com.mphys.mas-cli" -# Component package definition -COMPONENTS_PLIST="Package/Components.plist" - # Distribution package definition # https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html DISTRIBUTION_PLIST="Package/Distribution.plist" -# Destination for `xcodebuild install` -# DSTROOT will be updated if unset. -INSTALL_TEMPORARY_FOLDER=${DSTROOT:-build/distributions} -mkdir -p "$INSTALL_TEMPORARY_FOLDER" +# Destination for install root +DSTROOT=.build/distributions +script/install "$DSTROOT/usr/local" VERSION=$(script/version) echo "==> đŸ“Ļ Assemble an installer package" # Assemble macOS installer component package (aka "product archive"). -# Using /usr/local prefix to avoid the following errors with "/" -# - installer: The install failed (The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.) -# - GUI warning: This package is incompatible with this version of macOS and may fail to install. (may damage your system... ) pkgbuild \ --identifier "$IDENTIFIER" \ - --install-location "/usr/local" \ + --install-location "/" \ --version "$VERSION" \ - --root "$INSTALL_TEMPORARY_FOLDER" \ - --component-plist "$COMPONENTS_PLIST" \ + --root "$DSTROOT" \ "$COMPONENT_PACKAGE" # Build distribution package (aka "product archive"). Not sure why, but this is how Carthage does it. -# https://github.com/Carthage/Carthage/blob/master/Makefile#L87 +# https://github.com/Carthage/Carthage/blob/master/Makefile#L69 productbuild \ --distribution "$DISTRIBUTION_PLIST" \ --package-path "$BUILD_DIR" \ "$DISTRIBUTION_PACKAGE" -echo "==> đŸ”ĸ Files Hashes" +echo "==> đŸ”ĸ File Hash" shasum -a 256 "$DISTRIBUTION_PACKAGE" diff --git a/script/package_install b/script/package_install index 61def1ae6..3419135c9 100755 --- a/script/package_install +++ b/script/package_install @@ -11,7 +11,7 @@ IDENTIFIER=com.mphys.mas-cli echo "==> 📲 Installing mas" sudo installer \ - -pkg build/mas.pkg \ + -pkg .build/mas.pkg \ -target / pkgutil --pkg-info "$IDENTIFIER" diff --git a/script/release b/script/release deleted file mode 100755 index ea5ca79bf..000000000 --- a/script/release +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -e -# -# script/release -# mas -# -# Updates app version in Info.plist file and tags release commit. -# Not currently in use. -# - -PLIST_FILE="$PWD/App/mas-cli-Info.plist" - -main() { - VERSION_NUMBER=$(update_version_number) - - git add "$PLIST_FILE" - git commit -eF <(commit_message) - - git tag -a "v${VERSION_NUMBER}" - - echo "Finalise release with: git push --tags" -} - -commit_message() { - cat < $1" >&2 - read -r input - echo "$input" -} - -write_version_number() { - local value - value=$1 - shift - write_plist "CFBundleShortVersionString" "${value}" -} - -read_version_number() { - read_plist "CFBundleShortVersionString" -} - -read_plist() { - local key - key=$1 - shift - /usr/libexec/PlistBuddy -c "Print :${key}" "${PLIST_FILE}" -} - -write_plist() { - local key - local value - key=$1 - shift - value=$1 - shift - echo "Setting ${key} to ${value}" >&2 - /usr/libexec/PlistBuddy -c "Set :${key} ${value}" "${PLIST_FILE}" -} - -main diff --git a/script/test b/script/test index 971de12a6..34ed4ebd7 100755 --- a/script/test +++ b/script/test @@ -3,34 +3,8 @@ # script/test # mas # -# Runs mas tests. Uses xcpretty gem to format output. +# Runs mas tests. # -BUILD_DIR="$PWD/build" -PROJECT="mas-cli.xcodeproj" -SCHEME="mas-cli Debug" -CONFIG="Debug" - -# OBJROOT - Intermediate Build Files Path -# The path where intermediate files will be placed during a build. Intermediate files include generated sources, object -# files, etc. Shell script build phases can place and access files here, as well. Typically this path is not set per -# target, but is set per project or per user. By default, this is set to `$(PROJECT_DIR)/build`. - -# SHARED_PRECOMPS_DIR - Precompiled Headers Cache Path -# The path where precompiled prefix header files are placed during a build. Defaults to `$(OBJROOT)/SharedPrecompiledHeaders`. -# Using a common location allows precompiled headers to be shared between multiple projects. - -# SYMROOT - Build Procucts Path -# The path at which all products will be placed when performing a build. Typically this path is not set per target, -# but is set per-project or per-user. By default, this is set to `$(PROJECT_DIR)/build`. - echo "==> ✅ Testing" - -set -o pipefail && - xcodebuild -project "$PROJECT" \ - -scheme "$SCHEME" \ - -configuration "$CONFIG" \ - OBJROOT="$BUILD_DIR" \ - SYMROOT="$BUILD_DIR" \ - test | - bundle exec xcpretty --color +swift test 2>&1 | xcpretty diff --git a/script/uninstall b/script/uninstall index 4d2dbc821..853e35bfb 100755 --- a/script/uninstall +++ b/script/uninstall @@ -17,5 +17,4 @@ fi echo "==> đŸ”Ĩ Uninstalling mas from $PREFIX" -trash "$PREFIX/Frameworks/MasKit.framework" trash "$PREFIX/bin/mas" diff --git a/script/update_headers b/script/update_headers index 9fa816848..0fabab6ac 100755 --- a/script/update_headers +++ b/script/update_headers @@ -24,7 +24,7 @@ check_class_dump() { extract_private_framework_headers() { local framework_name="$1" shift - local directory="PrivateFrameworks/${framework_name}" + local directory="Sources/PrivateFrameworks/${framework_name}" mkdir -p "$directory" class-dump -Ho "$directory" "/System/Library/PrivateFrameworks/${framework_name}.framework" } diff --git a/script/version b/script/version index 46f41e7ee..b2372d9f8 100755 --- a/script/version +++ b/script/version @@ -9,4 +9,16 @@ # This no longer works with MARKETING_VERSION build setting in Info.plist # agvtool what-marketing-version -terse1 -echo "1.8.1" +VERSION=$(git describe --abbrev=0 --tags) +VERSION=${VERSION#v} + +SCRIPT_PATH=$(dirname $(which $0)) + +cat <"${SCRIPT_PATH}/../Sources/MasKit/Package.swift" +// Generated by: script/version +enum Package { + static let Version = "${VERSION}" +} +EOF + +echo ${VERSION}