將完整的iOS項(xiàng)目轉(zhuǎn)換成一個(gè)framework,并做成CocoaPods遠(yuǎn)程依賴

將完整的項(xiàng)目制作成framework和正常制作工具類SDK一個(gè)道理,需要注意的點(diǎn)是:

1.圖片及文件(word等)資源需要制作成Resource.bundle
2.app里面得依賴有的是動(dòng)態(tài)庫(kù),有的是靜態(tài)庫(kù),他們引入方式要注意一下(這里順帶講一下項(xiàng)目pods庫(kù)處理)
3.反射類名調(diào)用及交換方法要特別注意調(diào)用的實(shí)際和影響范圍
4.項(xiàng)目啟動(dòng)方式要改,你只能移動(dòng)項(xiàng)目的內(nèi)容,appdelegte不需要,一些設(shè)置得從appdelegate中挪到其他地方

1.圖片及文件資源的bundle制作

image.png

建好之后直接將圖片及文件資源直接拖到bundle中


image.png

在項(xiàng)目中的圖片、文件加載方式換一下,類似于

btn.imageName = [NSString stringWithFormat:@"Resource.bundle/%@",icons[I]];
image.png

2.制作framework

先看下需要做成遠(yuǎn)程依賴的演示項(xiàng)目,就這么一個(gè)簡(jiǎn)單的頁(yè)面和一個(gè)彈框。


image.png

下面是制作framework的過程


image.png

因?yàn)槲覀兪菍㈨?xiàng)目制作成framework供其他人調(diào)用,所以刪除創(chuàng)建時(shí)生成的TestDemoSDK.h,重新創(chuàng)建一個(gè)繼承于NSObject的類,用來寫方法名和實(shí)現(xiàn)供他人使用。


image.png

image.png

然后是一些framework的常規(guī)配置
image.png

image.png

image.png

設(shè)置framework支持的設(shè)備和最低版本號(hào)


image.png

將演示項(xiàng)目中的主要代碼導(dǎo)入到這個(gè)framework中,Resource.bundle可以不用導(dǎo)入,后面提交的時(shí)候需要用到,導(dǎo)入了也沒關(guān)系,就是打出來的包里面會(huì)多了一個(gè)Resource.bundle包,這樣后面在寫podspec的時(shí)候可以不寫source地址,直接食用framework包里面的bundle資源也是同樣可以的


image.png

image.png

將pch文件設(shè)置一下地址,和你正常項(xiàng)目中設(shè)置是一樣的$(SRCROOT)/TestDemo/LFPrefixHeader.pch
image.png

項(xiàng)目中依賴了Masonry這個(gè)三方庫(kù),所以要將當(dāng)前的framework工程和普通項(xiàng)目一樣進(jìn)行pod init ->pod install一下,將Masonry庫(kù)集成到framework工程中
繼承后的項(xiàng)目是

到這里編譯一下項(xiàng)目,如果報(bào)三方庫(kù)頭文件找不到,可能是因?yàn)樯厦娴?步導(dǎo)致的原因,Build Active Architecture Only 
設(shè)置為NO的意思是當(dāng)前打包的.framework支持所有的設(shè)備.否則打包時(shí)只能用當(dāng)前版本的模擬器或真機(jī)運(yùn)行.可以測(cè)試下,
將debug改成YES,release改成NO,如果編譯成功了,說明是這個(gè)問題導(dǎo)致的

這樣應(yīng)該就能夠解決編譯報(bào)錯(cuò)的問題

3.構(gòu)建自定義代碼類

在剛才創(chuàng)建的TestDemoSDKManager里面寫方法供別人調(diào)用你的項(xiàng)目


image.png

完事之后將需要暴露給別人使用的或是看到的.h文件暴露出去,直接從project中拽到public中就可以了


image.png

4.編譯framework合并模擬器和真機(jī)包

分別選擇真機(jī)和模擬器com+b編譯


image.png

image.png

合并兩個(gè)包,在終端輸入命令行 -lipo create 真機(jī)包地址(直接拖拽進(jìn)來) 模擬器包地址 -output 真機(jī)包地址


image.png
image.png

合并完了之后,將真機(jī)包復(fù)制出來,這就是最后的framework包,可以先測(cè)試下這個(gè)包能不能用,新建一個(gè)測(cè)試項(xiàng)目,將剛才導(dǎo)出的framework包和Resource.bundle包導(dǎo)入到項(xiàng)目中,并pods之前SDK依賴的Masonry庫(kù)


image.png

我這里跑一下是沒有問題的,下面就是上傳做遠(yuǎn)程依賴了

5.制作cocoapods遠(yuǎn)程依賴庫(kù)

在github上創(chuàng)建自己的倉(cāng)庫(kù),注意勾選指示的位置


image.png

將倉(cāng)庫(kù)clone到桌面后,寫podspec文件,如果有不懂的可以自行百度,下面簡(jiǎn)單說明下,可以直接復(fù)制我的修改下使用。 spec.author 是制作者信息,spec.author = { "github賬戶昵稱" => "github登錄郵箱" }

Pod::Spec.new do |spec|

  spec.name         = "TestDemoSDK"
  spec.version      = "0.0.1"
  spec.summary      = "test TestDemoSDK 1224"

  spec.description  = <<-DESC
  此版本SDK說明文字,自己根據(jù)實(shí)際書寫
                   DESC

  spec.homepage     = "https://github.com/marsLiuFei/TestDemoSDK"

  spec.license      = "MIT"

  spec.author             = { "GaiShiDaYingXiong" => "mars_liu_dev@163.com" }

  spec.ios.deployment_target = "9.0"

   spec.source       = { :git => "https://github.com/marsLiuFei/TestDemoSDK.git", :tag => "#{spec.version}" }

  spec.resource  = 'TestDemoSDK/Resource.bundle'
  spec.ios.vendored_frameworks = 'TestDemoSDK/TestDemoSDK.framework'
   spec.pod_target_xcconfig = {
    'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
  }
  spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

  #  spec.source_files = 'TestDemoSDK/*'
  spec.dependency 'Masonry'

   spec.requires_arc = true
end
image.png

該寫的都寫了,然后就是提交這個(gè)倉(cāng)庫(kù)了


image.png

image.png

提交完后,打tag


image.png

然后提交自己的pod,執(zhí)行pod trunk push TestDemoSDK.podspec --allow-warnings,TestDemoSDK這個(gè)是自己的framework名稱,如果你沒有登錄trunk或者沒有賬戶,自行百度。


image.png

看到這個(gè)就說明提交成功了。
使用的時(shí)候,用下面的方法導(dǎo)入,不寫git地址的話,會(huì)等幾個(gè)小時(shí)后才能使用。


image.png

最后將所有的文件放到github,可以對(duì)照著文件研究點(diǎn)擊下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容