基于MVVM构建聊天App (四)构建自己的开源库

首页

Github 原文

坦白来说我们所使用的任何一个功能在github等一些开源网站上都能找到示例代码或相关开源库,我个人认为在使用一个开源代码加入到自己的工程之前应该慎重:

  • 有些开源项目的由于各种原因最终作者不再维护,出现bug了我们只能自己维护或者寻找新的替代库;
  • 我们的需求和开源库有区别,即使使用了开源代码也需要在其基础上再次修改;
  • iOS 系统升级后,一些开源库的作者不能及时发布新的兼容版本,可能会导致出现兼容问题;
  • 考虑到工程包的问题,虽然苹果已将非Wi-Fi下载APP的大小升至150M,但在工程中大量引入第三方库,必然也会导致APP包比预期要大;

在工程中部分功能,如LoadingView,网络请求,JSON转Model等,虽然有很多开源库,但我还是建议尽量使用系统的方法,或者封装一个组件并将其开源。这样既可以避免上面的几个问题,同时如果开发新项目了也可以更方便的集成到新项目中。

一般来说,构建一个开源库应该做以下几步操作:

  • 编写开源代码
  • 测试和修改
  • 发布到开源平台,如Github等
  • 后期维护,包括及时升级,修改bug,处理Issues和Pull requests

1、创建工程编写代码

1、登录GitHub,新建一个仓库,命名为RPBannerView-Swift,此处我选的是MIT开源协议。

A1.png

2、在本地新建一个RPBannerView-Swift文件夹,并将刚创建的代码clone到该文件中

A2.png

3、在该文件夹中新建一个工程,命名为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,此时build工程,会报错。在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、发布到Carthage

  • 1、新建framework

编译工程成功后新建一个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
    把需要编译的文件导入即可。

A8
  • 4、新建Xcode schemes

选择 Manager Schemes --> 勾选shared

A9
A10
  • 5、编译FrameWork

切换到RPBannerView.framework,此处要注意,不要选择模拟器!!

A11

在Terminal中cd到工程文件,执行build命令,

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

一般情况下第一次build可能会报错,目前不知道是什么原因造成的。

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

解决报错方法:打开Manage Schemes,取消勾选RPBannerView,点击Close,然后再次打开重新勾选即可。
重新build成功。

Building scheme "RPBannerView" in RPBannerView-Swift.xcodeproj

A13

编译成功后打开工程文件可以看到多了一个Carthage文件,逐步点开:Carthage --> Build --> iOS --> RPBannerView.framework是编译成功后的文件。

  • 6、上传RPBannerView-FrameWork到GitHub

编译成功后需要把代码上传到GitHub并开源才可以让其他人通过Carthage来使用这个开源库。

cd Desktop/RPBannerView-Swift/
git add ./
git commit -a -m "update code"
git push origin master
  • 7、创建tag

在上传到GitHub后需要创建一个tag,以此来确定这个库的版本。

cd Desktop/RPBannerView-Swift/
git tag 1.0
git push --tags
  • 8、验证是否成功

新建一个工程,命名为RPBannerViewDemo,在Cartfile文件中导入上传的库,然后更新carthage,如果成功说明

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

--platform iOS是指定平台默认是全平台架构的,--no-use-binaries是不用预编译的二进制,用源码重新编译二进制,如果不指定,网络不好的情况下会报错。

如果工程中已经使用了Carthage,只需要更新RPBannerView-Swift即可。

carthage update RPBannerView-Swift --platform iOS

更新完成后,打开工程,选择TARGETS -->Build Phases--> Link Binary With Libries 点击加号,选择 Add File --> Carthage --> Build --> iOS 添加RPBannerView.FrameWork.

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

接下来,点击+,选择New Run Script Phase,此时新建了Run Script,在执行命令中添加:

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

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

import RPBannerView

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

3、发布到CocoaPods

  • 1、创建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文件,然后验证
pod spec lint RPBannerView-Swift.podspec --allow-warnings

验证成功提交到CocoaPods/Specs代码库中,让其他人也可以通过pod install命令安装开源库。

验证成功提示:

RPBannerView-Swift.podspec passed validation. 

如果没有注册CocoaPods帐号,可以通过以下命令注册CocoaPods帐号,

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

查看CocoaPods帐号信息:

pod trunk me
  • 4、发布到CocoaPods

如果已经注册了,直接发布到CocoaPods服务器:

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

发布成功后更新CocoaPods本地库:

 pod setup

然后搜索

pod search RPBannerView-Swift
  • 5、在项目中验证是否可以使用
cd RPBannerViewDemo
pod init
Vim Podfile
pod 'RPBannerView-Swift', :git => 'https://github.com/dengfeng520/RPBannerView-Swift'
Esc -> :wq
pod install

pod 下载成功后,即可在项目中使用这个库。

4、编写README.md文件

如图所示一般一个开源的README.md由三部分组成:

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

此处借鉴其他开源项目添加一张Logo图片和项目名称就可以,让图片和文字全部居中即可。

<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

代码覆盖率是一个开源项目代码质量的重要指标,对于同样功能的开源代码人们一般会优先选择覆盖率高的代码。此处推荐使用 codecov的在线服务生成代码测试的覆盖率的Badge。

  • (3)、项目说明

对于说明部分,应该解决的问题让别人在最短的时间内选择你的使用你的代码,一般来说首先要快速的解决开发者的疑惑。
这是什么样的库?相对其他同类库有哪些优点?如何快速上手?

在后面我们也可以加上一些其他内容,如版本发布历史,项目改善计划,详细使用攻略等。

5、后期的维护

把自己的代码发布到Github上之后,我们还应该经常维护,如及时修改bug,版本更新,经常关注Issues和Pull requests,解决未发现的问题和bug等。

Issues.png

相关链接: Github RPBannerView-Swift

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容

  • 在开发一个新的App时不仅要考虑当前版本的需求,更要考虑到后期的版本迭代和维护工作 《Clean Code》一书中...
    小時間光阅读 1,144评论 0 6
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,462评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,544评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,712评论 1 1
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 3,254评论 7 3