QuranEngine 是开源的 iOS 程序库,为 Quran.com iOS App 提供技术支持。此仓库包含大约 99% 的 Quran.com iOS App 代码,为您构建与古兰经相关的应用程序提供了稳健的基础。
在此仓库中,我们还提供了一个名为 QuranEngineApp 的示例应用程序,该程序模仿了 Quran.com iOS App,可在 Example 文件夹下找到。
可以通过 Swift Package Manager 安装此仓库
.package(url: "https://github.com/quran/quran-ios", branch: "main")
然后使用一个或多个可用目标作为依赖项。所有目标都可供使用者使用,例如
.product(name: "AppStructureFeature", package: "quran-ios"),
⚠️ 请注意,我们不支持 CocoaPods 或 Carthage,并且我们不计划在未来支持这些。
该程序库包含 6 个顶层目录
Core:通用库,可用于任何应用程序。唯一的例外是 Localization 库,我们旨在使其更通用。
Model:包含简单的实体,便于构建古兰经应用程序。这些实体主要协同工作,不包含复杂的逻辑。
Data:此目录包含 SQLite、CoreData 和 Networking 库,它们抽象化了底层使用的技术。
Domain:这是应用程序业务逻辑所在之处。它依赖于 Model 和 Data 来服务于这些业务逻辑。
UI:包含应用程序使用的设计系统(我们称之为 NoorUI)。我们正逐渐转向在所有组件中使用 SwiftUI,导航方面除外 - 我们将继续为此使用 UIKit。UI 不依赖于 Domain 和 Data,但可以依赖于 Core 和 Model。
Features:包含构成应用程序的屏幕。它们依赖于所有其他组件来创建我们的古兰经应用程序。功能可以包含其他功能以创建更高级别的功能。例如,AppStructureFeature 承载所有其他功能以创建应用程序。
⚠️ UI 和 Features 尚未包含测试,约占源代码的 50%。我们热衷于在未来 inshaa'Allah 为它们添加测试。
以下是架构的可视化表示
此依赖顺序在 Package.swift 中强制执行。
我们热烈欢迎对 QuranEngine 项目的贡献。我们鼓励潜在的贡献者解决任何未解决的问题。请在仓库的 Discussions 部分与我们开始对话,我们将尽力帮助您,inshaa'Allah。
如果您的贡献足够小,请随时直接创建拉取请求 (Pull Request)。对于较大的贡献,我们要求您首先在讨论区创建一个帖子。这使我们能够确保没有人正在开发相同的功能,并且还使我们能够为即将到来的功能做计划,以防您的贡献依赖于另一个功能。
我们重新开源该应用程序是因为我们看到了让开发者在我们已构建的基础上进行构建的诸多好处。这样,开发者不必重新实现基础,可以在想法本身上进行更多创新。与将我们已实现的功能提供给他人所带来的整体益处相比,我们之前看到的恶意行为(包括但不限于将此免费代码出售给不知道此仓库存在的人)是微不足道的。我们期待看到伟大的伊斯兰创新,inshaa'Allah,这有助于世界各地的穆斯林。
我们欢迎所有类型的使用。但是,我们恳请您不要在未做任何修改的情况下使用 QuranEngineApp 示例并重新发布它。您可能还需要自带数据。