Ответ 1
Я был в той же ситуации, что и вы, и я закончил с "взломом", который вы упомянули, но он автоматизирован во время установки pod, поэтому он намного удобнее обслуживать.
В моем podspec у меня есть
# Pre-build resource bundle so it can be copied later
s.pre_install do |pod, target_definition|
Dir.chdir(pod.root) do
command = "xcodebuild -project MyProject.xcodeproj -target MyProjectBundle CONFIGURATION_BUILD_DIR=Resources 2>&1 > /dev/null"
unless system(command)
raise ::Pod::Informative, "Failed to generate MyProject resources bundle"
end
end
end
Затем позже в podspec:
s.resource = 'Resources/MyProjectBundle.bundle'
Трюк здесь заключается в том, чтобы собрать пакет перед установкой pod, чтобы доступный .bundle был доступен, и его можно просто связать, как если бы он был в источнике все время. Таким образом, я могу легко добавить новые ресурсы /images/xibs в цель пакета, и они будут скомпилированы и связаны. Работает как шарм.
У меня есть категория в NSBundle + MyResources, которая позволяет легко получить доступ к ресурсам пакета:
+ (NSBundle *)myProjectResources
{
static dispatch_once_t onceToken;
static NSBundle *bundle = nil;
dispatch_once(&onceToken, ^{
// This bundle name must be the same as the product name for the resources bundle target
NSURL *url = [[NSBundle bundleForClass:[SomeClassInMyProject class]] URLForResource:@"MyProject" withExtension:@"bundle"];
if (!url) {
url = [[NSBundle mainBundle] URLForResource:@"MyProject" withExtension:@"bundle"];
}
bundle = [NSBundle bundleWithURL:url];
});
return bundle;
}
Итак, если вы хотите загрузить, например, базовая модель данных:
NSURL *modelURL = [[NSBundle myProjectResources] URLForResource:@"MyModel" withExtension:@"momd"];
Я также использовал некоторые удобные методы для доступа к изображениям:
+ (UIImage *)bundleImageNamed:(NSString *)name
{
UIImage *imageFromMainBundle = [UIImage imageNamed:name];
if (imageFromMainBundle) {
return imageFromMainBundle;
}
NSString *imageName = [NSString stringWithFormat:@"MyProject.bundle/%@", name];
UIImage *imageFromBundle = [UIImage imageNamed:imageName];
if (!imageFromBundle) {
NSLog(@"Image not found: %@", name);
}
return imageFromBundle;
}
Пока у меня это не получилось.