色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

iOS中Pod庫資源引用探究

Android編程精選 ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-05-26 11:11 ? 次閱讀

前言

Cocoapods中Pod引用資源的方式有多種,不同的方式對資源的使用還是有區(qū)別的,但也有一定的規(guī)律,這里我用一個樣例工程來進行說明,樣例工程名叫:AssetsDemo,使用pod lib create AssetsDemo命令創(chuàng)建,目錄結(jié)構(gòu)如圖:

b0dcbe7c-fb6a-11ed-90ce-dac502259ad0.jpg

這個pod很簡單,Classes目錄只有一個cell的swift和xib文件,Assets目錄有一些圖片資源,其中的TestTableViewCell.xib使用了這張test圖片。目錄結(jié)構(gòu)如下:

├──Assets
│├──Images.xcassets
││├──Contents.json
││└──test.imageset
││├──Contents.json
││├──test@2x.png
││└──test@3x.png
│├──test1@2x.png
│└──test1@3x.png
└──Classes
├──TestTableViewCell.swift
└──TestTableViewCell.xib

前期工作已經(jīng)準(zhǔn)備完畢,下面說下xib和圖片資源不同使用方式下的區(qū)別:

將xib放入source_files,圖片放入resource_bundles

在podspec的寫法如下:

s.source_files='AssetsDemo/Classes/**/*'
s.resource_bundles={
'AssetsDemo'=>['AssetsDemo/{Assets,Classes}/**/*.{xcassets,png}']
}

運行后會生成這樣的framework:

b0e86088-fb6a-11ed-90ce-dac502259ad0.jpg

我們可以看到,xib后綴會變成nib,并被放入framework中,而圖片資源被放入了AssetsDemo.bundle中。

這樣的結(jié)構(gòu),顯然在常規(guī)情況下,xib是沒法找到圖片并顯示的。但是有一種有缺陷的用法可以勉強解決這個問題,那就是直接把png圖片打包到AssetsDemo.bundle中,然后在xib中將圖片名改為AssetsDemo.bundle/圖片名。這樣做會導(dǎo)致xib編輯時無法正確的顯示圖片,也沒法使用xcassets目錄來存儲圖片,并且會導(dǎo)致一些系統(tǒng)優(yōu)化無法生效。不推薦這樣使用。

將xib和圖片都放入resources

在podspec的寫法如下:

s.source_files='AssetsDemo/Classes/**/*.swift'
s.resources='AssetsDemo/{Assets,Classes}/**/*.{xcassets,png,xib}'

網(wǎng)上有說法使用resources來指定資源,被指定的資源只會簡單的被 copy到目標(biāo)工程中(主工程),資源的使用會簡化,但是會與主工程同名資源文件產(chǎn)生沖突。但是在Xcode13和pod 1.11.2版本下,實測不是這樣的。官方的文檔也不是這樣說的Podspec Syntax Reference v1.11.2[1],它是分靜態(tài)庫和動態(tài)庫場景,靜態(tài)庫才有這類問題。

上述配置運行后會生成這樣的framework結(jié)構(gòu):

b0f23784-fb6a-11ed-90ce-dac502259ad0.jpg

從上圖可以看到,資源被直接放入了所在的framework,另外查看主工程的包文件,是沒有這些資源的。綜上所述,可以得出結(jié)論,動態(tài)庫中,resources指定的資源,會被直接copy到framework,不會與主工程資源文件沖突。

另外,由于xib文件TestTableViewCell.nib和Assets.car在同一個目錄下,xib可以直接從Assets.car中找到圖片資源并正確展示

在主工程中打開這個xib文件,如果主工程中有同名資源,那么編輯時會優(yōu)先顯示主工程的資源,但是實際運行時還是這個pod的資源。

這里xib可以放入source_files和resources,效果是一樣的

將xib和圖片都放入resource_bundles

在podspec的寫法如下:

s.source_files='AssetsDemo/Classes/**/*.swift'
s.resource_bundles={
'AssetsDemo'=>['AssetsDemo/{Assets,Classes}/**/*.{xcassets,png,xib}']
}

上述配置運行后會生成這樣的framework結(jié)構(gòu):

b0fa7fb6-fb6a-11ed-90ce-dac502259ad0.jpg

從上圖可以看到,xib文件TestTableViewCell.nib和Assets.car在同一個目錄下,xib可以直接從Assets.car中找到圖片資源并正確展示。其中,test1圖片雖然沒有以xcassets格式引入,但是也能直接找到并正確展示。

總結(jié)

綜上所述,我們可以得出一個原則:盡量讓xib和xcassets與圖片在同一個目錄下,這樣xib可以直接找到圖片并正常展示。

關(guān)于resources和resource_bundles,在動態(tài)庫下,他們最終效果差不多,只是resource_bundles會把資源封裝在bundle中,使用的時候會稍微麻煩一點:

//使用resources的情況:
letmyBundle=Bundle(for:TestTableViewCell.self)
tableView.register(UINib.init(nibName:"TestTableViewCell",bundle:myBundle),
forCellReuseIdentifier:"cell")

//使用resource_bundles的情況:
letmyBundle=Bundle(for:TestTableViewCell.self)
letpath=myBundle.path(forResource:"AssetsDemo",ofType:"bundle")!
letassetsBundle=Bundle.init(path:path)
tableView.register(UINib.init(nibName:"TestTableViewCell",bundle:assetsBundle),
forCellReuseIdentifier:"cell")

至于靜態(tài)庫,則推薦使用resource_bundles了。綜合來看,不管是靜態(tài)庫還是動態(tài)庫,都推薦使用resource_bundles來引入所有的資源,因為resources方式在靜態(tài)庫和動態(tài)庫場景,資源的使用方法差異太大,而resource_bundles各場景是一致的。

至于source_files,它只能引入代碼和xib文件,不支持引入圖片等其它資源。不建議用source_files方式引入xib,如果一定要使用,要注意避免出現(xiàn)xib中圖片無法加載的問題。

by: 掘金 - 星的天空

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    568

    瀏覽量

    24768
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    687

    瀏覽量

    22053
  • 靜態(tài)庫
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    7471
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3395

    瀏覽量

    150729
  • 資源
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    17805

原文標(biāo)題:iOS 中 Pod 庫資源引用探究

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用GCC編譯STM32F1,makefile引用.a報錯的原因?

    使用STcube生成了一個基于GCC便于的工程且編譯完成。 現(xiàn)在想加入自己的.a文件,進行如下操作: 1)在main函數(shù)中加入.a的頭文件; 2)引用.a
    發(fā)表于 04-07 06:09

    請問怎么引用DSP 6747 RTS實時?

    您好 請問怎么引用DSP 6747 RTS實時?ti.targets.rts6000.ae674 這個是什么文件?RTS6740.lib 這個呢?到底怎么引用這種文件?然后 需要
    發(fā)表于 08-02 09:28

    iOS靜態(tài)和動態(tài)的區(qū)別

    iOS 靜態(tài)(靜態(tài)依賴、三方依賴、資源處理等)
    發(fā)表于 06-17 07:03

    大量的iOS開發(fā)資源匯總

    這里收集了大量的iOS開發(fā)資源,幾乎是網(wǎng)上最全的呢,包括大量的開發(fā)案例、接口以及類,分享給大家,希望大家喜歡。
    發(fā)表于 07-11 07:50

    Pod資源配置

    《Kubernetes進階實戰(zhàn)》第四章《管理Pod資源對象》
    發(fā)表于 10-22 14:39

    在OpenHarmony library如何引用本地har

    我在devstudio 的library引用本地har, build時報如下錯誤:Error:The HAR generated by the library project
    發(fā)表于 04-02 15:21

    在HarmonyOS模塊引用本地har包編譯報錯的解決措施

    問題現(xiàn)象在HarmonyOS模塊引用本地的har包,編譯時提示“HAR_DEPENDENCY_ERROR”錯誤信息,如下圖所示:解決措施HarmonyOS
    發(fā)表于 04-13 14:33

    iOS系統(tǒng)怎樣解決循環(huán)引用

    稍有常識的人都知道在 iOS 開發(fā)時,我們經(jīng)常會遇到循環(huán)引用的問題,比如兩個強指針相互引用,但是這種簡單的情況作為稍有經(jīng)驗的開發(fā)者都會輕松地查找出來。 但是遇到下面這樣的情況,如果只看其實現(xiàn)代碼,也
    發(fā)表于 09-26 10:07 ?0次下載
    <b class='flag-5'>iOS</b>系統(tǒng)<b class='flag-5'>中</b>怎樣解決循環(huán)<b class='flag-5'>引用</b>

    各類iOS項目中組織代碼的方法分析

    ://git.coding.net/xxx/specs.git# Coding等私有Git托管平臺 # iOS版本支持 # platform :ios, 7.0 # 開發(fā)的子項目 # pod
    發(fā)表于 09-26 11:38 ?0次下載

    一些非常有用的iOS開源

    的最好的用戶體驗。 用了這個,你只需要遵循一系列協(xié)議,iOS會優(yōu)雅地接管你的collection view并且會正確、好看地顯示給用戶信息。很明顯,每個iOS項目都應(yīng)該采用。 CocoaPods:
    發(fā)表于 09-26 14:31 ?0次下載
    一些非常有用的<b class='flag-5'>iOS</b>開源<b class='flag-5'>庫</b>

    Kubernetes組件pod核心原理

    的 IP 地址和主機名 hostname,利用 namespace 進行資源隔離,相當(dāng)于一臺獨立沙箱環(huán)境; pod 相當(dāng)于一臺獨立主機,內(nèi)部可以封裝一個或多個容器(通常是一組相關(guān)的容器),內(nèi)部容器之間
    的頭像 發(fā)表于 09-02 09:27 ?1837次閱讀

    pod底層網(wǎng)絡(luò)和數(shù)據(jù)存儲是如何進行的

    的 IP 地址和主機名 hostname,利用 namespace 進行資源隔離,相當(dāng)于一臺獨立沙箱環(huán)境; pod 相當(dāng)于一臺獨立主機,內(nèi)部可以封裝一個或多個容器(通常是一組相關(guān)的容器),內(nèi)部容器之間
    的頭像 發(fā)表于 09-24 11:35 ?1702次閱讀

    KubernetesPod簡易理解

    Pod是Kubernetes中非常重要的概念,也是Kubernetes管理的基本單位。正如其名,Pod像一個豌豆莢,可以容納多個container,擁有相同的IP地址。
    的頭像 發(fā)表于 02-15 10:44 ?1283次閱讀

    K8S API資源對象-CRD介紹

    在Kubernetes,像Pod、Service和Deployment這樣的資源是由內(nèi)置的資源類型如Pod、Service和Deploym
    的頭像 發(fā)表于 08-08 10:21 ?1139次閱讀

    Pod是如何在底層實現(xiàn)的?如何使用Docker創(chuàng)建Pod

    剛開始接觸 Kubernetes 時,你學(xué)到的第一件事就是每個 Pod 都有一個唯一的 IP 和主機名,并且在同一個 Pod ,容器可以通過 localhost 相互通信。所以,顯而易見,一個
    的頭像 發(fā)表于 08-14 10:33 ?1317次閱讀
    <b class='flag-5'>Pod</b>是如何在底層實現(xiàn)的?如何使用Docker創(chuàng)建<b class='flag-5'>Pod</b>?
    主站蜘蛛池模板: 少妇性饥渴BBBBBBBBB| 国产精品一久久香蕉国产线看| 青青久| 国产午夜福利片| chinese学生gv video| 亚洲色噜噜狠狠站欲八| 日日夜夜狠狠干| 免费色片播放器| 很很射影院| 国产高清视频a在线大全| 99视频免视看| 在线亚洲97se| 亚洲精品国产精品精| 日韩中文网| 男人的天堂色偷偷| 久久国产香蕉视频| 国产强奷伦奷片| 成年人视频免费在线观看| 18videosex性欧美黑色| 亚洲欧美一区二区成人片| 四虎影视国产精品亚洲精品hd | 一亲二脱三插| 亚洲AV永久无码精品澳门| 天天国产在线精品亚洲| 青青草久久| 男人大臿蕉香蕉大视频| 麻豆精品传媒2021网站入口| 精品久久久99大香线蕉| 日日撸影院在线| 农村脱精光一级| 美女被C污黄网站免费观看| 精品区2区3区4区产品乱码9| 国产午夜在线观看视频| 国产精品无码人妻在线| 工口肉肉彩色不遮挡| 超碰高清熟女一区二区| a在线观看免费视频| 99视频精品国产免费观看| 9277在线观看免费高清完整版| 最近中文字幕2019免费版| 在线亚洲97se|