我在我的SPM包中创建了一个资源文件夹,并将应用所需的所有UIColors放在其中。我为每种颜色设置了Any和Dark外观。但是当我在应用中使用这些颜色(在Storyboard中设置)时,我只能得到“light”模式的颜色。如果没有这种支持,SPM中的颜色资源有什么意义呢?
vktxenjb1#
资源(图像或颜色)不能很好地与SPM配合使用。问题如下-xib或故事板存储在bundle(Bundle)中,当xib/故事板加载时,它也从同一bundle加载资源。可以在另一个模块中引用一个类(例如UIView子类),但无法从不同的bundle加载资源。对于图像来说,这是显而易见的-界面构建器正确显示图像,但它们在运行时不会加载。对于颜色,这有点棘手-界面构建器正确显示它们,乍一看,它们似乎在运行时正确加载。然而,它们不是。xib/故事板只包含一个用作后备的RGB值。亮暗模式都使用该后备值。顺便说一下,这不是SPM特定的,同样的情况也会发生在xcframeworks上。我能看到的唯一解决方法是在每个使用它们的包中使用相同的颜色资源,或者切换到SwiftUI。这不太可能改变,因为Interface Builder总是更多地为Objective-C运行时而创建,而Swift特定的包管理器只是不能很好地与它一起工作。使用旧的Xcode目标,我们可以将相同的资产文件添加到多个目标,这将工作,但这似乎不可能与SPM。
Bundle
UIView
1条答案
按热度按时间vktxenjb1#
资源(图像或颜色)不能很好地与SPM配合使用。
问题如下-xib或故事板存储在bundle(
Bundle
)中,当xib/故事板加载时,它也从同一bundle加载资源。可以在另一个模块中引用一个类(例如
UIView
子类),但无法从不同的bundle加载资源。对于图像来说,这是显而易见的-界面构建器正确显示图像,但它们在运行时不会加载。对于颜色,这有点棘手-界面构建器正确显示它们,乍一看,它们似乎在运行时正确加载。然而,它们不是。xib/故事板只包含一个用作后备的RGB值。亮暗模式都使用该后备值。
顺便说一下,这不是SPM特定的,同样的情况也会发生在xcframeworks上。
我能看到的唯一解决方法是在每个使用它们的包中使用相同的颜色资源,或者切换到SwiftUI。
这不太可能改变,因为Interface Builder总是更多地为Objective-C运行时而创建,而Swift特定的包管理器只是不能很好地与它一起工作。
使用旧的Xcode目标,我们可以将相同的资产文件添加到多个目标,这将工作,但这似乎不可能与SPM。