Project Icon

isowords

立方体上的单词探索游戏

isowords是款创新iOS单词游戏,玩家在消失的3D立方体上探索单词。连接相邻字母组词,字母用三次后立方体消失显示新字母。游戏用Swift开发,采用Composable Architecture,UI基于SwiftUI。开源代码展示模块化、依赖管理和自动化测试最佳实践。

isowords

CI

这个仓库包含了 isowords 的完整源代码,这是一款在消失的立方体上进行的 iOS 文字搜索游戏。连接相邻的字母来组成单词,单词越长越好,当一个字母被使用三次时,其所在的立方体就会被移除,露出里面更多的字母!

现在可在 App Store 下载!

在 App Store 上下载 isowords

isowords 截图


关于

isowords 是一个完全用 Swift 构建的大型复杂应用。iOS 客户端的逻辑基于 Composable Architecture 构建,UI 主要使用 SwiftUI 构建,少量使用 SceneKit。服务器也使用 Swift 构建,采用了我们实验性的 Web 服务器库。

我们在 Point-Free 上发布了一个4集的视频系列,涵盖了这些主题以及更多内容。Point-Free 是一个探索函数式编程和 Swift 语言的视频系列,由 Brandon WilliamsStephen Celis 主持。

视频海报图片



你可能会对以下几点感兴趣:

Composable Architecture

整个应用程序由 Composable Architecture 驱动,这是我们在 Point-Free 上从头开始构建的一个库,提供了用于构建应用程序的工具,重点关注可组合性、模块化和可测试性。这意味着:

  • 整个应用的状态保存在一个单一的事实来源中,称为 Store
  • 整个应用的行为由一个单一的单元实现,称为 Reducer,它由许多其他 reducer 组成。
  • 所有有副作用的操作都被明确地表示为从 reducer 返回的值。
  • 依赖项被明确地表示为简单的数据类型,包装其实际实现,以及各种模拟实例。

以这种方式设计应用程序有很多好处:

  • 大型、复杂的功能可以分解为更小的子域,这些子域可以通过简单的状态变更进行通信。通常在 SwiftUI 中,这是通过在 ObservableObject 实例中访问单例来完成的,但在 Composable Architecture 中这是不必要的。
  • 我们控制依赖项,而不是让它们控制我们。即使你在代码中使用了 StoreKitGameCenterUserNotifications 或任何其他第三方 API,也不意味着你必须牺牲在模拟器中运行应用程序、使用 SwiftUI 预览或编写简洁测试的能力。
  • 可以很快地编写详尽的测试。我们测试非常详细的用户流程,捕捉微妙的边缘情况,并断言效果如何执行以及它们的输出如何反馈到应用程序中。
  • 编写集成测试以测试应用程序的多个独立部分变得很简单。

超模块化

应用程序采用超模块化的风格构建。在撰写本 README 时,客户端和服务器被分为 86 个模块。这允许我们在不构建整个应用程序的情况下处理功能,从而改善编译时间和 SwiftUI 预览的稳定性。它还使我们能够轻松地发布 App Clip,其大小必须小于 10 MB(未压缩),通过选择最少的代码和资源来构建。

客户端/服务器单一代码库

iOS 客户端和服务器的代码都包含在这个单一的代码库中。这使得同时运行客户端和服务器变得容易,我们甚至可以同时调试它们,例如在服务器中设置断点,当模拟器发出 API 请求时触发。

我们还在客户端和服务器之间共享了大量代码:

  • 描述玩家、谜题、移动等的核心类型。
  • 游戏逻辑,如随机谜题生成器、谜题验证、字典等。
  • 服务器用于处理请求的路由器与 iOS 客户端用于向服务器发出 API 请求的代码完全相同。新路由只需指定一次,就立即可用于客户端和服务器。
  • 我们编写了同时测试服务器和 iOS 客户端的集成测试。在测试过程中,客户端发出的 API 请求实际上在后台运行真实的服务器代码。
  • 还有更多...

自动生成 App Store 截图和预览视频

我们上传到 App Store 的应用截图和预览视频是自动生成的。

  • 截图测试套件使用我们的 SnapshotTesting 库生成,负责构建一个非常具体的状态,我们将其加载到屏幕上,并提供周围的图形。

  • 预览视频是通过运行精简版应用程序的屏幕录制生成的,该版本在立方体上嵌入特定字母并运行一系列动作来模拟用户玩游戏。可以通过在 Xcode 中选择 TrailerPreview 目标并在模拟器中运行来在本地运行该应用程序。

预览应用

有时我们想要在不构建整个应用程序的情况下单独测试某个功能。SwiftUI 预览很适合这种情况,但它们也有局限性,比如当你需要使用预览不可用的 API,或者需要调试更复杂的流程等。

因此,我们创建了迷你应用程序,它们只构建构成整个应用程序的 86+ 个模块中的一小部分。设置这些应用程序只需要最少的工作。你只需在 Xcode 项目中指定所需的依赖项,然后创建一个入口点来启动功能。

例如,这里是创建预览应用程序以单独运行新手引导流程所需的全部代码。如果我们受制于完整应用程序来测试这个功能,我们就需要不断地删除并重新安装应用程序,因为这个屏幕只在首次启动时显示。

开始使用

这个仓库包含了运行整个 isowords 应用程序的客户端和服务器代码,以及广泛的测试套件。要运行它们:

  1. 确保已安装 git-lfs,以便可以获取应用资产(图像等)。例如,使用 Homebrew

    $ brew install git-lfs  # 下载并安装 Git LFS
    $ git lfs install       # 为你的用户设置 Git LFS
    
  2. 获取代码:

    git clone https://github.com/pointfreeco/isowords
    cd isowords
    
  3. 引导应用程序:

    1. 如果你只对构建 iOS 客户端感兴趣,则运行以下引导命令:
      make bootstrap-client
      
    2. 如果你想构建客户端和服务器,请确保已安装并运行 PostgreSQL,然后运行以下引导命令:
      make bootstrap
      
  4. 打开 Xcode 项目 App/isowords.xcodeproj

  5. 要在本地运行客户端,在 Xcode 中选择 isowords 目标并运行(⌘R)。

  6. 要在本地运行服务器,在 Xcode 中选择 server 目标并运行(⌘R)。

了解更多

本 README 中讨论的大多数概念都在 Point-Free 上有深入的讨论。Point-Free 是一个探索函数式编程和 Swift 语言的视频系列,由 Brandon WilliamsStephen Celis 主持。

Point-Free

相关项目

这个应用程序使用了一些由我们构建并在 Point-Free 上讨论的开源项目,包括:

许可证

本仓库中的源代码仅可用于教育目的,不得用于商业目的。有关更多信息,请参阅我们的完整许可证

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号