SwiftPackage Plugin for executing arbitrary ShellScript.
- BuildToolPlugin: RunScriptPlugin
- CommandPlugin: RunScriptCommandPlugin
- XcodeBuildToolPlugin: RunScriptPlugin
- XcodeCommandPlugin: RunScriptCommandPlugin
Place the file named runscript.yml(or .runscript.yml) in the root of the project.
Write the shell script you want to run in this file.
The format is as follows.
prebuild: # prebuild Command
  - name: "Hello"
    script: "echo Hello" # Write scripts directly
  - name: "Show current path"
    script: "pwd"
  - name: "Write file"
    script: "echo Hello >> test.txt"
  - name: "SwiftLint"
    launchPath: "/bin/bash" # bash, zsh, etc. can be specified
    script: "swiftlint lint --fix"
  - name: "SwiftLint" # Another way to write ââ
    launchPath: "/usr/local/bin/swiftlint"
    arguments:
      - "lint"
      - "--fix"
  - name: "Update schema"
    file: "update_schema.sh" # Execute .sh file
build: # build Command
  - name: "Hello"
    script: "echo Hello"
  - name: "Make Swift Code"
    script: |
        echo "public enum Hello { case a,b,c,d }" > $RUN_SCRIPT_PLUGIN_WORK_DIR/tmp.swift"
command: # Command Plugin
  - name: "Hello from Command"
    script: "echo 'Hello from Command'"
all: # run in `prebuild`, `build`...
   - name: "Hello(all)"
     script: "echo Hello(all)"Note
Due to a limitation of Xcode, you may get a permission error when trying to write a file.
If CommandPlugin is run from the shell, it is possible to work around this by disabling the sandbox using the --disable-sandbox option.
swift package plugin --allow-writing-to-package-directory --disable-sandbox run-scriptăIf you want to avoid the use of the BuildToolPlugin/CommandPlugin via Xcode, you can disable the use of the sandbox by configuring the following settings.
defaults write com.apple.dt.Xcode IDEPackageSupportDisablePluginExecutionSandbox -bool YESThe following environment variables are available in the script to refer to the Plugin context.
- RUN_SCRIPT_TARGET_PACKAGE_DIR
 Path of the target package on which the plugin runs. The path obtained byPackagePlugin.PluginContext.package.directory
- RUN_SCRIPT_PLUGIN_WORK_DIR
 The path of a writable directory into which the plugin or the build commands it constructs can write anything it wants. The path obtained byPackagePlugin.PluginContext.pluginWorkDirectory
- SwiftLint You can run Lint in SPM without using the SwiftLint plugin.
- name: "SwiftLint"
  script: "swiftlint lint"- Build Log
- name: "Build Log"
  script: "echo \"[$(date)] Build >> build.log\""- Theos(Orion) install You can install the Tweak from the Build button in SPM.
- name: "Theos make package and install"
  script: "make do"- SwiftFormat
- name: "SwiftFormat"
  script: "swiftformat ."- SwiftGen
- name: "SwiftGen"
  script: "swiftgen config run"