当前位置 : 主页 > 手机开发 > ios >

ios – Images.xcassets打破了目标的规律

来源:互联网 收集:自由互联 发布时间:2021-06-11
好的,所以我在这个上面拔出牙齿,我真诚地希望我犯了一个愚蠢的错误(已经有一些深夜了). 短篇小说,我们正在构建一个需要品牌化的产品,因为多个客户将共享90%相同的UI和代码,一些配
好的,所以我在这个上面拔出牙齿,我真诚地希望我犯了一个愚蠢的错误(已经有一些深夜了).

短篇小说,我们正在构建一个需要品牌化的产品,因为多个客户将共享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

网友评论