28

I searched around how to extract XIP archive using command line with no luck so I am leaving my own solution, as a bash function, here.

I found my inspiration here.

Amir
  • 9,091
  • 5
  • 34
  • 46
Ninja Inc
  • 478
  • 1
  • 4
  • 10
  • Possible duplicate of [Extract .xip files into a specific folder](https://stackoverflow.com/questions/42197588/extract-xip-files-into-a-specific-folder) – Geoff Nixon Oct 21 '18 at 08:28
  • Having asnwered both: I am in favor of removing this as a dupe as well. I have cleaned up the other question and believe it should suffice. – Geoff Nixon Jul 14 '21 at 04:36

7 Answers7

40

You could try:

xip -x [path to .xip file]

Geoff Nixon
  • 4,697
  • 2
  • 28
  • 34
14

On macOS Mojave (not sure about other OS versions), navigate to the directory into which you’d like to expand the contents, then run xip --expand /path/to/xip.xip. For instance:

iMac:Applications jeff$ xip --expand /Users/jeff/Downloads/Xcode_11_Beta.xip
Jeff Kelley
  • 19,021
  • 6
  • 70
  • 80
  • 2
    I've just checked that in macOS High Sierra (10.13.6) this command works as well, although not mentioned in 'man xip', curiously. I had some authentication issue which re-downloading the file from developer.apple.com cleared it. – Fábio Pakk Selmi-Dei Mar 01 '20 at 18:33
  • I can confirm that `xip --expand` works in 10.12 Sierra & 10.11 El Capitan as well, even though it wasn't added to the man page until macOS 10.14. – Eric3 Feb 26 '22 at 23:46
8
function unxip()
{
    [ -z "$1" ] && echo "usage: unxip /path/to/archive.xip" && return

    # http://newosxbook.com/src.jl?tree=listings&file=pbzx.c
    PBZX="/usr/local/src/pbzx/pbzx" && [ ! -x "$PBZX" ] && echo "$PBZX not found." && return

    [ ! -f "$1" ] && echo "$1 not found." && return

    [ -f "Content" ] || [ -f "Metadata" ] && echo "Content or Metadata already exists." && return

    pkgutil --check-signature "$1" && xar -xf "$1" && "$PBZX" Content | sudo tar x --strip-components=1

    rm "Content" "Metadata"
}

We first check for xip file signature then extract its contents using xar. We then use Jonathan Levin pbzx to properly unpack pbzx chunks and pipe the output to tar, skipping . to avoid overwriting current working directory permissions.

This does the trick to unpack Xcode8.xip archives on OS X El Capitan.

Ninja Inc
  • 478
  • 1
  • 4
  • 10
  • This is undesirable from a CI point of view since it requires installing a third party app when native tools (/System/Library/CoreServices/Applications/Archive Utility.app/Contents/MacOS/Archive Utility) installed on the system already perform the work. – ablarg Dec 04 '17 at 17:15
  • @ablarg from a CI point of view: how can the Archive Utility be feasibly integrated into a shell script to achieve automation? Can it be scripted? Or did you think of double-clicking the XIP archive? – rexford Jun 22 '18 at 16:37
  • @rexford if you just do `open -W archive.xip` from terminal that will launch bomArchiveHelper and unpack the xip in the current directory and will block until the unarchive is complete. I use this to open Xcode.xip via a shell call in Jenkins all the time. The -W flag tells the shell to wait for the application invoked to exit before proceeding. – ablarg Jun 28 '18 at 17:00
  • Upvoted, but see below for an easier solution: `brew install thii/unxip/unxip` also unxips correctly Xcode archives, unlike Apple tools. (but it needs compilation of the `pbzx` tool from source, which needs to also build a custom lib....) – Pandaiolo May 12 '20 at 10:33
8

Use unxip. You can install it with Homebrew:

brew install thii/unxip/unxip

To extract a .xip file:

unxip path/to/.xip
Thi
  • 2,066
  • 1
  • 17
  • 12
  • 1
    Unxiping XCode 10.1 was not working with Unarchiver... but this did the trick, thanks! – Pandaiolo May 12 '20 at 10:33
  • 1
    this save me countless hours of frustrations. thanks. I used this to extract Xcode_12.5.1.xip – CanCoder Jun 29 '21 at 10:51
  • @IeeCoder It's been stuck for me on `Expanding items from “Xcode_12.5.1.xip”: 99%` for quite a while now. shall I give up? (what's wrong with that xip? no tool to extract it...) – peetonn Nov 17 '21 at 14:33
6

open -W archive.xip will work better since it will then block until the archive has finished opening.

ablarg
  • 2,400
  • 1
  • 24
  • 32
-1

In my case, i used unxip

brew install unxip

Then extract

unxip <Path-To-The-.xip-File>
-3

You could just run:

open archive.xip
maskeda
  • 183
  • 1
  • 10