Human readable time diffs on lines of output when running e.g. build commands like fastlane
Branch: master
Clone or download
hfossli Merge pull request #16 from agens-no/xcodebuild-in-readme
Adding xcodebuild example to readme
Latest commit eb80e98 Aug 29, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
swiff.xcodeproj Update xcode project Aug 26, 2018
.gitignore Update .gitignore Aug 26, 2018
LICENSE Initial commit Aug 3, 2018
Makefile Update Makefile Aug 28, 2018
Package.swift Add support for spm Aug 26, 2018


Why not let the computer do all that diffing of timestamps you tend to do manually?

👋 Usage

Live with any command

command | swiff

Try it out

while true; do echo "Foo"; sleep $[ ($RANDOM % 3) + 1 ]s; done | swiff

With fastlane

fastlane build | swiff --fastlane

Or even shorter

fastlane build | swiff -f

Or maybe you have an old build log from fastlane?

cat build.log | swiff -f

(Swiff parses the timestamps produced by fastlane)

With xcodebuild

xcrun xcodebuild -project "MyApp.xcodeproj" -scheme "MyApp" | xcpretty | swiff

🤲 Example output


Useful summary at the end with most important highlights

✌️ Install

Globally by oneliner

git clone && cd swiff && make && cd .. && rm -rf swiff/

You may now type swiff help from any directory in terminal to verify that the install is complete

What is the oneliner doing?
  1. Uses git to clone swiff to a directory swiff in your current directory
  2. moves in to the created swiff folder
  3. builds swiff using the Makefile (basically compiling Sources/swiff/main.swift and installing swiff at /usr/local/bin/swiff)
  4. moves back out of the folder
  5. deletes the swiff folder

Globally by cloning

git clone
cd swiff

You may now type swiff help from any directory in terminal to verify that the install is complete

Locally by oneliner

curl --fail > swiff.swift && swiftc -o swiff swiff.swift && rm swiff.swift

You may now type ./swiff help from your current directory and use it like fastlane build | ./swiff -f

What is the oneliner doing?
  1. Uses curl to copy Sources/swiff/main.swift to a file called swiff.swift in your current directory
  2. builds it using your current swift tooling
  3. deletes swiff.swift

Using Mint

$ mint install agens-no/swiff

Installation issues?

Might be because of requirements: Swift 4, Xcode, macOS

Create a new issue and let me know!

Advanced usage

Usage: swiff [-l low] [-m medium] [-h high] [-r reset-mark] [-d diff-mode] [-s summary-limit] [-f --fastlane]
  -l, --low                   Threshold in seconds for low duration color formatting (default: 1)
  -m, --medium                Threshold in seconds for medium duration color formatting (default: 5)
  -h, --high                  Threshold in seconds for high duration color formatting (default: 10)
  -r, --reset-mark            String match to reset total counter (default: none)
  -d, --diff-mode             Valid options is "live" or "fastlane" (default: live)
  -s, --summary-limit         Maximum number of lines in summary (default: 20)

  -f, --fastlane              Shortcut for --diff-mode fastlane --reset-mark "Step :"

Example: cat build.log | swiff --low 1 --medium 5 --high 10 --reset-mark "Step: " --diff-mode live --summary-limit 20

Example: fastlane build | swiff -f

🤙 License