Ios 有条件地使用不同的资产目录构建应用程序
我的Xcode项目是以一种具有多种配置的方式设置的,允许我对我的应用程序的不同变体使用相同的代码库,但每个应用程序中都有独特的元素,如应用程序名称、版本、捆绑标识、图标、启动屏幕等。为了完成大部分设置,我访问了这个网站: 我还有一个config.plist,其中包含与每个Xcode配置相关联的各种唯一设置,这些配置只有在构建时才能成功复制。以下是运行脚本构建阶段的一个片段,以实现此目的:Ios 有条件地使用不同的资产目录构建应用程序,ios,xcode,xcodebuild,Ios,Xcode,Xcodebuild,我的Xcode项目是以一种具有多种配置的方式设置的,允许我对我的应用程序的不同变体使用相同的代码库,但每个应用程序中都有独特的元素,如应用程序名称、版本、捆绑标识、图标、启动屏幕等。为了完成大部分设置,我访问了这个网站: 我还有一个config.plist,其中包含与每个Xcode配置相关联的各种唯一设置,这些配置只有在构建时才能成功复制。以下是运行脚本构建阶段的一个片段,以实现此目的: RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/config/${CON
RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/config/${CONFIGURATION}
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Copying all files under ${RESOURCE_PATH} to ${BUILD_APP_DIR}"
cp -v "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/"
我的下一个目标是能够在构建时复制特定配置的资产目录,以避免将所有不同配置的映像捆绑到构建中,从而导致构建变得臃肿。我在运行脚本中尝试了与上面相同的解决方案,将复制行更改为包含递归选项(因为资产目录本质上是一个目录):
但是,当我这样做时,我的应用程序无法构建,并表示无法找到应用程序图标和启动图像。有什么想法吗?这就是你可以做的,让这项工作顺利进行:
- 为每个配置添加单独的资产目录,就像通常向项目添加资产目录一样。让我们假设在本例中,我们将这些目录称为MediaForDebug.xcsets、mediafordhoc.xcsets和MediaForRelease.xcsets
- 确保新创建的资产目录都是目标的成员(因此不要在此处排除它们,我们稍后会这样做)
- 现在,如果尚未添加到生成设置中,请添加自定义的
用户定义设置EXCLUDED\u SOURCE\u FILE\u name
- 有关此用户定义设置的值,请参见下面的屏幕截图
2019年1月19日更新:使用最新的稳定Xcode(10.1)和Cocoapods(v1.5.3),他们可以使用上述解决方案开箱即用。无需更改Cocoapods脚本或构建步骤,只需按说明设置
EXCLUDED\u SOURCE\u FILE\u name
。这是您可以完成的工作:
- 为每个配置添加单独的资产目录,就像通常向项目添加资产目录一样。让我们假设在本例中,我们将这些目录称为MediaForDebug.xcsets、mediafordhoc.xcsets和MediaForRelease.xcsets
- 确保新创建的资产目录都是目标的成员(因此不要在此处排除它们,我们稍后会这样做)
- 现在,如果尚未添加到生成设置中,请添加自定义的
用户定义设置EXCLUDED\u SOURCE\u FILE\u name
- 有关此用户定义设置的值,请参见下面的屏幕截图
2019年1月19日更新:使用最新的稳定Xcode(10.1)和Cocoapods(v1.5.3),他们可以使用上述解决方案开箱即用。无需更改Cocoapods脚本或构建步骤,只需按说明设置
排除的\u源文件\u名称。您可以设置一个示例项目来尝试这样做吗?我考虑了一些问题,但这完全取决于您如何在项目中设置资产目录。我很乐意帮忙,这是一个非常有趣的主意!与此同时,我一直在调查。我可能弄错了,但如果我查看我的内置软件包,我只会看到正确的应用程序图标,而不会看到其他图标。看起来你的问题实际上是由xcode机械学在引擎盖下修复的。你能核实一下吗?很抱歉这么久才回复。创建一个示例项目有点困难。不知道你的意思是什么,Xcode实际上解决了我的问题。你能解释一下吗?它无法构建,无法找到我的启动屏幕和图标。基本上,我有一个名为images.xcaste的资产目录,用于配置文件夹下的每个配置。它像config.plist一样被复制。我应该提到,我必须取消选中images.xcaste的目标成员身份,就像config.plist一样。我怀疑这就是为什么我尝试构建应用程序时Xcode找不到它的原因。听起来你真正想要的是一个有多个目标的项目。这是一个非常有用的描述如何工作。有多个目标允许您指定每个资产目录所包含的目标、有多个.plist文件等。您可以设置一个示例项目,尝试在其中执行此操作吗?我考虑了一些问题,但这完全取决于您如何在项目中设置资产目录。我很乐意帮忙,这是一个非常有趣的主意!与此同时,我一直在调查。我可能弄错了,但如果我查看我的内置软件包,我只会看到正确的应用程序图标,而不会看到其他图标。看起来你的问题实际上是由xcode机械学在引擎盖下修复的。你能核实一下吗?很抱歉这么久才回复。创建一个示例项目有点困难。不知道你的意思是什么,Xcode实际上解决了我的问题。
cp -rv "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/"