【问题标题】:The image set name "xxx" is used by multiple image sets with localized Asset Catalog (.xcassets)图像集名称“xxx”由具有本地化资产目录 (.xcassets) 的多个图像集使用
【发布时间】:2014-08-24 14:54:37
【问题描述】:

我想为我的应用支持的每种语言使用一个 Images.xcassets 目录。

所以在查找器中,我在每个 .lproj 目录中放置了一个 Images.xcassets 目录

在 xCode 中我有:

对于英语和法语 xcasset,他们在 xCode 的本地化字段中检查了英语和法语。

但是当我编译时,我的资产目录中的所有图像都会收到警告:

图像集名称“xxx”被多个图像集使用

我该如何纠正错误?

【问题讨论】:

    标签: ios xcode


    【解决方案1】:

    xcasset 上不能有两个同名的图像。

    我发现这个是因为我在 xcassets 文件中有一张用于 iPad 的名称为“default.png”的图像,而另一张用于 iPhone 的名称相同。你警告的原因是因为这个。两个具有相同名称的图像。

    解决方案是拥有一个图像“default.png”并在内部配置图像支持的不同设备。

    【讨论】:

    • 是的,我明白为什么会出现此错误。但这真的很烦人,因为 xcasset 应该是可本地化的。有没有办法正确本地化 xcasset ?
    • 您必须创建不同的目标。创建 xcasset 文件时,您必须将此文件链接到特定目标。检查此链接:link
    【解决方案2】:

    根据几个在线来源,您无法在资产目录中本地化图像。他们中的大多数都引用了 Xcode 5.1.1,但是从 Xcode 6.1 开始,您似乎仍然无法本地化它们。建议仅从资产目录中删除图像并以旧方式进行。

    http://tang.io/wordpress/462

    【讨论】:

    • 难以置信。 Apple 提供了一种管理项目资产的新方法,但不允许在其上使用本地化。为什么?有什么意义?
    • 当 Apple 完成用 Swift 重写 XCode 后,他们可能会添加此功能。在 XCode 9.2 中寻找它。
    【解决方案3】:

    我正在做类似的事情,希望根据我是构建调试、临时还是发布来从不同的资产目录中交换我的应用程序图标。我的解决方案是不在任何目标中包含调试和临时目录,然后在 Swift 中编写一个运行脚本以在运行时复制这些资产。这是脚本:

    import Foundation
    
    struct CopyNonReleaseIcons: Script {
    
        var usage: String {
            return "When running a non-release (Debug or AdHoc) build, switches out the app icon to help" +
                "differentiate between builds on the home screen.\n\n" +
                "Usage: swift CopyNonReleaseIcons.swift <CONFIGURATION> <PRODUCT_NAME> <BUILD_PATH>"
        }
    
        var expectedNumberOfArguments = 3
    
        func run(arguments arguments: [String]) {
            let configuration = arguments[0]
            let productName = arguments[1]
            let buildPath = arguments[2]
    
            if configuration == "Debug" || configuration == "AdHoc" {
                copyIcons(buildName: configuration, productName: productName, buildPath: buildPath)
            }
        }
    
        func copyIcons(buildName buildName: String, productName: String, buildPath: String) {
            let sourcePath = "My App/Resources/Asset Catalogs/" + productName + "SpecificAssets-" + buildName + "Icons.xcassets/AppIcon.appiconset/"
    
            var appName = "My App.app"
            if (productName == "White Label") {
                appName = "White Label.app"
            }
    
            shell(launchPath: "/bin/cp", arguments: ["-rf", sourcePath, buildPath + "/" + appName])
        }
    }
    
    CopyNonReleaseIcons().run()
    

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题,我的解决方法是:每个cell set一个标识符!

      【讨论】:

        猜你喜欢
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 2017-01-16
        相关资源
        最近更新 更多