The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Build Information

Successful build of jungle, reference main (fe6181), with Swift 6.0 for macOS (SPM) on 3 Nov 2024 11:22:43 UTC.

Swift 6 data race errors: 6

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete

Build Log

========================================
RunAll
========================================
Builder version: 4.56.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/xing/jungle.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/xing/jungle
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at fe61816 Merge pull request #23 from xing/support_products
Cloned https://github.com/xing/jungle.git
Revision (git rev-parse @):
fe61816d4f4fac973cd70c272f1bfb863223d3e1
SUCCESS checkout https://github.com/xing/jungle.git at main
Fetching https://github.com/apple/swift-argument-parser
Fetching https://github.com/jpsim/Yams.git
[1/9902] Fetching yams
[2/22255] Fetching yams, swift-argument-parser
Fetched https://github.com/jpsim/Yams.git from cache (2.05s)
Fetched https://github.com/apple/swift-argument-parser from cache (2.05s)
Computing version for https://github.com/jpsim/Yams.git
Computed https://github.com/jpsim/Yams.git at 5.0.1 (0.62s)
Computing version for https://github.com/apple/swift-argument-parser
Computed https://github.com/apple/swift-argument-parser at 1.2.0 (0.65s)
Creating working copy for https://github.com/apple/swift-argument-parser
Working copy of https://github.com/apple/swift-argument-parser resolved at 1.2.0
Creating working copy for https://github.com/jpsim/Yams.git
Working copy of https://github.com/jpsim/Yams.git resolved at 5.0.1
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "jungle",
      "name": "jungle",
      "url": "https://github.com/xing/jungle.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/jungle",
      "dependencies": [
        {
          "identity": "swift-argument-parser",
          "name": "swift-argument-parser",
          "url": "https://github.com/apple/swift-argument-parser",
          "version": "1.5.0",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-argument-parser",
          "dependencies": [
          ]
        },
        {
          "identity": "yams",
          "name": "Yams",
          "url": "https://github.com/jpsim/Yams.git",
          "version": "5.1.3",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/Yams",
          "dependencies": [
          ]
        }
      ]
    }
  ]
}
Fetching https://github.com/xing/jungle.git
[1/696] Fetching jungle
Fetched https://github.com/xing/jungle.git from cache (0.82s)
Fetching https://github.com/apple/swift-argument-parser from cache
Fetching https://github.com/jpsim/Yams.git from cache
Fetched https://github.com/jpsim/Yams.git from cache (0.64s)
Fetched https://github.com/apple/swift-argument-parser from cache (0.64s)
Computing version for https://github.com/apple/swift-argument-parser
Computed https://github.com/apple/swift-argument-parser at 1.5.0 (0.50s)
Computing version for https://github.com/jpsim/Yams.git
Computed https://github.com/jpsim/Yams.git at 5.1.3 (0.62s)
Creating working copy for https://github.com/jpsim/Yams.git
Working copy of https://github.com/jpsim/Yams.git resolved at 5.1.3
Creating working copy for https://github.com/xing/jungle.git
Working copy of https://github.com/xing/jungle.git resolved at main (fe61816)
Creating working copy for https://github.com/apple/swift-argument-parser
Working copy of https://github.com/apple/swift-argument-parser resolved at 1.5.0
Found 2 product dependencies
  - swift-argument-parser
  - Yams
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.0
Building package at path:  $PWD
https://github.com/xing/jungle.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete
[1/1] Compiling plugin Generate Manual
Building for debugging...
[1/21] Write sources
[8/21] Write jungle-entitlement.plist
[9/21] Write sources
[11/21] Write swift-version--7754E27361AE5C74.txt
[12/27] Compiling reader.c
[13/27] Compiling emitter.c
[14/27] Compiling api.c
[15/27] Compiling parser.c
[16/27] Compiling scanner.c
[17/27] Compiling writer.c
[19/42] Compiling ArgumentParserToolInfo ToolInfo.swift
[20/42] Emitting module ArgumentParserToolInfo
[21/80] Compiling ArgumentParser ArgumentHelp.swift
[22/80] Compiling ArgumentParser ArgumentVisibility.swift
[23/80] Compiling ArgumentParser CompletionKind.swift
[24/80] Compiling ArgumentParser Errors.swift
[25/84] Compiling ArgumentParser InputOrigin.swift
[26/84] Compiling ArgumentParser Name.swift
[27/84] Compiling ArgumentParser Parsed.swift
[28/84] Compiling ArgumentParser ParsedValues.swift
[29/84] Compiling ArgumentParser Flag.swift
[30/84] Compiling ArgumentParser NameSpecification.swift
[31/84] Compiling ArgumentParser Option.swift
[32/84] Compiling ArgumentParser OptionGroup.swift
[33/84] Compiling ArgumentParser Platform.swift
[34/84] Compiling ArgumentParser SequenceExtensions.swift
[35/84] Compiling ArgumentParser StringExtensions.swift
[36/84] Compiling ArgumentParser Tree.swift
[37/84] Compiling ArgumentParser ParsableArguments.swift
[38/84] Compiling ArgumentParser ParsableArgumentsValidation.swift
[39/84] Compiling ArgumentParser ParsableCommand.swift
[40/84] Compiling ArgumentParser ArgumentDecoder.swift
[41/84] Compiling ArgumentParser AsyncParsableCommand.swift
[42/84] Compiling ArgumentParser CommandConfiguration.swift
[43/84] Compiling ArgumentParser EnumerableFlag.swift
[44/84] Compiling ArgumentParser ExpressibleByArgument.swift
[45/84] Compiling ArgumentParser BashCompletionsGenerator.swift
[46/84] Compiling ArgumentParser CompletionsGenerator.swift
[47/84] Compiling ArgumentParser FishCompletionsGenerator.swift
[48/84] Compiling ArgumentParser ZshCompletionsGenerator.swift
[49/84] Compiling ArgumentParser Argument.swift
[50/84] Emitting module ArgumentParser
[51/84] Compiling ArgumentParser ArgumentDefinition.swift
[52/84] Compiling ArgumentParser ArgumentSet.swift
[53/84] Compiling ArgumentParser CommandParser.swift
[54/84] Compiling ArgumentParser InputKey.swift
[55/84] Emitting module DependencyModule
[56/84] Compiling DependencyModule Module.swift
[57/84] Emitting module Shell
[58/84] Compiling Shell Shell.swift
[59/91] Compiling DependencyGraph Graph+Stats.swift
[60/91] Compiling DependencyGraph Graph.swift
[61/91] Compiling DependencyGraph Graph+Dot.swift
[62/91] Emitting module DependencyGraph
[63/91] Compiling DependencyGraph Graph+Make.swift
[64/91] Emitting module SPMExtractor
[65/91] Compiling SPMExtractor Module+Package.swift
[68/91] Compiling Yams Tag.swift
[69/92] Emitting module Yams
[70/92] Compiling ArgumentParser ParserError.swift
[71/92] Compiling ArgumentParser SplitArguments.swift
[72/92] Compiling ArgumentParser DumpHelpGenerator.swift
[73/92] Compiling ArgumentParser HelpCommand.swift
[76/92] Compiling Yams String+Yams.swift
[79/92] Compiling Yams Resolver.swift
[80/92] Compiling Yams Representer.swift
[85/92] Compiling ArgumentParser HelpGenerator.swift
[86/92] Compiling ArgumentParser MessageInfo.swift
[87/92] Compiling ArgumentParser UsageGenerator.swift
[88/92] Compiling ArgumentParser CollectionExtensions.swift
[89/92] Compiling Yams YamlError.swift
[90/94] Emitting module PodExtractor
[91/94] Compiling PodExtractor Module+Podfile.swift
[92/104] Compiling jungle ModulesCommand.swift
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/ModulesCommand.swift:11:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 9 | struct ModulesCommand: ParsableCommand {
10 |
11 |     static var configuration = CommandConfiguration(
   |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
   |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
12 |         commandName: "modules",
13 |         abstract: "Outputs a sorted list of modules dependencies count of your project"
[93/104] Compiling jungle ModuleStats.swift
[94/104] Compiling jungle Main.swift
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/Main.swift:5:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 3 | @main
 4 | struct Jungle: AsyncParsableCommand {
 5 |     static var configuration = CommandConfiguration(
   |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
   |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 6 |         commandName: "jungle",
 7 |         abstract: "SwiftPM and Cocoapods based projects complexity analyzer.",
[95/104] Compiling jungle Outputs.swift
[96/104] Compiling jungle DependantCommand.swift
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/DependantCommand.swift:9:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 7 |
 8 | struct DependantCommand: ParsableCommand {
 9 |     static var configuration = CommandConfiguration(
   |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
   |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 |         commandName: "dependant",
11 |         abstract: "Outputs a sorted list of targets that depends on the specified one in target"
[97/104] Compiling jungle GitLogEntry.swift
[98/104] Compiling jungle GraphCommand.swift
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/GraphCommand.swift:10:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
  8 |
  9 | struct GraphCommand: ParsableCommand {
 10 |     static var configuration = CommandConfiguration(
    |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 11 |         commandName: "graph",
 12 |         abstract: "Outputs the dependency graph in DOT format"
[99/104] Emitting module jungle
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/CompareCommand.swift:23:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 21 |
 22 | struct CompareCommand: ParsableCommand {
 23 |     static var configuration = CommandConfiguration(
    |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 24 |         commandName: "compare",
 25 |         abstract: "Compares the current complexity of the dependency graph to others versions in git"
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/DependantCommand.swift:9:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 7 |
 8 | struct DependantCommand: ParsableCommand {
 9 |     static var configuration = CommandConfiguration(
   |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
   |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 |         commandName: "dependant",
11 |         abstract: "Outputs a sorted list of targets that depends on the specified one in target"
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/GraphCommand.swift:10:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
  8 |
  9 | struct GraphCommand: ParsableCommand {
 10 |     static var configuration = CommandConfiguration(
    |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 11 |         commandName: "graph",
 12 |         abstract: "Outputs the dependency graph in DOT format"
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/HistoryCommand.swift:16:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 14 |     }
 15 |
 16 |     static var configuration = CommandConfiguration(
    |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 17 |         commandName: "history",
 18 |         abstract: "Displays historic complexity of the dependency graph"
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/Main.swift:5:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 3 | @main
 4 | struct Jungle: AsyncParsableCommand {
 5 |     static var configuration = CommandConfiguration(
   |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
   |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 6 |         commandName: "jungle",
 7 |         abstract: "SwiftPM and Cocoapods based projects complexity analyzer.",
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/ModulesCommand.swift:11:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 9 | struct ModulesCommand: ParsableCommand {
10 |
11 |     static var configuration = CommandConfiguration(
   |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
   |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
12 |         commandName: "modules",
13 |         abstract: "Outputs a sorted list of modules dependencies count of your project"
[100/104] Compiling jungle CompareCommand.swift
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/CompareCommand.swift:23:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 21 |
 22 | struct CompareCommand: ParsableCommand {
 23 |     static var configuration = CommandConfiguration(
    |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 24 |         commandName: "compare",
 25 |         abstract: "Compares the current complexity of the dependency graph to others versions in git"
[101/104] Compiling jungle HistoryCommand.swift
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/HistoryCommand.swift:16:16: warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 14 |     }
 15 |
 16 |     static var configuration = CommandConfiguration(
    |                |- warning: static property 'configuration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'configuration' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'configuration' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 17 |         commandName: "history",
 18 |         abstract: "Displays historic complexity of the dependency graph"
/Users/admin/builder/spi-builder-workspace/Sources/jungle/Commands/HistoryCommand.swift:132:31: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
130 |
131 |             for entry in logs.lazy {
132 |                 group.addTask {
    |                               `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
133 |
134 |                     guard
135 |                         let podfile = try? shell("git show \(entry.revision):./Podfile", at: directoryURL),
136 |                         let entryTargetDependencies = try? moduleFromPodfile(podfile, on: target) ?? .init(name: target, dependencies: [])
    |                                                                                           `- note: closure captures 'self' which is accessible to code in the current task
137 |                     else {
138 |                         return nil
[101/104] Write Objects.LinkFileList
[102/104] Linking jungle
[103/104] Applying jungle
Build complete! (17.23s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-argument-parser",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.2.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-argument-parser"
    },
    {
      "identity" : "yams",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "5.0.1",
            "upper_bound" : "6.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/jpsim/Yams.git"
    }
  ],
  "manifest_display_name" : "jungle",
  "name" : "jungle",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "12.0"
    }
  ],
  "products" : [
    {
      "name" : "jungle",
      "targets" : [
        "jungle"
      ],
      "type" : {
        "executable" : null
      }
    },
    {
      "name" : "PodExtractor",
      "targets" : [
        "PodExtractor"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "SPMExtractor",
      "targets" : [
        "SPMExtractor"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "DependencyGraph",
      "targets" : [
        "DependencyGraph"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "Shell",
      "targets" : [
        "Shell"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "jungleTests",
      "module_type" : "SwiftTarget",
      "name" : "jungleTests",
      "path" : "Tests/jungleTests",
      "sources" : [
        "GitLogEntryTests.swift"
      ],
      "target_dependencies" : [
        "jungle"
      ],
      "type" : "test"
    },
    {
      "c99name" : "jungle",
      "module_type" : "SwiftTarget",
      "name" : "jungle",
      "path" : "Sources/jungle",
      "product_dependencies" : [
        "ArgumentParser"
      ],
      "product_memberships" : [
        "jungle"
      ],
      "sources" : [
        "Commands/CompareCommand.swift",
        "Commands/DependantCommand.swift",
        "Commands/GraphCommand.swift",
        "Commands/HistoryCommand.swift",
        "Commands/Main.swift",
        "Commands/ModulesCommand.swift",
        "Models/GitLogEntry.swift",
        "Models/ModuleStats.swift",
        "Models/Outputs.swift"
      ],
      "target_dependencies" : [
        "PodExtractor",
        "SPMExtractor",
        "DependencyGraph",
        "Shell"
      ],
      "type" : "executable"
    },
    {
      "c99name" : "Shell",
      "module_type" : "SwiftTarget",
      "name" : "Shell",
      "path" : "Sources/Shell",
      "product_memberships" : [
        "jungle",
        "PodExtractor",
        "SPMExtractor",
        "Shell"
      ],
      "sources" : [
        "Shell.swift"
      ],
      "type" : "library"
    },
    {
      "c99name" : "SPMExtractorTests",
      "module_type" : "SwiftTarget",
      "name" : "SPMExtractorTests",
      "path" : "Tests/SPMExtractorTests",
      "sources" : [
        "SPMExtractorTests.swift"
      ],
      "target_dependencies" : [
        "SPMExtractor"
      ],
      "type" : "test"
    },
    {
      "c99name" : "SPMExtractor",
      "module_type" : "SwiftTarget",
      "name" : "SPMExtractor",
      "path" : "Sources/SPMExtractor",
      "product_memberships" : [
        "jungle",
        "SPMExtractor"
      ],
      "sources" : [
        "Module+Package.swift"
      ],
      "target_dependencies" : [
        "DependencyModule",
        "Shell"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PodExtractorTests",
      "module_type" : "SwiftTarget",
      "name" : "PodExtractorTests",
      "path" : "Tests/PodExtractorTests",
      "sources" : [
        "PodExtractorTests.swift"
      ],
      "target_dependencies" : [
        "PodExtractor"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PodExtractor",
      "module_type" : "SwiftTarget",
      "name" : "PodExtractor",
      "path" : "Sources/PodExtractor",
      "product_dependencies" : [
        "Yams"
      ],
      "product_memberships" : [
        "jungle",
        "PodExtractor"
      ],
      "sources" : [
        "Module+Podfile.swift"
      ],
      "target_dependencies" : [
        "DependencyModule",
        "Shell"
      ],
      "type" : "library"
    },
    {
      "c99name" : "DependencyModule",
      "module_type" : "SwiftTarget",
      "name" : "DependencyModule",
      "path" : "Sources/DependencyModule",
      "product_memberships" : [
        "jungle",
        "PodExtractor",
        "SPMExtractor",
        "DependencyGraph"
      ],
      "sources" : [
        "Module.swift"
      ],
      "type" : "library"
    },
    {
      "c99name" : "DependencyGraphTests",
      "module_type" : "SwiftTarget",
      "name" : "DependencyGraphTests",
      "path" : "Tests/DependencyGraphTests",
      "sources" : [
        "DependencyGraphTests.swift"
      ],
      "target_dependencies" : [
        "DependencyGraph"
      ],
      "type" : "test"
    },
    {
      "c99name" : "DependencyGraph",
      "module_type" : "SwiftTarget",
      "name" : "DependencyGraph",
      "path" : "Sources/DependencyGraph",
      "product_memberships" : [
        "jungle",
        "DependencyGraph"
      ],
      "sources" : [
        "Graph+Dot.swift",
        "Graph+Make.swift",
        "Graph+Stats.swift",
        "Graph.swift"
      ],
      "target_dependencies" : [
        "DependencyModule"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.7"
}
Done.