我正在创建一个私有库,其中包含由库中的组件引用的资源。该库与使用CocoaPods的应用程序共享。在库的.podspec中,我包含了如下一行:
s.resource_bundles = {'IXMapKitResources' => ['IXMapKit/Resources/*']}
该捆绑包中的资源之一是具有多个图像集的资产目录,其中一个称为“IXMKAnnotationIcons-Normal- in”。下面的代码返回一个nil:
UIImage * image = [UIImage imageNamed: @"IXMKAnnotationIcons-Normal-Accident"];
我找到了一个描述如何从pod加载字体的article on mokacoding.com,但这对我不起作用:
- (UIImage *) ixmk_imageNamed: (NSString *) name
{
NSString * IXMKResourceBundleName = @"IXMapKitResources.bundle";
NSString * resourceName = [NSString stringWithFormat: @"%@/%@", IXMKResourceBundleName, name];
NSString * imageTypeString = [self ixmk_stringForImageType: imageType];
NSURL * url = [[NSBundle mainBundle] URLForResource: resourceName withExtension: imageTypeString];
NSData * imageData = [NSData dataWithContentsOfURL: url];
if (imageData != nil)
{
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef) imageData);
CGImageRef imageRef = [self ixmk_imageFromDataProvider: provider imageType: imageType];
UIImage * image = [UIImage imageWithCGImage: imageRef];
CFRelease(imageRef);
CFRelease(provider);
return image;
}
else
{
return nil;
}
}
CocoaPods webpage describing the resources keyword具有以下警告:
我们强烈建议库开发人员采用资源包,因为使用资源属性可能会出现名称冲突。此外,使用该属性指定的资源会直接复制到客户机目标,因此Xcode不会对它们进行优化。
我在这里不知所措。
发布于 2014-05-28 14:01:14
事实证明这是资产目录的问题,而不是CocoaPods或捆绑包的问题。将图像移出资产目录解决了问题。看起来Apple不支持二级资源捆绑包中的资产目录。真可惜。
发布于 2016-04-27 05:12:07
podspec
s.resource_bundle = {
'Paramount' => ['Sources/Paramount.bundle/*.png']
}
swift
public extension UIImage {
static func make(name: String) -> UIImage? {
let bundle = NSBundle(forClass: Paramount.Toolbar.self)
return UIImage(named: "Paramount.bundle/\(name)", inBundle: bundle, compatibleWithTraitCollection: nil)
}
}
在这里,Paramount.Toolbar.self
可以是框架中任何类
发布于 2015-05-03 00:09:43
一个明显的解决方案是使用Cocoapods生成的包(该文件夹实际上不存在)作为NSBundle:
试一试:http://blog.flaviocaetano.com/post/cocoapods-and-resource_bundles/
这对我很有效!
https://stackoverflow.com/questions/23835052
复制相似问题