即使在指定 Bundle 时,在 IBDesignable Views 中使用资产目录中的命名颜色也会导致 IB 崩溃
Using named colors from asset catalogue in IBDesignable Views crashes IB even when specifying the Bundle
当引用使用 UIColor(named:)
创建的颜色时,Interface Builder 崩溃,因为它为颜色完成了 nil。
最初我认为这是因为 IB 在错误的 bundle 中寻找颜色,但在指定要查找的 Bundle 后,IB 仍然找不到颜色。
这在 device/simulator 上运行时运行良好。
extension UIColor {
// MARK: - Oranges
static let tangerine = UIColor(named: "Tangerine", in: Bundle(for: AppDelegate.self), compatibleWith: nil)!
.....
}
进一步调查,IB 查找的 Bundle 似乎确实包含对颜色和图像的引用,因此您希望它能正常工作..?
po Bundle(for: AppDelegate.self)
NSBundle </Users/me/Library/Developer/Xcode/DerivedData/MyApp-ddspmruccrhrxhbawgwawhzkrrts/Build/Intermediates.noindex/IBDesignables/Products/Debug - DEV-iphonesimulator/MyApp.app> (loaded)`
xcrun --sdk iphoneos assetutil --info pathToAsserts.car
{
"AssetType" : "Color",
"Color components" : [
1,
1,
1,
1
],
"Colorspace" : "srgb",
"Idiom" : "universal",
"Name" : "Marmalade",
"Scale" : 1
},
{
"AssetType" : "Image",
"BitsPerComponent" : 8,
"ColorModel" : "RGB",
"Colorspace" : "srgb",
"Compression" : "lzfse",
"Encoding" : "ARGB",
"Idiom" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"Name" : "sweets",
"Opaque" : false,
"PixelHeight" : 412,
"PixelWidth" : 324,
"RenditionName" : "sweets@2x.png",
"Scale" : 2,
"SizeOnDisk" : 132830
},
编辑:原来像上面那样指定包就足够了。清理构建文件夹,删除派生数据并重新启动 Xcode 使其按预期工作
原来只是Xcode在玩。清理构建文件夹、派生数据并重新启动 Xcode 解决了问题(当指定正确的包时,如我的代码片段所示)。
我注意到一件事与此作斗争:如果您的字体在主包中,使用 Bundle.main
不起作用,但使用 Bundle(for: AppDelegate.self)
(或其他一些 class in 你的主包)确实如此。
可能与 IBDesignablesAgent
将所有内容加载到其进程中的方式有关,但我绝对没有想到。
当引用使用 UIColor(named:)
创建的颜色时,Interface Builder 崩溃,因为它为颜色完成了 nil。
最初我认为这是因为 IB 在错误的 bundle 中寻找颜色,但在指定要查找的 Bundle 后,IB 仍然找不到颜色。
这在 device/simulator 上运行时运行良好。
extension UIColor {
// MARK: - Oranges
static let tangerine = UIColor(named: "Tangerine", in: Bundle(for: AppDelegate.self), compatibleWith: nil)!
.....
}
进一步调查,IB 查找的 Bundle 似乎确实包含对颜色和图像的引用,因此您希望它能正常工作..?
po Bundle(for: AppDelegate.self)
NSBundle </Users/me/Library/Developer/Xcode/DerivedData/MyApp-ddspmruccrhrxhbawgwawhzkrrts/Build/Intermediates.noindex/IBDesignables/Products/Debug - DEV-iphonesimulator/MyApp.app> (loaded)`
xcrun --sdk iphoneos assetutil --info pathToAsserts.car
{
"AssetType" : "Color",
"Color components" : [
1,
1,
1,
1
],
"Colorspace" : "srgb",
"Idiom" : "universal",
"Name" : "Marmalade",
"Scale" : 1
},
{
"AssetType" : "Image",
"BitsPerComponent" : 8,
"ColorModel" : "RGB",
"Colorspace" : "srgb",
"Compression" : "lzfse",
"Encoding" : "ARGB",
"Idiom" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"Name" : "sweets",
"Opaque" : false,
"PixelHeight" : 412,
"PixelWidth" : 324,
"RenditionName" : "sweets@2x.png",
"Scale" : 2,
"SizeOnDisk" : 132830
},
编辑:原来像上面那样指定包就足够了。清理构建文件夹,删除派生数据并重新启动 Xcode 使其按预期工作
原来只是Xcode在玩。清理构建文件夹、派生数据并重新启动 Xcode 解决了问题(当指定正确的包时,如我的代码片段所示)。
我注意到一件事与此作斗争:如果您的字体在主包中,使用 Bundle.main
不起作用,但使用 Bundle(for: AppDelegate.self)
(或其他一些 class in 你的主包)确实如此。
可能与 IBDesignablesAgent
将所有内容加载到其进程中的方式有关,但我绝对没有想到。