From 3e60bf1869572dcafe2dd049d8a580682136b602 Mon Sep 17 00:00:00 2001 From: shenlei Date: Thu, 30 Jul 2026 20:52:21 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=98=85=E8=AF=BB=E5=99=A8?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E3=80=81=E6=9C=97=E8=AF=BB=E4=B8=8E=E6=8C=81?= =?UTF-8?q?=E4=B9=85=E5=8C=96=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 阅读器在多会话朗读、加密 EPUB 资源、并发打开同一本书和多 UserDefaults 容器等场景下,存在旧异步结果覆盖新状态、锁屏控制串会话、大型明文资源被误拒绝、解压半成品被复用及标注跨容器混用的风险;同时高亮、书签、搜索和设置面板的空状态与自动化可访问性入口不完整。\n\n本次为朗读会话引入代次和当前 utterance 校验,远程控制改为仅响应当前会话并按自身 token 清理;加密资源 provider 先判定是否实际返回解密数据,明文大资源继续流式读取;解压缓存串行化以避免并发复用未完成目录。书签与高亮迁移至受保护文件,按 UserDefaults 容器隔离命名空间,保留标准容器旧文件兼容并确保新副本成功落盘后才删除历史数据。\n\n同步调整缓存淘汰、FoundationModels 弱链接、搜索/标注/设置面板交互与 UI 测试,并更新 Pod 生成配置及 API、风险文档。已执行 git diff --check 和 ReadViewDemo Debug Simulator 构建,结果为 BUILD SUCCEEDED。 --- Doc/API_REFERENCE.md | 10 +- Doc/CONCERNS.md | 12 + Doc/index.md | 2 +- ReadViewDemo/Podfile | 9 +- ReadViewDemo/Podfile.lock | 4 +- .../RDAIReaderView.podspec.json | 2 +- ReadViewDemo/Pods/Manifest.lock | 4 +- .../Pods/Pods.xcodeproj/project.pbxproj | 4806 ++++++++--------- .../Pods-ReadViewDemo.debug.xcconfig | 2 +- .../Pods-ReadViewDemo.release.xcconfig | 2 +- .../RDAIReaderView.debug.xcconfig | 2 +- .../RDAIReaderView.release.xcconfig | 2 +- .../RDEpubReaderView.debug.xcconfig | 2 +- .../RDEpubReaderView.release.xcconfig | 2 +- .../RDPDFReaderView.debug.xcconfig | 2 +- .../RDPDFReaderView.release.xcconfig | 2 +- .../RDSpeechReaderView.debug.xcconfig | 2 +- .../RDSpeechReaderView.release.xcconfig | 2 +- .../ReadViewDemo.xcodeproj/project.pbxproj | 10 +- .../ReadViewDemo/ViewController.swift | 3 + .../Helpers/AccessibilityIdentifiers.swift | 7 +- .../Helpers/XCUIApplication+Launch.swift | 70 + .../AsyncChapterLoadingTests.swift | 8 +- .../ReaderUITests/DisplayTypeTests.swift | 7 +- .../ReaderUITests/ErrorAndEdgeCaseTests.swift | 13 +- .../LocationPersistenceTests.swift | 45 +- .../ReaderUITests/MemoryFootprintTests.swift | 6 +- .../ReaderUITests/SearchTests.swift | 10 +- .../SelectionAnnotateTests.swift | 5 +- .../ReaderUITests/SettingsEffectTests.swift | 43 +- .../ReaderUITests/SettingsExtendedTests.swift | 30 +- .../ReaderUITests/SettingsPanelTests.swift | 13 +- Sources/RDAIReaderView/RDAIReaderView.podspec | 5 +- .../EPUBCore/RDEPUBParser+Archive.swift | 107 +- .../RDEPUBResourceURLSchemeHandler.swift | 129 +- ...RDEPUBReaderHighlightsViewController.swift | 71 +- .../EPUBUI/RDEPUBReaderPersistence.swift | 180 +- .../EPUBUI/RDEPUBReaderSearchBarView.swift | 119 +- .../RDEPUBReaderAnnotationCoordinator.swift | 7 +- .../Sources/RDSpeechReaderController.swift | 144 +- 40 files changed, 3210 insertions(+), 2691 deletions(-) diff --git a/Doc/API_REFERENCE.md b/Doc/API_REFERENCE.md index b3cfcaa..7ebd5ab 100644 --- a/Doc/API_REFERENCE.md +++ b/Doc/API_REFERENCE.md @@ -251,13 +251,17 @@ public protocol RDEPUBReaderPersistence: AnyObject { } ``` -默认实现 `RDEPUBUserDefaultsPersistence` 使用 UserDefaults 存储: +默认实现 `RDEPUBUserDefaultsPersistence` 将阅读位置和全局设置存入 UserDefaults; +书签与高亮(可能含书籍正文摘录)存入带文件保护且排除备份的 Application Support 文件。 +升级后的首次读取会自动迁移历史 UserDefaults 数据,并仅在新副本成功落盘后删除旧副本。 +不同的 `UserDefaults` 容器会自动使用独立的文件命名空间,避免多账号或测试 suite +之间混用同一本书的标注;标准容器保留对旧版未分区文件的只读兼容。 | 数据 | Key 格式 | |------|----------| | 阅读位置 | `ssreader.epub.location.{bookID}` | -| 书签 | `ssreader.epub.bookmarks.{bookID}` | -| 高亮 | `ssreader.epub.highlights.{bookID}` | +| 书签 | 受保护文件(历史键:`ssreader.epub.bookmarks.{bookID}`) | +| 高亮 | 受保护文件(历史键:`ssreader.epub.highlights.{bookID}`) | | 全局设置 | `ssreader.epub.settings` | --- diff --git a/Doc/CONCERNS.md b/Doc/CONCERNS.md index 3c58755..e835f1f 100644 --- a/Doc/CONCERNS.md +++ b/Doc/CONCERNS.md @@ -1,6 +1,18 @@ # 代码库风险与关注点 **分析日期:** 2026-05-21 +**状态复核:** 2026-07-30(逐条对照源码,结论见下表;正文段落保留原始分析,勿当作现状) + +| # | 项目 | 现状 | +|---|------|------| +| 1 | User Script Sandboxing 被关 | **部分处理**:已移除 Podfile 的全局强制覆盖;但显式打成 `YES` 会让 CocoaPods 的 `[CP] Embed Pods Frameworks` rsync 阶段被沙箱拒绝而构建失败(已实测)。要真正开启需先改掉 `use_frameworks!` 动态框架集成方式。 | +| 2 | 外链未做 allowlist | **已修**:`RDEPUBReaderController+ExternalLinks.swift` 有 scheme allowlist + 二次确认弹窗 + delegate 否决。 | +| 3 | Zip Slip 未加固 | **已修**:`RDEPUBParser+Archive.swift` 的 `validatedExtractionDestination` 做 standardized 前缀校验并拒绝 `..`/绝对路径。 | +| 4 | 高亮/选中文本明文写 UserDefaults | **已修**:新增 `RDEPUBProtectedContentStore`,高亮与书签改写 Application Support 下带 file protection 的文件、排除备份,首次读取自动迁移并删除明文;另加 `clearReadingData(for:)` / `clearAllReadingContent()`。 | +| 5 | Scheme handler 整文件读内存 | **原判断有误**:>512KB 早已走 `respondWithStreaming` 64KB 分块。本次补上 `maximumInMemoryResourceBytes`(默认 64MB)给走不了流式的加密 provider 分支兜底。 | +| 6 | 分页 WKWebView 可能加载外部资源 | 未复核。 | +| 7 | 解压缓存无限累积 | **已修**:`pruneExtractionCache(keeping:)` 先按 `extractionCacheMaximumAge`(30 天)再按 `extractionCacheMaximumTotalBytes`(512MB)做 LRU 淘汰;复用时 touch mtime;另有 `clearExtractionCache()`。 | +| 8+ | 其余性能/可维护性项 | 未复核。 | ## 高风险:安全与隐私 diff --git a/Doc/index.md b/Doc/index.md index 3d8c4a6..b056aa9 100644 --- a/Doc/index.md +++ b/Doc/index.md @@ -25,7 +25,7 @@ | 文档 | 说明 | |------|------| -| [CONCERNS.md](CONCERNS.md) | 代码库风险与关注点:12 项安全/性能/可维护性风险 | +| [CONCERNS.md](CONCERNS.md) | 代码库风险与关注点:12 项安全/性能/可维护性风险(顶部有 2026-07-30 状态复核表) | | [TESTING.md](TESTING.md) | 测试基础设施:UI 测试文件清单、运行方式、覆盖率 | | [CONVENTIONS.md](CONVENTIONS.md) | 编码规范:命名约定、代码风格、导入规范、错误处理 | diff --git a/ReadViewDemo/Podfile b/ReadViewDemo/Podfile index 4b2b037..2c938b3 100644 --- a/ReadViewDemo/Podfile +++ b/ReadViewDemo/Podfile @@ -17,8 +17,15 @@ target 'ReadViewDemo' do end post_install do |installer| + # 不再由本 Podfile 全局关闭 ENABLE_USER_SCRIPT_SANDBOXING——之前的写法会把 + # 宿主工程一起强制改成 NO,属于我们主动降级安全基线。现在交回工程默认值。 + # + # 注意:本工程用 use_frameworks!,CocoaPods 生成的 [CP] Embed Pods Frameworks + # 脚本阶段用 rsync 往 .app/Frameworks 拷贝产物;一旦把该设置显式打成 YES, + # 这一步会被沙箱拒绝(file-write-unlink / utimensat: Operation not permitted) + # 而整个构建失败——已实测确认。真要打开必须先改掉动态框架集成方式 + # (静态库 / SPM),别只翻这个开关。 apply_settings = lambda do |config| - config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO' config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0' end diff --git a/ReadViewDemo/Podfile.lock b/ReadViewDemo/Podfile.lock index 605eb49..0fc59b1 100644 --- a/ReadViewDemo/Podfile.lock +++ b/ReadViewDemo/Podfile.lock @@ -90,13 +90,13 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDAIReaderView: 56783c71853c59bf6810f719a57a7f580eb7855c + RDAIReaderView: 01a156e412fb7a52a6963c097ffbe2f1792021fd RDEpubReaderView: 180444055ba2da2c52797cc08b307232f103a6d9 RDPDFReaderView: 885be07e2b81cd0a8dc8a937b75faf9017ce045c RDSpeechReaderView: 25fff9437d2692965ba326f37b108baf3e2ae7ef SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 -PODFILE CHECKSUM: 7a0e6ee6c7d410a5128fb20775a450fd0d47292c +PODFILE CHECKSUM: 72bd92309c87ce13a247b8134a321f6b325af731 COCOAPODS: 1.16.2 diff --git a/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json index 53d9850..6a1a140 100644 --- a/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json +++ b/ReadViewDemo/Pods/Local Podspecs/RDAIReaderView.podspec.json @@ -43,7 +43,7 @@ "~> 0.1" ] }, - "frameworks": "FoundationModels" + "weak_frameworks": "FoundationModels" }, { "name": "UI", diff --git a/ReadViewDemo/Pods/Manifest.lock b/ReadViewDemo/Pods/Manifest.lock index 605eb49..0fc59b1 100644 --- a/ReadViewDemo/Pods/Manifest.lock +++ b/ReadViewDemo/Pods/Manifest.lock @@ -90,13 +90,13 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDAIReaderView: 56783c71853c59bf6810f719a57a7f580eb7855c + RDAIReaderView: 01a156e412fb7a52a6963c097ffbe2f1792021fd RDEpubReaderView: 180444055ba2da2c52797cc08b307232f103a6d9 RDPDFReaderView: 885be07e2b81cd0a8dc8a937b75faf9017ce045c RDSpeechReaderView: 25fff9437d2692965ba326f37b108baf3e2ae7ef SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 -PODFILE CHECKSUM: 7a0e6ee6c7d410a5128fb20775a450fd0d47292c +PODFILE CHECKSUM: 72bd92309c87ce13a247b8134a321f6b325af731 COCOAPODS: 1.16.2 diff --git a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj index 99a24f0..03590f0 100644 --- a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj +++ b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj @@ -9,820 +9,827 @@ /* Begin PBXBuildFile section */ 002685407B9C4D548571DA24AFD6E8F1 /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = 39F01D07F324B206706E9809D44643C1 /* NSString+Paragraphs.m */; }; 0030FDF2E834088639D9C73A89669CC1 /* RDPDFReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 507D9D8B9C2FF474F3C6BE68C6EF6C50 /* RDPDFReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 00A4DA374441586757BAE1F167ABC0A0 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */; }; - 014249F0755B88BB23D3DCE2B412EEE7 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; 014449AE560FFF3C628FAE639D043004 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = CDDC623AB1701601A907DA67C2F8F283 /* DTAnchorHTMLElement.m */; }; - 015030FB0BE3DB44A72B84FA3F80DFF0 /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD53D37218AA3C7D5C7756F00FA21E9 /* RDEPUBChapterOffsetMap.swift */; }; - 01BAD9DD97D25EDF620445B8876BD981 /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CB58976A61DDAE85B44D4B6CB30A02 /* String+RDEPUB.swift */; }; - 01E94FCF0AC80F5B5B3D6B7D7551F2D2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - 01FF57F8E540F20A7FADEE33AA1C7A73 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */; }; - 02DB3F5CD60A80BC4A27F77EEE2C9372 /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35A48CFD97F259DB677ECBF3A5AB8B60 /* RDEPUBTextPaginationSupport.swift */; }; - 03B012C7959735A0A532A444902DBCF6 /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921EA5C03E5608583DE9F4C2FC49704B /* RDEPUBReaderDependencies.swift */; }; + 02A25882938831E94E43CA8A7CB729B9 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */; }; + 0335F9FB12F2E7B0CDA69B9DB048C1B5 /* RDSpeechReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6C3FFDC5714D18BE0534AF20F6C07CA /* RDSpeechReaderView-dummy.m */; }; 03D90C831397E8636A33CE557024A136 /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03F49D0C58DE83CC45DF27596421D966 /* RDEpubReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3410BDB001A65A79622F3980646A4AAE /* RDEpubReaderView+CollectionView.swift */; }; 0561DF6793C8516F469D9813F5CE3211 /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D5A0F7E62D88B94912634DC9AD339D /* DTCoreTextLayouter.m */; }; - 0605C6A0977CAF4D7FD6546BBDB108C1 /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE7ABC1E00E2AD5CD17521B799DDABF /* RDEPUBChapterLoader.swift */; }; - 06870EC1863AADE7D8B2C9763F177876 /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60EC254E73980C2F0AA36B2A4ABA4E04 /* RDEPUBAttachmentNormalizer.swift */; }; - 06C626009858F55BA7AB71C715C99FF4 /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 574844915C6A0BA87B43940426C8DA96 /* RDEPUBNoteDetector.swift */; }; + 063A88FB321E454069155A625FAC1A29 /* RDEpubReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2B675FAAF78038DF681753B63E78F6 /* RDEpubReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 066408F6DF6744FCE21A0844EB8B972E /* RDEPUBSpeechSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F04F9EA650B7E82A6BD7560C308C1F9 /* RDEPUBSpeechSession.swift */; }; 085826A323C90FB16A9380AD88E1E394 /* RDPDFReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FC1DCF56B5AEFDF71CEC0334776D7A /* RDPDFReaderPageChildViewController.swift */; }; - 08DD8BC85A59A1552E0BF4FB6B6CFD80 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - 0952462BA9D73DF2A199FCB7105FB349 /* RDReaderDocumentFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4C2E0881354D1B1CF3ADF0A8A3E552 /* RDReaderDocumentFormat.swift */; }; - 09BA8E7D20E0618BCF471289D6E7239A /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D2244BDA6024551727F35AA3454980 /* RDEPUBNotePopupViewController.swift */; }; - 09BE0B86A0FB9B8EF550CA3BABDF1792 /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = E47128B5AD65D4FA9BA728CDF73C47E5 /* RDEPUBReadingLocationModels.swift */; }; - 0A0A9938628FC39F96C5FC206CC3CE26 /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A9B84091398DE20C772FA9FA2803150 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */; }; + 094D63A7B2DC786E383C4145EBFF6146 /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2212BCD78FFC35A46929B1C86B16DBC /* RDEPUBNoteResolver.swift */; }; + 09BAC6DCE171C42332F021EF1315F15F /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */; }; + 0A1404655C6339B0D10F01ECC970E852 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */; }; + 0A27A469DC24F223905DCC8182E2CA52 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */; }; 0A9D1BAF9EE83FDBA8B4976EEA453EFA /* RDPDFReaderPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F2C8B38BF0106D946BEE9F7E854D08 /* RDPDFReaderPageView.swift */; }; 0AAA5BB1DBF584102B15CF8738F1815E /* NSScanner+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = BA83941397AFE127903C2DA0EE626295 /* NSScanner+HTML.m */; }; 0ABC4D62588EABAA636441FD9A82C940 /* CTLineUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B72E60DFC15F208F1BA00518E64F79B5 /* CTLineUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AC9DDCE140E39ECDD8DDA62D0D724DD /* RDAINaturalLanguageAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D908F35D94E51D89507601431AC05B9 /* RDAINaturalLanguageAnalyzer.swift */; }; 0B6FA1F22150D7F8B1865F41FF70C922 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 551D98EE6C1653939AE1E3BCBC4ACC2E /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C967A3A008695E1753456852CB381FB /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA573F944A7ECEBBA9EC81D72F804D7E /* RDEPUBWebView+Search.swift */; }; - 0CF0135E674D9001A4B648AECCB06957 /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81120E66C1F56C6F0FAC98FE155554BE /* RDEPUBReaderBottomToolView.swift */; }; + 0CA21E82B6B347BD2370DD2FEFDE44C1 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0CD64766E04A6801A55DFEFC5A9A379B /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */; }; + 0D9DBD85739EA6FA524BC4AEF817361B /* RDSpeechReaderControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F9B093162E445308F49662C7C35DA6 /* RDSpeechReaderControlView.swift */; }; + 0DA047CE0938660F1AC82BB461F607B4 /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498E8B4F4F6A151C181647CACD6F76DA /* RDEPUBCFIMarkerInjector.swift */; }; + 0E68D8160E5C813DB3839865A2B61A7F /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */; }; 0E6CC1B4E893EB6D9D76FCCDD125F3CD /* RDPDFReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01A20D999E550EFA3C472C3A20E6A90 /* RDPDFReaderContracts.swift */; }; - 0E8556C840877C1148B5D096999F0A35 /* RDEPUBAIContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD49AF7F1AEB81E28CF54BDF4BEB7343 /* RDEPUBAIContentProvider.swift */; }; - 0FA3F4FEE3F9660657F0AA0117B95BD3 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75AA5BC3865826B2B32B3305A8CC578B /* RDEPUBWebView+Reflowable.swift */; }; - 0FBD916D1B6E3B7093D734C8D0AFDB2E /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 16023686DC389E6755BC79366433C45B /* DTVersion.m */; }; + 0EC04427BB9F77932E19591E8D37492F /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */; }; + 0F5377BB4CD47877A1A4FF9056244D6C /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86EDE1B29348DC15D6122E9FCF98DC42 /* RDEPUBReaderSettingsViewController.swift */; }; 0FCBC8C64D8862F2A0E8794EDADDECBD /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = D4A82B2715640986D3701AF889DBD599 /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; 100BFFBD24F234C095EDB001B8088DB1 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 74B2884E9214B5B38193587D773554BA /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; }; + 1023882FD50FC476405F3AA2D63A631E /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BA1F24F4DFCDDB93645FFE37C0C68A8 /* RDEPUBTextIndexTable.swift */; }; + 1029F6A1D00934BA1729926279757FEE /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66388B03A7B6CCC521677D01D37D85F9 /* RDEPUBChapterLoader.swift */; }; + 10734A1CB54C48CAE3AFAFBE80CB2725 /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3784C10C038F42C7074D9B20A81291A4 /* RDEPUBTextPaginationInterfaces.swift */; }; + 108336F1A5BBF5C4C8D4468287C8BC8C /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F43D341014C0A3261943902F0C6D7A47 /* RDEPUBNotePopupCoordinator.swift */; }; 109458F9D48FD4F381F0E40E2DB3D91C /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1165297CCE80FFFE9D1895606E803232 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D56EC508FD85074993AAB6580F72631 /* RDEPUBReaderServices.swift */; }; + 1105B3FC3E36AEB697E983A289F12E38 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE91417CF554D42F4493D636FF1F69C /* RDEPUBTextContentInteractionCoordinator.swift */; }; + 11A9957CEC14EA2676686062B57AE434 /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */; }; 11AB1902A68385851FB81E870991F9A0 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */; }; - 11BF04E60C430795B9DC542B74412F50 /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */; }; - 11CF5494F84324BEB5016EFE7046E6A3 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */; }; - 124EF6FA0D36BAD0D5B4810DB6345179 /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */; }; - 127914591EE3F5145BC14A25A0A57D08 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8857C84AAC2099B1037C035B8AFF5AF /* UIKit.framework */; }; - 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F4320A57A5573831CD151F06C5420C5 /* CoreText.framework */; }; + 11C1917887762E50D1E02382C46D9977 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */; }; + 122ADCB2F0FDD7FC639648DAEBCB31F8 /* RDEPUBAIContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44EB3CBD2C1D167AE3BD1AD5A9FE063D /* RDEPUBAIContentProvider.swift */; }; + 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FB8D88DF51900F42796061036A2BC93 /* CoreText.framework */; }; 130C3A85D9F9F445222C2E31EC245B0A /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE6B072BF746163179BDF80F8CDBE1D /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 139798AD5B222F7C1B19899AF80B5CE7 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D098B6BDF458996B5B3A757722DF5C3B /* RDEPUBPageInteractionController.swift */; }; + 1359FECFF2E8215E574C69F0099D11F5 /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = FEEC0D985E61911DD98BBA2737107E1C /* wxread-replace-latin.css */; }; + 13B7F5C2B8676959CDB2E290466E3BB6 /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D945C6720DC6601B9B8FA83EE37E965 /* RDEPUBStyleCompatibilityModels.swift */; }; + 146BDE9063EF5A1F0481FCEBD97046A2 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */; }; 14BDD9FB7A7AC5C8ABFF8D24C381F3DA /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */; }; - 14C1DE78043A17227D4672B8EFE3A241 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */; }; - 14D05471258FA4D33B016F47CBD4686F /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1514F1D466B8422AE5089E7C9F23219C /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28C6EB4B2B6DC691D28EEBC2BDB4D2F3 /* RDEPUBReaderController+RenderSupport.swift */; }; - 1548259806AC2F2B1C7E8391DAA23341 /* RDEPUBChapterDisplayContentCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 069D7EE5E989A9F963E518365DDB0301 /* RDEPUBChapterDisplayContentCache.swift */; }; + 154B7E4D9B281D3F49B8430DC2F730E0 /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D65A018B525BEE5FB0F21896B5A27F /* RDEPUBDTCoreTextRenderer.swift */; }; + 157BD809FC0CAEDFB4316A537C74FA00 /* RDAIReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 299AED4539FF5F16ACFC414AF2BDFCF3 /* RDAIReaderView-dummy.m */; }; 15A7ED15DA03DD3B9F26A017D270D1C2 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 160890D3E69645A3EBE3E4A7D821BA7C /* RDAIDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 291A21D778336F982A7197655BD501D5 /* RDAIDiagnostics.swift */; }; - 1667634A08E3C710A759A0E33C72F6EA /* RDAIReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 299AED4539FF5F16ACFC414AF2BDFCF3 /* RDAIReaderView-dummy.m */; }; - 17337E40B13F3CFCEDA9BE1AF9C73EC7 /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A0367B13040EC2A557AA275A2D16D0 /* RDEPUBCFICompatibility.swift */; }; - 182E369F1A51C69E281F4A32F4C75A3B /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F72183F6B8013C5A520595006A2B5F /* RDEPUBReaderAssemblyCoordinator.swift */; }; - 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 968484A28FBB84723F621DB66ECA3347 /* CoreGraphics.framework */; }; + 173C5A26C576DE62DD9DEE0835D9A85F /* RDAINaturalLanguageSemanticScorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F3A858FD7165A3AEBBCA78E105DB73 /* RDAINaturalLanguageSemanticScorer.swift */; }; + 182A511334D40CCC49EE48A1BCF23853 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */; }; + 18FCC6EB5E321A7758064DC0220B8441 /* RDEPUBSpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10C60005AD8F659D0476A2D8DCDF0AB7 /* RDEPUBSpeechContentProvider.swift */; }; + 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E198715507CC19E698253E47DA96954 /* CoreGraphics.framework */; }; + 19276546DD5AF3B0E64AC610951F24FE /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3EF41BC74CB0A807D226BA1B6AAE225 /* RDEPUBReaderSearchBarView.swift */; }; 19649ED312D92A6F5D2D6AF4E540CE75 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A91DAF2EE1CBCEAFE3DCBA474A37B96 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */; }; - 1AC7119C4E97CD39EACE1DCC42934B5D /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */; }; - 1B09F42416EFE5283FC7330972AC0C76 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B0DC9C853B5DEE751669FD4354DE805 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */; }; - 1B6351C2682D454F363D37CC64CE6F03 /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E5F8CCBFB0567360782BD2FF0589A9 /* RDEPUBAssetRepository.swift */; }; - 1BA306604BC42737DC0D6BBFC784DC50 /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E85471307D55F36163C3495688467A3 /* RDEPUBTextAnchor.swift */; }; - 1BCB2EB28C3C067487EF3FEB7AB2C3F8 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C3C237A9574F88C92E569D7FB3B424C /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F6803E56DE9E7EA1CCF0388E607674 /* RDEPUBTextIndexTable.swift */; }; - 1C58CE096885BE414C2A52164C5476D3 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */; }; - 1C7C1FDE094C83066C87B015B477B63D /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C7DB25B5090AEEFE61B7140803A213B /* RDSpeechTextPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08203CC2BC14FB8B3BA0CAA3EC92789C /* RDSpeechTextPreprocessor.swift */; }; - 1CC6284347B8897DE0D4AC7BE196EB03 /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B56723E39283A17E2A689DBDD09C313 /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */; }; + 1C01105DE2BEF1F1049F8F0B270F8AFA /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C64391C561D8C8C71B8BA9A8C9D8F6E /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A04214421115EF7A542C3F3216A318B0 /* RDEPUBReaderController+RuntimeBridge.swift */; }; + 1D394585BF38C3050B6C81E80A905312 /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C02B75657834185F5471197156446395 /* RDEPUBChapterDataCache.swift */; }; 1D460603DCA4A4E5ECFE8FF1F1CACC10 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */; }; - 1D53FB2F09A7E9704EBD84ED30B0B1CE /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51339BC494F76D8DB8C1A4968689C617 /* RDEPUBBookPageMap.swift */; }; - 1D57100D8CB86A35A93EFBB76724F69F /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */; }; - 1FD0A2E78909C51ABC12325319144E33 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 202E57B1A71FF32D64CA97314E0C6C6D /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87855F530B15477A1936F953D0A86A63 /* RDEPUBReaderSearchCoordinator.swift */; }; - 20C84711D379B1244D44F6AE4CA46ACA /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D0BA256721E4BAFE43E91891A606A06 /* RDEPUBWebContentView.swift */; }; - 21716775545B74C62A2BC9D1F5399267 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21D7ABAF802A959CC8813308649ED6AC /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */; }; - 21F1E8FEECFB4CE5A7138DE50CF7E7C0 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1DC412848A5F645120BE5C544F117E40 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9245153495464B8CBAFED3ED68018040 /* RDEPUBTextContentView.swift */; }; + 1E5A1370975CB23A3109708965000BEB /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F606B8AFFB6486EF76BF7118C0D2BBEF /* RDEPUBReaderController.swift */; }; + 2153FA3BF80801DEF871E1F058B4BC28 /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B846342956B3700F458ACA24E534E17 /* RDEPUBCFIUtilities.swift */; }; + 21AED133680D1E64446239B0F6C436E8 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 240F52CEA8D1F72985804D9FF38A9DDD /* RDEPUBWebView+FixedLayout.swift */; }; 2203356EEA94A9172BC7902923E43CBE /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22485CB22E048DEB02531E40C36B78DD /* RDCBZReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10207D5C5DF3B33C322957B6325ECA5D /* RDCBZReaderController.swift */; }; 2272682D201A6AB03AC748D5EE1B4C9C /* RDPDFReaderKitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBED33030719998F00A5173D3C466BD8 /* RDPDFReaderKitView.swift */; }; 22796A7363B805A1A3CFE22E9FEF53DA /* Pods-ReadViewDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */; }; - 22C3CE5D30DEA275C026014A7C6A8DE3 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */; }; - 241586B93762F9D98786D76EC098B7D9 /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089BC1322F491BEB59F94895FDB65109 /* RDEPUBImageViewController.swift */; }; + 2387E55634D5FB72111ACF2EEEBD6139 /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = 23711E614B27F6F6EE187EDBFEFAAE38 /* wxread-replace.css */; }; 241EA2AA99E27D96E4468289A8B02F42 /* RDPDFReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFCC148B58604D0C5A3C240C51B45FD /* RDPDFReaderView-dummy.m */; }; 24395BEB3C360D9DA5180BFB955B04A0 /* DTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F398A3D1144707216F9A20BEDF911E /* DTAttributedLabel.m */; }; 2445709667CB3820E51CD4AA915E6943 /* DTHTMLParserTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 034BC384E1BA330755046E5212201E4D /* DTHTMLParserTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2495C0D30963F211D8127D8ABD02C4C7 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC92A937FE8D7CA37ED82CCEDBCC6E5 /* RDEPUBTextContentInteractionCoordinator.swift */; }; + 24BD40AD5A9BADE65425D9D05A349CDB /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BEA1735DC206814580D0CBDDC031E24 /* RDEPUBPaginator.swift */; }; 24C5B52FD2AA9C49731DC6859ABA7CDE /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDBB29D0A60FEB56FCC489DC10F37BB /* NSDictionary+DTCoreText.m */; }; - 24E26EC4E2715E28AAAF2239556E5D08 /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */; }; - 256F2FBEA0BA50D272159F02D902F611 /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8240722CAA937E143E861EF85889D881 /* RDEPUBWebViewDebug.swift */; }; - 26B43D124F927B5A192121E2DAFEBCBA /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5F66A96961A944FE192D39888B026E6 /* RDEPUBAnnotationModels.swift */; }; + 24C6A5A67DF71CA76B6F3AF29F193AE4 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */; }; + 262BF4A73925D6C0DAA45DE8041FDF48 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */; }; 270C5C10028F0BC5A62548326CCB379B /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DCFEFDD6D693AD5967568E86920AB08 /* DTColor+Compatibility.m */; }; - 2724CBD89B0C9184F4968F5110B305DA /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */; }; - 27691FDEF4012C72412E27C97A68431F /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE29D77AF696BBB755DED2A768C03D64 /* RDEPUBReaderController+TableOfContents.swift */; }; - 27C86A56BD84C02BD3EDEE479F3E6E33 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */; }; - 28D89515B1F7B8051B6C8959D72C9366 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B786661CF20BBDCE901A8609DACF061 /* RDEPUBJavaScriptBridge.swift */; }; - 28D8E43A60A58DA7961352C1F9CEE6B1 /* RDAINaturalLanguageAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D908F35D94E51D89507601431AC05B9 /* RDAINaturalLanguageAnalyzer.swift */; }; - 291EC7B4A19AC0C5068EA15FEA02E358 /* NaturalLanguage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B46D01D4D15C2295F678A21C84B825ED /* NaturalLanguage.framework */; }; - 296FF829157CD0B704761BD5C7DF0C3B /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A70E0ECB35D874C1E9699C1CD0F6261 /* RDEPUBPageCountCache.swift */; }; - 2977D8358E329AEA906D3E64910F451D /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */; }; - 29CD7DA003E4881406DD828AC2BEB203 /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32038A3480CA43711F902B42126D03E6 /* RDEPUBReaderController+PublicAPI.swift */; }; + 27942A1175523D2BD5E9E7E7F6AAFCBF /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ED5D1D93987D1ECA1C9ACBDDBA99968 /* RDEPUBReadingSession.swift */; }; + 2895AAFE16A7927C9CC5B0F75D32139A /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74C359E556A8876EF09A01201FB0403 /* RDEPUBAttachmentNormalizer.swift */; }; + 289E098417EDE9D3518B1C1A01FF4C56 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 344A53B9D93EDE7EB41DEC7D27C8AAF7 /* RDEPUBTextPerformanceSampler.swift */; }; 29D9B32DFFC59A157EDEF005DB92A5AC /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 172C1329A4A6171B18EC5A192815941B /* DTCoreTextLayoutLine.m */; }; - 2A7A9E2D867D0F878B468725D814118B /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2856AF81B14F4FE03A4968F3E239DAD6 /* RDEPUBReaderController+RuntimeBridge.swift */; }; + 29DA059FFB3372A3405B1F483D9F9DDF /* RDAIReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B094ABE0685E65E249C93BF2B135A9 /* RDAIReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2AAF9361720FC2D8FFCA93B5FAE42019 /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */; }; - 2B0FB35E1C7A1961D824C5958EE56B6D /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B662AF2609AEAE5D2B6488E6FBEBDC3B /* RDEPUBNoteResolver.swift */; }; - 2B8511EDF7A3E8E53D235087910D9CB5 /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D55BC5643EA702EB48D478948DF83E /* RDEPUBChapterTailNormalizer.swift */; }; - 2CF882B1AD06F3EFE889465776F0E1AD /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */; }; - 2CFAFBA02504A70F5E2C4371534955E9 /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B7588747FF74836493105F6698CC00 /* RDEPUBNoteModels.swift */; }; - 2D37038C0E73CEECA8A390B68F847FC1 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */; }; - 2D81B7C446C9C00B2C516E6996D9457D /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 7A98FCBF217CA913BD506DAEBAE03449 /* rangy-core.js */; }; - 2D90619922508AD78278F2D1D7169DC4 /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 485961C2B2BC82A4B098F920F901DE24 /* RDEPUBReaderPaginationCoordinator.swift */; }; - 2E1221BBB32678DFDA675FFF50391819 /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = FF4F4DF69DE3402A658BF53389C1E29F /* WeReadApi.js */; }; - 2E14605A6460335AB12B31B3A329F52B /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62BAED47209069B1F1E56A1DBC2892B1 /* RDEPUBCFIPath.swift */; }; - 2E18379B0655CC32BA358CB89F783141 /* RDEPUBTextPageBoundaryValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0B6C724E03707E527C7AB3C1214489 /* RDEPUBTextPageBoundaryValidator.swift */; }; + 2AE79C560C0E3BF0E8F280F86AAB8CA4 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */; }; + 2B258179860AC499B50883A6410CEE22 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B95E139A981A6A49099B4ECFB90AE9D /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36209CE685AAEF60A5410D7D5EB08EA9 /* RDEPUBBuildDiagnosticsReporter.swift */; }; + 2C0B4E9293C8B24B2E5086202EC8BA77 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */; }; + 2C5919C12ABE1A22BB98F7ED2AA8E5CD /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A79F4CCFBC9953DB7A8CD52315A738 /* RDEPUBReaderController+DataSource.swift */; }; + 2CA2B5A8BC35D7493E7F8A26C082789E /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16EA564A15FAF13156B1B63CA898E824 /* RDEPUBReaderAssemblyCoordinator.swift */; }; + 2CB4BF91A9035EF091737601094DE286 /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3E297145AF1816CA5C623327CC59B8 /* RDEPUBReaderEnvironment.swift */; }; + 2D5D90B31C27ABFE9A71AA0829B70447 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */; }; + 2D9F451FCE658C36FBD90A4B9FB6E807 /* RDSpeechReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D94A0293C1A11AB0BF793F0804AF01BA /* RDSpeechReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DAB2050BC06A4C6A8903E9B3DD06777 /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6314FB72D26D4408191CE8E9D1E318B1 /* RDEPUBPresentationRuntime.swift */; }; + 2DEE061E843862292F7E1DD86A7D217D /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE50EC81EDB03616225DAB735C90CFAD /* RDEPUBPaginationCacheCoordinator.swift */; }; + 2E86C5D5A6A8ECE76FC710F5A7839A4B /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2EB84DBB152379A800758656C572218C /* RDPDFSpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE673C095E86DC64BE73E53BA8C59702 /* RDPDFSpeechContentProvider.swift */; }; - 2EEA383365CCE1949C7C68B2EDD1904A /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */; }; - 2F1FA27C68F3FF94F477C89F92BE0871 /* CryptoKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C9E8FA478D23AC4494D5120C081C48B /* CryptoKit.framework */; }; + 2EEEF833B213486F044A3AABF1BC1A99 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28619FF1699FE5E9E9981D4B9C26E55 /* RDEPUBPageLayoutSnapshot.swift */; }; + 2EF74777E4F0C408BE00A974639979CD /* RDEpubReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A367786E9C55FFE1AA25D87507414354 /* RDEpubReaderPreloadController.swift */; }; 2F4AB3D711200DAB6B8B0E6D5E3E9774 /* RDPDFAIContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81313A5C1BC97CDA5BE30763C8F014F9 /* RDPDFAIContentProvider.swift */; }; + 2FC2EC825BFB520C931A20AD3C93DAD0 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2FD7360250C2255A80583D4CF518FBFA /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */; }; - 30BEF39A9B359BE62E758B3677D6B84C /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 367C998948D9897CF825A08E51AF013D /* RDEPUBChapterData.swift */; }; 30C01FE491C26314F776AD8B2AF136FA /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */; }; - 30C76262557529A72A679968DF501160 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 318FC0E7FCF79F00F83A7F03E766A219 /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = A533699DEE4985154543EA9F53620DB8 /* RDEPUBReaderDependencies.swift */; }; 31B805C50E0E187E6242B0C878C4D30D /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32DAF222F4D8F7D244F10A0CD3BE3BB2 /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41EC12208AD1A079C60779F6DD30DAC4 /* RDEPUBPageResolver.swift */; }; - 3327189FE732B9F7C893297271C8E70E /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D001927426A4D5E9E90B7899A00372 /* RDEPUBParser+ReadingProfile.swift */; }; - 33410924D34E540BA70B8B5399EB5D4D /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87893187F5137BA27FE812E2F9346B30 /* RDEPUBNotePopupCoordinator.swift */; }; - 337FEBAB6EC0B4E4C7C3F83B1A74F290 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80A410954172DEFFD72C06139798345A /* QuartzCore.framework */; }; + 342CF0083041E6957710A3D35EEDBD5F /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8DB205FB6149A977447BDB109A35B2E /* RDEPUBReaderSearchCoordinator.swift */; }; 343E794F88AA503F5139C2244DC1A2B1 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C822D376841DA0BA4150A8A8E5B911D /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34CEDD8C5C37205306E49A3D61CB6E9E /* RDSpeechReaderControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F9B093162E445308F49662C7C35DA6 /* RDSpeechReaderControlView.swift */; }; - 34D738F155D0D3CA16F3C6554B665A8E /* RDEPUBTextPageVerticalJustifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C80B76361E9EE71ACFCB82163017066 /* RDEPUBTextPageVerticalJustifier.swift */; }; - 34DAABEF8DA392B03437ED80143BB90B /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = C26B30F895FEA65F0D322407234375F0 /* RDEPUBReaderTheme.swift */; }; - 357B7E80FF2F9CE5FDFBDFBB5A492305 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34A377090CCB6577C85C8F72E0F3CD7F /* RDEpubReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2715A17C898A6D776882BEBED0FE9695 /* RDEpubReaderFlowLayout.swift */; }; + 34A50CCAB9D9D2DB6C6E2568A4E8D047 /* NaturalLanguage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */; }; + 3527805F1EAF4AA2D1C691835E0D3738 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */; }; + 35A02EFDD20399BE1910CB5C855BCBFA /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */; }; 35C5BE59CA712CCDF93D6E7010D93883 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A43AFE4C6D7EBA5A25A5B514F473AF /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35DFE3F833A49E5F055087209FDA48A3 /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D8597FAB9BFFF6551C75F9A23E95F1 /* RDEPUBWebDecorationOverlayView.swift */; }; 361808AE6FE4B0AD47DB34C9D1290C5C /* RDPDFReaderNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3397616AD34F6B89948DEBE139C7C5 /* RDPDFReaderNavigationView.swift */; }; - 362B570C94340092A816356AD3284F79 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */; }; - 364E816FBEEE0591DA21255B0C587D9B /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F24C368CBF5CCF60B01598682C6C07F /* RDEPUBSelectionState.swift */; }; - 36C1DEB5DF32B53B2903DFE887443AE0 /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = FA2A95481CF034C4689E42B263042872 /* wxread-replace-latin.css */; }; - 36EFE5DFB1FE7968EEFB9264FFF87CCD /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6975E8E0C8246911E8F8318E762672D9 /* RDEPUBReaderDelegate.swift */; }; + 3674DE97851C406DA102B9E44BF04D28 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 16023686DC389E6755BC79366433C45B /* DTVersion.m */; }; 372E907DF08263D0E1AF904F1FCD66EB /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3813C43484C6A1175B47BE62E5A37AEA /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E8C2259B135B2F86D6250BD6B09178A /* RDEPUBBackgroundCoverageStore.swift */; }; - 3815E2C02F20BAB245D81A5930487778 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */; }; - 388E284D44A216A5ECCC0EC49AE89AF1 /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D7E62479EFF470F47755931FC2BFA4 /* RDEPUBReaderSettings.swift */; }; - 388E7E64B2A9CB4FE6BB4421CA66F65F /* RDSpeechReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6C3FFDC5714D18BE0534AF20F6C07CA /* RDSpeechReaderView-dummy.m */; }; + 3757CD1E7F4EA41CDAB495BBB6F7D9DC /* RDAIIndexService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F37BFCD74928584B57F92A89DC4573 /* RDAIIndexService.swift */; }; + 383ED4A31AA31ECDE5599419DDA89041 /* RDCBZReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A49256901179CB08DE0A320BF1D7BE /* RDCBZReaderController.swift */; }; + 387C801A5E9BC43D2E10A71E04597B03 /* RDEpubReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBB650C069928DBF6A9F7BA0E89A4BA /* RDEpubReaderView+CollectionView.swift */; }; 389F7C8400F9223C019F2D7825CD2369 /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = E26546A9CD322544BEF648DFE2B26D7D /* NSCharacterSet+HTML.m */; }; - 38B7A8486011EE9E4C92AD7F43C67D6C /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */; }; - 38DEF213C89004432B18C427CE1FD830 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */; }; - 38EB2BF870061DE650DA95053B69B87F /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */; }; - 3A2E99A9D63EBA1AD6DEB88A58230346 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */; }; - 3A3CB29C0A090DA053B50CD7FD0E2C3D /* RDEpubReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 02BE103F11BACB69B3478BA07AE1A2A5 /* RDEpubReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3AED3330F76DB3D002DABE13B11DDFD2 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C067EBE2D4B7D28B8C196166C62F4C4 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */; }; - 3CF692B9C6EA33FD628CD3ECCDD9462E /* RDEpubReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCEC432BB6F19EF8C918567EDAE34801 /* RDEpubReaderPreloadController.swift */; }; - 3D9793416203988F167E189744A50298 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38ED3BA7A3F5F7E164EFA8FFC4D29678 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */; }; + 3905E0DA77036FD5BEFD7D80EF8A83CB /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA21017980D553A4F9BDDF4AA5D7C5A /* RDEPUBParser+Package.swift */; }; + 3931A56C2503B0A3D0FE828F02D9B979 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */; }; + 3936F0CEFF36DF3B6950232469464C92 /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */; }; + 3B573DE391E21DD53D79438B96CC0393 /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD23766F927150C00F31EF8198B457A /* RDEPUBReaderHighlightsViewController.swift */; }; + 3B96821680A1C1A218CE1C9FC855A23B /* RDSpeechReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBAA88C8DBE0129E51AD73F7D1AB4BD /* RDSpeechReaderController.swift */; }; + 3BA3E2716A868DCB8EAEFF2AA664DE4A /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8568D36432A34FEDE5381E99A8C991F8 /* RDEPUBReaderRuntime.swift */; }; + 3BC5755AD310406848ABECE1CA3F246D /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3CF535BAE45442DAA10B8602BDB97ED0 /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC986A408054D5C173C9528E22F94B5 /* RDEPUBTextPositionConverter.swift */; }; 3DC8F9474FC6A0BB7E81A703CE958966 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A5EB7C80D2F578DE579CA1B20F3CDB /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F92A8FBCF50F172D4CB30137CE10F35 /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC7700A9EB3EB33F6095CC49EA54E6C1 /* RDEPUBBuildDiagnosticsReporter.swift */; }; - 3FDE28AE263B6D46649F6F76FDBC444F /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */; }; - 40DEA7D35972343F41C629EE3AF5F7F0 /* RDEpubReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10A21533669EF5F6B433ACF6570084B4 /* RDEpubReaderPagingController.swift */; }; - 41191E0937C0FBA3176942094059817F /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55ECB9EB83BDA7CDF3E67366AAA25C22 /* RDEPUBReadingSession.swift */; }; - 414209E3808FAACFE4C679EBFA8965B2 /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4213BB00548C581AD1EBCCC1F4787A88 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 428790F145A922B7906C4EB7D5CB174B /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */; }; + 3DF19CE1034D02FA86C0B5BAB69917AE /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036FFBB8F2CD53C655683977792C77E1 /* RDEPUBReaderAnnotationCoordinator.swift */; }; + 3FDC0622E8C79045CCD33384BECD3148 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */; }; + 4072AA6607B72436AD2E6AE3FFADAC89 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + 40FFDE03700BDC58ED5577371EF237F2 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */; }; + 41B1A699D6984DB7183BA045834CB450 /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F873050819BDCAA6F32B3166C4ED9C5 /* RDEPUBCFICompatibility.swift */; }; + 41F5F94C7DF31187F8DEDACFED77F0E2 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */; }; 42C418BB820EE1B51E1BB966F7D4A59A /* RDPDFZoomablePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A41D37F86EFC816F7478316843069DA /* RDPDFZoomablePageView.swift */; }; - 4371AF1A25318F3F3797741057CD23FF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - 449479B94F78893071A747CA22DEFB2A /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52481F3BA048F07B97DAC750A397270E /* RDEPUBPreferences.swift */; }; + 432828354099FF9940FC9BB1A5DC2D6E /* RDEPUBAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F27A444B1D85CE9D552F3BE088E5E7 /* RDEPUBAnnotationEditorViewController.swift */; }; + 4378DA5B31F23FA54D3D1B377447835C /* RDEpubReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 255FEB02D707D9C56E1D5BBE89A8488B /* RDEpubReaderGestureController.swift */; }; + 43E68A3A27053FD0A6BD82887F6A61B3 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9462F129CC1EF33AAEDFC0F3CD09BD9A /* RDEPUBTextLayoutFrame.swift */; }; 44B1FBF893C06F314F8C9BD1405897D8 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */; }; 44B420AB0963FB65CA7734418F1E80E1 /* RDPDFReaderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F654C6659A3FDE4C3E08BBDD2C01CCF /* RDPDFReaderViewController.swift */; }; - 44FB7CAB227C63DB590DC3D61428F678 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */; }; + 44F3EDE2E5585295F5881B0354772652 /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35113955C9D390BAC3B55BD96F596650 /* RDEPUBStyleSheetComposer.swift */; }; + 44FA5DE799285D7A61EA798CEEA430B8 /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E5A5D3D109FB88E6EA88F1E2253525 /* RDEPUBChapterLocation.swift */; }; 45133E47CC5FBCF78BFCD38981BA027F /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4538E556FB8600C7E6D29F769FC0EA47 /* RDEpubReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = B454B7709E93E1E886E4FA533B06802D /* RDEpubReaderView+PageCurl.swift */; }; - 45C22D05CEBD5AC9C520EDE9A860DED4 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71BC62246AFEBD517D3175813789310 /* Debugging.swift */; }; - 45D891EAA051DD40FF50DF6EF850A89F /* RDMOBIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 657A0B0DD4402A509DF0BF6AA9360DF5 /* RDMOBIParser.swift */; }; - 45F0A220FCCA6BD09278BD4178381D63 /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */; }; + 45C2D80A964B3CE611A003CBBDFD36ED /* RDAIDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 291A21D778336F982A7197655BD501D5 /* RDAIDiagnostics.swift */; }; 45F90B98546FDBA03AB112DFE859A185 /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C5C85EAAD91F1E22CC5986EF9B5D218 /* DTCSSStylesheet.m */; }; 4682824DA120D16A9C1E5A409449D660 /* RDPDFReaderAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91AB03142606446D515451D75613853 /* RDPDFReaderAnnotationEditorViewController.swift */; }; - 46C63092880297CC1FEA04268121642A /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5620BF46CC66D177218F95274B0899FD /* RDEPUBPaginationModels.swift */; }; - 46D1C37BE8645232A7A3890D3B583E4A /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */; }; - 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3FE3107482A464FFADCB685658099F9 /* ImageIO.framework */; }; - 47CEF67F26AD47F9BA63D89C4F233667 /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F772869AF68874D248A1C55227A74BB /* RDEPUBViewportTypes.swift */; }; - 484D3D3F85A886BE6364CEEE333C7045 /* PDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3D2DECDF3F1951B4030402CDC6F89E8 /* PDFKit.framework */; }; - 48897F07CD74DA89D61337A3832233BE /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 46D4BDA7B3DB868CE98E5733017F3E86 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */; }; + 476B266618E9281C1F362C871E9686B2 /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B9E332F7EDBC4A91BF0DBB014C44D12 /* RDEPUBNoteDetector.swift */; }; + 483931C8D43DEF9C708EC6111B7C8E6C /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */; }; + 4840D1F3B294A0C51F6B6ED77779A836 /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF5A643FD1163E493C913723C79E6B44 /* RDEPUBWebView+Configuration.swift */; }; + 484D3D3F85A886BE6364CEEE333C7045 /* PDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A6185F233EFF0ED894B7128B2B09821 /* PDFKit.framework */; }; + 48D1F6EEB21172A1047DAE33BFC9D647 /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD65472015B1666F31D1B7722813104 /* RDEPUBReaderController+LocationResolution.swift */; }; + 48E166F2C1FCEA0163D05D60838C08AD /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400E1D62DDD3EBA94D28BCBAEEB8278D /* RDEPUBCFIPath.swift */; }; + 4905D46C2BB35B43AE7A780EA987D146 /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22EC93BBACD9340338C2EA7F06488FF9 /* RDEPUBPaginationModels.swift */; }; 4A13B4E5EA8616A8F09D90BC6EAEEA64 /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */; }; - 4B9FA34806EE1B678A99B1B8E105F768 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */; }; - 4C8C31A67EF3C63F2DA59BC54F835395 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A3F3DC28A03FECBBC8A4FD8E5EBD8B /* RDEPUBTextContentView.swift */; }; - 4CD69F81A7F837750AE17A9DB48E9BDF /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */; }; + 4A1F368BBA3E00391DFC147AEB4ABF08 /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */; }; + 4A596FCAE2DB0ACF3FF099A65C7E0512 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF76DD862995E6DCA4C9DD1EAD23C6F6 /* RDEPUBAttachmentTooltipOverlayView.swift */; }; + 4B119ECC1F5E2879EEBBECE73B885B5D /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */; }; + 4BA0B5B55E26574C00CFD26DEF30CA7D /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652FAC593B4120C7C6FB336099192C03 /* RDEPUBPreferences.swift */; }; + 4BAAFE6F010272E410ACAE88390153C3 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A141D6AF0DC4700DEB1835448CD930EE /* RDEPUBCFIDOMPathBuilder.swift */; }; + 4BD4C274A25A2C0D67A8CD58CEE23A96 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */; }; + 4C3BF1D5C2B8A4CEEEB866622065590F /* RDEPUBTextPageVerticalJustifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C0AB34CD2CE6BAD791E1F6E3D75649 /* RDEPUBTextPageVerticalJustifier.swift */; }; 4DA6EC46F8968265B96C6D7B2260C4E5 /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */; }; 4E4939F6592B06D2CA764DCACFB47871 /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE24D923BB63C2BD4397C37352A6204 /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4ED2E0F8F0C2889F3DC707D165024E10 /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38B47FDF2463F124FDC2B6154F98E987 /* RDEPUBReaderLoadCoordinator.swift */; }; 4F50C703427747B88405080B221349A1 /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E7890CD33BD10753D1D971AD2FE20A74 /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 504FA151E73E60DCA3FF4B5EE8CD3934 /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EEE779A1CEC15EBD959AE8FB87C5E20 /* RDEPUBChapterPageCounter.swift */; }; + 5063918BF068EDD60245CF1FFA14C784 /* RDEpubReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CEE20803A7C342B83A5972F87CE05F /* RDEpubReaderView+ToolView.swift */; }; 5065D99E1588E8CC60677E74916A5C03 /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */; }; - 5075AB6E0A829656787F4F6AB63CE7F4 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */; }; + 5069AC302EAA58714AE6D0BB0AD65633 /* RDEpubReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7921A77874E3E2E63E378843085CE55F /* RDEpubReaderSpreadResolver.swift */; }; 51A1B5800D23C355B1712E8D1103780C /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51D6A2884ADB8102F2CDFD0F4FC4284D /* RDEPUBMemoryProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8233CAA669CAC56C7B0EEE700B53A23 /* RDEPUBMemoryProbe.swift */; }; + 522C9D67313466AF5FAE800D0D20A1B8 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */; }; 5271325F17912AE731F1FAF8D3328F6C /* RDPDFReaderDrawingLayersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFBBED2FC1668912DBF7592720CC14A4 /* RDPDFReaderDrawingLayersView.swift */; }; 528DBAC7FCEFC7D6575C1F6CB4399AEA /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52912BFCB288B0906F8F9E9D3BD03E1F /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53066BC799D5536B28341C163C201842 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53EA9E7B4DEBBEE14B6B83FF7D5F0B2F /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC507AA13E507E6197F6E4B3BB70F899 /* RDEPUBReaderEnvironment.swift */; }; - 53EBDB54E3A562FEF8A6B1D1601E8CE6 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D50156C4B53F70228DCAC0501DB9226C /* RDEPUBStyleSheetBuilder.swift */; }; + 52C7F205E10750FE3DB39E685D6B00B0 /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = 5964D41F9024DDA6DA0E1B06D5A628DE /* wxread-default.css */; }; + 53ED06B75EF9B8FFC0D2362B7B64F4FD /* RDAILocatorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90DC3AA09B301621526C8BCC0AD9D9 /* RDAILocatorBuilder.swift */; }; 5456493C65094838AD0F2BC39FDC7B41 /* RDPDFReaderChromeViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7C3A637594FCD8D6F09237F5103A39 /* RDPDFReaderChromeViews.swift */; }; - 54AB1CA8DC10415A933C420BF1E4FD0F /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */; }; + 54CFB30383D0EA0F41434F46087160F0 /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 280E073C67E0A1BAF7D84E6DA6FEF2CE /* RDEPUBTextBookCache.swift */; }; + 54D02DDE581B6C0C88C240CEBC5CC41B /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DD1E0E929865962947B62F7DED78F3 /* RDEPUBDarkImageAdjuster.swift */; }; + 5503E7E20C896418ECCDD315FA7F71BC /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */; }; + 555FD7CDC7364E9E4F849A54255B0D27 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41842E3F5C4C4B1ACDE3C397F0AE687B /* RDEPUBWebView+Search.swift */; }; 5582735073EBB9F5078E6E8AEEFB646A /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 561D7DED747942143368E79909C9061A /* RDEPUBDecryptingImageAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57512CC2A1488E761B4B2A6F02CB55F0 /* RDEPUBDecryptingImageAttachment.swift */; }; - 5675678CC8AA593425AC50EC4B702208 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F65A581119EB07B606117CEBB02F900F /* RDEPUBTextPerformanceSampler.swift */; }; - 573128D7B1E3523C3355E57F0E012087 /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06E8F756DFAEAA9E8FA4B7D472000B2E /* RDEPUBTextBookCache.swift */; }; - 5773E1761F14534E57C620E0ECE4D1DB /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */; }; - 5786077F5C93E7605EAF0E0C9D84BBFE /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83ECB8E69E2047D86F4EA6D987E0B8A /* RDEPUBTextSelectionController.swift */; }; - 57D29D069EC196338B1E4DD238FD7FAB /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4914EC4B82CC6AA3736968D86B805228 /* RDEPUBSemanticMarkerInjector.swift */; }; + 570B9696C1005A0AEF43490F610D6826 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */; }; + 570E7075A4C6493C10203B303AE5CE7B /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 278B56CFF632EE38795D20993A889459 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; 57D5228C8A85628772D4D78E7FBEAF3C /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 188836BC213C48E6459D098231133246 /* DTDictationPlaceholderTextAttachment.m */; }; - 580A03A83013B855159D405AF80EDBED /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AA4DBF07DDCE87ABC0B78A2FF3FB813 /* UIColor+RDEPUB.swift */; }; - 58D149A0978D65A0E3100DAC8F64C2B8 /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237DCFF0194564E19C33BED372E1EA72 /* RDEPUBTextPaginationInterfaces.swift */; }; - 5957FC1D1BA1EFB4BECB72F04EE3CD55 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93231E903E802072F56185B464DDFAD4 /* MediaPlayer.framework */; }; + 57E6E8838EA62098BBF70310A8ED9A69 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */; }; + 587015DDFCEB54F1161FF6D1E04511CB /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB109BD1A878FD38390731ED383EBB8 /* RDEPUBRuntimePageCount.swift */; }; + 59023BFD93B4B99D464C75471795658D /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */; }; + 590762C119260376B3DCCC16D2362964 /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18F8C909773BAAEE76086E976B096FDE /* RDEPUBFontFallbackResolver.swift */; }; + 593C7D0F96C618C5D04A67758D019C39 /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 252792DF6A9EBFA863DC153A59A7C003 /* RDEPUBChapterRuntimeStore.swift */; }; 597DE4CDF5C674E269F03F6AA0AFFCC1 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */; }; - 5980E58B9A264939FA5CBE838154F066 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CBDA7783934999491663AB204B5A064 /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929AF2396E5AFD5D38E0BA75065368B /* RDEPUBCFIUtilities.swift */; }; - 5CE19D28BB2108D3D10A2D8150AE1CB1 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 598D022C283819443091902BE734DAA8 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */; }; + 5B5B1CD4310ABEA4C3480C1C1F0BA092 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37A4370530967E365499946ECCA13F13 /* RDEPUBSelectionOverlayView.swift */; }; + 5BD8E695D1B9D6FB8A1CDB11F19F9E24 /* RDAIReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBD48F4256CF6916C32ACC00CA15E31 /* RDAIReaderContracts.swift */; }; + 5C034F77D297BB39CC375385C29086E7 /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999BDDCF67865CDD1D8FDFDCF47B3BA6 /* RDEPUBBookPageMap.swift */; }; + 5C39B3B61C6C9554E874E04461D099E0 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 351FD88DC68196BACB5E8C369837AF17 /* RDEPUBReaderTopToolView.swift */; }; + 5C8E343FC738C259948D09E98B2BE323 /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C8DF89086D815C51DE683C61FC05D1 /* RDEPUBReaderController+ExternalLinks.swift */; }; + 5CDC5753D0BEA1791C8585D0DFE20214 /* RDEpubReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0D4CF44D919376D1696CC0827A6D4D9 /* RDEpubReaderPagingController.swift */; }; 5D03A5B9DC067875CFEC9D4EA7B059E8 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D5071CE8770A20C085423D3421BEDCD /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5D8D65121E87E419D8D2F23F8AF43673 /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 51CD1050B1BC09EA428919282AA2614D /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DC8894BAE6FB562F51C90E96BEB5E60 /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D3D1B3F2E5D775108B74D6574B91DCE /* RDEPUBReaderController+AttachmentTooltip.swift */; }; - 5E4CB3BDAE2876F57FAF5F7707D339AB /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */; }; - 5E520D912C064B9781FD02FF703B11A4 /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */; }; + 5D9FF5F738BCBCB2CD47D8E127795DCD /* RDEpubReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E158150F7B2357D4D54239CBD346CE8 /* RDEpubReaderPageChildViewController.swift */; }; + 5E1C53786FAF732AA6AE6CDB8D03726C /* RDEPUBDecryptingImageAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = C34C80F5248BF6ED37B94686518B46EB /* RDEPUBDecryptingImageAttachment.swift */; }; 5E90EBD876ED4E50AB890FB56C4BFA57 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5FF4E86CD0381F96E2E2785DE8857966 /* RDPDFReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C14962F04ECA1A8B77093B8EF5E23B /* RDPDFReaderView+ToolView.swift */; }; - 6001AAEEAB0C6493A397350500BB4038 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */; }; + 6015E451BF1858D3DEAABC76AA62D950 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; 60532A2E06CCFF814933D2FAE6793AE9 /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55265AB7222E2B20F9B5B320259186BC /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60A37D279ACFAF6C62A16016309CE762 /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31802A30449913CF424CD3B666B895CF /* RDEPUBDarkImageAdjuster.swift */; }; + 60A4A0DBFD2263B7E2FA3928A0ABBD71 /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 953E3DE740417FEABC50197EA84D3869 /* RDEPUBAnnotationModels.swift */; }; 61BE3607EABD2657BC71AF8ACB1C25D4 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 620D89AB6F1FC6B817F370E17A5FA9D2 /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACEA23FA60F80BDEFD2EC71EB10F4 /* RDEPUBRenderRequest.swift */; }; - 64004A893517583C803AEAB3872022B6 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58E942DE9692E29D8CB63A8E7F0E6B2B /* RDEPUBNavigatorLayoutContext.swift */; }; + 61F79BC766893CDF8A84F85144D54E34 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 621D8713C9AC9C3C09787C40997DDC85 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F91B0C7F09F04D73718237F3B40697E /* RDEPUBFontNormalizer.swift */; }; + 627969A2C4F0C40D00C45FCF74C645DF /* RDSpeechTextPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08203CC2BC14FB8B3BA0CAA3EC92789C /* RDSpeechTextPreprocessor.swift */; }; + 62E433B2BAA5AA37D49EAF6B5BE98C4A /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4D5A0A05487585451479D692E07399B /* RDEPUBViewportTypes.swift */; }; + 631388C3FD4E018ACBDDF55A0EE10AC2 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */; }; + 63652A1FFAAD5C46479F1F8E051917D2 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6032EC340E3CFAD1A8538662BBFF5BB /* RDEPUBSearchEngine.swift */; }; 64155589E0B98A2A533AEADA4F0411F7 /* RDPDFKitPageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4419BC4EF1BB72BD430008215C2194B1 /* RDPDFKitPageProvider.swift */; }; - 64B71533F97E195EB639209DBEE574E1 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */; }; - 64D22A0DC2A1210D1494E7FC4D191539 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */; }; - 65A0F8C6C162FDF2987C650A1E0313A5 /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EEE1249C915939654A5609D3CFC2064 /* RDEPUBReaderSettingsViewController.swift */; }; - 65E553FCED2BBA7B9B15A94AB3B50098 /* AVFAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4081F7CA1FC93EE97276F3D05A333ED /* AVFAudio.framework */; }; - 661647FBCA7F9F220857F8EFAA05A2B5 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */; }; + 64B52518CC3578ED6CA80020FB2F33C9 /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDC0C56A84DE47A00B353522B7309AE /* RDEPUBTextPaginationSupport.swift */; }; + 64F0A668BEE5C8AACCB9C3BC9388CDAB /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE2FF626D776A0880B86E92EC160BA17 /* UIColor+RDEPUBHex.swift */; }; + 65E97E47A6CE7EEFD12CDBECD0D2E91F /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988C218F8E7B50E498B5A44BFE164678 /* RDEPUBNotePopupViewController.swift */; }; + 6622C4F4EAB0B5CAF9505377FD99AA2B /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; 6634D568E49F5610242E1454680E5885 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD3CB33E5A4E915E5F4C09F4684FFF2 /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6650D31565F5BD0E11FEC0F514E700DB /* RDEpubReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F79A4C9316E507B47DF63F26FC3263 /* RDEpubReaderContentCell.swift */; }; - 667E37483857C6BDEEE623A200BD94B5 /* RDAIReaderAssistantViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F5A849E82ECED8710DBA54B127186F /* RDAIReaderAssistantViewController.swift */; }; - 66EE3EB9F8CDD8E41EBB76F19EBAB512 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4F453E8FCDC0F85D36928C5390D77A /* RDEPUBWebView.swift */; }; - 67008C120F021B02D674C8957B3351DE /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B75BE4C4CB6B906D8F81B37938F0A46 /* RDEPUBReaderController.swift */; }; + 66A624E8BC1DAF3DB5F73A4803E7D2BC /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */; }; + 66FEEF58DB4B1991D6D0A641B05F937A /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340ED4F9AD1A9332EABEC511A49FD18A /* RDEPUBCFIGenerator.swift */; }; + 6705BD3C1F523637A9AE0E5ED01A9121 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */; }; + 6713F7FC53DE9E9717B7D7BED1966EEC /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EBC152CC752677E2BF9AC52A6BA36E /* RDEPUBBackgroundPriorityPolicy.swift */; }; + 672001630C16C4BFF67B5E08F8BC74C0 /* RDEpubReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FC4D22055A02594B80AE3D61169CC1 /* RDEpubReaderView+PageCurl.swift */; }; + 672B4D141F08F37F31DB25A3B3C3436C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */; }; + 675E36872F910FE44726AED144E3FC59 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C72E137C3DFA668BFDC57A4BEC6AE32C /* RDEPUBReaderDelegate.swift */; }; 67AE2AC8D9B961D45871077774E11FD3 /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD1F6CDF944640D5F1E2A81A5494657 /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68003F1BF23E3222A141F945510D9AE4 /* RDAINaturalLanguageSemanticScorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F3A858FD7165A3AEBBCA78E105DB73 /* RDAINaturalLanguageSemanticScorer.swift */; }; - 680EF666B4832EF1412DD7112D40286F /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */; }; - 683D3404833FA173E581FADE53BA9B06 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */; }; - 68A504E33F4476A37D95AF974D9D198E /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C19196DA0724F0BF7BAF7DF59C04D8E /* RDEPUBReaderLocationCoordinator.swift */; }; + 67E58BF0C1BB9DAFA1938AAE06AA0473 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3295E071BD0E7D326FF78153BA2B547 /* RDEPUBJavaScriptBridge.swift */; }; + 68A785B7E08A8E8829F896F3B9D20E4D /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D14015E61E39CFCDCA7990AD045B00A /* RDEPUBPublication.swift */; }; + 692FBE7827CB1C969D79F56C7250FDA1 /* RDEpubReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 752C7424C07641B28AD2F0C06D1629D5 /* RDEpubReaderTapRegionHandler.swift */; }; 69674FEA70899F07BE6098AAEC849978 /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */; }; - 6993659598D8EC4FAA57E264AFE676CD /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6ADF048625373BC2C3B5BE61BA02D982 /* RDAISQLiteIndexStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C637C4B48A62EF0502BDEF1DE9D0E15 /* RDAISQLiteIndexStore.swift */; }; - 6B132E2AD8BB1F2FB21D9F6F7D068C1A /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AE141846409815273DEBF1DF496BBF6 /* RDEPUBPageMapReconciliationCoordinator.swift */; }; - 6C87E6144D0723E917B879E3834B7972 /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C992E1A2FBD5D966690C03F54B81656 /* RDEpubPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7777AD7DDECA33F4050E77507F113B22 /* RDEpubPlainTextBookBuilder.swift */; }; - 6D8F3D282FEBDD51A7970E92330173DB /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */; }; - 6E070BD7200B70ABD28128435066780B /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D34C7BD6896EBDB5BAFDCC8F420FB6 /* RDEPUBReaderChromeCoordinator.swift */; }; - 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93231E903E802072F56185B464DDFAD4 /* MediaPlayer.framework */; }; - 6E5DFE7C1EEB11AD1986C41B2FFBCE65 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - 6EC9EE335402510D6B2F48947BBDA57A /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C59FCD684EB9341B04A358F9BAF4DC4 /* RDEPUBReaderUIState.swift */; }; + 69C2DAE51CE7FB6012E7BC6B242F1D87 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */; }; + 6A7CAC6F109F9A5FECFAF8365434B5E4 /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7C568B890F636C0EFDCC12139EEC9A /* RDEPUBCFIResolver.swift */; }; + 6A7F010D74A23FDE95D3217D7BBF51F3 /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB469565A1ED216AFEEDC8EAE6EBD11C /* RDEPUBJumpSession.swift */; }; + 6AEBFDC2BBEFF8D41B92E25BEBA88DA9 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */; }; + 6B67545C9C3B50F376199A953DAAF248 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */; }; + 6C401234C15BC214C8C7EB4200624E17 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8271BF8B7810200FA9F29F48A6560327 /* RDEPUBChapterWarmupOrchestrator.swift */; }; + 6C493923CF5641870D6A95200105006B /* RDEpubPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAE4A81DD559C8DAA24A7E45914AB294 /* RDEpubPlainTextBookBuilder.swift */; }; + 6C739D4266DDB13ABA18475D0DC8E6D4 /* RDEpubURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17C5298DC7291DA6730207C4C66F50D /* RDEpubURLReaderController.swift */; }; + 6E11974227C5789EF307B73FD968E54F /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = 58557168DB1E78D1B4AF6C29B679CB21 /* rangy-serializer.js */; }; + 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */; }; + 6F9CCC35918031FA93F8DB97E92E3C12 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */; }; 6FA0125F16DDEDAD341DB75DEB084F4B /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BB20F608D8D3B80F2688014A5F661FC /* DTHTMLWriter.m */; }; + 6FE61735A4634CFD8570656E8D0CE8F9 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */; }; 7027EF8D77D4082C1BB9B80FF61FCADC /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70569A36850676C7E290786FA104AD9B /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176BA6492702B8C8B44BB4838E9BE22E /* RDEPUBFixedLayoutTemplate.swift */; }; + 70AE1C2638D37EFABDC722F9EEFE35C4 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 713A5472FA1AC9AFDE2A53ADCBD7E275 /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 984D5B14277EA4CB70D58019DC0D2E7A /* RDEPUBChapterCacheKey.swift */; }; + 7140ED0FCBEE21E6ADC5C86510554445 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */; }; + 71418DB3666321E61DCCEB3283249368 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + 7151C4FC372F80CE454CBB4ABD2C0FAD /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D35E3E5D1F0237B862AF1C496338DA61 /* RDEPUBPageMapReconciliationCoordinator.swift */; }; 7154F8895FC65582EE371B109D94B2B3 /* RDPDFSpeechSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064F689D0045852491C10A092AF5E30D /* RDPDFSpeechSession.swift */; }; - 719EC088BB401166907C358B25061959 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E937FB7E0D9A3DEF0742A18E455FF54 /* RDEPUBCFIRecoveryEngine.swift */; }; + 719F5098842D53A54D6CF6D8CA38561F /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AC4B57FB834CD3FE6380801D726D436 /* RDEPUBReaderConfiguration.swift */; }; + 71FA30F520F3977FCA0F2E7DDFD0849D /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */; }; + 728B81996929B1861280CF1FE49C25BA /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; 730ACB99580C5982DC08D50FC5084D41 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = B646DEE91A4E62F132C54E702B8BDF18 /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 731BC686480474979C1C827F80525751 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 112BB2DF4A650E511F8E5988973D1199 /* RDEPUBSelectionLoupeView.swift */; }; - 735EE64EDAD773096F1927E8213282A7 /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01BF453B34821E315E0E3B1A1363A538 /* RDEPUBMetadataParseCancellationController.swift */; }; - 73C6E934E7FE5FE2D1A75BD158D5A486 /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6245AD148BF98574A18D998B11830A21 /* RDEPUBAttachmentTooltipView.swift */; }; + 7395CBDBDC06A230C64495B11DED662D /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7A9D2873B8F3EC6F43F7F65854A0341 /* RDEPUBSearchModels.swift */; }; + 7398FC3E3694EC9874DBAB773AAC1B24 /* RDEPUBReaderController+Trial.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3046302F1405F10DE953D9BB963E1A8 /* RDEPUBReaderController+Trial.swift */; }; + 73A83E4CC747E532247A09C60BE97099 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F4690DA615CD1FD20F08CD8BB5CD166 /* RDEPUBStyleSheetBuilder.swift */; }; 73CB1C47A368FB5FD420680227696815 /* RDPDFReaderPersistenceStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B368C95FB7C2727A7CA452242CB904 /* RDPDFReaderPersistenceStore.swift */; }; - 744D46169467D313783B7F9C4F80F29D /* RDEPUBSettingsFlipAutomation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10F7EBC0047B5FAFD86F2BE940E3C100 /* RDEPUBSettingsFlipAutomation.swift */; }; 7459A1656EDC29D685073B83561B783E /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = F8569A5FF03BA54C0F4080D3EE5539D5 /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7668961F2433BB151F1E4EE19AAE4579 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */; }; - 76787F2728FA3FED06C6481B555459C5 /* RDAIIndexService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F37BFCD74928584B57F92A89DC4573 /* RDAIIndexService.swift */; }; - 76844664CDB792B3186A4759C1A6C443 /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = 2B49BEF738A6B60FB6A64671ACA9091B /* rangy-serializer.js */; }; - 77BB20EA9E7E317CEE37A69DD487CED6 /* RDEpubReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44F6F4C9B8DC26B67956A489EB5E2E39 /* RDEpubReaderPageChildViewController.swift */; }; + 74C2C8965437DD15A1DF7393274EE945 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74F65BAFF30DB1459C767CC1B79C267B /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71BC62246AFEBD517D3175813789310 /* Debugging.swift */; }; + 768D72C3538A9E008887345F76DA4D82 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76F75335C90A55087171C9DF54E2F4B0 /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0835A36D971DBF49B21DC08AF857E4 /* RDEPUBReaderController+ContentDelegates.swift */; }; + 7762FEA9B3865378C7A92096577009E5 /* NaturalLanguage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */; }; 7821105EF320619993B3BF7FB90C7ADA /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 783B3E117FED874BD3A8456FF8AA41A5 /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669FBCF95F7506CD004BB09639AC8CF4 /* RDEPUBCFIMarkerInjector.swift */; }; + 786747640B55602D77885D5B3A6F5E03 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */; }; 78D24D82D98D77E744FF73C9040618A8 /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */; }; 792D5CAEC030F37770DFC2DBC1BC3773 /* RDPDFReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943A86A9A49BFCE017A6E927A5227BF2 /* RDPDFReaderPagingController.swift */; }; - 79585A90E8D123CFEEA49D216E027E00 /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C746469E04CD2685727B7CAC5DF72BD /* RDEPUBCFIRange.swift */; }; - 7A14BEF93EBE86A497CA99BB39CCDAC8 /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A2AD9A0A7E27EC46F2AD598250ED2C /* RDEPUBChapterDataCache.swift */; }; + 79E20B3F49DEF332844FD439F1026EE4 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8EF373BBB5C4CCBC5508A277C66DA2 /* RDEPUBParser+Resources.swift */; }; + 7A0D1C65F575B626B24D92A841187495 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */; }; + 7A255B9249FE4C84267820873AC6CE40 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1003FAF53E637D0449A9CC1D883E1F1 /* RDEPUBNavigatorLayoutContext.swift */; }; 7A48CDFB40202EFD09A2A9AB0EE0770D /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AD8C965AACB1343366C029CA39920F1 /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */; }; - 7AF664366D4801DF3F4A8A68357644BB /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */; }; - 7B2DB613A81AF14C101407A4C71D87B8 /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A94C98005A2AE1285F725F27D64D82 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; - 7B328F107199E9130E8E9453B9C19F8F /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */; }; - 7BB6D47E678C847E2599D5A4CE1D17A4 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 920EAB87BCF859EE5CB851833D8C7410 /* RDEPUBSelectionOverlayView.swift */; }; - 7BF87B0A4CAB6F698E7D84E676CFD1B1 /* RDEPUBResourceDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6F004273EE4B1DA2F3B6E496AF475E /* RDEPUBResourceDataProvider.swift */; }; + 7B30FDFEECF4A828890D252C2A5DE4F5 /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD6379B6FF36860C62B38044B24310C8 /* RDEPUBTextPageRenderView.swift */; }; + 7BFF4431124D99872DA99035564A479E /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135A0766D1D454304DFB4E2D541E3883 /* RDEPUBCFIError.swift */; }; 7C05F56B62B15EFF344C5CDE4A52B8FB /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */; }; - 7C31D700E05A097A42458D49D2561DB4 /* RDEpubReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0BE4A0D727AF11C82F9FAD7EAF28AC /* RDEpubReaderFlowLayout.swift */; }; - 7C7998DA70BCD963312E72F3F76EB360 /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = 4DAF2D9747F0021F074180A0C76F0788 /* cssInjector.js */; }; - 7DB3CCA3839351CB377770E5870E69A9 /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70A8F9DB706EC2E2FCFBAD1E695BB805 /* RDEPUBJumpSession.swift */; }; - 7DDDADD3A75BF8651607CB47BA00B647 /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = ADC5802DC43F329301B626F990A0D308 /* wxread-dark.css */; }; - 7F9455A2C1074288090AB69680B596AD /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA811488B6B1DCC5A5F916EF08D7E0E /* RDEPUBChapterRuntimeStore.swift */; }; + 7C074EB51A531B62A6EB9D8B825FFFFA /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C403ABBEA121DBE2FDBC75076F2F6EA /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */; }; + 7CA0156611964C72807860FA6F544D18 /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED638272054208AFD646AF6EB4B4ACAE /* RDEPUBChapterTailNormalizer.swift */; }; + 7CEFDC81E5299572FF92465093A490F8 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E351271D44E8B0D5CF5AC5FC3BB5267 /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7F9CC306B17D409DB903DF850FEDA64C /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */; }; - 80251A1EAF798D1DA0E8B6943015E263 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; + 7FAFC81AEE5E9018A74BB33F71B742CA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */; }; + 80251A1EAF798D1DA0E8B6943015E263 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + 8030A76D8117D9E3811AB6B7D044D4D5 /* RDEPUBTextPageBoundaryValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D91B95C25EE62BB4B1F381EB057E9857 /* RDEPUBTextPageBoundaryValidator.swift */; }; 8099F1E613A15275EF5FC59ED3C73579 /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80C8117B653528732041FB531659CE87 /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2565A3B94D5C14329E580ABC077884 /* RDEPUBPageBreakPolicy.swift */; }; 811D7CBCD710AE45FF80A4B05BFE444C /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FCDFEE3DE4E8469962B9931E7775E8C /* UIFont+DTCoreText.m */; }; 8137EBB59B68FE44A292FAF24DE6DE37 /* RDPDFReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9BFD9290BCB2009DB319A63935EF99 /* RDPDFReaderTheme.swift */; }; 814D0D63E5FD4AB7231E63064FE9EB5C /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = B616B1E339BA326837E6325F3F291E51 /* NSAttributedString+DTDebug.m */; }; - 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80A410954172DEFFD72C06139798345A /* QuartzCore.framework */; }; + 817BD48447F5B765716833E93D1EEE7C /* RDEPUBReaderToolViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1492B4475D97CA7D2A514C6740AC74 /* RDEPUBReaderToolViewProtocols.swift */; }; + 8188B3342AF06DDB51B33015A01A2F40 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */; }; + 81C566F6B24532A292C755DBE663D843 /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A39FFDCEA5A80B1D0BDDCA93EB781EF4 /* RDEPUBReaderChromeCoordinator.swift */; }; + 820BE41FD46A46EFA47DCB51E36B3348 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 82119A0DC4981CC2AF389C7C4CC08186 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E6203B41468A1B8FBBF9CEC0BF15751 /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8258ED3AECC7D666D71A3CDD72336C9A /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0CFBF5E5E5B369336E6E7E8FDCD5F5 /* RDEPUBTextPageRenderView.swift */; }; - 82652769213A4505EB968F508444BFE4 /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65080B22CDF63551E7650AAF4499BDD7 /* RDEPUBTextLayouter.swift */; }; + 8282D8B5123F0C53F433270E96967E74 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF3043DDE18A19F6421EF2CF64139B1 /* RDEPUBPageInteractionController.swift */; }; + 82D616A6A0BDBECCECBF7DEE97439944 /* RDEPUBChapterDisplayContentCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 190346203AD581C70492D0745A6E8803 /* RDEPUBChapterDisplayContentCache.swift */; }; 83A4BC9FE4765C9B848DD4925D99F362 /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83B6B5367E1D465C3E6428BD0B369AD4 /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F805E226F3C1AA7053AA6606DA26CE1 /* RDEPUBFixedLayoutTemplate.swift */; }; - 83D6E7A893C2BA73189B3608E2EC9AC9 /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B57DDE8DD7718C17E02D8B7001DC6F /* RDEPUBTextBookModels.swift */; }; - 84EAE9CFBEAC03E4B95A321E78943365 /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */; }; + 859D2BC60B7EAEFD562E13D22F1D836D /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85FB7A92E7BE58422BBCA8BCC503073F /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */; }; + 863327A5E10B22298BB440E98DE9F15E /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */; }; + 866736EAD1657A677B7CE98A60CC6249 /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134B4A5BAA37EE1E20002904058F91C0 /* RDEPUBMetadataParseWorker.swift */; }; + 86DC330DC883C193E3873FC14C462783 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */; }; 8731E6DFBE1CC958CE8B122D5144B3CC /* RDPDFReaderDrawingToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FC55A17D1CCC4C4BEB88B146B790D8 /* RDPDFReaderDrawingToolbar.swift */; }; - 8877BDF2C129627BE7197343C727EAFA /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A158C1456B0A6C5E3C11F6F598B688D /* RDEPUBReaderController+LocationResolution.swift */; }; - 893B6523077FC73B80174909FA8EC091 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD16456E8ACD41D8A266CD43400B6374 /* RDEPUBReaderPersistence.swift */; }; - 895D1E1E1A62F977D75D4DBB5ABD97E7 /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D597E4B20DB22DA3D2C43EAE0285EFB5 /* RDEPUBCFISerializer.swift */; }; + 878C973814D1C120B7940EA4477AAC7D /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6BB958DEBCC33A50F89F805D087B922 /* RDEPUBWebDecorationOverlayView.swift */; }; + 87E3B89BA351CD67C8DF1798B04D88B3 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */; }; + 884A0E9B795FF7C1A3762AAEEDA0A6B9 /* RDEPUBReaderController+Orientation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10FAAD53D64E9A7F84D322E4DBCD7F4B /* RDEPUBReaderController+Orientation.swift */; }; + 88C129FF0E69C6E384F2779A23C55427 /* RDSpeechReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02108A241C993AAC297AF4F8245FD443 /* RDSpeechReaderContracts.swift */; }; + 890B44E459F47281270749B9556E84AF /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = 4851457CCDD4EA7C57B379138A7478E1 /* cssInjector.js */; }; + 893A917E82D5B3E36C2D32A6A17696BD /* RDAIReaderAssistantViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F5A849E82ECED8710DBA54B127186F /* RDAIReaderAssistantViewController.swift */; }; + 8992C1B0446EC0DE0C94A041BE926FB9 /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2F54C055F942CA37FE44B4E194467D /* RDEPUBPageCountCache.swift */; }; + 89AB5F2CC5F3934CFA317ADB44092BA0 /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B519C702035AA132CC8AFFCF4399C678 /* RDEPUBRuntimeChapter.swift */; }; 8A0A0FB23DB0021ADC9AD0D90631883A /* NSMutableString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 295BCC7FDA963E5D8F53CBF64F08B2B5 /* NSMutableString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8A35CC67F0AA6B26397C10D756EA34E8 /* DTTextHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E6F02F41FDE074ACD5C78DA921EEED /* DTTextHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A61D5BFFF823B2DD5866C79F849A560 /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D6C143C0EAE0DA948204F9912FE193D /* RDEPUBReaderToolView.swift */; }; - 8A9B2F5A2151EE12E662F33343C04458 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8A7D59F186CD4A90AEF425FF382B3F0D /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */; }; + 8AAA54629501B2B15CDAE350BBF0E2CF /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF517630D9C1210CC93BA4C5EDFEC72 /* RDEPUBParser+ReadingProfile.swift */; }; 8AC90941E71199090BCED76DE89EFB60 /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C11AEF7E65FFDA653DFB142C22DEF4 /* DTAttributedTextView.m */; }; + 8B1D67AF4E9CA4C0401395ED3A381816 /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B405CE13E7D718A9340A82B52766AB2 /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B883B75A63415B216F01354B9B4F66D /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */; }; - 8BD97441C51AF5BED8E01766EA2EC609 /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */; }; - 8C358267F5C859D9DC55A46DBBC0F2A8 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C354A6F2AE332B985CDD60E2A98BEF1 /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1865AFCF70C53C253B8F4E01D5F5E61C /* UIColor+RDEPUB.swift */; }; + 8C8B2A92E5D2BFF214F751639F96DF33 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CB0C79D881B535BE9D8EB7FCFC5354E /* RDAISpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AC0D799821BAB2769DC35260D98143 /* RDAISpeechContentProvider.swift */; }; + 8CBD18C38E97757F67620E5EBA85A70F /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */; }; + 8CF42D8E97582A70BEC953567CC62F59 /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 861BA9ED43C06A4CF6845176A27A14E9 /* RDEPUBCFIParser.swift */; }; 8CF55379C440B62AD7DAA78629264DD4 /* RDPDFReaderImageTextLayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48D4FB95327A55188B4EE105C47E7090 /* RDPDFReaderImageTextLayerView.swift */; }; - 8DDCA02D7175B2583E53778A4CD7457E /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CE31AD8934F870E35F7074D1EFDE0 /* RDEPUBTextAnnotationOverlay.swift */; }; - 8E44611C7FC61B0F6B197004149643E9 /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73A8DB7823ED0CC52F6BCB9D87F5D8E9 /* RDEPUBTypesettingPipeline.swift */; }; - 8E63D42E7CE0C90FD93AD0F874DA94BE /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D2724AF90CEEF7E769462932D96037D /* AVFAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFD7E6FDEB959ED4BCBF686887E2BCE4 /* AVFAudio.framework */; }; 8E8726381CBCFB1EDB350183456D4EF7 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */; }; - 8EDFE061B6EADFEFD075D45814490FC8 /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7B65425D5E15E4D005158BE86FAB4EA /* RDEPUBCFIResolver.swift */; }; - 8F12D85AADFB18FDF7A86CE2D1F29821 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */; }; - 8F7CFA48B393899FA35E17A67F683790 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B84C004C6CD0C7094EBA83BF3E42DD0 /* RDEPUBReaderAnnotationCoordinator.swift */; }; + 8F4547B8CE2A89A9EEE45E743F503BDD /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */; }; 906561FBE3727743E5F81F793D5EE210 /* RDPDFReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A746B9DD2EDF2950A3F314EA3D5B2EF5 /* RDPDFReaderContentCell.swift */; }; - 910D5641EF4CF5D2A6F6A36AF50EE25A /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */; }; - 9147F2EC41915FDD83B8C8B44CB7E440 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD629E1D77971203EB1E5EE5C5BA2BAC /* RDEPUBTextRendererSupport.swift */; }; - 91E518F947290E08163684BB1A0AD7BB /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */; }; + 90C1E12EED0B468F95435AE0E7AE8629 /* RDEpubReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D180DE0FA4D342CB14AE055864AD03F0 /* RDEpubReaderView.swift */; }; + 91C03969F93620234EFFD70FD1552288 /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92F0F3ABA13CE7A54A4E4E349805063E /* RDEPUBBackgroundTrace.swift */; }; 91FDA47810CE5CE2C48AED9205AE89B5 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */; }; - 9226F99BDF2BC648729B97FAD08A5F70 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 923F3C01F3A8330053A33F77923983CC /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 289F977B8DD2ABF03CE0CCED0A8F5671 /* RDEPUBWebView+JavaScriptBridge.swift */; }; 92C59F96D443525E8833676479FA60C5 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AEDBB0324469C4ECD8D10A6355A2A09 /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 944C7E54F78139E21144CE503ACBA3EF /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC733B8EFDBB50E364A83D73F03DACB /* RDEPUBCSSCompatibilityLayer.swift */; }; - 94A66BC1215EFE0A73B37A373C0A3281 /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDD0F8FBE7C14A783C94B709F23A4DB /* RDEPUBModels.swift */; }; + 931CA4F727B6DA33D41913BA9D5F9A5A /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC98EFE638423C12303C34B7A44385E2 /* RDEPUBParser+TOC.swift */; }; + 9379A9C9471BD46D7606BC0753579CE3 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04592A413A3E30701E478D8F61806A9C /* RDEPUBSafeArea.swift */; }; + 9478530F48C5EA152B22F8A3E6F5ACE0 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = B48683C68BD7645B716F54066EFA211F /* RDEPUBCFIRecoveryEngine.swift */; }; 94F5846979DBC90E2B646E975F5ECBA8 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 979B6D730AAACF4B9B8331808C40BE90 /* RDEpubReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 35BA5E0859FB7D83208D401FA4126575 /* RDEpubReaderView-dummy.m */; }; - 97EBC8BCC30E3F1E0FAB723C9023353F /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A722D0A8A8664F86E0905654992FA360 /* RDEPUBParser+TOC.swift */; }; - 982A4A2A2E9436CF9C57A3D77ED731A0 /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830CF8D5AB992FBCBD12AEDC987704BF /* RDEPUBCFI.swift */; }; + 960ECB0BE250A067C844D5E8A22372CE /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E017DF266C5A63D2DD360346FD3790 /* RDEPUBChapterOffsetMap.swift */; }; + 96C694AAE72B5B05542CC44D21F53DDD /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08D3259DEB40F1B981CE44EC804D3EAA /* RDEPUBRenderRequest.swift */; }; + 96D5FBBC74098899A127121C91CECDC4 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */; }; + 9717A7F4BC0C90F04397A1361BB7F71C /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = F1162FA50CA992FE5732F460227AB7DF /* wxread-dark.css */; }; + 9845DD8743E768B603FCA5E100022402 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */; }; 9854DC3F1763B6272C2EA3FC6EC40B95 /* NSAttributedStringRunDelegates.h in Headers */ = {isa = PBXBuildFile; fileRef = 60599FA355FBC31A4ED1E2EE5A09A312 /* NSAttributedStringRunDelegates.h */; settings = {ATTRIBUTES = (Public, ); }; }; 987538B07E11741899878EA8BC947F51 /* NSCoder+DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B8CC7968142149B581329E3460D35484 /* NSCoder+DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 988EF04BC3904784A7F4B364AD31A75C /* RDAIReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBD48F4256CF6916C32ACC00CA15E31 /* RDAIReaderContracts.swift */; }; + 98EB67ADA2A245446B8A17B09E031AE1 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9917E9B804CD33AF3BE2A992A3510C97 /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = 175FF6D3C38E463368C8B7AE1AC4E41F /* NSNumber+RomanNumerals.m */; }; + 9928F78ED2A8119FAD85D395D0C14B81 /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE34177DA17E8A2A99610C136D802C2 /* RDEPUBCFIMap.swift */; }; 992B7C8C824B5EA190EF1DB096064DB7 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; 996015E5109268820CBFDBD0374A42FC /* RDPDFReaderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51CF84AF3FB536008E31CBC800E12B8 /* RDPDFReaderContainerView.swift */; }; - 9A100F613599FC91999C704C0A1F1BEC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */; }; - 9A42EACE6319937378BE969B5BE1F89A /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDDBBF79781F69878880132910803DD /* RDEPUBTextSearchEngine.swift */; }; - 9A5DFEC1E2E005ED02C8246C92CB4605 /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6414219D018ADCECF6E5804C284BED7 /* RDEPUBCFIError.swift */; }; 9AC98ED3942DDCC434580B020478CCC1 /* RDPDFReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8451167CAD54879A8C6C68669A8CE1B1 /* RDPDFReaderView+CollectionView.swift */; }; - 9AE7B03D33A2C889C9B0100DD2AA632B /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1DF7A60F88EAB6D70C3170A6F021AA /* RDEPUBImageViewerCoordinator.swift */; }; 9B199D71D2F48B2055A7FDF9BD7051CC /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = 4351507ACB1193D9EA3EDD3DFDDA1AD2 /* NSString+CSS.m */; }; 9BD146F72B29C703798001F138B069C2 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB99CF9B07AE8928ACEE9F5A107809D /* NSCoder+DTCompatibility.m */; }; - 9C05B5CF2598BB4EFA6C8C6881E4E067 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */; }; - 9C6ECACF377F5276D76DB9DC47BC173A /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D11123394F7F2EE6463FE977F3DABD9 /* RDEPUBCoreTextPageFrameFactory.swift */; }; - 9C775820BFD0F84151EE9D1D15AB5C5D /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 127678B93D3CEB6EC2C7F3E5DD81860B /* RDEPUBSearchEngine.swift */; }; - 9D12E0847751CF6ED879D7A2FD0AF7B6 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */; }; - 9D9E6D8A9C102C9767A2778F3F550BCD /* RDEPUBReaderToolViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B363F80F3DBB1AAC48B8524B8025C79 /* RDEPUBReaderToolViewProtocols.swift */; }; + 9CB70FA44A722BEC76EDC4CF9726C4C9 /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CD7653F0EA5B7E1FC6930042F2FC7A /* RDEPUBCFIRange.swift */; }; 9DE04C83A68C7512C0A860FFF5CEC113 /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B8CEFAE5E33709E3C9AABF89FFF29BC /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DE4F6F6DA042A04F698FDCB2ED50500 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A0605D275609C02D0D78521B2B2F2B8 /* RDEPUBTextRendererSupport.swift */; }; 9E4AB71DE8B3E7218B53B2C8EF6B843A /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */; }; - 9EA8EE799B5D9646DF6F68C316710251 /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5495829095E37CEDC515A639F9A9E4 /* RDEPUBReaderContext.swift */; }; - 9FC1AEB682CD309FA7119A1FCCEBB708 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */; }; - A04E8A79293210D73AB60D753F635DD9 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263E2A2BC1CFE65C51095296C21D4EE /* RDEPUBTextRenderer.swift */; }; - A050FD451EB2C853335CA21A1CDAAAB0 /* RDEpubReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0CAA288D149C9793B45AC10F40DABE4 /* RDEpubReaderView.swift */; }; + 9E4E27D244C44F1DEB2792D62E8F8E46 /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804466C635EB4FEF9D6D616165F8B8DC /* RDEPUBSelectionState.swift */; }; + 9EBDC835399A340B1DE8C9448CCB346F /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */; }; + 9FAE69F2812510E0491D9BBB90C353D4 /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2001D46BD05DD1AA90F95E8DA1446665 /* RDEPUBModels.swift */; }; + 9FB5FDCF5ED0E32A4EF28A956D5C0C93 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11499AD1EDDA56EE2CB5CDE6783F3137 /* RDEPUBTextBookBuilder.swift */; }; + 9FB9830AD67375F837C5CF062E5BFB6D /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = CD4C8B83118F25943DE8FBCD85F54B81 /* epub-fixed-layout.html */; }; + 9FF66E7E89669D216788BDA45AF55BD0 /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AE5609FB5D93807FB8ADD05770EBD7 /* RDEPUBReaderTheme.swift */; }; + A075DF2CFDA6B4FC6C13B70594D917EE /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0D6AB59EF663597FBE4549E969593CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; A132A0C9EB13B65FB886B11AA2E6304C /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9D3ED5DA816A72982CEF0FD18986D1 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A15EC52278A2D619B7780AAB8D88554A /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1D8FCF9351374EAEAF9D53603EBEA91 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */; }; + A1BC9E0C0B13C8871A63632290E3FF0E /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */; }; + A213045E1768916C7FFA74CE0B607703 /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674945CC36054ED9B857A60EACE06070 /* RDEPUBCFITextAssertion.swift */; }; + A235834F0BDA4FA924E2AA14523AA54D /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */; }; A2CA9C27EB2B77637A12723F8CFE7AAB /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 84BDFD9872BDDC8D8E292A987C833142 /* NSString+HTML.m */; }; A30D5C1E413A3D319A83D3410A8A549F /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */; }; - A32524C3BBFC8361B5A77404293349A1 /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = 22226730313C0F24542669F12C5C4FB1 /* epub-fixed-layout.html */; }; - A374EB7564B9E0CCEBA566A30C5551BE /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */; }; - A3D4E87CBD4C7BD9F47D0139E550CB3D /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */; }; - A4025F5A563E4B91B2D3468E6E435693 /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB33A3E20E2517AE2775CBBD4FB0642D /* UIColor+RDEPUBHex.swift */; }; - A42CE42ADF162F25E1B2EDE4220B7B51 /* RDSpeechReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D94A0293C1A11AB0BF793F0804AF01BA /* RDSpeechReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A50366094D551204E6CB771F053467AA /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = 20DD66672C9FCA7C604D8034702101EF /* epub-bridge.js */; }; - A59ECA1C79794D157BD9E87DC19F6D36 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3839A199E78DBF80DB5CF945DCE6C62B /* RDEPUBWebView+FixedLayout.swift */; }; - A5A9FE6FB03D2B84F0C684D58DEB1B76 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A9EB086407E39FDB221874CE6CB9DA /* RDEPUBTextBookBuilder.swift */; }; - A6DD3A4EBF6A086D4CA796EB1BB0968B /* RDEpubReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED45EEF428135AE43AF524CE0492924 /* RDEpubReaderTapRegionHandler.swift */; }; - A6FCCA0867D6E90A04127122718A1A13 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C97A2E9C7E5DFF37C06187E6AFBB3CC8 /* RDEPUBRenderDiagnosticsCollector.swift */; }; + A3C9C18C530A61F708AD6860A8CFE46C /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = B90AD4BB9A9DF6CFF6AFAC1BBCB83B53 /* RDEPUBWebViewDebug.swift */; }; + A3CE10E0E0B909782BA6FF7DF4FCF467 /* RDEpubReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 86150AFA30DC7C6F49489D2B96796481 /* RDEpubReaderView-dummy.m */; }; + A3E6088B9121F949F6105C29F2709F5E /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */; }; + A40D3941CD41BE5FB53F24DAA5492872 /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35B1B17E64DD9DBA45117D4952F0F11C /* RDEPUBImageViewerCoordinator.swift */; }; + A45E03A637712DF44230063414AC8AC8 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 901F68C92C3CA04787387C026ECAD9A2 /* RDEPUBRenderDiagnosticsCollector.swift */; }; A72E9F983E5BBFA7485EFB482B80E89E /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A75112BB97D2EFA12C7D55731B839ED5 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01476F47406E7CD8C4420B82B73E642F /* RDEPUBPageLayoutSnapshot.swift */; }; + A7C1F0178293C3939D2B66BDB019F2BE /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD38C69E7CB0517D978AF67828A5D3D5 /* RDEPUBReaderToolView.swift */; }; A7D665BBDADBE3D64023FF52E218FCFA /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */; }; - A8558343E113346EF75EC327987A9B62 /* RDEpubURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A0DEE786314BFAABED15DCE9A483F3 /* RDEpubURLReaderController.swift */; }; - A86F7A86BF53DAFD0D9F40771DE16753 /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */; }; - A871845DAB142E90B72451F579AC8727 /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = F692867A6534E6C9D48E91AB70413D33 /* RDEPUBPresentationRuntime.swift */; }; - A8E71E692C58542B6E2A3DB75B6AE6E3 /* RDEpubReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4323646E9B345F4FADB630E17C777858 /* RDEpubReaderView+ToolView.swift */; }; AA3722CC8B4992EDA8A9F5E9116835B7 /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 031C87137668EBD722F2FAB7A5826060 /* DTCoreText-dummy.m */; }; - AA6A82E91F16300F8B7A4BF71784B911 /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EC7EE7406D5F141BFDB10F21D1B98D8 /* RDEPUBCFIParser.swift */; }; - AB68E2E00AED308DB0BC55025785F887 /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63FD3DEF59551312E8EEB77A7CDEC93A /* RDEPUBReaderViewportMonitor.swift */; }; + AAA2EC8CD4EDF537B897254CD24A9CC7 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */; }; + AACD6869163962229AE357DA85AD6DD9 /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBFC61F3537CBD438016A097E37ACB6B /* RDEPUBReaderState.swift */; }; + AB985A7411525C66F09A2386B75DA422 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */; }; + ABFF2FB0BB8397960B009D0969113CA0 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDAA2C5AF091299DF54A6E16A992BC3 /* RDEPUBSelectionLoupeView.swift */; }; + AC3F3D52752D5E8BFDF2C731F4442871 /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605ED3F23EC7AE0091693431E5AD464A /* RDEPUBImageViewController.swift */; }; AC7000465258822B466855B12F1F97A3 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD31947EF7020717B2FFCB898C31DCAE /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C0E6A164C2508A21E017A697D6A4C80 /* RDEPUBReaderController+ExternalLinks.swift */; }; - AD94FDA8965EA1EBBD5E0438C640409D /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; - ADD97A31560B4C7FF2F82E28BAB7B0F9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - AE74D8EAC25A8CB489174D28E193C232 /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B28B43AB4CD054B30DD8EE676642E70 /* RDEPUBReaderHighlightsViewController.swift */; }; + ACF09FE8BA5ACC0BF4140244B6E8F876 /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0833E375390AEC8213D4AD7574DAFC6 /* RDEPUBReaderTableOfContentsItem.swift */; }; + AD0EAEA87AF94B2516AF25C962B1AB60 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE2B0DBA4EFFB8FC5D49290C93DFCD68 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */; }; + AE6162BF52609870B92F520029FF02D3 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */; }; + AE7AB67AEC31EEC92E61BAE9BE952389 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; AE9C15A64DC56172E16CAAB607A13E00 /* RDPDFReaderSettingsPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B84BFB1ACB4057989E6AE9A039B3AC /* RDPDFReaderSettingsPanelViewController.swift */; }; - AEB35A34B4BD9D563421951F788785DB /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */; }; - AF2BC336DB93234B6189EC2ACC144CAA /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */; }; + AEBB5E7A98408C8A212C07E64A48CE17 /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2C62DAC24CFAC9075940BF8230E8063 /* RDEPUBReaderChapterListController.swift */; }; + AEDF5207E4F50F04EE2175D6491153BB /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; AF7A1DC953992A149CB0815C90769529 /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFEF1073C525D47CB9911E73713176A5 /* RDEPUBReaderController+Trial.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A6E8D84753503A5324211BF6A88E64 /* RDEPUBReaderController+Trial.swift */; }; - B03327FAC1F82FBF4DD1F1863A19C913 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */; }; - B0902747E74CD719F0583F848D5227A6 /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */; }; - B1909D0BE6FF808617D7FABF13F34D42 /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBEC460977B864A29421BD4ACD4849C1 /* RDEPUBCFITextAssertion.swift */; }; + AF81CC94C3E819ABB2B931577F560036 /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F00ED19C7AADAD7D6BD1E74A4A3236C3 /* RDEPUBCFI.swift */; }; + B09E9BB87481F36F1F60C8AB14D8BE22 /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB66CFF964A5BAAE8F874E7FD57B193E /* String+RDEPUB.swift */; }; + B0C0CA37B2606633E435DA11DC3788DF /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */; }; + B1D95DA928A2395DC801F291958ECDBE /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */; }; + B2041370A0FCF1BF2164DBEE8D28C5A9 /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089001022ECC9DB5FD2E0F24D747A427 /* RDEPUBTextSelectionController.swift */; }; + B2166C7F52325B76D2854EBAF3B4A4F9 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; B24FAD34A7915FC4B90FE9038E814FF2 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E757F9EEC3FE914CD8CFDFF7173A5D6E /* DTLazyImageView.m */; }; - B30FE8B7FE2DC01D2A6399BA24B46EE4 /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA44E461F73A280FD2649C38E2A66E15 /* RDEPUBBackgroundTrace.swift */; }; B396528BBA2B2BABAEB8F1D5E2727B32 /* RDPDFReaderView+Paging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B76ED37710AEC809FAF71EC4C1F215 /* RDPDFReaderView+Paging.swift */; }; - B4345AD562848E534F48169C04BFF890 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39D4ED1F553815AA8DA4B6C47C7269B /* RDEPUBCFIDOMPathBuilder.swift */; }; - B45A64277FD61F6FA0AF77DD793158AA /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */; }; B4886245B032CAA636E059E4A829FB6C /* Pods-ReadViewDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B59DC0B1A729CFF0F76C1D4886121338 /* RDEpubReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AD8B4549561584DFE21463CC4045E6 /* RDEpubReaderSpreadResolver.swift */; }; - B5F94F9ACAF7243E67C82FC8B0A3850F /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11B87D1193658365521B72B44502D73 /* RDEPUBSearchModels.swift */; }; - B620DEA7F33E29DE56E1AD5C227D606D /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52E6C5D8864C2E11D3F6143638FFA82 /* RDEPUBRuntimeChapter.swift */; }; + B4F51EC45ADF5136DE6EEE4F8A6C1E48 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + B5925F934F17183F1026FED654CDEA4C /* RDEpubReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5896CC971B79D3B220D73186E99827 /* RDEpubReaderViewProtocols.swift */; }; + B5DF0C6248323B74F6D5896BE99CBC17 /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1099B7E3DBAA419B87F8C2B85489A83 /* RDEPUBReaderLoadCoordinator.swift */; }; + B6030124CAFB157D95FF3246A6FEEF3E /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */; }; B6FA3A9062517BAFEF468F04B78A1F8F /* RDPDFReaderDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16957235ACD001BED6FBC8A1D2CB5BA5 /* RDPDFReaderDebugViewController.swift */; }; - B73FCEC25F0912CEEAE76F34B6E1A5BA /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51DCB48325A7E7DDC907587B7B9425F6 /* RDEPUBResourceResolver.swift */; }; - B76AAD4CE3A876895D22B69BC7D8430C /* RDSpeechReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBAA88C8DBE0129E51AD73F7D1AB4BD /* RDSpeechReaderController.swift */; }; - B76B293E2071B10641153379A411BB3A /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */; }; + B74A957119D813109A40784D5E991EFE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + B777B94871B481D05AA3E0AA2CB24294 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; B7BDD79FC06A1E4E0E17592860844108 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7BEF6F32A272EE8E59CA3074A96269C /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */; }; B8332F36582F7A001FE85A8D54B27C9E /* DTCoreTextParagraphStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 407D64FA06B0D5E2DD9CDBC471AB9195 /* DTCoreTextParagraphStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; B86493B996A888D1DA7814ECB6028E22 /* DTHorizontalRuleHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A21D84422DA0E64EA29D0155532671F /* DTHorizontalRuleHTMLElement.m */; }; - B913466B4CC75BE55777A0FC4A881C5A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - B91EFDBCAF74AED0882D670EF6C244F3 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */; }; B94CD41727DFCA8791EED8FB2CA397DD /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAEA3B45EDDBE2BAB65178B41B93CD1F /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18BA62D664A5A8EED63F1B9AE279B4EB /* RDEPUBChapterSummaryDiskCache.swift */; }; - BB353409E4E12CBD140D8558AFB0AE65 /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 788B69585E28B6A19F3D82E03FB17437 /* RDEPUBTextPositionConverter.swift */; }; - BC07D89F2B6A97B9343F62F6DF8756D6 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */; }; - BDE19A6478FC06A5F965BF6C465C0EE8 /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0744250A850EDAD2D67851F9AE9322C2 /* RDEPUBFragmentMarkerInjector.swift */; }; + B97F73A0D8F0C6865E315DA91AE5613F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + BA277E83BAB0D555D789A029D4514966 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE25EF5F0CDFCDC386BCA80518BBDB4 /* RDEPUBWebView.swift */; }; + BAF2CAF2430C2C71E76D42B72CF59797 /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E3BE0BCB1910EB53E36DDC696E26A0 /* RDEPUBTypesettingPipeline.swift */; }; + BB67A112E6F1254795D78A3839CE4911 /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B217FB058A1AB50A917831C10DB89F57 /* RDEPUBTextLayouter.swift */; }; + BCE13F950003B44D6DE4B0A3D73D4045 /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 105CB7B728D10FAF3A24822B65E01EE2 /* rangy-core.js */; }; + BDC4A815A986D2DA80AFCD9912AFA9F8 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */; }; BE12CD112F82AD9050D7FB29395F27F9 /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 45CF43387529121AEA90666FE86EE96A /* DTVideoTextAttachment.m */; }; - BE529C270CEA2A2C6666E5BC46C50DD3 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */; }; - BF076B89A32E454133942582B00EC922 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF44EE27CAAA95BC66ECC24A572D720E /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = E645DF57426CBB76570142F9D580209F /* wxread-default.css */; }; - BF4D756EA447B0B50D44D42718F26482 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF9032BC8A43F1AA4C4D575BD937115E /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1EA6CBF3E63093C2F930FFB0BD64E79 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */; }; - C3552B6602F4064DAF4C44832B83993D /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2ECAEF31AA6DC14F2C3A19A03F050F /* RDEPUBChapterWarmupOrchestrator.swift */; }; - C3722B9CB3A2CBC3C14B6E289B60C71A /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B255A2C4C31A02ED6FC13D5D2DE27DC /* Vision.framework */; }; - C3D431A2853F6C2BEC1C8AB8468D6E69 /* RDEpubReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = E307745D06FCCA8EE3825E00C050479F /* RDEpubReaderView+ContentAccess.swift */; }; - C43DF680887B38560CA7723511ABFCD6 /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66549A3484418848E50313759E8FCFB /* RDEPUBPaginationCacheCoordinator.swift */; }; - C5743EE91CA41152F4D6D27B0BA51FBB /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1061342BC0338CF0BB657142899D83BA /* RDEPUBReaderState.swift */; }; + BE766E558428E8784BC6512D77BC4808 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */; }; + BEE5024D00596E0DEB17983AFDF66B53 /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC8E6436E1B26640EF09D4ED2B97A71 /* RDEPUBReaderController+RenderSupport.swift */; }; + BF05C079B67F1BB11EE57FC7B4F9123F /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2B377E1647AD43F8B421E099F4DBA0 /* RDEPUBReaderController+AttachmentTooltip.swift */; }; + BFBE84BD4C66951B7C5744FA0EC7CEFF /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3869A8C25816E0E807A4B4362E9FD22 /* RDEPUBTextSearchEngine.swift */; }; + C0AA089CF77046447145E3C317D2233B /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */; }; + C19AA78C33972C5897BA47532A0B189A /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DACBC0641FFC14D7F0309DD76DA75F3 /* RDEPUBCSSCompatibilityLayer.swift */; }; + C1A7E3DD4E0D633E0AF5432F76DF45E5 /* RDReaderDocumentFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BDBCF238B3B355A20BD8C8FA1F4CE77 /* RDReaderDocumentFormat.swift */; }; + C22BD9712D5C4C3A6606C9954E16EA3C /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C24EB1777356C7233A5F03765BCBFA4F /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1062E1B1D8A82FD2C1DD0B34E5D20AA /* RDEPUBTextPageDecorationView.swift */; }; + C28B3C4B424604F1AE9AD3A21DD853C4 /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907F8DF524B0E15F52BF172C447C26E6 /* RDEPUBBackgroundCoverageStore.swift */; }; + C3722B9CB3A2CBC3C14B6E289B60C71A /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC1A75CC4E2F1A706E081BDEDDEECC43 /* Vision.framework */; }; + C3AE32D38A31FDE8F3842C8F37A312E0 /* CryptoKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 638FEA4EDCBFA6A77620B0068D50175C /* CryptoKit.framework */; }; + C41422C964DEAD4BC036630E2CEE8EED /* RDAIAppleFoundationModelsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27F4AF07E5CBA7B0CC54553D55983D1F /* RDAIAppleFoundationModelsProvider.swift */; }; + C4CB63E8E0A5742BA566A3EED0994390 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */; }; + C5AE45CCE89262860C07A4D819F090B4 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */; }; C5EE8E7373FBD24E66C678356393D871 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */; }; - C6089F43887B33500393FA1B1A90467D /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC1A01FE2774E0FA1BCE14C678E8B70E /* CoreImage.framework */; }; - C6A1AF89F95D87FD679366B8A1588D66 /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0F8B1A04DAD3F227758BEB6D5D4D5E9 /* RDEPUBCFIMap.swift */; }; + C6089F43887B33500393FA1B1A90467D /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 443E44FE90506BEC3DFBB838EA344E2B /* CoreImage.framework */; }; C6B65C0EA759DF426FBBBB113BA3C3E8 /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF0985CE02F3B586A1C5DA6503103C3 /* DTBreakHTMLElement.m */; }; C72CE4B974DFAE2C3037D425EB559314 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C77E8D9F72B2D3C068CB5AB850A7B667 /* RDEPUBSpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF5CFD0948675E862FF54F7A5D73412 /* RDEPUBSpeechContentProvider.swift */; }; - C8CF1F5610D78DA49FEB9FB2D5CFA4E2 /* RDEPUBAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F55A232678D2676458E413833B0C17 /* RDEPUBAnnotationEditorViewController.swift */; }; + C78C182488604E401FCF412ECAA918DA /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB49C3B2BFFFC50DADB4C826E51C20 /* RDEPUBReaderContext.swift */; }; + C85C52B080DCDCE11643373A20F761FC /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */; }; C8F753B56A6C4D2A938B6EA68CF522F8 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E247027425CC2ADC73F05F25DC0B857 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C949788FC080B9F92411CBFFD82AEB81 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; - C9A313C280E6F05E82ADF54F90E7264D /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A3FE7990354EF1819DAB32FB09040F /* RDEPUBReaderController+ContentDelegates.swift */; }; - C9CC84E07257BC1CFA58827C18666DEC /* RDSpeechReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02108A241C993AAC297AF4F8245FD443 /* RDSpeechReaderContracts.swift */; }; C9DD05EF2D27FFEBFA7BF6F437168501 /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A7EDC6B8243A9B7E465C24C3E3032923 /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CADC06E386DEE523937B3B0DA5E74700 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */; }; - CB28C33F300061D6B8CC5DEDED5E6E81 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64527A3F0F755D0173A048667A23AEA3 /* RDEPUBAttachmentTooltipOverlayView.swift */; }; - CB436A32456377BFEF92C48A033D00AB /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58293AB5053B6AA340D1D55A7FD0312 /* RDEPUBTextLayoutFrame.swift */; }; - CC311A5C6FD382E2E7B0ACBC160FEBE3 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7DFA2F1E1C67837F7C4B4363EF16949 /* RDEPUBBackgroundPriorityPolicy.swift */; }; - CC4164935D8A9B4D93902AD737DD4BE5 /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F679F301CC740E180D3E0ABA038EF7 /* RDEPUBMetadataParseWorker.swift */; }; + CB7260801E1C1B7B19EB0F046F36C95B /* RDEPUBResourceDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE9799AA807EEB5A537EC921B86BE14 /* RDEPUBResourceDataProvider.swift */; }; + CB7E3F2CFFCA14F52C4E3A0483522387 /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3DF166B97234809502C34352EE581D1 /* RDEPUBReaderBottomToolView.swift */; }; CC8B8F3D758E98B51F69EDFAA69663A4 /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4600C0ADBC3B1B542099C68D747659 /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD8EB96643407FE06E3FEDEE4C9F446A /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132F26882A679D32261325CC0E7B460A /* RDEPUBWebView+Configuration.swift */; }; - CE4B31BC6513E87A9190C954571E385D /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */; }; + CCFBEDA69BB901001DC03CC8C4981B22 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B28F6E48DFAB553BCB9383DC6D19D3 /* RDEPUBWebView+Reflowable.swift */; }; + CF4297F5EFA9541634BEBBA1DF36AECA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 609A5F780ABE1ABCF9F5BB40419E506A /* UIKit.framework */; }; CFC49467FE75BFABC22A1CE2FFA26570 /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */; }; - CFD97B727A0110D104BAA1971D2288E3 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */; }; - D08C9D3BB5023F0BDA105B524C0DC16F /* RDEpubReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6393730DA75DF6B53CCC8AC325591C5D /* RDEpubReaderViewProtocols.swift */; }; - D094FDAFB406B4894DF945B7164E97C1 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */; }; - D0C254514E7704E4B665B5D6A25F16A8 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB559C50CCDA34EDD0525268B980948E /* RDEPUBSafeArea.swift */; }; - D1328689F916D7DE0F2396E2F8973CEC /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = 77CA12D475208B07BC520525A4E79C3C /* wxread-replace.css */; }; + D034FB4FFC72E5FCE665A2549F90EFA3 /* RDEpubReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CF6BE3C26245FDDEB7E60B92C35046 /* RDEpubReaderView+ContentAccess.swift */; }; + D0CBF9AF4D0A627745C22DA6500FE369 /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = BA9DCAAE8105CEA9A378DC9A7282CCBC /* WeReadApi.js */; }; + D0D635F5FE9B28BDA18350507E363E51 /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B4C6FF338A6BCF7DF2A6F071DC960F3 /* RDEPUBTextAnchor.swift */; }; + D11141D3FE5BB9F8EDC8C4CB70560EA6 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */; }; D1A93B2D7F1B312755C48790338D7712 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FB8EF1A1E911A5BA351013BE2BDDA3 /* DTIframeTextAttachment.m */; }; - D1E2B4410F989D0985B80F5E12F992C3 /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F25AA42AB430C73FED1DE82FA2DF2DC /* RDEPUBReaderConfiguration.swift */; }; - D3103B914810482ADEBA5608C1D6FA28 /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 563D7B75744B17E859D3990CEE414AB0 /* RDEPUBStyleCompatibilityModels.swift */; }; + D448FA68DFA59BB641DC224C5EB8BE22 /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3E432595DAC50388DA01BF5E2C0064 /* RDEPUBReaderPaginationCoordinator.swift */; }; D526E03C098DA6CF8F01C1BC126C9BBA /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4200F053D7EE79B56B3A430E865A9051 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5E1FCC5EEF948E3EFDF9F02DAE1E813 /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */; }; - D6EFCA4E1BCB69F129636FF71B81DCD5 /* RDAIAppleFoundationModelsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27F4AF07E5CBA7B0CC54553D55983D1F /* RDAIAppleFoundationModelsProvider.swift */; }; - D78C98D530318FAEB330C8810469F53B /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF4B41DABF7397AEBDB574FEA007451 /* RDEPUBTextPageDecorationView.swift */; }; + D5DD33766EA2B6A0E05D6529E03F0E77 /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62636EDE4CB9821D61448E5C954460F7 /* RDEPUBTextAnnotationOverlay.swift */; }; + D6FAE756D6437B0E2E039471ED84D262 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */; }; + D7021E6EB2D2D58D15CECD47BC9A9819 /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF67542CFE745690B8EBE4830234AF3D /* RDEPUBAssetRepository.swift */; }; + D7893683E3175919960EF304323E7FEA /* RDEPUBMemoryProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B71F5A8A332E260EE37A50AA41BCF2B /* RDEPUBMemoryProbe.swift */; }; D80A0D7409D41B929CB5C5ADB2FA123C /* RDPDFReaderNavigationPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF159AB510600EA0CD9EAE58F29A6582 /* RDPDFReaderNavigationPanelViewController.swift */; }; D82DDA4C1E5C4D5378A9E5EA3F8E9DFE /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D853D2AF4801CB310D34B54E78C308FD /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D50E19F80F64C425AF6E80129D14A85E /* RDEPUBWebView+JavaScriptBridge.swift */; }; + D861D571DFD73726E94AED3755335FA5 /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FDDE36D802AB1EA9041B13BC3EA5A1 /* RDEPUBParser.swift */; }; D8EE68FA80CC14F8DB7B5649BEEEEB6D /* RDPDFReaderImageTextRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4F73DDFA534B5DDC38C9044FF275E0 /* RDPDFReaderImageTextRecognizer.swift */; }; - D9964CE3AF833DAD7B566E45AF472AF7 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C14D80995798D4961531CAAC7AE3D01 /* RDEPUBReaderTopToolView.swift */; }; + D9AE80A302124FDC65DDB8E7589D062C /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */; }; + D9BEF488CA3F83597D75F49FE00A26C5 /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E239C1BEAAAF0774B63520941873BCE /* RDEPUBReadingLocationModels.swift */; }; + D9D5695FC5B0818E6FF40AD81BBDE87D /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; DA5B51E5D80C161D2902B6FC60DA5EC8 /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FECEDE17B4E87274DD2E9EBFD584ABF /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAB89786137F704B7DD8334EF21E58CD /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA7A44DADD3BC84841AE2677DAA3CF22 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */; }; DAD16D3E6EBB32FF96C63BFE6037065F /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 007656EA11E3CE9D116BC39614FACB53 /* DTLinkButton.m */; }; - DADBC15D6C15D83B2106F110DF7B1356 /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADAFB1246D8B4F7930DFDE508B2271A /* RDEPUBChapterCacheKey.swift */; }; - DB2B37770C59463ED4CA22D43CE84A05 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */; }; - DB81526E21D5929E1B1648FE1E0075EE /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */; }; + DB2C355032CF8B09E12091E2B4EDFF02 /* RDAISQLiteIndexStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C637C4B48A62EF0502BDEF1DE9D0E15 /* RDAISQLiteIndexStore.swift */; }; DBCA42F7E1697F4EC82E0E7C9657851D /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC2B47D4298DC02811E3BE2611A252FB /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0C13E7C0313E7DCCB3664ED29BE4B28 /* RDEPUBPageBreakPolicy.swift */; }; DC3E2932A82AD5D88D8B1EFBF004BEC8 /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */; }; - DC9D763A7551AF127712DEE7218EB38A /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908B49F91AB4BAC14DB2AA9E94526D9 /* RDEPUBReaderTableOfContentsItem.swift */; }; - DCD5EFBBA2F0E37E403263F70A6D4D88 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */; }; + DC58520AD1CA9B74B56B5C181D3B0CA3 /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C240F5A5D602DF39562C908A425EDCF3 /* RDEPUBReaderSettings.swift */; }; + DCB762A2263C1E8FC37B8F949926649E /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */; }; DD73CD0E5148961D1ABD80E050122314 /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE6074564E19C27682C74A6C866602C3 /* RDAISpeechContentProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AC0D799821BAB2769DC35260D98143 /* RDAISpeechContentProvider.swift */; }; + DDB428542ACD7BB97C3A248B8B6D70C3 /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE838E20F857F2CC3224F4B11A9399E /* RDEPUBHTMLNormalizer.swift */; }; DE68AD2F426FD462BC70F968E5AF5553 /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */; }; + DED69A917E4E0176A310481FCF01C009 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */; }; DFB5A1C64C7908FD05BEFF7C7B571353 /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F90ED4AECC246EA5CD643490677AA9 /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0DF6958C36F9AC1C6CF5CB0E33EB7C4 /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA82E36367E127E1D5C8F2EDC2F60797 /* RDEPUBChapterLocation.swift */; }; - E19C39D306A49A72BAAB6E8DA92FF005 /* RDEpubReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCBECD199A5AB2E046BC593AC6FE63C7 /* RDEpubReaderGestureController.swift */; }; + E08640A58BF20D612FB475697C49BCC4 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = 6047CC6474064B5DBC63961634438A6B /* epub-bridge.js */; }; + E08646A14732B835E43DC18A168EA094 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */; }; + E1BBC792423CF9FFA5FB02C7B70F5ED6 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */; }; E1DA58105A72D6C0B77A8A9F7822BD68 /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */; }; - E20BB1A8047FC36AD4EC46426BAB5494 /* NaturalLanguage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B46D01D4D15C2295F678A21C84B825ED /* NaturalLanguage.framework */; }; - E2E2499B133E906963BF99672FF269D4 /* RDEPUBReaderController+Orientation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224F6889428B8D51E00F57EB6904B3B1 /* RDEPUBReaderController+Orientation.swift */; }; - E31A025A90465260938C6E05DF15413C /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59DC39EBD2707FF1010387665D60AB01 /* RDEPUBResourceURLSchemeHandler.swift */; }; - E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - E4D14A78B339CD30F305B4DABF0F4F5E /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9D828EF15B8A7E80CA8DA3C770E4D1 /* RDEPUBReaderController+DataSource.swift */; }; - E5A0F5964BBF1D2089B594A33EC559A0 /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DCC402F55D7293EDA440903D400BC /* RDEPUBStyleSheetComposer.swift */; }; - E5F7835B3C29F9A5C5D507D1B4666AF7 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DFD0C2AACBA8A400F346FFA5AAA6C77 /* RDEPUBParser+Resources.swift */; }; + E1F7F3C1DFBC5BE87F455A8B2EF526BC /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BAEE2DC5FDA8BB9EF5C4A5F7488DA75 /* RDEPUBMetadataParseCancellationController.swift */; }; + E227AE6681B28162FBF6964FCA235D91 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */; }; + E22E119D75358EEA1F8898837D400483 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D41D52C7574A8265D75889EDFEA1F938 /* RDEPUBTextRenderer.swift */; }; + E22F7B610DF891EFC7195CC6B7D8FB3B /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D13B77878270A7699E1975EB37F0DD4 /* RDEPUBNoteModels.swift */; }; + E29E2E80F0F968293BE3E37CBC6BB0CB /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B9EC155E4E50C8B0D7C9E946A6EFD6E /* RDEPUBResourceResolver.swift */; }; + E2E4F9574AE38A6F8234918EDB03624A /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B18932E1E3BC841E202595971A30339 /* RDEPUBWebContentView.swift */; }; + E318725DBB931BB68BF243EB2300E3FC /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */; }; + E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + E3C34ADE9B65154958F50C6D75BA77AC /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */; }; + E57A108FD62AEDC26F82FC5A2B8D0744 /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6982A7E6DC4C5C53D2CC2D5811ABD98 /* RDEPUBChapterSummaryDiskCache.swift */; }; E647E758B0AB51A6070EC90FA56356D0 /* RDPDFReaderHighlightOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C9532C775F9C0F2DDE745981A3E5BD2 /* RDPDFReaderHighlightOverlayView.swift */; }; - E78EF60735A6686F6DF424C052875F62 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7D5A732459EEE8E882A91941BA328AE /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */; }; - E87592F84B4E59ED5BD8CBBDF89FE88B /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1B0A108E49438640DBDD0A70FD293A /* RDEPUBParser.swift */; }; + E6F3BD9FCDDF8FBEC32F6BDF22939CC7 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */; }; + E749B52B9E166B85AB0671D9FCFF5D2D /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAFD4EAE169F3144D806A519A51A90CA /* RDEPUBFragmentMarkerInjector.swift */; }; E8AB5CE26A5224EF09E9E363D70C7775 /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */; }; + E8E71B04D02EB95E1663B6B2BF228DA3 /* RDEPUBSettingsFlipAutomation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17D89032AF6902002A2040DA395024B /* RDEPUBSettingsFlipAutomation.swift */; }; + E9468DE68A8609EE6DC056687D9E364B /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858667D975465E160120B5EC556529B8 /* RDEPUBCoreTextPageFrameFactory.swift */; }; EA0040823CCF8E97363DB5891F5DA6D0 /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */; }; - EA390D4166224687AE187999F107C44B /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */; }; - EA4996975C152651AE1A1F33C1B22663 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3FE3107482A464FFADCB685658099F9 /* ImageIO.framework */; }; + EB4853E4669079AB1DB69B5D0C282ED9 /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B72C555923342A6B29E0B34CD71194 /* RDEPUBChapterPageCounter.swift */; }; + EB98CCC346DE7C922EEC196BF6465F86 /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC17DFE7510F72C1BE80E4FB50182687 /* RDEPUBChapterData.swift */; }; EBB7E4D4DB253B5F1267CF9B4DDB4E93 /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 63DC0159C85524BC0348523335677809 /* DTCoreTextFontDescriptor.m */; }; - EC88C9F006E7ADD40849EE093BD1E3FE /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */; }; - ED66F09AF6E592211C9A021A11503721 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECDEFC0141EF16D989D43B83E54A9BD9 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED439C8212BEA9A325731D47E029DB12 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */; }; + ED9E121663FA208E8DF83A62EF140304 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; EDA269B595D70EC2B9D81DC890157D63 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDAD742333B773CB386BBF10BD61842E /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A96DA3DBC26B10F7E433D58D93F480 /* RDEPUBSemanticMarkerInjector.swift */; }; EE4F0992A0F597320FF7BDE4691D0FD4 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A53C3033C8DE1724D37DA6323CF1D7 /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE77D0DB0E8AF90E594D0F6D2089B2AC /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */; }; - EECC41D9B7E2AF7BD1C555674FD9877F /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58ABF7B052C2FEEC1FF9F105FD80470 /* RDEPUBReaderChapterListController.swift */; }; - EECD42D65B2937FE7AE9D633B7DFB154 /* FoundationModels.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17EE920782F4B0CF61192C04ABF5DF6C /* FoundationModels.framework */; }; - EF4A58B335C39B19EF4DFE059345BAA2 /* RDAIReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B094ABE0685E65E249C93BF2B135A9 /* RDAIReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF12622D7366BDBE4CDC8E1AA79096BD /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */; }; + EF2577E6200E94FE255280886820DF36 /* RDEpubReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B430C8DE5FABD8B5265C378F9D6647CB /* RDEpubReaderContentCell.swift */; }; F006F73F17F2E3CC0E7852E9357BA946 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 790E97E55D348C4AAE5B90CE6447CD7E /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0BE35A92217789FADC9601DB0AD1448 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11CB7096E9E4649F50811459D7FBB65C /* RDEPUBResourceURLSchemeHandler.swift */; }; + F0CEFCC3693FD1B1338B24B4157E0A3C /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */; }; F0F631056BADA32253528247DF493272 /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1502BB239BE78912B8EAE1419625EC3 /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62AF8846B36B51075E3D04481932FAB0 /* RDEPUBParser+Archive.swift */; }; - F16A85F5C1C7AB77E3F59A180E4949FD /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = C001AE419BF0DC7FC7836C5BDCD9CF76 /* RDEPUBReaderRuntime.swift */; }; - F289E437878B685F00B6F9EC04194BDD /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42BB280740ACCEAD29B912A1D47F29B /* RDEPUBParser+Package.swift */; }; - F299288008A9203353413B5B32747635 /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510888775BFD893D3C1A93984E31FE11 /* RDEPUBRuntimePageCount.swift */; }; - F32092E04F4488D14BA015CF6AD06155 /* RDAILocatorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90DC3AA09B301621526C8BCC0AD9D9 /* RDAILocatorBuilder.swift */; }; - F393DC307AD6BED2DE8083FF12B8AAE1 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 413CD373B452DEFC31CD6761AF17E8F6 /* RDEPUBFontNormalizer.swift */; }; + F16A27973954A3E61FAD73EFC6640B68 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F192C5927E7BA97C8B5DB00FAB5DC049 /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A13E55782C8624DBE40150164B4EE2E /* RDEPUBReaderLocationCoordinator.swift */; }; + F2A5490C1C2E3E48A18A8FDF25B0B431 /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C6FA1BB01CE3E3BC3877FE7BBA3F90 /* RDEPUBAttachmentTooltipView.swift */; }; + F2B9F986E77500749E2CEB4DEC344F79 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD75EF904CE8308F5AACF1FF146BF1FA /* RDEPUBReaderServices.swift */; }; + F2C88E61F4802BC84DF54D9DBBB2EDC6 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3A71F88272177135CDF5BC18D68134D /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */; }; + F3B627391C748B025311A530BEADD8D8 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; F4A2E3C4237B8931F61B72FF0BDD6D69 /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = FECD0A9F46F7D0CBF7FE9797EA63845E /* DTObjectTextAttachment.m */; }; - F4D8820227694D6D5F09CFA6E1465F87 /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */; }; - F4DA93526D482CD7726856E4C2A2E9AA /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519BA5E115705E308601172F3785D87E /* RDEPUBPaginator.swift */; }; F58ABA106C6200175DF574DF05A75BA8 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F0F2897650299308CB818238165341 /* DTAccessibilityElement.m */; }; + F58C1C3719931E786A62BA0D9AC90306 /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825FBD8AD5EC92AAB0ECEE502EC41F8D /* RDEPUBReaderUIState.swift */; }; F5A424E67F41C4F7B830CE2F7E71570D /* DTCoreText-Resources in Resources */ = {isa = PBXBuildFile; fileRef = F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */; }; F5BEFA1ECA945559A096787DFC7B5A27 /* RDPDFReaderAnnotationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91A6DF5577800E7F0CB647061DB03E5 /* RDPDFReaderAnnotationListViewController.swift */; }; F6036BBDFE7484F5A453F6876C97C098 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 958D7F12C237A34C059F4E43474BDFAF /* NSAttributedString+SmallCaps.m */; }; F61102C9BF3D6296CB6C6B754ABF98C5 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */; }; - F6AFE52A2B53004FFB27B8B3A3030452 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F74BE2C0D8345DF5EDE41CF6141A44BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */; }; - F76246F3FCBCCABA28EF06D3018C610B /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7069C523A7006ED0AA03E0046C2736A /* RDEPUBDTCoreTextRenderer.swift */; }; - F767C2861699E671762169C9F347291C /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137546C9BE2CA543D6BAA25522E046A6 /* RDEPUBHTMLNormalizer.swift */; }; - F7ADD6FA9A99420D022B5DACBCB65BAD /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59EBCDA77446DD33CEECEDE5378967F /* RDEPUBReaderSearchBarView.swift */; }; - F8814DB2E7990E853C29249D4D5EA877 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */; }; - F9028F050CFD6BABF3990E24D06731F1 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */; }; + F6E3A67CA745A6087FFCDBA16B856134 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F74BE2C0D8345DF5EDE41CF6141A44BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */; }; + F94593217EBED39BF620C92D5CFD7942 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF5C216FDF2C515A93C0212E138FFCA3 /* RDEPUBReaderPersistence.swift */; }; F94F155B9E380CCB319468C07B135C97 /* RDPDFReaderDrawingCanvasView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D15E11E01B7F344DD8863CBBC543A77 /* RDPDFReaderDrawingCanvasView.swift */; }; - F9BDB8FBA84964F4DB833D71BAE81634 /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BB480EA8E2ED1FEEC70C334BA00FD5 /* RDEPUBPublication.swift */; }; - F9EFE047E2DE9BDBDE0774A77C6CC3AD /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */; }; - FAF3AF65CC90E56FF4C46FDB9F773017 /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A26CF4FC3A56FE642CDCAE6E644AC27 /* RDEPUBFontFallbackResolver.swift */; }; - FB37977DD4625FAF7CAAE19E9CF13722 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */; }; + F98520F7C30A9EC31303D52A6E11F6BF /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F29D2A4AA92951611BB88CBCEA7D676 /* RDEPUBReaderViewportMonitor.swift */; }; + F9F5A156E4544E2990D63A3E6D21F815 /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7E574ECCBB60402506E409507E684A /* RDEPUBReaderController+PublicAPI.swift */; }; + FA30A0528F3F06269BBAE1DC923C5CED /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */; }; + FA45542C5C51CEDA07BBB673701DB1A7 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */; }; + FB9BF2BD5860E0AE6D47C3B3CB22565B /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */; }; FBC42097F09EB9AD8717663C7CA9FE41 /* RDPDFReaderSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F939D46D9D49EF5FCAFCB16F1E35E23E /* RDPDFReaderSettingsView.swift */; }; - FC0ECDDC20EE8676838BBED649D4EC54 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */; }; + FBD39920E194F6AEFC3FC3FCE30E6C13 /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = F28957D624353D3F5648E30C1747E81A /* RDEPUBReaderController+TableOfContents.swift */; }; + FBE2E40F0FB3043166CC80AE7EE02311 /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A5204B6BF43D97B5BF8D5E2750C169 /* RDEPUBParser+Archive.swift */; }; FC5F52919451A15639442B46B38E4C67 /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = BADC1A043414D84FBAFBF86CAC8F5399 /* DTCoreTextLayoutFrame+Cursor.m */; }; + FC8D9AC0784A89BBB42E3517337FE184 /* RDMOBIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D874813FB2A01B629B5DD27CDA40D744 /* RDMOBIParser.swift */; }; + FCAF77439153D6230723FCB76523E19F /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D0768D8887E50A8240A225874288B0 /* RDEPUBTextBookModels.swift */; }; FD5D68887297CFA94F543C49DC68A156 /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41FD16F0768AA2512812644831FC90CA /* DTHTMLAttributedStringBuilder.m */; }; FDDA135AA139B6C5E93628504593542F /* RDPDFReaderPanelPresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D87DBCF57F23239B520B73B9C238F64 /* RDPDFReaderPanelPresentation.swift */; }; - FE14C52089C6E31DE5070C0BF47C0500 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */; }; + FE0AF1F9056F5F4F381792ABA2FCB0F9 /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743D878AA7644CDEA20992BC2F1B2E1A /* RDEPUBCFISerializer.swift */; }; FEB00C614DCB6A8A7BDF8DEE11260984 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = AABB72617A844FF5405C727A0A23D568 /* NSMutableAttributedString+HTML.m */; }; - FFBF3C8099E65280270A5369095790B2 /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8911E1CAA6638CF6E14939CE71B77C19 /* RDEPUBCFIGenerator.swift */; }; + FEB253C1F43DB49770C020219F0D382C /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FEF842F1CC8FD4321DA162C51B932256 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */; }; + FF506E71078A7E78F593EB9F71FE5A0B /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DB47B6585052E2D965545738AB6126B /* RDEPUBPageResolver.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 11876E077448C6CCB7A570D4369D3BD7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 14272A2E48D9CD26B93FD523A154E373 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - 16082FE383C0CCFFBA096AB8AA84D7C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; - remoteInfo = "SnapKit-SnapKit_Privacy"; - }; - 17C3B49E3B391E5D6ED339176BA6EFB8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - 23CDB939F8EBFEEE0D7CE925D5DDF1C1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - 2CB368EDA06484484C9239CFA8639DD2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - 3197E6921AA84CC1B8C9056142396606 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 36CA89A2E0EBD19706B0CDEC849CA8EF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - 481088C3908A20E60C0BA4FFF4251DD3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - 49127916BC5D5B5142FB676094C70903 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FBCB57A3AEAAA3449B3F365930BC0977; - remoteInfo = RDEpubReaderView; - }; - 50D575B5DAED2FB9BE1C5428C056DDA4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; - remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; - }; - 54C8DAE6D3E517D5EC52DE42098FD67D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E07DDD766DCBF90486BCE6C2EA671E5E; - remoteInfo = "RDEpubReaderView-RDEpubReaderViewAssets"; - }; - 65A1725917E9E5A2B8917B90CECA7448 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 6CC53768D781202C205E9844C7F2D924 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - 7EFD564EA79AAB335CD2CFD94DAB66BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - 974B87AA811E6162BE45E7792A96E30B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; - remoteInfo = RDSpeechReaderView; - }; - A1BCAED813EBD7868EACE64F704FEDFF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; - remoteInfo = "DTCoreText-Resources"; - }; - A5B1A067FDB1F0EB3824BD39DF45BAE5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; - remoteInfo = RDSpeechReaderView; - }; - AB811AE81F514DC81EF4EAEB477D8FC6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; - remoteInfo = RDAIReaderView; - }; - ACB386194F6C01184D3B9EC5867FFBD0 /* PBXContainerItemProxy */ = { + 0323874C0AE84330B0DFE6FBF0EE5CA7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 352EC96AFAEE0EDF74FD76A958827133; remoteInfo = RDPDFReaderView; }; - F577E6647643B09D3AFC9D08E5266A66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - F592612B0B5945374062A600E49D8EF2 /* PBXContainerItemProxy */ = { + 04B6B248841C85F781C9DC9FD2C70198 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; remoteInfo = RDSpeechReaderView; }; + 1296438FCFC4BB8B026E5B13346AA007 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + 15FF4C23FCEC678886F7700DD7174D09 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; + }; + 18FE27B2873AA09802132F3BFAA73B77 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; + remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; + }; + 1F2CB25A693EED699BC4AF34E0A78DCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + 3B28F29AD72E32AE04AE655AF32CE9BB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; + remoteInfo = RDAIReaderView; + }; + 40CA9C1D9FA9CD1BE5571974758DFB60 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; + remoteInfo = RDAIReaderView; + }; + 566B2018B8125F5F086120A0F04E590A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; + remoteInfo = RDSpeechReaderView; + }; + 5BDFB48E45664D19196E404974F8F15C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; + remoteInfo = RDAIReaderView; + }; + 6386FD313A8EFBECF47440ECE9D0E0CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; + 9148121DB7AE39618ECC5EBA0FFCEED3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; + }; + 9CE9E51198F6A77A18CCAB93C5E1773F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E07DDD766DCBF90486BCE6C2EA671E5E; + remoteInfo = "RDEpubReaderView-RDEpubReaderViewAssets"; + }; + 9E4792E9817191C6C8E1B6FDF6AFCB2F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CC23E8498E4F0DDEB3C1A2AA05B8ACF2; + remoteInfo = RDSpeechReaderView; + }; + A7C42C45544A5DA1825833C414C32548 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + AA6E14EAF872040B200515ED3D10A888 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FBCB57A3AEAAA3449B3F365930BC0977; + remoteInfo = RDEpubReaderView; + }; + B05ABEA0D1B0F1400A6616382036F3F8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; + }; + B2338A92D4F809073A0B634D8CDFFF11 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; + remoteInfo = "DTCoreText-Resources"; + }; + D52C274234D28471F70AC5166584D91F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1F1B6899710AE3E4BD213BE01489E557; + remoteInfo = RDAIReaderView; + }; + D600C64030F4EC178AD77DDAAF89C5DA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; + }; + E14CE914506E0DDCA9434F4ACB5C7327 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; + remoteInfo = "SnapKit-SnapKit_Privacy"; + }; + F6B536978A947025AFBAAAF7351DC88E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; 007656EA11E3CE9D116BC39614FACB53 /* DTLinkButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLinkButton.m; path = Core/Source/DTLinkButton.m; sourceTree = ""; }; - 01476F47406E7CD8C4420B82B73E642F /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; - 01BF453B34821E315E0E3B1A1363A538 /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; 01DCD1B42D40839F1C8DBBDB11EF09BA /* RDEpubReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDEpubReaderView; path = RDEpubReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 01E5F8CCBFB0567360782BD2FF0589A9 /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; 02108A241C993AAC297AF4F8245FD443 /* RDSpeechReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechReaderContracts.swift; path = Sources/RDSpeechReaderContracts.swift; sourceTree = ""; }; 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; - 02BE103F11BACB69B3478BA07AE1A2A5 /* RDEpubReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-umbrella.h"; sourceTree = ""; }; 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; sourceTree = ""; }; + 02CD7653F0EA5B7E1FC6930042F2FC7A /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; + 02E5A5D3D109FB88E6EA88F1E2253525 /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; 02F0F2897650299308CB818238165341 /* DTAccessibilityElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityElement.m; path = Core/Source/DTAccessibilityElement.m; sourceTree = ""; }; 031C87137668EBD722F2FAB7A5826060 /* DTCoreText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTCoreText-dummy.m"; sourceTree = ""; }; 034BC384E1BA330755046E5212201E4D /* DTHTMLParserTextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserTextNode.h; path = Core/Source/DTHTMLParserTextNode.h; sourceTree = ""; }; + 036FFBB8F2CD53C655683977792C77E1 /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.release.xcconfig; sourceTree = ""; }; - 03A3F3DC28A03FECBBC8A4FD8E5EBD8B /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; 03D925237ACBF4382D1CF970BC943B0D /* RDSpeechReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDSpeechReaderView.release.xcconfig; sourceTree = ""; }; + 04592A413A3E30701E478D8F61806A9C /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; 045ADBF2087ADD914A9CA0B62EBF2A9F /* Pods-ReadViewDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReadViewDemo.modulemap"; sourceTree = ""; }; 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIPDeprecated.swift"; path = "Sources/ZIPFoundation/FileManager+ZIPDeprecated.swift"; sourceTree = ""; }; + 04D65A018B525BEE5FB0F21896B5A27F /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; 064F689D0045852491C10A092AF5E30D /* RDPDFSpeechSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDPDFSpeechSession.swift; path = Speech/RDPDFSpeechSession.swift; sourceTree = ""; }; - 069D7EE5E989A9F963E518365DDB0301 /* RDEPUBChapterDisplayContentCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDisplayContentCache.swift; sourceTree = ""; }; 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; - 06E8F756DFAEAA9E8FA4B7D472000B2E /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; - 0744250A850EDAD2D67851F9AE9322C2 /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.swift; sourceTree = ""; }; 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; 08203CC2BC14FB8B3BA0CAA3EC92789C /* RDSpeechTextPreprocessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechTextPreprocessor.swift; path = Sources/RDSpeechTextPreprocessor.swift; sourceTree = ""; }; - 089BC1322F491BEB59F94895FDB65109 /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; + 089001022ECC9DB5FD2E0F24D747A427 /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+DTMoving.h"; path = "Core/Source/NSMutableArray+DTMoving.h"; sourceTree = ""; }; - 0A70E0ECB35D874C1E9699C1CD0F6261 /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; + 08D3259DEB40F1B981CE44EC804D3EAA /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; + 08DD1E0E929865962947B62F7DED78F3 /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; + 0AD23766F927150C00F31EF8198B457A /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; - 0C746469E04CD2685727B7CAC5DF72BD /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; + 0B846342956B3700F458ACA24E534E17 /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; + 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 0D15E11E01B7F344DD8863CBBC543A77 /* RDPDFReaderDrawingCanvasView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingCanvasView.swift; sourceTree = ""; }; 0D235D896ED8A7EFDB618AB39D091153 /* ZIPFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZIPFoundation.modulemap; sourceTree = ""; }; 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; - 0E0CFBF5E5E5B369336E6E7E8FDCD5F5 /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; + 0E198715507CC19E698253E47DA96954 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+ZIP.swift"; path = "Sources/ZIPFoundation/URL+ZIP.swift"; sourceTree = ""; }; 0E6203B41468A1B8FBBF9CEC0BF15751 /* DTListItemHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTListItemHTMLElement.h; path = Core/Source/DTListItemHTMLElement.h; sourceTree = ""; }; 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 0EEE779A1CEC15EBD959AE8FB87C5E20 /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.swift; sourceTree = ""; }; + 0EF517630D9C1210CC93BA4C5EDFEC72 /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; + 0F4690DA615CD1FD20F08CD8BB5CD166 /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; - 10207D5C5DF3B33C322957B6325ECA5D /* RDCBZReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDCBZReaderController.swift; sourceTree = ""; }; - 1061342BC0338CF0BB657142899D83BA /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; - 10A21533669EF5F6B433ACF6570084B4 /* RDEpubReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPagingController.swift; sourceTree = ""; }; - 10F7EBC0047B5FAFD86F2BE940E3C100 /* RDEPUBSettingsFlipAutomation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSettingsFlipAutomation.swift; sourceTree = ""; }; - 112BB2DF4A650E511F8E5988973D1199 /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; - 127678B93D3CEB6EC2C7F3E5DD81860B /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; + 105CB7B728D10FAF3A24822B65E01EE2 /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; + 10C60005AD8F659D0476A2D8DCDF0AB7 /* RDEPUBSpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBSpeechContentProvider.swift; path = Speech/RDEPUBSpeechContentProvider.swift; sourceTree = ""; }; + 10FAAD53D64E9A7F84D322E4DBCD7F4B /* RDEPUBReaderController+Orientation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Orientation.swift"; sourceTree = ""; }; + 11499AD1EDDA56EE2CB5CDE6783F3137 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; + 11CB7096E9E4649F50811459D7FBB65C /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; - 132F26882A679D32261325CC0E7B460A /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; - 137546C9BE2CA543D6BAA25522E046A6 /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; + 134B4A5BAA37EE1E20002904058F91C0 /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; + 135A0766D1D454304DFB4E2D541E3883 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; - 13D0BE27CC53417EBD0C5F28F1C54E38 /* RDEpubReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-prefix.pch"; sourceTree = ""; }; 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; + 15C6FA1BB01CE3E3BC3877FE7BBA3F90 /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; 16023686DC389E6755BC79366433C45B /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; 16957235ACD001BED6FBC8A1D2CB5BA5 /* RDPDFReaderDebugViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDebugViewController.swift; sourceTree = ""; }; + 16EA564A15FAF13156B1B63CA898E824 /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; 172C1329A4A6171B18EC5A192815941B /* DTCoreTextLayoutLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutLine.m; path = Core/Source/DTCoreTextLayoutLine.m; sourceTree = ""; }; 175FF6D3C38E463368C8B7AE1AC4E41F /* NSNumber+RomanNumerals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+RomanNumerals.m"; path = "Core/Source/NSNumber+RomanNumerals.m"; sourceTree = ""; }; - 17EE920782F4B0CF61192C04ABF5DF6C /* FoundationModels.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FoundationModels.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/FoundationModels.framework; sourceTree = DEVELOPER_DIR; }; + 176BA6492702B8C8B44BB4838E9BE22E /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; + 1865AFCF70C53C253B8F4E01D5F5E61C /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; 188836BC213C48E6459D098231133246 /* DTDictationPlaceholderTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderTextAttachment.m; path = Core/Source/DTDictationPlaceholderTextAttachment.m; sourceTree = ""; }; 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTiledLayerWithoutFade.m; path = Core/Source/iOS/DTTiledLayerWithoutFade.m; sourceTree = ""; }; 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DTNetworkActivity.h"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.h"; sourceTree = ""; }; - 18BA62D664A5A8EED63F1B9AE279B4EB /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; - 1929AF2396E5AFD5D38E0BA75065368B /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; + 18F8C909773BAAEE76086E976B096FDE /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; + 190346203AD581C70492D0745A6E8803 /* RDEPUBChapterDisplayContentCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDisplayContentCache.swift; sourceTree = ""; }; 1944985A167896CE8F522E61AFC67021 /* ResourceBundle-Resources-DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-DTCoreText-Info.plist"; sourceTree = ""; }; - 1A26CF4FC3A56FE642CDCAE6E644AC27 /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; + 1A0605D275609C02D0D78521B2B2F2B8 /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; 1A4F73DDFA534B5DDC38C9044FF275E0 /* RDPDFReaderImageTextRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextRecognizer.swift; sourceTree = ""; }; - 1AA811488B6B1DCC5A5F916EF08D7E0E /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.release.xcconfig"; sourceTree = ""; }; - 1AE141846409815273DEBF1DF496BBF6 /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; - 1B28B43AB4CD054B30DD8EE676642E70 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; 1C822D376841DA0BA4150A8A8E5B911D /* DTTextAttachmentHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachmentHTMLElement.h; path = Core/Source/DTTextAttachmentHTMLElement.h; sourceTree = ""; }; - 1CF5CFD0948675E862FF54F7A5D73412 /* RDEPUBSpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBSpeechContentProvider.swift; path = Speech/RDEPUBSpeechContentProvider.swift; sourceTree = ""; }; + 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; + 1D13B77878270A7699E1975EB37F0DD4 /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; + 1D945C6720DC6601B9B8FA83EE37E965 /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; + 1DE9799AA807EEB5A537EC921B86BE14 /* RDEPUBResourceDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceDataProvider.swift; sourceTree = ""; }; 1E77200B2588979A91C702B9393646FE /* DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTCoreText-Info.plist"; sourceTree = ""; }; - 1EE7ABC1E00E2AD5CD17521B799DDABF /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; + 1EDC0C56A84DE47A00B353522B7309AE /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; + 2001D46BD05DD1AA90F95E8DA1446665 /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; 2042A956F6ADB5E2CF8DB889FA6F7652 /* RDAIReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDAIReaderView.debug.xcconfig; sourceTree = ""; }; 2047430DF5C84E0A8FC8874A2B915FC3 /* Pods-ReadViewDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReadViewDemo-acknowledgements.markdown"; sourceTree = ""; }; + 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NaturalLanguage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/NaturalLanguage.framework; sourceTree = DEVELOPER_DIR; }; + 20A5204B6BF43D97B5BF8D5E2750C169 /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; - 20DD66672C9FCA7C604D8034702101EF /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; 21A5EB7C80D2F578DE579CA1B20F3CDB /* NSAttributedString+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTDebug.h"; path = "Core/Source/NSAttributedString+DTDebug.h"; sourceTree = ""; }; 21F9B093162E445308F49662C7C35DA6 /* RDSpeechReaderControlView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechReaderControlView.swift; path = Sources/RDSpeechReaderControlView.swift; sourceTree = ""; }; - 22226730313C0F24542669F12C5C4FB1 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; - 224F6889428B8D51E00F57EB6904B3B1 /* RDEPUBReaderController+Orientation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Orientation.swift"; sourceTree = ""; }; 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; - 237DCFF0194564E19C33BED372E1EA72 /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; + 22EC93BBACD9340338C2EA7F06488FF9 /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; + 23711E614B27F6F6EE187EDBFEFAAE38 /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; 23E6F02F41FDE074ACD5C78DA921EEED /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; + 240F52CEA8D1F72985804D9FF38A9DDD /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; + 24CF6BE3C26245FDDEB7E60B92C35046 /* RDEpubReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ContentAccess.swift"; sourceTree = ""; }; + 252792DF6A9EBFA863DC153A59A7C003 /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; + 255FEB02D707D9C56E1D5BBE89A8488B /* RDEpubReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderGestureController.swift; sourceTree = ""; }; + 2715A17C898A6D776882BEBED0FE9695 /* RDEpubReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderFlowLayout.swift; sourceTree = ""; }; + 278B56CFF632EE38795D20993A889459 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.swift; sourceTree = ""; }; + 27A96DA3DBC26B10F7E433D58D93F480 /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; 27F4AF07E5CBA7B0CC54553D55983D1F /* RDAIAppleFoundationModelsProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIAppleFoundationModelsProvider.swift; path = FoundationModels/RDAIAppleFoundationModelsProvider.swift; sourceTree = ""; }; - 2856AF81B14F4FE03A4968F3E239DAD6 /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; - 289F977B8DD2ABF03CE0CCED0A8F5671 /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; - 28B57DDE8DD7718C17E02D8B7001DC6F /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; - 28C6EB4B2B6DC691D28EEBC2BDB4D2F3 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.swift"; sourceTree = ""; }; + 280E073C67E0A1BAF7D84E6DA6FEF2CE /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; 291A21D778336F982A7197655BD501D5 /* RDAIDiagnostics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIDiagnostics.swift; path = Core/RDAIDiagnostics.swift; sourceTree = ""; }; 295BCC7FDA963E5D8F53CBF64F08B2B5 /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; @@ -830,509 +837,502 @@ 299AED4539FF5F16ACFC414AF2BDFCF3 /* RDAIReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDAIReaderView-dummy.m"; sourceTree = ""; }; 29B76ED37710AEC809FAF71EC4C1F215 /* RDPDFReaderView+Paging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+Paging.swift"; sourceTree = ""; }; 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.debug.xcconfig; sourceTree = ""; }; - 2B49BEF738A6B60FB6A64671ACA9091B /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "EPUBCore/Resources/rangy-serializer.js"; sourceTree = ""; }; 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DTFoundation.h"; path = "Core/Source/iOS/UIImage+DTFoundation.h"; sourceTree = ""; }; + 2BDBCF238B3B355A20BD8C8FA1F4CE77 /* RDReaderDocumentFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderDocumentFormat.swift; sourceTree = ""; }; 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; - 2D0BA256721E4BAFE43E91891A606A06 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; + 2E158150F7B2357D4D54239CBD346CE8 /* RDEpubReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPageChildViewController.swift; sourceTree = ""; }; 2FBAA88C8DBE0129E51AD73F7D1AB4BD /* RDSpeechReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDSpeechReaderController.swift; path = Sources/RDSpeechReaderController.swift; sourceTree = ""; }; 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Helpers.swift"; path = "Sources/ZIPFoundation/Archive+Helpers.swift"; sourceTree = ""; }; 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.debug.xcconfig"; sourceTree = ""; }; 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DTNetworkActivity.m"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.m"; sourceTree = ""; }; 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTFoundation.h"; path = "Core/Source/iOS/UIView+DTFoundation.h"; sourceTree = ""; }; - 31802A30449913CF424CD3B666B895CF /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; - 32038A3480CA43711F902B42126D03E6 /* RDEPUBReaderController+PublicAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+PublicAPI.swift"; sourceTree = ""; }; 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFunctions.h; path = Core/Source/DTCoreTextFunctions.h; sourceTree = ""; }; - 3410BDB001A65A79622F3980646A4AAE /* RDEpubReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+CollectionView.swift"; sourceTree = ""; }; + 340ED4F9AD1A9332EABEC511A49FD18A /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; + 344A53B9D93EDE7EB41DEC7D27C8AAF7 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; 34FC1DCF56B5AEFDF71CEC0334776D7A /* RDPDFReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageChildViewController.swift; sourceTree = ""; }; + 35113955C9D390BAC3B55BD96F596650 /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; sourceTree = ""; }; + 351FD88DC68196BACB5E8C369837AF17 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; 352416B880C0869535D5187772C16D21 /* RDPDFReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDPDFReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 35A48CFD97F259DB677ECBF3A5AB8B60 /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; - 35BA5E0859FB7D83208D401FA4126575 /* RDEpubReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDEpubReaderView-dummy.m"; sourceTree = ""; }; - 367C998948D9897CF825A08E51AF013D /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; + 35B1B17E64DD9DBA45117D4952F0F11C /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.swift; sourceTree = ""; }; + 36209CE685AAEF60A5410D7D5EB08EA9 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; + 3784C10C038F42C7074D9B20A81291A4 /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; + 37A4370530967E365499946ECCA13F13 /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; - 3839A199E78DBF80DB5CF945DCE6C62B /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; - 38B47FDF2463F124FDC2B6154F98E987 /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; 39F01D07F324B206706E9809D44643C1 /* NSString+Paragraphs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Paragraphs.m"; path = "Core/Source/NSString+Paragraphs.m"; sourceTree = ""; }; - 3B255A2C4C31A02ED6FC13D5D2DE27DC /* Vision.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vision.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Vision.framework; sourceTree = DEVELOPER_DIR; }; + 3B45E8A61AE0DA23D19F4223E56F5D08 /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; sourceTree = ""; }; 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; - 3C2ECAEF31AA6DC14F2C3A19A03F050F /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; - 3D56EC508FD85074993AAB6580F72631 /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; + 3D5896CC971B79D3B220D73186E99827 /* RDEpubReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderViewProtocols.swift; sourceTree = ""; }; 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; - 3ED45EEF428135AE43AF524CE0492924 /* RDEpubReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderTapRegionHandler.swift; sourceTree = ""; }; + 3DC986A408054D5C173C9528E22F94B5 /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; + 3DE91417CF554D42F4493D636FF1F69C /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; 3EF3AD9CA30968DDCB34B4B8F3477AA8 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 3FCDFEE3DE4E8469962B9931E7775E8C /* UIFont+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+DTCoreText.m"; path = "Core/Source/UIFont+DTCoreText.m"; sourceTree = ""; }; 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.release.xcconfig; sourceTree = ""; }; 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.debug.xcconfig; sourceTree = ""; }; + 400E1D62DDD3EBA94D28BCBAEEB8278D /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; 407D64FA06B0D5E2DD9CDBC471AB9195 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; + 40BCF9C97C17844A974DA454DE537E7D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; - 413CD373B452DEFC31CD6761AF17E8F6 /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.swift; sourceTree = ""; }; + 41842E3F5C4C4B1ACDE3C397F0AE687B /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = ""; }; - 41EC12208AD1A079C60779F6DD30DAC4 /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.swift; sourceTree = ""; }; 41FD16F0768AA2512812644831FC90CA /* DTHTMLAttributedStringBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLAttributedStringBuilder.m; path = Core/Source/DTHTMLAttributedStringBuilder.m; sourceTree = ""; }; 4200F053D7EE79B56B3A430E865A9051 /* DTCoreText-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-umbrella.h"; sourceTree = ""; }; 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; - 430DCC402F55D7293EDA440903D400BC /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; sourceTree = ""; }; - 4323646E9B345F4FADB630E17C777858 /* RDEpubReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ToolView.swift"; sourceTree = ""; }; 4351507ACB1193D9EA3EDD3DFDDA1AD2 /* NSString+CSS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSS.m"; path = "Core/Source/NSString+CSS.m"; sourceTree = ""; }; 4419BC4EF1BB72BD430008215C2194B1 /* RDPDFKitPageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFKitPageProvider.swift; sourceTree = ""; }; + 443E44FE90506BEC3DFBB838EA344E2B /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreImage.framework; sourceTree = DEVELOPER_DIR; }; 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; 44BB65037344EA640BD291D831FE5585 /* RDAIReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDAIReaderView.modulemap; sourceTree = ""; }; - 44F6F4C9B8DC26B67956A489EB5E2E39 /* RDEpubReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPageChildViewController.swift; sourceTree = ""; }; + 44EB3CBD2C1D167AE3BD1AD5A9FE063D /* RDEPUBAIContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBAIContentProvider.swift; path = AI/RDEPUBAIContentProvider.swift; sourceTree = ""; }; 45C11AEF7E65FFDA653DFB142C22DEF4 /* DTAttributedTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextView.m; path = Core/Source/DTAttributedTextView.m; sourceTree = ""; }; 45CF43387529121AEA90666FE86EE96A /* DTVideoTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVideoTextAttachment.m; path = Core/Source/DTVideoTextAttachment.m; sourceTree = ""; }; + 45E017DF266C5A63D2DD360346FD3790 /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; 45F37BFCD74928584B57F92A89DC4573 /* RDAIIndexService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIIndexService.swift; path = Core/RDAIIndexService.swift; sourceTree = ""; }; 4703F3A2832A267D9F6D1EEA83ACB7CC /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; + 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.release.xcconfig; sourceTree = ""; }; 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/ZIPFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; - 485961C2B2BC82A4B098F920F901DE24 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; + 4851457CCDD4EA7C57B379138A7478E1 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZIPFoundation; path = ZIPFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 48D4FB95327A55188B4EE105C47E7090 /* RDPDFReaderImageTextLayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextLayerView.swift; sourceTree = ""; }; - 4914EC4B82CC6AA3736968D86B805228 /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; - 4AF4B41DABF7397AEBDB574FEA007451 /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; + 498E8B4F4F6A151C181647CACD6F76DA /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; + 4A6185F233EFF0ED894B7128B2B09821 /* PDFKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PDFKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/PDFKit.framework; sourceTree = DEVELOPER_DIR; }; + 4AC8E6436E1B26640EF09D4ED2B97A71 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.swift"; sourceTree = ""; }; 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; 4B3397616AD34F6B89948DEBE139C7C5 /* RDPDFReaderNavigationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationView.swift; sourceTree = ""; }; - 4B9D828EF15B8A7E80CA8DA3C770E4D1 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; - 4C19196DA0724F0BF7BAF7DF59C04D8E /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; 4C90DC3AA09B301621526C8BCC0AD9D9 /* RDAILocatorBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAILocatorBuilder.swift; path = Core/RDAILocatorBuilder.swift; sourceTree = ""; }; 4D4600C0ADBC3B1B542099C68D747659 /* NSString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Core/Source/NSString+HTML.h"; sourceTree = ""; }; 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; - 4D6C143C0EAE0DA948204F9912FE193D /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; 4D908F35D94E51D89507601431AC05B9 /* RDAINaturalLanguageAnalyzer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAINaturalLanguageAnalyzer.swift; path = NaturalLanguage/RDAINaturalLanguageAnalyzer.swift; sourceTree = ""; }; - 4DAF2D9747F0021F074180A0C76F0788 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; - 4DFD0C2AACBA8A400F346FFA5AAA6C77 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; - 4EC7EE7406D5F141BFDB10F21D1B98D8 /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.swift; sourceTree = ""; }; - 4F4320A57A5573831CD151F06C5420C5 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; + 4ED5D1D93987D1ECA1C9ACBDDBA99968 /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; + 4F29D2A4AA92951611BB88CBCEA7D676 /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; 4F654C6659A3FDE4C3E08BBDD2C01CCF /* RDPDFReaderViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderViewController.swift; sourceTree = ""; }; 4F9D3ED5DA816A72982CEF0FD18986D1 /* NSDictionary+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTCoreText.h"; path = "Core/Source/NSDictionary+DTCoreText.h"; sourceTree = ""; }; 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+DTCrypto.m"; path = "Core/Source/NSData+DTCrypto.m"; sourceTree = ""; }; 507D9D8B9C2FF474F3C6BE68C6EF6C50 /* RDPDFReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-umbrella.h"; sourceTree = ""; }; 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; - 510888775BFD893D3C1A93984E31FE11 /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.swift; sourceTree = ""; }; - 51339BC494F76D8DB8C1A4968689C617 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; 517D2A78DA380DB287A13785F250D543 /* RDPDFReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.debug.xcconfig; sourceTree = ""; }; - 519BA5E115705E308601172F3785D87E /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; 51CD1050B1BC09EA428919282AA2614D /* DTColor+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTColor+Compatibility.h"; path = "Core/Source/DTColor+Compatibility.h"; sourceTree = ""; }; 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFolderMonitor.h; path = Core/Source/DTFolderMonitor.h; sourceTree = ""; }; - 51DCB48325A7E7DDC907587B7B9425F6 /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; - 52481F3BA048F07B97DAC750A397270E /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; - 5282E8702FED953DC43F2FF5E61290C8 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextBlock.h; path = Core/Source/DTTextBlock.h; sourceTree = ""; }; 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/ZIPFoundation/Entry+Serialization.swift"; sourceTree = ""; }; 54F2C8B38BF0106D946BEE9F7E854D08 /* RDPDFReaderPageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageView.swift; sourceTree = ""; }; 551D98EE6C1653939AE1E3BCBC4ACC2E /* DTImage+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTImage+HTML.h"; path = "Core/Source/DTImage+HTML.h"; sourceTree = ""; }; 55265AB7222E2B20F9B5B320259186BC /* DTCoreTextLayouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayouter.h; path = Core/Source/DTCoreTextLayouter.h; sourceTree = ""; }; - 55ECB9EB83BDA7CDF3E67366AAA25C22 /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; - 5620BF46CC66D177218F95274B0899FD /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; - 563D7B75744B17E859D3990CEE414AB0 /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; 5680AB3CE2258BA50F7E7FA84AA71368 /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; - 574844915C6A0BA87B43940426C8DA96 /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; - 57512CC2A1488E761B4B2A6F02CB55F0 /* RDEPUBDecryptingImageAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDecryptingImageAttachment.swift; sourceTree = ""; }; 57C055B2516B90417D158D4D31CF4A11 /* RDPDFReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-prefix.pch"; sourceTree = ""; }; - 58E942DE9692E29D8CB63A8E7F0E6B2B /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; + 57F27A444B1D85CE9D552F3BE088E5E7 /* RDEPUBAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationEditorViewController.swift; sourceTree = ""; }; + 58557168DB1E78D1B4AF6C29B679CB21 /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "EPUBCore/Resources/rangy-serializer.js"; sourceTree = ""; }; + 5964D41F9024DDA6DA0E1B06D5A628DE /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; 5977986EDFE76D5EF96A6D95483B12F7 /* Pods-ReadViewDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReadViewDemo-frameworks.sh"; sourceTree = ""; }; - 59A6E8D84753503A5324211BF6A88E64 /* RDEPUBReaderController+Trial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Trial.swift"; sourceTree = ""; }; - 59D34C7BD6896EBDB5BAFDCC8F420FB6 /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; - 59D55BC5643EA702EB48D478948DF83E /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.swift; sourceTree = ""; }; - 59DC39EBD2707FF1010387665D60AB01 /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; - 5A2ACEA23FA60F80BDEFD2EC71EB10F4 /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; - 5B786661CF20BBDCE901A8609DACF061 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; - 5D0B6C724E03707E527C7AB3C1214489 /* RDEPUBTextPageBoundaryValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageBoundaryValidator.swift; sourceTree = ""; }; + 5AE838E20F857F2CC3224F4B11A9399E /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; + 5BEA1735DC206814580D0CBDDC031E24 /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; + 5CA21017980D553A4F9BDDF4AA5D7C5A /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; + 5DACBC0641FFC14D7F0309DD76DA75F3 /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; 5E247027425CC2ADC73F05F25DC0B857 /* DTColorFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTColorFunctions.h; path = Core/Source/DTColorFunctions.h; sourceTree = ""; }; 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBlockFunctions.h; path = Core/Source/DTBlockFunctions.h; sourceTree = ""; }; - 5EEE1249C915939654A5609D3CFC2064 /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; + 5F04F9EA650B7E82A6BD7560C308C1F9 /* RDEPUBSpeechSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBSpeechSession.swift; path = Speech/RDEPUBSpeechSession.swift; sourceTree = ""; }; + 5FB8D88DF51900F42796061036A2BC93 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; - 603CE31AD8934F870E35F7074D1EFDE0 /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.swift; sourceTree = ""; }; + 6047CC6474064B5DBC63961634438A6B /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; 60599FA355FBC31A4ED1E2EE5A09A312 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; - 60EC254E73980C2F0AA36B2A4ABA4E04 /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; + 605ED3F23EC7AE0091693431E5AD464A /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; + 609A5F780ABE1ABCF9F5BB40419E506A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 60CEE20803A7C342B83A5972F87CE05F /* RDEpubReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ToolView.swift"; sourceTree = ""; }; 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; - 6245AD148BF98574A18D998B11830A21 /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; - 62AF8846B36B51075E3D04481932FAB0 /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; - 62BAED47209069B1F1E56A1DBC2892B1 /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; + 62636EDE4CB9821D61448E5C954460F7 /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.swift; sourceTree = ""; }; 62F3A858FD7165A3AEBBCA78E105DB73 /* RDAINaturalLanguageSemanticScorer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAINaturalLanguageSemanticScorer.swift; path = NaturalLanguage/RDAINaturalLanguageSemanticScorer.swift; sourceTree = ""; }; - 6393730DA75DF6B53CCC8AC325591C5D /* RDEpubReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderViewProtocols.swift; sourceTree = ""; }; + 6314FB72D26D4408191CE8E9D1E318B1 /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; + 638FEA4EDCBFA6A77620B0068D50175C /* CryptoKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CryptoKit.framework; sourceTree = DEVELOPER_DIR; }; 63A43AFE4C6D7EBA5A25A5B514F473AF /* DTAttributedTextContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextContentView.h; path = Core/Source/DTAttributedTextContentView.h; sourceTree = ""; }; 63DC0159C85524BC0348523335677809 /* DTCoreTextFontDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontDescriptor.m; path = Core/Source/DTCoreTextFontDescriptor.m; sourceTree = ""; }; - 63F79A4C9316E507B47DF63F26FC3263 /* RDEpubReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderContentCell.swift; sourceTree = ""; }; - 63FD3DEF59551312E8EEB77A7CDEC93A /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; - 64527A3F0F755D0173A048667A23AEA3 /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; - 65080B22CDF63551E7650AAF4499BDD7 /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; - 657A0B0DD4402A509DF0BF6AA9360DF5 /* RDMOBIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDMOBIParser.swift; sourceTree = ""; }; + 652FAC593B4120C7C6FB336099192C03 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; - 65F72183F6B8013C5A520595006A2B5F /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; - 669FBCF95F7506CD004BB09639AC8CF4 /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; + 66388B03A7B6CCC521677D01D37D85F9 /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; 66D4CB745F2AE3B89089A68CF287C279 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = ""; }; - 67A9EB086407E39FDB221874CE6CB9DA /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; + 674945CC36054ED9B857A60EACE06070 /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.swift; sourceTree = ""; }; 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/ZIPFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; 67CBB4275FFEB0FDD4DB8C4BB881BDBA /* RDSpeechReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDSpeechReaderView-prefix.pch"; sourceTree = ""; }; 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; - 6975E8E0C8246911E8F8318E762672D9 /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; 6A21D84422DA0E64EA29D0155532671F /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; - 6B75BE4C4CB6B906D8F81B37938F0A46 /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; + 6B18932E1E3BC841E202595971A30339 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; + 6B3E432595DAC50388DA01BF5E2C0064 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; + 6B4C6FF338A6BCF7DF2A6F071DC960F3 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 6B9EC155E4E50C8B0D7C9E946A6EFD6E /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; + 6BA1F24F4DFCDDB93645FFE37C0C68A8 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; 6BE6B072BF746163179BDF80F8CDBE1D /* NSScanner+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+HTML.h"; path = "Core/Source/NSScanner+HTML.h"; sourceTree = ""; }; 6C9532C775F9C0F2DDE745981A3E5BD2 /* RDPDFReaderHighlightOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderHighlightOverlayView.swift; sourceTree = ""; }; 6CB45D03588F166B581A0965E7D18D6A /* RDPDFReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDPDFReaderView-Info.plist"; sourceTree = ""; }; - 6D11123394F7F2EE6463FE977F3DABD9 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.swift; sourceTree = ""; }; 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; sourceTree = ""; }; - 6D3D1B3F2E5D775108B74D6574B91DCE /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAppLinks.m"; path = "Core/Source/iOS/NSURL+DTAppLinks.m"; sourceTree = ""; }; 6DB99CF9B07AE8928ACEE9F5A107809D /* NSCoder+DTCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCoder+DTCompatibility.m"; path = "Core/Source/NSCoder+DTCompatibility.m"; sourceTree = ""; }; 6E56D97F139ADBF3D0E3DD57E5765A5A /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 6E6F004273EE4B1DA2F3B6E496AF475E /* RDEPUBResourceDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceDataProvider.swift; sourceTree = ""; }; 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; 6EDBB29D0A60FEB56FCC489DC10F37BB /* NSDictionary+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTCoreText.m"; path = "Core/Source/NSDictionary+DTCoreText.m"; sourceTree = ""; }; 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; - 6F805E226F3C1AA7053AA6606DA26CE1 /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTImageTextAttachment.m; path = Core/Source/DTImageTextAttachment.m; sourceTree = ""; }; 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; - 70A8F9DB706EC2E2FCFBAD1E695BB805 /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; 712CB0166C21E677902495FEC814327A /* RDAIReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDAIReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 719CCC5081F72A4CF289A77C6A10B8D6 /* RDAIReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDAIReaderView-prefix.pch"; sourceTree = ""; }; - 73A8DB7823ED0CC52F6BCB9D87F5D8E9 /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.swift; sourceTree = ""; }; + 71D0768D8887E50A8240A225874288B0 /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+DTError.h"; path = "Core/Source/NSArray+DTError.h"; sourceTree = ""; }; 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Progress.swift"; path = "Sources/ZIPFoundation/Archive+Progress.swift"; sourceTree = ""; }; + 743D878AA7644CDEA20992BC2F1B2E1A /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTExtendedFileAttributes.m; path = Core/Source/DTExtendedFileAttributes.m; sourceTree = ""; }; 74B2884E9214B5B38193587D773554BA /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.m; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m; sourceTree = ""; }; 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTComparing.h"; path = "Core/Source/NSURL+DTComparing.h"; sourceTree = ""; }; 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; - 75AA5BC3865826B2B32B3305A8CC578B /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; + 752C7424C07641B28AD2F0C06D1629D5 /* RDEpubReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderTapRegionHandler.swift; sourceTree = ""; }; 75F5A849E82ECED8710DBA54B127186F /* RDAIReaderAssistantViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIReaderAssistantViewController.swift; path = UI/RDAIReaderAssistantViewController.swift; sourceTree = ""; }; 75FC55A17D1CCC4C4BEB88B146B790D8 /* RDPDFReaderDrawingToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingToolbar.swift; sourceTree = ""; }; 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; - 76D2244BDA6024551727F35AA3454980 /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; - 7777AD7DDECA33F4050E77507F113B22 /* RDEpubPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubPlainTextBookBuilder.swift; sourceTree = ""; }; - 77CA12D475208B07BC520525A4E79C3C /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; - 788B69585E28B6A19F3D82E03FB17437 /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; 78EA0DF405F8465A86BFD3DDFD2EC295 /* Pods-ReadViewDemo */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-ReadViewDemo"; path = Pods_ReadViewDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 790E97E55D348C4AAE5B90CE6447CD7E /* DTAnchorHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnchorHTMLElement.h; path = Core/Source/DTAnchorHTMLElement.h; sourceTree = ""; }; - 7A158C1456B0A6C5E3C11F6F598B688D /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.swift"; sourceTree = ""; }; - 7A98FCBF217CA913BD506DAEBAE03449 /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; - 7AA4DBF07DDCE87ABC0B78A2FF3FB813 /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; + 7921A77874E3E2E63E378843085CE55F /* RDEpubReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderSpreadResolver.swift; sourceTree = ""; }; + 7A13E55782C8624DBE40150164B4EE2E /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; 7AEDBB0324469C4ECD8D10A6355A2A09 /* DTVideoTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVideoTextAttachment.h; path = Core/Source/DTVideoTextAttachment.h; sourceTree = ""; }; 7B8CEFAE5E33709E3C9AABF89FFF29BC /* DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreText.h; path = Core/Source/DTCoreText.h; sourceTree = ""; }; 7BB20F608D8D3B80F2688014A5F661FC /* DTHTMLWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLWriter.m; path = Core/Source/DTHTMLWriter.m; sourceTree = ""; }; 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSmartPagingScrollView.m; path = Core/Source/iOS/DTSmartPagingScrollView.m; sourceTree = ""; }; 7C5C85EAAD91F1E22CC5986EF9B5D218 /* DTCSSStylesheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSStylesheet.m; path = Core/Source/DTCSSStylesheet.m; sourceTree = ""; }; + 7D14015E61E39CFCDCA7990AD045B00A /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; + 7DB47B6585052E2D965545738AB6126B /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.swift; sourceTree = ""; }; 7DCFEFDD6D693AD5967568E86920AB08 /* DTColor+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTColor+Compatibility.m"; path = "Core/Source/DTColor+Compatibility.m"; sourceTree = ""; }; - 7E8C2259B135B2F86D6250BD6B09178A /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; + 7DF3043DDE18A19F6421EF2CF64139B1 /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; 7E9BFD9290BCB2009DB319A63935EF99 /* RDPDFReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderTheme.swift; sourceTree = ""; }; 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; - 80A410954172DEFFD72C06139798345A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 81120E66C1F56C6F0FAC98FE155554BE /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; + 804466C635EB4FEF9D6D616165F8B8DC /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; 81313A5C1BC97CDA5BE30763C8F014F9 /* RDPDFAIContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDPDFAIContentProvider.swift; path = AI/RDPDFAIContentProvider.swift; sourceTree = ""; }; - 81A94C98005A2AE1285F725F27D64D82 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.swift; sourceTree = ""; }; 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCustomColoredAccessory.h; path = Core/Source/iOS/DTCustomColoredAccessory.h; sourceTree = ""; }; 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; 81FB8EF1A1E911A5BA351013BE2BDDA3 /* DTIframeTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTIframeTextAttachment.m; path = Core/Source/DTIframeTextAttachment.m; sourceTree = ""; }; - 8240722CAA937E143E861EF85889D881 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; - 830CF8D5AB992FBCBD12AEDC987704BF /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.swift; sourceTree = ""; }; + 825FBD8AD5EC92AAB0ECEE502EC41F8D /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.swift; sourceTree = ""; }; + 8271BF8B7810200FA9F29F48A6560327 /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; + 82B72C555923342A6B29E0B34CD71194 /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.swift; sourceTree = ""; }; 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; 8451167CAD54879A8C6C68669A8CE1B1 /* RDPDFReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+CollectionView.swift"; sourceTree = ""; }; 84BDFD9872BDDC8D8E292A987C833142 /* NSString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Core/Source/NSString+HTML.m"; sourceTree = ""; }; 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; + 8568D36432A34FEDE5381E99A8C991F8 /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; 856FED9E82D238C3694CC665594928A4 /* DTFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTFoundation-Info.plist"; sourceTree = ""; }; + 858667D975465E160120B5EC556529B8 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.swift; sourceTree = ""; }; + 86150AFA30DC7C6F49489D2B96796481 /* RDEpubReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDEpubReaderView-dummy.m"; sourceTree = ""; }; + 861BA9ED43C06A4CF6845176A27A14E9 /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.swift; sourceTree = ""; }; 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; - 87855F530B15477A1936F953D0A86A63 /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; sourceTree = ""; }; - 87893187F5137BA27FE812E2F9346B30 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; - 87D001927426A4D5E9E90B7899A00372 /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; + 86EDE1B29348DC15D6122E9FCF98DC42 /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; - 8911E1CAA6638CF6E14939CE71B77C19 /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; + 88C8DF89086D815C51DE683C61FC05D1 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; + 89FC4D22055A02594B80AE3D61169CC1 /* RDEpubReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+PageCurl.swift"; sourceTree = ""; }; 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; + 8A3E297145AF1816CA5C623327CC59B8 /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; 8A41D37F86EFC816F7478316843069DA /* RDPDFZoomablePageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFZoomablePageView.swift; sourceTree = ""; }; 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextCell.m; path = Core/Source/DTAttributedTextCell.m; sourceTree = ""; }; + 8AC4B57FB834CD3FE6380801D726D436 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; 8B35D0622F339A5B8A864FAA0C9EAE47 /* Pods-ReadViewDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-acknowledgements.plist"; sourceTree = ""; }; - 8B363F80F3DBB1AAC48B8524B8025C79 /* RDEPUBReaderToolViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolViewProtocols.swift; sourceTree = ""; }; - 8B5C7E08046DF09C290F5F2222B1E64C /* RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDEpubReaderView-Info.plist"; sourceTree = ""; }; 8B666BD6A6C560D47BBC2E29BAF25836 /* ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; sourceTree = ""; }; - 8B84C004C6CD0C7094EBA83BF3E42DD0 /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; - 8C0E6A164C2508A21E017A697D6A4C80 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; - 8C14D80995798D4961531CAAC7AE3D01 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; - 8C59FCD684EB9341B04A358F9BAF4DC4 /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.swift; sourceTree = ""; }; + 8B71F5A8A332E260EE37A50AA41BCF2B /* RDEPUBMemoryProbe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMemoryProbe.swift; sourceTree = ""; }; + 8B9E332F7EDBC4A91BF0DBB014C44D12 /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; 8C637C4B48A62EF0502BDEF1DE9D0E15 /* RDAISQLiteIndexStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAISQLiteIndexStore.swift; path = Core/RDAISQLiteIndexStore.swift; sourceTree = ""; }; - 8C80B76361E9EE71ACFCB82163017066 /* RDEPUBTextPageVerticalJustifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageVerticalJustifier.swift; sourceTree = ""; }; 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAppLinks.h"; path = "Core/Source/iOS/NSURL+DTAppLinks.h"; sourceTree = ""; }; 8E2E349ABD550C367772430F49937F3B /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; - 8E85471307D55F36163C3495688467A3 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; - 8E937FB7E0D9A3DEF0742A18E455FF54 /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.swift; sourceTree = ""; }; - 8F24C368CBF5CCF60B01598682C6C07F /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; - 920EAB87BCF859EE5CB851833D8C7410 /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; + 8EE34177DA17E8A2A99610C136D802C2 /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; + 8F91B0C7F09F04D73718237F3B40697E /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.swift; sourceTree = ""; }; + 901F68C92C3CA04787387C026ECAD9A2 /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; + 907F8DF524B0E15F52BF172C447C26E6 /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; - 921EA5C03E5608583DE9F4C2FC49704B /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; - 93231E903E802072F56185B464DDFAD4 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; + 9245153495464B8CBAFED3ED68018040 /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; + 92F0F3ABA13CE7A54A4E4E349805063E /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; sourceTree = ""; }; 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; 943A86A9A49BFCE017A6E927A5227BF2 /* RDPDFReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPagingController.swift; sourceTree = ""; }; + 9462F129CC1EF33AAEDFC0F3CD09BD9A /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; + 953E3DE740417FEABC50197EA84D3869 /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; 958D7F12C237A34C059F4E43474BDFAF /* NSAttributedString+SmallCaps.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SmallCaps.m"; path = "Core/Source/NSAttributedString+SmallCaps.m"; sourceTree = ""; }; + 95B28F6E48DFAB553BCB9383DC6D19D3 /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; - 968484A28FBB84723F621DB66ECA3347 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = ""; }; 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileWrapper+DTCopying.h"; path = "Core/Source/NSFileWrapper+DTCopying.h"; sourceTree = ""; }; 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTPieProgressIndicator.m; path = Core/Source/iOS/DTPieProgressIndicator.m; sourceTree = ""; }; 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreGraphicsUtils.m; path = Core/Source/DTCoreGraphicsUtils.m; sourceTree = ""; }; 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 984D5B14277EA4CB70D58019DC0D2E7A /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; + 988C218F8E7B50E498B5A44BFE164678 /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; + 999BDDCF67865CDD1D8FDFDCF47B3BA6 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; 9A2D50243BC80E38A54308D1350127D1 /* RDAIReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDAIReaderView-Info.plist"; sourceTree = ""; }; 9A3467BB5CFDBA4B48A9830D47CED454 /* RDSpeechReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDSpeechReaderView.modulemap; sourceTree = ""; }; 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; + 9BAEE2DC5FDA8BB9EF5C4A5F7488DA75 /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; + 9BB109BD1A878FD38390731ED383EBB8 /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.swift; sourceTree = ""; }; 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; - 9C9E8FA478D23AC4494D5120C081C48B /* CryptoKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CryptoKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CryptoKit.framework; sourceTree = DEVELOPER_DIR; }; 9D87DBCF57F23239B520B73B9C238F64 /* RDPDFReaderPanelPresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPanelPresentation.swift; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DD53D37218AA3C7D5C7756F00FA21E9 /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; - 9E0BE4A0D727AF11C82F9FAD7EAF28AC /* RDEpubReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderFlowLayout.swift; sourceTree = ""; }; + 9E239C1BEAAAF0774B63520941873BCE /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DTFoundation.m"; path = "Core/Source/iOS/UIScreen+DTFoundation.m"; sourceTree = ""; }; 9F02C3AC85C88DDA0DB8A9EECF07DC35 /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; - 9F25AA42AB430C73FED1DE82FA2DF2DC /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; - 9F772869AF68874D248A1C55227A74BB /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; + 9F873050819BDCAA6F32B3166C4ED9C5 /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; 9FD1F6CDF944640D5F1E2A81A5494657 /* DTObjectTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectTextAttachment.h; path = Core/Source/DTObjectTextAttachment.h; sourceTree = ""; }; 9FE24D923BB63C2BD4397C37352A6204 /* NSString+Paragraphs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Paragraphs.h"; path = "Core/Source/NSString+Paragraphs.h"; sourceTree = ""; }; 9FECEDE17B4E87274DD2E9EBFD584ABF /* DTImageTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTImageTextAttachment.h; path = Core/Source/DTImageTextAttachment.h; sourceTree = ""; }; + A04214421115EF7A542C3F3216A318B0 /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; + A141D6AF0DC4700DEB1835448CD930EE /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTFoundation.m"; path = "Core/Source/iOS/UIView+DTFoundation.m"; sourceTree = ""; }; A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; + A367786E9C55FFE1AA25D87507414354 /* RDEpubReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPreloadController.swift; sourceTree = ""; }; A3942F6A75FD45095352344EAEA29F8B /* RDPDFReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.release.xcconfig; sourceTree = ""; }; - A3D8597FAB9BFFF6551C75F9A23E95F1 /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; - A45FEEA048A5AF7D46CAA3CDF72414CA /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; sourceTree = ""; }; + A39FFDCEA5A80B1D0BDDCA93EB781EF4 /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; + A4D5A0A05487585451479D692E07399B /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; A51CF84AF3FB536008E31CBC800E12B8 /* RDPDFReaderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContainerView.swift; sourceTree = ""; }; - A58ABF7B052C2FEEC1FF9F105FD80470 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; - A5F66A96961A944FE192D39888B026E6 /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; - A66549A3484418848E50313759E8FCFB /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; + A533699DEE4985154543EA9F53620DB8 /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUtilities.m"; path = "Core/Source/NSString+DTUtilities.m"; sourceTree = ""; }; A6C3FFDC5714D18BE0534AF20F6C07CA /* RDSpeechReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDSpeechReaderView-dummy.m"; sourceTree = ""; }; - A722D0A8A8664F86E0905654992FA360 /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; + A6FDDE36D802AB1EA9041B13BC3EA5A1 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; A746B9DD2EDF2950A3F314EA3D5B2EF5 /* RDPDFReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContentCell.swift; sourceTree = ""; }; + A7AE5609FB5D93807FB8ADD05770EBD7 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; A7EDC6B8243A9B7E465C24C3E3032923 /* DTCoreTextConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextConstants.h; path = Core/Source/DTCoreTextConstants.h; sourceTree = ""; }; A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; - A83ECB8E69E2047D86F4EA6D987E0B8A /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; - A8A2AD9A0A7E27EC46F2AD598250ED2C /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; sourceTree = ""; }; A8C14962F04ECA1A8B77093B8EF5E23B /* RDPDFReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+ToolView.swift"; sourceTree = ""; }; - A8D7E62479EFF470F47755931FC2BFA4 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; + A9A49256901179CB08DE0A320BF1D7BE /* RDCBZReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDCBZReaderController.swift; sourceTree = ""; }; AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReadViewDemo-dummy.m"; sourceTree = ""; }; AA5EA82ABC61B0B974592D4CA89ACF8C /* ZIPFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-prefix.pch"; sourceTree = ""; }; AABB72617A844FF5405C727A0A23D568 /* NSMutableAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+HTML.m"; path = "Core/Source/NSMutableAttributedString+HTML.m"; sourceTree = ""; }; - AADAFB1246D8B4F7930DFDE508B2271A /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; + AAD65472015B1666F31D1B7722813104 /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.swift"; sourceTree = ""; }; + AAFD4EAE169F3144D806A519A51A90CA /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.swift; sourceTree = ""; }; AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; + AC98EFE638423C12303C34B7A44385E2 /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; ACD3CB33E5A4E915E5F4C09F4684FFF2 /* NSAttributedString+SmallCaps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SmallCaps.h"; path = "Core/Source/NSAttributedString+SmallCaps.h"; sourceTree = ""; }; - ADC5802DC43F329301B626F990A0D308 /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; - AE2565A3B94D5C14329E580ABC077884 /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; - AE29D77AF696BBB755DED2A768C03D64 /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.swift"; sourceTree = ""; }; AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; - AEDD0F8FBE7C14A783C94B709F23A4DB /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; + AEDAA2C5AF091299DF54A6E16A992BC3 /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; + AF5A643FD1163E493C913723C79E6B44 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; + AF76DD862995E6DCA4C9DD1EAD23C6F6 /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; + AFD7E6FDEB959ED4BCBF686887E2BCE4 /* AVFAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFAudio.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AVFAudio.framework; sourceTree = DEVELOPER_DIR; }; AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; B03E48EA4685C3F0EC2C0C5A2714C60F /* RDSpeechReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDSpeechReaderView; path = RDSpeechReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B1A0367B13040EC2A557AA275A2D16D0 /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; + B0833E375390AEC8213D4AD7574DAFC6 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.debug.xcconfig; sourceTree = ""; }; + B217FB058A1AB50A917831C10DB89F57 /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; - B39D4ED1F553815AA8DA4B6C47C7269B /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; + B3DF166B97234809502C34352EE581D1 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; + B430C8DE5FABD8B5265C378F9D6647CB /* RDEpubReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderContentCell.swift; sourceTree = ""; }; B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; - B454B7709E93E1E886E4FA533B06802D /* RDEpubReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+PageCurl.swift"; sourceTree = ""; }; B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; - B46D01D4D15C2295F678A21C84B825ED /* NaturalLanguage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NaturalLanguage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/NaturalLanguage.framework; sourceTree = DEVELOPER_DIR; }; + B48683C68BD7645B716F54066EFA211F /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.swift; sourceTree = ""; }; + B519C702035AA132CC8AFFCF4399C678 /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; - B58293AB5053B6AA340D1D55A7FD0312 /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DTFoundation.m"; path = "Core/Source/iOS/UIImage+DTFoundation.m"; sourceTree = ""; }; B616B1E339BA326837E6325F3F291E51 /* NSAttributedString+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTDebug.m"; path = "Core/Source/NSAttributedString+DTDebug.m"; sourceTree = ""; }; B646DEE91A4E62F132C54E702B8BDF18 /* DTAttributedTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextView.h; path = Core/Source/DTAttributedTextView.h; sourceTree = ""; }; - B662AF2609AEAE5D2B6488E6FBEBDC3B /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; - B6A8CFFD406BC9FB4C712614283CE66C /* RDEpubReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDEpubReaderView.modulemap; sourceTree = ""; }; + B6E3BE0BCB1910EB53E36DDC696E26A0 /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.swift; sourceTree = ""; }; B71BC62246AFEBD517D3175813789310 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; }; B72E60DFC15F208F1BA00518E64F79B5 /* CTLineUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTLineUtils.h; path = Core/Source/CTLineUtils.h; sourceTree = ""; }; + B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; B75141FED04E4EEC380F0173E5DEBCA7 /* RDAIReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDAIReaderView.release.xcconfig; sourceTree = ""; }; + B7A9D2873B8F3EC6F43F7F65854A0341 /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; B85CCDCC8D0342F8925CA9263B57A3AE /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; B8CC7968142149B581329E3460D35484 /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; + B90AD4BB9A9DF6CFF6AFAC1BBCB83B53 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SnapKit-SnapKit_Privacy"; path = SnapKit_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; BA83941397AFE127903C2DA0EE626295 /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; sourceTree = ""; }; + BA8EF373BBB5C4CCBC5508A277C66DA2 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; + BA9DCAAE8105CEA9A378DC9A7282CCBC /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSmartPagingScrollView.h; path = Core/Source/iOS/DTSmartPagingScrollView.h; sourceTree = ""; }; BADC1A043414D84FBAFBF86CAC8F5399 /* DTCoreTextLayoutFrame+Cursor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTCoreTextLayoutFrame+Cursor.m"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.m"; sourceTree = ""; }; + BAE4A81DD559C8DAA24A7E45914AB294 /* RDEpubPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubPlainTextBookBuilder.swift; sourceTree = ""; }; BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextCell.h; path = Core/Source/DTAttributedTextCell.h; sourceTree = ""; }; - BB559C50CCDA34EDD0525268B980948E /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; + BB2B377E1647AD43F8B421E099F4DBA0 /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; BB7C3A637594FCD8D6F09237F5103A39 /* RDPDFReaderChromeViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderChromeViews.swift; sourceTree = ""; }; + BB7C568B890F636C0EFDCC12139EEC9A /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; BBED33030719998F00A5173D3C466BD8 /* RDPDFReaderKitView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderKitView.swift; sourceTree = ""; }; BC0B0BF8324AE3EE918E0885D68E209D /* RDPDFReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDPDFReaderView.modulemap; sourceTree = ""; }; - BC7700A9EB3EB33F6095CC49EA54E6C1 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; BCBD48F4256CF6916C32ACC00CA15E31 /* RDAIReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAIReaderContracts.swift; path = Core/RDAIReaderContracts.swift; sourceTree = ""; }; - BCEC432BB6F19EF8C918567EDAE34801 /* RDEpubReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPreloadController.swift; sourceTree = ""; }; BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; - BD16456E8ACD41D8A266CD43400B6374 /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; - BD629E1D77971203EB1E5EE5C5BA2BAC /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; BD727D8D750906C2FCA03FA988C99329 /* RDAIReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDAIReaderView; path = RDAIReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; sourceTree = ""; }; - BDC92A937FE8D7CA37ED82CCEDBCC6E5 /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTPaths.h"; path = "Core/Source/NSString+DTPaths.h"; sourceTree = ""; }; + BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + BFBB650C069928DBF6A9F7BA0E89A4BA /* RDEpubReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+CollectionView.swift"; sourceTree = ""; }; BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; - C001AE419BF0DC7FC7836C5BDCD9CF76 /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; + C02B75657834185F5471197156446395 /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; sourceTree = ""; }; C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; + C0C13E7C0313E7DCCB3664ED29BE4B28 /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; + C1099B7E3DBAA419B87F8C2B85489A83 /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; + C17C5298DC7291DA6730207C4C66F50D /* RDEpubURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubURLReaderController.swift; sourceTree = ""; }; C1B094ABE0685E65E249C93BF2B135A9 /* RDAIReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDAIReaderView-umbrella.h"; sourceTree = ""; }; - C26B30F895FEA65F0D322407234375F0 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; + C1E22989CFF3153DC1445124C0A538AE /* RDEpubReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDEpubReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + C240F5A5D602DF39562C908A425EDCF3 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; + C34C80F5248BF6ED37B94686518B46EB /* RDEPUBDecryptingImageAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDecryptingImageAttachment.swift; sourceTree = ""; }; C357AC8D7A6E01440AC68979B529B2F7 /* RDSpeechReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDSpeechReaderView.debug.xcconfig; sourceTree = ""; }; - C3D2DECDF3F1951B4030402CDC6F89E8 /* PDFKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PDFKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/PDFKit.framework; sourceTree = DEVELOPER_DIR; }; - C42BB280740ACCEAD29B912A1D47F29B /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; + C3EF41BC74CB0A807D226BA1B6AAE225 /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; + C5A79F4CCFBC9953DB7A8CD52315A738 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; - C6414219D018ADCECF6E5804C284BED7 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; + C72E137C3DFA668BFDC57A4BEC6AE32C /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; + C7C0AB34CD2CE6BAD791E1F6E3D75649 /* RDEPUBTextPageVerticalJustifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageVerticalJustifier.swift; sourceTree = ""; }; C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTURLEncoding.h"; path = "Core/Source/NSString+DTURLEncoding.h"; sourceTree = ""; }; C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; - C8857C84AAC2099B1037C035B8AFF5AF /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - C8A3FE7990354EF1819DAB32FB09040F /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RDEpubReaderView-RDEpubReaderViewAssets"; path = RDEpubReaderViewAssets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachment.h; path = Core/Source/DTTextAttachment.h; sourceTree = ""; }; C91AB03142606446D515451D75613853 /* RDPDFReaderAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationEditorViewController.swift; sourceTree = ""; }; C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; - C97A2E9C7E5DFF37C06187E6AFBB3CC8 /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; - C9B7588747FF74836493105F6698CC00 /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; + C9BB49C3B2BFFFC50DADB4C826E51C20 /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "ZIPFoundation-ZIPFoundation_Privacy"; path = ZIPFoundation_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; - CB33A3E20E2517AE2775CBBD4FB0642D /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/ZIPFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; - CC507AA13E507E6197F6E4B3BB70F899 /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; - CD49AF7F1AEB81E28CF54BDF4BEB7343 /* RDEPUBAIContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDEPUBAIContentProvider.swift; path = AI/RDEPUBAIContentProvider.swift; sourceTree = ""; }; - CD5495829095E37CEDC515A639F9A9E4 /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; + CCAFE75D3171723D3C2F8D6B54F83810 /* RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDEpubReaderView-Info.plist"; sourceTree = ""; }; + CD4C8B83118F25943DE8FBCD85F54B81 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + CD7E574ECCBB60402506E409507E684A /* RDEPUBReaderController+PublicAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+PublicAPI.swift"; sourceTree = ""; }; CDDC623AB1701601A907DA67C2F8F283 /* DTAnchorHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnchorHTMLElement.m; path = Core/Source/DTAnchorHTMLElement.m; sourceTree = ""; }; CE1FA1663AC56607EB2C5556FB73813E /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; CE673C095E86DC64BE73E53BA8C59702 /* RDPDFSpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDPDFSpeechContentProvider.swift; path = Speech/RDPDFSpeechContentProvider.swift; sourceTree = ""; }; - CEDDBBF79781F69878880132910803DD /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; CEFCC148B58604D0C5A3C240C51B45FD /* RDPDFReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDPDFReaderView-dummy.m"; sourceTree = ""; }; CF159AB510600EA0CD9EAE58F29A6582 /* RDPDFReaderNavigationPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationPanelViewController.swift; sourceTree = ""; }; - CF4F453E8FCDC0F85D36928C5390D77A /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; + CF5C216FDF2C515A93C0212E138FFCA3 /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; + CFC58CF344A0B807CF57D0AF2762B169 /* RDEpubReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDEpubReaderView.modulemap; sourceTree = ""; }; CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; - D098B6BDF458996B5B3A757722DF5C3B /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; - D0F55A232678D2676458E413833B0C17 /* RDEPUBAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationEditorViewController.swift; sourceTree = ""; }; + D0EBC152CC752677E2BF9AC52A6BA36E /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; + D1062E1B1D8A82FD2C1DD0B34E5D20AA /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; + D180DE0FA4D342CB14AE055864AD03F0 /* RDEpubReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderView.swift; sourceTree = ""; }; D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTFoundation; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+DTMoving.m"; path = "Core/Source/NSMutableArray+DTMoving.m"; sourceTree = ""; }; + D3046302F1405F10DE953D9BB963E1A8 /* RDEPUBReaderController+Trial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Trial.swift"; sourceTree = ""; }; + D35E3E5D1F0237B862AF1C496338DA61 /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTExtendedFileAttributes.h; path = Core/Source/DTExtendedFileAttributes.h; sourceTree = ""; }; + D3869A8C25816E0E807A4B4362E9FD22 /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.swift; sourceTree = ""; }; D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; - D3FE3107482A464FFADCB685658099F9 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - D475ACC199E6D23FD275CCF5D187243B /* RDEpubReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.debug.xcconfig; sourceTree = ""; }; + D41D52C7574A8265D75889EDFEA1F938 /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; D4A82B2715640986D3701AF889DBD599 /* UIFont+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DTCoreText.h"; path = "Core/Source/UIFont+DTCoreText.h"; sourceTree = ""; }; - D50156C4B53F70228DCAC0501DB9226C /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; - D52E6C5D8864C2E11D3F6143638FFA82 /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; + D50E19F80F64C425AF6E80129D14A85E /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - D597E4B20DB22DA3D2C43EAE0285EFB5 /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; + D6032EC340E3CFAD1A8538662BBFF5BB /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.release.xcconfig; sourceTree = ""; }; D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; + D874813FB2A01B629B5DD27CDA40D744 /* RDMOBIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDMOBIParser.swift; sourceTree = ""; }; D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTCoreText.h"; path = "Core/Source/NSAttributedString+DTCoreText.h"; sourceTree = ""; }; + D91B95C25EE62BB4B1F381EB057E9857 /* RDEPUBTextPageBoundaryValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageBoundaryValidator.swift; sourceTree = ""; }; D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; D94A0293C1A11AB0BF793F0804AF01BA /* RDSpeechReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDSpeechReaderView-umbrella.h"; sourceTree = ""; }; D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; D9B368C95FB7C2727A7CA452242CB904 /* RDPDFReaderPersistenceStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPersistenceStore.swift; sourceTree = ""; }; - DA1B0A108E49438640DBDD0A70FD293A /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; + DA1492B4475D97CA7D2A514C6740AC74 /* RDEPUBReaderToolViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolViewProtocols.swift; sourceTree = ""; }; DA93674B4C34DA54D242189AEEAF99FE /* DTFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTFoundation.modulemap; sourceTree = ""; }; DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+CompressionDeprecated.swift"; path = "Sources/ZIPFoundation/Data+CompressionDeprecated.swift"; sourceTree = ""; }; + DB2F54C055F942CA37FE44B4E194467D /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; + DB469565A1ED216AFEEDC8EAE6EBD11C /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; - DD4C2E0881354D1B1CF3ADF0A8A3E552 /* RDReaderDocumentFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderDocumentFormat.swift; sourceTree = ""; }; + DC17DFE7510F72C1BE80E4FB50182687 /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; + DD2B675FAAF78038DF681753B63E78F6 /* RDEpubReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-umbrella.h"; sourceTree = ""; }; + DD38C69E7CB0517D978AF67828A5D3D5 /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; + DD75EF904CE8308F5AACF1FF146BF1FA /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTURLEncoding.m"; path = "Core/Source/NSString+DTURLEncoding.m"; sourceTree = ""; }; + DF67542CFE745690B8EBE4830234AF3D /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; DFBBED2FC1668912DBF7592720CC14A4 /* RDPDFReaderDrawingLayersView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingLayersView.swift; sourceTree = ""; }; - E0CAA288D149C9793B45AC10F40DABE4 /* RDEpubReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderView.swift; sourceTree = ""; }; - E0F8B1A04DAD3F227758BEB6D5D4D5E9 /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; + E1003FAF53E637D0449A9CC1D883E1F1 /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; + E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.debug.xcconfig; sourceTree = ""; }; E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; - E1BB480EA8E2ED1FEEC70C334BA00FD5 /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+ZIP.swift"; path = "Sources/ZIPFoundation/Date+ZIP.swift"; sourceTree = ""; }; - E263E2A2BC1CFE65C51095296C21D4EE /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; E26546A9CD322544BEF648DFE2B26D7D /* NSCharacterSet+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTML.m"; path = "Core/Source/NSCharacterSet+HTML.m"; sourceTree = ""; }; + E28619FF1699FE5E9E9981D4B9C26E55 /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; - E307745D06FCCA8EE3825E00C050479F /* RDEpubReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ContentAccess.swift"; sourceTree = ""; }; + E3295E071BD0E7D326FF78153BA2B547 /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; E3AC0D799821BAB2769DC35260D98143 /* RDAISpeechContentProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RDAISpeechContentProvider.swift; path = AIBridge/RDAISpeechContentProvider.swift; sourceTree = ""; }; - E47128B5AD65D4FA9BA728CDF73C47E5 /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; - E645DF57426CBB76570142F9D580209F /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/ZIPFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; + E6982A7E6DC4C5C53D2CC2D5811ABD98 /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; E7112D0C2BB66532AB032E85DB736D16 /* RDSpeechReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDSpeechReaderView-Info.plist"; sourceTree = ""; }; E757F9EEC3FE914CD8CFDFF7173A5D6E /* DTLazyImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLazyImageView.m; path = Core/Source/DTLazyImageView.m; sourceTree = ""; }; E7890CD33BD10753D1D971AD2FE20A74 /* DTLinkButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLinkButton.h; path = Core/Source/DTLinkButton.h; sourceTree = ""; }; - E7B65425D5E15E4D005158BE86FAB4EA /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; - E908B49F91AB4BAC14DB2AA9E94526D9 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; + E8DB205FB6149A977447BDB109A35B2E /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; sourceTree = ""; }; E91A6DF5577800E7F0CB647061DB03E5 /* RDPDFReaderAnnotationListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationListViewController.swift; sourceTree = ""; }; E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - E9A0DEE786314BFAABED15DCE9A483F3 /* RDEpubURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubURLReaderController.swift; sourceTree = ""; }; - EA44E461F73A280FD2649C38E2A66E15 /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; sourceTree = ""; }; - EA573F944A7ECEBBA9EC81D72F804D7E /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; - EA82E36367E127E1D5C8F2EDC2F60797 /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; + EA0835A36D971DBF49B21DC08AF857E4 /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; + EB66CFF964A5BAAE8F874E7FD57B193E /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReadViewDemo-umbrella.h"; sourceTree = ""; }; - EBAF09D94C8796C21CF84B062626E152 /* RDEpubReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.release.xcconfig; sourceTree = ""; }; EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; - EBEC460977B864A29421BD4ACD4849C1 /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.swift; sourceTree = ""; }; + EBFC61F3537CBD438016A097E37ACB6B /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; + ED638272054208AFD646AF6EB4B4ACAE /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.swift; sourceTree = ""; }; EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTCoreText; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EDD3DE7C60EC3C4BE3D7A2DEFA78EC2D /* RDEpubReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-prefix.pch"; sourceTree = ""; }; EE10390ED67255ABE5E4D1A1B1EF07F5 /* RDPDFReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDPDFReaderView; path = RDPDFReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EE1DF7A60F88EAB6D70C3170A6F021AA /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.swift; sourceTree = ""; }; + EE2FF626D776A0880B86E92EC160BA17 /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; EE4506392D83069D836221FAB813E8D6 /* DTCoreText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-prefix.pch"; sourceTree = ""; }; - EE5C053C6616645F9162F47DB3102BE3 /* RDEpubReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDEpubReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - EEC733B8EFDBB50E364A83D73F03DACB /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; EEF0985CE02F3B586A1C5DA6503103C3 /* DTBreakHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBreakHTMLElement.m; path = Core/Source/DTBreakHTMLElement.m; sourceTree = ""; }; EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTComparing.m"; path = "Core/Source/NSURL+DTComparing.m"; sourceTree = ""; }; + F00ED19C7AADAD7D6BD1E74A4A3236C3 /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.swift; sourceTree = ""; }; F01A20D999E550EFA3C472C3A20E6A90 /* RDPDFReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContracts.swift; sourceTree = ""; }; - F0AD8B4549561584DFE21463CC4045E6 /* RDEpubReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderSpreadResolver.swift; sourceTree = ""; }; + F0D4CF44D919376D1696CC0827A6D4D9 /* RDEpubReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPagingController.swift; sourceTree = ""; }; F0D5A0F7E62D88B94912634DC9AD339D /* DTCoreTextLayouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayouter.m; path = Core/Source/DTCoreTextLayouter.m; sourceTree = ""; }; F0F90ED4AECC246EA5CD643490677AA9 /* DTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedLabel.h; path = Core/Source/DTAttributedLabel.h; sourceTree = ""; }; - F11B87D1193658365521B72B44502D73 /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; + F1162FA50CA992FE5732F460227AB7DF /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; + F17D89032AF6902002A2040DA395024B /* RDEPUBSettingsFlipAutomation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSettingsFlipAutomation.swift; sourceTree = ""; }; F1B84BFB1ACB4057989E6AE9A039B3AC /* RDPDFReaderSettingsPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsPanelViewController.swift; sourceTree = ""; }; F2176E21CE60C17099C4437D1566786C /* RDSpeechReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDSpeechReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + F2212BCD78FFC35A46929B1C86B16DBC /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; + F28957D624353D3F5648E30C1747E81A /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.swift"; sourceTree = ""; }; + F2C62DAC24CFAC9075940BF8230E8063 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; - F4081F7CA1FC93EE97276F3D05A333ED /* AVFAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFAudio.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AVFAudio.framework; sourceTree = DEVELOPER_DIR; }; F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; + F43D341014C0A3261943902F0C6D7A47 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTFormatNumbers.h"; path = "Core/Source/NSString+DTFormatNumbers.h"; sourceTree = ""; }; F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "DTCoreText-Resources"; path = Resources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - F59EBCDA77446DD33CEECEDE5378967F /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; F5A53C3033C8DE1724D37DA6323CF1D7 /* NSString+CSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSS.h"; path = "Core/Source/NSString+CSS.h"; sourceTree = ""; }; - F5F6803E56DE9E7EA1CCF0388E607674 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; + F606B8AFFB6486EF76BF7118C0D2BBEF /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; - F65A581119EB07B606117CEBB02F900F /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; - F692867A6534E6C9D48E91AB70413D33 /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; - F7069C523A7006ED0AA03E0046C2736A /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; + F6BB958DEBCC33A50F89F805D087B922 /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; + F74C359E556A8876EF09A01201FB0403 /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; - F7CB58976A61DDAE85B44D4B6CB30A02 /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; - F7DFA2F1E1C67837F7C4B4363EF16949 /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; - F7F679F301CC740E180D3E0ABA038EF7 /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; - F8233CAA669CAC56C7B0EEE700B53A23 /* RDEPUBMemoryProbe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMemoryProbe.swift; sourceTree = ""; }; F8569A5FF03BA54C0F4080D3EE5539D5 /* NSNumber+RomanNumerals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+RomanNumerals.h"; path = "Core/Source/NSNumber+RomanNumerals.h"; sourceTree = ""; }; F8F398A3D1144707216F9A20BEDF911E /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; F939D46D9D49EF5FCAFCB16F1E35E23E /* RDPDFReaderSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsView.swift; sourceTree = ""; }; F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTiledLayerWithoutFade.h; path = Core/Source/iOS/DTTiledLayerWithoutFade.h; sourceTree = ""; }; F9C4993C8ED63C0215BEC38128F6EC5D /* ZIPFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZIPFoundation-Info.plist"; sourceTree = ""; }; - FA2A95481CF034C4689E42B263042872 /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; - FC1A01FE2774E0FA1BCE14C678E8B70E /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreImage.framework; sourceTree = DEVELOPER_DIR; }; + FBE25EF5F0CDFCDC386BCA80518BBDB4 /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; + FC1A75CC4E2F1A706E081BDEDDEECC43 /* Vision.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vision.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Vision.framework; sourceTree = DEVELOPER_DIR; }; FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; - FCBECD199A5AB2E046BC593AC6FE63C7 /* RDEpubReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderGestureController.swift; sourceTree = ""; }; + FD6379B6FF36860C62B38044B24310C8 /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; sourceTree = ""; }; + FE50EC81EDB03616225DAB735C90CFAD /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFoundationConstants.m; path = Core/Source/DTFoundationConstants.m; sourceTree = ""; }; FEA9F91758013B23B0EEA71DA22E7475 /* Pods-ReadViewDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-Info.plist"; sourceTree = ""; }; FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTUnshorten.m"; path = "Core/Source/NSURL+DTUnshorten.m"; sourceTree = ""; }; FECD0A9F46F7D0CBF7FE9797EA63845E /* DTObjectTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectTextAttachment.m; path = Core/Source/DTObjectTextAttachment.m; sourceTree = ""; }; - FF4F4DF69DE3402A658BF53389C1E29F /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; + FEEC0D985E61911DD98BBA2737107E1C /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Deprecated.swift"; path = "Sources/ZIPFoundation/Archive+Deprecated.swift"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -1345,25 +1345,36 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 258A70A95FD06C42A74DA2A5E7D0DADD /* Frameworks */ = { + 1F7EF4E26D92CE93E8A9095F2249D759 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 26559404D2377015324B9F6CF2335247 /* Frameworks */ = { + 3391796EF339E0AEC7120220AC387870 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B4F51EC45ADF5136DE6EEE4F8A6C1E48 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 60EDC33B688AC55B5698518B2AD0DB0D /* Frameworks */ = { + 5EEBA8E20E44CA19A794938A2381523B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4371AF1A25318F3F3797741057CD23FF /* Foundation.framework in Frameworks */, + 4072AA6607B72436AD2E6AE3FFADAC89 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 65386CE6376B0C3297DCF6B31658D126 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B74A957119D813109A40784D5E991EFE /* Foundation.framework in Frameworks */, + 182A511334D40CCC49EE48A1BCF23853 /* ImageIO.framework in Frameworks */, + 7FAFC81AEE5E9018A74BB33F71B742CA /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1380,35 +1391,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 838BAC16F8EB3094BE7BC270BBFA1DE1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 6E5DFE7C1EEB11AD1986C41B2FFBCE65 /* Foundation.framework in Frameworks */, - EA4996975C152651AE1A1F33C1B22663 /* ImageIO.framework in Frameworks */, - 337FEBAB6EC0B4E4C7C3F83B1A74F290 /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8C8F2B1F5A2E36E3AE95EAEAAE03F780 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 01E94FCF0AC80F5B5B3D6B7D7551F2D2 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AD01177C0DB22F1BCA0F7F6A96C00062 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 65E553FCED2BBA7B9B15A94AB3B50098 /* AVFAudio.framework in Frameworks */, - B913466B4CC75BE55777A0FC4A881C5A /* Foundation.framework in Frameworks */, - 5957FC1D1BA1EFB4BECB72F04EE3CD55 /* MediaPlayer.framework in Frameworks */, - 291EC7B4A19AC0C5068EA15FEA02E358 /* NaturalLanguage.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; B3344B1196C556EC6C893EF8620F9CC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1420,40 +1402,57 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CD7FBA45DB00ADF722E01E0AE3779E02 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 08DD8BC85A59A1552E0BF4FB6B6CFD80 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E1DF268260BBDB79581F1102271D0AE4 /* Frameworks */ = { + B44B7AA9530B98040DD47CBDA92139EA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - EBBF08881D4C8BD2BF8B87ED2DFA511B /* Frameworks */ = { + BFB3736B95B19241674697B82F71A24F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2F1FA27C68F3FF94F477C89F92BE0871 /* CryptoKit.framework in Frameworks */, - ADD97A31560B4C7FF2F82E28BAB7B0F9 /* Foundation.framework in Frameworks */, - EECD42D65B2937FE7AE9D633B7DFB154 /* FoundationModels.framework in Frameworks */, - E20BB1A8047FC36AD4EC46426BAB5494 /* NaturalLanguage.framework in Frameworks */, - 127914591EE3F5145BC14A25A0A57D08 /* UIKit.framework in Frameworks */, + 71418DB3666321E61DCCEB3283249368 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F695CAAA20414789F09BB8CC4D5DABE4 /* Frameworks */ = { + C9EC9582E359734B524E8B4D9A1F2BDC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + E5E3B4295E71D5850733F3571A6D139C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D2724AF90CEEF7E769462932D96037D /* AVFAudio.framework in Frameworks */, + B97F73A0D8F0C6865E315DA91AE5613F /* Foundation.framework in Frameworks */, + 09BAC6DCE171C42332F021EF1315F15F /* MediaPlayer.framework in Frameworks */, + 34A50CCAB9D9D2DB6C6E2568A4E8D047 /* NaturalLanguage.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9B4D1354C134B52E8C87C971743C7CE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FAAA7EB0241A5F47FCDCE80019C03BE1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C3AE32D38A31FDE8F3842C8F37A312E0 /* CryptoKit.framework in Frameworks */, + A0D6AB59EF663597FBE4549E969593CB /* Foundation.framework in Frameworks */, + 7762FEA9B3865378C7A92096577009E5 /* NaturalLanguage.framework in Frameworks */, + CF4297F5EFA9541634BEBBA1DF36AECA /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -1465,45 +1464,15 @@ name = Resources; sourceTree = ""; }; - 0480A1B39E951F8E5171145FC19BE283 /* Typesetter */ = { + 0B1D2560BC0864A57D00D0163A728746 /* Models */ = { isa = PBXGroup; children = ( - 60EC254E73980C2F0AA36B2A4ABA4E04 /* RDEPUBAttachmentNormalizer.swift */, - 669FBCF95F7506CD004BB09639AC8CF4 /* RDEPUBCFIMarkerInjector.swift */, - 57512CC2A1488E761B4B2A6F02CB55F0 /* RDEPUBDecryptingImageAttachment.swift */, - 413CD373B452DEFC31CD6761AF17E8F6 /* RDEPUBFontNormalizer.swift */, - 0744250A850EDAD2D67851F9AE9322C2 /* RDEPUBFragmentMarkerInjector.swift */, - 137546C9BE2CA543D6BAA25522E046A6 /* RDEPUBHTMLNormalizer.swift */, - C97A2E9C7E5DFF37C06187E6AFBB3CC8 /* RDEPUBRenderDiagnosticsCollector.swift */, - 4914EC4B82CC6AA3736968D86B805228 /* RDEPUBSemanticMarkerInjector.swift */, - 430DCC402F55D7293EDA440903D400BC /* RDEPUBStyleSheetComposer.swift */, - BD629E1D77971203EB1E5EE5C5BA2BAC /* RDEPUBTextRendererSupport.swift */, - 73A8DB7823ED0CC52F6BCB9D87F5D8E9 /* RDEPUBTypesettingPipeline.swift */, - 2D33AED70D241A37EF6E4E272B0B9958 /* Compatibility */, + 953E3DE740417FEABC50197EA84D3869 /* RDEPUBAnnotationModels.swift */, + 22EC93BBACD9340338C2EA7F06488FF9 /* RDEPUBPaginationModels.swift */, + 9E239C1BEAAAF0774B63520941873BCE /* RDEPUBReadingLocationModels.swift */, ); - name = Typesetter; - path = Typesetter; - sourceTree = ""; - }; - 0865045148005FBCE541CC3C8B179490 /* iOS */ = { - isa = PBXGroup; - children = ( - F4081F7CA1FC93EE97276F3D05A333ED /* AVFAudio.framework */, - 968484A28FBB84723F621DB66ECA3347 /* CoreGraphics.framework */, - FC1A01FE2774E0FA1BCE14C678E8B70E /* CoreImage.framework */, - 4F4320A57A5573831CD151F06C5420C5 /* CoreText.framework */, - 9C9E8FA478D23AC4494D5120C081C48B /* CryptoKit.framework */, - 3F2C29FC8214CF950CEB4D34A6EF73DC /* Foundation.framework */, - 17EE920782F4B0CF61192C04ABF5DF6C /* FoundationModels.framework */, - D3FE3107482A464FFADCB685658099F9 /* ImageIO.framework */, - 93231E903E802072F56185B464DDFAD4 /* MediaPlayer.framework */, - B46D01D4D15C2295F678A21C84B825ED /* NaturalLanguage.framework */, - C3D2DECDF3F1951B4030402CDC6F89E8 /* PDFKit.framework */, - 80A410954172DEFFD72C06139798345A /* QuartzCore.framework */, - C8857C84AAC2099B1037C035B8AFF5AF /* UIKit.framework */, - 3B255A2C4C31A02ED6FC13D5D2DE27DC /* Vision.framework */, - ); - name = iOS; + name = Models; + path = Models; sourceTree = ""; }; 0D4A349829D1C0DC0E69C0A64B9A4139 /* Pods-ReadViewDemo */ = { @@ -1523,46 +1492,6 @@ path = "Target Support Files/Pods-ReadViewDemo"; sourceTree = ""; }; - 106B5ED13691DE46F20215799B9B3AD0 /* CFI */ = { - isa = PBXGroup; - children = ( - 830CF8D5AB992FBCBD12AEDC987704BF /* RDEPUBCFI.swift */, - B1A0367B13040EC2A557AA275A2D16D0 /* RDEPUBCFICompatibility.swift */, - B39D4ED1F553815AA8DA4B6C47C7269B /* RDEPUBCFIDOMPathBuilder.swift */, - C6414219D018ADCECF6E5804C284BED7 /* RDEPUBCFIError.swift */, - 8911E1CAA6638CF6E14939CE71B77C19 /* RDEPUBCFIGenerator.swift */, - E0F8B1A04DAD3F227758BEB6D5D4D5E9 /* RDEPUBCFIMap.swift */, - 4EC7EE7406D5F141BFDB10F21D1B98D8 /* RDEPUBCFIParser.swift */, - 62BAED47209069B1F1E56A1DBC2892B1 /* RDEPUBCFIPath.swift */, - 0C746469E04CD2685727B7CAC5DF72BD /* RDEPUBCFIRange.swift */, - 8E937FB7E0D9A3DEF0742A18E455FF54 /* RDEPUBCFIRecoveryEngine.swift */, - E7B65425D5E15E4D005158BE86FAB4EA /* RDEPUBCFIResolver.swift */, - D597E4B20DB22DA3D2C43EAE0285EFB5 /* RDEPUBCFISerializer.swift */, - EBEC460977B864A29421BD4ACD4849C1 /* RDEPUBCFITextAssertion.swift */, - 1929AF2396E5AFD5D38E0BA75065368B /* RDEPUBCFIUtilities.swift */, - ); - name = CFI; - path = CFI; - sourceTree = ""; - }; - 123767FEFDC40642DB92A22C404F93C3 /* EPUBTextRendering */ = { - isa = PBXGroup; - children = ( - 367C998948D9897CF825A08E51AF013D /* RDEPUBChapterData.swift */, - F7069C523A7006ED0AA03E0046C2736A /* RDEPUBDTCoreTextRenderer.swift */, - 7777AD7DDECA33F4050E77507F113B22 /* RDEpubPlainTextBookBuilder.swift */, - F5F6803E56DE9E7EA1CCF0388E607674 /* RDEPUBTextIndexTable.swift */, - 788B69585E28B6A19F3D82E03FB17437 /* RDEPUBTextPositionConverter.swift */, - E263E2A2BC1CFE65C51095296C21D4EE /* RDEPUBTextRenderer.swift */, - CEDDBBF79781F69878880132910803DD /* RDEPUBTextSearchEngine.swift */, - 127B02F9F3CD16354BD01751F0E11483 /* BuildPipeline */, - 70177910880913566BCC28F93F7596F0 /* Pagination */, - 0480A1B39E951F8E5171145FC19BE283 /* Typesetter */, - ); - name = EPUBTextRendering; - path = EPUBTextRendering; - sourceTree = ""; - }; 12526BFA2BF5BCFD26AF994558197D0D /* RDSpeechReaderView */ = { isa = PBXGroup; children = ( @@ -1578,22 +1507,6 @@ path = ../../Sources/RDSpeechReaderView; sourceTree = ""; }; - 127B02F9F3CD16354BD01751F0E11483 /* BuildPipeline */ = { - isa = PBXGroup; - children = ( - BC7700A9EB3EB33F6095CC49EA54E6C1 /* RDEPUBBuildDiagnosticsReporter.swift */, - 59D55BC5643EA702EB48D478948DF83E /* RDEPUBChapterTailNormalizer.swift */, - A66549A3484418848E50313759E8FCFB /* RDEPUBPaginationCacheCoordinator.swift */, - 67A9EB086407E39FDB221874CE6CB9DA /* RDEPUBTextBookBuilder.swift */, - 06E8F756DFAEAA9E8FA4B7D472000B2E /* RDEPUBTextBookCache.swift */, - 28B57DDE8DD7718C17E02D8B7001DC6F /* RDEPUBTextBookModels.swift */, - 81A94C98005A2AE1285F725F27D64D82 /* RDEPUBTextBuildPipelineInterfaces.swift */, - F65A581119EB07B606117CEBB02F900F /* RDEPUBTextPerformanceSampler.swift */, - ); - name = BuildPipeline; - path = BuildPipeline; - sourceTree = ""; - }; 1311AB5B17D6867C642822FA935A0210 /* Pod */ = { isa = PBXGroup; children = ( @@ -1611,6 +1524,25 @@ name = Resources; sourceTree = ""; }; + 18468FD2062F926F39737EFE4390AF03 /* ReaderView */ = { + isa = PBXGroup; + children = ( + B430C8DE5FABD8B5265C378F9D6647CB /* RDEpubReaderContentCell.swift */, + 2715A17C898A6D776882BEBED0FE9695 /* RDEpubReaderFlowLayout.swift */, + 255FEB02D707D9C56E1D5BBE89A8488B /* RDEpubReaderGestureController.swift */, + 2E158150F7B2357D4D54239CBD346CE8 /* RDEpubReaderPageChildViewController.swift */, + D180DE0FA4D342CB14AE055864AD03F0 /* RDEpubReaderView.swift */, + BFBB650C069928DBF6A9F7BA0E89A4BA /* RDEpubReaderView+CollectionView.swift */, + 24CF6BE3C26245FDDEB7E60B92C35046 /* RDEpubReaderView+ContentAccess.swift */, + 89FC4D22055A02594B80AE3D61169CC1 /* RDEpubReaderView+PageCurl.swift */, + 60CEE20803A7C342B83A5972F87CE05F /* RDEpubReaderView+ToolView.swift */, + 3D5896CC971B79D3B220D73186E99827 /* RDEpubReaderViewProtocols.swift */, + B9BFBDDD75EA7D7DC005B244A392AA20 /* Paging */, + ); + name = ReaderView; + path = ReaderView; + sourceTree = ""; + }; 18E044FA60A4142CAEBBA1BA8B351AF0 /* ReaderView */ = { isa = PBXGroup; children = ( @@ -1632,6 +1564,15 @@ name = Core; sourceTree = ""; }; + 1F597F93F3AE569C791DF230C8FEC153 /* Pod */ = { + isa = PBXGroup; + children = ( + C1E22989CFF3153DC1445124C0A538AE /* RDEpubReaderView.podspec */, + 40BCF9C97C17844A974DA454DE537E7D /* README.md */, + ); + name = Pod; + sourceTree = ""; + }; 23EEF1F245171001FD8C637D33393E98 /* Pod */ = { isa = PBXGroup; children = ( @@ -1641,22 +1582,6 @@ name = Pod; sourceTree = ""; }; - 27144090BF6F40420D3D72782EE757BA /* Support Files */ = { - isa = PBXGroup; - children = ( - B6A8CFFD406BC9FB4C712614283CE66C /* RDEpubReaderView.modulemap */, - 35BA5E0859FB7D83208D401FA4126575 /* RDEpubReaderView-dummy.m */, - 8B5C7E08046DF09C290F5F2222B1E64C /* RDEpubReaderView-Info.plist */, - 13D0BE27CC53417EBD0C5F28F1C54E38 /* RDEpubReaderView-prefix.pch */, - 02BE103F11BACB69B3478BA07AE1A2A5 /* RDEpubReaderView-umbrella.h */, - D475ACC199E6D23FD275CCF5D187243B /* RDEpubReaderView.debug.xcconfig */, - EBAF09D94C8796C21CF84B062626E152 /* RDEpubReaderView.release.xcconfig */, - A45FEEA048A5AF7D46CAA3CDF72414CA /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */, - ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDEpubReaderView"; - sourceTree = ""; - }; 2CA280394B77BE3923FC19933C026113 /* ZIPFoundation */ = { isa = PBXGroup; children = ( @@ -1688,62 +1613,77 @@ path = ZIPFoundation; sourceTree = ""; }; - 2D33AED70D241A37EF6E4E272B0B9958 /* Compatibility */ = { + 2D608F4FD3DB3DC4A32B10CFE7E001B0 /* Support Files */ = { isa = PBXGroup; children = ( - EEC733B8EFDBB50E364A83D73F03DACB /* RDEPUBCSSCompatibilityLayer.swift */, - 1A26CF4FC3A56FE642CDCAE6E644AC27 /* RDEPUBFontFallbackResolver.swift */, - 563D7B75744B17E859D3990CEE414AB0 /* RDEPUBStyleCompatibilityModels.swift */, + CFC58CF344A0B807CF57D0AF2762B169 /* RDEpubReaderView.modulemap */, + 86150AFA30DC7C6F49489D2B96796481 /* RDEpubReaderView-dummy.m */, + CCAFE75D3171723D3C2F8D6B54F83810 /* RDEpubReaderView-Info.plist */, + EDD3DE7C60EC3C4BE3D7A2DEFA78EC2D /* RDEpubReaderView-prefix.pch */, + DD2B675FAAF78038DF681753B63E78F6 /* RDEpubReaderView-umbrella.h */, + E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */, + 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */, + 3B45E8A61AE0DA23D19F4223E56F5D08 /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */, ); - name = Compatibility; - path = Compatibility; + name = "Support Files"; + path = "../../ReadViewDemo/Pods/Target Support Files/RDEpubReaderView"; sourceTree = ""; }; - 2E71C74833555A56189647311CA1041E /* EPUBUI */ = { + 2FE24D07190ABC01E7702651F8EC8BED /* Pagination */ = { isa = PBXGroup; children = ( - D0F55A232678D2676458E413833B0C17 /* RDEPUBAnnotationEditorViewController.swift */, - 64527A3F0F755D0173A048667A23AEA3 /* RDEPUBAttachmentTooltipOverlayView.swift */, - 6245AD148BF98574A18D998B11830A21 /* RDEPUBAttachmentTooltipView.swift */, - 089BC1322F491BEB59F94895FDB65109 /* RDEPUBImageViewController.swift */, - EE1DF7A60F88EAB6D70C3170A6F021AA /* RDEPUBImageViewerCoordinator.swift */, - 81120E66C1F56C6F0FAC98FE155554BE /* RDEPUBReaderBottomToolView.swift */, - A58ABF7B052C2FEEC1FF9F105FD80470 /* RDEPUBReaderChapterListController.swift */, - 6B75BE4C4CB6B906D8F81B37938F0A46 /* RDEPUBReaderController.swift */, - 6D3D1B3F2E5D775108B74D6574B91DCE /* RDEPUBReaderController+AttachmentTooltip.swift */, - C8A3FE7990354EF1819DAB32FB09040F /* RDEPUBReaderController+ContentDelegates.swift */, - 4B9D828EF15B8A7E80CA8DA3C770E4D1 /* RDEPUBReaderController+DataSource.swift */, - 8C0E6A164C2508A21E017A697D6A4C80 /* RDEPUBReaderController+ExternalLinks.swift */, - 7A158C1456B0A6C5E3C11F6F598B688D /* RDEPUBReaderController+LocationResolution.swift */, - 224F6889428B8D51E00F57EB6904B3B1 /* RDEPUBReaderController+Orientation.swift */, - 32038A3480CA43711F902B42126D03E6 /* RDEPUBReaderController+PublicAPI.swift */, - 28C6EB4B2B6DC691D28EEBC2BDB4D2F3 /* RDEPUBReaderController+RenderSupport.swift */, - 2856AF81B14F4FE03A4968F3E239DAD6 /* RDEPUBReaderController+RuntimeBridge.swift */, - AE29D77AF696BBB755DED2A768C03D64 /* RDEPUBReaderController+TableOfContents.swift */, - 59A6E8D84753503A5324211BF6A88E64 /* RDEPUBReaderController+Trial.swift */, - 6975E8E0C8246911E8F8318E762672D9 /* RDEPUBReaderDelegate.swift */, - 1B28B43AB4CD054B30DD8EE676642E70 /* RDEPUBReaderHighlightsViewController.swift */, - BD16456E8ACD41D8A266CD43400B6374 /* RDEPUBReaderPersistence.swift */, - F59EBCDA77446DD33CEECEDE5378967F /* RDEPUBReaderSearchBarView.swift */, - E908B49F91AB4BAC14DB2AA9E94526D9 /* RDEPUBReaderTableOfContentsItem.swift */, - 4D6C143C0EAE0DA948204F9912FE193D /* RDEPUBReaderToolView.swift */, - 8B363F80F3DBB1AAC48B8524B8025C79 /* RDEPUBReaderToolViewProtocols.swift */, - 8C14D80995798D4961531CAAC7AE3D01 /* RDEPUBReaderTopToolView.swift */, - 10F7EBC0047B5FAFD86F2BE940E3C100 /* RDEPUBSettingsFlipAutomation.swift */, - E9A0DEE786314BFAABED15DCE9A483F3 /* RDEpubURLReaderController.swift */, - 9F772869AF68874D248A1C55227A74BB /* RDEPUBViewportTypes.swift */, - 2D0BA256721E4BAFE43E91891A606A06 /* RDEPUBWebContentView.swift */, - A3D8597FAB9BFFF6551C75F9A23E95F1 /* RDEPUBWebDecorationOverlayView.swift */, - F7CB58976A61DDAE85B44D4B6CB30A02 /* String+RDEPUB.swift */, - 7AA4DBF07DDCE87ABC0B78A2FF3FB813 /* UIColor+RDEPUB.swift */, - CB33A3E20E2517AE2775CBBD4FB0642D /* UIColor+RDEPUBHex.swift */, - B35FB170F5C2298D1935E081C045E183 /* Notes */, - A13BFB9F3832E148BEFF4F2E2500B7CC /* ReaderController */, - 58FF23D0B3CBA21F8B568310A3F77ADA /* Settings */, - 547F1F2F44D528238BAF447433E7A48C /* TextPage */, + 82B72C555923342A6B29E0B34CD71194 /* RDEPUBChapterPageCounter.swift */, + 858667D975465E160120B5EC556529B8 /* RDEPUBCoreTextPageFrameFactory.swift */, + C0C13E7C0313E7DCCB3664ED29BE4B28 /* RDEPUBPageBreakPolicy.swift */, + B217FB058A1AB50A917831C10DB89F57 /* RDEPUBTextLayouter.swift */, + 9462F129CC1EF33AAEDFC0F3CD09BD9A /* RDEPUBTextLayoutFrame.swift */, + 3784C10C038F42C7074D9B20A81291A4 /* RDEPUBTextPaginationInterfaces.swift */, + 1EDC0C56A84DE47A00B353522B7309AE /* RDEPUBTextPaginationSupport.swift */, ); - name = EPUBUI; - path = EPUBUI; + name = Pagination; + path = Pagination; + sourceTree = ""; + }; + 358851FFB64D2C7D55D839D659301D8F /* BuildPipeline */ = { + isa = PBXGroup; + children = ( + 36209CE685AAEF60A5410D7D5EB08EA9 /* RDEPUBBuildDiagnosticsReporter.swift */, + ED638272054208AFD646AF6EB4B4ACAE /* RDEPUBChapterTailNormalizer.swift */, + FE50EC81EDB03616225DAB735C90CFAD /* RDEPUBPaginationCacheCoordinator.swift */, + 11499AD1EDDA56EE2CB5CDE6783F3137 /* RDEPUBTextBookBuilder.swift */, + 280E073C67E0A1BAF7D84E6DA6FEF2CE /* RDEPUBTextBookCache.swift */, + 71D0768D8887E50A8240A225874288B0 /* RDEPUBTextBookModels.swift */, + 278B56CFF632EE38795D20993A889459 /* RDEPUBTextBuildPipelineInterfaces.swift */, + 344A53B9D93EDE7EB41DEC7D27C8AAF7 /* RDEPUBTextPerformanceSampler.swift */, + ); + name = BuildPipeline; + path = BuildPipeline; + sourceTree = ""; + }; + 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E623FE8E2C5104538087D16EA82D01FE /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 38F3D0A72B28BB0AA50CEA52EE23D389 /* EPUBTextRendering */ = { + isa = PBXGroup; + children = ( + DC17DFE7510F72C1BE80E4FB50182687 /* RDEPUBChapterData.swift */, + 04D65A018B525BEE5FB0F21896B5A27F /* RDEPUBDTCoreTextRenderer.swift */, + BAE4A81DD559C8DAA24A7E45914AB294 /* RDEpubPlainTextBookBuilder.swift */, + 6BA1F24F4DFCDDB93645FFE37C0C68A8 /* RDEPUBTextIndexTable.swift */, + 3DC986A408054D5C173C9528E22F94B5 /* RDEPUBTextPositionConverter.swift */, + D41D52C7574A8265D75889EDFEA1F938 /* RDEPUBTextRenderer.swift */, + D3869A8C25816E0E807A4B4362E9FD22 /* RDEPUBTextSearchEngine.swift */, + 358851FFB64D2C7D55D839D659301D8F /* BuildPipeline */, + 2FE24D07190ABC01E7702651F8EC8BED /* Pagination */, + DE3469A75F6A762C27041901AF44771A /* Typesetter */, + ); + name = EPUBTextRendering; + path = EPUBTextRendering; sourceTree = ""; }; 390A90EDAE212CD241A8BE5BA1738497 /* RDAIReaderView */ = { @@ -1838,6 +1778,53 @@ path = SnapKit; sourceTree = ""; }; + 4CC69C9304EF386C301DEFC2A1C8E4B8 /* EPUBUI */ = { + isa = PBXGroup; + children = ( + 57F27A444B1D85CE9D552F3BE088E5E7 /* RDEPUBAnnotationEditorViewController.swift */, + AF76DD862995E6DCA4C9DD1EAD23C6F6 /* RDEPUBAttachmentTooltipOverlayView.swift */, + 15C6FA1BB01CE3E3BC3877FE7BBA3F90 /* RDEPUBAttachmentTooltipView.swift */, + 605ED3F23EC7AE0091693431E5AD464A /* RDEPUBImageViewController.swift */, + 35B1B17E64DD9DBA45117D4952F0F11C /* RDEPUBImageViewerCoordinator.swift */, + B3DF166B97234809502C34352EE581D1 /* RDEPUBReaderBottomToolView.swift */, + F2C62DAC24CFAC9075940BF8230E8063 /* RDEPUBReaderChapterListController.swift */, + F606B8AFFB6486EF76BF7118C0D2BBEF /* RDEPUBReaderController.swift */, + BB2B377E1647AD43F8B421E099F4DBA0 /* RDEPUBReaderController+AttachmentTooltip.swift */, + EA0835A36D971DBF49B21DC08AF857E4 /* RDEPUBReaderController+ContentDelegates.swift */, + C5A79F4CCFBC9953DB7A8CD52315A738 /* RDEPUBReaderController+DataSource.swift */, + 88C8DF89086D815C51DE683C61FC05D1 /* RDEPUBReaderController+ExternalLinks.swift */, + AAD65472015B1666F31D1B7722813104 /* RDEPUBReaderController+LocationResolution.swift */, + 10FAAD53D64E9A7F84D322E4DBCD7F4B /* RDEPUBReaderController+Orientation.swift */, + CD7E574ECCBB60402506E409507E684A /* RDEPUBReaderController+PublicAPI.swift */, + 4AC8E6436E1B26640EF09D4ED2B97A71 /* RDEPUBReaderController+RenderSupport.swift */, + A04214421115EF7A542C3F3216A318B0 /* RDEPUBReaderController+RuntimeBridge.swift */, + F28957D624353D3F5648E30C1747E81A /* RDEPUBReaderController+TableOfContents.swift */, + D3046302F1405F10DE953D9BB963E1A8 /* RDEPUBReaderController+Trial.swift */, + C72E137C3DFA668BFDC57A4BEC6AE32C /* RDEPUBReaderDelegate.swift */, + 0AD23766F927150C00F31EF8198B457A /* RDEPUBReaderHighlightsViewController.swift */, + CF5C216FDF2C515A93C0212E138FFCA3 /* RDEPUBReaderPersistence.swift */, + C3EF41BC74CB0A807D226BA1B6AAE225 /* RDEPUBReaderSearchBarView.swift */, + B0833E375390AEC8213D4AD7574DAFC6 /* RDEPUBReaderTableOfContentsItem.swift */, + DD38C69E7CB0517D978AF67828A5D3D5 /* RDEPUBReaderToolView.swift */, + DA1492B4475D97CA7D2A514C6740AC74 /* RDEPUBReaderToolViewProtocols.swift */, + 351FD88DC68196BACB5E8C369837AF17 /* RDEPUBReaderTopToolView.swift */, + F17D89032AF6902002A2040DA395024B /* RDEPUBSettingsFlipAutomation.swift */, + C17C5298DC7291DA6730207C4C66F50D /* RDEpubURLReaderController.swift */, + A4D5A0A05487585451479D692E07399B /* RDEPUBViewportTypes.swift */, + 6B18932E1E3BC841E202595971A30339 /* RDEPUBWebContentView.swift */, + F6BB958DEBCC33A50F89F805D087B922 /* RDEPUBWebDecorationOverlayView.swift */, + EB66CFF964A5BAAE8F874E7FD57B193E /* String+RDEPUB.swift */, + 1865AFCF70C53C253B8F4E01D5F5E61C /* UIColor+RDEPUB.swift */, + EE2FF626D776A0880B86E92EC160BA17 /* UIColor+RDEPUBHex.swift */, + C88655D5F0DC56E04DCFE3803713EDB7 /* Notes */, + 62358BD998BF28121E63018A1C035C64 /* ReaderController */, + C1993320C66325DEC09EE7DE95976D1F /* Settings */, + 7B6D61FE6DB33C563A119647E5B6DE6E /* TextPage */, + ); + name = EPUBUI; + path = EPUBUI; + sourceTree = ""; + }; 4DEB1352F0064F93A274DDB2378895FC /* Pods */ = { isa = PBXGroup; children = ( @@ -1849,6 +1836,14 @@ name = Pods; sourceTree = ""; }; + 52CE2AD2DE3BF695540E186558566473 /* AI */ = { + isa = PBXGroup; + children = ( + 44EB3CBD2C1D167AE3BD1AD5A9FE063D /* RDEPUBAIContentProvider.swift */, + ); + name = AI; + sourceTree = ""; + }; 53A5E1AA710E875BA96CCD372501AAEF /* Support Files */ = { isa = PBXGroup; children = ( @@ -1864,28 +1859,6 @@ path = "../../ReadViewDemo/Pods/Target Support Files/RDAIReaderView"; sourceTree = ""; }; - 547F1F2F44D528238BAF447433E7A48C /* TextPage */ = { - isa = PBXGroup; - children = ( - 069D7EE5E989A9F963E518365DDB0301 /* RDEPUBChapterDisplayContentCache.swift */, - 31802A30449913CF424CD3B666B895CF /* RDEPUBDarkImageAdjuster.swift */, - D098B6BDF458996B5B3A757722DF5C3B /* RDEPUBPageInteractionController.swift */, - 01476F47406E7CD8C4420B82B73E642F /* RDEPUBPageLayoutSnapshot.swift */, - 112BB2DF4A650E511F8E5988973D1199 /* RDEPUBSelectionLoupeView.swift */, - 920EAB87BCF859EE5CB851833D8C7410 /* RDEPUBSelectionOverlayView.swift */, - 603CE31AD8934F870E35F7074D1EFDE0 /* RDEPUBTextAnnotationOverlay.swift */, - BDC92A937FE8D7CA37ED82CCEDBCC6E5 /* RDEPUBTextContentInteractionCoordinator.swift */, - 03A3F3DC28A03FECBBC8A4FD8E5EBD8B /* RDEPUBTextContentView.swift */, - 5D0B6C724E03707E527C7AB3C1214489 /* RDEPUBTextPageBoundaryValidator.swift */, - 4AF4B41DABF7397AEBDB574FEA007451 /* RDEPUBTextPageDecorationView.swift */, - 0E0CFBF5E5E5B369336E6E7E8FDCD5F5 /* RDEPUBTextPageRenderView.swift */, - 8C80B76361E9EE71ACFCB82163017066 /* RDEPUBTextPageVerticalJustifier.swift */, - A83ECB8E69E2047D86F4EA6D987E0B8A /* RDEPUBTextSelectionController.swift */, - ); - name = TextPage; - path = TextPage; - sourceTree = ""; - }; 5788D3728DAFD201F8BDC34C43323168 /* Speech */ = { isa = PBXGroup; children = ( @@ -1895,37 +1868,6 @@ name = Speech; sourceTree = ""; }; - 583B03C7D57B9CAE691754AAC26103FD /* Speech */ = { - isa = PBXGroup; - children = ( - 1CF5CFD0948675E862FF54F7A5D73412 /* RDEPUBSpeechContentProvider.swift */, - ); - name = Speech; - sourceTree = ""; - }; - 583E3668A1AB420C1C7E1EE7D4606DBA /* DocumentFormats */ = { - isa = PBXGroup; - children = ( - 10207D5C5DF3B33C322957B6325ECA5D /* RDCBZReaderController.swift */, - 657A0B0DD4402A509DF0BF6AA9360DF5 /* RDMOBIParser.swift */, - DD4C2E0881354D1B1CF3ADF0A8A3E552 /* RDReaderDocumentFormat.swift */, - ); - name = DocumentFormats; - path = DocumentFormats; - sourceTree = ""; - }; - 58FF23D0B3CBA21F8B568310A3F77ADA /* Settings */ = { - isa = PBXGroup; - children = ( - 9F25AA42AB430C73FED1DE82FA2DF2DC /* RDEPUBReaderConfiguration.swift */, - A8D7E62479EFF470F47755931FC2BFA4 /* RDEPUBReaderSettings.swift */, - 5EEE1249C915939654A5609D3CFC2064 /* RDEPUBReaderSettingsViewController.swift */, - C26B30F895FEA65F0D322407234375F0 /* RDEPUBReaderTheme.swift */, - ); - name = Settings; - path = Settings; - sourceTree = ""; - }; 5D84EFCD32A12A50AB9692ACEF5C88EE /* DTFoundation */ = { isa = PBXGroup; children = ( @@ -1948,16 +1890,37 @@ path = Paging; sourceTree = ""; }; - 5E5636BC61968045454E451729360F65 /* Paging */ = { + 62358BD998BF28121E63018A1C035C64 /* ReaderController */ = { isa = PBXGroup; children = ( - 10A21533669EF5F6B433ACF6570084B4 /* RDEpubReaderPagingController.swift */, - BCEC432BB6F19EF8C918567EDAE34801 /* RDEpubReaderPreloadController.swift */, - F0AD8B4549561584DFE21463CC4045E6 /* RDEpubReaderSpreadResolver.swift */, - 3ED45EEF428135AE43AF524CE0492924 /* RDEpubReaderTapRegionHandler.swift */, + 907F8DF524B0E15F52BF172C447C26E6 /* RDEPUBBackgroundCoverageStore.swift */, + D0EBC152CC752677E2BF9AC52A6BA36E /* RDEPUBBackgroundPriorityPolicy.swift */, + DB469565A1ED216AFEEDC8EAE6EBD11C /* RDEPUBJumpSession.swift */, + 8B71F5A8A332E260EE37A50AA41BCF2B /* RDEPUBMemoryProbe.swift */, + 9BAEE2DC5FDA8BB9EF5C4A5F7488DA75 /* RDEPUBMetadataParseCancellationController.swift */, + 134B4A5BAA37EE1E20002904058F91C0 /* RDEPUBMetadataParseWorker.swift */, + D35E3E5D1F0237B862AF1C496338DA61 /* RDEPUBPageMapReconciliationCoordinator.swift */, + 6314FB72D26D4408191CE8E9D1E318B1 /* RDEPUBPresentationRuntime.swift */, + 036FFBB8F2CD53C655683977792C77E1 /* RDEPUBReaderAnnotationCoordinator.swift */, + 16EA564A15FAF13156B1B63CA898E824 /* RDEPUBReaderAssemblyCoordinator.swift */, + A39FFDCEA5A80B1D0BDDCA93EB781EF4 /* RDEPUBReaderChromeCoordinator.swift */, + C9BB49C3B2BFFFC50DADB4C826E51C20 /* RDEPUBReaderContext.swift */, + A533699DEE4985154543EA9F53620DB8 /* RDEPUBReaderDependencies.swift */, + 8A3E297145AF1816CA5C623327CC59B8 /* RDEPUBReaderEnvironment.swift */, + C1099B7E3DBAA419B87F8C2B85489A83 /* RDEPUBReaderLoadCoordinator.swift */, + 7A13E55782C8624DBE40150164B4EE2E /* RDEPUBReaderLocationCoordinator.swift */, + 6B3E432595DAC50388DA01BF5E2C0064 /* RDEPUBReaderPaginationCoordinator.swift */, + 8568D36432A34FEDE5381E99A8C991F8 /* RDEPUBReaderRuntime.swift */, + E8DB205FB6149A977447BDB109A35B2E /* RDEPUBReaderSearchCoordinator.swift */, + DD75EF904CE8308F5AACF1FF146BF1FA /* RDEPUBReaderServices.swift */, + EBFC61F3537CBD438016A097E37ACB6B /* RDEPUBReaderState.swift */, + 825FBD8AD5EC92AAB0ECEE502EC41F8D /* RDEPUBReaderUIState.swift */, + 4F29D2A4AA92951611BB88CBCEA7D676 /* RDEPUBReaderViewportMonitor.swift */, + 804466C635EB4FEF9D6D616165F8B8DC /* RDEPUBSelectionState.swift */, + 7DB6A8086EA9ADA201AFFCAC77BDD0F4 /* ChapterRuntime */, ); - name = Paging; - path = Paging; + name = ReaderController; + path = ReaderController; sourceTree = ""; }; 68553AEBE09FBCACA2E3C5DA7EB11494 /* Resources */ = { @@ -1968,109 +1931,6 @@ name = Resources; sourceTree = ""; }; - 6F24FD18658D908AAD2750BA7E21AC0E /* ReaderView */ = { - isa = PBXGroup; - children = ( - 63F79A4C9316E507B47DF63F26FC3263 /* RDEpubReaderContentCell.swift */, - 9E0BE4A0D727AF11C82F9FAD7EAF28AC /* RDEpubReaderFlowLayout.swift */, - FCBECD199A5AB2E046BC593AC6FE63C7 /* RDEpubReaderGestureController.swift */, - 44F6F4C9B8DC26B67956A489EB5E2E39 /* RDEpubReaderPageChildViewController.swift */, - E0CAA288D149C9793B45AC10F40DABE4 /* RDEpubReaderView.swift */, - 3410BDB001A65A79622F3980646A4AAE /* RDEpubReaderView+CollectionView.swift */, - E307745D06FCCA8EE3825E00C050479F /* RDEpubReaderView+ContentAccess.swift */, - B454B7709E93E1E886E4FA533B06802D /* RDEpubReaderView+PageCurl.swift */, - 4323646E9B345F4FADB630E17C777858 /* RDEpubReaderView+ToolView.swift */, - 6393730DA75DF6B53CCC8AC325591C5D /* RDEpubReaderViewProtocols.swift */, - 5E5636BC61968045454E451729360F65 /* Paging */, - ); - name = ReaderView; - path = ReaderView; - sourceTree = ""; - }; - 70177910880913566BCC28F93F7596F0 /* Pagination */ = { - isa = PBXGroup; - children = ( - 0EEE779A1CEC15EBD959AE8FB87C5E20 /* RDEPUBChapterPageCounter.swift */, - 6D11123394F7F2EE6463FE977F3DABD9 /* RDEPUBCoreTextPageFrameFactory.swift */, - AE2565A3B94D5C14329E580ABC077884 /* RDEPUBPageBreakPolicy.swift */, - 65080B22CDF63551E7650AAF4499BDD7 /* RDEPUBTextLayouter.swift */, - B58293AB5053B6AA340D1D55A7FD0312 /* RDEPUBTextLayoutFrame.swift */, - 237DCFF0194564E19C33BED372E1EA72 /* RDEPUBTextPaginationInterfaces.swift */, - 35A48CFD97F259DB677ECBF3A5AB8B60 /* RDEPUBTextPaginationSupport.swift */, - ); - name = Pagination; - path = Pagination; - sourceTree = ""; - }; - 705B0B3615494EB9A0FEE9A4AA560C7C /* RDEpubReaderView */ = { - isa = PBXGroup; - children = ( - 4DAF2D9747F0021F074180A0C76F0788 /* cssInjector.js */, - 20DD66672C9FCA7C604D8034702101EF /* epub-bridge.js */, - 22226730313C0F24542669F12C5C4FB1 /* epub-fixed-layout.html */, - 7A98FCBF217CA913BD506DAEBAE03449 /* rangy-core.js */, - 2B49BEF738A6B60FB6A64671ACA9091B /* rangy-serializer.js */, - FF4F4DF69DE3402A658BF53389C1E29F /* WeReadApi.js */, - ADC5802DC43F329301B626F990A0D308 /* wxread-dark.css */, - E645DF57426CBB76570142F9D580209F /* wxread-default.css */, - 77CA12D475208B07BC520525A4E79C3C /* wxread-replace.css */, - FA2A95481CF034C4689E42B263042872 /* wxread-replace-latin.css */, - 954310FB3650F986B3B28B3C53EAEE28 /* AI */, - 583E3668A1AB420C1C7E1EE7D4606DBA /* DocumentFormats */, - 76ACED102B645106A60255A5231A0AFC /* EPUBCore */, - 123767FEFDC40642DB92A22C404F93C3 /* EPUBTextRendering */, - 2E71C74833555A56189647311CA1041E /* EPUBUI */, - E34A5243D06FA39B0B56462DAC551747 /* Pod */, - 6F24FD18658D908AAD2750BA7E21AC0E /* ReaderView */, - 583B03C7D57B9CAE691754AAC26103FD /* Speech */, - 27144090BF6F40420D3D72782EE757BA /* Support Files */, - ); - name = RDEpubReaderView; - path = ../../Sources/RDEpubReaderView; - sourceTree = ""; - }; - 76ACED102B645106A60255A5231A0AFC /* EPUBCore */ = { - isa = PBXGroup; - children = ( - 01E5F8CCBFB0567360782BD2FF0589A9 /* RDEPUBAssetRepository.swift */, - 6F805E226F3C1AA7053AA6606DA26CE1 /* RDEPUBFixedLayoutTemplate.swift */, - 5B786661CF20BBDCE901A8609DACF061 /* RDEPUBJavaScriptBridge.swift */, - AEDD0F8FBE7C14A783C94B709F23A4DB /* RDEPUBModels.swift */, - 58E942DE9692E29D8CB63A8E7F0E6B2B /* RDEPUBNavigatorLayoutContext.swift */, - 519BA5E115705E308601172F3785D87E /* RDEPUBPaginator.swift */, - DA1B0A108E49438640DBDD0A70FD293A /* RDEPUBParser.swift */, - 62AF8846B36B51075E3D04481932FAB0 /* RDEPUBParser+Archive.swift */, - C42BB280740ACCEAD29B912A1D47F29B /* RDEPUBParser+Package.swift */, - 87D001927426A4D5E9E90B7899A00372 /* RDEPUBParser+ReadingProfile.swift */, - 4DFD0C2AACBA8A400F346FFA5AAA6C77 /* RDEPUBParser+Resources.swift */, - A722D0A8A8664F86E0905654992FA360 /* RDEPUBParser+TOC.swift */, - 52481F3BA048F07B97DAC750A397270E /* RDEPUBPreferences.swift */, - E1BB480EA8E2ED1FEEC70C334BA00FD5 /* RDEPUBPublication.swift */, - 55ECB9EB83BDA7CDF3E67366AAA25C22 /* RDEPUBReadingSession.swift */, - 5A2ACEA23FA60F80BDEFD2EC71EB10F4 /* RDEPUBRenderRequest.swift */, - 6E6F004273EE4B1DA2F3B6E496AF475E /* RDEPUBResourceDataProvider.swift */, - 51DCB48325A7E7DDC907587B7B9425F6 /* RDEPUBResourceResolver.swift */, - 59DC39EBD2707FF1010387665D60AB01 /* RDEPUBResourceURLSchemeHandler.swift */, - BB559C50CCDA34EDD0525268B980948E /* RDEPUBSafeArea.swift */, - 127678B93D3CEB6EC2C7F3E5DD81860B /* RDEPUBSearchEngine.swift */, - F11B87D1193658365521B72B44502D73 /* RDEPUBSearchModels.swift */, - D50156C4B53F70228DCAC0501DB9226C /* RDEPUBStyleSheetBuilder.swift */, - 8E85471307D55F36163C3495688467A3 /* RDEPUBTextAnchor.swift */, - CF4F453E8FCDC0F85D36928C5390D77A /* RDEPUBWebView.swift */, - 132F26882A679D32261325CC0E7B460A /* RDEPUBWebView+Configuration.swift */, - 3839A199E78DBF80DB5CF945DCE6C62B /* RDEPUBWebView+FixedLayout.swift */, - 289F977B8DD2ABF03CE0CCED0A8F5671 /* RDEPUBWebView+JavaScriptBridge.swift */, - 75AA5BC3865826B2B32B3305A8CC578B /* RDEPUBWebView+Reflowable.swift */, - EA573F944A7ECEBBA9EC81D72F804D7E /* RDEPUBWebView+Search.swift */, - 8240722CAA937E143E861EF85889D881 /* RDEPUBWebViewDebug.swift */, - 106B5ED13691DE46F20215799B9B3AD0 /* CFI */, - EE28F04957DCFD119C7ECC62C7762527 /* Models */, - C9B9EAB8B8EB5DEA570AC63A127D439A /* Notes */, - ); - name = EPUBCore; - path = EPUBCore; - sourceTree = ""; - }; 77CEE3EADF5D3703EAFFDED6F4394F74 /* Core */ = { isa = PBXGroup; children = ( @@ -2083,6 +1943,28 @@ name = Core; sourceTree = ""; }; + 7B6D61FE6DB33C563A119647E5B6DE6E /* TextPage */ = { + isa = PBXGroup; + children = ( + 190346203AD581C70492D0745A6E8803 /* RDEPUBChapterDisplayContentCache.swift */, + 08DD1E0E929865962947B62F7DED78F3 /* RDEPUBDarkImageAdjuster.swift */, + 7DF3043DDE18A19F6421EF2CF64139B1 /* RDEPUBPageInteractionController.swift */, + E28619FF1699FE5E9E9981D4B9C26E55 /* RDEPUBPageLayoutSnapshot.swift */, + AEDAA2C5AF091299DF54A6E16A992BC3 /* RDEPUBSelectionLoupeView.swift */, + 37A4370530967E365499946ECCA13F13 /* RDEPUBSelectionOverlayView.swift */, + 62636EDE4CB9821D61448E5C954460F7 /* RDEPUBTextAnnotationOverlay.swift */, + 3DE91417CF554D42F4493D636FF1F69C /* RDEPUBTextContentInteractionCoordinator.swift */, + 9245153495464B8CBAFED3ED68018040 /* RDEPUBTextContentView.swift */, + D91B95C25EE62BB4B1F381EB057E9857 /* RDEPUBTextPageBoundaryValidator.swift */, + D1062E1B1D8A82FD2C1DD0B34E5D20AA /* RDEPUBTextPageDecorationView.swift */, + FD6379B6FF36860C62B38044B24310C8 /* RDEPUBTextPageRenderView.swift */, + C7C0AB34CD2CE6BAD791E1F6E3D75649 /* RDEPUBTextPageVerticalJustifier.swift */, + 089001022ECC9DB5FD2E0F24D747A427 /* RDEPUBTextSelectionController.swift */, + ); + name = TextPage; + path = TextPage; + sourceTree = ""; + }; 7CA1F6C8239220E05E9A390877954050 /* DTAnimatedGIF */ = { isa = PBXGroup; children = ( @@ -2092,11 +1974,42 @@ name = DTAnimatedGIF; sourceTree = ""; }; + 7DB6A8086EA9ADA201AFFCAC77BDD0F4 /* ChapterRuntime */ = { + isa = PBXGroup; + children = ( + 92F0F3ABA13CE7A54A4E4E349805063E /* RDEPUBBackgroundTrace.swift */, + 999BDDCF67865CDD1D8FDFDCF47B3BA6 /* RDEPUBBookPageMap.swift */, + 984D5B14277EA4CB70D58019DC0D2E7A /* RDEPUBChapterCacheKey.swift */, + C02B75657834185F5471197156446395 /* RDEPUBChapterDataCache.swift */, + 66388B03A7B6CCC521677D01D37D85F9 /* RDEPUBChapterLoader.swift */, + 02E5A5D3D109FB88E6EA88F1E2253525 /* RDEPUBChapterLocation.swift */, + 45E017DF266C5A63D2DD360346FD3790 /* RDEPUBChapterOffsetMap.swift */, + 252792DF6A9EBFA863DC153A59A7C003 /* RDEPUBChapterRuntimeStore.swift */, + E6982A7E6DC4C5C53D2CC2D5811ABD98 /* RDEPUBChapterSummaryDiskCache.swift */, + 8271BF8B7810200FA9F29F48A6560327 /* RDEPUBChapterWarmupOrchestrator.swift */, + DB2F54C055F942CA37FE44B4E194467D /* RDEPUBPageCountCache.swift */, + 7DB47B6585052E2D965545738AB6126B /* RDEPUBPageResolver.swift */, + B519C702035AA132CC8AFFCF4399C678 /* RDEPUBRuntimeChapter.swift */, + 9BB109BD1A878FD38390731ED383EBB8 /* RDEPUBRuntimePageCount.swift */, + ); + name = ChapterRuntime; + path = ChapterRuntime; + sourceTree = ""; + }; + 84BB63EEC92C4792477AE6A3F7F78099 /* Speech */ = { + isa = PBXGroup; + children = ( + 10C60005AD8F659D0476A2D8DCDF0AB7 /* RDEPUBSpeechContentProvider.swift */, + 5F04F9EA650B7E82A6BD7560C308C1F9 /* RDEPUBSpeechSession.swift */, + ); + name = Speech; + sourceTree = ""; + }; 89B543FBD83F25016955F4C6944803DD /* Development Pods */ = { isa = PBXGroup; children = ( 390A90EDAE212CD241A8BE5BA1738497 /* RDAIReaderView */, - 705B0B3615494EB9A0FEE9A4AA560C7C /* RDEpubReaderView */, + D12D6BCBD1CDEB43C5A3A503D4303C0C /* RDEpubReaderView */, F6622CD8178FE552BA5A2D887FCCA98D /* RDPDFReaderView */, 12526BFA2BF5BCFD26AF994558197D0D /* RDSpeechReaderView */, ); @@ -2136,12 +2049,46 @@ name = AI; sourceTree = ""; }; - 954310FB3650F986B3B28B3C53EAEE28 /* AI */ = { + 9416704F207813616C70A5A0886FC2FD /* EPUBCore */ = { isa = PBXGroup; children = ( - CD49AF7F1AEB81E28CF54BDF4BEB7343 /* RDEPUBAIContentProvider.swift */, + DF67542CFE745690B8EBE4830234AF3D /* RDEPUBAssetRepository.swift */, + 176BA6492702B8C8B44BB4838E9BE22E /* RDEPUBFixedLayoutTemplate.swift */, + E3295E071BD0E7D326FF78153BA2B547 /* RDEPUBJavaScriptBridge.swift */, + 2001D46BD05DD1AA90F95E8DA1446665 /* RDEPUBModels.swift */, + E1003FAF53E637D0449A9CC1D883E1F1 /* RDEPUBNavigatorLayoutContext.swift */, + 5BEA1735DC206814580D0CBDDC031E24 /* RDEPUBPaginator.swift */, + A6FDDE36D802AB1EA9041B13BC3EA5A1 /* RDEPUBParser.swift */, + 20A5204B6BF43D97B5BF8D5E2750C169 /* RDEPUBParser+Archive.swift */, + 5CA21017980D553A4F9BDDF4AA5D7C5A /* RDEPUBParser+Package.swift */, + 0EF517630D9C1210CC93BA4C5EDFEC72 /* RDEPUBParser+ReadingProfile.swift */, + BA8EF373BBB5C4CCBC5508A277C66DA2 /* RDEPUBParser+Resources.swift */, + AC98EFE638423C12303C34B7A44385E2 /* RDEPUBParser+TOC.swift */, + 652FAC593B4120C7C6FB336099192C03 /* RDEPUBPreferences.swift */, + 7D14015E61E39CFCDCA7990AD045B00A /* RDEPUBPublication.swift */, + 4ED5D1D93987D1ECA1C9ACBDDBA99968 /* RDEPUBReadingSession.swift */, + 08D3259DEB40F1B981CE44EC804D3EAA /* RDEPUBRenderRequest.swift */, + 1DE9799AA807EEB5A537EC921B86BE14 /* RDEPUBResourceDataProvider.swift */, + 6B9EC155E4E50C8B0D7C9E946A6EFD6E /* RDEPUBResourceResolver.swift */, + 11CB7096E9E4649F50811459D7FBB65C /* RDEPUBResourceURLSchemeHandler.swift */, + 04592A413A3E30701E478D8F61806A9C /* RDEPUBSafeArea.swift */, + D6032EC340E3CFAD1A8538662BBFF5BB /* RDEPUBSearchEngine.swift */, + B7A9D2873B8F3EC6F43F7F65854A0341 /* RDEPUBSearchModels.swift */, + 0F4690DA615CD1FD20F08CD8BB5CD166 /* RDEPUBStyleSheetBuilder.swift */, + 6B4C6FF338A6BCF7DF2A6F071DC960F3 /* RDEPUBTextAnchor.swift */, + FBE25EF5F0CDFCDC386BCA80518BBDB4 /* RDEPUBWebView.swift */, + AF5A643FD1163E493C913723C79E6B44 /* RDEPUBWebView+Configuration.swift */, + 240F52CEA8D1F72985804D9FF38A9DDD /* RDEPUBWebView+FixedLayout.swift */, + D50E19F80F64C425AF6E80129D14A85E /* RDEPUBWebView+JavaScriptBridge.swift */, + 95B28F6E48DFAB553BCB9383DC6D19D3 /* RDEPUBWebView+Reflowable.swift */, + 41842E3F5C4C4B1ACDE3C397F0AE687B /* RDEPUBWebView+Search.swift */, + B90AD4BB9A9DF6CFF6AFAC1BBCB83B53 /* RDEPUBWebViewDebug.swift */, + E9085F238564F395310AF033BBFA4A42 /* CFI */, + 0B1D2560BC0864A57D00D0163A728746 /* Models */, + 9BD5B5B6030545133D23EF8E779C9EB7 /* Notes */, ); - name = AI; + name = EPUBCore; + path = EPUBCore; sourceTree = ""; }; 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */ = { @@ -2152,37 +2099,15 @@ name = "Targets Support Files"; sourceTree = ""; }; - A13BFB9F3832E148BEFF4F2E2500B7CC /* ReaderController */ = { + 9BD5B5B6030545133D23EF8E779C9EB7 /* Notes */ = { isa = PBXGroup; children = ( - 7E8C2259B135B2F86D6250BD6B09178A /* RDEPUBBackgroundCoverageStore.swift */, - F7DFA2F1E1C67837F7C4B4363EF16949 /* RDEPUBBackgroundPriorityPolicy.swift */, - 70A8F9DB706EC2E2FCFBAD1E695BB805 /* RDEPUBJumpSession.swift */, - F8233CAA669CAC56C7B0EEE700B53A23 /* RDEPUBMemoryProbe.swift */, - 01BF453B34821E315E0E3B1A1363A538 /* RDEPUBMetadataParseCancellationController.swift */, - F7F679F301CC740E180D3E0ABA038EF7 /* RDEPUBMetadataParseWorker.swift */, - 1AE141846409815273DEBF1DF496BBF6 /* RDEPUBPageMapReconciliationCoordinator.swift */, - F692867A6534E6C9D48E91AB70413D33 /* RDEPUBPresentationRuntime.swift */, - 8B84C004C6CD0C7094EBA83BF3E42DD0 /* RDEPUBReaderAnnotationCoordinator.swift */, - 65F72183F6B8013C5A520595006A2B5F /* RDEPUBReaderAssemblyCoordinator.swift */, - 59D34C7BD6896EBDB5BAFDCC8F420FB6 /* RDEPUBReaderChromeCoordinator.swift */, - CD5495829095E37CEDC515A639F9A9E4 /* RDEPUBReaderContext.swift */, - 921EA5C03E5608583DE9F4C2FC49704B /* RDEPUBReaderDependencies.swift */, - CC507AA13E507E6197F6E4B3BB70F899 /* RDEPUBReaderEnvironment.swift */, - 38B47FDF2463F124FDC2B6154F98E987 /* RDEPUBReaderLoadCoordinator.swift */, - 4C19196DA0724F0BF7BAF7DF59C04D8E /* RDEPUBReaderLocationCoordinator.swift */, - 485961C2B2BC82A4B098F920F901DE24 /* RDEPUBReaderPaginationCoordinator.swift */, - C001AE419BF0DC7FC7836C5BDCD9CF76 /* RDEPUBReaderRuntime.swift */, - 87855F530B15477A1936F953D0A86A63 /* RDEPUBReaderSearchCoordinator.swift */, - 3D56EC508FD85074993AAB6580F72631 /* RDEPUBReaderServices.swift */, - 1061342BC0338CF0BB657142899D83BA /* RDEPUBReaderState.swift */, - 8C59FCD684EB9341B04A358F9BAF4DC4 /* RDEPUBReaderUIState.swift */, - 63FD3DEF59551312E8EEB77A7CDEC93A /* RDEPUBReaderViewportMonitor.swift */, - 8F24C368CBF5CCF60B01598682C6C07F /* RDEPUBSelectionState.swift */, - FEC29D84F2496ED6C394DD3BC97F163E /* ChapterRuntime */, + 8B9E332F7EDBC4A91BF0DBB014C44D12 /* RDEPUBNoteDetector.swift */, + 1D13B77878270A7699E1975EB37F0DD4 /* RDEPUBNoteModels.swift */, + F2212BCD78FFC35A46929B1C86B16DBC /* RDEPUBNoteResolver.swift */, ); - name = ReaderController; - path = ReaderController; + name = Notes; + path = Notes; sourceTree = ""; }; A35D92C45ED9784FF33310E20959877B /* Support Files */ = { @@ -2365,16 +2290,6 @@ name = AI; sourceTree = ""; }; - B35FB170F5C2298D1935E081C045E183 /* Notes */ = { - isa = PBXGroup; - children = ( - 87893187F5137BA27FE812E2F9346B30 /* RDEPUBNotePopupCoordinator.swift */, - 76D2244BDA6024551727F35AA3454980 /* RDEPUBNotePopupViewController.swift */, - ); - name = Notes; - path = Notes; - sourceTree = ""; - }; B463807D92B5853C009524A41B5F7B6D /* Core */ = { isa = PBXGroup; children = ( @@ -2430,6 +2345,18 @@ name = UI; sourceTree = ""; }; + B9BFBDDD75EA7D7DC005B244A392AA20 /* Paging */ = { + isa = PBXGroup; + children = ( + F0D4CF44D919376D1696CC0827A6D4D9 /* RDEpubReaderPagingController.swift */, + A367786E9C55FFE1AA25D87507414354 /* RDEpubReaderPreloadController.swift */, + 7921A77874E3E2E63E378843085CE55F /* RDEpubReaderSpreadResolver.swift */, + 752C7424C07641B28AD2F0C06D1629D5 /* RDEpubReaderTapRegionHandler.swift */, + ); + name = Paging; + path = Paging; + sourceTree = ""; + }; BC94BBA575D65BD789B3BBC38F35DA38 /* Support Files */ = { isa = PBXGroup; children = ( @@ -2446,12 +2373,23 @@ path = "../Target Support Files/ZIPFoundation"; sourceTree = ""; }; - C9B9EAB8B8EB5DEA570AC63A127D439A /* Notes */ = { + C1993320C66325DEC09EE7DE95976D1F /* Settings */ = { isa = PBXGroup; children = ( - 574844915C6A0BA87B43940426C8DA96 /* RDEPUBNoteDetector.swift */, - C9B7588747FF74836493105F6698CC00 /* RDEPUBNoteModels.swift */, - B662AF2609AEAE5D2B6488E6FBEBDC3B /* RDEPUBNoteResolver.swift */, + 8AC4B57FB834CD3FE6380801D726D436 /* RDEPUBReaderConfiguration.swift */, + C240F5A5D602DF39562C908A425EDCF3 /* RDEPUBReaderSettings.swift */, + 86EDE1B29348DC15D6122E9FCF98DC42 /* RDEPUBReaderSettingsViewController.swift */, + A7AE5609FB5D93807FB8ADD05770EBD7 /* RDEPUBReaderTheme.swift */, + ); + name = Settings; + path = Settings; + sourceTree = ""; + }; + C88655D5F0DC56E04DCFE3803713EDB7 /* Notes */ = { + isa = PBXGroup; + children = ( + F43D341014C0A3261943902F0C6D7A47 /* RDEPUBNotePopupCoordinator.swift */, + 988C218F8E7B50E498B5A44BFE164678 /* RDEPUBNotePopupViewController.swift */, ); name = Notes; path = Notes; @@ -2477,13 +2415,60 @@ children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 89B543FBD83F25016955F4C6944803DD /* Development Pods */, - E5F5C55E92AC2AAD92797EE3CC9ED22C /* Frameworks */, + 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */, 4DEB1352F0064F93A274DDB2378895FC /* Pods */, A60C9476C4F4CB970063579359A474EC /* Products */, 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */, ); sourceTree = ""; }; + D12D6BCBD1CDEB43C5A3A503D4303C0C /* RDEpubReaderView */ = { + isa = PBXGroup; + children = ( + 4851457CCDD4EA7C57B379138A7478E1 /* cssInjector.js */, + 6047CC6474064B5DBC63961634438A6B /* epub-bridge.js */, + CD4C8B83118F25943DE8FBCD85F54B81 /* epub-fixed-layout.html */, + 105CB7B728D10FAF3A24822B65E01EE2 /* rangy-core.js */, + 58557168DB1E78D1B4AF6C29B679CB21 /* rangy-serializer.js */, + BA9DCAAE8105CEA9A378DC9A7282CCBC /* WeReadApi.js */, + F1162FA50CA992FE5732F460227AB7DF /* wxread-dark.css */, + 5964D41F9024DDA6DA0E1B06D5A628DE /* wxread-default.css */, + 23711E614B27F6F6EE187EDBFEFAAE38 /* wxread-replace.css */, + FEEC0D985E61911DD98BBA2737107E1C /* wxread-replace-latin.css */, + 52CE2AD2DE3BF695540E186558566473 /* AI */, + E8ABF893717437BDF37DE81B6A56C9B8 /* DocumentFormats */, + 9416704F207813616C70A5A0886FC2FD /* EPUBCore */, + 38F3D0A72B28BB0AA50CEA52EE23D389 /* EPUBTextRendering */, + 4CC69C9304EF386C301DEFC2A1C8E4B8 /* EPUBUI */, + 1F597F93F3AE569C791DF230C8FEC153 /* Pod */, + 18468FD2062F926F39737EFE4390AF03 /* ReaderView */, + 84BB63EEC92C4792477AE6A3F7F78099 /* Speech */, + 2D608F4FD3DB3DC4A32B10CFE7E001B0 /* Support Files */, + ); + name = RDEpubReaderView; + path = ../../Sources/RDEpubReaderView; + sourceTree = ""; + }; + DE3469A75F6A762C27041901AF44771A /* Typesetter */ = { + isa = PBXGroup; + children = ( + F74C359E556A8876EF09A01201FB0403 /* RDEPUBAttachmentNormalizer.swift */, + 498E8B4F4F6A151C181647CACD6F76DA /* RDEPUBCFIMarkerInjector.swift */, + C34C80F5248BF6ED37B94686518B46EB /* RDEPUBDecryptingImageAttachment.swift */, + 8F91B0C7F09F04D73718237F3B40697E /* RDEPUBFontNormalizer.swift */, + AAFD4EAE169F3144D806A519A51A90CA /* RDEPUBFragmentMarkerInjector.swift */, + 5AE838E20F857F2CC3224F4B11A9399E /* RDEPUBHTMLNormalizer.swift */, + 901F68C92C3CA04787387C026ECAD9A2 /* RDEPUBRenderDiagnosticsCollector.swift */, + 27A96DA3DBC26B10F7E433D58D93F480 /* RDEPUBSemanticMarkerInjector.swift */, + 35113955C9D390BAC3B55BD96F596650 /* RDEPUBStyleSheetComposer.swift */, + 1A0605D275609C02D0D78521B2B2F2B8 /* RDEPUBTextRendererSupport.swift */, + B6E3BE0BCB1910EB53E36DDC696E26A0 /* RDEPUBTypesettingPipeline.swift */, + E325739D6639B25FAA6FE5412DE749DD /* Compatibility */, + ); + name = Typesetter; + path = Typesetter; + sourceTree = ""; + }; E0FC55DB56DA89CE8132DB26EFAD6331 /* NaturalLanguage */ = { isa = PBXGroup; children = ( @@ -2493,21 +2478,68 @@ name = NaturalLanguage; sourceTree = ""; }; - E34A5243D06FA39B0B56462DAC551747 /* Pod */ = { + E325739D6639B25FAA6FE5412DE749DD /* Compatibility */ = { isa = PBXGroup; children = ( - EE5C053C6616645F9162F47DB3102BE3 /* RDEpubReaderView.podspec */, - 5282E8702FED953DC43F2FF5E61290C8 /* README.md */, + 5DACBC0641FFC14D7F0309DD76DA75F3 /* RDEPUBCSSCompatibilityLayer.swift */, + 18F8C909773BAAEE76086E976B096FDE /* RDEPUBFontFallbackResolver.swift */, + 1D945C6720DC6601B9B8FA83EE37E965 /* RDEPUBStyleCompatibilityModels.swift */, ); - name = Pod; + name = Compatibility; + path = Compatibility; sourceTree = ""; }; - E5F5C55E92AC2AAD92797EE3CC9ED22C /* Frameworks */ = { + E623FE8E2C5104538087D16EA82D01FE /* iOS */ = { isa = PBXGroup; children = ( - 0865045148005FBCE541CC3C8B179490 /* iOS */, + AFD7E6FDEB959ED4BCBF686887E2BCE4 /* AVFAudio.framework */, + 0E198715507CC19E698253E47DA96954 /* CoreGraphics.framework */, + 443E44FE90506BEC3DFBB838EA344E2B /* CoreImage.framework */, + 5FB8D88DF51900F42796061036A2BC93 /* CoreText.framework */, + 638FEA4EDCBFA6A77620B0068D50175C /* CryptoKit.framework */, + 0BC29D88D25FE64ED65D23570F1FB7DA /* Foundation.framework */, + B73DC0FE59A501CF1EBF64C6ABA20417 /* ImageIO.framework */, + 1D0CB14225ACB0ECDF2CAD95CDA30DD2 /* MediaPlayer.framework */, + 2060195F94C630A87E7A2F7B08B732D6 /* NaturalLanguage.framework */, + 4A6185F233EFF0ED894B7128B2B09821 /* PDFKit.framework */, + BF67AACE84A77AEC6F9CED48AA5BAFDC /* QuartzCore.framework */, + 609A5F780ABE1ABCF9F5BB40419E506A /* UIKit.framework */, + FC1A75CC4E2F1A706E081BDEDDEECC43 /* Vision.framework */, ); - name = Frameworks; + name = iOS; + sourceTree = ""; + }; + E8ABF893717437BDF37DE81B6A56C9B8 /* DocumentFormats */ = { + isa = PBXGroup; + children = ( + A9A49256901179CB08DE0A320BF1D7BE /* RDCBZReaderController.swift */, + D874813FB2A01B629B5DD27CDA40D744 /* RDMOBIParser.swift */, + 2BDBCF238B3B355A20BD8C8FA1F4CE77 /* RDReaderDocumentFormat.swift */, + ); + name = DocumentFormats; + path = DocumentFormats; + sourceTree = ""; + }; + E9085F238564F395310AF033BBFA4A42 /* CFI */ = { + isa = PBXGroup; + children = ( + F00ED19C7AADAD7D6BD1E74A4A3236C3 /* RDEPUBCFI.swift */, + 9F873050819BDCAA6F32B3166C4ED9C5 /* RDEPUBCFICompatibility.swift */, + A141D6AF0DC4700DEB1835448CD930EE /* RDEPUBCFIDOMPathBuilder.swift */, + 135A0766D1D454304DFB4E2D541E3883 /* RDEPUBCFIError.swift */, + 340ED4F9AD1A9332EABEC511A49FD18A /* RDEPUBCFIGenerator.swift */, + 8EE34177DA17E8A2A99610C136D802C2 /* RDEPUBCFIMap.swift */, + 861BA9ED43C06A4CF6845176A27A14E9 /* RDEPUBCFIParser.swift */, + 400E1D62DDD3EBA94D28BCBAEEB8278D /* RDEPUBCFIPath.swift */, + 02CD7653F0EA5B7E1FC6930042F2FC7A /* RDEPUBCFIRange.swift */, + B48683C68BD7645B716F54066EFA211F /* RDEPUBCFIRecoveryEngine.swift */, + BB7C568B890F636C0EFDCC12139EEC9A /* RDEPUBCFIResolver.swift */, + 743D878AA7644CDEA20992BC2F1B2E1A /* RDEPUBCFISerializer.swift */, + 674945CC36054ED9B857A60EACE06070 /* RDEPUBCFITextAssertion.swift */, + 0B846342956B3700F458ACA24E534E17 /* RDEPUBCFIUtilities.swift */, + ); + name = CFI; + path = CFI; sourceTree = ""; }; EC1DF5C41F0676128C483B9B7B6368BB /* UIKit */ = { @@ -2537,17 +2569,6 @@ name = UIKit; sourceTree = ""; }; - EE28F04957DCFD119C7ECC62C7762527 /* Models */ = { - isa = PBXGroup; - children = ( - A5F66A96961A944FE192D39888B026E6 /* RDEPUBAnnotationModels.swift */, - 5620BF46CC66D177218F95274B0899FD /* RDEPUBPaginationModels.swift */, - E47128B5AD65D4FA9BA728CDF73C47E5 /* RDEPUBReadingLocationModels.swift */, - ); - name = Models; - path = Models; - sourceTree = ""; - }; F0B5602D4D4DEF32DA9FFEAE235178C9 /* DTHTMLParser */ = { isa = PBXGroup; children = ( @@ -2611,39 +2632,9 @@ name = FoundationModels; sourceTree = ""; }; - FEC29D84F2496ED6C394DD3BC97F163E /* ChapterRuntime */ = { - isa = PBXGroup; - children = ( - EA44E461F73A280FD2649C38E2A66E15 /* RDEPUBBackgroundTrace.swift */, - 51339BC494F76D8DB8C1A4968689C617 /* RDEPUBBookPageMap.swift */, - AADAFB1246D8B4F7930DFDE508B2271A /* RDEPUBChapterCacheKey.swift */, - A8A2AD9A0A7E27EC46F2AD598250ED2C /* RDEPUBChapterDataCache.swift */, - 1EE7ABC1E00E2AD5CD17521B799DDABF /* RDEPUBChapterLoader.swift */, - EA82E36367E127E1D5C8F2EDC2F60797 /* RDEPUBChapterLocation.swift */, - 9DD53D37218AA3C7D5C7756F00FA21E9 /* RDEPUBChapterOffsetMap.swift */, - 1AA811488B6B1DCC5A5F916EF08D7E0E /* RDEPUBChapterRuntimeStore.swift */, - 18BA62D664A5A8EED63F1B9AE279B4EB /* RDEPUBChapterSummaryDiskCache.swift */, - 3C2ECAEF31AA6DC14F2C3A19A03F050F /* RDEPUBChapterWarmupOrchestrator.swift */, - 0A70E0ECB35D874C1E9699C1CD0F6261 /* RDEPUBPageCountCache.swift */, - 41EC12208AD1A079C60779F6DD30DAC4 /* RDEPUBPageResolver.swift */, - D52E6C5D8864C2E11D3F6143638FFA82 /* RDEPUBRuntimeChapter.swift */, - 510888775BFD893D3C1A93984E31FE11 /* RDEPUBRuntimePageCount.swift */, - ); - name = ChapterRuntime; - path = ChapterRuntime; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 086C172114011A6C77C8DD003CD7E7C8 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E78EF60735A6686F6DF424C052875F62 /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 29CB77F5EC62298B8E19FEFFD791AEAD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2717,6 +2708,47 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3880AAF3B1B181F324889A65137B30E0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 61F79BC766893CDF8A84F85144D54E34 /* DTActivityTitleView.h in Headers */, + 2E86C5D5A6A8ECE76FC710F5A7839A4B /* DTAnimatedGIF.h in Headers */, + 8C8B2A92E5D2BFF214F751639F96DF33 /* DTBase64Coding.h in Headers */, + F16A27973954A3E61FAD73EFC6640B68 /* DTBlockFunctions.h in Headers */, + D9D5695FC5B0818E6FF40AD81BBDE87D /* DTCompatibility.h in Headers */, + 2FC2EC825BFB520C931A20AD3C93DAD0 /* DTCoreGraphicsUtils.h in Headers */, + C22BD9712D5C4C3A6606C9954E16EA3C /* DTCustomColoredAccessory.h in Headers */, + 0CA21E82B6B347BD2370DD2FEFDE44C1 /* DTExtendedFileAttributes.h in Headers */, + 7E351271D44E8B0D5CF5AC5FC3BB5267 /* DTFolderMonitor.h in Headers */, + 3BC5755AD310406848ABECE1CA3F246D /* DTFoundation-umbrella.h in Headers */, + FEB253C1F43DB49770C020219F0D382C /* DTFoundationConstants.h in Headers */, + 728B81996929B1861280CF1FE49C25BA /* DTHTMLParser.h in Headers */, + 8B1D67AF4E9CA4C0401395ED3A381816 /* DTLog.h in Headers */, + 820BE41FD46A46EFA47DCB51E36B3348 /* DTPieProgressIndicator.h in Headers */, + 2B258179860AC499B50883A6410CEE22 /* DTSmartPagingScrollView.h in Headers */, + A075DF2CFDA6B4FC6C13B70594D917EE /* DTTiledLayerWithoutFade.h in Headers */, + 74C2C8965437DD15A1DF7393274EE945 /* DTVersion.h in Headers */, + AE7AB67AEC31EEC92E61BAE9BE952389 /* DTWeakSupport.h in Headers */, + AD0EAEA87AF94B2516AF25C962B1AB60 /* NSArray+DTError.h in Headers */, + 1C01105DE2BEF1F1049F8F0B270F8AFA /* NSData+DTCrypto.h in Headers */, + F3B627391C748B025311A530BEADD8D8 /* NSDictionary+DTError.h in Headers */, + F6E3A67CA745A6087FFCDBA16B856134 /* NSFileWrapper+DTCopying.h in Headers */, + AEDF5207E4F50F04EE2175D6491153BB /* NSMutableArray+DTMoving.h in Headers */, + 7CEFDC81E5299572FF92465093A490F8 /* NSString+DTFormatNumbers.h in Headers */, + 70AE1C2638D37EFABDC722F9EEFE35C4 /* NSString+DTPaths.h in Headers */, + B777B94871B481D05AA3E0AA2CB24294 /* NSString+DTURLEncoding.h in Headers */, + ED9E121663FA208E8DF83A62EF140304 /* NSString+DTUtilities.h in Headers */, + F2C88E61F4802BC84DF54D9DBBB2EDC6 /* NSURL+DTAppLinks.h in Headers */, + 7C074EB51A531B62A6EB9D8B825FFFFA /* NSURL+DTComparing.h in Headers */, + 46D4BDA7B3DB868CE98E5733017F3E86 /* NSURL+DTUnshorten.h in Headers */, + 8188B3342AF06DDB51B33015A01A2F40 /* UIApplication+DTNetworkActivity.h in Headers */, + 98EB67ADA2A245446B8A17B09E031AE1 /* UIImage+DTFoundation.h in Headers */, + ECDEFC0141EF16D989D43B83E54A9BD9 /* UIScreen+DTFoundation.h in Headers */, + 768D72C3538A9E008887345F76DA4D82 /* UIView+DTFoundation.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 44C1420C6D84F4B642A502E7BFDA3E99 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2725,52 +2757,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 7B62A2629B260921A757EB5A184ED2AA /* Headers */ = { + 84BD9781C18EA51526C6CA88BA58DF12 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A42CE42ADF162F25E1B2EDE4220B7B51 /* RDSpeechReaderView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7F63C2276BE0AF157A39507DEA12294D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5980E58B9A264939FA5CBE838154F066 /* DTActivityTitleView.h in Headers */, - 5CE19D28BB2108D3D10A2D8150AE1CB1 /* DTAnimatedGIF.h in Headers */, - 14D05471258FA4D33B016F47CBD4686F /* DTBase64Coding.h in Headers */, - 1C7C1FDE094C83066C87B015B477B63D /* DTBlockFunctions.h in Headers */, - 21716775545B74C62A2BC9D1F5399267 /* DTCompatibility.h in Headers */, - ED66F09AF6E592211C9A021A11503721 /* DTCoreGraphicsUtils.h in Headers */, - 414209E3808FAACFE4C679EBFA8965B2 /* DTCustomColoredAccessory.h in Headers */, - A15EC52278A2D619B7780AAB8D88554A /* DTExtendedFileAttributes.h in Headers */, - 5D5071CE8770A20C085423D3421BEDCD /* DTFolderMonitor.h in Headers */, - 6993659598D8EC4FAA57E264AFE676CD /* DTFoundation-umbrella.h in Headers */, - 1CC6284347B8897DE0D4AC7BE196EB03 /* DTFoundationConstants.h in Headers */, - DAB89786137F704B7DD8334EF21E58CD /* DTHTMLParser.h in Headers */, - 48897F07CD74DA89D61337A3832233BE /* DTLog.h in Headers */, - 3D9793416203988F167E189744A50298 /* DTPieProgressIndicator.h in Headers */, - 3AED3330F76DB3D002DABE13B11DDFD2 /* DTSmartPagingScrollView.h in Headers */, - BF9032BC8A43F1AA4C4D575BD937115E /* DTTiledLayerWithoutFade.h in Headers */, - 8A9B2F5A2151EE12E662F33343C04458 /* DTVersion.h in Headers */, - 1FD0A2E78909C51ABC12325319144E33 /* DTWeakSupport.h in Headers */, - 9226F99BDF2BC648729B97FAD08A5F70 /* NSArray+DTError.h in Headers */, - 0A0A9938628FC39F96C5FC206CC3CE26 /* NSData+DTCrypto.h in Headers */, - BF076B89A32E454133942582B00EC922 /* NSDictionary+DTError.h in Headers */, - 014249F0755B88BB23D3DCE2B412EEE7 /* NSFileWrapper+DTCopying.h in Headers */, - 6C87E6144D0723E917B879E3834B7972 /* NSMutableArray+DTMoving.h in Headers */, - 1BCB2EB28C3C067487EF3FEB7AB2C3F8 /* NSString+DTFormatNumbers.h in Headers */, - 53066BC799D5536B28341C163C201842 /* NSString+DTPaths.h in Headers */, - 30C76262557529A72A679968DF501160 /* NSString+DTURLEncoding.h in Headers */, - 1B09F42416EFE5283FC7330972AC0C76 /* NSString+DTUtilities.h in Headers */, - 357B7E80FF2F9CE5FDFBDFBB5A492305 /* NSURL+DTAppLinks.h in Headers */, - 8E63D42E7CE0C90FD93AD0F874DA94BE /* NSURL+DTComparing.h in Headers */, - BF4D756EA447B0B50D44D42718F26482 /* NSURL+DTUnshorten.h in Headers */, - 8C358267F5C859D9DC55A46DBBC0F2A8 /* UIApplication+DTNetworkActivity.h in Headers */, - 4213BB00548C581AD1EBCCC1F4787A88 /* UIImage+DTFoundation.h in Headers */, - 21F1E8FEECFB4CE5A7138DE50CF7E7C0 /* UIScreen+DTFoundation.h in Headers */, - F6AFE52A2B53004FFB27B8B3A3030452 /* UIView+DTFoundation.h in Headers */, + 859D2BC60B7EAEFD562E13D22F1D836D /* ZIPFoundation-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2782,27 +2773,35 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B5FA500E4B4E4111AF93349D7FBE9225 /* Headers */ = { + B3E4855E64B423F71CCC8B448D4E49F6 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - EF4A58B335C39B19EF4DFE059345BAA2 /* RDAIReaderView-umbrella.h in Headers */, + 063A88FB321E454069155A625FAC1A29 /* RDEpubReaderView-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C517EEDF0F05B0A38297AD23F0DAB394 /* Headers */ = { + B5AE11C4A0F087E3E12BD229195B0408 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3A3CB29C0A090DA053B50CD7FD0E2C3D /* RDEpubReaderView-umbrella.h in Headers */, + 2D9F451FCE658C36FBD90A4B9FB6E807 /* RDSpeechReaderView-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EFEA00C005C75E9D36153726B7D1D10F /* Headers */ = { + BC871C6B9542078FDAAC019176925B44 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 52912BFCB288B0906F8F9E9D3BD03E1F /* ZIPFoundation-umbrella.h in Headers */, + 29DA059FFB3372A3405B1F483D9F9DDF /* RDAIReaderView-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E12779AE77CEC421C1AD0A727E8D0D43 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B2166C7F52325B76D2854EBAF3B4A4F9 /* SnapKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2811,11 +2810,11 @@ /* Begin PBXNativeTarget section */ 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */ = { isa = PBXNativeTarget; - buildConfigurationList = 0360A2CBBE7F40DDCF7BD6D9346200E7 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; + buildConfigurationList = 88DFAB0C5D472D4A00EA6904F6B72B8C /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; buildPhases = ( - 6B3153A3D95687C42CAD370470F6ADCC /* Sources */, - 26559404D2377015324B9F6CF2335247 /* Frameworks */, - C722EB716465B715A9A7D284CB086324 /* Resources */, + D7B482915F333DB053E9B3FF533B0E8B /* Sources */, + C9EC9582E359734B524E8B4D9A1F2BDC /* Frameworks */, + 815F09C1BEF66826AB7211C15D3A5AAA /* Resources */, ); buildRules = ( ); @@ -2828,17 +2827,17 @@ }; 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 64E3CBFB2E3259592BD29A3038A44B1F /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildConfigurationList = ACF0A1F60E8D8F76664F3C28A623BC64 /* Build configuration list for PBXNativeTarget "SnapKit" */; buildPhases = ( - 086C172114011A6C77C8DD003CD7E7C8 /* Headers */, - DBF30937F1B27AE4D83AC1939FCFB01F /* Sources */, - 60EDC33B688AC55B5698518B2AD0DB0D /* Frameworks */, - 331D7E5E1CF034CB1D52196532C07DD1 /* Resources */, + E12779AE77CEC421C1AD0A727E8D0D43 /* Headers */, + 3809A6B5AA40EF4B7F0DD5ED5C2935D8 /* Sources */, + 3391796EF339E0AEC7120220AC387870 /* Frameworks */, + B53CF50EEBDADAAA060BF8BAB83B7C59 /* Resources */, ); buildRules = ( ); dependencies = ( - F2B0C0753DA799589EE86F0FBA1565DC /* PBXTargetDependency */, + F2EC52C5D4A57624BDD402CBAE177214 /* PBXTargetDependency */, ); name = SnapKit; productName = SnapKit; @@ -2847,12 +2846,12 @@ }; 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = B39F74DCB4F025606C8D0038AE8522D9 /* Build configuration list for PBXNativeTarget "RDAIReaderView" */; + buildConfigurationList = 405AA89C9ECEED358343DF9D47442DFD /* Build configuration list for PBXNativeTarget "RDAIReaderView" */; buildPhases = ( - B5FA500E4B4E4111AF93349D7FBE9225 /* Headers */, - FDA7CA3B5D824C6440575FD64AB02520 /* Sources */, - EBBF08881D4C8BD2BF8B87ED2DFA511B /* Frameworks */, - 173C7CFE3F55DD87AFDBE1EC5B9901AF /* Resources */, + BC871C6B9542078FDAAC019176925B44 /* Headers */, + D73049BF56BC8CA1EDE0BB99E8536406 /* Sources */, + FAAA7EB0241A5F47FCDCE80019C03BE1 /* Frameworks */, + 51DEF707B1999C5A4A6966EECE237897 /* Resources */, ); buildRules = ( ); @@ -2875,9 +2874,9 @@ buildRules = ( ); dependencies = ( - F9191E83D3358FBA266553022C856B47 /* PBXTargetDependency */, - E7694395F54F46F8381C2C1EE948D916 /* PBXTargetDependency */, - B4478053F9E8036E2C99208643561D5F /* PBXTargetDependency */, + 63FFF77F305A945F6DF0D41454036F57 /* PBXTargetDependency */, + CF63D823A1BCA96531A6D02A6B07E4A5 /* PBXTargetDependency */, + 42C1A7E2942980AB6B984615E00902D5 /* PBXTargetDependency */, ); name = RDPDFReaderView; productName = RDPDFReaderView; @@ -2896,14 +2895,14 @@ buildRules = ( ); dependencies = ( - 0F381A4930501641E8F6760587BBA2C2 /* PBXTargetDependency */, - D578A051EF503FB8EDBCC5CD1B609545 /* PBXTargetDependency */, - 024C591CE25B444779EAE0907CC1375D /* PBXTargetDependency */, - E94EB867FB3FB5780F50629A54149FC0 /* PBXTargetDependency */, - DE04E5B678B6CA201E24C786B3D69573 /* PBXTargetDependency */, - 248D14A413D4F8109E81E876B6C7269D /* PBXTargetDependency */, - F8C9B690D26DCCC4C8B18837001B7536 /* PBXTargetDependency */, - 19A4C847AB807C66B93F53A7F4DD49CC /* PBXTargetDependency */, + 9E4845C7BD02B359C6C66763674EF25B /* PBXTargetDependency */, + 52BCC4A19191B906F794A89BB6DC4E43 /* PBXTargetDependency */, + 8C316BD3F59179826FD212F31764533B /* PBXTargetDependency */, + 8CCD3E65771647DD50CBBC1AE1B84CDE /* PBXTargetDependency */, + 5BA37A3BEA7B80B3899F5AFAF7286CA0 /* PBXTargetDependency */, + D1157C5ACAE4229432F1CE0A595803CF /* PBXTargetDependency */, + 1F74E8ECF506A2E13D69E00CB12EAEBD /* PBXTargetDependency */, + FCEC1B8D28905A556834FE6F4E5FA86F /* PBXTargetDependency */, ); name = "Pods-ReadViewDemo"; productName = Pods_ReadViewDemo; @@ -2912,11 +2911,11 @@ }; 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 3C795AC9AB79C38D7D5ABE25002B4333 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; + buildConfigurationList = DE7AB0E01615B50F23381FFAEFF20E5B /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; buildPhases = ( - 9022983CC7159FD41F9E607B69B3B279 /* Sources */, - E1DF268260BBDB79581F1102271D0AE4 /* Frameworks */, - 5D43C1BDB8785C2615ADF29ED88FF51A /* Resources */, + 3796DB175D65E1B8CB06726B730C3365 /* Sources */, + B44B7AA9530B98040DD47CBDA92139EA /* Frameworks */, + F928DB8600445DB0B949E5B562A2D359 /* Resources */, ); buildRules = ( ); @@ -2929,12 +2928,12 @@ }; 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = A8A434CCAF88ED38465F12E695799F3B /* Build configuration list for PBXNativeTarget "DTFoundation" */; + buildConfigurationList = 90D5F965BB40CB8C886D5F80738D76A7 /* Build configuration list for PBXNativeTarget "DTFoundation" */; buildPhases = ( - 7F63C2276BE0AF157A39507DEA12294D /* Headers */, - B5AB1C401FEE34A79826B450C2C3B9C1 /* Sources */, - 838BAC16F8EB3094BE7BC270BBFA1DE1 /* Frameworks */, - FC44BCAB84BE97BF8E377294C766FD45 /* Resources */, + 3880AAF3B1B181F324889A65137B30E0 /* Headers */, + FB4EF7F1D5A790146D0A8C362A41E9EB /* Sources */, + 65386CE6376B0C3297DCF6B31658D126 /* Frameworks */, + 18D2ACB499AFFB915BA59E1DB671C8EA /* Resources */, ); buildRules = ( ); @@ -2947,17 +2946,17 @@ }; AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 50CD9D0637599E6F746E458297CF9D17 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; + buildConfigurationList = B4EFCC222F2A780FF376179B1C60098D /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; buildPhases = ( - EFEA00C005C75E9D36153726B7D1D10F /* Headers */, - A5F59A74AAB0EC27108240C01270BEB5 /* Sources */, - CD7FBA45DB00ADF722E01E0AE3779E02 /* Frameworks */, - 3C292E01AED8BA362BE1C8429EC0FBF4 /* Resources */, + 84BD9781C18EA51526C6CA88BA58DF12 /* Headers */, + B992E8A05E2B8924BE5AD80B55132A31 /* Sources */, + BFB3736B95B19241674697B82F71A24F /* Frameworks */, + DCE6FF4AC65B70A5DB495AEF2EA06700 /* Resources */, ); buildRules = ( ); dependencies = ( - 4B210AD5861A1A96A332E1DB585A46C3 /* PBXTargetDependency */, + 535BA5CE3CED388B6D328526C1EBE529 /* PBXTargetDependency */, ); name = ZIPFoundation; productName = ZIPFoundation; @@ -2976,8 +2975,8 @@ buildRules = ( ); dependencies = ( - 2572918456CF71DA3F29818A05ABD216 /* PBXTargetDependency */, - AD243A82A9C0AEC6847FF66C8840E6E2 /* PBXTargetDependency */, + FBF6F2679B3714B32673C54517297A6D /* PBXTargetDependency */, + FF2A24A406F8D7B05FAB19FF9BDFB00A /* PBXTargetDependency */, ); name = DTCoreText; productName = DTCoreText; @@ -2986,11 +2985,11 @@ }; C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 630E67E726745F8F7EBBB15A664D09F2 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; + buildConfigurationList = EB7FE7AF01BFFEBE77A46FDC98F484EA /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; buildPhases = ( - EDA3C8C069C08CDAA81EB2528164720E /* Sources */, - 258A70A95FD06C42A74DA2A5E7D0DADD /* Frameworks */, - AC5354D719BF48B145B1C1E134FD76B3 /* Resources */, + 42D6C5C2970F2E5A7E40A33E67F081A4 /* Sources */, + 1F7EF4E26D92CE93E8A9095F2249D759 /* Frameworks */, + DA6D65AA52555577B4F984C423885E0A /* Resources */, ); buildRules = ( ); @@ -3003,17 +3002,17 @@ }; CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = 5B44221983F052B7553F6B2779CC8345 /* Build configuration list for PBXNativeTarget "RDSpeechReaderView" */; + buildConfigurationList = ADFB5EC9B1DA991B04C8903769EF834E /* Build configuration list for PBXNativeTarget "RDSpeechReaderView" */; buildPhases = ( - 7B62A2629B260921A757EB5A184ED2AA /* Headers */, - 8A8859A21B8E2957FA7F6940AF5B520E /* Sources */, - AD01177C0DB22F1BCA0F7F6A96C00062 /* Frameworks */, - 3D8C647E8CE1FA0A8E01D75C8F9FAF35 /* Resources */, + B5AE11C4A0F087E3E12BD229195B0408 /* Headers */, + 7B1A9147AD781B8C85299490F212E46A /* Sources */, + E5E3B4295E71D5850733F3571A6D139C /* Frameworks */, + 59EDB5EA1A5FE10282A14A89D0598FD0 /* Resources */, ); buildRules = ( ); dependencies = ( - 1462C34F341D1B4C735128082B1D106B /* PBXTargetDependency */, + E55650B2223C316B3097288B971F9456 /* PBXTargetDependency */, ); name = RDSpeechReaderView; productName = RDSpeechReaderView; @@ -3022,11 +3021,11 @@ }; E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */ = { isa = PBXNativeTarget; - buildConfigurationList = A6097DEBED8762FC0CF17FBE5E9F3F86 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */; + buildConfigurationList = 16A5B3C4A095036807F7094109F29449 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */; buildPhases = ( - A2D4C2E481D04B9CAD59D196FFED0CB2 /* Sources */, - F695CAAA20414789F09BB8CC4D5DABE4 /* Frameworks */, - AB278AB10AC4ED63CEF83DC7A86F3C84 /* Resources */, + 541FFE865648B06764067D97C8898EB8 /* Sources */, + F9B4D1354C134B52E8C87C971743C7CE /* Frameworks */, + F65D4491AD52104702AA22E299F50E71 /* Resources */, ); buildRules = ( ); @@ -3039,22 +3038,22 @@ }; FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = 27C3BF37191BEC7B232544E76D4A3A84 /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */; + buildConfigurationList = AB65638284CBD3373B8D5B6C1314CFFC /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */; buildPhases = ( - C517EEDF0F05B0A38297AD23F0DAB394 /* Headers */, - 0891830A933D15255C31E430B71B8A49 /* Sources */, - 8C8F2B1F5A2E36E3AE95EAEAAE03F780 /* Frameworks */, - 9902021A002CAFBD7F850297D2BAB1A5 /* Resources */, + B3E4855E64B423F71CCC8B448D4E49F6 /* Headers */, + CCC0D335450A0E9051C1C7073A62FA83 /* Sources */, + 5EEBA8E20E44CA19A794938A2381523B /* Frameworks */, + 829E63FEF2D4F139817DF654BFFF142E /* Resources */, ); buildRules = ( ); dependencies = ( - E484BE24A2FE86EA9C9A3524401B8192 /* PBXTargetDependency */, - 88BCAFF12D3803A063766F4D5C30667E /* PBXTargetDependency */, - C09951035419916D448EA490B5A655D4 /* PBXTargetDependency */, - 6623C980109567118E7F3702DCC999C0 /* PBXTargetDependency */, - 28C1AC837072796CCABD3BD21996776D /* PBXTargetDependency */, - BA1B18C040E4323B9F5771A5BCFD85D4 /* PBXTargetDependency */, + 07407F12428F13D3E4006FC4CA276CE0 /* PBXTargetDependency */, + 219A38586F8223C049B64431795D2B04 /* PBXTargetDependency */, + 8F5AFC4AF9141D12FA46A946D211D7BF /* PBXTargetDependency */, + C262447253885048E17A57AF21378C64 /* PBXTargetDependency */, + FE1A32BF91015B0BAC298BA898CAA5DF /* PBXTargetDependency */, + 0818A35B3F5AFB1A0122EDC08DFCC0FB /* PBXTargetDependency */, ); name = RDEpubReaderView; productName = RDEpubReaderView; @@ -3103,7 +3102,7 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 173C7CFE3F55DD87AFDBE1EC5B9901AF /* Resources */ = { + 18D2ACB499AFFB915BA59E1DB671C8EA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -3117,14 +3116,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 331D7E5E1CF034CB1D52196532C07DD1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C949788FC080B9F92411CBFFD82AEB81 /* SnapKit-SnapKit_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 378BF991D3B318AACBF6D78F57218233 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -3133,34 +3124,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3C292E01AED8BA362BE1C8429EC0FBF4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AD94FDA8965EA1EBBD5E0438C640409D /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3D8C647E8CE1FA0A8E01D75C8F9FAF35 /* Resources */ = { + 51DEF707B1999C5A4A6966EECE237897 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 5D43C1BDB8785C2615ADF29ED88FF51A /* Resources */ = { + 59EDB5EA1A5FE10282A14A89D0598FD0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 91E518F947290E08163684BB1A0AD7BB /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9902021A002CAFBD7F850297D2BAB1A5 /* Resources */ = { + 815F09C1BEF66826AB7211C15D3A5AAA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5E520D912C064B9781FD02FF703B11A4 /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */, + AB985A7411525C66F09A2386B75DA422 /* default.css in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 829E63FEF2D4F139817DF654BFFF142E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 35A02EFDD20399BE1910CB5C855BCBFA /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3171,256 +3161,58 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AB278AB10AC4ED63CEF83DC7A86F3C84 /* Resources */ = { + B53CF50EEBDADAAA060BF8BAB83B7C59 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7C7998DA70BCD963312E72F3F76EB360 /* cssInjector.js in Resources */, - A50366094D551204E6CB771F053467AA /* epub-bridge.js in Resources */, - A32524C3BBFC8361B5A77404293349A1 /* epub-fixed-layout.html in Resources */, - 2D81B7C446C9C00B2C516E6996D9457D /* rangy-core.js in Resources */, - 76844664CDB792B3186A4759C1A6C443 /* rangy-serializer.js in Resources */, - 2E1221BBB32678DFDA675FFF50391819 /* WeReadApi.js in Resources */, - 7DDDADD3A75BF8651607CB47BA00B647 /* wxread-dark.css in Resources */, - BF44EE27CAAA95BC66ECC24A572D720E /* wxread-default.css in Resources */, - D1328689F916D7DE0F2396E2F8973CEC /* wxread-replace.css in Resources */, - 36C1DEB5DF32B53B2903DFE887443AE0 /* wxread-replace-latin.css in Resources */, + 6015E451BF1858D3DEAABC76AA62D950 /* SnapKit-SnapKit_Privacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC5354D719BF48B145B1C1E134FD76B3 /* Resources */ = { + DA6D65AA52555577B4F984C423885E0A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9A100F613599FC91999C704C0A1F1BEC /* PrivacyInfo.xcprivacy in Resources */, + ED439C8212BEA9A325731D47E029DB12 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C722EB716465B715A9A7D284CB086324 /* Resources */ = { + DCE6FF4AC65B70A5DB495AEF2EA06700 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB81526E21D5929E1B1648FE1E0075EE /* default.css in Resources */, + 6622C4F4EAB0B5CAF9505377FD99AA2B /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FC44BCAB84BE97BF8E377294C766FD45 /* Resources */ = { + F65D4491AD52104702AA22E299F50E71 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 890B44E459F47281270749B9556E84AF /* cssInjector.js in Resources */, + E08640A58BF20D612FB475697C49BCC4 /* epub-bridge.js in Resources */, + 9FB9830AD67375F837C5CF062E5BFB6D /* epub-fixed-layout.html in Resources */, + BCE13F950003B44D6DE4B0A3D73D4045 /* rangy-core.js in Resources */, + 6E11974227C5789EF307B73FD968E54F /* rangy-serializer.js in Resources */, + D0CBF9AF4D0A627745C22DA6500FE369 /* WeReadApi.js in Resources */, + 9717A7F4BC0C90F04397A1361BB7F71C /* wxread-dark.css in Resources */, + 52C7F205E10750FE3DB39E685D6B00B0 /* wxread-default.css in Resources */, + 2387E55634D5FB72111ACF2EEEBD6139 /* wxread-replace.css in Resources */, + 1359FECFF2E8215E574C69F0099D11F5 /* wxread-replace-latin.css in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F928DB8600445DB0B949E5B562A2D359 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A0D1C65F575B626B24D92A841187495 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0891830A933D15255C31E430B71B8A49 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 22485CB22E048DEB02531E40C36B78DD /* RDCBZReaderController.swift in Sources */, - 0E8556C840877C1148B5D096999F0A35 /* RDEPUBAIContentProvider.swift in Sources */, - C8CF1F5610D78DA49FEB9FB2D5CFA4E2 /* RDEPUBAnnotationEditorViewController.swift in Sources */, - 26B43D124F927B5A192121E2DAFEBCBA /* RDEPUBAnnotationModels.swift in Sources */, - 1B6351C2682D454F363D37CC64CE6F03 /* RDEPUBAssetRepository.swift in Sources */, - 06870EC1863AADE7D8B2C9763F177876 /* RDEPUBAttachmentNormalizer.swift in Sources */, - CB28C33F300061D6B8CC5DEDED5E6E81 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, - 73C6E934E7FE5FE2D1A75BD158D5A486 /* RDEPUBAttachmentTooltipView.swift in Sources */, - 3813C43484C6A1175B47BE62E5A37AEA /* RDEPUBBackgroundCoverageStore.swift in Sources */, - CC311A5C6FD382E2E7B0ACBC160FEBE3 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, - B30FE8B7FE2DC01D2A6399BA24B46EE4 /* RDEPUBBackgroundTrace.swift in Sources */, - 1D53FB2F09A7E9704EBD84ED30B0B1CE /* RDEPUBBookPageMap.swift in Sources */, - 3F92A8FBCF50F172D4CB30137CE10F35 /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, - 982A4A2A2E9436CF9C57A3D77ED731A0 /* RDEPUBCFI.swift in Sources */, - 17337E40B13F3CFCEDA9BE1AF9C73EC7 /* RDEPUBCFICompatibility.swift in Sources */, - B4345AD562848E534F48169C04BFF890 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, - 9A5DFEC1E2E005ED02C8246C92CB4605 /* RDEPUBCFIError.swift in Sources */, - FFBF3C8099E65280270A5369095790B2 /* RDEPUBCFIGenerator.swift in Sources */, - C6A1AF89F95D87FD679366B8A1588D66 /* RDEPUBCFIMap.swift in Sources */, - 783B3E117FED874BD3A8456FF8AA41A5 /* RDEPUBCFIMarkerInjector.swift in Sources */, - AA6A82E91F16300F8B7A4BF71784B911 /* RDEPUBCFIParser.swift in Sources */, - 2E14605A6460335AB12B31B3A329F52B /* RDEPUBCFIPath.swift in Sources */, - 79585A90E8D123CFEEA49D216E027E00 /* RDEPUBCFIRange.swift in Sources */, - 719EC088BB401166907C358B25061959 /* RDEPUBCFIRecoveryEngine.swift in Sources */, - 8EDFE061B6EADFEFD075D45814490FC8 /* RDEPUBCFIResolver.swift in Sources */, - 895D1E1E1A62F977D75D4DBB5ABD97E7 /* RDEPUBCFISerializer.swift in Sources */, - B1909D0BE6FF808617D7FABF13F34D42 /* RDEPUBCFITextAssertion.swift in Sources */, - 5CBDA7783934999491663AB204B5A064 /* RDEPUBCFIUtilities.swift in Sources */, - DADBC15D6C15D83B2106F110DF7B1356 /* RDEPUBChapterCacheKey.swift in Sources */, - 30BEF39A9B359BE62E758B3677D6B84C /* RDEPUBChapterData.swift in Sources */, - 7A14BEF93EBE86A497CA99BB39CCDAC8 /* RDEPUBChapterDataCache.swift in Sources */, - 1548259806AC2F2B1C7E8391DAA23341 /* RDEPUBChapterDisplayContentCache.swift in Sources */, - 0605C6A0977CAF4D7FD6546BBDB108C1 /* RDEPUBChapterLoader.swift in Sources */, - E0DF6958C36F9AC1C6CF5CB0E33EB7C4 /* RDEPUBChapterLocation.swift in Sources */, - 015030FB0BE3DB44A72B84FA3F80DFF0 /* RDEPUBChapterOffsetMap.swift in Sources */, - 504FA151E73E60DCA3FF4B5EE8CD3934 /* RDEPUBChapterPageCounter.swift in Sources */, - 7F9455A2C1074288090AB69680B596AD /* RDEPUBChapterRuntimeStore.swift in Sources */, - BAEA3B45EDDBE2BAB65178B41B93CD1F /* RDEPUBChapterSummaryDiskCache.swift in Sources */, - 2B8511EDF7A3E8E53D235087910D9CB5 /* RDEPUBChapterTailNormalizer.swift in Sources */, - C3552B6602F4064DAF4C44832B83993D /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, - 9C6ECACF377F5276D76DB9DC47BC173A /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, - 944C7E54F78139E21144CE503ACBA3EF /* RDEPUBCSSCompatibilityLayer.swift in Sources */, - 60A37D279ACFAF6C62A16016309CE762 /* RDEPUBDarkImageAdjuster.swift in Sources */, - 561D7DED747942143368E79909C9061A /* RDEPUBDecryptingImageAttachment.swift in Sources */, - F76246F3FCBCCABA28EF06D3018C610B /* RDEPUBDTCoreTextRenderer.swift in Sources */, - 83B6B5367E1D465C3E6428BD0B369AD4 /* RDEPUBFixedLayoutTemplate.swift in Sources */, - FAF3AF65CC90E56FF4C46FDB9F773017 /* RDEPUBFontFallbackResolver.swift in Sources */, - F393DC307AD6BED2DE8083FF12B8AAE1 /* RDEPUBFontNormalizer.swift in Sources */, - BDE19A6478FC06A5F965BF6C465C0EE8 /* RDEPUBFragmentMarkerInjector.swift in Sources */, - F767C2861699E671762169C9F347291C /* RDEPUBHTMLNormalizer.swift in Sources */, - 241586B93762F9D98786D76EC098B7D9 /* RDEPUBImageViewController.swift in Sources */, - 9AE7B03D33A2C889C9B0100DD2AA632B /* RDEPUBImageViewerCoordinator.swift in Sources */, - 28D89515B1F7B8051B6C8959D72C9366 /* RDEPUBJavaScriptBridge.swift in Sources */, - 7DB3CCA3839351CB377770E5870E69A9 /* RDEPUBJumpSession.swift in Sources */, - 51D6A2884ADB8102F2CDFD0F4FC4284D /* RDEPUBMemoryProbe.swift in Sources */, - 735EE64EDAD773096F1927E8213282A7 /* RDEPUBMetadataParseCancellationController.swift in Sources */, - CC4164935D8A9B4D93902AD737DD4BE5 /* RDEPUBMetadataParseWorker.swift in Sources */, - 94A66BC1215EFE0A73B37A373C0A3281 /* RDEPUBModels.swift in Sources */, - 64004A893517583C803AEAB3872022B6 /* RDEPUBNavigatorLayoutContext.swift in Sources */, - 06C626009858F55BA7AB71C715C99FF4 /* RDEPUBNoteDetector.swift in Sources */, - 2CFAFBA02504A70F5E2C4371534955E9 /* RDEPUBNoteModels.swift in Sources */, - 33410924D34E540BA70B8B5399EB5D4D /* RDEPUBNotePopupCoordinator.swift in Sources */, - 09BA8E7D20E0618BCF471289D6E7239A /* RDEPUBNotePopupViewController.swift in Sources */, - 2B0FB35E1C7A1961D824C5958EE56B6D /* RDEPUBNoteResolver.swift in Sources */, - 80C8117B653528732041FB531659CE87 /* RDEPUBPageBreakPolicy.swift in Sources */, - 296FF829157CD0B704761BD5C7DF0C3B /* RDEPUBPageCountCache.swift in Sources */, - 139798AD5B222F7C1B19899AF80B5CE7 /* RDEPUBPageInteractionController.swift in Sources */, - A75112BB97D2EFA12C7D55731B839ED5 /* RDEPUBPageLayoutSnapshot.swift in Sources */, - 6B132E2AD8BB1F2FB21D9F6F7D068C1A /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, - 32DAF222F4D8F7D244F10A0CD3BE3BB2 /* RDEPUBPageResolver.swift in Sources */, - C43DF680887B38560CA7723511ABFCD6 /* RDEPUBPaginationCacheCoordinator.swift in Sources */, - 46C63092880297CC1FEA04268121642A /* RDEPUBPaginationModels.swift in Sources */, - F4DA93526D482CD7726856E4C2A2E9AA /* RDEPUBPaginator.swift in Sources */, - E87592F84B4E59ED5BD8CBBDF89FE88B /* RDEPUBParser.swift in Sources */, - F1502BB239BE78912B8EAE1419625EC3 /* RDEPUBParser+Archive.swift in Sources */, - F289E437878B685F00B6F9EC04194BDD /* RDEPUBParser+Package.swift in Sources */, - 3327189FE732B9F7C893297271C8E70E /* RDEPUBParser+ReadingProfile.swift in Sources */, - E5F7835B3C29F9A5C5D507D1B4666AF7 /* RDEPUBParser+Resources.swift in Sources */, - 97EBC8BCC30E3F1E0FAB723C9023353F /* RDEPUBParser+TOC.swift in Sources */, - 6C992E1A2FBD5D966690C03F54B81656 /* RDEpubPlainTextBookBuilder.swift in Sources */, - 449479B94F78893071A747CA22DEFB2A /* RDEPUBPreferences.swift in Sources */, - A871845DAB142E90B72451F579AC8727 /* RDEPUBPresentationRuntime.swift in Sources */, - F9BDB8FBA84964F4DB833D71BAE81634 /* RDEPUBPublication.swift in Sources */, - 8F7CFA48B393899FA35E17A67F683790 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, - 182E369F1A51C69E281F4A32F4C75A3B /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, - 0CF0135E674D9001A4B648AECCB06957 /* RDEPUBReaderBottomToolView.swift in Sources */, - EECC41D9B7E2AF7BD1C555674FD9877F /* RDEPUBReaderChapterListController.swift in Sources */, - 6E070BD7200B70ABD28128435066780B /* RDEPUBReaderChromeCoordinator.swift in Sources */, - D1E2B4410F989D0985B80F5E12F992C3 /* RDEPUBReaderConfiguration.swift in Sources */, - 6650D31565F5BD0E11FEC0F514E700DB /* RDEpubReaderContentCell.swift in Sources */, - 9EA8EE799B5D9646DF6F68C316710251 /* RDEPUBReaderContext.swift in Sources */, - 67008C120F021B02D674C8957B3351DE /* RDEPUBReaderController.swift in Sources */, - 5DC8894BAE6FB562F51C90E96BEB5E60 /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, - C9A313C280E6F05E82ADF54F90E7264D /* RDEPUBReaderController+ContentDelegates.swift in Sources */, - E4D14A78B339CD30F305B4DABF0F4F5E /* RDEPUBReaderController+DataSource.swift in Sources */, - AD31947EF7020717B2FFCB898C31DCAE /* RDEPUBReaderController+ExternalLinks.swift in Sources */, - 8877BDF2C129627BE7197343C727EAFA /* RDEPUBReaderController+LocationResolution.swift in Sources */, - E2E2499B133E906963BF99672FF269D4 /* RDEPUBReaderController+Orientation.swift in Sources */, - 29CD7DA003E4881406DD828AC2BEB203 /* RDEPUBReaderController+PublicAPI.swift in Sources */, - 1514F1D466B8422AE5089E7C9F23219C /* RDEPUBReaderController+RenderSupport.swift in Sources */, - 2A7A9E2D867D0F878B468725D814118B /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, - 27691FDEF4012C72412E27C97A68431F /* RDEPUBReaderController+TableOfContents.swift in Sources */, - AFEF1073C525D47CB9911E73713176A5 /* RDEPUBReaderController+Trial.swift in Sources */, - 36EFE5DFB1FE7968EEFB9264FFF87CCD /* RDEPUBReaderDelegate.swift in Sources */, - 03B012C7959735A0A532A444902DBCF6 /* RDEPUBReaderDependencies.swift in Sources */, - 53EA9E7B4DEBBEE14B6B83FF7D5F0B2F /* RDEPUBReaderEnvironment.swift in Sources */, - 7C31D700E05A097A42458D49D2561DB4 /* RDEpubReaderFlowLayout.swift in Sources */, - E19C39D306A49A72BAAB6E8DA92FF005 /* RDEpubReaderGestureController.swift in Sources */, - AE74D8EAC25A8CB489174D28E193C232 /* RDEPUBReaderHighlightsViewController.swift in Sources */, - 4ED2E0F8F0C2889F3DC707D165024E10 /* RDEPUBReaderLoadCoordinator.swift in Sources */, - 68A504E33F4476A37D95AF974D9D198E /* RDEPUBReaderLocationCoordinator.swift in Sources */, - 77BB20EA9E7E317CEE37A69DD487CED6 /* RDEpubReaderPageChildViewController.swift in Sources */, - 2D90619922508AD78278F2D1D7169DC4 /* RDEPUBReaderPaginationCoordinator.swift in Sources */, - 40DEA7D35972343F41C629EE3AF5F7F0 /* RDEpubReaderPagingController.swift in Sources */, - 893B6523077FC73B80174909FA8EC091 /* RDEPUBReaderPersistence.swift in Sources */, - 3CF692B9C6EA33FD628CD3ECCDD9462E /* RDEpubReaderPreloadController.swift in Sources */, - F16A85F5C1C7AB77E3F59A180E4949FD /* RDEPUBReaderRuntime.swift in Sources */, - F7ADD6FA9A99420D022B5DACBCB65BAD /* RDEPUBReaderSearchBarView.swift in Sources */, - 202E57B1A71FF32D64CA97314E0C6C6D /* RDEPUBReaderSearchCoordinator.swift in Sources */, - 1165297CCE80FFFE9D1895606E803232 /* RDEPUBReaderServices.swift in Sources */, - 388E284D44A216A5ECCC0EC49AE89AF1 /* RDEPUBReaderSettings.swift in Sources */, - 65A0F8C6C162FDF2987C650A1E0313A5 /* RDEPUBReaderSettingsViewController.swift in Sources */, - B59DC0B1A729CFF0F76C1D4886121338 /* RDEpubReaderSpreadResolver.swift in Sources */, - C5743EE91CA41152F4D6D27B0BA51FBB /* RDEPUBReaderState.swift in Sources */, - DC9D763A7551AF127712DEE7218EB38A /* RDEPUBReaderTableOfContentsItem.swift in Sources */, - A6DD3A4EBF6A086D4CA796EB1BB0968B /* RDEpubReaderTapRegionHandler.swift in Sources */, - 34DAABEF8DA392B03437ED80143BB90B /* RDEPUBReaderTheme.swift in Sources */, - 8A61D5BFFF823B2DD5866C79F849A560 /* RDEPUBReaderToolView.swift in Sources */, - 9D9E6D8A9C102C9767A2778F3F550BCD /* RDEPUBReaderToolViewProtocols.swift in Sources */, - D9964CE3AF833DAD7B566E45AF472AF7 /* RDEPUBReaderTopToolView.swift in Sources */, - 6EC9EE335402510D6B2F48947BBDA57A /* RDEPUBReaderUIState.swift in Sources */, - A050FD451EB2C853335CA21A1CDAAAB0 /* RDEpubReaderView.swift in Sources */, - 03F49D0C58DE83CC45DF27596421D966 /* RDEpubReaderView+CollectionView.swift in Sources */, - C3D431A2853F6C2BEC1C8AB8468D6E69 /* RDEpubReaderView+ContentAccess.swift in Sources */, - 4538E556FB8600C7E6D29F769FC0EA47 /* RDEpubReaderView+PageCurl.swift in Sources */, - A8E71E692C58542B6E2A3DB75B6AE6E3 /* RDEpubReaderView+ToolView.swift in Sources */, - 979B6D730AAACF4B9B8331808C40BE90 /* RDEpubReaderView-dummy.m in Sources */, - AB68E2E00AED308DB0BC55025785F887 /* RDEPUBReaderViewportMonitor.swift in Sources */, - D08C9D3BB5023F0BDA105B524C0DC16F /* RDEpubReaderViewProtocols.swift in Sources */, - 09BE0B86A0FB9B8EF550CA3BABDF1792 /* RDEPUBReadingLocationModels.swift in Sources */, - 41191E0937C0FBA3176942094059817F /* RDEPUBReadingSession.swift in Sources */, - A6FCCA0867D6E90A04127122718A1A13 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, - 620D89AB6F1FC6B817F370E17A5FA9D2 /* RDEPUBRenderRequest.swift in Sources */, - 7BF87B0A4CAB6F698E7D84E676CFD1B1 /* RDEPUBResourceDataProvider.swift in Sources */, - B73FCEC25F0912CEEAE76F34B6E1A5BA /* RDEPUBResourceResolver.swift in Sources */, - E31A025A90465260938C6E05DF15413C /* RDEPUBResourceURLSchemeHandler.swift in Sources */, - B620DEA7F33E29DE56E1AD5C227D606D /* RDEPUBRuntimeChapter.swift in Sources */, - F299288008A9203353413B5B32747635 /* RDEPUBRuntimePageCount.swift in Sources */, - D0C254514E7704E4B665B5D6A25F16A8 /* RDEPUBSafeArea.swift in Sources */, - 9C775820BFD0F84151EE9D1D15AB5C5D /* RDEPUBSearchEngine.swift in Sources */, - B5F94F9ACAF7243E67C82FC8B0A3850F /* RDEPUBSearchModels.swift in Sources */, - 731BC686480474979C1C827F80525751 /* RDEPUBSelectionLoupeView.swift in Sources */, - 7BB6D47E678C847E2599D5A4CE1D17A4 /* RDEPUBSelectionOverlayView.swift in Sources */, - 364E816FBEEE0591DA21255B0C587D9B /* RDEPUBSelectionState.swift in Sources */, - 57D29D069EC196338B1E4DD238FD7FAB /* RDEPUBSemanticMarkerInjector.swift in Sources */, - 744D46169467D313783B7F9C4F80F29D /* RDEPUBSettingsFlipAutomation.swift in Sources */, - C77E8D9F72B2D3C068CB5AB850A7B667 /* RDEPUBSpeechContentProvider.swift in Sources */, - D3103B914810482ADEBA5608C1D6FA28 /* RDEPUBStyleCompatibilityModels.swift in Sources */, - 53EBDB54E3A562FEF8A6B1D1601E8CE6 /* RDEPUBStyleSheetBuilder.swift in Sources */, - E5A0F5964BBF1D2089B594A33EC559A0 /* RDEPUBStyleSheetComposer.swift in Sources */, - 1BA306604BC42737DC0D6BBFC784DC50 /* RDEPUBTextAnchor.swift in Sources */, - 8DDCA02D7175B2583E53778A4CD7457E /* RDEPUBTextAnnotationOverlay.swift in Sources */, - A5A9FE6FB03D2B84F0C684D58DEB1B76 /* RDEPUBTextBookBuilder.swift in Sources */, - 573128D7B1E3523C3355E57F0E012087 /* RDEPUBTextBookCache.swift in Sources */, - 83D6E7A893C2BA73189B3608E2EC9AC9 /* RDEPUBTextBookModels.swift in Sources */, - 7B2DB613A81AF14C101407A4C71D87B8 /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, - 2495C0D30963F211D8127D8ABD02C4C7 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, - 4C8C31A67EF3C63F2DA59BC54F835395 /* RDEPUBTextContentView.swift in Sources */, - 1C3C237A9574F88C92E569D7FB3B424C /* RDEPUBTextIndexTable.swift in Sources */, - 82652769213A4505EB968F508444BFE4 /* RDEPUBTextLayouter.swift in Sources */, - CB436A32456377BFEF92C48A033D00AB /* RDEPUBTextLayoutFrame.swift in Sources */, - 2E18379B0655CC32BA358CB89F783141 /* RDEPUBTextPageBoundaryValidator.swift in Sources */, - D78C98D530318FAEB330C8810469F53B /* RDEPUBTextPageDecorationView.swift in Sources */, - 8258ED3AECC7D666D71A3CDD72336C9A /* RDEPUBTextPageRenderView.swift in Sources */, - 34D738F155D0D3CA16F3C6554B665A8E /* RDEPUBTextPageVerticalJustifier.swift in Sources */, - 58D149A0978D65A0E3100DAC8F64C2B8 /* RDEPUBTextPaginationInterfaces.swift in Sources */, - 02DB3F5CD60A80BC4A27F77EEE2C9372 /* RDEPUBTextPaginationSupport.swift in Sources */, - 5675678CC8AA593425AC50EC4B702208 /* RDEPUBTextPerformanceSampler.swift in Sources */, - BB353409E4E12CBD140D8558AFB0AE65 /* RDEPUBTextPositionConverter.swift in Sources */, - A04E8A79293210D73AB60D753F635DD9 /* RDEPUBTextRenderer.swift in Sources */, - 9147F2EC41915FDD83B8C8B44CB7E440 /* RDEPUBTextRendererSupport.swift in Sources */, - 9A42EACE6319937378BE969B5BE1F89A /* RDEPUBTextSearchEngine.swift in Sources */, - 5786077F5C93E7605EAF0E0C9D84BBFE /* RDEPUBTextSelectionController.swift in Sources */, - 8E44611C7FC61B0F6B197004149643E9 /* RDEPUBTypesettingPipeline.swift in Sources */, - A8558343E113346EF75EC327987A9B62 /* RDEpubURLReaderController.swift in Sources */, - 47CEF67F26AD47F9BA63D89C4F233667 /* RDEPUBViewportTypes.swift in Sources */, - 20C84711D379B1244D44F6AE4CA46ACA /* RDEPUBWebContentView.swift in Sources */, - 35DFE3F833A49E5F055087209FDA48A3 /* RDEPUBWebDecorationOverlayView.swift in Sources */, - 66EE3EB9F8CDD8E41EBB76F19EBAB512 /* RDEPUBWebView.swift in Sources */, - CD8EB96643407FE06E3FEDEE4C9F446A /* RDEPUBWebView+Configuration.swift in Sources */, - A59ECA1C79794D157BD9E87DC19F6D36 /* RDEPUBWebView+FixedLayout.swift in Sources */, - 923F3C01F3A8330053A33F77923983CC /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, - 0FA3F4FEE3F9660657F0AA0117B95BD3 /* RDEPUBWebView+Reflowable.swift in Sources */, - 0C967A3A008695E1753456852CB381FB /* RDEPUBWebView+Search.swift in Sources */, - 256F2FBEA0BA50D272159F02D902F611 /* RDEPUBWebViewDebug.swift in Sources */, - 45D891EAA051DD40FF50DF6EF850A89F /* RDMOBIParser.swift in Sources */, - 0952462BA9D73DF2A199FCB7105FB349 /* RDReaderDocumentFormat.swift in Sources */, - 01BAD9DD97D25EDF620445B8876BD981 /* String+RDEPUB.swift in Sources */, - 580A03A83013B855159D405AF80EDBED /* UIColor+RDEPUB.swift in Sources */, - A4025F5A563E4B91B2D3468E6E435693 /* UIColor+RDEPUBHex.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 315C3E209269EF9DCC01F9A09A749BA9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3462,13 +3254,85 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6B3153A3D95687C42CAD370470F6ADCC /* Sources */ = { + 3796DB175D65E1B8CB06726B730C3365 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + 3809A6B5AA40EF4B7F0DD5ED5C2935D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A27A469DC24F223905DCC8182E2CA52 /* Constraint.swift in Sources */, + E6F3BD9FCDDF8FBEC32F6BDF22939CC7 /* ConstraintAttributes.swift in Sources */, + 6B67545C9C3B50F376199A953DAAF248 /* ConstraintConfig.swift in Sources */, + 3527805F1EAF4AA2D1C691835E0D3738 /* ConstraintConstantTarget.swift in Sources */, + 6F9CCC35918031FA93F8DB97E92E3C12 /* ConstraintDescription.swift in Sources */, + E08646A14732B835E43DC18A168EA094 /* ConstraintDirectionalInsets.swift in Sources */, + 672B4D141F08F37F31DB25A3B3C3436C /* ConstraintDirectionalInsetTarget.swift in Sources */, + 9EBDC835399A340B1DE8C9448CCB346F /* ConstraintDSL.swift in Sources */, + AAA2EC8CD4EDF537B897254CD24A9CC7 /* ConstraintInsets.swift in Sources */, + B6030124CAFB157D95FF3246A6FEEF3E /* ConstraintInsetTarget.swift in Sources */, + C4CB63E8E0A5742BA566A3EED0994390 /* ConstraintItem.swift in Sources */, + DCB762A2263C1E8FC37B8F949926649E /* ConstraintLayoutGuide.swift in Sources */, + BDC4A815A986D2DA80AFCD9912AFA9F8 /* ConstraintLayoutGuide+Extensions.swift in Sources */, + 5503E7E20C896418ECCDD315FA7F71BC /* ConstraintLayoutGuideDSL.swift in Sources */, + 4B119ECC1F5E2879EEBBECE73B885B5D /* ConstraintLayoutSupport.swift in Sources */, + D11141D3FE5BB9F8EDC8C4CB70560EA6 /* ConstraintLayoutSupportDSL.swift in Sources */, + 0EC04427BB9F77932E19591E8D37492F /* ConstraintMaker.swift in Sources */, + 786747640B55602D77885D5B3A6F5E03 /* ConstraintMakerEditable.swift in Sources */, + AE2B0DBA4EFFB8FC5D49290C93DFCD68 /* ConstraintMakerExtendable.swift in Sources */, + A3E6088B9121F949F6105C29F2709F5E /* ConstraintMakerFinalizable.swift in Sources */, + AE6162BF52609870B92F520029FF02D3 /* ConstraintMakerPrioritizable.swift in Sources */, + 146BDE9063EF5A1F0481FCEBD97046A2 /* ConstraintMakerRelatable.swift in Sources */, + 4A1F368BBA3E00391DFC147AEB4ABF08 /* ConstraintMakerRelatable+Extensions.swift in Sources */, + 40FFDE03700BDC58ED5577371EF237F2 /* ConstraintMultiplierTarget.swift in Sources */, + 7C403ABBEA121DBE2FDBC75076F2F6EA /* ConstraintOffsetTarget.swift in Sources */, + 71FA30F520F3977FCA0F2E7DDFD0849D /* ConstraintPriority.swift in Sources */, + 59023BFD93B4B99D464C75471795658D /* ConstraintPriorityTarget.swift in Sources */, + B7BEF6F32A272EE8E59CA3074A96269C /* ConstraintRelatableTarget.swift in Sources */, + 522C9D67313466AF5FAE800D0D20A1B8 /* ConstraintRelation.swift in Sources */, + 6FE61735A4634CFD8570656E8D0CE8F9 /* ConstraintView.swift in Sources */, + 11C1917887762E50D1E02382C46D9977 /* ConstraintView+Extensions.swift in Sources */, + 8F4547B8CE2A89A9EEE45E743F503BDD /* ConstraintViewDSL.swift in Sources */, + 74F65BAFF30DB1459C767CC1B79C267B /* Debugging.swift in Sources */, + 0A1404655C6339B0D10F01ECC970E852 /* LayoutConstraint.swift in Sources */, + F3A71F88272177135CDF5BC18D68134D /* LayoutConstraintItem.swift in Sources */, + A235834F0BDA4FA924E2AA14523AA54D /* SnapKit-dummy.m in Sources */, + E318725DBB931BB68BF243EB2300E3FC /* Typealiases.swift in Sources */, + 0E68D8160E5C813DB3839865A2B61A7F /* UILayoutSupport+Extensions.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 42D6C5C2970F2E5A7E40A33E67F081A4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 541FFE865648B06764067D97C8898EB8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7B1A9147AD781B8C85299490F212E46A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8CB0C79D881B535BE9D8EB7FCFC5354E /* RDAISpeechContentProvider.swift in Sources */, + 88C129FF0E69C6E384F2779A23C55427 /* RDSpeechReaderContracts.swift in Sources */, + 3B96821680A1C1A218CE1C9FC855A23B /* RDSpeechReaderController.swift in Sources */, + 0D9DBD85739EA6FA524BC4AEF817361B /* RDSpeechReaderControlView.swift in Sources */, + 0335F9FB12F2E7B0CDA69B9DB048C1B5 /* RDSpeechReaderView-dummy.m in Sources */, + 627969A2C4F0C40D00C45FCF74C645DF /* RDSpeechTextPreprocessor.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7F0E1E43783433272F33954F422787AB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3477,147 +3341,261 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8A8859A21B8E2957FA7F6940AF5B520E /* Sources */ = { + B992E8A05E2B8924BE5AD80B55132A31 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DE6074564E19C27682C74A6C866602C3 /* RDAISpeechContentProvider.swift in Sources */, - C9CC84E07257BC1CFA58827C18666DEC /* RDSpeechReaderContracts.swift in Sources */, - B76AAD4CE3A876895D22B69BC7D8430C /* RDSpeechReaderController.swift in Sources */, - 34CEDD8C5C37205306E49A3D61CB6E9E /* RDSpeechReaderControlView.swift in Sources */, - 388E7E64B2A9CB4FE6BB4421CA66F65F /* RDSpeechReaderView-dummy.m in Sources */, - 1C7DB25B5090AEEFE61B7140803A213B /* RDSpeechTextPreprocessor.swift in Sources */, + C5AE45CCE89262860C07A4D819F090B4 /* Archive.swift in Sources */, + 3931A56C2503B0A3D0FE828F02D9B979 /* Archive+BackingConfiguration.swift in Sources */, + 3936F0CEFF36DF3B6950232469464C92 /* Archive+Deprecated.swift in Sources */, + 41F5F94C7DF31187F8DEDACFED77F0E2 /* Archive+Helpers.swift in Sources */, + 6AEBFDC2BBEFF8D41B92E25BEBA88DA9 /* Archive+MemoryFile.swift in Sources */, + FB9BF2BD5860E0AE6D47C3B3CB22565B /* Archive+Progress.swift in Sources */, + 3FDC0622E8C79045CCD33384BECD3148 /* Archive+Reading.swift in Sources */, + C85C52B080DCDCE11643373A20F761FC /* Archive+ReadingDeprecated.swift in Sources */, + 570B9696C1005A0AEF43490F610D6826 /* Archive+Writing.swift in Sources */, + 69C2DAE51CE7FB6012E7BC6B242F1D87 /* Archive+WritingDeprecated.swift in Sources */, + 2AE79C560C0E3BF0E8F280F86AAB8CA4 /* Archive+ZIP64.swift in Sources */, + B1D95DA928A2395DC801F291958ECDBE /* Data+Compression.swift in Sources */, + 863327A5E10B22298BB440E98DE9F15E /* Data+CompressionDeprecated.swift in Sources */, + DED69A917E4E0176A310481FCF01C009 /* Data+Serialization.swift in Sources */, + 11A9957CEC14EA2676686062B57AE434 /* Date+ZIP.swift in Sources */, + 96D5FBBC74098899A127121C91CECDC4 /* Entry.swift in Sources */, + E1BBC792423CF9FFA5FB02C7B70F5ED6 /* Entry+Serialization.swift in Sources */, + F0CEFCC3693FD1B1338B24B4157E0A3C /* Entry+ZIP64.swift in Sources */, + 8CBD18C38E97757F67620E5EBA85A70F /* FileManager+ZIP.swift in Sources */, + 8A7D59F186CD4A90AEF425FF382B3F0D /* FileManager+ZIPDeprecated.swift in Sources */, + 631388C3FD4E018ACBDDF55A0EE10AC2 /* URL+ZIP.swift in Sources */, + FA30A0528F3F06269BBAE1DC923C5CED /* ZIPFoundation-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9022983CC7159FD41F9E607B69B3B279 /* Sources */ = { + CCC0D335450A0E9051C1C7073A62FA83 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 383ED4A31AA31ECDE5599419DDA89041 /* RDCBZReaderController.swift in Sources */, + 122ADCB2F0FDD7FC639648DAEBCB31F8 /* RDEPUBAIContentProvider.swift in Sources */, + 432828354099FF9940FC9BB1A5DC2D6E /* RDEPUBAnnotationEditorViewController.swift in Sources */, + 60A4A0DBFD2263B7E2FA3928A0ABBD71 /* RDEPUBAnnotationModels.swift in Sources */, + D7021E6EB2D2D58D15CECD47BC9A9819 /* RDEPUBAssetRepository.swift in Sources */, + 2895AAFE16A7927C9CC5B0F75D32139A /* RDEPUBAttachmentNormalizer.swift in Sources */, + 4A596FCAE2DB0ACF3FF099A65C7E0512 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, + F2A5490C1C2E3E48A18A8FDF25B0B431 /* RDEPUBAttachmentTooltipView.swift in Sources */, + C28B3C4B424604F1AE9AD3A21DD853C4 /* RDEPUBBackgroundCoverageStore.swift in Sources */, + 6713F7FC53DE9E9717B7D7BED1966EEC /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, + 91C03969F93620234EFFD70FD1552288 /* RDEPUBBackgroundTrace.swift in Sources */, + 5C034F77D297BB39CC375385C29086E7 /* RDEPUBBookPageMap.swift in Sources */, + 2B95E139A981A6A49099B4ECFB90AE9D /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, + AF81CC94C3E819ABB2B931577F560036 /* RDEPUBCFI.swift in Sources */, + 41B1A699D6984DB7183BA045834CB450 /* RDEPUBCFICompatibility.swift in Sources */, + 4BAAFE6F010272E410ACAE88390153C3 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, + 7BFF4431124D99872DA99035564A479E /* RDEPUBCFIError.swift in Sources */, + 66FEEF58DB4B1991D6D0A641B05F937A /* RDEPUBCFIGenerator.swift in Sources */, + 9928F78ED2A8119FAD85D395D0C14B81 /* RDEPUBCFIMap.swift in Sources */, + 0DA047CE0938660F1AC82BB461F607B4 /* RDEPUBCFIMarkerInjector.swift in Sources */, + 8CF42D8E97582A70BEC953567CC62F59 /* RDEPUBCFIParser.swift in Sources */, + 48E166F2C1FCEA0163D05D60838C08AD /* RDEPUBCFIPath.swift in Sources */, + 9CB70FA44A722BEC76EDC4CF9726C4C9 /* RDEPUBCFIRange.swift in Sources */, + 9478530F48C5EA152B22F8A3E6F5ACE0 /* RDEPUBCFIRecoveryEngine.swift in Sources */, + 6A7CAC6F109F9A5FECFAF8365434B5E4 /* RDEPUBCFIResolver.swift in Sources */, + FE0AF1F9056F5F4F381792ABA2FCB0F9 /* RDEPUBCFISerializer.swift in Sources */, + A213045E1768916C7FFA74CE0B607703 /* RDEPUBCFITextAssertion.swift in Sources */, + 2153FA3BF80801DEF871E1F058B4BC28 /* RDEPUBCFIUtilities.swift in Sources */, + 713A5472FA1AC9AFDE2A53ADCBD7E275 /* RDEPUBChapterCacheKey.swift in Sources */, + EB98CCC346DE7C922EEC196BF6465F86 /* RDEPUBChapterData.swift in Sources */, + 1D394585BF38C3050B6C81E80A905312 /* RDEPUBChapterDataCache.swift in Sources */, + 82D616A6A0BDBECCECBF7DEE97439944 /* RDEPUBChapterDisplayContentCache.swift in Sources */, + 1029F6A1D00934BA1729926279757FEE /* RDEPUBChapterLoader.swift in Sources */, + 44FA5DE799285D7A61EA798CEEA430B8 /* RDEPUBChapterLocation.swift in Sources */, + 960ECB0BE250A067C844D5E8A22372CE /* RDEPUBChapterOffsetMap.swift in Sources */, + EB4853E4669079AB1DB69B5D0C282ED9 /* RDEPUBChapterPageCounter.swift in Sources */, + 593C7D0F96C618C5D04A67758D019C39 /* RDEPUBChapterRuntimeStore.swift in Sources */, + E57A108FD62AEDC26F82FC5A2B8D0744 /* RDEPUBChapterSummaryDiskCache.swift in Sources */, + 7CA0156611964C72807860FA6F544D18 /* RDEPUBChapterTailNormalizer.swift in Sources */, + 6C401234C15BC214C8C7EB4200624E17 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, + E9468DE68A8609EE6DC056687D9E364B /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, + C19AA78C33972C5897BA47532A0B189A /* RDEPUBCSSCompatibilityLayer.swift in Sources */, + 54D02DDE581B6C0C88C240CEBC5CC41B /* RDEPUBDarkImageAdjuster.swift in Sources */, + 5E1C53786FAF732AA6AE6CDB8D03726C /* RDEPUBDecryptingImageAttachment.swift in Sources */, + 154B7E4D9B281D3F49B8430DC2F730E0 /* RDEPUBDTCoreTextRenderer.swift in Sources */, + 70569A36850676C7E290786FA104AD9B /* RDEPUBFixedLayoutTemplate.swift in Sources */, + 590762C119260376B3DCCC16D2362964 /* RDEPUBFontFallbackResolver.swift in Sources */, + 621D8713C9AC9C3C09787C40997DDC85 /* RDEPUBFontNormalizer.swift in Sources */, + E749B52B9E166B85AB0671D9FCFF5D2D /* RDEPUBFragmentMarkerInjector.swift in Sources */, + DDB428542ACD7BB97C3A248B8B6D70C3 /* RDEPUBHTMLNormalizer.swift in Sources */, + AC3F3D52752D5E8BFDF2C731F4442871 /* RDEPUBImageViewController.swift in Sources */, + A40D3941CD41BE5FB53F24DAA5492872 /* RDEPUBImageViewerCoordinator.swift in Sources */, + 67E58BF0C1BB9DAFA1938AAE06AA0473 /* RDEPUBJavaScriptBridge.swift in Sources */, + 6A7F010D74A23FDE95D3217D7BBF51F3 /* RDEPUBJumpSession.swift in Sources */, + D7893683E3175919960EF304323E7FEA /* RDEPUBMemoryProbe.swift in Sources */, + E1F7F3C1DFBC5BE87F455A8B2EF526BC /* RDEPUBMetadataParseCancellationController.swift in Sources */, + 866736EAD1657A677B7CE98A60CC6249 /* RDEPUBMetadataParseWorker.swift in Sources */, + 9FAE69F2812510E0491D9BBB90C353D4 /* RDEPUBModels.swift in Sources */, + 7A255B9249FE4C84267820873AC6CE40 /* RDEPUBNavigatorLayoutContext.swift in Sources */, + 476B266618E9281C1F362C871E9686B2 /* RDEPUBNoteDetector.swift in Sources */, + E22F7B610DF891EFC7195CC6B7D8FB3B /* RDEPUBNoteModels.swift in Sources */, + 108336F1A5BBF5C4C8D4468287C8BC8C /* RDEPUBNotePopupCoordinator.swift in Sources */, + 65E97E47A6CE7EEFD12CDBECD0D2E91F /* RDEPUBNotePopupViewController.swift in Sources */, + 094D63A7B2DC786E383C4145EBFF6146 /* RDEPUBNoteResolver.swift in Sources */, + DC2B47D4298DC02811E3BE2611A252FB /* RDEPUBPageBreakPolicy.swift in Sources */, + 8992C1B0446EC0DE0C94A041BE926FB9 /* RDEPUBPageCountCache.swift in Sources */, + 8282D8B5123F0C53F433270E96967E74 /* RDEPUBPageInteractionController.swift in Sources */, + 2EEEF833B213486F044A3AABF1BC1A99 /* RDEPUBPageLayoutSnapshot.swift in Sources */, + 7151C4FC372F80CE454CBB4ABD2C0FAD /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, + FF506E71078A7E78F593EB9F71FE5A0B /* RDEPUBPageResolver.swift in Sources */, + 2DEE061E843862292F7E1DD86A7D217D /* RDEPUBPaginationCacheCoordinator.swift in Sources */, + 4905D46C2BB35B43AE7A780EA987D146 /* RDEPUBPaginationModels.swift in Sources */, + 24BD40AD5A9BADE65425D9D05A349CDB /* RDEPUBPaginator.swift in Sources */, + D861D571DFD73726E94AED3755335FA5 /* RDEPUBParser.swift in Sources */, + FBE2E40F0FB3043166CC80AE7EE02311 /* RDEPUBParser+Archive.swift in Sources */, + 3905E0DA77036FD5BEFD7D80EF8A83CB /* RDEPUBParser+Package.swift in Sources */, + 8AAA54629501B2B15CDAE350BBF0E2CF /* RDEPUBParser+ReadingProfile.swift in Sources */, + 79E20B3F49DEF332844FD439F1026EE4 /* RDEPUBParser+Resources.swift in Sources */, + 931CA4F727B6DA33D41913BA9D5F9A5A /* RDEPUBParser+TOC.swift in Sources */, + 6C493923CF5641870D6A95200105006B /* RDEpubPlainTextBookBuilder.swift in Sources */, + 4BA0B5B55E26574C00CFD26DEF30CA7D /* RDEPUBPreferences.swift in Sources */, + 2DAB2050BC06A4C6A8903E9B3DD06777 /* RDEPUBPresentationRuntime.swift in Sources */, + 68A785B7E08A8E8829F896F3B9D20E4D /* RDEPUBPublication.swift in Sources */, + 3DF19CE1034D02FA86C0B5BAB69917AE /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, + 2CA2B5A8BC35D7493E7F8A26C082789E /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, + CB7E3F2CFFCA14F52C4E3A0483522387 /* RDEPUBReaderBottomToolView.swift in Sources */, + AEBB5E7A98408C8A212C07E64A48CE17 /* RDEPUBReaderChapterListController.swift in Sources */, + 81C566F6B24532A292C755DBE663D843 /* RDEPUBReaderChromeCoordinator.swift in Sources */, + 719F5098842D53A54D6CF6D8CA38561F /* RDEPUBReaderConfiguration.swift in Sources */, + EF2577E6200E94FE255280886820DF36 /* RDEpubReaderContentCell.swift in Sources */, + C78C182488604E401FCF412ECAA918DA /* RDEPUBReaderContext.swift in Sources */, + 1E5A1370975CB23A3109708965000BEB /* RDEPUBReaderController.swift in Sources */, + BF05C079B67F1BB11EE57FC7B4F9123F /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, + 76F75335C90A55087171C9DF54E2F4B0 /* RDEPUBReaderController+ContentDelegates.swift in Sources */, + 2C5919C12ABE1A22BB98F7ED2AA8E5CD /* RDEPUBReaderController+DataSource.swift in Sources */, + 5C8E343FC738C259948D09E98B2BE323 /* RDEPUBReaderController+ExternalLinks.swift in Sources */, + 48D1F6EEB21172A1047DAE33BFC9D647 /* RDEPUBReaderController+LocationResolution.swift in Sources */, + 884A0E9B795FF7C1A3762AAEEDA0A6B9 /* RDEPUBReaderController+Orientation.swift in Sources */, + F9F5A156E4544E2990D63A3E6D21F815 /* RDEPUBReaderController+PublicAPI.swift in Sources */, + BEE5024D00596E0DEB17983AFDF66B53 /* RDEPUBReaderController+RenderSupport.swift in Sources */, + 1C64391C561D8C8C71B8BA9A8C9D8F6E /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, + FBD39920E194F6AEFC3FC3FCE30E6C13 /* RDEPUBReaderController+TableOfContents.swift in Sources */, + 7398FC3E3694EC9874DBAB773AAC1B24 /* RDEPUBReaderController+Trial.swift in Sources */, + 675E36872F910FE44726AED144E3FC59 /* RDEPUBReaderDelegate.swift in Sources */, + 318FC0E7FCF79F00F83A7F03E766A219 /* RDEPUBReaderDependencies.swift in Sources */, + 2CB4BF91A9035EF091737601094DE286 /* RDEPUBReaderEnvironment.swift in Sources */, + 34A377090CCB6577C85C8F72E0F3CD7F /* RDEpubReaderFlowLayout.swift in Sources */, + 4378DA5B31F23FA54D3D1B377447835C /* RDEpubReaderGestureController.swift in Sources */, + 3B573DE391E21DD53D79438B96CC0393 /* RDEPUBReaderHighlightsViewController.swift in Sources */, + B5DF0C6248323B74F6D5896BE99CBC17 /* RDEPUBReaderLoadCoordinator.swift in Sources */, + F192C5927E7BA97C8B5DB00FAB5DC049 /* RDEPUBReaderLocationCoordinator.swift in Sources */, + 5D9FF5F738BCBCB2CD47D8E127795DCD /* RDEpubReaderPageChildViewController.swift in Sources */, + D448FA68DFA59BB641DC224C5EB8BE22 /* RDEPUBReaderPaginationCoordinator.swift in Sources */, + 5CDC5753D0BEA1791C8585D0DFE20214 /* RDEpubReaderPagingController.swift in Sources */, + F94593217EBED39BF620C92D5CFD7942 /* RDEPUBReaderPersistence.swift in Sources */, + 2EF74777E4F0C408BE00A974639979CD /* RDEpubReaderPreloadController.swift in Sources */, + 3BA3E2716A868DCB8EAEFF2AA664DE4A /* RDEPUBReaderRuntime.swift in Sources */, + 19276546DD5AF3B0E64AC610951F24FE /* RDEPUBReaderSearchBarView.swift in Sources */, + 342CF0083041E6957710A3D35EEDBD5F /* RDEPUBReaderSearchCoordinator.swift in Sources */, + F2B9F986E77500749E2CEB4DEC344F79 /* RDEPUBReaderServices.swift in Sources */, + DC58520AD1CA9B74B56B5C181D3B0CA3 /* RDEPUBReaderSettings.swift in Sources */, + 0F5377BB4CD47877A1A4FF9056244D6C /* RDEPUBReaderSettingsViewController.swift in Sources */, + 5069AC302EAA58714AE6D0BB0AD65633 /* RDEpubReaderSpreadResolver.swift in Sources */, + AACD6869163962229AE357DA85AD6DD9 /* RDEPUBReaderState.swift in Sources */, + ACF09FE8BA5ACC0BF4140244B6E8F876 /* RDEPUBReaderTableOfContentsItem.swift in Sources */, + 692FBE7827CB1C969D79F56C7250FDA1 /* RDEpubReaderTapRegionHandler.swift in Sources */, + 9FF66E7E89669D216788BDA45AF55BD0 /* RDEPUBReaderTheme.swift in Sources */, + A7C1F0178293C3939D2B66BDB019F2BE /* RDEPUBReaderToolView.swift in Sources */, + 817BD48447F5B765716833E93D1EEE7C /* RDEPUBReaderToolViewProtocols.swift in Sources */, + 5C39B3B61C6C9554E874E04461D099E0 /* RDEPUBReaderTopToolView.swift in Sources */, + F58C1C3719931E786A62BA0D9AC90306 /* RDEPUBReaderUIState.swift in Sources */, + 90C1E12EED0B468F95435AE0E7AE8629 /* RDEpubReaderView.swift in Sources */, + 387C801A5E9BC43D2E10A71E04597B03 /* RDEpubReaderView+CollectionView.swift in Sources */, + D034FB4FFC72E5FCE665A2549F90EFA3 /* RDEpubReaderView+ContentAccess.swift in Sources */, + 672001630C16C4BFF67B5E08F8BC74C0 /* RDEpubReaderView+PageCurl.swift in Sources */, + 5063918BF068EDD60245CF1FFA14C784 /* RDEpubReaderView+ToolView.swift in Sources */, + A3CE10E0E0B909782BA6FF7DF4FCF467 /* RDEpubReaderView-dummy.m in Sources */, + F98520F7C30A9EC31303D52A6E11F6BF /* RDEPUBReaderViewportMonitor.swift in Sources */, + B5925F934F17183F1026FED654CDEA4C /* RDEpubReaderViewProtocols.swift in Sources */, + D9BEF488CA3F83597D75F49FE00A26C5 /* RDEPUBReadingLocationModels.swift in Sources */, + 27942A1175523D2BD5E9E7E7F6AAFCBF /* RDEPUBReadingSession.swift in Sources */, + A45E03A637712DF44230063414AC8AC8 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, + 96C694AAE72B5B05542CC44D21F53DDD /* RDEPUBRenderRequest.swift in Sources */, + CB7260801E1C1B7B19EB0F046F36C95B /* RDEPUBResourceDataProvider.swift in Sources */, + E29E2E80F0F968293BE3E37CBC6BB0CB /* RDEPUBResourceResolver.swift in Sources */, + F0BE35A92217789FADC9601DB0AD1448 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, + 89AB5F2CC5F3934CFA317ADB44092BA0 /* RDEPUBRuntimeChapter.swift in Sources */, + 587015DDFCEB54F1161FF6D1E04511CB /* RDEPUBRuntimePageCount.swift in Sources */, + 9379A9C9471BD46D7606BC0753579CE3 /* RDEPUBSafeArea.swift in Sources */, + 63652A1FFAAD5C46479F1F8E051917D2 /* RDEPUBSearchEngine.swift in Sources */, + 7395CBDBDC06A230C64495B11DED662D /* RDEPUBSearchModels.swift in Sources */, + ABFF2FB0BB8397960B009D0969113CA0 /* RDEPUBSelectionLoupeView.swift in Sources */, + 5B5B1CD4310ABEA4C3480C1C1F0BA092 /* RDEPUBSelectionOverlayView.swift in Sources */, + 9E4E27D244C44F1DEB2792D62E8F8E46 /* RDEPUBSelectionState.swift in Sources */, + EDAD742333B773CB386BBF10BD61842E /* RDEPUBSemanticMarkerInjector.swift in Sources */, + E8E71B04D02EB95E1663B6B2BF228DA3 /* RDEPUBSettingsFlipAutomation.swift in Sources */, + 18FCC6EB5E321A7758064DC0220B8441 /* RDEPUBSpeechContentProvider.swift in Sources */, + 066408F6DF6744FCE21A0844EB8B972E /* RDEPUBSpeechSession.swift in Sources */, + 13B7F5C2B8676959CDB2E290466E3BB6 /* RDEPUBStyleCompatibilityModels.swift in Sources */, + 73A83E4CC747E532247A09C60BE97099 /* RDEPUBStyleSheetBuilder.swift in Sources */, + 44F3EDE2E5585295F5881B0354772652 /* RDEPUBStyleSheetComposer.swift in Sources */, + D0D635F5FE9B28BDA18350507E363E51 /* RDEPUBTextAnchor.swift in Sources */, + D5DD33766EA2B6A0E05D6529E03F0E77 /* RDEPUBTextAnnotationOverlay.swift in Sources */, + 9FB5FDCF5ED0E32A4EF28A956D5C0C93 /* RDEPUBTextBookBuilder.swift in Sources */, + 54CFB30383D0EA0F41434F46087160F0 /* RDEPUBTextBookCache.swift in Sources */, + FCAF77439153D6230723FCB76523E19F /* RDEPUBTextBookModels.swift in Sources */, + 570E7075A4C6493C10203B303AE5CE7B /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, + 1105B3FC3E36AEB697E983A289F12E38 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, + 1DC412848A5F645120BE5C544F117E40 /* RDEPUBTextContentView.swift in Sources */, + 1023882FD50FC476405F3AA2D63A631E /* RDEPUBTextIndexTable.swift in Sources */, + BB67A112E6F1254795D78A3839CE4911 /* RDEPUBTextLayouter.swift in Sources */, + 43E68A3A27053FD0A6BD82887F6A61B3 /* RDEPUBTextLayoutFrame.swift in Sources */, + 8030A76D8117D9E3811AB6B7D044D4D5 /* RDEPUBTextPageBoundaryValidator.swift in Sources */, + C24EB1777356C7233A5F03765BCBFA4F /* RDEPUBTextPageDecorationView.swift in Sources */, + 7B30FDFEECF4A828890D252C2A5DE4F5 /* RDEPUBTextPageRenderView.swift in Sources */, + 4C3BF1D5C2B8A4CEEEB866622065590F /* RDEPUBTextPageVerticalJustifier.swift in Sources */, + 10734A1CB54C48CAE3AFAFBE80CB2725 /* RDEPUBTextPaginationInterfaces.swift in Sources */, + 64B52518CC3578ED6CA80020FB2F33C9 /* RDEPUBTextPaginationSupport.swift in Sources */, + 289E098417EDE9D3518B1C1A01FF4C56 /* RDEPUBTextPerformanceSampler.swift in Sources */, + 3CF535BAE45442DAA10B8602BDB97ED0 /* RDEPUBTextPositionConverter.swift in Sources */, + E22E119D75358EEA1F8898837D400483 /* RDEPUBTextRenderer.swift in Sources */, + 9DE4F6F6DA042A04F698FDCB2ED50500 /* RDEPUBTextRendererSupport.swift in Sources */, + BFBE84BD4C66951B7C5744FA0EC7CEFF /* RDEPUBTextSearchEngine.swift in Sources */, + B2041370A0FCF1BF2164DBEE8D28C5A9 /* RDEPUBTextSelectionController.swift in Sources */, + BAF2CAF2430C2C71E76D42B72CF59797 /* RDEPUBTypesettingPipeline.swift in Sources */, + 6C739D4266DDB13ABA18475D0DC8E6D4 /* RDEpubURLReaderController.swift in Sources */, + 62E433B2BAA5AA37D49EAF6B5BE98C4A /* RDEPUBViewportTypes.swift in Sources */, + E2E4F9574AE38A6F8234918EDB03624A /* RDEPUBWebContentView.swift in Sources */, + 878C973814D1C120B7940EA4477AAC7D /* RDEPUBWebDecorationOverlayView.swift in Sources */, + BA277E83BAB0D555D789A029D4514966 /* RDEPUBWebView.swift in Sources */, + 4840D1F3B294A0C51F6B6ED77779A836 /* RDEPUBWebView+Configuration.swift in Sources */, + 21AED133680D1E64446239B0F6C436E8 /* RDEPUBWebView+FixedLayout.swift in Sources */, + D853D2AF4801CB310D34B54E78C308FD /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, + CCFBEDA69BB901001DC03CC8C4981B22 /* RDEPUBWebView+Reflowable.swift in Sources */, + 555FD7CDC7364E9E4F849A54255B0D27 /* RDEPUBWebView+Search.swift in Sources */, + A3C9C18C530A61F708AD6860A8CFE46C /* RDEPUBWebViewDebug.swift in Sources */, + FC8D9AC0784A89BBB42E3517337FE184 /* RDMOBIParser.swift in Sources */, + C1A7E3DD4E0D633E0AF5432F76DF45E5 /* RDReaderDocumentFormat.swift in Sources */, + B09E9BB87481F36F1F60C8AB14D8BE22 /* String+RDEPUB.swift in Sources */, + 8C354A6F2AE332B985CDD60E2A98BEF1 /* UIColor+RDEPUB.swift in Sources */, + 64F0A668BEE5C8AACCB9C3BC9388CDAB /* UIColor+RDEPUBHex.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A2D4C2E481D04B9CAD59D196FFED0CB2 /* Sources */ = { + D73049BF56BC8CA1EDE0BB99E8536406 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C41422C964DEAD4BC036630E2CEE8EED /* RDAIAppleFoundationModelsProvider.swift in Sources */, + 45C2D80A964B3CE611A003CBBDFD36ED /* RDAIDiagnostics.swift in Sources */, + 3757CD1E7F4EA41CDAB495BBB6F7D9DC /* RDAIIndexService.swift in Sources */, + 53ED06B75EF9B8FFC0D2362B7B64F4FD /* RDAILocatorBuilder.swift in Sources */, + 0AC9DDCE140E39ECDD8DDA62D0D724DD /* RDAINaturalLanguageAnalyzer.swift in Sources */, + 173C5A26C576DE62DD9DEE0835D9A85F /* RDAINaturalLanguageSemanticScorer.swift in Sources */, + 893A917E82D5B3E36C2D32A6A17696BD /* RDAIReaderAssistantViewController.swift in Sources */, + 5BD8E695D1B9D6FB8A1CDB11F19F9E24 /* RDAIReaderContracts.swift in Sources */, + 157BD809FC0CAEDFB4316A537C74FA00 /* RDAIReaderView-dummy.m in Sources */, + DB2C355032CF8B09E12091E2B4EDFF02 /* RDAISQLiteIndexStore.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A5F59A74AAB0EC27108240C01270BEB5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 362B570C94340092A816356AD3284F79 /* Archive.swift in Sources */, - 11CF5494F84324BEB5016EFE7046E6A3 /* Archive+BackingConfiguration.swift in Sources */, - 38B7A8486011EE9E4C92AD7F43C67D6C /* Archive+Deprecated.swift in Sources */, - 1C58CE096885BE414C2A52164C5476D3 /* Archive+Helpers.swift in Sources */, - F9EFE047E2DE9BDBDE0774A77C6CC3AD /* Archive+MemoryFile.swift in Sources */, - 24E26EC4E2715E28AAAF2239556E5D08 /* Archive+Progress.swift in Sources */, - 22C3CE5D30DEA275C026014A7C6A8DE3 /* Archive+Reading.swift in Sources */, - 7AD8C965AACB1343366C029CA39920F1 /* Archive+ReadingDeprecated.swift in Sources */, - 38DEF213C89004432B18C427CE1FD830 /* Archive+Writing.swift in Sources */, - 3C067EBE2D4B7D28B8C196166C62F4C4 /* Archive+WritingDeprecated.swift in Sources */, - 910D5641EF4CF5D2A6F6A36AF50EE25A /* Archive+ZIP64.swift in Sources */, - 44FB7CAB227C63DB590DC3D61428F678 /* Data+Compression.swift in Sources */, - FB37977DD4625FAF7CAAE19E9CF13722 /* Data+CompressionDeprecated.swift in Sources */, - F8814DB2E7990E853C29249D4D5EA877 /* Data+Serialization.swift in Sources */, - 1D57100D8CB86A35A93EFBB76724F69F /* Date+ZIP.swift in Sources */, - 46D1C37BE8645232A7A3890D3B583E4A /* Entry.swift in Sources */, - 2D37038C0E73CEECA8A390B68F847FC1 /* Entry+Serialization.swift in Sources */, - 8B883B75A63415B216F01354B9B4F66D /* Entry+ZIP64.swift in Sources */, - 7B328F107199E9130E8E9453B9C19F8F /* FileManager+ZIP.swift in Sources */, - 54AB1CA8DC10415A933C420BF1E4FD0F /* FileManager+ZIPDeprecated.swift in Sources */, - 21D7ABAF802A959CC8813308649ED6AC /* URL+ZIP.swift in Sources */, - B0902747E74CD719F0583F848D5227A6 /* ZIPFoundation-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B5AB1C401FEE34A79826B450C2C3B9C1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5773E1761F14534E57C620E0ECE4D1DB /* DTActivityTitleView.m in Sources */, - 1A91DAF2EE1CBCEAFE3DCBA474A37B96 /* DTAnimatedGIF.m in Sources */, - 84EAE9CFBEAC03E4B95A321E78943365 /* DTBase64Coding.m in Sources */, - 680EF666B4832EF1412DD7112D40286F /* DTBlockFunctions.m in Sources */, - B91EFDBCAF74AED0882D670EF6C244F3 /* DTCoreGraphicsUtils.m in Sources */, - 4CD69F81A7F837750AE17A9DB48E9BDF /* DTCustomColoredAccessory.m in Sources */, - A374EB7564B9E0CCEBA566A30C5551BE /* DTExtendedFileAttributes.m in Sources */, - 3FDE28AE263B6D46649F6F76FDBC444F /* DTFolderMonitor.m in Sources */, - 14C1DE78043A17227D4672B8EFE3A241 /* DTFoundation-dummy.m in Sources */, - 5E4CB3BDAE2876F57FAF5F7707D339AB /* DTFoundationConstants.m in Sources */, - 45F0A220FCCA6BD09278BD4178381D63 /* DTHTMLParser.m in Sources */, - CFD97B727A0110D104BAA1971D2288E3 /* DTLog.m in Sources */, - AEB35A34B4BD9D563421951F788785DB /* DTPieProgressIndicator.m in Sources */, - FE14C52089C6E31DE5070C0BF47C0500 /* DTSmartPagingScrollView.m in Sources */, - 1AC7119C4E97CD39EACE1DCC42934B5D /* DTTiledLayerWithoutFade.m in Sources */, - 0FBD916D1B6E3B7093D734C8D0AFDB2E /* DTVersion.m in Sources */, - 8BD97441C51AF5BED8E01766EA2EC609 /* NSArray+DTError.m in Sources */, - 5075AB6E0A829656787F4F6AB63CE7F4 /* NSData+DTCrypto.m in Sources */, - B45A64277FD61F6FA0AF77DD793158AA /* NSDictionary+DTError.m in Sources */, - CADC06E386DEE523937B3B0DA5E74700 /* NSFileWrapper+DTCopying.m in Sources */, - A86F7A86BF53DAFD0D9F40771DE16753 /* NSMutableArray+DTMoving.m in Sources */, - E7D5A732459EEE8E882A91941BA328AE /* NSString+DTFormatNumbers.m in Sources */, - 11BF04E60C430795B9DC542B74412F50 /* NSString+DTPaths.m in Sources */, - EE77D0DB0E8AF90E594D0F6D2089B2AC /* NSString+DTURLEncoding.m in Sources */, - DB2B37770C59463ED4CA22D43CE84A05 /* NSString+DTUtilities.m in Sources */, - 38EB2BF870061DE650DA95053B69B87F /* NSURL+DTAppLinks.m in Sources */, - 01FF57F8E540F20A7FADEE33AA1C7A73 /* NSURL+DTComparing.m in Sources */, - D5E1FCC5EEF948E3EFDF9F02DAE1E813 /* NSURL+DTUnshorten.m in Sources */, - 7AF664366D4801DF3F4A8A68357644BB /* UIApplication+DTNetworkActivity.m in Sources */, - 3815E2C02F20BAB245D81A5930487778 /* UIImage+DTFoundation.m in Sources */, - 683D3404833FA173E581FADE53BA9B06 /* UIScreen+DTFoundation.m in Sources */, - 124EF6FA0D36BAD0D5B4810DB6345179 /* UIView+DTFoundation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DBF30937F1B27AE4D83AC1939FCFB01F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BE529C270CEA2A2C6666E5BC46C50DD3 /* Constraint.swift in Sources */, - C1EA6CBF3E63093C2F930FFB0BD64E79 /* ConstraintAttributes.swift in Sources */, - 661647FBCA7F9F220857F8EFAA05A2B5 /* ConstraintConfig.swift in Sources */, - B03327FAC1F82FBF4DD1F1863A19C913 /* ConstraintConstantTarget.swift in Sources */, - 2977D8358E329AEA906D3E64910F451D /* ConstraintDescription.swift in Sources */, - 9FC1AEB682CD309FA7119A1FCCEBB708 /* ConstraintDirectionalInsets.swift in Sources */, - 6001AAEEAB0C6493A397350500BB4038 /* ConstraintDirectionalInsetTarget.swift in Sources */, - B76B293E2071B10641153379A411BB3A /* ConstraintDSL.swift in Sources */, - 6D8F3D282FEBDD51A7970E92330173DB /* ConstraintInsets.swift in Sources */, - 2CF882B1AD06F3EFE889465776F0E1AD /* ConstraintInsetTarget.swift in Sources */, - 64D22A0DC2A1210D1494E7FC4D191539 /* ConstraintItem.swift in Sources */, - 2EEA383365CCE1949C7C68B2EDD1904A /* ConstraintLayoutGuide.swift in Sources */, - EC88C9F006E7ADD40849EE093BD1E3FE /* ConstraintLayoutGuide+Extensions.swift in Sources */, - 0A9B84091398DE20C772FA9FA2803150 /* ConstraintLayoutGuideDSL.swift in Sources */, - FC0ECDDC20EE8676838BBED649D4EC54 /* ConstraintLayoutSupport.swift in Sources */, - A3D4E87CBD4C7BD9F47D0139E550CB3D /* ConstraintLayoutSupportDSL.swift in Sources */, - 9D12E0847751CF6ED879D7A2FD0AF7B6 /* ConstraintMaker.swift in Sources */, - 2724CBD89B0C9184F4968F5110B305DA /* ConstraintMakerEditable.swift in Sources */, - AF2BC336DB93234B6189EC2ACC144CAA /* ConstraintMakerExtendable.swift in Sources */, - 64B71533F97E195EB639209DBEE574E1 /* ConstraintMakerFinalizable.swift in Sources */, - 1B0DC9C853B5DEE751669FD4354DE805 /* ConstraintMakerPrioritizable.swift in Sources */, - BC07D89F2B6A97B9343F62F6DF8756D6 /* ConstraintMakerRelatable.swift in Sources */, - F4D8820227694D6D5F09CFA6E1465F87 /* ConstraintMakerRelatable+Extensions.swift in Sources */, - 7668961F2433BB151F1E4EE19AAE4579 /* ConstraintMultiplierTarget.swift in Sources */, - A1D8FCF9351374EAEAF9D53603EBEA91 /* ConstraintOffsetTarget.swift in Sources */, - CE4B31BC6513E87A9190C954571E385D /* ConstraintPriority.swift in Sources */, - D094FDAFB406B4894DF945B7164E97C1 /* ConstraintPriorityTarget.swift in Sources */, - 9C05B5CF2598BB4EFA6C8C6881E4E067 /* ConstraintRelatableTarget.swift in Sources */, - 00A4DA374441586757BAE1F167ABC0A0 /* ConstraintRelation.swift in Sources */, - 3A2E99A9D63EBA1AD6DEB88A58230346 /* ConstraintView.swift in Sources */, - 4B9FA34806EE1B678A99B1B8E105F768 /* ConstraintView+Extensions.swift in Sources */, - 27C86A56BD84C02BD3EDEE479F3E6E33 /* ConstraintViewDSL.swift in Sources */, - 45C22D05CEBD5AC9C520EDE9A860DED4 /* Debugging.swift in Sources */, - 8F12D85AADFB18FDF7A86CE2D1F29821 /* LayoutConstraint.swift in Sources */, - EA390D4166224687AE187999F107C44B /* LayoutConstraintItem.swift in Sources */, - F9028F050CFD6BABF3990E24D06731F1 /* SnapKit-dummy.m in Sources */, - 428790F145A922B7906C4EB7D5CB174B /* Typealiases.swift in Sources */, - DCD5EFBBA2F0E37E403263F70A6D4D88 /* UILayoutSupport+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EDA3C8C069C08CDAA81EB2528164720E /* Sources */ = { + D7B482915F333DB053E9B3FF533B0E8B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -3693,197 +3671,183 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FDA7CA3B5D824C6440575FD64AB02520 /* Sources */ = { + FB4EF7F1D5A790146D0A8C362A41E9EB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D6EFCA4E1BCB69F129636FF71B81DCD5 /* RDAIAppleFoundationModelsProvider.swift in Sources */, - 160890D3E69645A3EBE3E4A7D821BA7C /* RDAIDiagnostics.swift in Sources */, - 76787F2728FA3FED06C6481B555459C5 /* RDAIIndexService.swift in Sources */, - F32092E04F4488D14BA015CF6AD06155 /* RDAILocatorBuilder.swift in Sources */, - 28D8E43A60A58DA7961352C1F9CEE6B1 /* RDAINaturalLanguageAnalyzer.swift in Sources */, - 68003F1BF23E3222A141F945510D9AE4 /* RDAINaturalLanguageSemanticScorer.swift in Sources */, - 667E37483857C6BDEEE623A200BD94B5 /* RDAIReaderAssistantViewController.swift in Sources */, - 988EF04BC3904784A7F4B364AD31A75C /* RDAIReaderContracts.swift in Sources */, - 1667634A08E3C710A759A0E33C72F6EA /* RDAIReaderView-dummy.m in Sources */, - 6ADF048625373BC2C3B5BE61BA02D982 /* RDAISQLiteIndexStore.swift in Sources */, + 598D022C283819443091902BE734DAA8 /* DTActivityTitleView.m in Sources */, + 87E3B89BA351CD67C8DF1798B04D88B3 /* DTAnimatedGIF.m in Sources */, + E3C34ADE9B65154958F50C6D75BA77AC /* DTBase64Coding.m in Sources */, + 0CD64766E04A6801A55DFEFC5A9A379B /* DTBlockFunctions.m in Sources */, + 86DC330DC883C193E3873FC14C462783 /* DTCoreGraphicsUtils.m in Sources */, + DA7A44DADD3BC84841AE2677DAA3CF22 /* DTCustomColoredAccessory.m in Sources */, + BE766E558428E8784BC6512D77BC4808 /* DTExtendedFileAttributes.m in Sources */, + B0C0CA37B2606633E435DA11DC3788DF /* DTFolderMonitor.m in Sources */, + 24C6A5A67DF71CA76B6F3AF29F193AE4 /* DTFoundation-dummy.m in Sources */, + FEF842F1CC8FD4321DA162C51B932256 /* DTFoundationConstants.m in Sources */, + 1B56723E39283A17E2A689DBDD09C313 /* DTHTMLParser.m in Sources */, + FA45542C5C51CEDA07BBB673701DB1A7 /* DTLog.m in Sources */, + 85FB7A92E7BE58422BBCA8BCC503073F /* DTPieProgressIndicator.m in Sources */, + 6705BD3C1F523637A9AE0E5ED01A9121 /* DTSmartPagingScrollView.m in Sources */, + 9845DD8743E768B603FCA5E100022402 /* DTTiledLayerWithoutFade.m in Sources */, + 3674DE97851C406DA102B9E44BF04D28 /* DTVersion.m in Sources */, + 66A624E8BC1DAF3DB5F73A4803E7D2BC /* NSArray+DTError.m in Sources */, + 7140ED0FCBEE21E6ADC5C86510554445 /* NSData+DTCrypto.m in Sources */, + 2C0B4E9293C8B24B2E5086202EC8BA77 /* NSDictionary+DTError.m in Sources */, + 4BD4C274A25A2C0D67A8CD58CEE23A96 /* NSFileWrapper+DTCopying.m in Sources */, + D9AE80A302124FDC65DDB8E7589D062C /* NSMutableArray+DTMoving.m in Sources */, + 57E6E8838EA62098BBF70310A8ED9A69 /* NSString+DTFormatNumbers.m in Sources */, + A1BC9E0C0B13C8871A63632290E3FF0E /* NSString+DTPaths.m in Sources */, + EF12622D7366BDBE4CDC8E1AA79096BD /* NSString+DTURLEncoding.m in Sources */, + E227AE6681B28162FBF6964FCA235D91 /* NSString+DTUtilities.m in Sources */, + 2D5D90B31C27ABFE9A71AA0829B70447 /* NSURL+DTAppLinks.m in Sources */, + 38ED3BA7A3F5F7E164EFA8FFC4D29678 /* NSURL+DTComparing.m in Sources */, + 483931C8D43DEF9C708EC6111B7C8E6C /* NSURL+DTUnshorten.m in Sources */, + 262BF4A73925D6C0DAA45DE8041FDF48 /* UIApplication+DTNetworkActivity.m in Sources */, + D6FAE756D6437B0E2E039471ED84D262 /* UIImage+DTFoundation.m in Sources */, + 02A25882938831E94E43CA8A7CB729B9 /* UIScreen+DTFoundation.m in Sources */, + C0AA089CF77046447145E3C317D2233B /* UIView+DTFoundation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 024C591CE25B444779EAE0907CC1375D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = 17C3B49E3B391E5D6ED339176BA6EFB8 /* PBXContainerItemProxy */; - }; - 0F381A4930501641E8F6760587BBA2C2 /* PBXTargetDependency */ = { + 07407F12428F13D3E4006FC4CA276CE0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DTCoreText; target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = 36CA89A2E0EBD19706B0CDEC849CA8EF /* PBXContainerItemProxy */; + targetProxy = D600C64030F4EC178AD77DDAAF89C5DA /* PBXContainerItemProxy */; }; - 1462C34F341D1B4C735128082B1D106B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = AB811AE81F514DC81EF4EAEB477D8FC6 /* PBXContainerItemProxy */; - }; - 19A4C847AB807C66B93F53A7F4DD49CC /* PBXTargetDependency */ = { + 0818A35B3F5AFB1A0122EDC08DFCC0FB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ZIPFoundation; target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = F577E6647643B09D3AFC9D08E5266A66 /* PBXContainerItemProxy */; + targetProxy = F6B536978A947025AFBAAAF7351DC88E /* PBXContainerItemProxy */; }; - 248D14A413D4F8109E81E876B6C7269D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDSpeechReaderView; - target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; - targetProxy = 974B87AA811E6162BE45E7792A96E30B /* PBXContainerItemProxy */; - }; - 2572918456CF71DA3F29818A05ABD216 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "DTCoreText-Resources"; - target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; - targetProxy = A1BCAED813EBD7868EACE64F704FEDFF /* PBXContainerItemProxy */; - }; - 28C1AC837072796CCABD3BD21996776D /* PBXTargetDependency */ = { + 1F74E8ECF506A2E13D69E00CB12EAEBD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SnapKit; target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 3197E6921AA84CC1B8C9056142396606 /* PBXContainerItemProxy */; + targetProxy = 1296438FCFC4BB8B026E5B13346AA007 /* PBXContainerItemProxy */; }; - 4B210AD5861A1A96A332E1DB585A46C3 /* PBXTargetDependency */ = { + 219A38586F8223C049B64431795D2B04 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDAIReaderView; + target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; + targetProxy = D52C274234D28471F70AC5166584D91F /* PBXContainerItemProxy */; + }; + 42C1A7E2942980AB6B984615E00902D5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 1F2CB25A693EED699BC4AF34E0A78DCC /* PBXContainerItemProxy */; + }; + 52BCC4A19191B906F794A89BB6DC4E43 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 9148121DB7AE39618ECC5EBA0FFCEED3 /* PBXContainerItemProxy */; + }; + 535BA5CE3CED388B6D328526C1EBE529 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "ZIPFoundation-ZIPFoundation_Privacy"; target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; - targetProxy = 50D575B5DAED2FB9BE1C5428C056DDA4 /* PBXContainerItemProxy */; + targetProxy = 18FE27B2873AA09802132F3BFAA73B77 /* PBXContainerItemProxy */; }; - 6623C980109567118E7F3702DCC999C0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDSpeechReaderView; - target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; - targetProxy = A5B1A067FDB1F0EB3824BD39DF45BAE5 /* PBXContainerItemProxy */; - }; - 88BCAFF12D3803A063766F4D5C30667E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDAIReaderView; - target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = 2CB368EDA06484484C9239CFA8639DD2 /* PBXContainerItemProxy */; - }; - AD243A82A9C0AEC6847FF66C8840E6E2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = 6CC53768D781202C205E9844C7F2D924 /* PBXContainerItemProxy */; - }; - B4478053F9E8036E2C99208643561D5F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 65A1725917E9E5A2B8917B90CECA7448 /* PBXContainerItemProxy */; - }; - BA1B18C040E4323B9F5771A5BCFD85D4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = 14272A2E48D9CD26B93FD523A154E373 /* PBXContainerItemProxy */; - }; - C09951035419916D448EA490B5A655D4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "RDEpubReaderView-RDEpubReaderViewAssets"; - target = E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */; - targetProxy = 54C8DAE6D3E517D5EC52DE42098FD67D /* PBXContainerItemProxy */; - }; - D578A051EF503FB8EDBCC5CD1B609545 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = 23CDB939F8EBFEEE0D7CE925D5DDF1C1 /* PBXContainerItemProxy */; - }; - DE04E5B678B6CA201E24C786B3D69573 /* PBXTargetDependency */ = { + 5BA37A3BEA7B80B3899F5AFAF7286CA0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RDPDFReaderView; target = 352EC96AFAEE0EDF74FD76A958827133 /* RDPDFReaderView */; - targetProxy = ACB386194F6C01184D3B9EC5867FFBD0 /* PBXContainerItemProxy */; + targetProxy = 0323874C0AE84330B0DFE6FBF0EE5CA7 /* PBXContainerItemProxy */; }; - E484BE24A2FE86EA9C9A3524401B8192 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = 7EFD564EA79AAB335CD2CFD94DAB66BA /* PBXContainerItemProxy */; - }; - E7694395F54F46F8381C2C1EE948D916 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDSpeechReaderView; - target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; - targetProxy = F592612B0B5945374062A600E49D8EF2 /* PBXContainerItemProxy */; - }; - E94EB867FB3FB5780F50629A54149FC0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDEpubReaderView; - target = FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */; - targetProxy = 49127916BC5D5B5142FB676094C70903 /* PBXContainerItemProxy */; - }; - F2B0C0753DA799589EE86F0FBA1565DC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SnapKit-SnapKit_Privacy"; - target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; - targetProxy = 16082FE383C0CCFFBA096AB8AA84D7C9 /* PBXContainerItemProxy */; - }; - F8C9B690D26DCCC4C8B18837001B7536 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 11876E077448C6CCB7A570D4369D3BD7 /* PBXContainerItemProxy */; - }; - F9191E83D3358FBA266553022C856B47 /* PBXTargetDependency */ = { + 63FFF77F305A945F6DF0D41454036F57 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RDAIReaderView; target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; - targetProxy = 481088C3908A20E60C0BA4FFF4251DD3 /* PBXContainerItemProxy */; + targetProxy = 40CA9C1D9FA9CD1BE5571974758DFB60 /* PBXContainerItemProxy */; + }; + 8C316BD3F59179826FD212F31764533B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDAIReaderView; + target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; + targetProxy = 5BDFB48E45664D19196E404974F8F15C /* PBXContainerItemProxy */; + }; + 8CCD3E65771647DD50CBBC1AE1B84CDE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDEpubReaderView; + target = FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */; + targetProxy = AA6E14EAF872040B200515ED3D10A888 /* PBXContainerItemProxy */; + }; + 8F5AFC4AF9141D12FA46A946D211D7BF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "RDEpubReaderView-RDEpubReaderViewAssets"; + target = E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */; + targetProxy = 9CE9E51198F6A77A18CCAB93C5E1773F /* PBXContainerItemProxy */; + }; + 9E4845C7BD02B359C6C66763674EF25B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = 15FF4C23FCEC678886F7700DD7174D09 /* PBXContainerItemProxy */; + }; + C262447253885048E17A57AF21378C64 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDSpeechReaderView; + target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; + targetProxy = 04B6B248841C85F781C9DC9FD2C70198 /* PBXContainerItemProxy */; + }; + CF63D823A1BCA96531A6D02A6B07E4A5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDSpeechReaderView; + target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; + targetProxy = 566B2018B8125F5F086120A0F04E590A /* PBXContainerItemProxy */; + }; + D1157C5ACAE4229432F1CE0A595803CF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDSpeechReaderView; + target = CC23E8498E4F0DDEB3C1A2AA05B8ACF2 /* RDSpeechReaderView */; + targetProxy = 9E4792E9817191C6C8E1B6FDF6AFCB2F /* PBXContainerItemProxy */; + }; + E55650B2223C316B3097288B971F9456 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDAIReaderView; + target = 1F1B6899710AE3E4BD213BE01489E557 /* RDAIReaderView */; + targetProxy = 3B28F29AD72E32AE04AE655AF32CE9BB /* PBXContainerItemProxy */; + }; + F2EC52C5D4A57624BDD402CBAE177214 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapKit-SnapKit_Privacy"; + target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; + targetProxy = E14CE914506E0DDCA9434F4ACB5C7327 /* PBXContainerItemProxy */; + }; + FBF6F2679B3714B32673C54517297A6D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "DTCoreText-Resources"; + target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; + targetProxy = B2338A92D4F809073A0B634D8CDFFF11 /* PBXContainerItemProxy */; + }; + FCEC1B8D28905A556834FE6F4E5FA86F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = 6386FD313A8EFBECF47440ECE9D0E0CB /* PBXContainerItemProxy */; + }; + FE1A32BF91015B0BAC298BA898CAA5DF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = A7C42C45544A5DA1825833C414C32548 /* PBXContainerItemProxy */; + }; + FF2A24A406F8D7B05FAB19FF9BDFB00A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = B05ABEA0D1B0F1400A6616382036F3F8 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 01F68F890F2620FE0BBB8E47082D586E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SnapKit_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 0B20D3D85903912845AF663B0E49AC6D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = DTCoreText; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Resources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 0CCAD0FFCBF6DEA721A71FDFEB58CB00 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 306477706BBB1E784F55BCF8EB1AD737 /* Pods-ReadViewDemo.debug.xcconfig */; @@ -3923,9 +3887,9 @@ }; name = Debug; }; - 0FB065A42C91EEC5CD72DA4FA77E1BC6 /* Debug */ = { + 1111F3DEE9EF70EEF9A8A5F1F617B60F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2042A956F6ADB5E2CF8DB889FA6F7652 /* RDAIReaderView.debug.xcconfig */; + baseConfigurationReference = B75141FED04E4EEC380F0173E5DEBCA7 /* RDAIReaderView.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3957,30 +3921,13 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 150BBB63F12BC4D9B3004CF340C11FE2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = ZIPFoundation_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 1FE90180987D3E4C6D6DB39231C19B0F /* Debug */ = { + 15BDA228DFA9DD44C8B100038F4CBB8E /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */; buildSettings = { @@ -4019,46 +3966,6 @@ }; name = Debug; }; - 21BF661875BF84C1327A3EA55AA7CA30 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation.modulemap"; - PRODUCT_MODULE_NAME = ZIPFoundation; - PRODUCT_NAME = ZIPFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 221F14CC071C4E49C1E1399166F51C72 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = A3942F6A75FD45095352344EAEA29F8B /* RDPDFReaderView.release.xcconfig */; @@ -4099,185 +4006,7 @@ }; name = Release; }; - 37F98935CFE42AD22302FDAAA6171048 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EBAF09D94C8796C21CF84B062626E152 /* RDEpubReaderView.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = RDEpubReaderView; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RDEpubReaderViewAssets; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 3B43520826A15E4625613E09CBCC0D68 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = ZIPFoundation; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = ZIPFoundation_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 44A4B2FB6211B90C1949A44A381F6D1F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 57E088951A12170B52B7A1054C6487A7 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EBAF09D94C8796C21CF84B062626E152 /* RDEpubReaderView.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDEpubReaderView; - PRODUCT_NAME = RDEpubReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 69A6B34F722DBC44AAEB0275F77AED27 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8561A1F936D83B0C176DA51E09B4C4B0 /* Release */ = { + 396BC6EEF9E7E0BCAAEA0DC00F55968B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 03D925237ACBF4382D1CF970BC943B0D /* RDSpeechReaderView.release.xcconfig */; buildSettings = { @@ -4317,13 +4046,113 @@ }; name = Release; }; - 929A640856AC2588D883FB7DD34A3DAF /* Release */ = { + 40FFFF4767533BC952BA1F78CCDCB4AC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation.modulemap"; + PRODUCT_MODULE_NAME = ZIPFoundation; + PRODUCT_NAME = ZIPFoundation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 44A4B2FB6211B90C1949A44A381F6D1F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 459CB83D11DA56FD02D86CB1C6408A7B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; IBSC_MODULE = SnapKit; INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -4335,6 +4164,288 @@ }; name = Release; }; + 48543F4CC7F4FCF27961EF04E146086D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; + IBSC_MODULE = RDEpubReaderView; + INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = RDEpubReaderViewAssets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 4A2B39332FB866C980A9E53B8D8CBD07 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E1121A6303533CBF8AF0FC0CE2257AD2 /* RDEpubReaderView.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/RDEpubReaderView/RDEpubReaderView-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RDEpubReaderView/RDEpubReaderView.modulemap"; + PRODUCT_MODULE_NAME = RDEpubReaderView; + PRODUCT_NAME = RDEpubReaderView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.10; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 50F8FFD3B4E6D3CE1AE08DEB910B48EE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C357AC8D7A6E01440AC68979B529B2F7 /* RDSpeechReaderView.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap"; + PRODUCT_MODULE_NAME = RDSpeechReaderView; + PRODUCT_NAME = RDSpeechReaderView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.10; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 52537393D6301EC4EC1D446B22DAA4B6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; + IBSC_MODULE = SnapKit; + INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = SnapKit_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 56E2A90AB727964FF6CE4CB126AB1E28 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; + PRODUCT_MODULE_NAME = DTFoundation; + PRODUCT_NAME = DTFoundation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 59AB49DA21BAA1DD8CE07B674424404B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2042A956F6ADB5E2CF8DB889FA6F7652 /* RDAIReaderView.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView.modulemap"; + PRODUCT_MODULE_NAME = RDAIReaderView; + PRODUCT_NAME = RDAIReaderView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.10; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 65DAB5BFE60604F3516FEFD905FD46E9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3FDE76F77A49B86E3A4499727321AC11 /* DTCoreText.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; + IBSC_MODULE = DTCoreText; + INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = Resources; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 8E8B39CBF8B43C5AD2EA268A100C9EC4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; + IBSC_MODULE = ZIPFoundation; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = ZIPFoundation_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 984661288CA8670CA17D31E2AC43B452 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZIPFoundation"; + IBSC_MODULE = ZIPFoundation; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ResourceBundle-ZIPFoundation_Privacy-ZIPFoundation-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = ZIPFoundation_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 9D7FD8BA36976E73CCF9151C7069CA0E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; A0DC1C2C814704734F83EAB35BB20B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4373,7 +4484,6 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -4481,6 +4591,63 @@ }; name = Debug; }; + AC2483A21E8FD8DEF00B9728C7C2B955 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; + IBSC_MODULE = DTCoreText; + INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = Resources; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + B169B65A62DAE42DE9A6CD1322B2770D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D7826602DA2629A5A1DD5912ADCAF5B8 /* ZIPFoundation.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation.modulemap"; + PRODUCT_MODULE_NAME = ZIPFoundation; + PRODUCT_NAME = ZIPFoundation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; B7CDE9995A60AE7262CC14391698821B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */; @@ -4521,243 +4688,9 @@ }; name = Release; }; - BE1EE1133D55D0EE51AAC09CC6453A46 /* Debug */ = { + C85CBB195B27DB56AF8571E35EBE0A8D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C357AC8D7A6E01440AC68979B529B2F7 /* RDSpeechReaderView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDSpeechReaderView/RDSpeechReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDSpeechReaderView; - PRODUCT_NAME = RDSpeechReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - C566CDFEC9B48B4CEA542959E79901B7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/ZIPFoundation/ZIPFoundation.modulemap"; - PRODUCT_MODULE_NAME = ZIPFoundation; - PRODUCT_NAME = ZIPFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - CF707113F5491DEC4EBF7085CB00EC4E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D02358DF7C9601E1ECDBAAE752AA369B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B75141FED04E4EEC380F0173E5DEBCA7 /* RDAIReaderView.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RDAIReaderView/RDAIReaderView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RDAIReaderView/RDAIReaderView.modulemap"; - PRODUCT_MODULE_NAME = RDAIReaderView; - PRODUCT_NAME = RDAIReaderView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DE627312153A773BC57440D8FE3CA6CE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D475ACC199E6D23FD275CCF5D187243B /* RDEpubReaderView.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = RDEpubReaderView; - INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RDEpubReaderViewAssets; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - EB763793A4BB04C8B8F6A6EDCD571F23 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - F3CE254012949D6410E4C34930772FCC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = DTCoreText; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Resources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - F89A5BEA70D1FAD91E9BCF15955F0492 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D475ACC199E6D23FD275CCF5D187243B /* RDEpubReaderView.debug.xcconfig */; + baseConfigurationReference = 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -4789,11 +4722,68 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + C9C929215F56192257D3B3A26DBBF8B3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; + DD4C466290589D036BF65FD06F472CAD /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 48146273249EBEC5F8B586E4AD1FBBFE /* RDEpubReaderView.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; + IBSC_MODULE = RDEpubReaderView; + INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = RDEpubReaderViewAssets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; FF4D798DA0305084DBBF74A386269F29 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 517D2A78DA380DB287A13785F250D543 /* RDPDFReaderView.debug.xcconfig */; @@ -4836,15 +4826,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0360A2CBBE7F40DDCF7BD6D9346200E7 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F3CE254012949D6410E4C34930772FCC /* Debug */, - 0B20D3D85903912845AF663B0E49AC6D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 0C6B1944226D4396EB72162F792F7CD2 /* Build configuration list for PBXNativeTarget "DTCoreText" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4854,20 +4835,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 27C3BF37191BEC7B232544E76D4A3A84 /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */ = { + 16A5B3C4A095036807F7094109F29449 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */ = { isa = XCConfigurationList; buildConfigurations = ( - F89A5BEA70D1FAD91E9BCF15955F0492 /* Debug */, - 57E088951A12170B52B7A1054C6487A7 /* Release */, + 48543F4CC7F4FCF27961EF04E146086D /* Debug */, + DD4C466290589D036BF65FD06F472CAD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3C795AC9AB79C38D7D5ABE25002B4333 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { + 405AA89C9ECEED358343DF9D47442DFD /* Build configuration list for PBXNativeTarget "RDAIReaderView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 01F68F890F2620FE0BBB8E47082D586E /* Debug */, - 929A640856AC2588D883FB7DD34A3DAF /* Release */, + 59AB49DA21BAA1DD8CE07B674424404B /* Debug */, + 1111F3DEE9EF70EEF9A8A5F1F617B60F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4881,42 +4862,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 50CD9D0637599E6F746E458297CF9D17 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C566CDFEC9B48B4CEA542959E79901B7 /* Debug */, - 21BF661875BF84C1327A3EA55AA7CA30 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B44221983F052B7553F6B2779CC8345 /* Build configuration list for PBXNativeTarget "RDSpeechReaderView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BE1EE1133D55D0EE51AAC09CC6453A46 /* Debug */, - 8561A1F936D83B0C176DA51E09B4C4B0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 630E67E726745F8F7EBBB15A664D09F2 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 150BBB63F12BC4D9B3004CF340C11FE2 /* Debug */, - 3B43520826A15E4625613E09CBCC0D68 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 64E3CBFB2E3259592BD29A3038A44B1F /* Build configuration list for PBXNativeTarget "SnapKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 69A6B34F722DBC44AAEB0275F77AED27 /* Debug */, - EB763793A4BB04C8B8F6A6EDCD571F23 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 7A3DCEA78F09A537F1401A969F58D46A /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4926,29 +4871,65 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A6097DEBED8762FC0CF17FBE5E9F3F86 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */ = { + 88DFAB0C5D472D4A00EA6904F6B72B8C /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { isa = XCConfigurationList; buildConfigurations = ( - DE627312153A773BC57440D8FE3CA6CE /* Debug */, - 37F98935CFE42AD22302FDAAA6171048 /* Release */, + AC2483A21E8FD8DEF00B9728C7C2B955 /* Debug */, + 65DAB5BFE60604F3516FEFD905FD46E9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A8A434CCAF88ED38465F12E695799F3B /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { + 90D5F965BB40CB8C886D5F80738D76A7 /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1FE90180987D3E4C6D6DB39231C19B0F /* Debug */, - CF707113F5491DEC4EBF7085CB00EC4E /* Release */, + 15BDA228DFA9DD44C8B100038F4CBB8E /* Debug */, + 56E2A90AB727964FF6CE4CB126AB1E28 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B39F74DCB4F025606C8D0038AE8522D9 /* Build configuration list for PBXNativeTarget "RDAIReaderView" */ = { + AB65638284CBD3373B8D5B6C1314CFFC /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0FB065A42C91EEC5CD72DA4FA77E1BC6 /* Debug */, - D02358DF7C9601E1ECDBAAE752AA369B /* Release */, + 4A2B39332FB866C980A9E53B8D8CBD07 /* Debug */, + C85CBB195B27DB56AF8571E35EBE0A8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ACF0A1F60E8D8F76664F3C28A623BC64 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9C929215F56192257D3B3A26DBBF8B3 /* Debug */, + 9D7FD8BA36976E73CCF9151C7069CA0E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ADFB5EC9B1DA991B04C8903769EF834E /* Build configuration list for PBXNativeTarget "RDSpeechReaderView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 50F8FFD3B4E6D3CE1AE08DEB910B48EE /* Debug */, + 396BC6EEF9E7E0BCAAEA0DC00F55968B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B4EFCC222F2A780FF376179B1C60098D /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 40FFFF4767533BC952BA1F78CCDCB4AC /* Debug */, + B169B65A62DAE42DE9A6CD1322B2770D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DE7AB0E01615B50F23381FFAEFF20E5B /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 52537393D6301EC4EC1D446B22DAA4B6 /* Debug */, + 459CB83D11DA56FD02D86CB1C6408A7B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4962,6 +4943,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + EB7FE7AF01BFFEBE77A46FDC98F484EA /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 984661288CA8670CA17D31E2AC43B452 /* Debug */, + 8E8B39CBF8B43C5AD2EA268A100C9EC4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig index 7eae0ed..5746c6c 100644 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.debug.xcconfig @@ -5,7 +5,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView/RDAIReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView/RDPDFReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "DTFoundation" -framework "FoundationModels" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -framework "ZIPFoundation" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -framework "ZIPFoundation" -weak_framework "FoundationModels" OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig index 7eae0ed..5746c6c 100644 --- a/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig @@ -5,7 +5,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView/RDAIReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView/RDEpubReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView/RDPDFReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView/RDSpeechReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.framework/Headers" "$(SDKROOT)/usr/include/libxml2" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "DTFoundation" -framework "FoundationModels" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -framework "ZIPFoundation" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -framework "ZIPFoundation" -weak_framework "FoundationModels" OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig index 2e03aac..dd0d492 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.debug.xcconfig @@ -2,7 +2,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CryptoKit" -framework "FoundationModels" -framework "NaturalLanguage" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CryptoKit" -framework "NaturalLanguage" -framework "UIKit" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig index 2e03aac..dd0d492 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDAIReaderView/RDAIReaderView.release.xcconfig @@ -2,7 +2,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CryptoKit" -framework "FoundationModels" -framework "NaturalLanguage" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CryptoKit" -framework "NaturalLanguage" -framework "UIKit" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig index d0533da..39dd71c 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.debug.xcconfig @@ -3,7 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "FoundationModels" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "ZIPFoundation" +OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "ZIPFoundation" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig index d0533da..39dd71c 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDEpubReaderView/RDEpubReaderView.release.xcconfig @@ -3,7 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "FoundationModels" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "ZIPFoundation" +OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreGraphics" -framework "CoreText" -framework "CryptoKit" -framework "DTCoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "QuartzCore" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "ZIPFoundation" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig index 495c0a1..7713801 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig @@ -3,7 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreImage" -framework "CryptoKit" -framework "FoundationModels" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" +OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreImage" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig index 495c0a1..7713801 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.release.xcconfig @@ -3,7 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreImage" -framework "CryptoKit" -framework "FoundationModels" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" +OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CoreImage" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "PDFKit" -framework "RDAIReaderView" -framework "RDSpeechReaderView" -framework "SnapKit" -framework "UIKit" -framework "Vision" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig index 50df8d7..fd2f825 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.debug.xcconfig @@ -3,7 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CryptoKit" -framework "FoundationModels" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "RDAIReaderView" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "RDAIReaderView" -framework "UIKit" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig index 50df8d7..fd2f825 100644 --- a/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig +++ b/ReadViewDemo/Pods/Target Support Files/RDSpeechReaderView/RDSpeechReaderView.release.xcconfig @@ -3,7 +3,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RDSpeechReaderView FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RDAIReaderView" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CryptoKit" -framework "FoundationModels" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "RDAIReaderView" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "AVFAudio" -framework "CryptoKit" -framework "MediaPlayer" -framework "NaturalLanguage" -framework "RDAIReaderView" -framework "UIKit" -weak_framework "FoundationModels" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj b/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj index 7232b2b..cda965e 100644 --- a/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj +++ b/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj @@ -41,8 +41,8 @@ 63B2852E59996922386A3111 /* AccessibilityIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00F495E17B90CCF1C7FE8C27 /* AccessibilityIdentifiers.swift */; }; 9AAFB855EC7AC09D1E0B6742 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 697A5BCF0D93DBEC18E21A09 /* Foundation.framework */; }; A1C5E34F6B7192D400A1B234 /* PDFAnnotationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C5E34F6B7192D400A1B235 /* PDFAnnotationTests.swift */; }; - C0FFEE0100000001AABBCC01 /* PDFPageTurnBlankPageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0FFEE0100000001AABBCC02 /* PDFPageTurnBlankPageTests.swift */; }; C08FF8D030048DC5147729E9 /* ReaderOpenCloseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EDF066BA12974E6CFBE519F /* ReaderOpenCloseTests.swift */; }; + C0FFEE0100000001AABBCC01 /* PDFPageTurnBlankPageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0FFEE0100000001AABBCC02 /* PDFPageTurnBlankPageTests.swift */; }; DE1437A969DA1C5F0CBB047D /* Pods_ReadViewDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 792DF85CE4A3DD80D67843C7 /* Pods_ReadViewDemo.framework */; }; FEDB5937CEB858CB06E38E2D /* SettingsPanelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 201C2B482287866487EFAE66 /* SettingsPanelTests.swift */; }; /* End PBXBuildFile section */ @@ -95,8 +95,8 @@ 8FFD606A5A1CBDCC3CA87F1C /* ReadViewDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReadViewDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 9EDF066BA12974E6CFBE519F /* ReaderOpenCloseTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReaderOpenCloseTests.swift; sourceTree = ""; }; A1C5E34F6B7192D400A1B235 /* PDFAnnotationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PDFAnnotationTests.swift; sourceTree = ""; }; - C0FFEE0100000001AABBCC02 /* PDFPageTurnBlankPageTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PDFPageTurnBlankPageTests.swift; sourceTree = ""; }; BADF0A18AD034B74A482A4C1 /* ReaderToolbarTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReaderToolbarTests.swift; sourceTree = ""; }; + C0FFEE0100000001AABBCC02 /* PDFPageTurnBlankPageTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PDFPageTurnBlankPageTests.swift; sourceTree = ""; }; CFE01DBDCB8D790832A4DE3F /* SearchTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SearchTests.swift; sourceTree = ""; }; DE070C1D2FBF0CC900ED065F /* ReadViewDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReadViewDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; FB49AFCCBC2BE04C82B8F286 /* DisplayTypeTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DisplayTypeTests.swift; sourceTree = ""; }; @@ -456,7 +456,6 @@ CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = MG4Z7FU83W; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; PRODUCT_BUNDLE_IDENTIFIER = cn.shen.ReadViewDemoUITests; @@ -481,7 +480,6 @@ CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = MG4Z7FU83W; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; PRODUCT_BUNDLE_IDENTIFIER = cn.shen.ReadViewDemoUITests; @@ -508,7 +506,6 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = MG4Z7FU83W; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ReadViewDemo/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -547,7 +544,6 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = MG4Z7FU83W; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ReadViewDemo/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -612,7 +608,6 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -675,7 +670,6 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; diff --git a/ReadViewDemo/ReadViewDemo/ViewController.swift b/ReadViewDemo/ReadViewDemo/ViewController.swift index a6064c3..56bcab1 100644 --- a/ReadViewDemo/ReadViewDemo/ViewController.swift +++ b/ReadViewDemo/ReadViewDemo/ViewController.swift @@ -353,6 +353,9 @@ final class ViewController: UIViewController { defaults.removeObject(forKey: key) } } + // 高亮/书签已改为写受保护文件(不再明文进 UserDefaults), + // 只清 defaults 会让标注跨用例残留,必须一起清掉。 + RDEPUBProtectedContentStore().removeAll() PDFDemoReaderViewController.resetPersistedAnnotations() } diff --git a/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift b/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift index 52e3ee6..38e7060 100644 --- a/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift +++ b/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift @@ -74,10 +74,13 @@ enum IDs { static let searchClose = "epub.reader.search.close" static let searchCount = "epub.reader.search.count" + /// EPUB 设置面板是固定高度的 pill 面板,没有 scrollView;这是它的根视图。 + static let settingsPanel = "epub.reader.settings.panel" + /// 只有 PDF 设置面板才有 scrollView(`RDPDFReaderSettingsPanelViewController`)。 static let settingsScroll = "epub.reader.settings.scroll" static let settingsBrightness = "epub.reader.settings.brightness" - static let settingsFontIncrease = "epub.reader.settings.font.increase" - static let settingsFontDecrease = "epub.reader.settings.font.decrease" + /// 字号是滑块;SDK 从未提供 font.increase / font.decrease 按钮 + static let settingsFontSize = "epub.reader.settings.font.size" static let settingsFontValue = "epub.reader.settings.font.value" static let settingsFontChoice = "epub.reader.settings.font.choice" static let settingsLineHeight = "epub.reader.settings.lineHeight" diff --git a/ReadViewDemo/ReadViewDemoUITests/Helpers/XCUIApplication+Launch.swift b/ReadViewDemo/ReadViewDemoUITests/Helpers/XCUIApplication+Launch.swift index d6f72e9..1de028c 100644 --- a/ReadViewDemo/ReadViewDemoUITests/Helpers/XCUIApplication+Launch.swift +++ b/ReadViewDemo/ReadViewDemoUITests/Helpers/XCUIApplication+Launch.swift @@ -169,4 +169,74 @@ extension XCUIApplication { private func readerChromeIsVisible(requiredButtonIDs: [String]) -> Bool { requiredButtonIDs.allSatisfy { buttons[$0].exists } } + + // MARK: - 设置面板 + + /// 等 EPUB 设置面板出现。面板已改成固定高度布局,所有控件一屏可见, + /// 既没有 scrollView 也不需要滚动才能触达。 + @discardableResult + func waitForSettingsPanel(timeout: TimeInterval = 5) -> Bool { + if otherElements[IDs.settingsPanel].waitForExistence(timeout: timeout) { + return true + } + // 面板根视图偶尔不作为 otherElement 暴露,退回用「完成」按钮判定 + return buttons[IDs.settingsDone].waitForExistence(timeout: 1) + } + + /// 设置面板的字体/行距/翻页方式都是 pill 按钮 + action sheet,不是 + /// segmentedControl:点开 pill 后再点选项标题。 + @discardableResult + func selectSettingsPillOption( + pillIdentifier: String, + optionTitle: String, + timeout: TimeInterval = 5 + ) -> Bool { + let pill = buttons[pillIdentifier] + guard pill.waitForExistence(timeout: timeout) else { return false } + pill.tap() + + // action sheet 的选项在 iOS 上是 button,取消项同名风险由标题唯一性保证 + let option = sheets.buttons[optionTitle].exists + ? sheets.buttons[optionTitle] + : buttons[optionTitle] + guard option.waitForExistence(timeout: timeout) else { + // 收起 sheet,避免污染后续断言 + if sheets.buttons["取消"].exists { + sheets.buttons["取消"].tap() + } + return false + } + option.tap() + return true + } + + /// 字号是 slider(`epub.reader.settings.font.size`),没有增大/减小按钮。 + /// 把滑块推到指定归一化位置以触发重排;返回是否成功。 + @discardableResult + func adjustSettingsFontSize(toNormalizedPosition position: CGFloat, timeout: TimeInterval = 5) -> Bool { + let slider = sliders[IDs.settingsFontSize] + guard slider.waitForExistence(timeout: timeout) else { return false } + slider.adjust(toNormalizedSliderPosition: position) + return true + } + + /// 在当前值基础上增减字号,替代早已不存在的 font.increase / font.decrease 按钮。 + @discardableResult + func nudgeSettingsFontSize(by delta: CGFloat, timeout: TimeInterval = 5) -> Bool { + let slider = sliders[IDs.settingsFontSize] + guard slider.waitForExistence(timeout: timeout) else { return false } + let target = min(max(slider.normalizedSliderPosition + delta, 0), 1) + slider.adjust(toNormalizedSliderPosition: target) + return true + } + + @discardableResult + func increaseSettingsFontSize(timeout: TimeInterval = 5) -> Bool { + nudgeSettingsFontSize(by: 0.25, timeout: timeout) + } + + @discardableResult + func decreaseSettingsFontSize(timeout: TimeInterval = 5) -> Bool { + nudgeSettingsFontSize(by: -0.25, timeout: timeout) + } } diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/AsyncChapterLoadingTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/AsyncChapterLoadingTests.swift index 06897d7..84005d1 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/AsyncChapterLoadingTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/AsyncChapterLoadingTests.swift @@ -465,12 +465,8 @@ final class AsyncChapterLoadingTests: XCTestCase { // Change font size via settings app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - let fontIncrease = app.buttons[IDs.settingsFontIncrease] - XCTAssertTrue(fontIncrease.waitForExistence(timeout: 3), "字号增大按钮不存在") - fontIncrease.tap() - RunLoop.current.run(until: Date().addingTimeInterval(0.3)) - fontIncrease.tap() - RunLoop.current.run(until: Date().addingTimeInterval(0.3)) + XCTAssertTrue(app.adjustSettingsFontSize(toNormalizedPosition: 0.9), "字号滑块不存在") + RunLoop.current.run(until: Date().addingTimeInterval(0.6)) // Close settings let doneButton = app.buttons[IDs.settingsDone] diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/DisplayTypeTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/DisplayTypeTests.swift index 93bd95e..9776e47 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/DisplayTypeTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/DisplayTypeTests.swift @@ -41,9 +41,10 @@ final class DisplayTypeTests: XCTestCase { XCTAssertTrue(app.buttons[IDs.readerSettings].waitForExistence(timeout: 3)) app.buttons[IDs.readerSettings].tap() - let displayTypeControl = app.segmentedControls[IDs.settingsDisplayType] - XCTAssertTrue(displayTypeControl.waitForExistence(timeout: 5)) - displayTypeControl.buttons.element(boundBy: 2).tap() + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsDisplayType, optionTitle: "竖滑"), + "翻页方式应可切换到竖滑" + ) app.buttons[IDs.settingsDone].tap() app.waitForDemoReaderState(timeout: 8, description: "display=verticalScroll after switch") { $0.display == "verticalScroll" } diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/ErrorAndEdgeCaseTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/ErrorAndEdgeCaseTests.swift index 4d32826..77a4b61 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/ErrorAndEdgeCaseTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/ErrorAndEdgeCaseTests.swift @@ -45,23 +45,20 @@ final class ErrorAndEdgeCaseTests: XCTestCase { app.waitForDemoReaderState(timeout: 8, description: "reader=opened") { $0.isOpened } } - func testSettingsPanelScrollReachesAllControls() throws { + func testSettingsPanelReachesAllControls() throws { app.launchAndOpenSampleBook() app.waitForReader(timeout: 12) app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - let settingsScroll = app.scrollViews[IDs.settingsScroll] - XCTAssertTrue(settingsScroll.waitForExistence(timeout: 5), "设置面板未出现") + XCTAssertTrue(app.waitForSettingsPanel(), "设置面板未出现") - XCTAssertTrue(app.buttons[IDs.settingsFontIncrease].waitForExistence(timeout: 3)) - XCTAssertTrue(app.buttons[IDs.settingsBrightness].waitForExistence(timeout: 3)) + XCTAssertTrue(app.sliders[IDs.settingsFontSize].waitForExistence(timeout: 3)) + XCTAssertTrue(app.sliders[IDs.settingsBrightness].waitForExistence(timeout: 3)) - settingsScroll.swipeUp() - XCTAssertTrue(app.segmentedControls[IDs.settingsDisplayType].waitForExistence(timeout: 5)) + XCTAssertTrue(app.buttons[IDs.settingsDisplayType].waitForExistence(timeout: 5)) - settingsScroll.swipeUp() XCTAssertTrue(app.buttons[IDs.settingsTheme(5)].waitForExistence(timeout: 5)) app.buttons[IDs.settingsDone].tap() diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift index c04caca..5b411fa 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift @@ -8,7 +8,9 @@ final class LocationPersistenceTests: XCTestCase { } func testReadingPositionRestoredOnReopen() throws { - app.launchAndOpenSampleBook() + // 必须用滚动模式:仿真翻页(默认)下没有 `epub.reader.paging` + // collectionView,swipeLeft 落不到任何东西,页码永远停在 1 + app.launchAndOpenSampleBook(displayType: "scroll") app.waitForReader(timeout: 12) _ = app.waitForDemoReaderState(timeout: 5, description: "存在页码") { $0.page != nil } @@ -30,7 +32,8 @@ final class LocationPersistenceTests: XCTestCase { let backButton = app.buttons[IDs.readerBack] if backButton.waitForExistence(timeout: 3) { backButton.tap() } - app.launchAndOpenSampleBook() + // 重开必须保留状态,否则 --demo-reset-state 会清掉刚存的阅读位置 + app.launchAndOpenSampleBook(displayType: "scroll", resetsReaderState: false) app.waitForReader(timeout: 12) let restoredState = app.waitForDemoReaderState(timeout: 8, description: "恢复阅读位置") { state in @@ -61,7 +64,7 @@ final class LocationPersistenceTests: XCTestCase { app.showReaderChromeIfNeeded() if app.buttons[IDs.readerSettings].waitForExistence(timeout: 3) { app.buttons[IDs.readerSettings].tap() } - if app.buttons[IDs.settingsFontIncrease].waitForExistence(timeout: 5) { app.buttons[IDs.settingsFontIncrease].tap() } + app.increaseSettingsFontSize() if app.buttons[IDs.settingsDone].waitForExistence(timeout: 3) { app.buttons[IDs.settingsDone].tap() } let backButton = app.buttons[IDs.readerBack] @@ -74,7 +77,8 @@ final class LocationPersistenceTests: XCTestCase { } func testPositionSurvivesFontChoiceAndLineHeightChange() throws { - app.launchAndOpenSampleBook(resetsReaderState: true) + // 同上:需要真正能翻页的模式 + app.launchAndOpenSampleBook(displayType: "scroll", resetsReaderState: true) app.waitForReader(timeout: 12) let paging = app.collectionViews[IDs.readerPaging] @@ -97,17 +101,14 @@ final class LocationPersistenceTests: XCTestCase { XCTAssertTrue(app.buttons[IDs.readerSettings].waitForExistence(timeout: 3)) app.buttons[IDs.readerSettings].tap() - let fontChoiceControl = app.segmentedControls[IDs.settingsFontChoice] - XCTAssertTrue(fontChoiceControl.waitForExistence(timeout: 5), "字体选择控件应出现") - if fontChoiceControl.buttons.count > 1 { - fontChoiceControl.buttons.element(boundBy: 1).tap() - } - - let lineHeightControl = app.segmentedControls[IDs.settingsLineHeight] - XCTAssertTrue(lineHeightControl.waitForExistence(timeout: 5), "行距控件应出现") - if lineHeightControl.buttons.count > 1 { - lineHeightControl.buttons.element(boundBy: min(1, lineHeightControl.buttons.count - 1)).tap() - } + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsFontChoice, optionTitle: "宋体"), + "字体选择控件应可切换" + ) + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsLineHeight, optionTitle: "标准"), + "行距控件应可切换" + ) XCTAssertTrue(app.buttons[IDs.settingsDone].waitForExistence(timeout: 3)) app.buttons[IDs.settingsDone].tap() @@ -131,8 +132,9 @@ final class LocationPersistenceTests: XCTestCase { app.waitForDemoReaderState(timeout: 5, description: "bookmarks=1") { $0.bookmarks == 1 } app.hideReaderChromeIfNeeded() - let content = app.otherElements[IDs.readerSelectionText].firstMatch - XCTAssertTrue(content.waitForExistence(timeout: 5)) + // 与其它选区用例一致:渲染路径没暴露选区元素时跳过,而不是硬失败在 + // 与本用例(跨重开保持)无关的前置步骤上 + let content = try app.requireSelectionText() let start = content.coordinate(withNormalizedOffset: CGVector(dx: 0.2, dy: 0.5)) let end = content.coordinate(withNormalizedOffset: CGVector(dx: 0.55, dy: 0.5)) start.press(forDuration: 0.8, thenDragTo: end) @@ -174,11 +176,10 @@ final class LocationPersistenceTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - let fontChoiceControl = app.segmentedControls[IDs.settingsFontChoice] - XCTAssertTrue(fontChoiceControl.waitForExistence(timeout: 5), "字体选择控件应出现") - if fontChoiceControl.buttons.count > 1 { - fontChoiceControl.buttons.element(boundBy: 1).tap() - } + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsFontChoice, optionTitle: "宋体"), + "字体选择控件应可切换" + ) app.buttons[IDs.settingsDone].tap() let content = app.otherElements[IDs.readerContent].firstMatch diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/MemoryFootprintTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/MemoryFootprintTests.swift index 83bd2aa..7a3a4a6 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/MemoryFootprintTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/MemoryFootprintTests.swift @@ -92,10 +92,8 @@ final class MemoryFootprintTests: XCTestCase { XCTAssertTrue(app.buttons[IDs.readerSettings].waitForExistence(timeout: 5), "设置按钮不存在") app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5), "设置面板未出现") - XCTAssertTrue(app.buttons[IDs.settingsFontIncrease].waitForExistence(timeout: 3), "字号增大按钮不存在") - app.buttons[IDs.settingsFontIncrease].tap() - app.buttons[IDs.settingsFontIncrease].tap() + XCTAssertTrue(app.waitForSettingsPanel(), "设置面板未出现") + XCTAssertTrue(app.adjustSettingsFontSize(toNormalizedPosition: 0.9), "字号滑块不存在") XCTAssertTrue(app.buttons[IDs.settingsDone].waitForExistence(timeout: 3), "完成按钮不存在") app.buttons[IDs.settingsDone].tap() diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SearchTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SearchTests.swift index 82e3705..61c9506 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SearchTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SearchTests.swift @@ -301,10 +301,7 @@ final class SearchTests: XCTestCase { XCTAssertTrue(settingsButton.waitForExistence(timeout: 3)) settingsButton.tap() - let fontIncrease = app.buttons[IDs.settingsFontIncrease] - XCTAssertTrue(fontIncrease.waitForExistence(timeout: 3)) - fontIncrease.tap() - fontIncrease.tap() + XCTAssertTrue(app.adjustSettingsFontSize(toNormalizedPosition: 0.9), "字号滑块应存在") Thread.sleep(forTimeInterval: 0.5) let doneButton = app.buttons[IDs.settingsDone] @@ -367,10 +364,7 @@ final class SearchTests: XCTestCase { XCTAssertTrue(settingsButton.waitForExistence(timeout: 3), "设置按钮应存在") settingsButton.tap() - let fontIncrease = app.buttons[IDs.settingsFontIncrease] - XCTAssertTrue(fontIncrease.waitForExistence(timeout: 3), "字号增大按钮应存在") - fontIncrease.tap() - fontIncrease.tap() + XCTAssertTrue(app.adjustSettingsFontSize(toNormalizedPosition: 0.9), "字号滑块应存在") Thread.sleep(forTimeInterval: 0.5) let doneButton = app.buttons[IDs.settingsDone] diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SelectionAnnotateTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SelectionAnnotateTests.swift index cb91f2b..511fe3c 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SelectionAnnotateTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SelectionAnnotateTests.swift @@ -114,10 +114,7 @@ final class SelectionAnnotateTests: XCTestCase { XCTAssertTrue(settingsButton.waitForExistence(timeout: 3), "设置按钮应存在") settingsButton.tap() - let fontIncrease = app.buttons[IDs.settingsFontIncrease] - XCTAssertTrue(fontIncrease.waitForExistence(timeout: 3), "字号增大按钮应存在") - fontIncrease.tap() - fontIncrease.tap() + XCTAssertTrue(app.adjustSettingsFontSize(toNormalizedPosition: 0.9), "字号滑块应存在") Thread.sleep(forTimeInterval: 0.5) let doneButton = app.buttons[IDs.settingsDone] diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsEffectTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsEffectTests.swift index a70f242..b8aa854 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsEffectTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsEffectTests.swift @@ -16,9 +16,8 @@ final class SettingsEffectTests: XCTestCase { XCTAssertTrue(app.buttons[IDs.readerSettings].waitForExistence(timeout: 3), "设置按钮不存在") app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5), "设置面板未出现") - XCTAssertTrue(app.buttons[IDs.settingsFontIncrease].waitForExistence(timeout: 3), "字号增大按钮不存在") - app.buttons[IDs.settingsFontIncrease].tap() + XCTAssertTrue(app.waitForSettingsPanel(), "设置面板未出现") + XCTAssertTrue(app.increaseSettingsFontSize(), "字号滑块不存在") XCTAssertTrue(app.buttons[IDs.settingsDone].waitForExistence(timeout: 3), "完成按钮不存在") app.buttons[IDs.settingsDone].tap() @@ -32,8 +31,7 @@ final class SettingsEffectTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5), "设置面板未出现") - app.scrollViews[IDs.settingsScroll].swipeUp() + XCTAssertTrue(app.waitForSettingsPanel(), "设置面板未出现") let darkThemeButton = app.buttons[IDs.settingsTheme(5)] if darkThemeButton.waitForExistence(timeout: 3) { darkThemeButton.tap() } @@ -50,12 +48,9 @@ final class SettingsEffectTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5)) + XCTAssertTrue(app.waitForSettingsPanel()) - let lineHeightControl = app.segmentedControls[IDs.settingsLineHeight] - if lineHeightControl.waitForExistence(timeout: 3) && lineHeightControl.buttons.count > 1 { - lineHeightControl.buttons.element(boundBy: 1).tap() - } + app.selectSettingsPillOption(pillIdentifier: IDs.settingsLineHeight, optionTitle: "标准") app.buttons[IDs.settingsDone].tap() app.waitForDemoReaderState(timeout: 8, description: "reader=opened") { $0.isOpened } @@ -68,12 +63,9 @@ final class SettingsEffectTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5)) + XCTAssertTrue(app.waitForSettingsPanel()) - let displayTypeControl = app.segmentedControls[IDs.settingsDisplayType] - if displayTypeControl.waitForExistence(timeout: 3) && displayTypeControl.buttons.count > 0 { - displayTypeControl.buttons.element(boundBy: 0).tap() - } + app.selectSettingsPillOption(pillIdentifier: IDs.settingsDisplayType, optionTitle: "仿真") app.buttons[IDs.settingsDone].tap() app.waitForDemoReaderState(timeout: 8, description: "display changed") { $0.display != nil } @@ -98,19 +90,21 @@ final class SettingsEffectTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.buttons[IDs.settingsFontIncrease].waitForExistence(timeout: 5)) + XCTAssertTrue(app.sliders[IDs.settingsFontSize].waitForExistence(timeout: 5)) let fontValueLabel = app.staticTexts[IDs.settingsFontValue] XCTAssertTrue(fontValueLabel.waitForExistence(timeout: 3)) let originalFontValue = fontValueLabel.label - app.buttons[IDs.settingsFontIncrease].tap() + XCTAssertTrue(app.increaseSettingsFontSize(), "字号滑块应存在") let newFontValue = fontValueLabel.label - XCTAssertNotEqual(newFontValue, originalFontValue, "点击增大后字号 label 应变化") + XCTAssertNotEqual(newFontValue, originalFontValue, "增大字号后 label 应变化") app.buttons[IDs.settingsDone].tap() app.buttons[IDs.readerBack].tap() - app.launchAndOpenSampleBook() + // 必须保留状态:默认的 resetsReaderState 会清掉刚存下的设置, + // 那样这个用例永远测不到持久化 + app.launchAndOpenSampleBook(resetsReaderState: false) app.waitForReader(timeout: 12) app.showReaderChromeIfNeeded() @@ -158,11 +152,12 @@ final class SettingsEffectTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - let fontChoiceControl = app.segmentedControls[IDs.settingsFontChoice] + let fontChoiceControl = app.buttons[IDs.settingsFontChoice] XCTAssertTrue(fontChoiceControl.waitForExistence(timeout: 5)) - if fontChoiceControl.buttons.count > 1 { - fontChoiceControl.buttons.element(boundBy: 1).tap() - } + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsFontChoice, optionTitle: "宋体"), + "字体应可切换到宋体" + ) XCTAssertEqual(fontChoiceControl.value as? String, "宋体", "切换字体后当前字体值应更新") app.buttons[IDs.settingsDone].tap() @@ -174,7 +169,7 @@ final class SettingsEffectTests: XCTestCase { app.showReaderChromeIfNeeded() app.buttons[IDs.readerSettings].tap() - let reopenedFontChoiceControl = app.segmentedControls[IDs.settingsFontChoice] + let reopenedFontChoiceControl = app.buttons[IDs.settingsFontChoice] XCTAssertTrue(reopenedFontChoiceControl.waitForExistence(timeout: 5)) XCTAssertEqual(reopenedFontChoiceControl.value as? String, "宋体", "字体选择应在重启后保持") app.buttons[IDs.settingsDone].tap() diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsExtendedTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsExtendedTests.swift index 7cff389..7780f57 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsExtendedTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsExtendedTests.swift @@ -14,7 +14,7 @@ final class SettingsExtendedTests: XCTestCase { XCTAssertTrue(app.buttons[IDs.readerSettings].waitForExistence(timeout: 5)) app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5)) + XCTAssertTrue(app.waitForSettingsPanel()) } func testBrightnessSliderExists() { @@ -25,12 +25,13 @@ final class SettingsExtendedTests: XCTestCase { func testLineHeightControl() { openSettings() - let lineHeight = app.segmentedControls[IDs.settingsLineHeight] - XCTAssertTrue(lineHeight.waitForExistence(timeout: 3), "行距控件未出现") - lineHeight.buttons["紧凑"].tap() - lineHeight.buttons["标准"].tap() - lineHeight.buttons["宽松"].tap() + for title in ["紧凑", "标准", "宽松"] { + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsLineHeight, optionTitle: title), + "行距应可切换到\(title)" + ) + } app.buttons[IDs.settingsDone].tap() XCTAssertTrue(app.buttons[IDs.readerBack].waitForExistence(timeout: 5)) @@ -38,10 +39,11 @@ final class SettingsExtendedTests: XCTestCase { func testDisplayTypeFromSettings() { openSettings() - let displayType = app.segmentedControls[IDs.settingsDisplayType] - XCTAssertTrue(displayType.waitForExistence(timeout: 3), "翻页方式控件未出现") + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsDisplayType, optionTitle: "横滑"), + "翻页方式应可切换到横滑" + ) - displayType.buttons["横滑"].tap() app.buttons[IDs.settingsDone].tap() app.waitForDemoReaderState(timeout: 5, description: "display=horizontalScroll") { $0.display == "horizontalScroll" } } @@ -54,13 +56,13 @@ final class SettingsExtendedTests: XCTestCase { } } - func testScrollSettingsToReachAllControls() { + /// 面板是固定高度布局,所有控件一屏内可达,不需要滚动 + func testAllSettingsControlsReachableWithoutScrolling() { openSettings() - let scroll = app.scrollViews[IDs.settingsScroll] - XCTAssertTrue(scroll.waitForExistence(timeout: 3)) + XCTAssertTrue(app.sliders[IDs.settingsFontSize].waitForExistence(timeout: 3)) XCTAssertTrue(app.sliders[IDs.settingsBrightness].waitForExistence(timeout: 3)) - XCTAssertTrue(app.segmentedControls[IDs.settingsLineHeight].waitForExistence(timeout: 3)) - XCTAssertTrue(app.segmentedControls[IDs.settingsDisplayType].waitForExistence(timeout: 3)) + XCTAssertTrue(app.buttons[IDs.settingsLineHeight].waitForExistence(timeout: 3)) + XCTAssertTrue(app.buttons[IDs.settingsDisplayType].waitForExistence(timeout: 3)) } } diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsPanelTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsPanelTests.swift index 37e76fe..412d813 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsPanelTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/SettingsPanelTests.swift @@ -15,18 +15,19 @@ final class SettingsPanelTests: XCTestCase { XCTAssertTrue(app.buttons[IDs.readerSettings].waitForExistence(timeout: 5)) app.buttons[IDs.readerSettings].tap() - XCTAssertTrue(app.scrollViews[IDs.settingsScroll].waitForExistence(timeout: 5)) + XCTAssertTrue(app.waitForSettingsPanel()) let fontValue = app.staticTexts[IDs.settingsFontValue] XCTAssertTrue(fontValue.waitForExistence(timeout: 3)) let before = fontValue.label - app.buttons[IDs.settingsFontIncrease].tap() + XCTAssertTrue(app.increaseSettingsFontSize(), "字号滑块应存在") XCTAssertNotEqual(before, fontValue.label) - app.buttons[IDs.settingsFontDecrease].tap() - let fontChoice = app.segmentedControls[IDs.settingsFontChoice] - XCTAssertTrue(fontChoice.waitForExistence(timeout: 3)) - fontChoice.buttons["宋体"].tap() + XCTAssertTrue(app.decreaseSettingsFontSize(), "字号滑块应存在") + XCTAssertTrue( + app.selectSettingsPillOption(pillIdentifier: IDs.settingsFontChoice, optionTitle: "宋体"), + "字体应可切换到宋体" + ) let darkTheme = app.buttons[IDs.settingsTheme(5)] XCTAssertTrue(darkTheme.waitForExistence(timeout: 3)) diff --git a/Sources/RDAIReaderView/RDAIReaderView.podspec b/Sources/RDAIReaderView/RDAIReaderView.podspec index 48d5abd..5919d0d 100644 --- a/Sources/RDAIReaderView/RDAIReaderView.podspec +++ b/Sources/RDAIReaderView/RDAIReaderView.podspec @@ -26,7 +26,10 @@ Pod::Spec.new do |s| s.subspec "FoundationModels" do |foundation_models| foundation_models.source_files = "FoundationModels/**/*.swift" foundation_models.dependency "RDAIReaderView/Core", "~> 0.1" - foundation_models.frameworks = "FoundationModels" + # 弱链接:FoundationModels 仅 iOS 26+ 提供,硬链接会让宿主 App 在 + # iOS 18 上启动即 dyld 失败。文件内所有类型都是 @available(iOS 26.0, *), + # 低版本不会触达这些符号。 + foundation_models.weak_frameworks = "FoundationModels" end s.subspec "UI" do |ui| diff --git a/Sources/RDEpubReaderView/EPUBCore/RDEPUBParser+Archive.swift b/Sources/RDEpubReaderView/EPUBCore/RDEPUBParser+Archive.swift index fd76ea5..37de0d7 100644 --- a/Sources/RDEpubReaderView/EPUBCore/RDEPUBParser+Archive.swift +++ b/Sources/RDEpubReaderView/EPUBCore/RDEPUBParser+Archive.swift @@ -25,12 +25,22 @@ extension RDEPUBParser { } func extractArchiveIfNeeded(epubURL: URL) throws -> URL { + try Self.extractionQueue.sync { + try extractArchiveIfNeededLocked(epubURL: epubURL) + } + } + + /// 同一缓存目录在解压完成前不能被其他 parser 复用。串行化解压阶段后,复用 + /// 分支看到的 `container.xml` 才能代表完整书籍,而不是另一个 parser 的半成品。 + private func extractArchiveIfNeededLocked(epubURL: URL) throws -> URL { let fileManager = FileManager.default let extractionURL = temporaryExtractionDirectory(for: epubURL) if fileManager.fileExists(atPath: extractionURL.path) { let containerURL = extractionURL.appendingPathComponent("META-INF/container.xml") if fileManager.fileExists(atPath: containerURL.path) { + // 复用即视为一次访问,刷新时间戳,淘汰时才是真正的 LRU 而非 FIFO + Self.touchExtractionDirectory(extractionURL) return extractionURL } try? fileManager.removeItem(at: extractionURL) @@ -67,6 +77,8 @@ extension RDEPUBParser { throw error } + Self.touchExtractionDirectory(extractionURL) + Self.pruneExtractionCache(keeping: extractionURL) return extractionURL } @@ -107,9 +119,7 @@ extension RDEPUBParser { } func temporaryExtractionDirectory(for epubURL: URL) -> URL { - let baseURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first? - .appendingPathComponent("ssreaderview-epub", isDirectory: true) - ?? FileManager.default.temporaryDirectory.appendingPathComponent("ssreaderview-epub", isDirectory: true) + let baseURL = Self.extractionCacheRootURL let fileAttributes = try? FileManager.default.attributesOfItem(atPath: epubURL.path) let fileSize = (fileAttributes?[.size] as? NSNumber)?.stringValue ?? "0" let modifiedAt = (fileAttributes?[.modificationDate] as? Date)?.timeIntervalSince1970 ?? 0 @@ -133,6 +143,97 @@ extension RDEPUBParser { } } +// MARK: - 解压缓存淘汰 + +extension RDEPUBParser { + + private static let extractionQueue = DispatchQueue(label: "com.ssreaderview.epub.extraction-cache") + + /// 解压缓存总量上限;每次成功解压后超出即按最近使用时间淘汰最旧的书。 + public static var extractionCacheMaximumTotalBytes: UInt64 = 512 * 1024 * 1024 + + /// 解压目录的最长保留时长,超过即淘汰(默认 30 天)。 + public static var extractionCacheMaximumAge: TimeInterval = 30 * 24 * 60 * 60 + + public static var extractionCacheRootURL: URL { + let fileManager = FileManager.default + return fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first? + .appendingPathComponent("ssreaderview-epub", isDirectory: true) + ?? fileManager.temporaryDirectory.appendingPathComponent("ssreaderview-epub", isDirectory: true) + } + + /// 清空全部解压缓存。宿主收到低存储信号或需要「清理阅读数据」时调用。 + public static func clearExtractionCache() { + try? FileManager.default.removeItem(at: extractionCacheRootURL) + } + + /// 按「先过期、再总量」两级策略淘汰解压目录。 + /// - Parameter keeping: 本次正在使用的目录,任何情况下都不淘汰。 + public static func pruneExtractionCache(keeping survivor: URL? = nil) { + let fileManager = FileManager.default + let root = extractionCacheRootURL + guard let children = try? fileManager.contentsOfDirectory( + at: root, + includingPropertiesForKeys: [.isDirectoryKey, .contentModificationDateKey], + options: [.skipsHiddenFiles] + ) else { + return + } + + let survivorPath = survivor?.standardizedFileURL.path + var entries: [(url: URL, size: UInt64, modifiedAt: Date)] = [] + + for child in children { + let values = try? child.resourceValues(forKeys: [.isDirectoryKey, .contentModificationDateKey]) + guard values?.isDirectory == true else { continue } + let modifiedAt = values?.contentModificationDate ?? .distantPast + + if child.standardizedFileURL.path == survivorPath { + continue + } + if Date().timeIntervalSince(modifiedAt) > extractionCacheMaximumAge { + try? fileManager.removeItem(at: child) + continue + } + entries.append((child, directorySize(at: child), modifiedAt)) + } + + // survivor 也占额度,否则刚解压的大书会把其他书全部挤掉却仍然超限 + var total = entries.reduce(UInt64(0)) { $0 + $1.size } + if let survivor { + total += directorySize(at: survivor) + } + guard total > extractionCacheMaximumTotalBytes else { return } + + for entry in entries.sorted(by: { $0.modifiedAt < $1.modifiedAt }) { + try? fileManager.removeItem(at: entry.url) + total = total > entry.size ? total - entry.size : 0 + if total <= extractionCacheMaximumTotalBytes { return } + } + } + + fileprivate static func touchExtractionDirectory(_ url: URL) { + try? FileManager.default.setAttributes([.modificationDate: Date()], ofItemAtPath: url.path) + } + + private static func directorySize(at url: URL) -> UInt64 { + guard let enumerator = FileManager.default.enumerator( + at: url, + includingPropertiesForKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey], + options: [] + ) else { + return 0 + } + var total: UInt64 = 0 + for case let fileURL as URL in enumerator { + let values = try? fileURL.resourceValues(forKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey]) + let size = values?.totalFileAllocatedSize ?? values?.fileAllocatedSize ?? 0 + total += UInt64(size) + } + return total + } +} + private final class ContainerXMLParserDelegate: NSObject, XMLParserDelegate { private(set) var rootFilePath: String? diff --git a/Sources/RDEpubReaderView/EPUBCore/RDEPUBResourceURLSchemeHandler.swift b/Sources/RDEpubReaderView/EPUBCore/RDEPUBResourceURLSchemeHandler.swift index 7f6163e..96b662b 100644 --- a/Sources/RDEpubReaderView/EPUBCore/RDEPUBResourceURLSchemeHandler.swift +++ b/Sources/RDEpubReaderView/EPUBCore/RDEPUBResourceURLSchemeHandler.swift @@ -12,6 +12,11 @@ public final class RDEPUBResourceURLSchemeHandler: NSObject, WKURLSchemeHandler public static let host = "book" + /// 单个资源走「整体读入内存」分支时的上限。超过则优雅失败而不是冒着 + /// 内存峰值被系统终止的风险。只影响无法流式的分支(配置了加密资源 + /// provider 时密文必须整体解密),流式分支不受此限制。 + public static var maximumInMemoryResourceBytes: UInt64 = 64 * 1024 * 1024 + private weak var parser: RDEPUBParser? private let fileManager = FileManager.default @@ -87,9 +92,18 @@ public final class RDEPUBResourceURLSchemeHandler: NSObject, WKURLSchemeHandler RDEPUBWebViewDebug.logSchemeTask("ResourceScheme", requestURL: requestURL, fileURL: fileURL, event: "resolved") let fileSize = resourceSize(for: fileURL) - // 配置了加密资源 provider 时不能走流式分支:密文必须整体解密后再响应, - // 统一改走内存分支(内部会先询问 provider,明文文件仍按磁盘直读) - if let fileSize, fileSize > 524_288, parser.resourceDataProvider == nil { + // Provider 可以只解密部分资源并对明文资源返回 nil。先在 IO 队列确认是否 + // 真的拿到解密数据,再决定是否需要受内存上限约束,不能只因 provider 存在 + // 就拒绝大型明文音视频或图片。 + if parser.resourceDataProvider != nil { + respondWithProvidedDataOrFile( + fileURL: fileURL, + requestURL: requestURL, + taskID: taskID, + urlSchemeTask: urlSchemeTask, + fileSize: fileSize + ) + } else if let fileSize, fileSize > 524_288 { respondWithStreaming(fileURL: fileURL, requestURL: requestURL, taskID: taskID, urlSchemeTask: urlSchemeTask, fileSize: fileSize) } else { respondWithInMemoryData(fileURL: fileURL, requestURL: requestURL, taskID: taskID, urlSchemeTask: urlSchemeTask) @@ -121,12 +135,75 @@ public final class RDEPUBResourceURLSchemeHandler: NSObject, WKURLSchemeHandler return size } + private func respondWithProvidedDataOrFile( + fileURL: URL, + requestURL: URL, + taskID: ObjectIdentifier, + urlSchemeTask: any WKURLSchemeTask, + fileSize: UInt64? + ) { + ioQueue.async { [weak self] in + guard let self else { return } + guard self.isTaskActive(taskID) else { return } + if let provided = self.parser?.providedResourceData(at: fileURL) { + guard UInt64(provided.count) <= Self.maximumInMemoryResourceBytes else { + self.respondWithOversizeFailure( + fileURL: fileURL, + requestURL: requestURL, + taskID: taskID, + urlSchemeTask: urlSchemeTask, + byteCount: UInt64(provided.count) + ) + return + } + self.respondWithData(provided, fileURL: fileURL, requestURL: requestURL, taskID: taskID, urlSchemeTask: urlSchemeTask) + } else if let fileSize, fileSize > 524_288 { + self.respondWithStreaming(fileURL: fileURL, requestURL: requestURL, taskID: taskID, urlSchemeTask: urlSchemeTask, fileSize: fileSize) + } else { + self.respondWithInMemoryData(fileURL: fileURL, requestURL: requestURL, taskID: taskID, urlSchemeTask: urlSchemeTask, skipsProvider: true) + } + } + } + + private func respondWithOversizeFailure( + fileURL: URL, + requestURL: URL, + taskID: ObjectIdentifier, + urlSchemeTask: any WKURLSchemeTask, + byteCount: UInt64 + ) { + RDEPUBWebViewDebug.logSchemeTask( + "ResourceScheme", + requestURL: requestURL, + fileURL: fileURL, + event: "rejected-oversize-\(byteCount)" + ) + Self.recordFailure() + DispatchQueue.main.async { [weak self] in + guard let self, self.isTaskActive(taskID) else { return } + urlSchemeTask.didFailWithError( + NSError( + domain: NSURLErrorDomain, + code: NSURLErrorDataLengthExceedsMaximum, + userInfo: [NSLocalizedDescriptionKey: "资源超过单资源内存上限(\(byteCount) 字节)"] + ) + ) + self.clearTask(taskID) + } + } + /// H-08 fix: Dispatch all WKURLSchemeTask completion callbacks to the main queue, /// ensuring they run on the same serial queue that WebKit calls start() on. /// Also: cancelled tasks now call didFailWithError(NSURLErrorCancelled) instead /// of silently returning, satisfying the protocol requirement that every started /// task must receive a completion callback. - private func respondWithInMemoryData(fileURL: URL, requestURL: URL, taskID: ObjectIdentifier, urlSchemeTask: any WKURLSchemeTask) { + private func respondWithInMemoryData( + fileURL: URL, + requestURL: URL, + taskID: ObjectIdentifier, + urlSchemeTask: any WKURLSchemeTask, + skipsProvider: Bool = false + ) { ioQueue.async { [weak self] in guard let self else { DispatchQueue.main.async { @@ -137,7 +214,7 @@ public final class RDEPUBResourceURLSchemeHandler: NSObject, WKURLSchemeHandler do { // 优先向加密资源 provider 索取解密数据,provider 放行的明文文件仍直读磁盘 let data: Data - if let provided = self.parser?.providedResourceData(at: fileURL) { + if !skipsProvider, let provided = self.parser?.providedResourceData(at: fileURL) { data = provided } else { data = try Data(contentsOf: fileURL) @@ -148,22 +225,7 @@ public final class RDEPUBResourceURLSchemeHandler: NSObject, WKURLSchemeHandler } return } - let response = URLResponse( - url: requestURL, - mimeType: Self.mimeType(for: fileURL.pathExtension), - expectedContentLength: data.count, - textEncodingName: Self.textEncodingName(for: fileURL.pathExtension) - ) - self.dispatchTaskSuccessCallback( - taskID: taskID, - urlSchemeTask: urlSchemeTask - ) { - urlSchemeTask.didReceive(response) - urlSchemeTask.didReceive(data) - urlSchemeTask.didFinish() - } - Self.recordInMemoryResponse() - RDEPUBWebViewDebug.logSchemeTask("ResourceScheme", requestURL: requestURL, fileURL: fileURL, event: "finished") + self.respondWithData(data, fileURL: fileURL, requestURL: requestURL, taskID: taskID, urlSchemeTask: urlSchemeTask) return } catch { guard self.isTaskActive(taskID) else { @@ -182,6 +244,31 @@ public final class RDEPUBResourceURLSchemeHandler: NSObject, WKURLSchemeHandler } } + private func respondWithData( + _ data: Data, + fileURL: URL, + requestURL: URL, + taskID: ObjectIdentifier, + urlSchemeTask: any WKURLSchemeTask + ) { + let response = URLResponse( + url: requestURL, + mimeType: Self.mimeType(for: fileURL.pathExtension), + expectedContentLength: data.count, + textEncodingName: Self.textEncodingName(for: fileURL.pathExtension) + ) + dispatchTaskSuccessCallback( + taskID: taskID, + urlSchemeTask: urlSchemeTask + ) { + urlSchemeTask.didReceive(response) + urlSchemeTask.didReceive(data) + urlSchemeTask.didFinish() + } + Self.recordInMemoryResponse() + RDEPUBWebViewDebug.logSchemeTask("ResourceScheme", requestURL: requestURL, fileURL: fileURL, event: "finished") + } + private func respondWithStreaming(fileURL: URL, requestURL: URL, taskID: ObjectIdentifier, urlSchemeTask: any WKURLSchemeTask, fileSize: UInt64) { ioQueue.async { [weak self] in guard let self else { diff --git a/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderHighlightsViewController.swift b/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderHighlightsViewController.swift index 91910ba..099939d 100644 --- a/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderHighlightsViewController.swift +++ b/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderHighlightsViewController.swift @@ -16,6 +16,10 @@ final class RDEPUBReaderHighlightsViewController: UITableViewController { private let filterControl = UISegmentedControl(items: ["全部", "注释", "划线"]) + /// 空状态提示。放在 tableView 的子视图而不是 `backgroundView`: + /// backgroundView 不参与无障碍层级遍历,VoiceOver 与 UI 测试都读不到它。 + private let emptyStateLabel = UILabel() + private var filteredHighlights: [RDEPUBHighlight] { switch filterControl.selectedSegmentIndex { case 1: @@ -120,19 +124,28 @@ final class RDEPUBReaderHighlightsViewController: UITableViewController { navigationController?.navigationBar.accessibilityIdentifier = "epub.reader.highlights.navbar" } - private func updateEmptyState() { - guard filteredHighlights.isEmpty else { - tableView.backgroundView = nil - return - } + private func installEmptyStateLabelIfNeeded() { + guard emptyStateLabel.superview == nil else { return } + emptyStateLabel.textAlignment = .center + emptyStateLabel.numberOfLines = 0 + emptyStateLabel.translatesAutoresizingMaskIntoConstraints = false + emptyStateLabel.accessibilityIdentifier = "epub.reader.highlights.empty" + emptyStateLabel.isAccessibilityElement = true + tableView.addSubview(emptyStateLabel) + // 固定在可视区域居中,不随内容滚动 + NSLayoutConstraint.activate([ + emptyStateLabel.centerXAnchor.constraint(equalTo: tableView.frameLayoutGuide.centerXAnchor), + emptyStateLabel.centerYAnchor.constraint(equalTo: tableView.frameLayoutGuide.centerYAnchor), + emptyStateLabel.leadingAnchor.constraint(greaterThanOrEqualTo: tableView.frameLayoutGuide.leadingAnchor, constant: 24), + emptyStateLabel.trailingAnchor.constraint(lessThanOrEqualTo: tableView.frameLayoutGuide.trailingAnchor, constant: -24) + ]) + } - let label = UILabel() - label.text = emptyStateText() - label.textAlignment = .center - label.textColor = theme.contentTextColor.withAlphaComponent(0.7) - label.numberOfLines = 0 - label.accessibilityIdentifier = "epub.reader.highlights.empty" - tableView.backgroundView = label + private func updateEmptyState() { + installEmptyStateLabelIfNeeded() + emptyStateLabel.textColor = theme.contentTextColor.withAlphaComponent(0.7) + emptyStateLabel.text = emptyStateText() + emptyStateLabel.isHidden = !filteredHighlights.isEmpty } @objc private func filterChangedAction() { @@ -209,6 +222,9 @@ final class RDEPUBReaderBookmarksViewController: UITableViewController { return formatter }() + /// 同 highlights 面板:不能用 `tableView.backgroundView`,那样无障碍读不到。 + private let emptyStateLabel = UILabel() + init(bookmarks: [RDEPUBBookmark], theme: RDEPUBReaderTheme) { self.bookmarks = bookmarks.sorted { $0.createdAt > $1.createdAt } self.theme = theme @@ -279,18 +295,27 @@ final class RDEPUBReaderBookmarksViewController: UITableViewController { navigationController?.navigationBar.accessibilityIdentifier = "epub.reader.bookmarks.navbar" } + private func installEmptyStateLabelIfNeeded() { + guard emptyStateLabel.superview == nil else { return } + emptyStateLabel.text = "暂无书签" + emptyStateLabel.textAlignment = .center + emptyStateLabel.numberOfLines = 0 + emptyStateLabel.translatesAutoresizingMaskIntoConstraints = false + emptyStateLabel.accessibilityIdentifier = "epub.reader.bookmarks.empty" + emptyStateLabel.isAccessibilityElement = true + tableView.addSubview(emptyStateLabel) + NSLayoutConstraint.activate([ + emptyStateLabel.centerXAnchor.constraint(equalTo: tableView.frameLayoutGuide.centerXAnchor), + emptyStateLabel.centerYAnchor.constraint(equalTo: tableView.frameLayoutGuide.centerYAnchor), + emptyStateLabel.leadingAnchor.constraint(greaterThanOrEqualTo: tableView.frameLayoutGuide.leadingAnchor, constant: 24), + emptyStateLabel.trailingAnchor.constraint(lessThanOrEqualTo: tableView.frameLayoutGuide.trailingAnchor, constant: -24) + ]) + } + private func updateEmptyState() { - guard bookmarks.isEmpty == false else { - let label = UILabel() - label.text = "暂无书签" - label.textAlignment = .center - label.textColor = theme.contentTextColor.withAlphaComponent(0.7) - label.numberOfLines = 0 - label.accessibilityIdentifier = "epub.reader.bookmarks.empty" - tableView.backgroundView = label - return - } - tableView.backgroundView = nil + installEmptyStateLabelIfNeeded() + emptyStateLabel.textColor = theme.contentTextColor.withAlphaComponent(0.7) + emptyStateLabel.isHidden = !bookmarks.isEmpty } private func titleText(for bookmark: RDEPUBBookmark) -> String { diff --git a/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderPersistence.swift b/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderPersistence.swift index c4e113d..f79b77b 100644 --- a/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderPersistence.swift +++ b/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderPersistence.swift @@ -1,3 +1,4 @@ +import CryptoKit import Foundation public protocol RDEPUBReaderPersistence: AnyObject { @@ -47,6 +48,113 @@ public extension RDEPUBReaderPersistence { } } +/// 受文件保护的内容存储:高亮正文、批注、书签摘录属于书籍内容,不应明文 +/// 落在 UserDefaults(默认不加密、会进备份)。这里改写到 Application Support +/// 下带 `NSFileProtection` 的文件,并排除 iCloud/iTunes 备份。 +public final class RDEPUBProtectedContentStore { + + private let directoryURL: URL + + private let protection: FileProtectionType + + private let fileManager = FileManager.default + + private let namespace: String? + + private let allowsLegacyFallback: Bool + + /// 默认用 `.completeUntilFirstUserAuthentication`(首次解锁后可访问)而不是 + /// `.complete`:两者都在磁盘上加密,但 `.complete` 会让锁屏期间的保存直接 + /// 失败——阅读器在退到后台时可能正好赶上用户锁屏,那样会静默丢标注。 + /// 对安全要求更高的宿主可以显式传入 `.complete`。 + public init( + directoryName: String = "ssreaderview-epub/protected", + namespace: String? = nil, + allowsLegacyFallback: Bool = true, + protection: FileProtectionType = .completeUntilFirstUserAuthentication + ) { + let base = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first + ?? FileManager.default.temporaryDirectory + self.directoryURL = base.appendingPathComponent(directoryName, isDirectory: true) + self.namespace = namespace + self.allowsLegacyFallback = allowsLegacyFallback + self.protection = protection + } + + /// bookIdentifier 可能含 `/`、空格等非法文件名字符,且长度不可控——十六进制 + /// 编码会翻倍,长书名很容易撞上 255 字节的文件名上限。用 SHA256 定长摘要。 + private func fileURL(forKey key: String) -> URL { + let storageKey: String + if let namespace { + storageKey = namespace + "\u{0}" + key + } else { + storageKey = key + } + let digest = SHA256.hash(data: Data(storageKey.utf8)) + let name = digest.map { String(format: "%02x", $0) }.joined() + return directoryURL.appendingPathComponent("\(name).json", isDirectory: false) + } + + private func legacyFileURL(forKey key: String) -> URL { + let digest = SHA256.hash(data: Data(key.utf8)) + let name = digest.map { String(format: "%02x", $0) }.joined() + return directoryURL.appendingPathComponent("\(name).json", isDirectory: false) + } + + private func ensureDirectory() throws { + guard !fileManager.fileExists(atPath: directoryURL.path) else { return } + try fileManager.createDirectory( + at: directoryURL, + withIntermediateDirectories: true, + attributes: [.protectionKey: protection] + ) + var url = directoryURL + var values = URLResourceValues() + values.isExcludedFromBackup = true + try? url.setResourceValues(values) + } + + public func read(forKey key: String) -> Data? { + if let data = try? Data(contentsOf: fileURL(forKey: key)) { + return data + } + guard namespace != nil, allowsLegacyFallback else { return nil } + return try? Data(contentsOf: legacyFileURL(forKey: key)) + } + + public func write(_ data: Data, forKey key: String) { + _ = writeIfPossible(data, forKey: key) + } + + /// 返回写入是否完整成功。迁移旧数据时,只有成功落盘后才能删除原副本。 + @discardableResult + func writeIfPossible(_ data: Data, forKey key: String) -> Bool { + do { + try ensureDirectory() + try data.write(to: fileURL(forKey: key), options: .atomic) + // atomic 写入会替换文件,保护属性需要写完再设一次 + try fileManager.setAttributes([.protectionKey: protection], ofItemAtPath: fileURL(forKey: key).path) + return true + } catch { + #if DEBUG + print("[RDEPUBProtectedContentStore] ⚠️ Failed to write '\(key)': \(error)") + #endif + return false + } + } + + public func removeValue(forKey key: String) { + try? fileManager.removeItem(at: fileURL(forKey: key)) + if namespace != nil, allowsLegacyFallback { + try? fileManager.removeItem(at: legacyFileURL(forKey: key)) + } + } + + public func removeAll() { + try? fileManager.removeItem(at: directoryURL) + } +} + public final class RDEPUBUserDefaultsPersistence: RDEPUBReaderPersistence { private let defaults: UserDefaults @@ -59,18 +167,80 @@ public final class RDEPUBUserDefaultsPersistence: RDEPUBReaderPersistence { private let settingsKey: String + /// 高亮与书签(含书籍正文摘录)实际落盘的位置 + private let contentStore: RDEPUBProtectedContentStore + public init( defaults: UserDefaults = .standard, locationPrefix: String = "ssreader.epub.location.", bookmarksPrefix: String = "ssreader.epub.bookmarks.", highlightsPrefix: String = "ssreader.epub.highlights.", - settingsKey: String = "ssreader.epub.settings" + settingsKey: String = "ssreader.epub.settings", + contentStore: RDEPUBProtectedContentStore? = nil ) { self.defaults = defaults self.locationPrefix = locationPrefix self.bookmarksPrefix = bookmarksPrefix self.highlightsPrefix = highlightsPrefix self.settingsKey = settingsKey + if let contentStore { + self.contentStore = contentStore + } else { + let namespaceKey = settingsKey + ".protectedContentNamespace" + let isStandardDefaults = defaults === UserDefaults.standard + let namespace: String + if isStandardDefaults { + namespace = "standard" + } else if let storedNamespace = defaults.string(forKey: namespaceKey) { + namespace = storedNamespace + } else { + namespace = UUID().uuidString + defaults.set(namespace, forKey: namespaceKey) + } + self.contentStore = RDEPUBProtectedContentStore( + namespace: namespace, + // 旧版未分区文件无法区分来自哪个自定义 suite;只对标准容器保留迁移读取。 + allowsLegacyFallback: isStandardDefaults + ) + } + } + + /// 从受保护存储读取;首次访问时把历史明文数据迁移过去并删掉明文副本。 + private func loadContentData(key: String) -> Data? { + if let data = contentStore.read(forKey: key) { + return data + } + guard let legacy = defaults.data(forKey: key) else { return nil } + if contentStore.writeIfPossible(legacy, forKey: key) { + defaults.removeObject(forKey: key) + } + return legacy + } + + private func saveContentData(_ data: Data, key: String) { + // 新副本确认落盘前保留历史数据,避免磁盘满或文件保护错误时丢失标注。 + if contentStore.writeIfPossible(data, forKey: key), + defaults.object(forKey: key) != nil { + defaults.removeObject(forKey: key) + } + } + + /// 清除某本书的阅读内容数据(高亮、书签、进度)。 + public func clearReadingData(for bookIdentifier: String) { + contentStore.removeValue(forKey: highlightsPrefix + bookIdentifier) + contentStore.removeValue(forKey: bookmarksPrefix + bookIdentifier) + defaults.removeObject(forKey: highlightsPrefix + bookIdentifier) + defaults.removeObject(forKey: bookmarksPrefix + bookIdentifier) + defaults.removeObject(forKey: locationPrefix + bookIdentifier) + } + + /// 清除全部书籍的高亮与书签内容数据,包括尚未迁移的历史 UserDefaults 数据。 + public func clearAllReadingContent() { + contentStore.removeAll() + for key in defaults.dictionaryRepresentation().keys + where key.hasPrefix(highlightsPrefix) || key.hasPrefix(bookmarksPrefix) { + defaults.removeObject(forKey: key) + } } public func loadLocation(for bookIdentifier: String) -> RDEPUBLocation? { @@ -99,7 +269,7 @@ public final class RDEPUBUserDefaultsPersistence: RDEPUBReaderPersistence { } public func loadBookmarks(for bookIdentifier: String) -> [RDEPUBBookmark] { - guard let data = defaults.data(forKey: bookmarksPrefix + bookIdentifier) else { + guard let data = loadContentData(key: bookmarksPrefix + bookIdentifier) else { return [] } do { @@ -115,7 +285,7 @@ public final class RDEPUBUserDefaultsPersistence: RDEPUBReaderPersistence { public func saveBookmarks(_ bookmarks: [RDEPUBBookmark], for bookIdentifier: String) { do { let data = try JSONEncoder().encode(bookmarks) - defaults.set(data, forKey: bookmarksPrefix + bookIdentifier) + saveContentData(data, key: bookmarksPrefix + bookIdentifier) } catch { #if DEBUG print("[RDEPUBUserDefaultsPersistence] ⚠️ Failed to encode bookmarks for '\(bookIdentifier)': \(error)") @@ -124,7 +294,7 @@ public final class RDEPUBUserDefaultsPersistence: RDEPUBReaderPersistence { } public func loadHighlights(for bookIdentifier: String) -> [RDEPUBHighlight] { - guard let data = defaults.data(forKey: highlightsPrefix + bookIdentifier) else { + guard let data = loadContentData(key: highlightsPrefix + bookIdentifier) else { return [] } do { @@ -145,7 +315,7 @@ public final class RDEPUBUserDefaultsPersistence: RDEPUBReaderPersistence { print("[RDEPUBUserDefaultsPersistence] ⚠️ saveHighlights data size (\(data.count) bytes) exceeds 1MB for: \(bookIdentifier)") #endif } - defaults.set(data, forKey: highlightsPrefix + bookIdentifier) + saveContentData(data, key: highlightsPrefix + bookIdentifier) } catch { #if DEBUG print("[RDEPUBUserDefaultsPersistence] ⚠️ Failed to encode highlights for '\(bookIdentifier)': \(error)") diff --git a/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderSearchBarView.swift b/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderSearchBarView.swift index d29ba96..83f3976 100644 --- a/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderSearchBarView.swift +++ b/Sources/RDEpubReaderView/EPUBUI/RDEPUBReaderSearchBarView.swift @@ -65,12 +65,18 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { private let emptyStateLabel = UILabel() + private let navigationRowView = UIView() + private let previousButton = RDEPUBReaderTintButton(type: .system) private let nextButton = RDEPUBReaderTintButton(type: .system) private let countLabel = UILabel() + /// Collapsed to 0 in the pristine state so the prompt keeps its original + /// spacing under the search field. See `updateNavigationRow(total:)`. + private var navigationRowHeightConstraint: NSLayoutConstraint? + private var searchSections: [RDEPUBReaderSearchSection] = [] private var keyword = "" @@ -85,7 +91,7 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { setupSubviews() setupConstraints() setupActions() - updateLegacyNavigationEnabled(false) + updateNavigationRow(total: 0) showInitialState() } @@ -94,20 +100,14 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { } override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { - // Only claim touches that fall within the panelView or the - // accessibility-only navigation buttons. Taps on the dimmed scrim - // area pass through to the reader content below, allowing chrome - // toggle taps to work. + // Only claim touches that fall within the panelView. Taps on the dimmed + // scrim area pass through to the reader content below, allowing chrome + // toggle taps to work. The step controls live inside the panel, so they + // no longer need a special case here. let panelPoint = convert(point, to: panelView) if panelView.point(inside: panelPoint, with: event) { return super.hitTest(point, with: event) } - // Also claim touches on the accessibility-only navigation buttons - if previousButton.frame.contains(point) - || nextButton.frame.contains(point) - || countLabel.frame.contains(point) { - return super.hitTest(point, with: event) - } return nil } @@ -149,9 +149,10 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { tableView.backgroundColor = .clear tableView.separatorStyle = .none + navigationRowView.backgroundColor = rowColor previousButton.tintColor = textColor nextButton.tintColor = textColor - countLabel.textColor = textColor + countLabel.textColor = secondaryTextColor countLabel.backgroundColor = .clear RDEPUBReaderSearchResultCell.cardBackgroundColor = cardColor @@ -168,9 +169,11 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { } func updateMatchCount(current: Int, total: Int) { + // label 保持 "N/M" 原文:无障碍与 UI 测试都按这个格式读取, + // 覆盖 accessibilityLabel 会让 XCUIElement.label 拿不到计数。 countLabel.text = "\(current)/\(total)" textField.accessibilityValue = "\(current)/\(total)" - updateLegacyNavigationEnabled(total > 0) + updateNavigationRow(total: total) } func showNoResults() { @@ -223,6 +226,7 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { private func setupSubviews() { backgroundButton.translatesAutoresizingMaskIntoConstraints = false panelView.translatesAutoresizingMaskIntoConstraints = false + navigationRowView.translatesAutoresizingMaskIntoConstraints = false grabberView.translatesAutoresizingMaskIntoConstraints = false searchRowView.translatesAutoresizingMaskIntoConstraints = false searchFieldContainer.translatesAutoresizingMaskIntoConstraints = false @@ -241,6 +245,7 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { panelView.addSubview(grabberView) panelView.addSubview(searchRowView) + panelView.addSubview(navigationRowView) panelView.addSubview(tableView) panelView.addSubview(emptyStateLabel) @@ -250,14 +255,15 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { searchFieldContainer.addSubview(searchIcon) searchFieldContainer.addSubview(textField) - addSubview(previousButton) - addSubview(nextButton) - addSubview(countLabel) + navigationRowView.addSubview(countLabel) + navigationRowView.addSubview(previousButton) + navigationRowView.addSubview(nextButton) if #available(iOS 13.0, *) { searchIcon.image = UIImage(systemName: "magnifyingglass") - previousButton.setImage(UIImage(systemName: "chevron.up"), for: .normal) - nextButton.setImage(UIImage(systemName: "chevron.down"), for: .normal) + let stepSymbol = UIImage.SymbolConfiguration(pointSize: 15, weight: .semibold) + previousButton.setImage(UIImage(systemName: "chevron.up", withConfiguration: stepSymbol), for: .normal) + nextButton.setImage(UIImage(systemName: "chevron.down", withConfiguration: stepSymbol), for: .normal) } else { previousButton.setTitle("▲", for: .normal) nextButton.setTitle("▼", for: .normal) @@ -287,11 +293,16 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { nextButton.accessibilityIdentifier = "epub.reader.search.next" countLabel.accessibilityIdentifier = "epub.reader.search.count" textField.accessibilityIdentifier = "epub.reader.search.field" - // 0.02 而非 0.01:CALayer.opacity 为 Float32,0.01 落盘后略小于 - // 0.01,会被 UIKit 命中测试按「透明视图」剔除,导致按钮永远点不中。 - previousButton.alpha = 0.02 - nextButton.alpha = 0.02 - countLabel.alpha = 0.02 + + previousButton.accessibilityLabel = "上一个匹配" + nextButton.accessibilityLabel = "下一个匹配" + + countLabel.font = UIFont.systemFont(ofSize: 15, weight: .medium) + countLabel.textAlignment = .left + countLabel.isAccessibilityElement = true + + navigationRowView.layer.cornerRadius = 18 + navigationRowView.clipsToBounds = true tableView.register(RDEPUBReaderSearchResultCell.self, forCellReuseIdentifier: RDEPUBReaderSearchResultCell.reuseIdentifier) tableView.dataSource = self @@ -345,33 +356,40 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { cancelButton.trailingAnchor.constraint(equalTo: searchRowView.trailingAnchor, constant: -18), cancelButton.centerYAnchor.constraint(equalTo: searchRowView.centerYAnchor), + navigationRowView.leadingAnchor.constraint(equalTo: panelView.leadingAnchor, constant: 20), + navigationRowView.trailingAnchor.constraint(equalTo: panelView.trailingAnchor, constant: -20), + navigationRowView.topAnchor.constraint(equalTo: searchRowView.bottomAnchor, constant: 12), + + countLabel.leadingAnchor.constraint(equalTo: navigationRowView.leadingAnchor, constant: 16), + countLabel.centerYAnchor.constraint(equalTo: navigationRowView.centerYAnchor), + + nextButton.trailingAnchor.constraint(equalTo: navigationRowView.trailingAnchor, constant: -8), + nextButton.centerYAnchor.constraint(equalTo: navigationRowView.centerYAnchor), + nextButton.widthAnchor.constraint(equalToConstant: 44), + nextButton.topAnchor.constraint(equalTo: navigationRowView.topAnchor), + nextButton.bottomAnchor.constraint(equalTo: navigationRowView.bottomAnchor), + + previousButton.trailingAnchor.constraint(equalTo: nextButton.leadingAnchor, constant: -4), + previousButton.centerYAnchor.constraint(equalTo: navigationRowView.centerYAnchor), + previousButton.widthAnchor.constraint(equalToConstant: 44), + previousButton.topAnchor.constraint(equalTo: navigationRowView.topAnchor), + previousButton.bottomAnchor.constraint(equalTo: navigationRowView.bottomAnchor), + + countLabel.trailingAnchor.constraint(lessThanOrEqualTo: previousButton.leadingAnchor, constant: -8), + tableView.leadingAnchor.constraint(equalTo: panelView.leadingAnchor, constant: 0), tableView.trailingAnchor.constraint(equalTo: panelView.trailingAnchor, constant: 0), - tableView.topAnchor.constraint(equalTo: searchRowView.bottomAnchor, constant: 18), + tableView.topAnchor.constraint(equalTo: navigationRowView.bottomAnchor, constant: 12), tableView.bottomAnchor.constraint(equalTo: panelView.safeAreaLayoutGuide.bottomAnchor), emptyStateLabel.leadingAnchor.constraint(equalTo: panelView.leadingAnchor, constant: 32), emptyStateLabel.trailingAnchor.constraint(equalTo: panelView.trailingAnchor, constant: -32), - emptyStateLabel.topAnchor.constraint(equalTo: searchRowView.bottomAnchor, constant: 56), - - // 无障碍/UI 测试专用的隐形控件:必须放在 panel 顶部而非视图 - // 左上角——视图左上角落在系统状态栏区域内,合成点击会被状态栏 - // 窗口拦截,永远到不了这些按钮。 - previousButton.topAnchor.constraint(equalTo: panelView.topAnchor), - previousButton.leadingAnchor.constraint(equalTo: leadingAnchor), - previousButton.widthAnchor.constraint(equalToConstant: 1), - previousButton.heightAnchor.constraint(equalToConstant: 1), - - nextButton.topAnchor.constraint(equalTo: panelView.topAnchor), - nextButton.leadingAnchor.constraint(equalTo: previousButton.trailingAnchor), - nextButton.widthAnchor.constraint(equalToConstant: 1), - nextButton.heightAnchor.constraint(equalToConstant: 1), - - countLabel.topAnchor.constraint(equalTo: panelView.topAnchor), - countLabel.leadingAnchor.constraint(equalTo: nextButton.trailingAnchor), - countLabel.widthAnchor.constraint(equalToConstant: 1), - countLabel.heightAnchor.constraint(equalToConstant: 1) + emptyStateLabel.topAnchor.constraint(equalTo: navigationRowView.bottomAnchor, constant: 50) ]) + + let heightConstraint = navigationRowView.heightAnchor.constraint(equalToConstant: 0) + heightConstraint.isActive = true + navigationRowHeightConstraint = heightConstraint } private func setupActions() { @@ -384,9 +402,18 @@ final class RDEPUBReaderSearchBarView: RDEPUBReaderToolView { backgroundButton.addTarget(self, action: #selector(closeAction), for: .touchUpInside) } - private func updateLegacyNavigationEnabled(_ enabled: Bool) { - previousButton.isEnabled = enabled - nextButton.isEnabled = enabled + /// Stepping is only enabled once there are matches, but the row stays + /// visible (showing `0/0` with disabled arrows) for any keyword the user has + /// actually searched, so the result count is never silently missing. It + /// collapses away only in the pristine "type a keyword" state. + private func updateNavigationRow(total: Int) { + let hasMatches = total > 0 + previousButton.isEnabled = hasMatches + nextButton.isEnabled = hasMatches + + let isVisible = hasMatches || !keyword.isEmpty + navigationRowView.isHidden = !isVisible + navigationRowHeightConstraint?.constant = isVisible ? 36 : 0 } private func showInitialState() { diff --git a/Sources/RDEpubReaderView/EPUBUI/ReaderController/RDEPUBReaderAnnotationCoordinator.swift b/Sources/RDEpubReaderView/EPUBUI/ReaderController/RDEPUBReaderAnnotationCoordinator.swift index 4eab322..0c7ee3a 100644 --- a/Sources/RDEpubReaderView/EPUBUI/ReaderController/RDEPUBReaderAnnotationCoordinator.swift +++ b/Sources/RDEpubReaderView/EPUBUI/ReaderController/RDEPUBReaderAnnotationCoordinator.swift @@ -198,8 +198,7 @@ final class RDEPUBReaderAnnotationCoordinator { func presentHighlightsManager() { guard let controller else { return } guard controller.configuration.allowsHighlights else { return } - guard !controller.activeHighlights.isEmpty else { return } - + // 同 presentBookmarksManager:空列表照常呈现,面板有空状态提示。 let highlightsController = RDEPUBReaderHighlightsViewController( highlights: controller.activeHighlights, theme: controller.configuration.theme, @@ -325,8 +324,8 @@ final class RDEPUBReaderAnnotationCoordinator { func presentBookmarksManager() { guard let controller else { return } - guard !controller.activeBookmarks.isEmpty else { return } - + // 空列表也要照常呈现:面板本身有「暂无书签」空状态,早退会让点击书签 + // 列表按钮什么反应都没有,用户无法区分「没有书签」和「功能坏了」。 let bookmarksController = RDEPUBReaderBookmarksViewController( bookmarks: controller.activeBookmarks, theme: controller.configuration.theme diff --git a/Sources/RDSpeechReaderView/Sources/RDSpeechReaderController.swift b/Sources/RDSpeechReaderView/Sources/RDSpeechReaderController.swift index fc0db82..95281da 100644 --- a/Sources/RDSpeechReaderView/Sources/RDSpeechReaderController.swift +++ b/Sources/RDSpeechReaderView/Sources/RDSpeechReaderController.swift @@ -20,11 +20,16 @@ public final class RDSpeechReaderController: NSObject { private var queuedUnits: [RDSpeechTextUnit] = [] private var completedUnits: [RDSpeechTextUnit] = [] private var nextLocation: RDSpeechLocation? - private var isLoadingBatch = false + private var loadingGeneration: UInt? + private var playbackGeneration: UInt = 0 + private var activeUtterance: AVSpeechUtterance? private var isStopping = false private var shouldResumeAfterInterruption = false private var sleepTimerTask: Task? private var notificationTokens: [NSObjectProtocol] = [] + private var remoteCommandTargets: [(command: MPRemoteCommand, token: Any)] = [] + + private static weak var activeRemoteController: RDSpeechReaderController? public init( contentProvider: RDSpeechContentProvider, @@ -42,24 +47,25 @@ public final class RDSpeechReaderController: NSObject { deinit { notificationTokens.forEach(NotificationCenter.default.removeObserver) - MPRemoteCommandCenter.shared().playCommand.removeTarget(nil) - MPRemoteCommandCenter.shared().pauseCommand.removeTarget(nil) - MPRemoteCommandCenter.shared().togglePlayPauseCommand.removeTarget(nil) - MPRemoteCommandCenter.shared().nextTrackCommand.removeTarget(nil) - MPRemoteCommandCenter.shared().previousTrackCommand.removeTarget(nil) + remoteCommandTargets.forEach { $0.command.removeTarget($0.token) } } public func start(from location: RDSpeechLocation? = nil) async throws { - stop(clearProgress: false) + playbackGeneration &+= 1 + let generation = playbackGeneration + resetPlayback(clearProgress: false) isStopping = false completedUnits.removeAll() + claimRemoteControlsIfNeeded() state = .preparing do { if configuration.configuresAudioSession { try configureAudioSession() } let initialLocation = location ?? progressStore?.restoreSpeechLocation(for: contentProvider.speechBookDescriptor().identifier) - try await loadBatch(startingAt: initialLocation, requiresContent: true) - try await speakNextUnit() + try await loadBatch(startingAt: initialLocation, requiresContent: true, generation: generation) + guard isCurrentPlaybackGeneration(generation) else { return } + try await speakNextUnit(generation: generation) } catch { + guard isCurrentPlaybackGeneration(generation) else { return } state = .failed(error.localizedDescription) throw error } @@ -72,31 +78,40 @@ public final class RDSpeechReaderController: NSObject { public func resume() { guard synthesizer.isPaused else { return } + claimRemoteControlsIfNeeded() synthesizer.continueSpeaking() } public func stop() { stop(clearProgress: false) } public func stop(clearProgress: Bool) { + playbackGeneration &+= 1 + resetPlayback(clearProgress: clearProgress) + state = .idle + } + + private func resetPlayback(clearProgress: Bool) { isStopping = true synthesizer.stopSpeaking(at: .immediate) + activeUtterance = nil currentUnit = nil queuedUnits.removeAll() nextLocation = nil - isLoadingBatch = false + loadingGeneration = nil sleepTimerTask?.cancel() sleepTimerTask = nil if clearProgress { progressStore?.clearSpeechLocation(for: contentProvider.speechBookDescriptor().identifier) } - state = .idle } public func skipToNextSentence() { guard state.isActive else { return } + let generation = playbackGeneration stopCurrentUtteranceForNavigation() Task { [weak self] in guard let self else { return } - do { try await self.speakNextUnit() } - catch { self.state = .failed(error.localizedDescription) } + do { try await self.speakNextUnit(generation: generation) } + catch where self.isCurrentPlaybackGeneration(generation) { self.state = .failed(error.localizedDescription) } + catch {} } } @@ -143,18 +158,26 @@ public final class RDSpeechReaderController: NSObject { } } - private func loadBatch(startingAt location: RDSpeechLocation?, requiresContent: Bool) async throws { - guard !isLoadingBatch, !isStopping else { return } - isLoadingBatch = true - defer { isLoadingBatch = false } + private func loadBatch( + startingAt location: RDSpeechLocation?, + requiresContent: Bool, + generation: UInt + ) async throws { + guard loadingGeneration != generation, isCurrentPlaybackGeneration(generation) else { return } + loadingGeneration = generation + defer { + if loadingGeneration == generation { + loadingGeneration = nil + } + } var requestedLocation = location var mustContainContent = requiresContent - while !isStopping { + while isCurrentPlaybackGeneration(generation) { let batch = try await contentProvider.speechContentBatch( startingAt: requestedLocation, limit: configuration.batchSize ) - guard !isStopping else { return } + guard isCurrentPlaybackGeneration(generation) else { return } if !batch.units.isEmpty { queuedUnits.append(contentsOf: batch.units) nextLocation = batch.nextLocation @@ -171,12 +194,12 @@ public final class RDSpeechReaderController: NSObject { } } - private func speakNextUnit() async throws { - guard !isStopping else { return } + private func speakNextUnit(generation: UInt) async throws { + guard isCurrentPlaybackGeneration(generation) else { return } if queuedUnits.isEmpty, let nextLocation { - try await loadBatch(startingAt: nextLocation, requiresContent: false) + try await loadBatch(startingAt: nextLocation, requiresContent: false, generation: generation) } - guard !isStopping else { return } + guard isCurrentPlaybackGeneration(generation) else { return } guard !queuedUnits.isEmpty else { if state != .finished { state = .finished @@ -193,6 +216,7 @@ public final class RDSpeechReaderController: NSObject { let utterance = AVSpeechUtterance(string: unit.text) utterance.rate = configuration.rate utterance.voice = resolvedVoice(for: unit) + activeUtterance = utterance synthesizer.speak(utterance) } @@ -208,9 +232,14 @@ public final class RDSpeechReaderController: NSObject { private func stopCurrentUtteranceForNavigation() { isStopping = true synthesizer.stopSpeaking(at: .immediate) + activeUtterance = nil isStopping = false } + private func isCurrentPlaybackGeneration(_ generation: UInt) -> Bool { + playbackGeneration == generation && !isStopping + } + private func resolvedVoice(for unit: RDSpeechTextUnit) -> AVSpeechSynthesisVoice? { if let identifier = configuration.voiceIdentifier, let voice = AVSpeechSynthesisVoice(identifier: identifier) { @@ -266,33 +295,43 @@ public final class RDSpeechReaderController: NSObject { commands.togglePlayPauseCommand.isEnabled = true commands.nextTrackCommand.isEnabled = true commands.previousTrackCommand.isEnabled = true - commands.playCommand.addTarget { [weak self] _ in + remoteCommandTargets.append((commands.playCommand, commands.playCommand.addTarget { [weak self] _ in + guard let self, Self.activeRemoteController === self else { return .commandFailed } Task { @MainActor [weak self] in self?.resume() } return .success - } - commands.pauseCommand.addTarget { [weak self] _ in + })) + remoteCommandTargets.append((commands.pauseCommand, commands.pauseCommand.addTarget { [weak self] _ in + guard let self, Self.activeRemoteController === self else { return .commandFailed } Task { @MainActor [weak self] in self?.pause() } return .success - } - commands.togglePlayPauseCommand.addTarget { [weak self] _ in + })) + remoteCommandTargets.append((commands.togglePlayPauseCommand, commands.togglePlayPauseCommand.addTarget { [weak self] _ in + guard let self, Self.activeRemoteController === self else { return .commandFailed } Task { @MainActor [weak self] in guard let self else { return } self.synthesizer.isPaused ? self.resume() : self.pause() } return .success - } - commands.nextTrackCommand.addTarget { [weak self] _ in + })) + remoteCommandTargets.append((commands.nextTrackCommand, commands.nextTrackCommand.addTarget { [weak self] _ in + guard let self, Self.activeRemoteController === self else { return .commandFailed } Task { @MainActor [weak self] in self?.skipToNextSentence() } return .success - } - commands.previousTrackCommand.addTarget { [weak self] _ in + })) + remoteCommandTargets.append((commands.previousTrackCommand, commands.previousTrackCommand.addTarget { [weak self] _ in + guard let self, Self.activeRemoteController === self else { return .commandFailed } Task { @MainActor [weak self] in self?.skipToPreviousSentence() } return .success - } + })) + } + + private func claimRemoteControlsIfNeeded() { + guard configuration.enablesRemoteControls else { return } + Self.activeRemoteController = self } private func updateNowPlayingInfo() { - guard configuration.enablesRemoteControls else { return } + guard configuration.enablesRemoteControls, Self.activeRemoteController === self else { return } let book = contentProvider.speechBookDescriptor() var info: [String: Any] = [ MPMediaItemPropertyTitle: book.title, @@ -305,7 +344,7 @@ public final class RDSpeechReaderController: NSObject { extension RDSpeechReaderController: AVSpeechSynthesizerDelegate { public nonisolated func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) { - Task { @MainActor [weak self] in self?.handleDidStart() } + Task { @MainActor [weak self] in self?.handleDidStart(utterance) } } public nonisolated func speechSynthesizer( @@ -313,55 +352,58 @@ extension RDSpeechReaderController: AVSpeechSynthesizerDelegate { willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance ) { - Task { @MainActor [weak self, characterRange] in self?.handleWillSpeak(characterRange) } + Task { @MainActor [weak self, characterRange] in self?.handleWillSpeak(characterRange, utterance: utterance) } } public nonisolated func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didPause utterance: AVSpeechUtterance) { - Task { @MainActor [weak self] in self?.handleDidPause() } + Task { @MainActor [weak self] in self?.handleDidPause(utterance) } } public nonisolated func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didContinue utterance: AVSpeechUtterance) { - Task { @MainActor [weak self] in self?.handleDidContinue() } + Task { @MainActor [weak self] in self?.handleDidContinue(utterance) } } public nonisolated func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) { - Task { @MainActor [weak self] in self?.handleDidFinish() } + Task { @MainActor [weak self] in self?.handleDidFinish(utterance) } } } private extension RDSpeechReaderController { - func handleDidStart() { - guard let currentUnit else { return } + func handleDidStart(_ utterance: AVSpeechUtterance) { + guard utterance === activeUtterance, let currentUnit else { return } progressStore?.saveSpeechLocation(currentUnit.location, for: contentProvider.speechBookDescriptor().identifier) state = .speaking(currentUnit.location) } - func handleWillSpeak(_ characterRange: NSRange) { - guard let currentUnit else { return } + func handleWillSpeak(_ characterRange: NSRange, utterance: AVSpeechUtterance) { + guard utterance === activeUtterance, let currentUnit else { return } var location = currentUnit.location location.textOffset = currentUnit.textRange.location + characterRange.location progressStore?.saveSpeechLocation(location, for: contentProvider.speechBookDescriptor().identifier) delegate?.speechReaderController(self, willSpeak: RDSpeechSpokenRange(unit: currentUnit, range: characterRange)) } - func handleDidPause() { - guard let currentUnit else { return } + func handleDidPause(_ utterance: AVSpeechUtterance) { + guard utterance === activeUtterance, let currentUnit else { return } state = .paused(currentUnit.location) } - func handleDidContinue() { - guard let currentUnit else { return } + func handleDidContinue(_ utterance: AVSpeechUtterance) { + guard utterance === activeUtterance, let currentUnit else { return } state = .speaking(currentUnit.location) } - func handleDidFinish() { - guard !isStopping, let finished = currentUnit else { return } + func handleDidFinish(_ utterance: AVSpeechUtterance) { + guard utterance === activeUtterance, !isStopping, let finished = currentUnit else { return } completedUnits.append(finished) + activeUtterance = nil currentUnit = nil + let generation = playbackGeneration Task { [weak self] in guard let self else { return } - do { try await self.speakNextUnit() } - catch { self.state = .failed(error.localizedDescription) } + do { try await self.speakNextUnit(generation: generation) } + catch where self.isCurrentPlaybackGeneration(generation) { self.state = .failed(error.localizedDescription) } + catch {} } } }