苹果偶尔会使用一种专有的XIP文件格式,尤其是在分发Xcode版本时使用。它类似于zip,但是被签名,使得接收系统可以验证它。当打开(双击)一个XIP文件时,Archive Utility将展开它,但仅当数字签名完好无损时。
有人知道如何通过终端命令行将XIP文件提取到指定文件夹吗?如果签名无效,有没有解压此类型文件的方法?
苹果偶尔会使用一种专有的XIP文件格式,尤其是在分发Xcode版本时使用。它类似于zip,但是被签名,使得接收系统可以验证它。当打开(双击)一个XIP文件时,Archive Utility将展开它,但仅当数字签名完好无损时。
有人知道如何通过终端命令行将XIP文件提取到指定文件夹吗?如果签名无效,有没有解压此类型文件的方法?
也许尝试一下:
xip -x [.xip文件路径]
这将把存档解压到您当前的工作目录中。
至于提取到特定目录,没有明确的选项可以实现此功能,但 xip -x
会将其解压缩到当前的工作目录。因此,切换到你想要提取文件的目录后使用cd
命令应该就能够运行;如果需要自动化此过程,可以编写一个脚本:
#!/bin/sh
xipfile="$(cd $(dirname "$1"); pwd -P)/$(basename "$1")" # a portable "realpath"
cd "$2"
xip -x "$xipfile"
我想这应该能解决问题吧?
/usr/bin/strings
命令,然后查找可能的选项。 - Geoff Nixonx
标志在使用strings
命令输出时不再明显。我认为这是从Xcode 10开始的。也许苹果公司已经开始更彻底地剥离他们的二进制文件,或者这是有意的混淆。然而,对于可用代码的Darwin部分,这些选项也可以在此处找到:https://opensource.apple.com/source/cctools/cctools-886/misc/strings.c.auto.html(参见第205行)。还有很多其他带有隐藏选项的实用程序可以通过这种方式找到。 - Geoff Nixonxar -xf file.xip -C /path/to/target
tar -zxvf file.xip -C /path/to/target
xar
和 tar
命令以原始格式提取 .xip
文件的“内容”和“元数据”。使用 pbzx
流解析器来提取压缩的 lzma “Payload” 格式的“内容”;该格式类似于包安装程序中找到的格式(例如,.pkg
)。您可以从此处编译 pbzx 源代码,或者下载已编译二进制文件并将其安装到/usr/local/bin
,然后调用pbzx
命令。pbzx -n Content | cpio -i
命令解析完内容后,你应该能够得到在.xip
压缩包中的任何东西的原始形式。
有用/附加信息:
$ pkgutil --check-signature file.xip
Xcode_9_beta_2.xip 返回:
Package "Xcode_9_beta_2.xip":
Status: signed Apple Software
Certificate Chain:
1. Software Update
SHA1 fingerprint: 1E 34 E3 91 C6 44 37 DD 24 BE 57 B1 66 7B 2F DA 09 76 E1 FD
-----------------------------------------------------------------------------
2. Apple Software Update Certification Authority
SHA1 fingerprint: FA 02 79 0F CE 9D 93 00 89 C8 C2 51 0B BC 50 B4 85 8E 6F BF
-----------------------------------------------------------------------------
3. Apple Root CA
SHA1 fingerprint: 61 1E 5B 66 2C 59 3A 08 FF 58 D1 4A E2 24 52 D1 98 DF 6C 60
注:
重要提示:从macOS Sierra开始,仅扩展由Apple签名的XIP归档文件。一直在使用XIP归档文件的开发人员需要切换到使用已签名的安装程序包或磁盘映像。
存档:Xcode_8.1.xip 未找到中央目录签名。这个文件要么不是一个压缩文件,要么它构成了多部分存档的一个磁盘。在后一种情况下,中央目录和zipfile注释将被发现在此存档的最后一个磁盘上。注意:Xcode_8.1.xip可能是一个普通的可执行文件,而不是一个存档。
- Antony Raphelxip
实用程序有一个简单的 -x
选项(请参见我的替代答案)。但是这并不验证签名,我认为您提供的“有用/附加信息”部分可能是唯一实用的身份验证方式。因此,最好的答案可能是像这样的东西: pkgutil --verify-signature [xip 文件] && xip -x [xip 文件]
。 - Geoff Nixon你可以打开归档工具本身,进入偏好设置并设置特定的目标文件夹,然后双击该文件。这样你就可以将其扩展到特定的目标位置了。;-)
您可以通过打开Archive Utility(可以通过spotlight搜索或launchpad打开)来更改输出。接着,前往Archive Utility > 首选项 (Command+,)
。然后,前往保存展开的文件 > 到...,您就可以更改输出目录。 :)
更简单的方法:打开"Archive Utility"并打开它的首选项,然后更改它可以提取文件的位置。另外,Archive Utility 可以 打开 .xip
文件。
(对于带有有效签名的存档文件。)
从目标文件夹中,创建一个指向 .xip 存档文件的符号链接,然后使用该链接进行扩展(完成后再删除链接)。示例:
cd /Applications
ln -s /Volumes/SomewhereElse/Xcode.xip
xip --expand Xcode.xip
rm Xcode.xip
cd /Applications && xip --expand ~/Downloads/Xcode.xip
— 请根据需要将 ~/Downloads/Xcode.xip
和 /Applications
替换为源路径和目标路径。 - akasaka目前似乎没有单一工具可以完成这个任务。需要一个能够解码 pbzx
流的工具,而在 macOS 中似乎没有预装该工具。
这些答案中提供了各种解决方案: