有条件地构build不同资产目录的应用程序

我的XCode项目的设置方式有多种configuration,允许我为不同的应用程序使用相同的代码库,但每个应用程序的名称,版本,软件包标识符,图标,启动屏幕等都有独特的元素。 。为了完成大部分设置,我已经关注了这个网站: http : //appfoundry.be/blog/2014/07/04/Xcode-Env-Configuration/

我也有一个config.plist包含与每个XCodeconfiguration相关的各种独特设置,只有在构build时才能成功复制。 下面是运行脚本构build阶段的一个片段,为了做到这一点:

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}/" 

我的下一个目标是能够在构build时复制特定configuration的资产目录,以避免将所有不同configuration的图像绑定到构build中,导致它变得臃肿。 我已经尝试了与上面的运行脚本相同的解决scheme,更改副本行以包括recursion选项(因为资产目录基本上是一个目录):

 cp -rv "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/" 

但是,当我这样做时,我的应用程序无法构build,并说它无法find应用程序图标和启动图像。 有任何想法吗?

这是你可以做的工作:

  • 为每个configuration添加一个单独的资产目录,就像您通常将资产目录添加到项目一样。 让我们假设这个例子我们称这些目录MediaForDebug.xcassets,MediaForAdHoc.xcassets和MediaForRelease.xcassets
  • 确保新创build的资产目录都是你的目标的成员(所以不要把它们排除在这里,我们稍后会做)
  • 现在,如果尚未添加到您的构build设置,请添加自定义的EXCLUDED_SOURCE_FILE_NAMES用户定义设置。
  • 请参阅下面的屏幕截图,了解要为此“用户定义”设置设置的值。

配置相关资产目录的EXCLUDED_SOURCE_FILE_NAMES

通过这样做,Xcode将只编译适当的资产目录,并忽略其他目录。 我已经在我们的一个项目上testing过了,它按预期工作。

祝你好运!

备注:如果您使用的是CocoaPods,那么您可能会遇到麻烦,因为CocoaPods会自行添加一个构build步骤来编译您的资产,将您的资产编译到.car文件中。 有关此问题的讨论,请参阅https://github.com/CocoaPods/CocoaPods/issues/1546 。 TL; DR:确保这个步骤不会在你的构build阶段执行,或者编辑它们执行的CocoaPods脚本而不执行资产构build。