framework和cocoapod加载图片问题

ios 自制Framework 获取指定bundle并读取里面的资源 应用中某些模块需要组件化,组件化后的工程最后会做二进制化处理,打包成.framework文件。 今天简单聊一下在主工程或其他组件中是如何访问自制组件.framework中的bundle,及其中资源的。 访问应用资源 我们知道苹果应用是基于沙盒机制, 打包生成.ipa后的资源会被放到沙盒的根目录下。通常在主工程中我们是这样访问资源的: NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"] 阅读详情

最近博主应实习公司要求封装一个下拉刷新上拉加载的控件,当功能实现之后想要集成到framework中和发布到cocoapod时都遇到了图片资源读取失败的问题,现将解决办法贴下。

framework中资源读取失败:
我们需要将资源打包到.bundle文件中(其实就是后缀为.bundle的文件夹,把资源放置其中即可).
然后根据你的目录结构来获取bundle

let bundle = Bundle(for: type(of: self))

这个bundle是你当前类的bundle
然后使用这个bundle来加载图片即可

let image = = UIImage(named: "CZXRefresh.bundle/refresh", in: bundle, compatibleWith: nil)

博主的目录结构如下:(上面两句话博主放在RefreshHeaderView.swift文件当中,读者可根据自己的文件结构来添加路径,只要有.bundle文件夹就需要加一层路径)
这里写图片描述

到这里,在framework中就可以正常加载图片了。

但当我们发不到cocoapod中时,发现图片又无法读取了,但现在又不想改源代码,怎么办呢?我们只需要在.podspec加入一句话即可:

s.resource_bundle = {
    'CZXRefresh' => ['CZXRefresh/Refresh/CZXRefresh.bundle/*.png']

=>左边的是在代码中使用的bundle名(比如上面的CZXRefresh.bundle)
=>右边的是真实的bundle路径

到这里博主的问题就解决了,如果问题请大方指出,大家相互学习,共同进步。

解决CocoaPods库图片无法显示的问题-通过修改github第三方库源代码 CocoaPods很好很强大,在使用的时候兼容性和契合度都非常好,极少有出错的情况。但凡事没有绝对,这不本猫在使用TWMessageBarManager库的时候就出现了一段小插曲。 TWMessageBarManager库是一个iOS中的显示通知提示栏的库,非常简洁,虽然该库已经很多年没有更新了,但并不影响其在github的star数量。 我基本上在使用一个较复杂的库之前,尤其是其文档略模糊,... 阅读详情

相关推荐

iOS开发关于"框架"的那些事

Library && Framework

1408

iOS Cocoapods第三方库使用Images.xcassets加载图片

Images.xcassets 可以很方便的管理不同分辨率的图片,复制粘贴也是非常的方便,下面介绍一种在Cocoapods 中使用Images.xcassets的方式: 以GitHub上比较火的QMUIKit项目为例: 1、在自己的项目中添加Images.xcassets资源文件: 2、编辑podspec文件,添加代码: ss.resource_bundles = {'QMUIResources' => ['QMUIKit/QMUIResources/*.*']} 它可以帮我们把所有的

学习小使者 的专栏 3369

告别JTAG!用Artix-7和SPI Flash实现FPGA远程升级的保姆级教程

本文详细介绍了如何利用Artix-7 FPGA和SPI Flash实现FPGA远程升级(OTA)的完整方案。通过硬件连接、Vivado工程配置和STM32模拟更新等步骤,帮助开发者告别传统的JTAG烧录方式,实现高效、安全的远程固件更新,特别适用于嵌入式系统开发中的现场维护场景。

weixin_33964987的博客 364

iOS本地图片缓存无法加载解决办法

最近做了一个功能,把图片缓存到App中。保存成功后,通过地址加载图片,发现可以成功。 但是关闭程序后,再次启动,发现直接通过保存的地址加载图片总是失败。 解决方法:获取图片时,需要重新拼接图片路径,就可以加载成功了。 保存图片代码: + (NSString *)saveImage:(UIImage *)image imageName:(NSString *)imageName { ...

榭榭的盒子 1027

Navcat最新版的激活和安装教程(全网最靠谱,最快捷的方式)

现在最新版本navcat已经出到了16.3了,并且新版navcat也支持连接redis和图标等更多样化的功能,但是比较头疼的一件事就是,只能试用14天。那么接下来小编教大家如何用最简单的方式使用最新版navcat16.

weixin_50737119的博客 2万+

医学成像学习笔记(一):核磁共振成像(MRI)k空间为何是图像频谱详解

前言   k空间是核磁共振成像图像重建的核心,可能很多人像笔者一样第一次学时会非常疑惑,为何k空间是图像的频域空间,观其填充过程,明明是空域信号的采样填充呀。网上很少有文章讨论这个问题,所以笔者在此写下自己的理解,供大家参考。 MRI位置编码   现在的MRI一次扫描的是一个断层或者多个断层,所谓断层就是一个有厚度的面,通过z方向梯度场来选择。我们扫描一个断层的目的是为了获得该断层各位置的质子情况,它们携带着组织的性质信息,反应出来的就是信号强度。如果整个断层都采用相同的磁场强度,而我们只能得到一个断

意疏的学习笔记 1万+

ios 封装framework内部加载图片

ios 封装framework内部加载图片

哈皮吖的博客 4135

MagicDraw-用例图

MagicDraw-用例图

木头征的博客 3129

把代码打包成静态framework给客户使用

一般第三方框架(例如个推,友盟等),为了使用方便提供了两种使用方式: 方式1、直接将其sdk,一般是framework形式,拖拽到客户工程中; 方式2、将sdk托管到远程仓库通过cocoapods管理; 这两种方式看似只差一个加载方式的问题,但是如果此框架有图片或xib时,则方式一和方式二加载图片和xib的路径也不相同。下边就来分别聊一聊制作过程和两种方式的区别: 一、制作framewor...

denggun12345的博客 552

别再手动算考勤了!教你用Python+企业微信API自动生成月度报表

本文介绍如何利用Python和企业微信API构建自动化考勤分析系统,实现从数据获取到可视化报表生成的全流程自动化。通过企业微信打卡接口获取数据,使用Pandas进行高效清洗和分析,并生成Excel和HTML格式的报表,大幅提升考勤统计效率。系统支持智能判定考勤状态,如迟到、早退等,并可通过定时任务实现月度自动化运行。

weixin_27875131的博客 288

踩过20+工控视觉项目的坑后,我用C# + 海康相机 + YOLOv11实现了零依赖产线缺陷检测

触发式检测:只有光电传感器检测到零件到位,才触发相机拍照和算法检测,不是持续推理,减少工控机性能占用;全链路本地运行:从图像采集、算法推理到不良品剔除,所有逻辑全在本地工控机运行,不需要外网、不需要云端服务,哪怕产线断网也能正常运行;异常降级机制:算法推理异常时,系统自动触发产线缓停,同时声光告警,不会让不良品流到下工序,满足汽车行业IATF16949质量要求;模块化解耦:算法核心层和业务逻辑层完全分离,后续更换YOLO模型、新增缺陷类型,只需要替换模型文件,不需要修改业务逻辑;全链路可追溯。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 152

iOS开发集成framework、Bundle文件获取

有些时候,我们开发的SDK并不需要对外隐藏,那么就可以将源码都打包给对方,也可以集成cocopods仓库,供外部使用。但有些时候,出于版权等原因,我们提供的代码只希望对方能够正常使用,却不希望对方看到内部的实现细节,就像苹果官方一样,给我们开发者提供的API只能看到.h文件以及相关的文档,这就是我们今天要实现的,也是苹果官方提供给我们的.framework。

weixin_44758107的博客 3169

深入Scrapy ItemLoader:打造优雅高效的Python爬虫数据清洗流水线

ItemLoader是 Scrapy 提供的声明式数据加载工具。它的核心理念是:将数据提取(从response中取原始值)和数据清洗/验证(处理空值、格式转换、默认值等)分离开。你可以把它想象成一个工厂流水线:原始零件(selector提取的文本)进入,经过一道道工序(输入处理器),组装成最终产品(Item字段)。首先在items.py中定义清晰的数据结构。使用搭配类型注释(虽然Scrapy自身不强制,但对人和IDE友好)。

2201_76125261的博客 68

iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方...

https://www.cnblogs.com/yk123/p/9340268.html // 加载自定义名称为Resources.bundle中对应images文件夹中的图片// 思路:从mainbundle中获取resources.bundleNSString *strResourcesBundle = [[NSBundle mainBundle] pathForResource:...

weixin_30521161的博客 287

mindie部署qwen3-8b

2. 确认目录文件权限是否如下所示,若存在不匹配项,则参考以下命令修改权限。否则要stop容器之后重新start,重新从《以下是在容器中的操作》开始操作。ctrl +d 让命令停止之后,需要等待一段事件让其释放,否则还会有占用。1. 若安装路径为默认路径,执行如下命令,进入MindIE安装目录。# 配置CANN环境,默认安装在/usr/local目录下。3. 运行以下命令初始化各组件环境变量,并开启日志打印。如果报错,可能有些线程没法去除,删除容器重新操作。# 配置模型仓环境变量。以下是在容器中的操作。

andeyeluguo的博客 1035

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

iOS架构-静态库.framework之资源文件打包bundle(6)

[iOS架构-静态库.framework手动打包及脚本化打包(5)](https://blog.youkuaiyun.com/shifang07/article/details/89372877)中介绍了.framework的脚本化打包,虽然在[iOS架构-静态库.a打包之资源文件打包成bundle(4)](https://blog.youkuaiyun.com/shifang07/article/details/89356701)中已经演示过,其实是一样的。但在这里还是补充一下.framework资源文件的使用。以免部分读者心里

沐雨07的专栏 2776

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

iOS组件化-本地资源加载问题

组件代码的上传:上传组件至CocoaPods 在组件工程的.podspec配置中说到,本地资源加载的配置方式有两种: # 方式一:会自动创建一个.bundle包,将资源放到.bundle下 # bundle名称可以自定义,在下面配置 s.resource_bundles = { 'TRectDetector' => ['TRectDetector/Assets/resource/*...

我可能是个Siri 1558

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【iOS开发】---- SDWebImage支持webp格式的图片

【iOS开发】---- SDWebImage支持webp格式的图片 什么是webp? iOS如何支持webp格式的图片? 什么是webp? 点击这里查看什么是webp。 iOS如何支持webp格式的图片? 在iOS的开发中,获取网络图片我们基本上都会使用开源库SDWebImage,正好SDWebImage也支持webp格式图片的加载。那么

qq_21649645的专栏 1436

iOS 组件化或SDK时对资源加载注意点

本文针对cocoapods进行打包的资源做个讲解,针对自身项目注意调整资源访问策略。

fengsh998的专栏 1705

ios framework 查看symbol_iOS 中的静态库与动态库

如果你经常困惑 iOS 开发中的静态库和动态库的作用与区别, 那么这篇文章可以为你解惑静态库 (Static Libraries)静态库简单的理解是多个目标文件 (object file, 以 .o 为后缀) 的打包集合. 静态库的存在形式:Mac/iOS: .a 或封装成 .frameworkLinux: .aWindows: .lib❝查看 object file 格式: objdump -m...

weixin_39785858的博客 1705

ios 从assets加载图片_iOS 平台 Flutter 集成方案

Liangliang Hu19年加入流利说,毕业于安徽工业大学的 iOS 开发者,热衷于各种新技术新理念。目前主要领域是 iOS 和 Flutter。平时喜欢唱歌、看电影、美食。是一名专注于 Cooking 的工程师。前言Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。Flutter 可以与现有的代码一起工作。在全世界,Flu...

weixin_39961369的博客 348

iOS App嵌入App,子App打包Framework 嵌入主App内

一直在搞开发,也没好好捋捋思路,就抽空总结一下 OC、Swift打包静态库,嵌入APP 演示项目地址:https://github.com/ySeasons/CustomFramework 1、场景: 介绍: 2、什么是库? 共享代码便是库,实现代码的复用,一般分为静态库和动态库 区别: 静态库:链接时完整的拷贝到可执行文件,多次使用多次拷贝,造成冗余,使包变得更大 动态库:链接时不复制,程序运行时由系统加载到内存中,不论系统加载次数,共用节省内存 iOS静态库: .a 和 .framework 文件 i

痞人芳芳的博客 2250

Framework在iOS中地运用以及配置

iOS中的库分为两种类型: 静态库:.a和framework 动态库:.dylib 和.framework .a 是一个纯二进制文件,.framework 除了二进制文件还有其他资源文件,.a不能直接使用,必须有.h文件的配合,而.framework则可以直接使用。 可以理解为 .a +.h +sourceFile = framework .a文件肯定静态的,.tbd肯定是动态库,.framew...

weixin_33994429的博客 758

简述静态库和动态库

1 介绍 静态库:链接是直接拷贝到可执行文件中,app间不共用。文件为 .a 和 .framework 。 动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,APP间共用。文件为 .framework 和 .tdb 。 Embedded Binaries: 嵌入二进制,会把库文件嵌入到APP的Bundle中(ipa包中),程序运行时会从bundle中加载库。 Linke...

忆思梦 608

iOS架构-将整个Xcode项目打包成静态库Framework(25)

一、介绍 1、背景 考虑到上架App的安全性和后期代码管理的一些内容,以及现有马甲和超级App的一些业务上,越来越多的涉及到大模块的内容搬移和共享,所以权衡各种方式之后,考虑使用静态库的方式来把独立业务部分用静态库的方式加载和共享。 2、静态库介绍 什么是库? 共享代码便是库,实现代码的复用,一般分为静态库和动态库。 静态库和动态库的区别? 静态库:链接时完整的拷贝到可执行文件,多次使用多...

沐雨07的专栏 4944
上一篇: Swift中UIScrollView与自定义上下滑动手势冲突
下一篇: Swift自定义下拉刷新、上拉加载(CZXRefresh的使用)
麻豆_matou
博客等级 码龄10年 41粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值