基于MVVM構(gòu)建聊天App (四)構(gòu)建自己的開源庫

首頁

Github 原文

坦白來說我們所使用的任何一個(gè)功能在github等一些開源網(wǎng)站上都能找到示例代碼或相關(guān)開源庫,我個(gè)人認(rèn)為在使用一個(gè)開源代碼加入到自己的工程之前應(yīng)該慎重:

  • 有些開源項(xiàng)目的由于各種原因最終作者不再維護(hù),出現(xiàn)bug了我們只能自己維護(hù)或者尋找新的替代庫;
  • 我們的需求和開源庫有區(qū)別,即使使用了開源代碼也需要在其基礎(chǔ)上再次修改;
  • iOS 系統(tǒng)升級(jí)后,一些開源庫的作者不能及時(shí)發(fā)布新的兼容版本,可能會(huì)導(dǎo)致出現(xiàn)兼容問題;
  • 考慮到工程包的問題,雖然蘋果已將非Wi-Fi下載APP的大小升至150M,但在工程中大量引入第三方庫,必然也會(huì)導(dǎo)致APP包比預(yù)期要大;

在工程中部分功能,如LoadingView,網(wǎng)絡(luò)請(qǐng)求,JSON轉(zhuǎn)Model等,雖然有很多開源庫,但我還是建議盡量使用系統(tǒng)的方法,或者封裝一個(gè)組件并將其開源。這樣既可以避免上面的幾個(gè)問題,同時(shí)如果開發(fā)新項(xiàng)目了也可以更方便的集成到新項(xiàng)目中。

一般來說,構(gòu)建一個(gè)開源庫應(yīng)該做以下幾步操作:

  • 編寫開源代碼
  • 測(cè)試和修改
  • 發(fā)布到開源平臺(tái),如Github等
  • 后期維護(hù),包括及時(shí)升級(jí),修改bug,處理Issues和Pull requests

1、創(chuàng)建工程編寫代碼

1、登錄GitHub,新建一個(gè)倉庫,命名為RPBannerView-Swift,此處我選的是MIT開源協(xié)議。

A1.png

2、在本地新建一個(gè)RPBannerView-Swift文件夾,并將剛創(chuàng)建的代碼clone到該文件中

A2.png

3、在該文件夾中新建一個(gè)工程,命名為RPBannerView-Swift,完成后上傳代碼到GitHub上。

cd Desktop/RPBannerView-Swift/
git clone https://github.com/dengfeng520/RPBannerView-Swift.git
git add ./
git commit -a -m "上傳代碼"
git push origin master
git ll // 查看上傳記錄

4、iOS 版本兼容

A3.png

打開RPBannerView-Swift工程,修改最低支持版本為iOS 11,此時(shí)build工程,會(huì)報(bào)錯(cuò)。在AppDelegateSceneDelegate做兼容處理即可。

  • in AppDelegate.swift
@available(iOS 13.0, *)
extension AppDelegate {
    // MARK: UISceneSession Lifecycle
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }
    
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }
}
  • in SceneDelegate.Swift
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

}

2、發(fā)布到Carthage

  • 1、新建framework

編譯工程成功后新建一個(gè)framework,命名為RPBannerView,

A4
A5
A6
  • 2、完成后修改RPBannerView.framework的最低版本為iOS 11,

選中新建的RPBannerView.framework --> Build Settings --> iOS deployment Target --> iOS 11

A7
  • 3、添加RPBannerView.framework要編譯的文件,

    選中RPBannerView.framework --> Build Phases
    把需要編譯的文件導(dǎo)入即可。

A8
  • 4、新建Xcode schemes

選擇 Manager Schemes --> 勾選shared

A9
A10
  • 5、編譯FrameWork

切換到RPBannerView.framework,此處要注意,不要選擇模擬器?。?/strong>

A11

在Terminal中cd到工程文件,執(zhí)行build命令,

cd Desktop/RPBannerView-Swift/
carthage build --no-skip-current

一般情況下第一次build可能會(huì)報(bào)錯(cuò),目前不知道是什么原因造成的。

Skipped building RPBannerView-Swift due to the error: Dependency "RPBannerView-Swift" has no shared framework schemes

解決報(bào)錯(cuò)方法:打開Manage Schemes,取消勾選RPBannerView,點(diǎn)擊Close,然后再次打開重新勾選即可。
重新build成功。

Building scheme "RPBannerView" in RPBannerView-Swift.xcodeproj

A13

編譯成功后打開工程文件可以看到多了一個(gè)Carthage文件,逐步點(diǎn)開:Carthage --> Build --> iOS --> RPBannerView.framework是編譯成功后的文件。

  • 6、上傳RPBannerView-FrameWork到GitHub

編譯成功后需要把代碼上傳到GitHub并開源才可以讓其他人通過Carthage來使用這個(gè)開源庫。

cd Desktop/RPBannerView-Swift/
git add ./
git commit -a -m "update code"
git push origin master
  • 7、創(chuàng)建tag

在上傳到GitHub后需要?jiǎng)?chuàng)建一個(gè)tag,以此來確定這個(gè)庫的版本。

cd Desktop/RPBannerView-Swift/
git tag 1.0
git push --tags
  • 8、驗(yàn)證是否成功

新建一個(gè)工程,命名為RPBannerViewDemo,在Cartfile文件中導(dǎo)入上傳的庫,然后更新carthage,如果成功說明

cd RPBannerViewDemo
touch Cartfile
Vim Cartfile
github "dengfeng520/RPBannerView-Swift"
Esc -> :wq
carthage update --platform iOS --no-use-binaries

--platform iOS是指定平臺(tái)默認(rèn)是全平臺(tái)架構(gòu)的,--no-use-binaries是不用預(yù)編譯的二進(jìn)制,用源碼重新編譯二進(jìn)制,如果不指定,網(wǎng)絡(luò)不好的情況下會(huì)報(bào)錯(cuò)。

如果工程中已經(jīng)使用了Carthage,只需要更新RPBannerView-Swift即可。

carthage update RPBannerView-Swift --platform iOS

更新完成后,打開工程,選擇TARGETS -->Build Phases--> Link Binary With Libries 點(diǎn)擊加號(hào),選擇 Add File --> Carthage --> Build --> iOS 添加RPBannerView.FrameWork.

A14
/usr/local/bin/Carthage copy-frameworks

接下來,點(diǎn)擊+,選擇New Run Script Phase,此時(shí)新建了Run Script,在執(zhí)行命令中添加:

$(SRCROOT)/Carthage/Build/iOS/RPBannerView.framework
A15

然后就可以在工程中愉快的使用自己的開源庫了。

import RPBannerView

RPBanner.showBanner(BannerDisplay(title: "test loading..." ,backColor: UIColor.red, addView: view))
A16
A17

3、發(fā)布到CocoaPods

  • 1、創(chuàng)建RPBannerView-Swift.podspec
cd Desktop/RPBannerView-Swift/
pod spec create RPBannerView-Swift
vim RPBannerView-Swift.podspec
  • 2、編輯RPBannerView-Swift.podspec
Pod::Spec.new do |spec|
spec.name         = "RPBannerView-Swift"
spec.version      = "1.0"
spec.summary      = "A short description of RPBannerView."
spec.description  = "RPBannerView-Swift"
spec.homepage     = "https://github.com/dengfeng520/RPBannerView-Swift"
spec.license      = { :type => "MIT", :file => "LICENSE" }
spec.author             = { "dengfeng520" => "deng_feng520@163.com" }
spec.platform     = :ios
spec.ios.deployment_target = "11.0"
spec.source       = { :git => "https://github.com/dengfeng520/RPBannerView-Swift", :tag => "#{spec.version}" }
spec.source_files  = "RPBannerView-Swift/RPBannerView/*.swift"
spec.framework  = "Foundation", "UIKit"
end
  • 3、保存podspec文件,然后驗(yàn)證
pod spec lint RPBannerView-Swift.podspec --allow-warnings

驗(yàn)證成功提交到CocoaPods/Specs代碼庫中,讓其他人也可以通過pod install命令安裝開源庫。

驗(yàn)證成功提示:

RPBannerView-Swift.podspec passed validation. 

如果沒有注冊(cè)CocoaPods帳號(hào),可以通過以下命令注冊(cè)CocoaPods帳號(hào),

pod trunk register deng_feng520@163.com 'dengfeng520' --description='dengfeng520'

查看CocoaPods帳號(hào)信息:

pod trunk me
  • 4、發(fā)布到CocoaPods

如果已經(jīng)注冊(cè)了,直接發(fā)布到CocoaPods服務(wù)器:

pod trunk push RPBannerView-Swift.podspec --allow-warnings
B1

發(fā)布成功后更新CocoaPods本地庫:

 pod setup

然后搜索

pod search RPBannerView-Swift
  • 5、在項(xiàng)目中驗(yàn)證是否可以使用
cd RPBannerViewDemo
pod init
Vim Podfile
pod 'RPBannerView-Swift', :git => 'https://github.com/dengfeng520/RPBannerView-Swift'
Esc -> :wq
pod install

pod 下載成功后,即可在項(xiàng)目中使用這個(gè)庫。

4、編寫README.md文件

如圖所示一般一個(gè)開源的README.md由三部分組成:

RPBanner.png
  • (1)、頂部的Banner

此處借鑒其他開源項(xiàng)目添加一張Logo圖片和項(xiàng)目名稱就可以,讓圖片和文字全部居中即可。

<div align=center>
 <img src="https://github.com/dengfeng520/RPBannerView-Swift/blob/master/Banner.png?raw=true" width = 314 height = 200/>
</div>
<h2 align="center">RPBannerView</h2>
image

代碼覆蓋率是一個(gè)開源項(xiàng)目代碼質(zhì)量的重要指標(biāo),對(duì)于同樣功能的開源代碼人們一般會(huì)優(yōu)先選擇覆蓋率高的代碼。此處推薦使用 codecov的在線服務(wù)生成代碼測(cè)試的覆蓋率的Badge。

  • (3)、項(xiàng)目說明

對(duì)于說明部分,應(yīng)該解決的問題讓別人在最短的時(shí)間內(nèi)選擇你的使用你的代碼,一般來說首先要快速的解決開發(fā)者的疑惑。
這是什么樣的庫?相對(duì)其他同類庫有哪些優(yōu)點(diǎn)?如何快速上手?

在后面我們也可以加上一些其他內(nèi)容,如版本發(fā)布?xì)v史,項(xiàng)目改善計(jì)劃,詳細(xì)使用攻略等。

5、后期的維護(hù)

把自己的代碼發(fā)布到Github上之后,我們還應(yīng)該經(jīng)常維護(hù),如及時(shí)修改bug,版本更新,經(jīng)常關(guān)注Issues和Pull requests,解決未發(fā)現(xiàn)的問題和bug等。

Issues.png

相關(guān)鏈接: Github RPBannerView-Swift

最后編輯于
?著作權(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ù)。

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

  • 在開發(fā)一個(gè)新的App時(shí)不僅要考慮當(dāng)前版本的需求,更要考慮到后期的版本迭代和維護(hù)工作 《Clean Code》一書中...
    小時(shí)間光閱讀 1,348評(píng)論 0 6
  • 久違的晴天,家長會(huì)。 家長大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,867評(píng)論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,916評(píng)論 0 11
  • 可愛進(jìn)取,孤獨(dú)成精。努力飛翔,天堂翱翔。戰(zhàn)爭(zhēng)美好,孤獨(dú)進(jìn)取。膽大飛翔,成就輝煌。努力進(jìn)取,遙望,和諧家園。可愛游走...
    趙原野閱讀 3,545評(píng)論 1 1
  • 在妖界我有個(gè)名頭叫胡百曉,無論是何事,只要找到胡百曉即可有解決的辦法。因?yàn)槭侵缓偞蠹乙杂瀭饔灲形摇皟A城百曉”,...
    貓九0110閱讀 3,728評(píng)論 7 3

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