首页 > 其他分享 >iOS 子工程(下沉组件 私有库) 调用文件、图片 等资源 方法

iOS 子工程(下沉组件 私有库) 调用文件、图片 等资源 方法

时间:2023-08-09 11:12:18浏览次数:31  
标签:文件 私有 程序包 iOS bundleForClass bundle 获取 组件 资源

发现问题:在子工程里面 使用 

[[NSBundle mainBundle] pathForResource:ofType:]  不能找到目标资源文件

原因

[[NSBundle mainBundle] pathForResource:ofType:] 是获取主程序包(Main Bundle)中资源文件路径的方法。主程序包是指你的应用程序本身,而不包括子工程或子项目。

那么要在子工程中获取资源文件路径,就要使用相对于子工程 bundle 的路径。这时,我们应该使用子工程 bundle 的路径来进行资源文件的获取。

方法

使用bundleForClass: 方法来获取子工程 bundle,然后使用这个 bundle 来获取资源文件的路径。这样就能够在子工程中获取资源文件的路径了。  

NSBundle *subprojectBundle = [NSBundle bundleForClass:[self class]];//类对象,通过这个参数来获取特定类所在的 bundle,以便在该 bundle 中定位资源文件。
NSString *resourcePath = [subprojectBundle pathForResource:@"ResourceFileName" ofType:@"png"];
//等价 NSString *resourcePath = [[subprojectBundle resourcePath] stringByAppendingPathComponent:@"ResourceFileName.png"];
if (resourcePath) {
    UIImage *image = [UIImage imageWithContentsOfFile:resourcePath];
    // 在这里使用获取到的图片
}

 

 eg:如果你有一个名为 SubprojectViewController 的类,你可以这样使用 bundleForClass: 方法:

NSBundle *subprojectBundle = [NSBundle bundleForClass:[SubprojectViewController class]];

在这个示例中,[SubprojectViewController class] 返回的是 SubprojectViewController 类的类对象,它将被用来确定该类所在的 bundle。

总之,bundleForClass: 方法的参数是一个类对象,通过这个参数来获取特定类所在的 bundle,以便在该 bundle 中定位资源文件。

其他讨论:[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: 是否适合子工程中获取资源文件路径方法?

适用场景:

  1. 适用于主程序包中的资源: 这种方法适用于获取主程序包(Main Bundle)中的资源文件路径。如果你要获取主程序包中的资源,这个方法是一个很方便的选择。

  2. 子文件夹: 如果你想要在主程序包中的特定子文件夹中获取资源文件,可以将子文件夹名称作为参数传递给 stringByAppendingPathComponent: 方法。

  3. 资源文件的位置: 确保资源文件位于主程序包中,并在 Xcode 中设置正确的配置,以便它们被复制到 bundle 中。

  4. 无法用于其他 bundle: 这个方法主要用于获取主程序包中的资源文件,对于其他 bundle,如静态库或动态库中的资源,使用这种方式可能会失败,因为它依赖于主程序包的路径。

小结:

  1.  [NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:是一个适用于获取主程序包中资源文件的简单方法,特别是当你知道资源文件位于主程序包的哪个子文件夹时。但如果你需要获取其他 bundle 中的资源文件,使用其他方法,比如使用 bundleForClass:更为合适。
  2.  有时在某些特定情况下,这个方法可能会在私有库中返回资源文件路径。可能的情况之一是,私有库被添加到主项目中后,其资源文件被复制到主程序包的位置,从而使这种方式能够正常工作。但是,这并不是一个可靠的方法,因为它依赖于特定的项目结构和配置。
  3.  为了保证代码的可移植性和健壮性,建议在处理资源文件时使用更可靠的方法,如使用 bundleForClass: 方法来获取正确的 bundle,并从 bundle 中获取资源文件路径。这种方法更具通用性,适用于不同项目结构和配置的情况。

==========华丽分割线==========

以上bundleForClass:保证了 子工程正确获取了资源图片的路径。

还需注意:

1.图片和资源文件要在子工程的合理位置 : 比如和Classes 文件并列 建立一个 Resource 文件夹 资源都放在里面

 

2.图片和数据库资源要在KFZTechs.podspec 中体现 

3.私有库提交代码时候打tag 需要是最新的tag 和 版本号

 

综上:要正确获取到子工程的图片 文件资源 需要

(1)bundleForClass:获取子工程bundle

(2)图片 文件资源 的Resource 放在与Classes并列位置

(3)图片和数据库资源要在KFZTechs.podspec 中体现

  (4)  私有库提交代码时候打tag 需要是最新的tag 和 版本号

 

标签:文件,私有,程序包,iOS,bundleForClass,bundle,获取,组件,资源
From: https://www.cnblogs.com/someonelikeyou/p/17615981.html

相关文章

  • vue3 + ElementPlus 封装函数式弹窗组件
    需求场景:弹窗组件需要支持自定义的插槽内容,删除的弹窗也要使用这个组件,只是样式不一样而已,希望在父组件使用删除弹窗的时候直接调用某个方法就可以显示弹窗组件模拟cuDialog假设我的弹窗组件有以下的props和事件dialogVisible:控制弹窗显示和隐藏title:弹窗的标题showClose......
  • 界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!
    DevExpressWPF Chart组件拥有超大的可视化数据集,并提供交互式仪表板与高性能WPF图表库。DevExpressCharts提供了全面的2D/3D图形集合,包括数十个UI定制和数据分析/数据挖掘选项。PS:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。......
  • hadoop组件---spark实战-----airflow----调度工具airflow定时运行任务的理解
    我们在前面已经初步了解了airflow:hadoop组件—spark实战-----airflow----调度工具airflow的介绍和使用示例但是我们开始尝试使用airflow的定时任务的时候,常常遇到一个尴尬的情况,任务没有成功运行,或者说设置开始时间是今天,但是明天才开始运行。本篇文章尝试说明其中的......
  • hadoop组件---spark实战-----airflow----调度工具airflow部署到k8s中使用
    在之前的文章中我们已经了解了airflow和它的工作原理。hadoop组件—spark实战-----airflow----调度工具airflow的介绍和使用示例Scheduler进程,WebServer进程和Worker进程需要单独启动。Scheduler和WebServer可以跑在一个操作系统内,也可以分开,而通常Worker需要很多,如果是部署特定......
  • hadoop组件---spark实战-----airflow----调度工具airflow的介绍和使用示例
    Airflow是什么Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行。airflow提供了丰富的命令行工具用于系统管控,而其web管理界面同样也可以方便的管控调度任务,并且对任务运行状态进行实时监控,方便了系统的运维和管理,......
  • Dubbo是干嘛的,Dubbo原理和机制,Dubbo的核心组件
    大家好,我是哪吒。Dubbo是一个高性能的JavaRPC框架。RPC是远程过程调用的缩写,其基本思想是:客户端像调用本地方法一样,通过网络请求调用远程服务器上的服务。Dubbo可以帮助我们更方便地构建分布式应用程序,它具有高效的远程调用、服务自动注册和发现、负载均衡、容错机制等众多特性,是......
  • MDC-based Angular Material组件迁移
    1.前言在AngularMaterialv15中,许多组件已基于官方的WebMaterialDesignComponents(MDC)进行了重构。以下导入的组件已被重构:ImportpathSummaryofchanges@angular/material/autocompleteStylechangesonly@angular/material/buttonStylechanges,A......
  • ElementUI的Upload组件上传时如何携带参数
    后端接口@PostMapping("/manual/import")@ApiOperation("手工导入")publicRtnResultmanualImport(@RequestParam("enterpriseGroupName")StringenterpriseGroupName,@RequestParam("file&q......
  • 解锁Spring组件扫描的新视角
    本文分享自华为云社区《Spring高手之路10——解锁Spring组件扫描的新视角》,作者:砖业洋__。首先,我们将探讨一些Spring框架中IOC(InversionofControl)的高级特性,特别是组件扫描的相关知识。组件扫描是Spring框架中一个重要的特性,它可以自动检测并实例化带有特定注解(如@Component,......
  • python打包成sdk上传到私有仓库和使用
    我们已经学习了如何运行一个python项目(当我们有它的源码文件py文件的时候)。python的使用和运行我们有一个项目,需要打包到其他机器上运行,如果每次都是复制整个项目源码就显得有点笨拙。实现这个需求有很多种方案。例如:PyInstaller可参考链接:https://ningyu1.github.io/site/po......