Aidoku - 专为iOS/iPadOS打造的免费开源漫画阅读器

Aidoku

一款专为iOS和iPadOS设计的免费开源漫画阅读应用。

功能特性

  • :check_mark_button: 无广告干扰 - 纯净的阅读体验
  • :check_mark_button: 强大的WASM源系统 - 支持外部漫画源
  • :check_mark_button: 在线阅读功能 - 通过外部源实现在线阅读
  • :check_mark_button: 下载支持 - 离线阅读漫画内容
  • :check_mark_button: 追踪器集成 - 支持AniList和MyAnimeList等追踪服务

安装指南

详细的安装说明请查看官方网站

TestFlight安装

如需加入TestFlight测试,请先加入Aidoku Discord服务器

AltStore安装

我们提供了包含最新版本ipa文件的AltStore源。您可以将直接源URL复制并粘贴到AltStore中。请注意不支持AltStore PAL。

手动安装

最新的ipa文件始终可在发布页面获取。

使用说明

Aidoku提供了简洁直观的用户界面,让您可以轻松:

  1. 添加漫画源 - 通过WASM系统添加您喜欢的漫画网站
  2. 浏览和搜索 - 在已添加的源中浏览和搜索漫画作品
  3. 阅读管理 - 支持在线阅读和离线下载功能
  4. 进度追踪 - 与AniList或MyAnimeList同步阅读进度

核心代码

由于Aidoku是一个完整的iOS应用程序项目,核心代码包含多个模块。以下是项目的主要架构:

// 主要应用入口
import SwiftUI

@main
struct AidokuApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(SourceManager.shared)
                .environmentObject(LibraryManager.shared)
        }
    }
}
// 源管理器 - 处理WASM漫画源
class SourceManager: ObservableObject {
    static let shared = SourceManager()
    
    @Published var sources: [Source] = []
    
    func loadSources() {
        // 加载已安装的WASM源
        // 实现源的管理和更新功能
    }
    
    func installSource(from url: URL) {
        // 从URL安装新的漫画源
        // 处理WASM模块的加载和验证
    }
}
// 阅读器核心组件
struct ReaderView: View {
    @ObservedObject var chapter: Chapter
    @State private var pages: [Page] = []
    @State private var currentPage = 0
    
    var body: some View {
        TabView(selection: $currentPage) {
            ForEach(pages.indices, id: \.self) { index in
                PageView(page: pages[index])
                    .tag(index)
            }
        }
        .tabViewStyle(.page)
        .onAppear {
            loadPages()
        }
    }
    
    private func loadPages() {
        // 加载章节页面内容
        // 支持在线和离线阅读模式
    }
}
// 追踪器集成模块
protocol Tracker {
    func authenticate(credentials: [String: String]) async throws
    func updateProgress(chapter: Chapter, progress: Double) async throws
    func searchTitle(title: String) async throws -> [TrackedTitle]
}

class AniListTracker: Tracker {
    // AniList追踪器实现
    // 处理与AniList API的通信
}

class MyAnimeListTracker: Tracker {
    // MyAnimeList追踪器实现
    // 处理与MAL API的通信
}

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2025-09-27 06:02  qife  阅读(44)  评论(0)    收藏  举报