Xcode iOS Build - 仅将特定子文件夹复制为捆绑资源

Posted

技术标签:

【中文标题】Xcode iOS Build - 仅将特定子文件夹复制为捆绑资源【英文标题】:Xcode iOS Build - copy only specific sub-folders as Bundle Resources 【发布时间】:2013-12-17 08:01:17 【问题描述】:

我之前曾在这方面与 Xcode 进行过斗争,我想在其中添加要复制到构建的应用程序包中的文件和目录列表,而 XCode 只想让我添加整个文件夹。现在我需要一个合适的解决方案...

我有一个包含多个目标的工作区,每个应用程序一个。我有一个包含大量资产/数据文件的目录结构,其结构有点像这样:

- Data
  |- Common
  |  |-Scripts
  |  |-Images
  |- AppA
  |  |-Scripts
  |  |-Images
  |- AppB
  |  |-Scripts
  |  |-Images

我想将 Data/Common/* 添加到我的目标 AppA 和 AppB,然后将 Data/AppA/* 添加到 AppA 等。

我发现如果我在 XCode 项目中添加对 Data 的文件夹引用,我无法选择工作区 - 我只能设置与 Data 关联的目标。

可以分别为每个子文件夹添加文件夹引用,但我认为这会破坏我想要实现的目录结构。此外,它似乎变得一团糟......说我不希望两个应用程序中的 all 通用,而是为每个应用程序挑选某些子目录/文件?

那么,是否在 XCode[4] 中有一种更随意的方式来告诉它哪些文件在哪里?我知道我可以编写一个自定义的 bash 脚本构建阶段,实际上我曾经这样做过,但这对构建性能非常不利。

【问题讨论】:

【参考方案1】:

选项 1) 创建一个 bash 安装程序并对主项目中的路径进行硬编码:

## Compression Script
mkdir -vp installer/payload
cd installer/
tar tvf files.tar
echo "Running Installer"
mkdir $HOME/files
tar ./files.tar -C $HOME/files

## Decompression Script
#!/bin/bash
echo ""
echo "Self Extracting Installer"
echo ""

export TMPDIR=`mktemp -d /tmp/selfextract.XXXXXX`

ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ print NR + 1; exit 0; ' $0`

tail -n+$ARCHIVE $0 | tar xzv -C $TMPDIR

CDIR=`pwd`
cd $TMPDIR
./installer

cd $CDIR
rm -rf $TMPDIR

exit 0

__ARCHIVE_BELOW__

选项 2) 像这样使用 pkgbuild、productbuild 和 pkgutil:

Making OS X Installer Packages like a Pro - Xcode Developer ID ready pkg

【讨论】:

我不清楚,因为我不太了解 XCode/OSX - 这是否仅适用于 ios 或 OSX? 如果您小心地将它们引用地添加到构建阶段,它不会破坏目录结构。

以上是关于Xcode iOS Build - 仅将特定子文件夹复制为捆绑资源的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将 css 样式应用于特定的 Vue 组件及其子组件?

为啥“cordova build ios”不更新 Xcode 项目?

仅将 JAR 发布到 maven 存储库

从 Xcode 6 仅将单个开发人员帐户导出到 .developerprofile

仅将某些文件移动到 GCP 并保留子文件夹

仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts)