打印项目的依赖关系树

bte*_*pot 8 swift swift-package-manager

我知道如何转储包的依赖关系树:

swift package show-dependencies
Run Code Online (Sandbox Code Playgroud)

但对于项目?

Jan*_*Jan 1

这不是一个漂亮的解决方案,我刚刚完成它(不再测试),但到目前为止它适用于 Xcode 14.1:

  • Scripts/dependenciesTree.sh在项目根目录下创建一个bash 脚本:
if [[ $1 == "" ]]; then
  echo "Missing build dir as 1st parameter"
  exit 1
fi

if [[ $2 == "" ]]; then
  echo "Missing project dir as 2nd parameter"
  exit 1
fi

BUILD_DIR=$1
PROJECT_DIR=$2

echo "Build dependencies tree"
cd "$BUILD_DIR/../../SourcePackages/checkouts"
exportFile="$PROJECT_DIR/dependencies-tree.md"
echo "# Dependencies trees for each Swift-Package" > "$exportFile"
echo "" >> "$exportFile"
echo "Build date: $(date '+%Y-%d-%m %a %H:%M:%S %Z')" >> "$exportFile"
echo "" >> "$exportFile"
for directory in */; do
  echo "Tree for $directory"
  echo "" >> "$exportFile"
  echo "## Tree for $directory" >> "$exportFile"
  pushd $directory
  swift package show-dependencies >> "$exportFile"
  echo "" >> "$exportFile"
  echo "" >> "$exportFile"
  popd
done
Run Code Online (Sandbox Code Playgroud)
  • 转到项目配置、目标、“构建阶段”并添加“新运行脚本阶段”。在脚本中添加以下行:
# Script must be run without Xcode environment variables,
# otherwise it may try to build an iOS application targeting macOS based on iOS.
# Which doesn't make any sense and always fails.
env -i "$PROJECT_DIR/Scripts/dependenciesTree.sh" "$BUILD_DIR" "$PROJECT_DIR"
Run Code Online (Sandbox Code Playgroud)

结果就在dependencies-tree.md文件中。

不过,这有一个问题:如果从本地目录而不是 GIT 存储库添加包,则它不会在那里列出。但如果它们引用 GIT 存储库,则应在此处列出其传递依赖项。