导航

内容来源于网络

前言

分享Github开源项目,在玩的过程中学习,2023年每天的目标就是研究几个项目,寻找点乐趣。

开源项目

001.Kingfisher

Kingfisher 是一个异步下载和缓存图片的库,你可以把它看做 SDWebImage 的纯 Swift 实现和替代。它可以帮助简单地实现像是用户头像或者 table view 里面的图片的下载和缓存这样的工作,以提高 app 速度和帮助开发者节省时间

002.MiaoYan

一款 macOS 上的 Markdown 编辑器。采用 Swift5 原生开发,适用于 macOS 的 Markdown 编辑器「妙言」。界面清爽好看,支持 PPT 模式、语法高亮、黑暗模式等功能。

003.Swift-30-Projects

30 个小型 Swift Apps,可以用来上手学习、练习移动开发。

004.EmojiIntelligence

完全用 Swift 实现神经网络的 Demo

  • 第一步设置 emoji 对应的图形
  • 使用神经网络识别图形,返回 emoji 表情

005.LyricsX

一个为 iTunes、Spotify、Vox 播放器提供自动下载歌词,并在桌面和任务栏显示的插件

006.iina

Mac 下开源多媒体播放器,支持多国语言、高逼格 UI。安装:brew cask install iina

007.Gifski

Gifski这个开源程序可以将一系列图片或一段视频转化为高质量的gif,高质量是这个程序最大的特色,下面我们将从使用与评价两个方面来介绍这个程序。Gifski实际上适用于windows,mac以及linux三个平台,唯一不同的是,mac平台上的gifski内置了视频分帧工具,因此可以直接把视频拖入程序窗口即可生成gif,而其它平台上则只能使用第三方程序分帧后才能处理,并且要在命令行中运行

008.FileHider-for-mac

一款将你的文件夹、文件隐藏起来的小工具。适用于 macOS X 10.10 及以后的版本

009.Bartinter

状态栏外观管理组件。可根据背景的颜色,动态地更改状态栏的颜色,使状态栏的信息可读

010.iOS-Developer-Roadmap

(英文) iOS 开发者学习路线图

011.CocoaDebug

iOS APP 内置调试工具,支持 log 日志查看、网络抓包、沙盒查看等功能,代码零入侵。

012.IBAnimatable

一个帮助我们在 Interface Builder 和 Swift Playground 里面设计 UI、交互、导航模式,、换场和动画的开源库。下图的整个 App 都是通过 IBAnimatable 在 Interface Builder 设计完成,没有任何一行代码。

013.TuringCalendar

图灵教育推出的限量款编程日历 2018,因为简约大气的设计和每周一个编程语言的介绍,在程序员中广受欢迎。现在日历 PDF 的源文件已经开源,于是就有了这个项目。一个 macOS 桌面上的日历 widget,效果图如下:

014.GodEye

一行代码自动显示日志、崩溃、网络、ANR、泄漏、CPU、文件夹等信息,就像上帝睁开眼睛一样

015.Bagel

一个小型、原生的 iOS 网络调试工具。使用过程不需要配置证书、代理之类的东西。只需要 iOS 设备和 Mac 处于同一网络,就可以查看、监控 App 的网络流量等信息

016.uPic

一款 macOS 端的图床客户端,支持多种免费、付费的图床,让你方便快捷的上传图片,醉心于内容创作的工具

017.Percentage

让 Swift 语言支持百分比类型,消除精度缺失的烦恼。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import Percentage

10% + 5.5%
//=> 15.5%

-10% / 2
//=> -5%

(40% + 93%) * 3
//=> 399%

50% * 50%
//=> 25%

30% > 25%
//=> true

50%.of(200)
//=> 100

Percentage(50)
//=> 50%

Percentage(fraction: 0.5)
//=> 50%

50%.fraction
//=> 0.5

10%.rawValue
//=> 10

110%.clampedZeroToHundred
//=> 100%

print("\(1%)")
//=> "1%"

Percent.random(in: 10%...20%)
//=> "14.3%"
018.AppearancesSwitcher

可以在 macOS 通知中心上快速切换“亮/暗”主题的小工具

019.EFQRCode

一个轻量级的、用来生成和识别二维码的纯 Swift 库,可根据输入的水印图和图标产生艺术二维码

020.Brooklyn

炫酷的苹果电脑屏幕保护程序

021.PopMenu

一款简单、漂亮、方便、灵活自定义的弹出菜单组件。如果你的 App 需要一款灵活好看的弹出菜单的话,那么 PopMenu 值得你一试

022.timer-app

一个 macOS 上简单的计时器软件。拖动蓝色箭头设置时间,当时间到了会显示通知,并发出一个很好的声音

023.pock

一款在苹果电脑的触控栏中,显示 macOS 程序坞的开源工具

024.SwiftyGif

高性能且上手容易的 Swift GIF 库。

示例代码:

1
2
3
4
5
6
7
8
9
10
import SwiftyGif

do {
let gif = try UIImage(gifName: "MyImage.gif")
let imageview = UIImageView(gifImage: gif, loopCount: 3) // Will loop 3 times
imageview.frame = view.bounds
view.addSubview(imageview)
} catch {
print(error)
}
025.lottie-ios

Airbnb 开源的快速实现 APP 动画的三方库。还有支持 AndroidReact NativeWebWindows 等平台,动画效果如下:

026.YLExtensions

它解决了 UITableView 及 UICollectionView 注册和配置过程不得不写很多重复代码的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import YLExtensions

// Let SomeModel adopts and conforms to the ModelType protocol
struct SomeModel: ModelType {
typealias Value = Never

let someA: [A]
let someB: [B]
let someC: [C]
let someD: [D]

var data: [[Any]] {
return [someA, someB, someC, someD]
}
}

extension SomeModel {
static var tCells: [UITableViewCell.Type]? {
// All cell types created by pure code.
[ACell.self, BCell.self]
}

static var tNibs: [UITableViewCell.Type]? {
// All cell types created by nib.
[CCell.self, DCell.self]
}

static var tAll: [UITableViewCell.Type]? {
// All cell types, Sort by display order.
[ACell.self, BCell.self, CCell.self, DCell.self]
}
}
027.Aerial

炫酷的苹果系统屏保项目。该屏保视频取材自苹果零售店 Apple TV 的专用屏保,航拍质量超棒,快换上试试吧。直接下载 Aerial.saver.zip 文件,解压后即可运行。

028.stats

macOS 菜单栏上的监控工具。支持 CPU、GPU、内存、网络等监控和多语言

029.Mos

一个用于在 macOS 上平滑鼠标滚动效果或单独设置滚动方向的小工具。让你的滚轮爽如触控板般丝滑

030.ZLPhotoBrowser

轻量级照片选择框架。它使用简单、功能丰富,支持预览/相册内拍照及录视频、拖拽/滑动选择、编辑裁剪图片/视频等功能。

示例代码:

  • Preview selection
1
2
3
4
5
let ps = ZLPhotoPreviewSheet()
ps.selectImageBlock = { [weak self] results, isOriginal in
// your code
}
ps.showPreview(animate: true, sender: self)
  • Library selection
1
2
3
4
5
let ps = ZLPhotoPreviewSheet()
ps.selectImageBlock = { [weak self] results, isOriginal in
// your code
}
ps.showPhotoLibrary(sender: self)
031.Dozer

隐藏 macOS 状态栏图标的工具,使状态栏看起来更整洁

032.SwiftDate

Swift 处理时间和日期的开源三方库。

示例代码:

1
2
3
4
5
6
7
8
// All default datetime formats (15+) are recognized automatically
let _ = "2010-05-20 15:30:00".toDate()
// You can also provide your own format!
let _ = "2010-05-20 15:30".toDate("yyyy-MM-dd HH:mm")
// All ISO8601 variants are supported too with timezone parsing!
let _ = "2017-09-17T11:59:29+02:00".toISODate()
// RSS, Extended, HTTP, SQL, .NET and all the major variants are supported!
let _ = "19 Nov 2015 22:20:40 +0100".toRSS(alt: true)
033.SwiftUI

该项目参考 SwiftUI 官方示例,记录代码和展示效果

034.vimr

Neovim 的 macOS 版

035.xcode-dev-cleaner

用于清理各种 Xcode 的缓存数据,释放存储空间。注意是清除 Xcode 缓存数据,不是卸载 Xcode 哈

036.mas

Mac App Store 命令行版

037.Moya

基于 Alamofire 的轻量级 Swift 网络层框架。它提供了网络抽象层,使用起来足够简单,能够方便地与 RXSwift、PromiseKit、ObjectMapper 结合,轻松地应对常见的开发任务。同时也非常全面,应对复杂任务也同样容易。最后 Moya 有一个很棒的社区,贡献者们提供了很多实用的扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
provider = MoyaProvider<GitHub>()
provider.request(.zen) { result in
switch result {
case let .success(moyaResponse):
let data = moyaResponse.data
let statusCode = moyaResponse.statusCode
// do something with the response data or statusCode
case let .failure(error):
// this means there was a network failure - either the request
// wasn't sent (connectivity), or no response was received (server
// timed out). If the server responds with a 4xx or 5xx error, that
// will be sent as a ".success"-ful response.
}
}
038.MTMR

自定义 TouchBar 的应用。

039.iGlance

macOS 状态栏系统监视器

040.SwiftPamphletApp

一款免费开源的 Swift 手册工具。能够帮助开发者方便地查看 Swift 语法和常用库的使用指南,除此之外还可以接收 Swift 开源库的动态

041.Pine

一个免费、轻量、简洁的 macOS Markdown 编辑器。

功能:

  • 主题
  • LaTex 公式
  • 自动保存
  • 自定义字体
  • 字数统计等写作分析
  • 等等

042.Publish

专为 Swift 开发人员准备的静态网站生成器。让你实现整个网站都是用 Swift 构建的工具,支持多种主题、插件以及更多强大的自定义选项。示例网站,安装和快速开始:

1
2
3
4
5
6
7
git clone https://github.com/JohnSundell/Publish.git
cd Publish
make

mkdir MyWebsite
cd MyWebsite
publish new

043.Maccy

适用于 macOS 的轻量级剪贴板管理工具。支持复制内容的历史记录、快速搜索、快捷键选择等

044.SQLite.swift

纯 Swift 实现的轻量级 SQLite3 数据库框架。采用链式编程的写法,让数据库的管理变得优雅。代码容易理解,即使你不会 SQL 语句,也可以轻松查询数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import SQLite

// Wrap everything in a do...catch to handle errors
do {
let db = try Connection("path/to/db.sqlite3")

let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")

try db.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
// CREATE TABLE "users" (
// "id" INTEGER PRIMARY KEY NOT NULL,
// "name" TEXT,
// "email" TEXT NOT NULL UNIQUE
// )

let insert = users.insert(name <- "Alice", email <- "alice@mac.com")
let rowid = try db.run(insert)
// INSERT INTO "users" ("name", "email") VALUES ('Alice', 'alice@mac.com')

for user in try db.prepare(users) {
print("id: \(user[id]), name: \(user[name]), email: \(user[email])")
// id: 1, name: Optional("Alice"), email: alice@mac.com
}
// SELECT * FROM "users"

let alice = users.filter(id == rowid)

try db.run(alice.update(email <- email.replace("mac.com", with: "me.com")))
// UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com')
// WHERE ("id" = 1)

try db.run(alice.delete())
// DELETE FROM "users" WHERE ("id" = 1)

try db.scalar(users.count) // 0
// SELECT count(*) FROM "users"
} catch {
print (error)
}
045.awesome-ios

超棒的 iOS 开源项目集合。它非常全面包含 Objective-C、Swift 语言的项目,拥有网络、UI、JSON、数据库、音视频等分类,iOS 初学者寻找开源项目的好地方

046.Knot

一款 iOS 抓包工具。实现了 HTTP(S) 解析、流量解析、多格式导出、证书管理以及过程分析等

047.SwiftUITodo

用 SwiftUI 做的 Todo 工具。这是一个示例项目帮助新手掌握 SwiftUI

048.flappy-fly-bird

用 Swift 写的 Flappy Bird 游戏

049.Hue

一个集合多功能于一体的着色工具。在 iOS 开发中非常好用,可以快速简单的进行 UI 的颜色设置、透明度修改、设置渐变颜色、修改图片的颜色等。相比于使用 Swift 原生繁重复杂的 RGBA 颜色 API,Hue 仅需要一行代码,简洁易用。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let color = UIColor(hex: "#3b5998")
backgroundColor = color
label.textColor = color.isDark
? UIColor.whiteColor()
: UIColor.darkGrayColor()

lazy var gradient: CAGradientLayer = [
UIColor(hex: "#FD4340"),
UIColor(hex: "#CE2BAE")
].gradient { gradient in
gradient.speed = 0
gradient.timeOffset = 0

return gradient
}
050.Grid

受 CSS Grid 启发,用 SwiftUI 编写关于视图(view)布局的开源项目

051.SwiftyJSON

一个 Swift JSON 三方库,用更简单的方式处理 JSON

052.firefox-ios

Firefox 浏览器 iOS 源码

053.SwifterSwift

500合1 的原生 Swift 扩展库集合。集成了 500 多个原生 Swift 扩展的库,提供了更加方便的函数、语法糖、数据类型、UIKit 以及更高性能的 Cocoa 类,提高 Swift 的开发效率实现 1+1>2 的效果。适用于 iOS、macOS、tvOS 等系统

054.Design-Patterns-In-Swift

设计模式 Swift 5.0 实现。中文版

Usage:

1
2
3
4
5
6
7
8
9
10
// Create piles of money and link them together 10 < 20 < 50 < 100.**
let ten = MoneyPile(value: 10, quantity: 6, next: nil)
let twenty = MoneyPile(value: 20, quantity: 2, next: ten)
let fifty = MoneyPile(value: 50, quantity: 2, next: twenty)
let hundred = MoneyPile(value: 100, quantity: 1, next: fifty)

// Build ATM.
var atm = ATM(hundred: hundred, fifty: fifty, twenty: twenty, ten: ten)
atm.withdraw(amount: 310) // Cannot because ATM has only 300
atm.withdraw(amount: 100) // Can withdraw - 1x100
055.IGListKit

Instagram 推出的一套数据驱动的 UICollectionView 框架,用来创建快速且灵活的列表界面。提供了更简单的使用 UICollectionView 方式,并且支持对自己的数据模型进行自定义 diff 操作,提供更好的架构以复用 Cell 和组件

056.Observable-Swift

一个在 Swift 上实现 KVO 的轻量级工具。简单易用地解决了 Swift 相对于 Objective-C 缺少 Key Value Observing(KVO)的问题

1
2
3
4
5
6
7
8
9
10
// create a Observable<Int> variable
var x = Observable(0)

// add a handler
x.afterChange += { println("Changed x from \($0) to \($1)") }
// without operators: x.afterChange.add { ... }

// change the value, prints "Changed x from 0 to 42"
x <- 42
// alternativelyL x ^= 42, without operators: x.value = 42
057.FlappySwift

用 Swfit 写的 Flappy Bird 游戏

058.NetNewsWire

适用于 macOS 和 iOS 的 RSS 阅读器

059.Charts

支持 iOS/tvOS/OSX 的图表库。

功能:

  • 8 种不同的图表类型
  • 两个轴支持缩放和缩放手势
  • 组合图表、导出图片
  • 等等

060.eul

一款极简免费的 macOS 状态监控工具。

061.Runestone

适用于 iOS 的高亮文本编辑器。基于 Tree-sitter 实现的高性能 iOS 文本编辑器,支持多种编程语言的语法高亮,以及行数、显示不可见字符、插入符号对等功能。

062.SwiftFormat

用于格式化 Swift 代码的工具。当多人合作开发项目的时候,一致的代码风格就变得至关重要。该项目可以自动统一 Swift 代码风格,支持多种编辑器和命令行方式调用,适用于 macOS 和 Linux,让 Swift 代码风格统一变得十分简单和方便。

063.WhatsNewKit

轻松展示应用新功能的 Swift 组件。当开发者为应用增加了新功能,就需要在用户更新后告知新功能和内容。通过该组件可以轻松展示新功能,支持高度自定义、SwiftUI、iOS 和 macOS 系统。

1
2
3
4
5
6
7
8
9
10
11
12
import SwiftUI
import WhatsNewKit

struct ContentView: View {

var body: some View {
NavigationView {
// ...
}
.whatsNewSheet()
}
}
064.WordPress-iOS

官方开源的 WordPress iOS 客户端

065.MonitorControl

控制 macOS 外接显示器的工具。一款 macOS 多显示器控制工具,有了它就能够在菜单栏或使用快捷键,轻松地控制外接显示器的音量、亮度、对比度。

066.SwiftMessages

一个非常灵活的 iOS 消息库。用 Swift 编写的消息组件,它可以将消息灵活地显示在屏幕顶部、底部、中央,还提供了几款好看的布局和主题,拿来即用十分方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Instantiate a message view from the provided card view layout. SwiftMessages searches for nib
// files in the main bundle first, so you can easily copy them into your project and make changes.
let view = MessageView.viewFromNib(layout: .cardView)

// Theme message elements with the warning style.
view.configureTheme(.warning)

// Add a drop shadow.
view.configureDropShadow()

// Set message title, body, and icon. Here, we're overriding the default warning
// image with an emoji character.
let iconText = ["🤔", "😳", "🙄", "😶"].randomElement()!
view.configureContent(title: "Warning", body: "Consider yourself warned.", iconText: iconText)

// Increase the external margin around the card. In general, the effect of this setting
// depends on how the given layout is constrained to the layout margins.
view.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)

// Reduce the corner radius (applicable to layouts featuring rounded corners).
(view.backgroundView as? CornerRoundingView)?.cornerRadius = 10

// Show the message.
SwiftMessages.show(view: view)
067.OnlySwitch

免费开源的 macOS 状态栏一键设置工具。可以轻松对系统功能进行设置,如隐藏桌面图标、清理 Xcode 缓存、一键隐藏刘海儿、进入夜览模式等数十种功能

068.TermiWatch

终端风格的 iWatch 手表面

069.isowords

3D 魔方单词消消乐游戏。这是一款用 Swift 编写的 iOS 游戏,玩家可以选择 3D 立方体上的字母组成英文单词,如果一个字母被使用 3 次,该字母立方体就会消失,显示下面更多的字母。支持限时、无限、多人三种游戏模式,以及每日挑战和全球排行榜。

070.swift-benchmark

用于对 Swift 代码片段进行基准测试的库。该项目是谷歌开源的用来测试 Swift 代码片段性能的库。

Usage:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let package = Package(
name: ... ,
products: [
.executable(name: "Benchmarks", targets: ["Benchmarks"])
],
dependencies: [
.package(url: "https://github.com/google/swift-benchmark", from: "0.1.0")
],
targets: [
.target(
name: "Benchmarks",
dependencies: [.product(name: "Benchmark", package: "swift-benchmark")]
)
]
)
071.TinyPNG4Mac

适用于 macOS 的 TinyPNG 第三方客户端。TinyPNG 是一个提供免费图像压缩服务的网站,该项目是其第三方 macOS 客户端,可以让你无需打开浏览器、无需手动下载图片,仅通过简单的拖拽就能完成对 JPEG、PNG 图片的压缩。

072.Plash

将网站变成 Mac 桌面壁纸。这是一款适用于 macOS 的桌面壁纸应用,支持将多种网站设置为壁纸,这些网站并不局限于图片网站,还可以是新闻、气象等站点。

073.CotEditor

一款适用于 macOS 的轻量级纯文本编辑器。它免费、整洁、启动速度快,拥有看起来十分舒服的界面。

074.DevUtils-app

macOS 上的开发者实用工具箱。单机应用无需联网,内含开发者开发时经常用到的 30 多种工具,比如:URL 解码、JSON 格式化、正则匹配、时间戳转化等,而且还会根据剪贴板的内容,自动推荐对应的处理工具,实用且高效

075.vapor

流行的 Swift 语言 Web 框架。核心框架基于非阻塞事件驱动库 SwiftNIO 构建,除此之外还提供了 ORM、模版引擎、用户身份验证等模块,可用来快速创建网站、接口等服务。中文文档

076.Clipy

macOS 的剪贴板扩展应用。支持展示剪贴板历史记录、内容模版等功能

持续更新中…