Dav*_*ter 20 iphone xcode objective-c ios cocoapods
我正在创建一个私有库,其中包含库中组件引用的资源.该库与使用CocoaPods的应用程序共享.在库的.podspec中,我包含了这样一行:
s.resource_bundles = {'IXMapKitResources' => ['IXMapKit/Resources/*']}
Run Code Online (Sandbox Code Playgroud)
捆绑包中的一个资源是具有多个图像集的资产目录,其中一个称为"IXMKAnnotationIcons-Normal-Accident".以下代码返回nil:
UIImage * image = [UIImage imageNamed: @"IXMKAnnotationIcons-Normal-Accident"];
Run Code Online (Sandbox Code Playgroud)
我在mokacoding.com上发现了一篇文章,描述了如何从pod中加载字体,但这对我不起作用:
- (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;
}
}
Run Code Online (Sandbox Code Playgroud)
描述resources关键字的CocoaPods网页有以下警告:
我们强烈建议库开发人员采用资源包,因为可以使用resources属性进行名称冲突.此外,使用此属性指定的资源将直接复制到客户端目标,因此Xcode不会优化它们.
我不知道该怎么做.
Dav*_*ter 12
事实证明这是资产目录的问题,而不是CocoaPods或bundle.将图像移出资产目录可以解决问题.看起来Apple不支持辅助资源包中的资产目录.可怜.
例如派拉蒙
podspec
s.resource_bundle = {
'Paramount' => ['Sources/Paramount.bundle/*.png']
}
Run Code Online (Sandbox Code Playgroud)
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)
}
}
Run Code Online (Sandbox Code Playgroud)
这里Paramount.Toolbar.self可以是该框架中的任何类
| 归档时间: |
|
| 查看次数: |
12545 次 |
| 最近记录: |