短篇小说,我们正在构建一个需要品牌化的产品,因为多个客户将共享90%相同的UI和代码,一些配置选项可以打开/关闭事物以及不同的颜色,字体和图像等.
除了.xcassets文件夹外,所有工作正常.我每个客户有1个,目前他们有相同的资产名称,有不同的图像.例如,每个.xcassets都有一个ic_settings,但每个内容都有所不同.
我已经检查了复制包资源构建阶段,对于每个目标,它实际上每个只有1个.xcasset文件夹.
<编辑图像>
<编辑图像>
当我运行应用程序时,它正确加载了appIcon(我必须将其重命名为appIcon-< target>,因为Xcode中的下拉显示了所有内容并且无法知道哪个是哪个).它还显示正确的包名称并启动screen.xib.
以下是图像本身.正如您所看到的,图像完全不同:
<编辑图像>
<编辑图像>
但是,当我运行客户1和客户2.所有图像都是客户1.
我不知道这有多大可能,请告诉我:
>我不是疯了
>我犯了一些我无法看到的简单错误
>这不是一个Xcode错误,并且不需要人类所见过的最精心策划的工作.可能重命名所有图像以附加目标名称:-(.
注意
我已经尝试过清理,构建,重置模拟器,删除派生数据等.在模拟器和真实设备上都有.
如果我将一个唯一的图像添加到其中一个文件夹,我就可以使用它了.直觉是Xcode正在合并文件夹????
解决方法
标记的答案是正确的,这是cocoapods.这是一个已知问题,目前最好的解决方法(我发现),是使用这个:https://github.com/CocoaPods/CocoaPods/issues/1546#issuecomment-61907975
事实证明,如果要编译XCAsset包,则必须在资产编译时将所有这些包指定给XCAsset编译器.为了支持XCAsset文件,cocoa pods可以将它可以找到的所有资产编译到一个目标中见https://github.com/CocoaPods/CocoaPods/pull/1427#issuecomment-26978591
和https://github.com/CocoaPods/CocoaPods/issues/1546#issuecomment-43137780
您的解决方案是您需要修改./Pods/Target支持文件/ Pods-(pod目标)/ Pods-(pod target)-resources.sh中的可可pod生成的任何文件.
有一个看起来像这样的代码块
if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi
它编译构建路径中的所有资产目录,因为它无法智能地告知此时哪些资产目录属于哪个目标.您需要删除脚本的这一部分.如果您需要从pod中获取资产目录,则必须手动添加它们.每次运行pod安装时,都需要还原对此文件的更改.
好消息是你不会生气.玩得开心:D