当双击与运行 unzip

问题描述

我正在从构建我的应用程序生成.xctest 目标内的 Plugins 文件夹中压缩 .app 文件我有一个构建阶段脚本,它在我的测试目标中最后运行以复制此文件。我使用以下脚本进行压缩:

XCTEST_FILE=${TARGET_BUILD_DIR}/${TARGET_NAME}.xctest
XCTEST_ZIP=${TARGET_BUILD_DIR}/../../${TARGET_NAME}.xctest.zip
zip -jr ${XCTEST_ZIP} ${XCTEST_FILE}

这给了我 TestTarget.xctest.zip 文件。但是根据这两种方法解压方式不同,

解压 TestTarget.xctest.zip

-测试目标
-代码资源
-Info.plist

在finder中双击TestTarget.xctest.zip

-TestTarget.xctest
--测试目标
--代码资源
--Info.plist

为什么解压到最里面的节点并解压所有文件?我想要 unzip 命令给我 .xctest 目录。我尝试将 zip 文件重命名TestTarget.zip,但它的行为仍然相似。

我最初使用 zip -r ${XCTEST_ZIP} ${XCTEST_FILE} 进行压缩,但问题是当我双击以解压缩文件时,它会保留根目录 (\) 中的整个文件夹结构。帖子建议使用 -j 标志而不是 -r。但只是 -j 导致没有生成 zip 文件。另一条评论推荐 -jr,它创建了一个 zip,它在双击时生成了我期望的输出。但我猜 unzip 命令的作用有所不同。

类似问题:MacOs zip file - different result when double click and running unzip command

这里的错误原因非常不同,

问题出在文件的创建时间。它与 MacOs 问题无关,但在 Windows 中存在某些路径长度已知问题

解决方法

基于 How to zip folder without full path,在生成 zip 之前,我必须先将脚本更新为 cdTARGET_BUILD_DIR。我还必须删除 -j 标志,以便在运行 unzip 时保留本地文件夹结构。

cd ${TARGET_BUILD_DIR}
XCTEST_FILE=./${TARGET_NAME}.xctest
XCTEST_ZIP=../../${TARGET_NAME}.xctest.zip
zip -r ${XCTEST_ZIP} ${XCTEST_FILE}