IceCubesApp
IceCubesApp是一个用于访问去中心化社交网络Mastodon的开源应用!它完全使用SwiftUI构建,使其快速、轻量且易于使用。
你可以连接到任何Mastodon实例,浏览你的时间线,与其他用户互动,并发布更新和媒体。
它是多平台的,可以在iOS、macOS、iPadOS和visionOS上运行。 在macOS和iPadOS上,它有专门的带侧边栏的UI。
功能
时间线
- 导航栏标题菜单让你可以轻松在主页、本地、联邦和热门时间线之间切换。
- 你还可以轻松访问你的列表、关注的标签和标签组。
- 标签组是由多个标签组成的自定义时间线,这是Ice Cubes独有的功能。
- 支持引用帖子!
- 你还可以添加远程本地时间线。这是一个有用的功能,可以浏览其他实例的公共时间线。这也是Ice Cubes独有的功能。
- Ice Cubes大量依赖Mastodon的流式事件来执行诸如在主页时间线中实时显示新帖子以及编辑和删除你的帖子等操作。
- 时间线同步是半自动的;你的位置会发送到Mastodon的标记API,从而在运行Ice Cubes的其他设备上,你可以恢复主页时间线的位置。
- 主页时间线使用第三方库Bodega进行缓存。这是一个轻量级的SQLite封装。当前位置保存在用户默认设置中,所以当你切换账号或启动应用时,你的缓存主页时间线和位置会被恢复。然后新帖子会被获取并显示,并带有未读计数器。
- 标签组、远程时间线和草稿的iCloud同步。
- 支持服务器端过滤器。
- 创建并切换到你的列表。
代码
-> Status & Timeline 包
编辑器 / 作者
- 功能齐全的帖子编辑器。
- 你可以写最多5个帖子的主题。
- 上传最多4张图片。
- 使用OpenAI API的AI辅助工具进行文本校正、标签生成等。
- 使用AI生成图片描述!
- 支持自定义表情。
- 添加投票和内容警告。
- 保存/从草稿恢复。
- 使用Apple语言检测功能在发帖前建议语言。
代码
-> Status包 -> StatusEditor组件
代码
-> OpenAIClient
通知
- 全面支持推送通知。
- Ice Cubes在Mastodon和APNS之间运行自己的代理,这对于Mastodon将推送通知路由到用户设备是必需的。
- 推送通知永远不会也无法被代理读取。
- 推送通知的内容/正文在设备上解码。查看
NotificationServiceSupport
- 推送通知是丰富的,并使用Apple INSendMessageIntent API进行联系人图片。
- 推送通知按活动分组,如提及、收藏、转发等...
- 应用内的通知也进行分组/堆叠。
- 你可以在应用内选择接收哪种类型的推送通知。
- 点击通知时路由到正确的帖子并切换到适当的账号。
代码
-> Notifications包和NotificationService扩展。
探索 / 搜索
- 专门的探索/搜索标签页用于热门用户、标签、帖子和链接。
- 从顶部区域轻松访问所有这些类别。
- 你可以搜索所有内容或按用户、标签和帖子进行筛选。
- 查看热门标签活动的图表。
- 查看每个类别的更多内容以访问全屏视图。
代码
-> Explore包
私信
- 专门的私信/私密消息标签页。
- 类聊天界面
- 你可以使用内联编辑器进行快速聊天或使用完整编辑器。
代码
-> Conversations包
个人资料
- 丰富的个人资料支持。
- 完全访问和调整你的隐私设置。
- 编辑你的个人资料,从你的简介到自定义字段。
- 轻松访问Mastometrics。
- 为任何个人资料添加只有你可见的自定义服务器端注释。
- 将任何个人资料的简介翻译成你的语言。
- 轻松访问编辑你的服务器端时间线过滤器。
- 轻松在应用外分享你的个人资料。
代码
-> Account包
多账号
- 支持无限数量的Mastodon账号。
- 轻松浏览/发现实例并登录!
- 在iOS上从任何屏幕切换账号。
- 在macOS/iPadOS侧边栏上只需一次点击即可切换账号。
- 完全支持服务器端和客户端账号设置。
- 在设置中滑动删除账号。
- 使用Apple的
WebAuthenticationSession
进行安全认证 - 账号令牌安全存储在钥匙串中。
代码
-> Account & AppAcount包
其他
- 你可以通过应用内小费和Github赞助来支持这个项目。
- 大量的自定义设置选项。
- 你可以调整显示设置,如字体、行间距、状态操作按钮等...
- 多种内置主题。
- 创建你自己的主题。
- 自定义滑动手势。
- 自定义标签栏条目。
- 支持声音和触觉反馈。
关于架构的说明
该项目被分成不同的Swift包,以便更容易管理和维护代码库。每个包都专注于应用程序的特定方面,如UI、网络通信或数据模型。这种模块化方法允许更容易的协作,并确保代码组织良好且易于理解。
这是学习SwiftUI的一个很好的起点。该应用涵盖了SwiftUI的许多基本概念,如构建布局、处理数据和处理用户交互。通过探索代码,你可以了解如何在日常生活中使用SwiftUI。此外,IceCubesApp的开源性质意味着你可以看到真实世界的应用程序是如何构建的,并了解使用SwiftUI的最佳实践。
大部分架构都是简单的MVVM,这里没有使用redux ;)
谢谢!
构建项目
要构建项目,你需要克隆仓库并创建包含的.xcconfig
文件的副本,以在编译项目之前创建你的配置。否则,你将会遇到错误。
以下是步骤:
- 克隆仓库
- 在包含
IceCubesApp.xcconfig.template
的同一文件夹中,运行以下命令:
cp IceCubesApp.xcconfig.template IceCubesApp.xcconfig
- 填写
DEVELOPMENT_TEAM
和BUNDLE_ID_PREFIX
值。前者应该是你的Apple Team ID(可以通过登录Apple Developer Portal找到)。后者是你的域名的反向表示法或你用作项目前缀的任何内容。 - 保存更改,然后你应该能够无任何问题地编译项目。