From 68d9363f0a36d223143ab1b2f3d84c53ec05ee53 Mon Sep 17 00:00:00 2001 From: shenlei Date: Mon, 20 Jul 2026 17:22:06 +0900 Subject: [PATCH] feat: optimize reader caching and document formats --- .gitignore | 5 + ReadViewDemo/Podfile.lock | 4 +- .../RDEpubReaderView.podspec.json | 2 +- .../RDPDFReaderView.podspec.json | 5 +- ReadViewDemo/Pods/Manifest.lock | 4 +- .../Pods/Pods.xcodeproj/project.pbxproj | 4275 +++++++++-------- .../Pods-ReadViewDemo.debug.xcconfig | 2 +- .../Pods-ReadViewDemo.release.xcconfig | 2 +- .../RDPDFReaderView.debug.xcconfig | 2 +- .../RDPDFReaderView.release.xcconfig | 2 +- .../ReadViewDemo.xcodeproj/project.pbxproj | 52 + .../PDFDemoReaderViewController.swift | 114 +- .../ReadViewDemo/ViewController.swift | 6 +- .../Helpers/AccessibilityIdentifiers.swift | 4 +- .../HighlightsManagementTests.swift | 4 +- .../LocationPersistenceTests.swift | 2 +- .../ReaderUITests/PDFDrawingModeTests.swift | 46 +- .../RDCBZReaderController.swift | 238 + .../DocumentFormats/RDMOBIParser.swift | 214 + .../RDReaderDocumentFormat.swift | 21 + .../RDEpubPlainTextBookBuilder.swift | 12 + .../EPUBUI/RDEpubURLReaderController.swift | 98 +- .../RDEpubReaderView/RDEpubReaderView.podspec | 2 +- Sources/RDEpubReaderView/README.md | 11 +- .../RDPDFReaderView/RDPDFReaderView.podspec | 4 +- Sources/RDPDFReaderView/README.md | 26 + .../RDPDFReaderView+CollectionView.swift | 2 + .../Sources/RDPDFKitPageProvider.swift | 296 ++ .../Sources/RDPDFReaderContainerView.swift | 67 +- .../Sources/RDPDFReaderContracts.swift | 9 +- .../RDPDFReaderDrawingCanvasView.swift | 90 +- .../RDPDFReaderImageTextLayerView.swift | 9 +- .../RDPDFReaderImageTextRecognizer.swift | 149 +- .../Sources/RDPDFReaderPageView.swift | 3 + .../Sources/RDPDFReaderViewController.swift | 218 +- 35 files changed, 3771 insertions(+), 2229 deletions(-) create mode 100644 Sources/RDEpubReaderView/DocumentFormats/RDCBZReaderController.swift create mode 100644 Sources/RDEpubReaderView/DocumentFormats/RDMOBIParser.swift create mode 100644 Sources/RDEpubReaderView/DocumentFormats/RDReaderDocumentFormat.swift create mode 100644 Sources/RDPDFReaderView/Sources/RDPDFKitPageProvider.swift diff --git a/.gitignore b/.gitignore index 0844c50..0a13d00 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,8 @@ ReadViewDemo/build/ # AI tool output _ssoft-output/ +.claude/ + +# Python bytecode +__pycache__/ +*.py[cod] diff --git a/ReadViewDemo/Podfile.lock b/ReadViewDemo/Podfile.lock index 8e84fa3..55adce1 100644 --- a/ReadViewDemo/Podfile.lock +++ b/ReadViewDemo/Podfile.lock @@ -45,8 +45,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDEpubReaderView: 6bab24a23236a223b29a02f3d00b6ac7829a4b97 - RDPDFReaderView: ea8c225655c8fdc1f34d75026e05fa1e50744b36 + RDEpubReaderView: 5a09a7856f04b6f2f8610aa6fd965d35cadb8e17 + RDPDFReaderView: f7c2d0ea7c129aa4ab15ae7f9daad2974573d749 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 diff --git a/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json index 41f4c35..2775d40 100644 --- a/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json +++ b/ReadViewDemo/Pods/Local Podspecs/RDEpubReaderView.podspec.json @@ -2,7 +2,7 @@ "name": "RDEpubReaderView", "module_name": "RDEpubReaderView", "version": "0.0.2", - "summary": "A reader view for EPUB and plain-text books", + "summary": "A reader view for EPUB, TXT, MOBI, and CBZ books", "platforms": { "ios": "15.0" }, diff --git a/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json b/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json index 46d8261..2a96cc7 100644 --- a/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json +++ b/ReadViewDemo/Pods/Local Podspecs/RDPDFReaderView.podspec.json @@ -2,7 +2,7 @@ "name": "RDPDFReaderView", "module_name": "RDPDFReaderView", "version": "0.0.1", - "summary": "Independent UIKit PDF reader interaction engine", + "summary": "UIKit PDF reader supporting host images and direct PDFKit parsing", "platforms": { "ios": "15.0" }, @@ -25,7 +25,8 @@ }, "frameworks": [ "Vision", - "CoreImage" + "CoreImage", + "PDFKit" ], "requires_arc": true, "swift_version": "5.10" diff --git a/ReadViewDemo/Pods/Manifest.lock b/ReadViewDemo/Pods/Manifest.lock index 8e84fa3..55adce1 100644 --- a/ReadViewDemo/Pods/Manifest.lock +++ b/ReadViewDemo/Pods/Manifest.lock @@ -45,8 +45,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: DTCoreText: 11b7fe2104f476f82e75a4e3dbdde74d7186cecb DTFoundation: 76b624967cf5bcaae6bb057d622c536c36ef36d0 - RDEpubReaderView: 6bab24a23236a223b29a02f3d00b6ac7829a4b97 - RDPDFReaderView: ea8c225655c8fdc1f34d75026e05fa1e50744b36 + RDEpubReaderView: 5a09a7856f04b6f2f8610aa6fd965d35cadb8e17 + RDPDFReaderView: f7c2d0ea7c129aa4ab15ae7f9daad2974573d749 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a ZIPFoundation: dfd3d681c4053ff7e2f7350bc4e53b5dba3f5351 diff --git a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj index 113c977..b942431 100644 --- a/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj +++ b/ReadViewDemo/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1197 +7,1207 @@ objects = { /* Begin PBXBuildFile section */ - 000E4DDB16481806A621C99D4B933EE1 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */; }; 002685407B9C4D548571DA24AFD6E8F1 /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = 39F01D07F324B206706E9809D44643C1 /* NSString+Paragraphs.m */; }; - 003C65AB0C1074E8F0B143E3851B22BE /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0046F7D0A6760A908B9318F39FB82445 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89F29E75C30E37D6CB823974307BF0E /* RDEPUBNavigatorLayoutContext.swift */; }; - 007914DC0FA00D1715074DCDE279DAB6 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */; }; + 00533D00D0799587B6A77B4BAF852F16 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */; }; + 0092B10CEF9FA5B003A243F20E685AC0 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00A77DF1E3D88B9FB43E68863591E2E7 /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FF31007A05E5706CF26F9BC9DBD462 /* RDEPUBWebView+Configuration.swift */; }; + 00BFF92A6EB62A825FC27C55B773FFB4 /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930C3411505409ABE11F153B7A416991 /* RDEPUBChapterData.swift */; }; + 00FD74A9CCE1BD7C92EF92B3051C7EAC /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 010659F20A2ABE308E90E1BBC242BD90 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */; }; 014449AE560FFF3C628FAE639D043004 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = CDDC623AB1701601A907DA67C2F8F283 /* DTAnchorHTMLElement.m */; }; - 01B473A60B6660F28A6C2DC1190983D7 /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053B6B55A0AF584768D1654E4E8CD2A9 /* RDEPUBReaderChromeCoordinator.swift */; }; - 01FC8D01C6DF7A1953933A1A4A5BC06B /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B0196FC40D2C37F4F398FE37F750E5D /* RDEPUBReaderSettingsViewController.swift */; }; - 02327DA0F3E6004674D1E7AB340460D3 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */; }; - 02AED0A624C2668913C7E251E1B5383A /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */; }; - 02B7EAC8CAB6EA20DAD85D00AE6B2477 /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3351DB26E94A1B4929F19A6CD7DABD9 /* RDEPUBTextAnnotationOverlay.swift */; }; - 0376C4FC3B9AEBDC398BEFDA367E95CA /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D747ACE10BD9D8BCED758A4A46AF52 /* RDEPUBChapterCacheKey.swift */; }; + 01AF419B0730918A46EF569E2391B967 /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D75F4A7A02692556E18AC3A388A190 /* RDEPUBModels.swift */; }; + 01F9BDEBC2DAA860F9B415ABB5A66A64 /* RDPDFReaderDrawingCanvasView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B6EFF1EBD266465C28091AEDD73E0B /* RDPDFReaderDrawingCanvasView.swift */; }; + 03290D0EDE675175B8346B3BBA253DE0 /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 03D90C831397E8636A33CE557024A136 /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03F5BDB8A984D25AA8B5C3A04A0785BA /* RDPDFReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B61DAFDEE306ACC7BD87261D5E513F3 /* RDPDFReaderContentCell.swift */; }; 04527DC803E0144AD715A2C7A06C1E3C /* Pods-ReadViewDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */; }; + 04ADF9469A9C4CE55FA682EA65EB5DF5 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */; }; + 051F47746E8330E1BB280C3A4A0EC510 /* RDEPUBReaderToolViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C4B8E3666736C72FD8AA9774095CD5 /* RDEPUBReaderToolViewProtocols.swift */; }; 0561DF6793C8516F469D9813F5CE3211 /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D5A0F7E62D88B94912634DC9AD339D /* DTCoreTextLayouter.m */; }; - 05B467DEE5B9A5E664E4763F4BF4B916 /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EA962A821F566BC34551F4FAA569478 /* RDEPUBCSSCompatibilityLayer.swift */; }; - 06AEE05D787968CD850BDC966973F1D5 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49E992115477F84A15A4129365D12DDB /* RDEPUBResourceURLSchemeHandler.swift */; }; - 07B3830D139CFCB60F7973FD2FF5CDA8 /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157AFFD84A5924FB4453156897B89901 /* RDEPUBChapterDataCache.swift */; }; - 08C38A4AB51BB19D174FCE84B7C8B818 /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939114DFDFBF654A6F7E4BEBC994848A /* RDEPUBPaginator.swift */; }; - 08C8FEA2CF7BDE60973411D7C1521D30 /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FFF22C518787CDED7AE164DE4635617 /* RDEPUBTextIndexTable.swift */; }; - 08FB57288C347F62017392F600BAA125 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */; }; - 097C183F7379FF900C6D66724E240FB6 /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4770ADCF39D17D831B68D7E56ECD598 /* RDEPUBRenderRequest.swift */; }; - 09917E2A011B509FB0B3BA35AB0E6F64 /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B471B34FFCCCA17B5FBD65D6C44569F /* RDEPUBTextPaginationInterfaces.swift */; }; + 0580598854A03D4712CE0EE68716DBAD /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = A24CED4F43EC2C2F55A6512A761B97B9 /* UIColor+RDEPUBHex.swift */; }; + 05D03C10C306DD68133220014C15C963 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */; }; + 05D41C82695A154984AB656F29955C77 /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34407B046ADF145B3DA08FE4C28609C6 /* RDEPUBWebContentView.swift */; }; + 05FCA262E9BFEA1114B209A4B7A369E1 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */; }; + 086F18593CE2300734027A8BD396A28F /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = 71751F490BDBE080BDE46E24BD09DC25 /* cssInjector.js */; }; + 08A306C9384471B8D7F3E748E57AEA96 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50AE5BE674D885BED9B796FE8D97FAF8 /* QuartzCore.framework */; }; + 0961AAE9066CA5087BF43739577F66D1 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */; }; + 09B49EFE6223F79FA3DBF2322ABEC3A1 /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6B4FC527668E1E4A43F77E5D5B034EF /* RDEPUBAttachmentNormalizer.swift */; }; + 09B8D40F105A1239C137746B77D54A49 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */; }; + 09C5D40EBC95C1DF08980AB315CEC608 /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = 1D7343E0F0547D801BC11E2D708AA33A /* wxread-default.css */; }; 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, ); }; }; - 0AC10C7D9FCA224D69994127F1F565EA /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */; }; + 0B16758571EB7BE5E544AE8896E74B36 /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D82EEDCF29F3E5B37BEA5191F49610E /* RDEPUBParser.swift */; }; + 0B5BA9A15467D36EB54F7CFF8036AB85 /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0B6FA1F22150D7F8B1865F41FF70C922 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 551D98EE6C1653939AE1E3BCBC4ACC2E /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BEE93A7D9D0566CEF608DCFD5DF6AC1 /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E005150A64B16EA98048A15B8A4631 /* RDEPUBReaderController+PublicAPI.swift */; }; - 0C0DE559E65693CFEC1F49EEA39B5D7E /* RDPDFReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF11AAFD2AE9015646F7EE3246E0E17 /* RDPDFReaderPagingController.swift */; }; - 0E111E02116D762C0A1744A2F635C583 /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBCFAAE0163F224D1A5AADD2408E9811 /* RDEPUBDTCoreTextRenderer.swift */; }; - 0E1EE9175703F0C3BE30FB6052D03656 /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */; }; - 0E312B4083BA7E353A066E0B2F52B803 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1436F2DD376B9A276627F7325D7BABDF /* RDEPUBSafeArea.swift */; }; - 0ECCD05F0321964293D75C01422140C3 /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DCBCEEF127955E485DBA3B5DE2C95DF /* RDEPUBCFIMap.swift */; }; - 0EDED556A8A6194CC1C962D80F869CB0 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4004BFA54E3225403BC0BABBA2F1FF12 /* RDEPUBTextRenderer.swift */; }; - 0EEA85BCABDAEE137C78FB33C557491A /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FC858070CE2793D286FCFD877306766 /* RDEPUBTextLayouter.swift */; }; - 0EEE12315BDD224D8B876D1853E1E3DA /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096F7D1110CB057D3FF288E71929D347 /* RDEPUBTextPaginationSupport.swift */; }; + 0BB8E31E895FFFDDAB4CC41EEE1FB440 /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C70BC146F77AE5CE624A06A7946C1703 /* RDEPUBCFIMarkerInjector.swift */; }; + 0D165B3DF90CADA8EE5DCCCB44A9B2E1 /* RDEPUBReaderController+Orientation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D4D4F7D2C3A548F609164CC506388BE /* RDEPUBReaderController+Orientation.swift */; }; 0FCBC8C64D8862F2A0E8794EDADDECBD /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = D4A82B2715640986D3701AF889DBD599 /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FF1BAE6301935C231F1B10CD4374126 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 207EF4D0FE030A80462834E8A489A6BE /* RDEPUBSelectionLoupeView.swift */; }; 100BFFBD24F234C095EDB001B8088DB1 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 74B2884E9214B5B38193587D773554BA /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; }; - 1040F34BD9EC09FA718EAC2EDF9E2E6E /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */; }; + 1018B5174E5013C9C38391BB507C4F8B /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10446CA423A9DBE2C3CE27C0C5BBE952 /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34112F3165802F124416A83D4B7B15AA /* RDEPUBAnnotationModels.swift */; }; + 105FAC578AB664388C1943FF0F6F84ED /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10639C21834EA03821258B750FF59966 /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80235C2E1DB28406F275E23F0ADDE9B /* ConstraintMakerRelatable+Extensions.swift */; }; 109458F9D48FD4F381F0E40E2DB3D91C /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10BFE7CF4EA8F622375D2DE88A857ED7 /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */; }; - 10C1E078A80225DEEE18C2932DD49834 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7A2B13E87974E141C7E3518F9D0EBF /* RDEPUBWebView+Search.swift */; }; - 11603ADFD8D5D76C47EEDAC2D83566CC /* RDEPUBMemoryProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6DC87AB92A31B288DFBEC314EBA61DB /* RDEPUBMemoryProbe.swift */; }; + 10D2345D0BDAB0A1116848C3E6556168 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */; }; 11AB1902A68385851FB81E870991F9A0 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */; }; - 11FE35D5EA18C783309DDCEC4C06DDEB /* RDEPUBAnnotationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 690FEB18BA479297CEE1DF5D5CCB43F2 /* RDEPUBAnnotationModels.swift */; }; - 12229251FA0223B4619966FAC3DE54A4 /* RDPDFReaderPersistenceStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0A3551A7313EF0434A26B6F5A0796E /* RDPDFReaderPersistenceStore.swift */; }; - 1225145907B41006DD79D787886C2FEA /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14718D15ACB3676A3423EBBB1044E4E /* RDEPUBTextAnchor.swift */; }; - 129F14F7249D4F8967048B531FD5DAC1 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */; }; - 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC6581B7BD334A42A3D4B0BB876361E5 /* CoreText.framework */; }; - 12BD58B4AD50F68DF894CA5C10EBF594 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12F09945E58781F38F0AD0D823F2D1D2 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */; }; + 129D4B35C96A44FF51627D670168E256 /* RDPDFReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD002812D1D11866A93FEFB5024D5DA0 /* RDPDFReaderView+CollectionView.swift */; }; + 12B4A35B8E40C112E18A7C5511F023E9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63482DC4A15D66980EFBAA222D2D6CA8 /* CoreText.framework */; }; 130C3A85D9F9F445222C2E31EC245B0A /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE6B072BF746163179BDF80F8CDBE1D /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13826FE38E03A06B73EFA9A4D16BCB88 /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CD458F3F5787E00148717A6CF9C9E52 /* RDEPUBReadingSession.swift */; }; - 1410FE1B311FEA480FE3CE8DC708A6C0 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */; }; - 1475FE85DA4D305E075E794861399715 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E8311A315E4A83FC7A16613F723CC97 /* RDEPUBReaderPersistence.swift */; }; + 135E8C300067D3E03A313D518706EAA9 /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64DE54DECA8006B6CC936B6A5271D1ED /* RDEPUBReaderRuntime.swift */; }; + 13779EFC4B60766AA45F4C453EC5E89A /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5465156489BA8D643EA9935146897329 /* RDEPUBReaderDependencies.swift */; }; + 13939482D36155060087CC4080166F49 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */; }; 14BDD9FB7A7AC5C8ABFF8D24C381F3DA /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */; }; - 156F1DA0F5E1CFD1BAFD83B274CD912E /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 226DFBAF9E02071AE8F79A02E72EB4F7 /* RDEPUBBuildDiagnosticsReporter.swift */; }; + 14D5FEB30629D96E8DA566B49D770031 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */; }; + 155F420C89324E92D8DE72847F1D7E64 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */; }; 15A7ED15DA03DD3B9F26A017D270D1C2 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1618F40576BCC521A3909B191C73A9EB /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E5D96C4E8D4900AD2681A58A3819F72 /* RDEPUBNoteModels.swift */; }; - 1629BA48D5AB565701A53B759CFD285A /* RDEPUBWebContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA6DD4FDA389DB9F4C8F97B054C10AAF /* RDEPUBWebContentView.swift */; }; - 162EE6E1F3EAF5D032ED89C227B7B388 /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC3BCDBDD88D30A3F51094944FB70FC /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16C518C5D2F2C1CC3A414FF6D62AC9A1 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */; }; - 1714DE5101178793BE596F7E7C0B6DD1 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */; }; - 18260901971682DAF87FDF74375B7846 /* RDPDFReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1EFE112AE9D15F54343784066B22ED /* RDPDFReaderView-dummy.m */; }; - 19111E28A2F8B49503BA160D7E8E096F /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */; }; - 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B96C04A8EF23BA144246390EC85DB60 /* CoreGraphics.framework */; }; - 194F401A32504D7AC25E8E7411624FE4 /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06EB1604CF5B48E50EE9B4FE0A518BD /* RDEPUBPublication.swift */; }; + 15ADFF2FC3055D22BE783942D1212A11 /* RDEPUBWebView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCB5D51A2FE9AE00599C8B10A728AC7 /* RDEPUBWebView+Search.swift */; }; + 15E4A50ACA89EF7661AE074DBFFDF5B7 /* RDEPUBMemoryProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8ABB198220CF4FE67049FE2349947A /* RDEPUBMemoryProbe.swift */; }; + 1639ACF52DF98CEB9D0209EAD4CD6AA3 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB985E900E9F34170BD44A81E7FD1C83 /* RDEPUBRenderDiagnosticsCollector.swift */; }; + 167B3023D4C7C6FEB312E907C356283E /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17281C88AE75A26C730E43C15467E723 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECBD2FB74FE0B1966256CD0C39BF1F83 /* RDEPUBSearchEngine.swift */; }; + 17B9F651C4E7C21338A2AB04DAB3121D /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */; }; + 191824B2B1E1B0A7DD3B6298100B4B8A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6677A5CD728A7E722DC3075C374CDF4 /* CoreGraphics.framework */; }; 19649ED312D92A6F5D2D6AF4E540CE75 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A66CAD5382C98B32A471B733CAAB56B /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */; }; - 1C2DD8EEDA6E74D2C2E040D910E7B40D /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; - 1C51645361B2C060E7608643AF9A58D5 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D0FDD4B2C405E4CBD58C91991223ABD /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3CB5C8EE9C521C9C45EB7D6A7EBA941 /* RDEPUBTextBookBuilder.swift */; }; - 1D31B00CAB218A1D45772B3BCA0F1B66 /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */; }; + 1989C9CC57E1100B8EDF3F5844C9DA6E /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C393B65BEDBCD67A7B2BD0FD26B869 /* RDEPUBReaderContext.swift */; }; + 19C8677572874927A3364FF627870BBE /* PDFKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 232BAE44CA9BE28B729B402BC8B8FAD8 /* PDFKit.framework */; }; + 19FB4576BF3DC1B22EFE421249D4CE70 /* RDPDFReaderImageTextRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636AF7DBBCB7320FC883EAFE197EF923 /* RDPDFReaderImageTextRecognizer.swift */; }; + 1A2AED084871CA3A78226A16B2893A71 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53EC1D66653102E077AA44906338EB5 /* ConstraintRelatableTarget.swift */; }; + 1A4D4371A6D8086811CA461DC49BA33F /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC0B71EB8AFFDB330E0D8E99CFFCDD3 /* RDEPUBParser+Package.swift */; }; + 1A53A0E3B617A60D8ADC80B68EEE35A1 /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */; }; + 1B0202FF627E2F99AA09AD8D76A84AC9 /* RDMOBIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0E0892DD8B09BBF7E0234F6E258D6B5 /* RDMOBIParser.swift */; }; + 1B5052AC71482489C571B9C473DE3ED4 /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */; }; + 1B757164A8714741AEB51962CE84E0AF /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB6B2A6C61E6FB95968A8366924DE033 /* RDEPUBReaderHighlightsViewController.swift */; }; 1D460603DCA4A4E5ECFE8FF1F1CACC10 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */; }; - 1D89AD7754C1740422BEFCA0F8570295 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */; }; - 207CA30C69A1CDEE6010BA3E13F9779A /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20CD16D8B558C657C008537A23D8CCAB /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */; }; - 2113EC29933BDAF581E451E20C5D5870 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDE71E415F7E3067F6C022EC10874CF /* RDEPUBPageInteractionController.swift */; }; - 21151A13DEA3D2D63276965B2CA36971 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09CBEF1B079E6DB8C0D954127E9FE36B /* QuartzCore.framework */; }; + 1DB02C024072801E6C83196C6F4CD925 /* RDPDFReaderNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F61B106422AACE26C3C7B05C5293DCC /* RDPDFReaderNavigationView.swift */; }; + 1E3CAFB57AC9CEDA5052E2B7C2862DFD /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7DF84037D55273D99B5284EDE7F7FC /* RDEPUBCFIGenerator.swift */; }; + 1E8BEAB75C40E2ED799CAA16BAC8807A /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45019AE00B85C161910232F35A46E260 /* RDEPUBNoteResolver.swift */; }; + 1EAE1F26CFFAAE7BA3EED4A895A65283 /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = 2F23F0E002BEE47B1E786821D96067E4 /* rangy-serializer.js */; }; + 1ECBE1E3E48F3BEB91DA496842A61CE8 /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */; }; + 1ECD2540B27D5D2E20144AC08D55DC85 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */; }; + 1EE5DC3F2D93547DB6E397E8B963C7F6 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */; }; + 1F811F480AA892090B887D50BF1FB361 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2203356EEA94A9172BC7902923E43CBE /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 231A81A503466DE0974C0840323CE4C5 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 230105AB8EF7CFD998C6FF564482498E /* RDEPUBSelectionOverlayView.swift */; }; + 222A251FA9F106A668FC4273EC4200FF /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */; }; + 2285D8F6F8450CB71AAFC2398CA269EC /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = B36A4B649DD5CA1C5D4DAFC54E0E13DC /* RDEPUBSemanticMarkerInjector.swift */; }; + 228E6814C78EEBFEE8E9EA4802016FC0 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23A689CCA9073CE674B1BD450629DECA /* RDPDFReaderView+Paging.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3BF1AFD43CD35EDA59ED119955FAC96 /* RDPDFReaderView+Paging.swift */; }; + 23BBE3B3573E7296084D8A61A1FA1AD4 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */; }; + 23BC290FF41AD9EFC3C9C0E9BB9F008C /* RDPDFReaderKitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5AAA2346B2236EB367432D8CD2FB317 /* RDPDFReaderKitView.swift */; }; + 2413A6C52542F45B1661CF6AC1FE2D65 /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FD0605520377843F2F940947AFE16C /* Archive+Progress.swift */; }; 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, ); }; }; + 2474F7E6FA6B8473C121C81B6FCDCCF3 /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24B7824198086E4C7FEA42755440DF60 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */; }; + 24BC5333E523715A7F230CBF3E2C073F /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */; }; 24C5B52FD2AA9C49731DC6859ABA7CDE /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDBB29D0A60FEB56FCC489DC10F37BB /* NSDictionary+DTCoreText.m */; }; - 253D4CBC95F1C5B2E9614C3CEEF43EC6 /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */; }; - 25E20B7238DC18D01EDDB93DF7050E4A /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAC1D10BF65035581AF2F9821CA2835 /* RDEPUBReaderController+DataSource.swift */; }; - 264A59B26EDB3A58F5A52FEEC435D9DC /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC7B6AA174033D137FA1A052F40E2FDD /* RDEPUBReaderController.swift */; }; + 26315E878BB38BE50BD5DD77C00BBBED /* RDPDFReaderNavigationPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5563F7DA776199803E76170B264676BE /* RDPDFReaderNavigationPanelViewController.swift */; }; + 2636FEA811FE9EEEFEA940143DD17AB3 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */; }; 270C5C10028F0BC5A62548326CCB379B /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DCFEFDD6D693AD5967568E86920AB08 /* DTColor+Compatibility.m */; }; - 27D53DB003BBEC19B384BA5191EE6428 /* RDEPUBReaderRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = C330E74881B4D425F9A5780577A5C248 /* RDEPUBReaderRuntime.swift */; }; - 281408D8F2091DB12464115FD520601E /* RDEpubReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 45E0BB5F74AD3A79CEC11519134A7931 /* RDEpubReaderView-dummy.m */; }; - 281EBD1BE04710DBC26D7407DA465709 /* RDEpubReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FFB6BF7363A97A0F0CE998F9744D118 /* RDEpubReaderView.swift */; }; - 287DC2B351EBFCB17E9FD06BD5B0BEEC /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC56A9C84FA72CF9807C14A8F6F699B /* RDEPUBPageCountCache.swift */; }; + 27C488C467E166610F298953A8253BC2 /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88FCFBF2D7F2A0C26D1FBF5161035517 /* RDEPUBCFIResolver.swift */; }; + 2808691D62CA0901739A8462538139A5 /* RDEPUBPageInteractionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 257E3A6D94EB339AF710CBA1515719DC /* RDEPUBPageInteractionController.swift */; }; + 287346F1E7822C038D95AAC869F8EE1A /* RDEPUBReaderSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D18CE46766B67622CBA19146529FE7AD /* RDEPUBReaderSettingsViewController.swift */; }; + 28E83C2B2DBF5887E15EA2F133800C2D /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D6BA3E651245BCC8808128EF553958 /* RDEPUBBackgroundPriorityPolicy.swift */; }; + 294DF90539B944BF674F3C9C999D6F23 /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E68AD352C43FD90827957D8073F835A /* RDEPUBWebViewDebug.swift */; }; 29D9B32DFFC59A157EDEF005DB92A5AC /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 172C1329A4A6171B18EC5A192815941B /* DTCoreTextLayoutLine.m */; }; 2AAF9361720FC2D8FFCA93B5FAE42019 /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */; }; - 2D3295438CB416E54FF9CE6E6087CD25 /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECBDEADA2700EFDE005F0303A97D272F /* RDEPUBSelectionState.swift */; }; - 2EF00FEF0F4932FDA31DC090B20001F2 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */; }; - 2F001AFEEF5EDCB2A6EB6CF0632B70EA /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88FE071676A715670B029103BBEBCC61 /* RDEPUBCFI.swift */; }; + 2B2B79EBE69FD69100988552BD920775 /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F65D6C8950F76034AD414199E8D4C2E /* RDEPUBReaderTheme.swift */; }; + 2BD3DBBA503E1B2B2AB4AE1EED3612A4 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */; }; + 2C3E8B24AC8FD7CC8759287E1DA19180 /* RDEPUBRenderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC7EF3FC064B375733390FA3799A617B /* RDEPUBRenderRequest.swift */; }; + 2CEB3C712A0253686046DF022AFAA816 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */; }; + 2D9ED50265434753B6D9C1B50A21FCED /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FA5C87F7EAAA97726C4CD9D9B059B6F /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B05F3444C3A7680B4D1E4DE01B8A567 /* RDEPUBChapterTailNormalizer.swift */; }; 2FD7360250C2255A80583D4CF518FBFA /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */; }; + 307B51E3CC861F36EACCB6A40E68B9CD /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CE7F078B6F280727666D10430B4FBD /* RDEPUBNoteDetector.swift */; }; 30C01FE491C26314F776AD8B2AF136FA /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */; }; - 3175BD0E3F08E1872F79B3399A0D3925 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */; }; 31B805C50E0E187E6242B0C878C4D30D /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31B8465BD0B77725D8A004CA168F1BAC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; - 323C5826CB22EA9CFDE97DDF0E34BABC /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */; }; - 328F6059B7D9E758307410242C05AF3F /* RDPDFReaderAnnotationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E166B7546DD376BF9029360A5A28595 /* RDPDFReaderAnnotationListViewController.swift */; }; - 336DA2E0817E5E425296CFC25635AE9B /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */; }; - 33CAC9C49BD3C2AF5B55A5E4D402F671 /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995B096022F7C738F27BCA2533534438 /* RDEPUBReadingLocationModels.swift */; }; + 33C7582C73593E4E03EDFD4EC04C1FA9 /* RDPDFReaderHighlightOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034F5FDCBB44D08C5A68F8AB2B4777F1 /* RDPDFReaderHighlightOverlayView.swift */; }; 343E794F88AA503F5139C2244DC1A2B1 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C822D376841DA0BA4150A8A8E5B911D /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3498112B821CDC8112CF4B7D3874FD58 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9719394B24A0CB3CCE6CCA87A0A70D08 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34BA70D70F94E2240BEBE8CE27203C61 /* RDPDFReaderDrawingToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DB249934B60DDC3ADB50D4B6C1637AA /* RDPDFReaderDrawingToolbar.swift */; }; - 35A1CD803CDF14B6CE408C2FC23FC059 /* RDPDFReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2604E9D64804DC4A2CA43E0C668DEAC /* RDPDFReaderPageChildViewController.swift */; }; 35C5BE59CA712CCDF93D6E7010D93883 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A43AFE4C6D7EBA5A25A5B514F473AF /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 363B602299B0E9D8B396DB307E881B45 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCABB4D698319B7BD34E6F1984C6C81 /* RDEPUBFontNormalizer.swift */; }; + 36DC8E915917725A9DB5CABDCB5015D4 /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EF4435215EDB7548944507506D0A4C9 /* RDEPUBNotePopupViewController.swift */; }; 372E907DF08263D0E1AF904F1FCD66EB /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37FD0903639B905E4409D09977752D03 /* RDEPUBNotePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 494A49C8C5EF7191537D252AE03671C2 /* RDEPUBNotePopupViewController.swift */; }; - 38483B4553B19EF8DDC3AAC456354850 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D02B121F8A30E42AEE560BF7A112E44 /* RDEPUBReaderDelegate.swift */; }; 389F7C8400F9223C019F2D7825CD2369 /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = E26546A9CD322544BEF648DFE2B26D7D /* NSCharacterSet+HTML.m */; }; - 38FB9A3277FFFA9FDC3CD305FC4451B6 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */; }; - 391CFF77BEC993504231889C8CEA6B45 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 394D1577E6E86952C1D8DB4496A64C78 /* RDPDFReaderDrawingCanvasView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71EC45084F977648BC9C9265ED6A6FEF /* RDPDFReaderDrawingCanvasView.swift */; }; - 39A97567817948C7DFFA421903E94D3F /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = 108120864A7F26BBCD8D0ABD84BE7DFA /* wxread-dark.css */; }; - 3A683EB20C298AA24A299B6E5960929C /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC8877FCA14B6646C4FEF59A3B0F1ACE /* RDEPUBReaderToolView.swift */; }; - 3AF4E1B78AC2C629774E960920FC3B2D /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1C6E107AA4540639C1ED1E7741CF07 /* DTSmartPagingScrollView.m */; }; - 3AF74ED60F7242695BCB9DF5C3F5154C /* RDPDFReaderSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31ED4EB4A9C339511F3685FF228D8B0 /* RDPDFReaderSettingsView.swift */; }; - 3B4272C2EE99AA088720ABF347EB480A /* RDEPUBReaderController+Trial.swift in Sources */ = {isa = PBXBuildFile; fileRef = 683946BB28C88E77187DB918AF14A8BB /* RDEPUBReaderController+Trial.swift */; }; - 3BA122531A484A0F3A6174AE497FFFC5 /* RDEPUBAttachmentNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE086C6878D5213AA4C991C42B28C72 /* RDEPUBAttachmentNormalizer.swift */; }; - 3BCB33768CEA3AACEFF26CE21B625A3D /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */; }; - 3C6E19F45001B5C9C01B2544C766C6E3 /* RDPDFReaderDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AE034BE473A605AC52077AEF86BC27 /* RDPDFReaderDebugViewController.swift */; }; - 3CBB95CC6329A1108C2D722FE3FE50B3 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B8F8BA870ACB6C7ACBDF945336D485C /* RDEPUBTextRendererSupport.swift */; }; - 3D62724A3FD10A568D3F932E10B679B0 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38A91EB79CFAB78049BB83EB5305634A /* RDPDFReaderPersistenceStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7B712780654B2698F0379C758B2613E /* RDPDFReaderPersistenceStore.swift */; }; + 396CC47765C52E169161945557D1E0AC /* RDPDFReaderSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE4839D4FBE796B7FDD121170DAD53A /* RDPDFReaderSettingsView.swift */; }; + 39B236CB7C9212BFAE8D3830C361B196 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E46A6DEEE6CEA27A1FC9024036D8136 /* URL+ZIP.swift */; }; + 3A6FC9CBAE2C39A84FF7ED27DA29CC5B /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */; }; + 3AABEE7BEF895AE3EEC5DEA7743A4356 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */; }; + 3ACD250804B9C734DEAF67E260F15920 /* RDEPUBCFI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D1DCB390ECBFC669909F9181A3FE8B0 /* RDEPUBCFI.swift */; }; + 3C6F422428CE8B9F2AED56B60B2C9602 /* RDEpubURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88EAEAB89867B1405011D65F95E4F64 /* RDEpubURLReaderController.swift */; }; + 3D29E3866F13EFDCD0F969C068317E99 /* wxread-dark.css in Resources */ = {isa = PBXBuildFile; fileRef = 5ECBBE5C440153A7C6B87D92B16289B0 /* wxread-dark.css */; }; + 3D8AC6AA5DA1B5B430DBC4A2DE86C977 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3DC8F9474FC6A0BB7E81A703CE958966 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A5EB7C80D2F578DE579CA1B20F3CDB /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E390120B079DACA105740A0F7998371 /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */; }; - 3E6BB28D89E571D6DBF0A8E3FFD57152 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005A076C910A4DBBE6E72F4D11CB624E /* Data+Compression.swift */; }; - 3E79E408729FBDD4637F60B1BC5F2858 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 400A072B0685B2775273D54DCAEB7EEB /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71BC62246AFEBD517D3175813789310 /* Debugging.swift */; }; - 40E94901309752B5935E850C7BAEA84E /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */; }; - 414B95A808B30DE71071E3C8058FDBC0 /* RDEpubPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCA56243CDDB901C3906DC4B542787B9 /* RDEpubPlainTextBookBuilder.swift */; }; - 41D74CCD30877BDEDD686AD4CDB713CF /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6695E46F0A0838241051951EDE4FDE8F /* RDEPUBTextSearchEngine.swift */; }; - 4303036E872254A4D3E1FE61B545FA1A /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70581F979E8449528CAE97C3AEEBAA1E /* RDEPUBMetadataParseWorker.swift */; }; - 4339FA7E2F1E77F9B19A6A5944C0A9BC /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BAD07193432415DFD17CCDC575C5E7 /* RDEPUBWebView.swift */; }; - 43550113041670206E6B2B7FD12E0617 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */; }; - 43B272324F27B049A22999BFD57A641B /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DBFE0446072C23DBEA71CC4A03B6FD /* RDEPUBPageBreakPolicy.swift */; }; - 43D5BAD34F2EF39D535F2DAA02DC0C18 /* RDPDFReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF7CF50D52DCA13C2251358552DAAD3C /* RDPDFReaderView+CollectionView.swift */; }; + 3DE492221688A9FD941CB0C4F83B3EEB /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C351D0643D777D8082434A64A04B7312 /* RDEPUBCFITextAssertion.swift */; }; + 3E43290CAF5CBB6952FA4429D0E59F7C /* RDPDFReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF75964868B86A27B63709439E9AF91 /* RDPDFReaderContracts.swift */; }; + 3EB9DCC1A22D23ECBA68D493F0EB8994 /* RDEPUBResourceDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC380EF32AB6FB2395CF0B9E62F3317 /* RDEPUBResourceDataProvider.swift */; }; + 3ED3D590470EB5D28E8E0A0F35DE1A23 /* RDEpubPlainTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 933404827F6B057EB29BBDD6125374E4 /* RDEpubPlainTextBookBuilder.swift */; }; + 3F8E5BF8A103AFF70E8EF1BEF40C80A3 /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = 14BBECB3A6235FDD72CE46FBCD08FE3C /* WeReadApi.js */; }; + 3FE37FCED1213F0CCD4CE93FD10BD0E9 /* RDEPUBTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FEB7BE16889FD8532441C936C01304 /* RDEPUBTextIndexTable.swift */; }; + 4054EDC26E6972F014B40C6D58B1E348 /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92790B32EB81BDF75E8ACD8E3C4BBE10 /* RDEPUBWebView+JavaScriptBridge.swift */; }; + 407E8286C3E02E9DCA0119C0D969FEF6 /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016C4701210031B8CBC8C4C2D03DB357 /* RDEPUBPreferences.swift */; }; + 40E6FDFB6C87C3FACD94999F9007B22A /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B730A14FDA23EC9BB3ED876FBD5BA4 /* ConstraintView+Extensions.swift */; }; + 41181309680AD350246E05D2FF51B3CE /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */; }; + 416183B9FBBC3C7623F0F97E2A0DEB09 /* RDEPUBTextPageBoundaryValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6BD7E7A08332F631D063AEBB4DD8F7C /* RDEPUBTextPageBoundaryValidator.swift */; }; + 42E8C52579C378B702EFF01188E53CF7 /* RDPDFKitPageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830E2FF68050B3931209AF2581249082 /* RDPDFKitPageProvider.swift */; }; + 43B0CBD98713B6E86A6FB47D0C57A364 /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 557386F3232CE41AD7A21D1D0C412FC0 /* RDEPUBChapterOffsetMap.swift */; }; 44B1FBF893C06F314F8C9BD1405897D8 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */; }; - 44FA82871891E16D3EB00A4FABB0B1BE /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655616F30F054425AA178BFF79BA5840 /* RDEPUBReaderSettings.swift */; }; + 44B308C0F464440B6DC02DA06AC0CEBE /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */; }; 45133E47CC5FBCF78BFCD38981BA027F /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45D22FCB6BA2A4F871FE30366B8B9DAC /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; 45F90B98546FDBA03AB112DFE859A185 /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C5C85EAAD91F1E22CC5986EF9B5D218 /* DTCSSStylesheet.m */; }; - 4670A2F48A30E2D6F06A63786F96F617 /* cssInjector.js in Resources */ = {isa = PBXBuildFile; fileRef = 6B29C1716D91E427023E6FA9B0FBF037 /* cssInjector.js */; }; - 46EA9A16CA91B9C683D48064D803F522 /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C0CD41C24A77E0620C082FC9118A030 /* RDEPUBCFICompatibility.swift */; }; - 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F19ED99ABDCF88F81F05E71BECAD550E /* ImageIO.framework */; }; - 481AF1684ABE890B8E8391E1D31C8696 /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA822947B8B2C54ED946D86C7736AB5D /* RDEPUBTextPositionConverter.swift */; }; - 4867E6D264B0650B5473806235ADE1E2 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */; }; - 487D0AA4338850A7722DA2BBB1A74FBC /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 489B4BAE35B92E1D5B1C946496BFFB24 /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C699FF0C7478AADF0B16C444586156F8 /* RDEPUBPageResolver.swift */; }; - 48A724CA6B8D8DF114B9B56946E739F2 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7F56675C029BC561A7EFB55EF0041 /* UIImage+DTFoundation.m */; }; - 48EDA2D55A7167AE17A4C55CF592B77E /* RDPDFReaderChromeViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814ED791E332D02C2475A0569569C2E4 /* RDPDFReaderChromeViews.swift */; }; - 492817F158DC14ECA68675244770685C /* RDEPUBReaderContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64AE1D37C74699EBE98C957AF7FF16E /* RDEPUBReaderContext.swift */; }; - 49BA9E62A11CF85EBA7E4C0CA5571CF6 /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D05F5421885C5D856CB4AFF76DF543 /* UIColor+RDEPUB.swift */; }; - 49CE36A4491D3259E2C0DFCAA8EC1247 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05E4852E5E5E06F38C185F78020B0739 /* RDEPUBBackgroundPriorityPolicy.swift */; }; - 49E511D8DF590B4FA8E477C3FC5576F5 /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA153D679D524FF17574716601202C51 /* RDEPUBReaderSearchCoordinator.swift */; }; + 460CEA9F3899BE4066AE872BCA931771 /* RDEPUBTextPageVerticalJustifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D41D5F7E42BDEF71C2CD08D7E019C1D /* RDEPUBTextPageVerticalJustifier.swift */; }; + 460DDC8FF9C5EE77B50366F64504C975 /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81032F879C858B2A45DF02DCF7ED8E6A /* RDEPUBChapterPageCounter.swift */; }; + 46759C5BEEA541B506D8364771C1762F /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */; }; + 46EF32D586FF590CE2C60C66364B9357 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0AC91254785C4B0B73D391B603ADE47 /* ImageIO.framework */; }; + 47377798BC8063B8C0BF24DB9E7A6410 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A672DF142E75858C34A342B2BB2AC891 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47823BDDB026FB3AA03789F952BADF09 /* RDEpubReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94885CDA3F48C7BEEDD826129955D4D2 /* RDEpubReaderView+PageCurl.swift */; }; + 4953AE4BD31D4185D3091ECC6CAC24F9 /* RDEPUBReaderToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499B927AB070F064B0E8A012382003F1 /* RDEPUBReaderToolView.swift */; }; + 4995967B0C0F48A4437FBA42B1525685 /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5DEEA6A9CEFC805D050932E03E1A21 /* RDEPUBReaderController+RenderSupport.swift */; }; + 49DFEB47397EBEBF0A18636FADB893BD /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C26F63F750A573082295256163B7B3F7 /* RDEPUBCFIParser.swift */; }; 4A13B4E5EA8616A8F09D90BC6EAEEA64 /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */; }; - 4A9D5D28A50783AD3230977BE9EBB358 /* RDEPUBReaderToolViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1ED4036FD80E30C31C2BDBF09F72E9 /* RDEPUBReaderToolViewProtocols.swift */; }; - 4B33EA19AEA45043C9243B89B3B0BE99 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */; }; - 4BD3879013E9A19BBD376D48FAEDD35E /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC8F9C8C06865DCF84B2F460F2DB55 /* String+RDEPUB.swift */; }; - 4BEC081BB83F4E358E754FF2F09D57CF /* RDPDFReaderSettingsPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891BB97274B07FA451D7C2403E7C5B46 /* RDPDFReaderSettingsPanelViewController.swift */; }; - 4C48F14434E73F1E51BC0E4B1A77BF4F /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = C22B806740A293207B136B9B5E8AF844 /* RDEPUBParser+Archive.swift */; }; - 4C66A02D5240C8F92875B6BF22F2A253 /* RDEpubReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 338C871316C439906D847FF4ABCE7E26 /* RDEpubReaderGestureController.swift */; }; - 4CF50C1063D92172A3870CC7CE56390A /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */; }; - 4D6F1FAC6A0556DE6B476EE77D9E4A14 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C098A754CDDF19F161D09EB3C31AA91 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C146C2C2DD2C526CBFC04352ADF45F8 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */; }; + 4C571730BAEA49B8E2B4AAB5FF4C6ABC /* RDEpubReaderGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E74C786C11A2410677CDAEBF7DD1B4AD /* RDEpubReaderGestureController.swift */; }; + 4D1DE840FE2BDF91A821B28921B9DA46 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C24DC0DF11DB45CDC92395B3EA2689B5 /* RDEPUBStyleSheetBuilder.swift */; }; + 4D2C32204598EEB25DE02652DA3A4517 /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = C48F11FB4EFE57B4DED13881F78ED4A8 /* rangy-core.js */; }; 4DA6EC46F8968265B96C6D7B2260C4E5 /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */; }; + 4DE021908E4E1FD343F225D687828B6C /* RDPDFReaderImageTextLayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3FC196B05ACAB99474CEA476B0CD195 /* RDPDFReaderImageTextLayerView.swift */; }; 4E4939F6592B06D2CA764DCACFB47871 /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE24D923BB63C2BD4397C37352A6204 /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F1F5D5483FDDA251FB1467DE9923A30 /* RDEPUBTextPageVerticalJustifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70929B50B4324B914A30A8063AFA37A1 /* RDEPUBTextPageVerticalJustifier.swift */; }; + 4EC2770415CD64F8EC90F4971FE01F2A /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */; }; + 4EE1DE32B6F53040034BD25CD6546805 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4F50C703427747B88405080B221349A1 /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E7890CD33BD10753D1D971AD2FE20A74 /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F860E6DC7E00100950C3A782E5191B8 /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */; }; - 4FFCEA35D3F94EF9915425BF6074B532 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D42C4F678DDCCEAE9A66D3D55B30AA8 /* ConstraintMakerEditable.swift */; }; + 4FE3F57478AE12AF0762DB8B7F6658FF /* RDPDFReaderSettingsPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87A369FECC06D50D3068A665BCD42179 /* RDPDFReaderSettingsPanelViewController.swift */; }; 5065D99E1588E8CC60677E74916A5C03 /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */; }; - 50FB42EE78B35DFCFBAD41AC690CE9E7 /* RDEpubReaderView+PageCurl.swift in Sources */ = {isa = PBXBuildFile; fileRef = E05FACFD35497E37E245CBC7C261AB13 /* RDEpubReaderView+PageCurl.swift */; }; - 5170B2493FC2D4DE69D4A7CA8C25141E /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB0EEFB71EDB43C8D13587E231AEA1B0 /* RDEPUBCFIPath.swift */; }; + 5075124CA1638D3C269DEA00ECA3964D /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 318A173BC4548B559258A9FE99D42742 /* RDEPUBPageLayoutSnapshot.swift */; }; + 50B113FC2E2AEB996202A5F72411754A /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = AED29B787D83E9C4459430CDE0DB612A /* epub-fixed-layout.html */; }; + 51340BC6E06C090CB50B286724831E7B /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F00C52E49C78CE7F63C155C5C74AFBE /* RDEPUBReaderAnnotationCoordinator.swift */; }; + 51A0BEADEA665AE04BFEC268553C1249 /* RDEPUBReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1697531DEC18EA6F9B99D0146C015338 /* RDEPUBReaderController.swift */; }; 51A1B5800D23C355B1712E8D1103780C /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5289B37B4A81818EFDBA4FD40BC72D57 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96E1140CDDCC684CA4C6CDEB3E012E35 /* RDEPUBReaderTopToolView.swift */; }; 528DBAC7FCEFC7D6575C1F6CB4399AEA /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5428A2EB5DD9CC554F83ACB2398FA2ED /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E61E4FDE971D7EEF2F853F425A0336F /* RDEPUBHTMLNormalizer.swift */; }; - 5543DD40077B88D5D9FCABA6B3C6545B /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */; }; + 5363B2BC23909119FC8F9986DC3665F2 /* RDEPUBPublication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24818987BA7C833972E50A1921661271 /* RDEPUBPublication.swift */; }; + 53CD7480D7A5DEA16105271B3A4A0EDA /* RDPDFReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15FA72422C7B69BBA7D5B3CFF098CCE5 /* RDPDFReaderContentCell.swift */; }; + 54CC0E42773420964101E9C51F71E941 /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C5C5D2EF233B42FA8D3BCF06713DF42 /* RDEPUBReaderChapterListController.swift */; }; + 553D996359941996BCDF3F73F48CB96A /* RDReaderDocumentFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E58C1EF4EC5E0B8E2B38CA2270B93E9 /* RDReaderDocumentFormat.swift */; }; 5582735073EBB9F5078E6E8AEEFB646A /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 559423F9BFE52B64951455A6DE443744 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 559CCC842F999531111486107DACDF45 /* epub-fixed-layout.html in Resources */ = {isa = PBXBuildFile; fileRef = 1E203C95DB51A1EA6741A61D8B307846 /* epub-fixed-layout.html */; }; - 55F7F98AF0A68A0CC9000E164D86C388 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56065A55CD386F9B441B9DD060C77E0B /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */; }; + 5587CEE3C0E5288818C3C5DD8562EF3D /* RDEPUBPaginator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90FED6AA55769B0F41A57155366E801D /* RDEPUBPaginator.swift */; }; + 55BA631EFFCE67592653F9A6790490DB /* RDEPUBTextLayouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D27A3BD8D86D036B86A90C4384EF483A /* RDEPUBTextLayouter.swift */; }; + 55BD44A705AA661A7950A255165D15F9 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A67FB1DCECBDAA36B9B755606AC42C17 /* NSString+DTUtilities.m */; }; + 55C51A8032ED8F803ABD609382A716E1 /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCEAC930B7FAD0BFD2BF58A81C1B82C6 /* RDEPUBCFIRange.swift */; }; + 56FF83A81EAAE4DF9074B3D93B447C60 /* RDEPUBReaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E242368DFEDB6BD27EDA8C0E5915D6F5 /* RDEPUBReaderDelegate.swift */; }; + 5766BBAF238D43A234A9965D209D3456 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */; }; 57D5228C8A85628772D4D78E7FBEAF3C /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 188836BC213C48E6459D098231133246 /* DTDictationPlaceholderTextAttachment.m */; }; - 586BE94A6F3AFAB1C0709E7C0283995E /* RDEPUBReaderDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC54F4A57E211890551F91CCFAF4B59A /* RDEPUBReaderDependencies.swift */; }; - 58F31A458C136CF488BCBE23AEE55185 /* RDEpubReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48BC031A7181176F87178CB4438E1AA1 /* RDEpubReaderPreloadController.swift */; }; - 59799C28C42AAB00342D322F16B00974 /* RDEPUBChapterTailNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED039739CBB08894FE27469D1AFAAF0 /* RDEPUBChapterTailNormalizer.swift */; }; + 57FC7A6DE84141D6B2636B9ED8E0BE82 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298E057B5F44628E4EE593F1513E95A6 /* RDEPUBAttachmentTooltipOverlayView.swift */; }; + 5836CA35B11F27537237D9A6E3E3C334 /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81D503CA2CCE9D4172B5D9BB346ED30 /* RDEPUBPaginationCacheCoordinator.swift */; }; + 58BD63B311E131A04D27C09E6A44DCAD /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76244BD19BB5CB592A5EB99402C94A45 /* RDEPUBReaderController+RuntimeBridge.swift */; }; + 58E895FB648D69922341F4D6FC7D223F /* RDEPUBReadingLocationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 924A837FC3890B67B17DF9246FB39A4C /* RDEPUBReadingLocationModels.swift */; }; 597DE4CDF5C674E269F03F6AA0AFFCC1 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */; }; + 598FECAC8A0A211A0CD1C4BFC4F5D17D /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24510AD02ED2650316ED6246FD926EE /* RDEPUBReaderUIState.swift */; }; + 59B5E86ACB2ECBF2F44515967AF5C0F5 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */; }; + 5B7CC211EBF1F22C9429B66CD4D31973 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */; }; + 5C91C49D7918D688CA79565E21001BF8 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA1817F681CEC8A380F9824BD490E73 /* RDEPUBReaderServices.swift */; }; 5D03A5B9DC067875CFEC9D4EA7B059E8 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D05C7FABA8E6A777B3666515CC940B1 /* RDEPUBCFIPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC04C30BD0D2F6408EB5B8054F36B4F2 /* RDEPUBCFIPath.swift */; }; + 5D523DAF9BFA543904E32342D0EEFC0D /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */; }; 5D8D65121E87E419D8D2F23F8AF43673 /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 51CD1050B1BC09EA428919282AA2614D /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DE66A256BFD2ABBD1F05DB20AA70E2F /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F3DE5DDD4D63B6FB5FEADA0E292CB33 /* Vision.framework */; }; 5E90EBD876ED4E50AB890FB56C4BFA57 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5EEA291AB8D9C2BA9EE37E6D48F6E791 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8269FADB6807B8D2C67418206DA0BD1A /* RDEPUBReaderAssemblyCoordinator.swift */; }; - 5F05D1AA8F614A5618791FC426FE19BD /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87A0721FFCC0ECB01A9AA521BFBF7C2E /* RDEPUBTextBookCache.swift */; }; - 5F05E3821BE6D3624B2D49FB4D0D3408 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */; }; - 5F96698E997C02C0D5D45370CF3A60B0 /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E519FFEE6627E0BFC3063238F0B06EE6 /* RDEPUBCFISerializer.swift */; }; - 5FCF34234044EE4C69F80A3E81BE3F3C /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C408B7DA4233579306399A575A6A256F /* RDEPUBAssetRepository.swift */; }; + 5E9A7DB6BB90E0A62F1B7153EED46953 /* RDEPUBReaderTopToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86146C71353D766AED457B0B59F13E3 /* RDEPUBReaderTopToolView.swift */; }; + 5F48422418D87D8794EB690F577D9D14 /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B808EF921BB59C1A78691D36ECC666B /* RDEPUBParser+TOC.swift */; }; + 5F8F35C67B84F3985373B76354706C23 /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */; }; 60532A2E06CCFF814933D2FAE6793AE9 /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55265AB7222E2B20F9B5B320259186BC /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6068081647E41ACD790F48A7DC7E8D95 /* RDPDFReaderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD356A8B2995301BC6FA6F3E46C7BCDB /* RDPDFReaderViewController.swift */; }; - 61717DC84B5E784D4B5F2ECA1C8C8C65 /* RDEPUBCFIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519CEDEF94B66AD1E728B0932724F6EE /* RDEPUBCFIParser.swift */; }; + 6071184E8ECB9E5DE7187A363FAE8C62 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */; }; + 61953AE6CF7B054825AF861A30F0E0D1 /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AAEDE9AFDB7C593B3B29F05A8A9702 /* RDEPUBRuntimePageCount.swift */; }; 61BE3607EABD2657BC71AF8ACB1C25D4 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 625907CE0962E15B47B8D28F06FA7AF4 /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD673881894A19611CEF5FD16272DF07 /* RDEPUBFixedLayoutTemplate.swift */; }; - 6289FF67E541F32D2E29CFE631E65959 /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 185F2084811059CBD2C4B4D01E593D7B /* RDEPUBReaderController+TableOfContents.swift */; }; - 62AF96178739A70BCD82320CAD4510A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; - 62EDA1F4611ECDB2DFEA96CCBFBBCD4B /* RDEPUBWebView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10A3BD7FB2F7FA2FE1F72FA1FA44EC2 /* RDEPUBWebView+Configuration.swift */; }; - 63ED5C1F069073E63E3D9C0BDD57892B /* rangy-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 234124B59F632D05E97E8C71430EBF90 /* rangy-core.js */; }; - 6469499A34249BD18B4433EAB1A3DA38 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DCE046F4B55AE88A81C9E68400E93C /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 64960015EDE9A4BEAF04E7429E778401 /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */; }; - 64D323E53849CEC5DA02471030AF380E /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */; }; - 654D666DC057691343337DAD9A782B2D /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = D371DFD0FC419701C89C30AEAB5D78C0 /* RDEPUBBackgroundTrace.swift */; }; - 66000437E246337C7600141FB88AEA62 /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A326047296C6BB35D531C82E494545D /* RDEPUBTextContentView.swift */; }; + 629BBA5268F2ABA1AAB10761703FD219 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AACA176C2E9FDB2B4834B426AC6368 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 62F77E2F83B486840605A84A8BFC670E /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */; }; + 63FD358173BBF197BDB59F4B6696C3F0 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 658095BA15CB2808046C9EB08F06CCED /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEAE3FA90F67CCE6CFC228B56189BD20 /* RDEPUBJumpSession.swift */; }; 6634D568E49F5610242E1454680E5885 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD3CB33E5A4E915E5F4C09F4684FFF2 /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6691B82D9F522CDDEC01EB69E7492072 /* RDEPUBReaderController+RuntimeBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CE186B9F292E96FE1D65B18B4B7E607 /* RDEPUBReaderController+RuntimeBridge.swift */; }; - 6768C21F6AF86124B487D230B22A7841 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFF9A0CB4BCE0E33B65B03FF68AE577 /* RDEPUBCFIDOMPathBuilder.swift */; }; + 66B93253DE7FE999F8144CC939605F3A /* RDEPUBParser+Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D815A3BEB1A8F3959502A4B87558549C /* RDEPUBParser+Archive.swift */; }; + 6718A9F16B4A4A16F013239280B88878 /* RDPDFZoomablePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A01EEE1789F4E1A109C1B49D125E3F /* RDPDFZoomablePageView.swift */; }; 67AE2AC8D9B961D45871077774E11FD3 /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD1F6CDF944640D5F1E2A81A5494657 /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6944C0486AACC018A3594D2FF44B091C /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */; }; + 67B6056A1C2233857A796A920A5C94D0 /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FC439421769A5FC6884F5135ABAF08 /* RDEPUBFragmentMarkerInjector.swift */; }; + 682437E668DB3D6C9E6B72FEB41D5FBF /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */; }; + 683AFD98CF56982AB1C10BA80D822FA2 /* RDEPUBCFIDOMPathBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579B4F428B2ACA84D95B05569FE72F1A /* RDEPUBCFIDOMPathBuilder.swift */; }; + 684586D0E8F908278BC13DC47C845A4B /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69215D0CBD8EB9B7941A6E997428AB35 /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730579455F74FB03C7E8A4E50484823 /* RDEPUBReaderController+ExternalLinks.swift */; }; + 694BD20B3540D7F581D1A2A619B0CA30 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 69674FEA70899F07BE6098AAEC849978 /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */; }; - 69898B3BD87FCA85D66513041A4F0E34 /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F06C21F4D409CF92C76D4498B3134E8B /* RDEPUBReaderLocationCoordinator.swift */; }; - 69D8BA3ECD52020AE48E7E11DAFF09FB /* RDEpubReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F276E0C828D7E362E1AB740474DFD344 /* RDEpubReaderTapRegionHandler.swift */; }; - 6A64360D4047EC479DBA9C73800DD363 /* UIColor+RDEPUBHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E79DB6AFFD86EF0579829BED1166B24 /* UIColor+RDEPUBHex.swift */; }; - 6B257220D57F7FD3B39276C2B8129BB8 /* WeReadApi.js in Resources */ = {isa = PBXBuildFile; fileRef = A31ACDA197724BC1B7D9B42D3B1C7522 /* WeReadApi.js */; }; - 6B34BED0BE3E42DD6766994507411010 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */; }; - 6C15E26F78FA13288D563773D4B7CD76 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */; }; - 6CB2E1DC6A1BD620ACEAF9C2FCE8B627 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B79D3DB96F14BE31474079E9E88FB6A7 /* RDEPUBAttachmentTooltipOverlayView.swift */; }; - 6D102E7B164A5C60400EDF323B79F249 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6D20E3C4021A2398B5A425D16802B247 /* RDEPUBPaginationCacheCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1184A290DF3FEBC82B95EAC0B173D4F0 /* RDEPUBPaginationCacheCoordinator.swift */; }; - 6E2EAE35FB0816BC65587D2059C89FF5 /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F995C600287E46F60E33DA452E1C2F3 /* RDEPUBBookPageMap.swift */; }; - 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1E3C0347A8864AB95A590EC70FD5ABD /* MediaPlayer.framework */; }; - 6EF13EBC866CB374570EEC5B4568F533 /* RDEPUBReaderController+RenderSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACD3AD31D03AC7EBCBD762EBB73D0E59 /* RDEPUBReaderController+RenderSupport.swift */; }; - 6F2176AE1E59A9B752E9EC78A2B08860 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B856145AE64DF1C0DDC43555DE1BBB /* RDEPUBTextLayoutFrame.swift */; }; - 6F8C2314843AA543313C23C23EB5ADA5 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F02564FDDFA1E2D5D9C201B2F921E0 /* RDEPUBWebView+FixedLayout.swift */; }; + 6A053B2EC45ADD509497F2909AD4DBFD /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */; }; + 6A7B01BF9329C09B25AD50C51CB57400 /* RDEPUBReadingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422C9DACF0702754BAAA0A37E8A0D4F9 /* RDEPUBReadingSession.swift */; }; + 6C9845389C901217D168604D8F9E904E /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B15FA2EA6F88DB9AE0FB9356EC5B515C /* RDEPUBChapterSummaryDiskCache.swift */; }; + 6CCD41B742640A2FE9F2537378D53FE6 /* RDEPUBResourceURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3822FA364A35F16FFA9D2AAE31E22EF0 /* RDEPUBResourceURLSchemeHandler.swift */; }; + 6E3C87D8CA0283564A8FDCDCC44B2DC9 /* RDEPUBTextBookBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98A73A4E2FE3A04E24598C615F097708 /* RDEPUBTextBookBuilder.swift */; }; + 6E3D0FDD78ECC20F4B3697ED21D64224 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A71A099FDBC70A51AE773741C33A4AC /* MediaPlayer.framework */; }; + 6E735A47E8E6CD48E6AB808F6296686B /* RDEPUBFixedLayoutTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3BA5BC80827B5E54253367E574D3623 /* RDEPUBFixedLayoutTemplate.swift */; }; + 6E8D5163A139D27A576ECFFF0EE0BF47 /* RDEPUBSettingsFlipAutomation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CABC6F6EBE38588FD08D8CDF4EAF88F /* RDEPUBSettingsFlipAutomation.swift */; }; + 6F8DFEC4D6D635520E3156DEDB24B4FC /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A230A3524DED0923CEC303B4C54C833 /* RDEPUBMetadataParseCancellationController.swift */; }; 6FA0125F16DDEDAD341DB75DEB084F4B /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BB20F608D8D3B80F2688014A5F661FC /* DTHTMLWriter.m */; }; - 6FA4B5AA82186A23F43F7507F0AA745F /* RDEPUBChapterOffsetMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D2C6BAE2C63C338C7E9D27CB89170A /* RDEPUBChapterOffsetMap.swift */; }; - 6FE680367E784484A92D342F828FDCA9 /* RDEpubReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B277BAEE25D9D6A3C5EB9E55B603BAD5 /* RDEpubReaderView+ToolView.swift */; }; - 700D5DF3C3D2F6C25EA302DE5A75F4A1 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */; }; + 6FE5AF431C87317881376957C2CF69A9 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7027EF8D77D4082C1BB9B80FF61FCADC /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 709C702B15F40DB71C082DADBE993E26 /* RDPDFReaderHighlightOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B6A030E85C43B4814FE8C4894CB4B3 /* RDPDFReaderHighlightOverlayView.swift */; }; - 70F2CED517A0B6D90ABFE293D2173039 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D7D8A9E0E406B4B7DE16756C29EFC /* RDEPUBJavaScriptBridge.swift */; }; - 711F6E1D5B3013616AB1F2DCE379843B /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */; }; - 7288926B490A9528DF27875BD3CE771D /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */; }; - 7292E3D73AED0110586090700653CFCF /* RDEPUBChapterSummaryDiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303F1F1C7CAD8C3FFC1B0D2E49A7FA54 /* RDEPUBChapterSummaryDiskCache.swift */; }; - 72E1926B9480CE898BDF2084AECD30E4 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */; }; - 730342A37FC7D80FB266E2B5BD395070 /* RDPDFReaderDrawingLayersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6A7BC6810106F285EF55F02D28F25B6 /* RDPDFReaderDrawingLayersView.swift */; }; + 706B056B4481A496B6A0B743A5597C07 /* RDEPUBCFIMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD69D7E6008EE4ABAB3B5DC7AA868A15 /* RDEPUBCFIMap.swift */; }; + 7168E1F9C232A71118B3DA2720556BF4 /* RDPDFReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB723617A3D02BEBFBC7DD8E83D47E6 /* RDPDFReaderPagingController.swift */; }; + 72195EDF65B2BA88E55902F13FBDB5A4 /* RDEPUBChapterDisplayContentCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1308D476F85ACCA10D54AF2ED9B34BE /* RDEPUBChapterDisplayContentCache.swift */; }; + 726811A34F893A622DB858800E67775F /* RDEpubReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 44765E4CAD77632F37A650F5ABDCDAD5 /* RDEpubReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72C6CEBCA38D27D9135CD1A48699315B /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 730ACB99580C5982DC08D50FC5084D41 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = B646DEE91A4E62F132C54E702B8BDF18 /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 737EE166B6761466BA16725FFFA424C2 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5387758E4F1C4128BE4A1E8D68A9BD /* NSString+DTURLEncoding.m */; }; + 737152818FBA3502222A2E161A88A145 /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB04D144E7A35904D2906AC517EC870 /* NSURL+DTUnshorten.m */; }; + 739B2A424AACAA53C6F2A454C1147C51 /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC740435D649A1BF4303E48F85889C /* RDEPUBReaderController+LocationResolution.swift */; }; 7459A1656EDC29D685073B83561B783E /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = F8569A5FF03BA54C0F4080D3EE5539D5 /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75B60C234A83180A72287EF61D7661FF /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 760DB6B13D63ADD85CD56D1B38E1483F /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */; }; - 76B3E09A46D2939B431CC8102510A35A /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DBC82062B43BABA38B8DDCE7EF48841 /* RDEPUBReaderState.swift */; }; - 770F036B35ECA7FE47DBCB438B90FA87 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FD67CE75631597FF6EE0F345C77B9D /* ConstraintPriorityTarget.swift */; }; - 774E6F3D3205170E15EC719AA27E84C4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; - 77EA2DC848D5E5A10E3C4C6D997961A6 /* RDEPUBWebView+JavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845E8AF8104393679B9D9172D2A52D66 /* RDEPUBWebView+JavaScriptBridge.swift */; }; - 77FDBEC035F8E996829CB0445674B86E /* RDEPUBParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FBCD7326003D3600C31262B27025656 /* RDEPUBParser.swift */; }; + 74A86C4AB3ED0481830E8D1D5A2AB8B2 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E4731BA187C02CDA816054F1F2BE70D /* UIScreen+DTFoundation.m */; }; + 74E04D9FFB1157F3BB13694DAF9A1190 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; + 757A9887DFF1AE4E5CA26E82C4129CA3 /* RDEPUBReaderLocationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE3CFAC2C855F60E5A3BFC2F3861BA1C /* RDEPUBReaderLocationCoordinator.swift */; }; + 758FFAAF7DE564B5765C9F3BAEA2E202 /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F7EED7DF4D198244A6D06C00CC3F00 /* RDEPUBCoreTextPageFrameFactory.swift */; }; + 75963BFC9C773BEC204A40DBD9FCB60F /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = BDFD7D9A4BFFBB2603B10E3A432551B6 /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 762B5E129DB0C0E55E2B15F0DE33A3D0 /* RDEpubReaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64394008B6544FFDF5097612472AEE24 /* RDEpubReaderView.swift */; }; + 76FFC611487FEE9BB8BAC371752FDDE8 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4977ECD606F12A1293FCF0EF36934E5E /* RDEPUBChapterWarmupOrchestrator.swift */; }; + 78115EEA858DA63B6836E385A8D3D7EB /* RDEPUBTextPaginationSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1178601791D03F742CB349BE582223E2 /* RDEPUBTextPaginationSupport.swift */; }; 7821105EF320619993B3BF7FB90C7ADA /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 786BF7747848520712F08044A0D02D80 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */; }; + 786E03AE79A040289810E23F3650798A /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 926FC58A23312DD1B9B06F1C52993208 /* RDEPUBReaderViewportMonitor.swift */; }; 78D24D82D98D77E744FF73C9040618A8 /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */; }; - 78E053FA47E95A6C2B88FC7D28F33FA0 /* RDEPUBParser+Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4B2C2DAB04A274AA42EE8673031B4D /* RDEPUBParser+Package.swift */; }; - 79B6EE55793AA058E8E8CF558AC6E336 /* RDEPUBReaderController+ExternalLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E15CE4CE4C23075DE1010D6FCD65BF6 /* RDEPUBReaderController+ExternalLinks.swift */; }; + 78FF15D0FA9004E03E7ADE959EFFE565 /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B56088831DB283C0FCC800A365BA5B2 /* RDEPUBChapterRuntimeStore.swift */; }; + 792F6B7B1C3B9A3E43BD3041EB92C0EF /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767016761BF5B8D57595E288BC501BF7 /* RDEPUBAttachmentTooltipView.swift */; }; + 795AC979765E7A188006C6A44D1A5081 /* RDEPUBSelectionOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC5B30703AA81763AA7A3A2A5A1C9CA /* RDEPUBSelectionOverlayView.swift */; }; 7A48CDFB40202EFD09A2A9AB0EE0770D /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AD242618A854B4FF4C15CB36862C0D6 /* RDPDFReaderNavigationPanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C0462268B1CAB03FEDD2D04CD8CBC22 /* RDPDFReaderNavigationPanelViewController.swift */; }; - 7B7865D7DB409E1318EA37F256150355 /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = 92006F90F6EB856FCA69BDEF8608D40A /* wxread-replace.css */; }; - 7BB1F7E48AE3391415BE28627E578783 /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95BB29B9413EEF238033BA497FA4E551 /* Vision.framework */; }; - 7BC475257897595BA9124800D77B3DF1 /* RDEPUBParser+TOC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E532D28451A9FCF38848856ADEC9C59 /* RDEPUBParser+TOC.swift */; }; + 7B38C10310A465531DE6ADCAC241E681 /* RDEPUBMetadataParseWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCE92FD9E1B88BD2FE582C98A4AE8EC /* RDEPUBMetadataParseWorker.swift */; }; 7C05F56B62B15EFF344C5CDE4A52B8FB /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */; }; - 7C11FBF88BF8E6975649475023157266 /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC9E976C6DEB0AC4CB1FC2E1AC8C0F0 /* RDEPUBReaderController+ContentDelegates.swift */; }; - 7C9658EFE8821A7FE9724951BD959878 /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5DB4208378CCE8CB855A1C6DA724AD5 /* RDEPUBWebDecorationOverlayView.swift */; }; + 7CBF1FB34C28C44DF64801D6DEB4F783 /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B977B258211F447182E6FA36952EA842 /* RDEPUBImageViewerCoordinator.swift */; }; + 7D1BC4BFD9942BC180D8B2F8AE1C1952 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FE68DE46E8F50DDA44B5EF63ABC67A /* RDEPUBWebView+Reflowable.swift */; }; + 7D6F73E1161FF39B9A117AAEB0A962D9 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E16B563D3E20D4C0FB3C36350F2A330 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E47D5B14C16612DADE842BFAF3E6DF2 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */; }; + 7F155CDA8CE804815318D2E26C97EFA9 /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7F9CC306B17D409DB903DF850FEDA64C /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */; }; - 7FE0205BC0491191984F364702B2487D /* RDEPUBAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F75A2E00B511750B5DE5A7F28B7738 /* RDEPUBAnnotationEditorViewController.swift */; }; + 8003BE5D54D632D2DB96F39A97EA14BC /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF7C6BEE1CB54D2546C94E58BEE0EC6 /* RDEPUBViewportTypes.swift */; }; 8099F1E613A15275EF5FC59ED3C73579 /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 811430D44019ECFC12EB4817CCFD669D /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384FDFD5C48BA25500437AF93ED575C9 /* RDEPUBReaderBottomToolView.swift */; }; 811D7CBCD710AE45FF80A4B05BFE444C /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FCDFEE3DE4E8469962B9931E7775E8C /* UIFont+DTCoreText.m */; }; - 813FCE7200C4EDE80AB2778A78E3F97A /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */; }; - 8145763F6FDDF9986302BABBF0600710 /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF43112A9642930711240B85F895FBA4 /* RDEPUBPageMapReconciliationCoordinator.swift */; }; + 812272B922627EF9643A9CDBC9AA2EFB /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */; }; 814D0D63E5FD4AB7231E63064FE9EB5C /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = B616B1E339BA326837E6325F3F291E51 /* NSAttributedString+DTDebug.m */; }; - 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09CBEF1B079E6DB8C0D954127E9FE36B /* QuartzCore.framework */; }; + 817FA29F739BD7F8C5C1133184CF2746 /* RDEPUBBookPageMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E2296EBB237D8071B8280E81601AE2 /* RDEPUBBookPageMap.swift */; }; + 81905A7717925A17E6B98E934A75B8BA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50AE5BE674D885BED9B796FE8D97FAF8 /* QuartzCore.framework */; }; + 81E05D0BAEC9A1F7FC50DB906D83B4C0 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */; }; 82119A0DC4981CC2AF389C7C4CC08186 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E6203B41468A1B8FBBF9CEC0BF15751 /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8218AC044246907D694EB1E6E3111F0B /* ZIPFoundation-ZIPFoundation_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = CA4A114775B98CEA4A566C18123B145F /* ZIPFoundation-ZIPFoundation_Privacy */; }; + 83A114ACB998BF93F4D4E76EBB01D8B4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */; }; 83A4BC9FE4765C9B848DD4925D99F362 /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84219D0C61E91A7BB9A1FCA7C2830B8B /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84F2F5779FDDD73E46EFFB12FC9C2A2C /* RDEpubReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0663696AAC6407F79F316697D9A9A4 /* RDEpubReaderPageChildViewController.swift */; }; - 855D781893EB344322EF98DB08C996AB /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 857D183273B8CFCE83BCB7E548DF1734 /* RDPDFZoomablePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21EACCCA7F9D46E51E5814B94865E81A /* RDPDFZoomablePageView.swift */; }; - 87247223B203F712F11E08857C4D1A4C /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF845DBD3C48E620CC2304C2731C207 /* RDEPUBReaderController+AttachmentTooltip.swift */; }; - 8793467B170F43AAF2C69E88FEDCD235 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1A0D29FD3196A1FB2F83394AB355405 /* RDEPUBTextContentInteractionCoordinator.swift */; }; + 84C67060BE07E8581665985F83F31B02 /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */; }; + 84DF69BDF1ABA4C534918FECEB4FC190 /* RDEPUBReaderController+Trial.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D6E6B825D0F311663E6A9EFA5D2A7F /* RDEPUBReaderController+Trial.swift */; }; + 85DC4667579FA4FB8F06DE10D79C1BDB /* RDPDFReaderPanelPresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F57ADB5984DCA56EDF32CDB6B4A983DD /* RDPDFReaderPanelPresentation.swift */; }; + 872E2091594BCB3529FD1AD9FEEDD24F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; + 87A781E3D8E62CD7CEB6119E868AA323 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8805A1F85260DC0DFCFDE413253C02FF /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49F4B0888234A678C5FF3E5866E73021 /* RDEPUBCFIError.swift */; }; + 88739AD8ADFE0F01CCE72073E6B5EE29 /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B6EC13F25BB402502F307A53001F7D4 /* RDEPUBReaderLoadCoordinator.swift */; }; + 88834B5C7C7321AE147C125A772EBD22 /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D294019CB6322021FE87237FA56DA3 /* RDEPUBReaderTableOfContentsItem.swift */; }; + 89933A4738255CBB0CECFD0C4FCEC371 /* RDEPUBWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D752B202581818FDFBB68CDD7FA75213 /* RDEPUBWebView.swift */; }; + 89B166C4B24D15FAA70EB6B52E89B572 /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F3756D5F4282ABEF00423938EAF6DE2 /* RDEPUBTextPageDecorationView.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, ); }; }; + 8A6C2CB8AE2F41661DB70FE4262F7058 /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8AC90941E71199090BCED76DE89EFB60 /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C11AEF7E65FFDA653DFB142C22DEF4 /* DTAttributedTextView.m */; }; + 8ADB863F8874EB8B39500114164F30CF /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B405CE13E7D718A9340A82B52766AB2 /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BCE26241634E2C62ECB2DE34B76253F /* RDEpubReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A06F5728AFE470F80BEAA4D7D554F4F1 /* RDEpubReaderContentCell.swift */; }; - 8D516FCF5766F296EAE7C29AEF9B2AD1 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60EF713631DB78343848058532C0AE06 /* RDEPUBChapterWarmupOrchestrator.swift */; }; - 8D8693D24CC0B3A63CA2B625DA7527A6 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */; }; - 8DF3588F15FDA83A4D747C9A4BA60899 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */; }; + 8CE7E564E4F1F50CEC10E13DAE1DB56D /* RDEPUBDTCoreTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932004ABE6C86E9E2ED0030B979ED9FF /* RDEPUBDTCoreTextRenderer.swift */; }; + 8D3EB4BD6C7DFA99BF6D73893EA68A33 /* RDPDFReaderAnnotationListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6954E717DF2A17466B5D30D25C12666 /* RDPDFReaderAnnotationListViewController.swift */; }; + 8DB5CC8706F527BFB11525A6B73BB1B2 /* RDEPUBPageCountCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB4A8DFD2E0EE6D2285B69A5BEA0CBE /* RDEPUBPageCountCache.swift */; }; + 8E74EF124593A0E8C42F05F34F18DF7D /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53A99F5B071BEA755E7344615C5D4FD /* RDEPUBRuntimeChapter.swift */; }; 8E8726381CBCFB1EDB350183456D4EF7 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */; }; - 8EDEF14C9F974E3335CE4459D4CE8F4E /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */; }; - 8F3D639470BE37946D38E600ABCA1E79 /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7528E03B8934B146947FDF9147D7846 /* RDEPUBReaderPaginationCoordinator.swift */; }; - 9083BC70A6B97535B9B4BE10A9E5BE1E /* wxread-default.css in Resources */ = {isa = PBXBuildFile; fileRef = 6C66D6A919F91566D730A55A8FCE9B0A /* wxread-default.css */; }; - 9133D109B9976C5A85F6C38385973FE8 /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */; }; + 8EE605D9B102DD1A41A4718F9555F6C4 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */; }; + 8F44CA30A7274B9035B30B0CEC895B47 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */; }; + 90408C125712B1309AEA647C8804B199 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = F09DDC12AA1A0CD529F310E5CE0F99A1 /* RDEPUBCFIRecoveryEngine.swift */; }; + 90755EAACF679D579C32EB0775BEA867 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4757842563D7D3DAB82C8B693B313 /* ConstraintViewDSL.swift */; }; + 91DD2C713D72D75B59D2E5FD28733A8E /* String+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = A00A7D3C70A06A1D06B0EF2D25AA3DC8 /* String+RDEPUB.swift */; }; 91FDA47810CE5CE2C48AED9205AE89B5 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */; }; + 9262E9FD58A8DF61BA8D1828AC78ECE0 /* RDEpubReaderTapRegionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05A48723D29BFECCDE51DE4E1CABDD67 /* RDEpubReaderTapRegionHandler.swift */; }; 92C59F96D443525E8833676479FA60C5 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AEDBB0324469C4ECD8D10A6355A2A09 /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 92F000C7625CBA207F48EF95B9781D89 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */; }; + 9310666E5DB97AB7D7BA35A9FF70488E /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94F5846979DBC90E2B646E975F5ECBA8 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9531215E369DDA589C0D7C0550196B4F /* RDEpubReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BFC340D5D2F9CE3EB06CC05EDD71846 /* RDEpubReaderSpreadResolver.swift */; }; - 969BD0FD5E9EA50EB76BFB8C87029202 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C4EC50C6DC93761BB6C825CE1C4ECD /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 971A90F9097FB02335C9E799A55654DB /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 954296DCFAC0A89B6ED281D0B88ED2B9 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */; }; + 96724FD78DA6E4B95E96A4260EBC7C0F /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */; }; + 96AFFB9EB202E212B3EED5A173C4E9E3 /* RDEPUBCFISerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D984CA4AF47D4219E0FB6506CD7D2C27 /* RDEPUBCFISerializer.swift */; }; + 96B287B7613D827030A3444C1F1016A3 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */; }; + 984F604C1818609B7836604F85ADEEDE /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.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, ); }; }; + 987AC28BE0204F311650F5193918CFA0 /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98A025951F12B433AD115CD3CEDDDBD8 /* RDEPUBNavigatorLayoutContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89DEA6EF4DB86448B595CCB2ACC06C97 /* RDEPUBNavigatorLayoutContext.swift */; }; + 98CC3155061E818ECC5294ADD7BD39A9 /* wxread-replace.css in Resources */ = {isa = PBXBuildFile; fileRef = C4701A7F7E553E7824903F43562AFC19 /* wxread-replace.css */; }; 9917E9B804CD33AF3BE2A992A3510C97 /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = 175FF6D3C38E463368C8B7AE1AC4E41F /* NSNumber+RomanNumerals.m */; }; 992B7C8C824B5EA190EF1DB096064DB7 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 994AD889AE134FA09DFD941E960D195D /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */; }; - 99896956141FFB3007508EB4D4074A1C /* RDEPUBNoteDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011C2BAB67F18C829B4038BED71596C9 /* RDEPUBNoteDetector.swift */; }; - 9992C8D1F6A3078A4FC0C31B2CFFF5AC /* RDEPUBJumpSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9863B2725D2F1BB2A0DB1E8D6D5D5D7F /* RDEPUBJumpSession.swift */; }; - 999A87A2813577216B3082C27972A3B1 /* RDEPUBReaderChapterListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAFCF35759F6130F534D4138AECDBC8E /* RDEPUBReaderChapterListController.swift */; }; - 99C6A65D237A3EE8C68106ED485EF808 /* RDEPUBReaderTableOfContentsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983B628249A36DFF4CF081B8DF100553 /* RDEPUBReaderTableOfContentsItem.swift */; }; - 99E5012CC97FB2F6192E96CFED83C9E0 /* RDEPUBSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BD4BD1413A94A8B342ED81738AEA289 /* RDEPUBSearchEngine.swift */; }; + 99602A29E251C50BCC2EFD40D03716C8 /* RDEPUBTextAnnotationOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FF34F8FF314B2B52DA562E7160E9AFD /* RDEPUBTextAnnotationOverlay.swift */; }; + 9A16F390AAAAC68FD7859C578B4054CB /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */; }; + 9AFFCA108C94C7B57BA13D014B19659B /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9B199D71D2F48B2055A7FDF9BD7051CC /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = 4351507ACB1193D9EA3EDD3DFDDA1AD2 /* NSString+CSS.m */; }; - 9B23C738C7E6F86B0F1F7CB233C11836 /* RDEPUBReaderViewportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17F534EF5E574026DACC1C5902876F9E /* RDEPUBReaderViewportMonitor.swift */; }; + 9BCC983EA5231C9D263FA645D58D0CC4 /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */; }; 9BD146F72B29C703798001F138B069C2 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB99CF9B07AE8928ACEE9F5A107809D /* NSCoder+DTCompatibility.m */; }; - 9C9BEA9FA0EC8CCC68C9156484F3F767 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */; }; + 9C05C97A74E7281F25F2BB0245A9D715 /* RDEPUBPageBreakPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 359E871CA4A99767E938A99718B48F88 /* RDEPUBPageBreakPolicy.swift */; }; + 9CE219EB6F092600CA33E15CE41CC38E /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */; }; + 9CF3ED83D568246E7BCEA2A2C4D38473 /* RDEPUBWebDecorationOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AAE327FF1505A989454CFB6BE8D5056 /* RDEPUBWebDecorationOverlayView.swift */; }; + 9D2756A6EA62DC05464345D73FAD772F /* RDPDFReaderPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4516C344651B4BAB7D3B3676952563AC /* RDPDFReaderPageView.swift */; }; + 9D8DF57114A6CB59686EC2A5EF82720A /* RDEpubReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3CF1BCEE24E319CEA749FF14F5C9D7E /* RDEpubReaderFlowLayout.swift */; }; 9DE04C83A68C7512C0A860FFF5CEC113 /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B8CEFAE5E33709E3C9AABF89FFF29BC /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9E4AB71DE8B3E7218B53B2C8EF6B843A /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */; }; - 9E81E50EC667B51B5DB673C4673A1C6A /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9846B4C57BA2860663A488DC70A390D /* RDEPUBCFIUtilities.swift */; }; - 9F2E29FBAF2D78C3FA705FA4DFF200E6 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1870B77AD9A6F26AB3180BB4CE2A8BCC /* ConstraintPriority.swift */; }; - 9F5E4F6DE654A1BA5D0387F79F010704 /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74F0FEF736604ACC8C2EA61D24BAAAAE /* RDEPUBStyleCompatibilityModels.swift */; }; - A02DC728B13F2AB73C3BCA1DBFC731E2 /* rangy-serializer.js in Resources */ = {isa = PBXBuildFile; fileRef = A1605040E2F0212F9D5A73DCF69DA457 /* rangy-serializer.js */; }; - A060FF958E35AAA03B03681EFACB3307 /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */; }; + 9E7B8B9F265A36A8058BE39018E9E339 /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7B6B7B55D1E706B41644DDA956D2CA /* RDEPUBSearchModels.swift */; }; + 9EAEDB014CE2E937A47B6BB37B59743A /* RDEPUBReaderController+PublicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9D544D3DF2CDAE5B6EECFF892BD9F5 /* RDEPUBReaderController+PublicAPI.swift */; }; + A06D0DF52FF6AE1F6C4482BBABD73C1F /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92AA4E9E3B871C30A1C7BF9141CD9770 /* RDEPUBReaderConfiguration.swift */; }; + A097F26C01A8A85039E5E2D19EABF24D /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D597E864BC3B6215B502FC3B05C13364 /* RDEPUBNotePopupCoordinator.swift */; }; + A0AD6102848CEFDC5FB444E65B956F6E /* RDEPUBChapterDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF56076797358B800EE1C35C5FB6360B /* RDEPUBChapterDataCache.swift */; }; A132A0C9EB13B65FB886B11AA2E6304C /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9D3ED5DA816A72982CEF0FD18986D1 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A26BB16FCB0E5ED669FB9465BC88713D /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A184446D12B20A2A45844257D9E09E1E /* RDEpubReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C764F1B6E5567DB91D1ABE809D25AB99 /* RDEpubReaderPageChildViewController.swift */; }; + A1D1E55062DC72F0193C86A29A02234D /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 16023686DC389E6755BC79366433C45B /* DTVersion.m */; }; + A2582EBC9C4BF15AB10F62F5C2F70654 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3124E174D81A28717086F17445BED5BB /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A27AB28EB7B1A95485537F7493161E24 /* RDEPUBDecryptingImageAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = E02FC3DBD9707CA1A2C087E36DEBDFF8 /* RDEPUBDecryptingImageAttachment.swift */; }; A2CA9C27EB2B77637A12723F8CFE7AAB /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 84BDFD9872BDDC8D8E292A987C833142 /* NSString+HTML.m */; }; A30D5C1E413A3D319A83D3410A8A549F /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */; }; - A3D5637DCBDA368A6EC35456117519CF /* RDPDFReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C7E6E05CB6C2547550C0AA979367DC6B /* RDPDFReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A4B198E2345E8A25E20480C86A0AFFE2 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */; }; - A5C84793439F72FF37B5D796B9302187 /* RDEPUBWebView+Reflowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16DF4A3EFED9261873EAA9FA0459AE52 /* RDEPUBWebView+Reflowable.swift */; }; + A3E97A57562EF0233C951964D26DBBCA /* RDEPUBAssetRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F37E867DE563EFD505DBB674F4FDDF6 /* RDEPUBAssetRepository.swift */; }; + A4E1CAF494796BA32FFC884698C85729 /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */; }; + A4E62D819CC311F109A2672A40906667 /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197D0C3E827B624F40FB510F3BD8A906 /* RDEPUBReaderSearchBarView.swift */; }; + A4E98600889A26605AFDBEFEF99763C8 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = EF82EDCB0C8172FAF3847EAAD873E096 /* NSURL+DTComparing.m */; }; + A53382EEF80D25E2E84B30BDF87D32CA /* RDEPUBReaderController+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B1B27CD14A9E7FB6895C4F6F2E70179 /* RDEPUBReaderController+DataSource.swift */; }; + A5D15AF6A625AAEE7A68E724600DE2EE /* RDEPUBTextBookCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC7D701A0361A9C2BB93906A4A7DFDD /* RDEPUBTextBookCache.swift */; }; A72E9F983E5BBFA7485EFB482B80E89E /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7315C7C4E7FC712CDCEEC5DD0A436DC /* RDPDFReaderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8BD01B9C58678FECA98B5CABFE43AF0 /* RDPDFReaderContainerView.swift */; }; - A74F0F08A744AF77B84A0481E0C1AEF7 /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = D245D04D70A4D36DC86741D0833AA95A /* NSMutableArray+DTMoving.m */; }; - A7CB934B6D9ECD5DD836CBDE2C76138C /* RDEpubReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBA7CE21BCB1D54C01820049786ADCD /* RDEpubReaderViewProtocols.swift */; }; + A7A84555DC1EFB6AA2A1CD92EF8E05EB /* RDEpubReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F8654BEEBD1B51A4079D96899C140D /* RDEpubReaderView+ToolView.swift */; }; A7D665BBDADBE3D64023FF52E218FCFA /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */; }; - A9CEF959019A1A2C2F7CE1300AD8DA99 /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D44149271FD4631FF7616F01343BD79A /* RDEPUBPaginationModels.swift */; }; AA3722CC8B4992EDA8A9F5E9116835B7 /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 031C87137668EBD722F2FAB7A5826060 /* DTCoreText-dummy.m */; }; - ABC2245EAE7966C55ED85B5C8D580153 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */; }; + AAE4A96FB3FBC30E2F73F040437B8380 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */; }; + AB15CDEC956F4EA7131C036C892962B6 /* RDEpubReaderSpreadResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53BD308DABD26A8A8B9CC272486D6EB0 /* RDEpubReaderSpreadResolver.swift */; }; + AB3268891858D675485E80816DFA75C1 /* RDEPUBTextSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089966C3069A2468CA1E889EB69E74A7 /* RDEPUBTextSearchEngine.swift */; }; + ABD0544F7103859B11D1DE040E2D516C /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FBE51D9C334D6C796944A37A36FA0B /* RDEPUBChapterLoader.swift */; }; + ABF58E16D763E200F4199DCC20ADC6DF /* RDEPUBReaderSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CE5B910E4B90BDD78B2747C7184C745 /* RDEPUBReaderSettings.swift */; }; + AC493BA061950FEE835F5305A5C0EFED /* RDEpubReaderViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5088A729186A207F65C88E148F0392F4 /* RDEpubReaderViewProtocols.swift */; }; AC7000465258822B466855B12F1F97A3 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD06E1BAAC13692376BEDAFEB1F94557 /* RDEPUBChapterDisplayContentCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B372C329258D1C49F5BF44F81AB0E237 /* RDEPUBChapterDisplayContentCache.swift */; }; - ADDEFD3EAF600CBD6E033E73917C8B75 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */; }; - AF0B5F178E8A2C2AF944B6DEF7C6E79F /* RDPDFReaderPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B35BFEDF59569A794D28F4E41D1878C /* RDPDFReaderPageView.swift */; }; - AF7391A8E39D9D7119A6BB0B53A6A713 /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D345572B8F40A0410861049C321487 /* RDEPUBResourceResolver.swift */; }; + AD1E9FB8A3B05645F8805FB26F814DF4 /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ADB2BD72FA5B1DA4D59440FFC04DE2C /* RDEPUBStyleSheetComposer.swift */; }; + AD5854B028EAE75971250523F24E7AC0 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = B3F4461DF9B7620283F97023A78C08D8 /* epub-bridge.js */; }; + AF16ED52BCD49CCD7B7D19E5CC19F617 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */; }; AF7A1DC953992A149CB0815C90769529 /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B01B3EB64C729474B684613828AD383C /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D9D817F1F806BC50BB65FC80C7D47F /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B12DCCFD850AA833E552217D84A57740 /* RDEPUBReaderHighlightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86172F915BDAB5EC68B8CB7BF50084E3 /* RDEPUBReaderHighlightsViewController.swift */; }; - B197A8F1AD9DFAB142A54A4D1B83CACF /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508E7B0E537815AE336FE286AF553F1F /* RDEPUBReaderEnvironment.swift */; }; - B1A0E1F244DCC9E5D49208B01EB756C6 /* RDPDFReaderImageTextRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908BEA0B59C6233AA09BE39365CFC82E /* RDPDFReaderImageTextRecognizer.swift */; }; + B02F375B16AD7C7C33D916BC92AA6DD8 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */; }; + B1209E507F02612272E977F7388C1CA6 /* RDEpubReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D4ABEB07AC55D55BE9BCECAA2B25D794 /* RDEpubReaderView-dummy.m */; }; + B24F819D98E4DF194465D63CC6C30F26 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA7955406639DE39E1FD953D882301E /* NSURL+DTAppLinks.m */; }; B24FAD34A7915FC4B90FE9038E814FF2 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E757F9EEC3FE914CD8CFDFF7173A5D6E /* DTLazyImageView.m */; }; - B38E537DAE3BBAC3E2C426EFAEAEFF07 /* RDPDFReaderKitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B505AC85F109801EC708BAC8F6374F /* RDPDFReaderKitView.swift */; }; - B3AA0EC896AC9F7B8C82BE9423DF9129 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7784A11A6685C9FE1ED5BF258DB8930E /* RDEPUBParser+Resources.swift */; }; - B4345692E8FDDE9E39D091497A1C2858 /* RDPDFReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 691EBEEADC8CDB5F06340114374ED848 /* RDPDFReaderView+ToolView.swift */; }; - B4BA6C70CACE2D020D4618484CF71EDA /* RDEpubReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F1D7684E9910C3A3D916BD2B58BE27 /* RDEpubReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5315FE923C0DCADF321864AB4B3DFDC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; - B5A7E8836997AFD32BC70B7CD7C16483 /* RDEPUBSettingsFlipAutomation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EA7017C03F5D375D7A04B7DF7B3FC64 /* RDEPUBSettingsFlipAutomation.swift */; }; - B5BC3DC219D397FF38BDE0F50899A901 /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 628C845621A1AB074955F2238E35EE09 /* RDEPUBDarkImageAdjuster.swift */; }; - B6B65B6F9C01891F3456978A1AEE39FF /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 7440BEAF1F0CA8CE70C073FFEAF637F5 /* DTExtendedFileAttributes.m */; }; - B6B6E1CF260CB973934D7E3ACE76AE95 /* RDEPUBWebViewDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0AF4C7A330235BBF8B62F08FBF3EC92 /* RDEPUBWebViewDebug.swift */; }; - B745D0F2F3582E9657748004043FBF2E /* RDEPUBReaderController+Orientation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C69D03B5519293DC977F7E46AA9BFE /* RDEPUBReaderController+Orientation.swift */; }; + B2905E16F0C9B8659C065FCFD4F8C04E /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */; }; + B388AF7C09885B72DF0DE4327A3B149B /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */; }; + B4349104AAB928C77DA7856B8078D9A6 /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6A2D1BF70F1C6B7354AC88C3DC52656 /* RDEPUBChapterLocation.swift */; }; + B56C0BC177945BD67D43DA9784709273 /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5943DD019F4F6E9E8608E88D2420888C /* RDEPUBTextBookModels.swift */; }; + B62CB41227F697B35B476BF17EDFE501 /* RDEPUBCFICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BEE692A99D3F6541F6A273A49A865D /* RDEPUBCFICompatibility.swift */; }; + B647D72A5A14CFD2C63C9E33B8A83B62 /* RDEPUBSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BEBF652FA65A9AB3D558E1A2A511051 /* RDEPUBSelectionState.swift */; }; + B6870FF977C2C853A5448FEBCB5023EA /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */; }; + B71CA96B831364187FC460130EB25C8A /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51399FB07DB540E97ED404FAB685C31 /* RDEPUBPresentationRuntime.swift */; }; B7BDD79FC06A1E4E0E17592860844108 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B805174632AE0738FA6F898D1391AD39 /* RDEPUBChapterRuntimeStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7587FF81578DE5EC06D53194DE8B9F2 /* RDEPUBChapterRuntimeStore.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 */; }; - B8DA6BEB3EE5A9F8AADCF0845304FC3A /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8F65BDCD7DEE6A6FF858DC09F0B868B /* RDPDFReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CE98FF96BF7DCEE1E359C122AAA69CF /* RDPDFReaderTheme.swift */; }; + B8FA5ED7AFE0CBE95DC65A57AAA0273F /* RDEPUBCSSCompatibilityLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0594E39D9568D488378ADCB812715321 /* RDEPUBCSSCompatibilityLayer.swift */; }; + B9271BC5E425AD8ADD4C6D561B97D4C1 /* RDEPUBReaderController+TableOfContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9D1B125AA5600F835F9AB456100B5BC /* RDEPUBReaderController+TableOfContents.swift */; }; B94CD41727DFCA8791EED8FB2CA397DD /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA2343D26FB0584E31BCF54CA12E7401 /* RDEPUBChapterPageCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 734F2118247AB68A8A965BA63E8E7D6A /* RDEPUBChapterPageCounter.swift */; }; - BA74FEDF8386A784161857DE1FA11BDE /* RDEPUBReaderController+LocationResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3650434CBDCDDC9405E62BDFBCEBB7 /* RDEPUBReaderController+LocationResolution.swift */; }; - BAA44C6AE8DFF084D548D41646A40024 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */; }; - BACBBC2192FF32EFCCD860AB67BE755E /* RDEPUBCoreTextPageFrameFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FC121B9BD52BFEFB088D015A7D47845 /* RDEPUBCoreTextPageFrameFactory.swift */; }; - BADA723F886FFEF278AAB43C659EC970 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAEBBDF1F3DC59E4A4FE6BB87DFAB5C1 /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A8B32341BD833856874E046C97EE36 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB362814D44E7E75C42478226B057023 /* RDEPUBAttachmentTooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42FC8DF7301C6E48B74EE20C58A049EB /* RDEPUBAttachmentTooltipView.swift */; }; - BBFB55CDBD678B777FD9A4F75DF5A61B /* RDEPUBDecryptingImageAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B69D525EF04515B4D7AC71279C59645 /* RDEPUBDecryptingImageAttachment.swift */; }; - BC813ED27C5D155CD65C95DF2DD6635B /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7712769A1FFD45BC054467C55547248F /* RDEPUBImageViewController.swift */; }; + B96DE08EB4CDFD7CE0250A3927A31B8F /* RDEPUBHTMLNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54B4C37E4A452238A2B3D65A483FF624 /* RDEPUBHTMLNormalizer.swift */; }; + B99880D5CC636DA9EA158C79AD0454A1 /* RDEPUBCFIUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244A0250D275B067EFA790D022396B24 /* RDEPUBCFIUtilities.swift */; }; + BC4AE1B68D8554F1A9C71FEFC4FBCB31 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */; }; + BCF514662DC610C45F4EBB4CDD4DB446 /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296DC86D94CA633F2A0697072F76F90D /* RDEPUBTextSelectionController.swift */; }; + BD2F4AE3043328378219197D0CE5F804 /* RDPDFReaderView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B1F0955DB654E4B3265622218E9CF71A /* RDPDFReaderView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD99B69B1FBE455C5C1D97E400CBA08A /* RDPDFReaderDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF6A065216B0DB4C460DB8E30D43AB /* RDPDFReaderDebugViewController.swift */; }; BE12CD112F82AD9050D7FB29395F27F9 /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 45CF43387529121AEA90666FE86EE96A /* DTVideoTextAttachment.m */; }; - BE9C6D3BC7C8A3F373DC328B8359D867 /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */; }; - BEDB446C8D343B72E2505BC47B82E81E /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0F0E8E0EAF84CAF398E3F459CBEC8 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; - BF4CEB7375E7DB1212DF9A0EEB4B21BE /* RDEPUBFragmentMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719923921751E2AFF9C080A34C67663F /* RDEPUBFragmentMarkerInjector.swift */; }; - BFC09117F478724BCEDDD625D7FDC370 /* Archive+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8481A9468E2620C3170C28BC17691E /* Archive+Deprecated.swift */; }; - C0998111AEB004F0029967869EEAD5C6 /* RDEPUBTextBookModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3AE1FFC202446FD757A48580E35F97F /* RDEPUBTextBookModels.swift */; }; - C0BD6A2A0BFA9552C94844FE493CC4E4 /* RDPDFReaderImageTextLayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01C5EEBCD3070B6D686C7E0074D071FE /* RDPDFReaderImageTextLayerView.swift */; }; - C148E238ECD332527E0546B6B5DEF528 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C183EB4A50A1DD9C8868EC90D0402674 /* RDEPUBChapterLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 548FE1785FF283BDEB6346F49C5A2F88 /* RDEPUBChapterLoader.swift */; }; - C36631B1DB4935D5C41182D974CBAD92 /* RDEPUBReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC6FC55B88E3F0D723DF388867829698 /* RDEPUBReaderTheme.swift */; }; - C3D4C353A0EFC89081D53B3A308E25A3 /* RDEPUBReaderSearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE58D216D4E69D486F0AB4AC5F71518A /* RDEPUBReaderSearchBarView.swift */; }; + BE2B7071A08224DF4550AB00049D73F2 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D241F2043503DC1C01B6FBDE8C08DD1B /* RDEPUBReaderAssemblyCoordinator.swift */; }; + BF0BDBA82FA333DA21F02074DF249459 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */; }; + BF0E8909D0E84A8E6623208CB97C9CC4 /* RDEPUBReaderChromeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60BD829978DA910F152D499A1BA7E04B /* RDEPUBReaderChromeCoordinator.swift */; }; + C0214EF0F9B92329063CB89AD0B5880F /* RDEPUBImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E616B199145721C28A90BE0D21C98B /* RDEPUBImageViewController.swift */; }; + C0FA604044813AF3977DB6E38D086EAE /* RDEPUBTextContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06D8D0804A9C685D066179823080D2E5 /* RDEPUBTextContentView.swift */; }; + C21EA46F0CB466BE3330A769D4E02E45 /* RDEPUBReaderState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC13BF0AF43ECCBA7F956B059633C358 /* RDEPUBReaderState.swift */; }; + C2A74F19B4F40EBF0E94256A632E8EFD /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = D436946B4DC3D4F40E7B50F9F3A77DF6 /* RDEPUBTextBuildPipelineInterfaces.swift */; }; C3FFF1454F3F3A1AA592268E7C43AEEA /* Pods-ReadViewDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C567A1936DB1927CB23B030E22A0D1D7 /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = 1A86D6EC76230DDBDA6E2450454F9C94 /* wxread-replace-latin.css */; }; - C59BAE874E386CF6912967ED864F9D50 /* RDEPUBCFIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E06CC927BADF654D292DC523F0DFDB52 /* RDEPUBCFIError.swift */; }; - C5C667746CCE2E7A0902C43ADF4D2F9A /* RDEPUBModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB84ABBEE467BC984D1E9E3F43B5119F /* RDEPUBModels.swift */; }; + C4048BBBD3ED54C527E258693E0E6895 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; + C52ACA043C901B7925AD97DD33CA7D8F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; + C52C6F329DFC3DFAD3C819385035E5BF /* RDPDFReaderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EDE0B4A3EB73E17912FEC91AECADBD6 /* RDPDFReaderContainerView.swift */; }; C5EE8E7373FBD24E66C678356393D871 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */; }; - C613249A85C77E9C43DCA47A9AE945D8 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */; }; - C642545C1CE663191B5637C00117A61F /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A44E8A934F0559A9A3F1BE1BB1843AA /* RDEPUBParser+ReadingProfile.swift */; }; - C6A707F9902F28B25EFB1758779D2E6E /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85D568D485492AE28BE9D94F8380CD54 /* CoreImage.framework */; }; C6B65C0EA759DF426FBBBB113BA3C3E8 /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF0985CE02F3B586A1C5DA6503103C3 /* DTBreakHTMLElement.m */; }; - C6EEDBAF5F7BBDA5043DD092207B23B2 /* RDEPUBViewportTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5974AECFECE8D60F316936780D22DD9 /* RDEPUBViewportTypes.swift */; }; + C6E5F70AFE3C2B3D74A6555B3F96FC7B /* RDEpubReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C877F262E89255B3135DE1E935D3246 /* RDEpubReaderView+CollectionView.swift */; }; C72CE4B974DFAE2C3037D425EB559314 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C858028A3D05786E8D07A69FFC538DA6 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD77848C77F7674193EDA5C1F18DE6A /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C8F753B56A6C4D2A938B6EA68CF522F8 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E247027425CC2ADC73F05F25DC0B857 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C93FDFB56432C0DBE56701FB01995625 /* RDEPUBReaderEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8CD636112E10AA865F164AA3D168C00 /* RDEPUBReaderEnvironment.swift */; }; C9DD05EF2D27FFEBFA7BF6F437168501 /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A7EDC6B8243A9B7E465C24C3E3032923 /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA36ADF90F5750756F5A017162BA0DC4 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 16023686DC389E6755BC79366433C45B /* DTVersion.m */; }; - CA3E2A9DD453A5BAB49CE247E3B2CB0A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */; }; - CA83BBE2CF230A0A6823264D51C21710 /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAAE0DCD0AB85A5814CA1A5057627AC1 /* RDEPUBImageViewerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E05A32054F050060822F49BB8707B792 /* RDEPUBImageViewerCoordinator.swift */; }; - CABB94F792C73EAD4440D122DB442578 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */; }; - CAD61F1F189C7B64F2C96222D48957BF /* RDEPUBCFIGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD04D91292084F30072716D85979DC49 /* RDEPUBCFIGenerator.swift */; }; - CB924D66C628DC58D5EB0ECA173AFD06 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */; }; - CBEF5FF22C882C786456610977CEE989 /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A6759BC4A2F6455311B40FC733C962 /* RDEPUBTypesettingPipeline.swift */; }; - CC7F3C8BFEE5A8178A2369DF5AE99476 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; - CC822208F3392EB10A21409435862AD5 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */; }; + CB5890C41FEAB82999C9A4DFFC425A5D /* RDEPUBReaderBottomToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD91BDB14FD6C89E095E237DC0F37A7 /* RDEPUBReaderBottomToolView.swift */; }; + CC2EF0E7EBB0C4F7D7F2B360DF7FE9B8 /* RDEpubReaderPreloadController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101E8704978C7417FCD99D18764F42B6 /* RDEpubReaderPreloadController.swift */; }; + CC3DE77B844BEE95F78D0769BC4EBAF9 /* RDEPUBNoteModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE2A00DBD5096609160A1EBB511C0CF0 /* RDEPUBNoteModels.swift */; }; CC8B8F3D758E98B51F69EDFAA69663A4 /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4600C0ADBC3B1B542099C68D747659 /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CED3CE21E1645DBA2A501CA1C83E9BE1 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */; }; - CF087101A07C895255A6BB1E3977B671 /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF1C1C1594E975B1A5D725BD2232ED6C /* RDPDFReaderView+Paging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A30F39D52BFC67B9904B0F6954CCEFE /* RDPDFReaderView+Paging.swift */; }; + CCBDC2E4ABEBFB94C69CD31C1062F52B /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD0642736D05FF86A5AAEB0A8298257E /* wxread-replace-latin.css in Resources */ = {isa = PBXBuildFile; fileRef = BE9EC25AFCAE91B4EA5A1DDD5FE564DD /* wxread-replace-latin.css */; }; + CD7BE6FF1D68DD425C945B2CE0247C5A /* Date+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */; }; + CF4B683FEB083614C57097E02204930B /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BECF37BB61D57665E8B2439D3B326503 /* RDEPUBTextPageRenderView.swift */; }; + CF713B6B05119D72EF91307795B1AEDC /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761870FC405B984D09A304261C3CB25 /* DTCoreGraphicsUtils.m */; }; + CF77CBF45ED2550761E077F815485CC8 /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F533FF48C81C0B1684CA895D72C646F /* RDEPUBBackgroundCoverageStore.swift */; }; CFC49467FE75BFABC22A1CE2FFA26570 /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */; }; - D006B328DEC4A4731AE357F2A4527992 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */; }; - D06769F23D4D524A389DC6B5ADA080BA /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D14DC59DB6C8B06561B120362A6C13C1 /* RDEPUBCFIRecoveryEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A64BC9567033C874297B5D167793952A /* RDEPUBCFIRecoveryEngine.swift */; }; + D0210B7499AF32A36B60CE3505882F5A /* RDPDFReaderView+ToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671C2212E0B20B47CA0A56D7138411B1 /* RDPDFReaderView+ToolView.swift */; }; + D09EAE862E8BA3A7A5EC8028EC30DEB9 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDC3A2D20818C31909CC4C3F4BB4F96 /* Typealiases.swift */; }; + D0CEC4798C2DA9CDC93E3CC59BD03B79 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */; }; + D189922DBB83C25BC8E8F59FF51BAF34 /* RDEPUBJavaScriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47856474DDE696BF61255DF73D2D799D /* RDEPUBJavaScriptBridge.swift */; }; D1A93B2D7F1B312755C48790338D7712 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FB8EF1A1E911A5BA351013BE2BDDA3 /* DTIframeTextAttachment.m */; }; - D1D49D20EF5F17AB4DD78227948AE6AE /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022E4755B34BE3FCD1475BB40C6FD7EB /* Entry.swift */; }; - D2EFA41E48C5E15F3E7ECF1B4D8045E7 /* RDEpubReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4586D4C4B438CBC9C10C1F34CB6D2DF2 /* RDEpubReaderPagingController.swift */; }; - D37D0606E2087689C082AC7032547B6C /* RDPDFReaderNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8AA7E0D66A87D65E78484C2A848ADF4 /* RDPDFReaderNavigationView.swift */; }; - D39C7A23B07B8C9406EF8113D16AEC09 /* RDEPUBStyleSheetComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58591A875354C8532DFF2907CB056395 /* RDEPUBStyleSheetComposer.swift */; }; - D3CC13D95C94E081B5492C6E9A2A6455 /* RDEPUBFontNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C69F2BA771FBC9C0271A7B09439242D /* RDEPUBFontNormalizer.swift */; }; + D2419445E59791BD0A58247BEC366E9F /* RDEPUBTextPaginationInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508BA727504170CFC09B46B584079A86 /* RDEPUBTextPaginationInterfaces.swift */; }; + D2C6FE518520667288530D6983D2BE91 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0AC91254785C4B0B73D391B603ADE47 /* ImageIO.framework */; }; + D3CF74B30A5AB5E67F433079376E830C /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */; }; + D43F7557B00A156FE247DBE8E26E51B3 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02887009BADAD18D4A90F5A114DCE512 /* ConstraintDirectionalInsetTarget.swift */; }; + D441C9BCE1EDEDF0C962A695D33E1C04 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71BC62246AFEBD517D3175813789310 /* Debugging.swift */; }; + D484255D55B2E6965411F26256BB39A4 /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C223BB14280E813122F7F44DDD64F3 /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D521D48B2138B46063941457702CCFBF /* RDEPUBTextPositionConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916630DBF02CC978ECEBBFD77F10FB65 /* RDEPUBTextPositionConverter.swift */; }; D526E03C098DA6CF8F01C1BC126C9BBA /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4200F053D7EE79B56B3A430E865A9051 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5443E226EA5E8D4D1A13276FB752A28 /* RDEPUBSearchModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45294A3F8158EC3C68ECF3D9594C7EE /* RDEPUBSearchModels.swift */; }; - D580626321B6AE41153627CE9CA41584 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5EBE8972B4538BAA29E1BA825F2626D /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FE699719E4C619A2AE868EA35DBCE64E /* DTFoundationConstants.m */; }; - D797A6DF3DFA1F3951EECF63EF7FB830 /* RDEPUBReaderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2A0D875AEA9AB8ACE30139D100E394 /* RDEPUBReaderConfiguration.swift */; }; - D7CC6B1036176C86E740636FD91D78A3 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F19ED99ABDCF88F81F05E71BECAD550E /* ImageIO.framework */; }; - D7DB1C22A73B7D0018BE0959630C3829 /* RDEPUBChapterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E18E6E8D39404427745CE696526DE777 /* RDEPUBChapterData.swift */; }; + D5635DF62FAB378BEF97BBF8F8809DF5 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA0602B933CD0C98C4AEEE449A8D048 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D570C4EE6360476832BEE5BD97163074 /* RDEPUBDarkImageAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B83042E21707CE00778B566E8CB805 /* RDEPUBDarkImageAdjuster.swift */; }; + D72B9DD54B69A441232EB4675E9A396A /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */; }; D82DDA4C1E5C4D5378A9E5EA3F8E9DFE /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8451A300FFE4BB4E898FA79D11B90A1 /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74ECEF7602380F21B87522961E550A7E /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9DF2359E956AEF7DA0DAE3FAF3C2859 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */; }; + D8445E15B15818CC32F0F5FEA3DB32C8 /* RDEPUBSelectionLoupeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53AF19D77192D711E50E669495472086 /* RDEPUBSelectionLoupeView.swift */; }; + D860F690E2BA824A33842A069D805612 /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59F66F549E44C57A256286385891551 /* RDEPUBTextPerformanceSampler.swift */; }; + D97E374FEF0C11AE2CF9911A474BB864 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; DA5B51E5D80C161D2902B6FC60DA5EC8 /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FECEDE17B4E87274DD2E9EBFD584ABF /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAD16D3E6EBB32FF96C63BFE6037065F /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 007656EA11E3CE9D116BC39614FACB53 /* DTLinkButton.m */; }; - DB4F0CD4D779E1BF3FF6B96CDAB8AE95 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 503556D1790A886D0E591A982279641B /* NSData+DTCrypto.m */; }; + DB06FAC271AAEE1B3CD5C1ED97225398 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 188A763544B134CC1004ECB7380538D7 /* DTTiledLayerWithoutFade.m */; }; + DB6F4AB155823AFB16A8B6FAE732A062 /* RDEpubReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2701BC5B247F7F1B1AF269EE0B553ED8 /* RDEpubReaderView+ContentAccess.swift */; }; DBCA42F7E1697F4EC82E0E7C9657851D /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; DC3E2932A82AD5D88D8B1EFBF004BEC8 /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */; }; - DD0F576655440D98457A1B2933BC5A8C /* RDEPUBTextPageBoundaryValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2135D16EDAFE4339D273F2575162C68 /* RDEPUBTextPageBoundaryValidator.swift */; }; - DD1CCD2CA55E1009E5BB6D340F459FFA /* RDEpubReaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CE21F4CD42CCA0279C894A63EA61D8 /* RDEpubReaderFlowLayout.swift */; }; - DD2E6568C5109C447B7113123444CD50 /* RDPDFReaderContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CF41462885413233567E97D513A2A1 /* RDPDFReaderContracts.swift */; }; DD73CD0E5148961D1ABD80E050122314 /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDAD8BD9E54E6BFE5D39A29BF6217750 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; + DDCD814F4CFC21B9941982C85653DC65 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAA91CA607516E42FAA5C2245D6E0C2 /* Data+CompressionDeprecated.swift */; }; DE68AD2F426FD462BC70F968E5AF5553 /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */; }; - DE80CF9CC448DB78683E901B671BD7B2 /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */; }; + DEEF4E1E4B210B2DDC5F92CA5567CBD0 /* RDPDFReaderTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B394C9C9A51160FF8B06D89C3147EDF /* RDPDFReaderTheme.swift */; }; DFB5A1C64C7908FD05BEFF7C7B571353 /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F90ED4AECC246EA5CD643490677AA9 /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DFBFC61B8725D74E450F31AD8C962902 /* RDEPUBCFIResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = A764063F8FFB29B25C936E4C626CCD48 /* RDEPUBCFIResolver.swift */; }; - E02C561890ABEF226084F28312C144FD /* RDEpubURLReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114D34F41964E50EAD1D75520E8D9A65 /* RDEpubURLReaderController.swift */; }; - E0CB722E0C3D809340E8169823491A7D /* RDEPUBTextSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3BD023700277ABFFDD468D4B86508A /* RDEPUBTextSelectionController.swift */; }; - E1A5ABA2C94654121B71B7AACBADBF22 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F34DCA2B1BAA4FC1470138FC11B494 /* ConstraintInsetTarget.swift */; }; + E00758E44CA106CFC4DC2A2137F62C68 /* RDEpubReaderPagingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69252E848F3036D84BCE5A09B0544390 /* RDEpubReaderPagingController.swift */; }; + E0249E144B3E3276D4B97F9A63E87825 /* RDEPUBResourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2193B99AFE9594D920D7CA76190FFC8E /* RDEPUBResourceResolver.swift */; }; + E0D06D790679C2908871D9A7C32D19CF /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */; }; + E102A76415883B74C6C2A300C9094F0F /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898D56C24CC6E71662D88243FD4A030E /* RDEPUBPageMapReconciliationCoordinator.swift */; }; + E1B45048654ED73F34DD7100669F3A6E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */; }; E1DA58105A72D6C0B77A8A9F7822BD68 /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */; }; - E20C37421313D42FE46DC856B1A5D520 /* RDEPUBStyleSheetBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AFF7550C910918791396F95BA0E784B /* RDEPUBStyleSheetBuilder.swift */; }; - E2F0ECB4C3448EB622D3C2F0E6098D19 /* RDEPUBPageLayoutSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C76B9A7597F550A8E5A73D9A459B8CB /* RDEPUBPageLayoutSnapshot.swift */; }; - E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; - E3E926004ABCFE29E9519621B6CC0078 /* RDEPUBChapterLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 550E94CB46C92A20F7D44770291517EA /* RDEPUBChapterLocation.swift */; }; - E43EC0646802EE76F8312B1A6C9F7B11 /* RDEPUBTextPageDecorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AA234CA89B983CD0BA2CF6D36282461 /* RDEPUBTextPageDecorationView.swift */; }; - E45FCFED4E5A28EDCAEE569C752C399B /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */; }; - E52BA1060E8E0E52054D36892C231F0F /* RDEPUBMetadataParseCancellationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E7C01CB644C1B2D394DD4030FC77FF /* RDEPUBMetadataParseCancellationController.swift */; }; - E566FC7B59DC02015E534C6B987670A3 /* epub-bridge.js in Resources */ = {isa = PBXBuildFile; fileRef = CCE7D4C320D8AE6645FBF46632A60DAB /* epub-bridge.js */; }; - E5D2B6889CDB07A18DE6BF5D3E3C8F41 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */; }; - E6CEA730EEC2B7B3CA2FB7C8418836B3 /* RDEPUBSemanticMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2C31F1487766829228BDB6DBF915F1 /* RDEPUBSemanticMarkerInjector.swift */; }; - E6D4A9A9D5583402ED248D061A07406E /* RDEPUBCFIMarkerInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7892B716F556E5D9A1469662F4DBDDAA /* RDEPUBCFIMarkerInjector.swift */; }; - E890843A862487F8C52F6F2993E41C00 /* RDEpubReaderView+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F5D2B06C38C58089881AA69D11FAF6C /* RDEpubReaderView+CollectionView.swift */; }; + E1DA99F683B479E7514F59584F010D77 /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */; }; + E1E62EA38EAAA0B37F4C2B94AEABA717 /* RDEPUBTextRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFEB0AF1FD346F25E44C810A469B78E1 /* RDEPUBTextRenderer.swift */; }; + E2A1C8666A6AA28DB866B92F5345A5CE /* RDPDFReaderPageChildViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1057324B30CCD038ABC27688B0DC6A3 /* RDPDFReaderPageChildViewController.swift */; }; + E3003D23FF1F66710D96674FD3401AC9 /* RDPDFReaderChromeViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE5872817E44E6DDC2CF80A8297E5A47 /* RDPDFReaderChromeViews.swift */; }; + E31F16819C8D2E59CE9EC3EAF8E88C51 /* RDEPUBReaderController+ContentDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F1B61908D2C1EBC6471CC6E9B90A4C /* RDEPUBReaderController+ContentDelegates.swift */; }; + E332413296CEEDC19C116F40479D29DB /* RDPDFReaderView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C5F29D53A7FD825F0CEAB345B46B3FC6 /* RDPDFReaderView-dummy.m */; }; + E344F26F1775C03DF2F885AC51CF5424 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = C808AC5A8C55E7E56EF916C622B6091A /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E38FC7829B5BDD1588FA487E0FBAC208 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; + E676D40AA424AC6D817FEBFEBC17D6A8 /* RDEPUBSafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = F766A861EB3484C3C519700E104BF91B /* RDEPUBSafeArea.swift */; }; + E690D3041E8FF360ED48B6A3B1CF1AEB /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9862A154F02C241514009AD44CC3567B /* RDEPUBReaderController+AttachmentTooltip.swift */; }; + E7426FD3F56158482B494AB93FF6388F /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */; }; + E77445593DA7F38F2F26305070A40C4D /* RDCBZReaderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3440F352D2E851EAA150592C9292D9F /* RDCBZReaderController.swift */; }; + E879F9B012873321CEC6EA825C6DFBF5 /* RDEPUBBuildDiagnosticsReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6101F66C96A97F01A48A9214DEE40D02 /* RDEPUBBuildDiagnosticsReporter.swift */; }; E8AB5CE26A5224EF09E9E363D70C7775 /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */; }; - E9E8DD0934BB047ADE647818AAE1F54D /* RDEPUBTextPerformanceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E47640ACB9437F479CF434FB6DEF3603 /* RDEPUBTextPerformanceSampler.swift */; }; - E9F125CBF00A57CF9F5F6B064CBEA1E8 /* RDEPUBNoteResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A73DC1F76E6DD9A58DA0217EBA5FC03 /* RDEPUBNoteResolver.swift */; }; + E999AE7BACD93F7AFDF04211C39AC35D /* RDEPUBPaginationModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6D09BDBD02839781AC66D29F3611E41 /* RDEPUBPaginationModels.swift */; }; + E9EB20207ED0C4F50D5A555F62CE845A /* RDEpubReaderContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A76FEE9775014055776105D8698AE74E /* RDEpubReaderContentCell.swift */; }; EA0040823CCF8E97363DB5891F5DA6D0 /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */; }; - EA02502E59B652D82FD7E51185335D91 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E87093B88AB6F2B6A8E775DB61D7F9B /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB972D445111651277060695E6C1C4E1 /* RDEPUBRuntimePageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B90920F144B60FF3A2640092C34C1E5 /* RDEPUBRuntimePageCount.swift */; }; + EA2491A494DAB37C07D615273AEC8DE5 /* RDEPUBParser+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D4997C97BB58CF60B165D1BD0C31985 /* RDEPUBParser+Resources.swift */; }; + EAB24829872CF4EA95664E3FA0FD3A68 /* RDEPUBReaderPaginationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2046F1B0D719EC5C1291C1714DF0751 /* RDEPUBReaderPaginationCoordinator.swift */; }; + EB6DDD12EA3D1E5E365E6A3C5D1A248C /* RDEPUBStyleCompatibilityModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E2EA68BCB5C16362AF8A87E6BED539C /* RDEPUBStyleCompatibilityModels.swift */; }; EBB7E4D4DB253B5F1267CF9B4DDB4E93 /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 63DC0159C85524BC0348523335677809 /* DTCoreTextFontDescriptor.m */; }; - EC3EA7B4C01A3A1ED4D5407A39A76959 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F0D9C8F739B1AD63F78DC6DB52E19F /* RDEPUBReaderAnnotationCoordinator.swift */; }; - EC50C49C8E909D9F03EB5599195EA601 /* RDEPUBReaderLoadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A558E9A32F1A536976CBAECE6D15106 /* RDEPUBReaderLoadCoordinator.swift */; }; - ED9F3821439164320766526A05EEF187 /* RDPDFReaderAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277219E67E7997E62759CE92EFFBDA06 /* RDPDFReaderAnnotationEditorViewController.swift */; }; + ECFAA40DD992BE7A5EDE980982AD08DD /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1FB4D69D71D0D1B4C5749FE44F4DA8 /* RDEPUBFontFallbackResolver.swift */; }; + ED18AB764B6B2D7D51BA3BB30C77BC6D /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */; }; EDA269B595D70EC2B9D81DC890157D63 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE479BF276FAF25057A8B5FF62BE6D74 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C726091C55C51A29EFD42913073CA5E /* Archive+Reading.swift */; }; - EE4E3A6762CF0068B24D55CCE4164DA7 /* RDPDFReaderPanelPresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A94B6B5161E4AD8EC82FCA7EBB482C /* RDPDFReaderPanelPresentation.swift */; }; + EDC52AF71F363B14DCA6DD6F90242E5B /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04DF49B738958596E47F57961FA3A69A /* CoreImage.framework */; }; EE4F0992A0F597320FF7BDE4691D0FD4 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A53C3033C8DE1724D37DA6323CF1D7 /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF1C288D3C6D6476D771041C6428A031 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A0F81F9E370FEA72D49B06C783FA4DE /* RDEPUBRenderDiagnosticsCollector.swift */; }; - EFA62638A4805560C20BAE9ECE0673DD /* RDEpubReaderView+ContentAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228A48BF8210766EF3CFE0908D2E0C69 /* RDEpubReaderView+ContentAccess.swift */; }; - EFDBAD111E6786095F9260B218773B06 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F38B3CAD708AE9333A29A9AB921FA4 /* LayoutConstraint.swift */; }; - EFEA0D9BA85D1BE52137BEDD7E463E1B /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */ = {isa = PBXBuildFile; fileRef = C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */; }; - EFFBA0D067AF69E544E0C281376E8292 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971623801171F2368ECD657BD0C2937F /* ConstraintMultiplierTarget.swift */; }; - F005C2EEC8CBAA17188A1203018A18A1 /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 81B4314CBEDA71647A929517B936613F /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EFE6DECC787C462818A9B3C3E075E0E5 /* RDEPUBTextLayoutFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2185E45C320FFD388943A87A125FB42D /* RDEPUBTextLayoutFrame.swift */; }; F006F73F17F2E3CC0E7852E9357BA946 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 790E97E55D348C4AAE5B90CE6447CD7E /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F094C8A4AF708DF86947F9354147E16A /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A3A81081A2422058887BCEEAA78C9D /* UIView+DTFoundation.m */; }; F0F631056BADA32253528247DF493272 /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F175B01CE5E29B4180521039360FCA0B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; - F3D2B73B9F771B747DAA052AD43D995A /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EFEE9E154AB29DC2CC553438E66442 /* ConstraintDescription.swift */; }; + F10C0868A69A442CA04FC421CBE6C1FC /* RDEPUBTypesettingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AC70C974C448660DF34C7FBA424FD78 /* RDEPUBTypesettingPipeline.swift */; }; + F27993F10ABA4CC86FD5C58FF39D5883 /* RDEPUBBackgroundTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78B720430DB36E3E3D207599DC78CCF1 /* RDEPUBBackgroundTrace.swift */; }; + F35FC5777D29A52C05955D9A33E191F3 /* RDEPUBTextRendererSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2315273E8A0E225152D3BBBD8441AA /* RDEPUBTextRendererSupport.swift */; }; + F3B8C6A7E543BD8E7CAE2E415B37F0D1 /* RDPDFReaderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC177D3B91E8E624750D11D7E09F3B6 /* RDPDFReaderViewController.swift */; }; F4A2E3C4237B8931F61B72FF0BDD6D69 /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = FECD0A9F46F7D0CBF7FE9797EA63845E /* DTObjectTextAttachment.m */; }; - F4BF22914B722004151F768BA6BF008D /* RDEPUBFontFallbackResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC17096445F0AAEFBD5F4BA3875E1A78 /* RDEPUBFontFallbackResolver.swift */; }; - F53F56179BD76AECCB4A327FDCD84007 /* RDEPUBCFITextAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4333640F3EA8AE8B3C37BAC08EB8CC1C /* RDEPUBCFITextAssertion.swift */; }; F58ABA106C6200175DF574DF05A75BA8 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F0F2897650299308CB818238165341 /* DTAccessibilityElement.m */; }; F5A424E67F41C4F7B830CE2F7E71570D /* DTCoreText-Resources in Resources */ = {isa = PBXBuildFile; fileRef = F4E2B1AC73977F10254628C0B7EBE38F /* DTCoreText-Resources */; }; + F5CA27E5123B11C9A15C361F2D9DE8D8 /* RDEPUBReaderSearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E8A047531C39D6A6942EC72AF77ADD /* RDEPUBReaderSearchCoordinator.swift */; }; F6036BBDFE7484F5A453F6876C97C098 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 958D7F12C237A34C059F4E43474BDFAF /* NSAttributedString+SmallCaps.m */; }; - F60AAA294767CDDD3169E406247B9380 /* RDEPUBPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3D78AD63AADF4FB3DE6514B40F0D941 /* RDEPUBPreferences.swift */; }; F61102C9BF3D6296CB6C6B754ABF98C5 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */; }; - F6254E5BE265BA67E1140D8764994BAB /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */; }; - F67B190D8DC1CCD89229D26498014C2D /* RDEPUBBackgroundCoverageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F827FC838580CE1BE71A03555F9BCDF4 /* RDEPUBBackgroundCoverageStore.swift */; }; - F73BB9A9DA4804A77FFE2C0B7FEA96B1 /* RDEPUBResourceDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4DD8A1A273E718BC605D24E8789D47A /* RDEPUBResourceDataProvider.swift */; }; - F795F8E9C157937ED21049306BD2E4CD /* RDEPUBTextPageRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACB85E7827799CCF3DF86133CAD2D77 /* RDEPUBTextPageRenderView.swift */; }; - F8E3A064FB1E769180E2817B219D286F /* RDEPUBPresentationRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D045D805EC093303C56E46F8714499 /* RDEPUBPresentationRuntime.swift */; }; - F925233C7FDBFF7FEDEE5480822791AF /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D557DED28FA9EA85219AF05C93296C6D /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F96E66283981901CE090E285129E4D8F /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 973C2C363B09BC1E49983C6826A623E2 /* DTPieProgressIndicator.m */; }; - FACB6496B4F4DF664AD55D389398EA03 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304EE7D51CFA84D5F4DBD3F5745F241D /* Archive+Helpers.swift */; }; - FB2FCAAD9D0863BD6627155B0E22A9CD /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */; }; - FB80164766B3E15E5D30427D6C72982C /* RDEPUBReaderUIState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82DF9D2C16A6C1956D43123C5D5F9FC /* RDEPUBReaderUIState.swift */; }; - FBDCB75409A2FFE5BCB880D0A8C4CBBD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */; }; + F67B03A6B84144C24A8727EBA9A85560 /* RDEPUBWebView+FixedLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F55F21A6B7661A8D560DB1557E6B97 /* RDEPUBWebView+FixedLayout.swift */; }; + F6B6B5335297604654B91F9DB1B625CC /* RDEPUBTextContentInteractionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A59ED3F13A984E625FF8F6639060AC0 /* RDEPUBTextContentInteractionCoordinator.swift */; }; + F6EBFF6B774713E2F798201913C3F5E0 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 309D2521D7B9A10F86DA3F6BE7FB37B1 /* UIApplication+DTNetworkActivity.m */; }; + F7A44934CBC37DA0C73DCE477BE239C4 /* RDPDFReaderDrawingToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDE32176816BC0A42D4B28D78235370 /* RDPDFReaderDrawingToolbar.swift */; }; + F7C25175A4415DE466783A53BDBDBB9E /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */; }; + F85A22E53A91AC2EF0FBECA87103370C /* RDEPUBParser+ReadingProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C37E4DD39F7CDCFA4C0776B8CAB60A7 /* RDEPUBParser+ReadingProfile.swift */; }; + F8633FA6F73C45BEA8BD04DEA57CEDA8 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */; }; + F8CC36A42110B1FA934258DCF4EB4762 /* RDEPUBAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE0B907BC40F5886B5D8761C8E1C984 /* RDEPUBAnnotationEditorViewController.swift */; }; + FB86725957F487474653A42C45AA42C9 /* RDPDFReaderDrawingLayersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2B596E0DC8B043ECE5DAEFEF7DD2EBC /* RDPDFReaderDrawingLayersView.swift */; }; + FBDCB75409A2FFE5BCB880D0A8C4CBBD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */; }; + FC5C5DF74B3755DADC1B85BC0B35FAF6 /* RDEPUBReaderPersistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3085A431A30E4E2DC3F5E4CAFBA83B5D /* RDEPUBReaderPersistence.swift */; }; FC5F52919451A15639442B46B38E4C67 /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = BADC1A043414D84FBAFBF86CAC8F5399 /* DTCoreTextLayoutFrame+Cursor.m */; }; - FCE05D9B947E5C4A4BAA351330ABE265 /* RDEPUBCFIRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D7AF9F9922B2921E52062BF1F3515F /* RDEPUBCFIRange.swift */; }; - FD3CEE6F4F96C93BF5FE67869F21B693 /* RDEPUBReaderServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = F519C9FB96C0B36AF37F132A5E58427F /* RDEPUBReaderServices.swift */; }; + FC910AA696FF18C84A6365DF9C9C424F /* RDEPUBChapterCacheKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37946E93F2D5F5FF5392FCC3BF0F9424 /* RDEPUBChapterCacheKey.swift */; }; + FCCDEDD358B1CE7CB1A11A1CB1BEDFD8 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD23980142BDA1955145B577739A2CD2 /* RDEPUBTextAnchor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D9886E67C654192303F817E356E9C60 /* RDEPUBTextAnchor.swift */; }; + FD31618D8F4420C75C745EDCFC38D9EB /* UIColor+RDEPUB.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5B47B33D7F759C3CD6BEDA1A69185D /* UIColor+RDEPUB.swift */; }; FD5D68887297CFA94F543C49DC68A156 /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41FD16F0768AA2512812644831FC90CA /* DTHTMLAttributedStringBuilder.m */; }; - FE74CACF479DFAAB0933F6A7F2B94A0C /* RDEPUBRuntimeChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921D3D8E1ACC8478C4C6220D14A612C5 /* RDEPUBRuntimeChapter.swift */; }; + FD9CC3756A7CBCC3040DD785487B0500 /* RDEPUBPageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7340AFD453A481A52CFFC7C7D8C50B87 /* RDEPUBPageResolver.swift */; }; + FE60C8821EA6FDFFF15F22E2E7D77D8B /* RDPDFReaderAnnotationEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC923AF5182183071C8C905DCFD0C5DC /* RDPDFReaderAnnotationEditorViewController.swift */; }; FEB00C614DCB6A8A7BDF8DEE11260984 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = AABB72617A844FF5405C727A0A23D568 /* NSMutableAttributedString+HTML.m */; }; - FF61ABC6139E8DAFA49DB9F5373E6F55 /* RDEPUBNotePopupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 724D0458DE1B4507BD7782A74DB0C3B1 /* RDEPUBNotePopupCoordinator.swift */; }; + FF538BF0A80A8D99B78743597C47334F /* FileManager+ZIPDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0486411409B1766377F5F2A6234D8E64 /* FileManager+ZIPDeprecated.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 007AE6375408953CE11BCC1D4B52B668 /* PBXContainerItemProxy */ = { + 2FA9DB204EBAB127A33BB8E4A75C753F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; remoteInfo = SnapKit; }; - 04891627A375471323118B36AD59C2D3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FBCB57A3AEAAA3449B3F365930BC0977; - remoteInfo = RDEpubReaderView; - }; - 09454F7B473D1E7ACED3710C7D14F88A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 0BC6C9419E40C637580DEAEA3F614561 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; - remoteInfo = DTFoundation; - }; - 2F34DB0ADDF1E29FC1780CEEB4029C6F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 5A3BC65697710E2EA99ECB9C448A50F6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 352EC96AFAEE0EDF74FD76A958827133; - remoteInfo = RDPDFReaderView; - }; - 83F63747A451213A0E66349165AEC47D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - 9B69DDBBA744650032CAC3DEF6FAD867 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E07DDD766DCBF90486BCE6C2EA671E5E; - remoteInfo = "RDEpubReaderView-RDEpubReaderViewAssets"; - }; - A97C5D385CBC51D9532844787CB38C5D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - BAB75BFCF72DB9BEBF8C38332A07CBAC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; - F7651B8F0C65E456E0C7DB0A47FD183E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; - remoteInfo = "DTCoreText-Resources"; - }; - F84DD36C7570FBCCBCB8CAFEB1EF419C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; - remoteInfo = DTCoreText; - }; - FC66B30DEF534D4F9BB288E5310F311D /* PBXContainerItemProxy */ = { + 4F9EBF9F2EC34F1D069E0B7A384ABDFF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; remoteInfo = "SnapKit-SnapKit_Privacy"; }; - FD155185E43437078965258537A25B96 /* PBXContainerItemProxy */ = { + 52A62E1544F8F1CB8A0841D9C035A446 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; + }; + 5D53C2F5FD65E6CD8E8652A497BAA4B1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; remoteInfo = DTFoundation; }; - FE483F97B32E013BA287D689F22C7568 /* PBXContainerItemProxy */ = { + 80504DFF5A5AD74D41D48A50675C2868 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = C7A8D82E407CD3FDC3BA55CEE519B252; remoteInfo = "ZIPFoundation-ZIPFoundation_Privacy"; }; + 90EA3F52B53B30D0599E44601689BAD6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + B6CD365D3C9BF96A2B0402B1084C7753 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FBCB57A3AEAAA3449B3F365930BC0977; + remoteInfo = RDEpubReaderView; + }; + BA4028C24C0013B0A03CED17724094EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 352EC96AFAEE0EDF74FD76A958827133; + remoteInfo = RDPDFReaderView; + }; + CA71454BC17E37142EA167FC0D497218 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; + remoteInfo = "DTCoreText-Resources"; + }; + D9527F41C7D96D531D5F1C5AE5AAC1F4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; + DD19C0F32844A61F07F1ECB13D355A85 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E07DDD766DCBF90486BCE6C2EA671E5E; + remoteInfo = "RDEpubReaderView-RDEpubReaderViewAssets"; + }; + E2F62FE95F2A46E4E30A3BB09AED49A3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; + }; + F01A5D40B4F3128453B6F24E1230C400 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; + }; + F020CE938454AADA341AF610460A014D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + FF25772B8CDE34CEEA71AC7EF594EA0E /* 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 = ""; }; - 011C2BAB67F18C829B4038BED71596C9 /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; - 01C5EEBCD3070B6D686C7E0074D071FE /* RDPDFReaderImageTextLayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextLayerView.swift; sourceTree = ""; }; + 016C4701210031B8CBC8C4C2D03DB357 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; 01DCD1B42D40839F1C8DBBDB11EF09BA /* RDEpubReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDEpubReaderView; path = RDEpubReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 021E6F2E185A56B66D1B92DDB9FE8DE7 /* RDPDFReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-prefix.pch"; 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 = ""; }; 02CB03BBF6FEA9FE9E85706A75AB816B /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; 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 = ""; }; - 03656C13BA24A9D20544506E4F641802 /* 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; }; + 034F5FDCBB44D08C5A68F8AB2B4777F1 /* RDPDFReaderHighlightOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderHighlightOverlayView.swift; sourceTree = ""; }; 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.release.xcconfig; sourceTree = ""; }; - 03A6759BC4A2F6455311B40FC733C962 /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.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 = ""; }; - 04CF41462885413233567E97D513A2A1 /* RDPDFReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContracts.swift; sourceTree = ""; }; - 053B6B55A0AF584768D1654E4E8CD2A9 /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; + 04DF49B738958596E47F57961FA3A69A /* 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; }; 05565CA71DD7DDAA012573A841F7D8DF /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; + 0594E39D9568D488378ADCB812715321 /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; + 05A48723D29BFECCDE51DE4E1CABDD67 /* RDEpubReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderTapRegionHandler.swift; sourceTree = ""; }; 05CA3610F2F3C8021110A179D6943F7A /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; - 05E4852E5E5E06F38C185F78020B0739 /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; + 06D8D0804A9C685D066179823080D2E5 /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; 06E2D8E1D6BCAF5913A7F3F6B1BF9E0F /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; 07147F57468AB345BF82E26A70F60603 /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; + 07206349472D73174829CAD2B189B5FF /* RDPDFReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDPDFReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 0769148555F482C8DF7EA21F6935B7F4 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; + 089966C3069A2468CA1E889EB69E74A7 /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.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 = ""; }; - 096F7D1110CB057D3FF288E71929D347 /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; - 09CBEF1B079E6DB8C0D954127E9FE36B /* 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; }; - 09D2C6BAE2C63C338C7E9D27CB89170A /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; - 0A0F81F9E370FEA72D49B06C783FA4DE /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; - 0A326047296C6BB35D531C82E494545D /* RDEPUBTextContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentView.swift; sourceTree = ""; }; - 0A73DC1F76E6DD9A58DA0217EBA5FC03 /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; 0B3047509587D803762D3B0A21B9F773 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; - 0B35BFEDF59569A794D28F4E41D1878C /* RDPDFReaderPageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageView.swift; sourceTree = ""; }; 0B446AE2E106CECF72AEEA93B85897EC /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; - 0BD4BD1413A94A8B342ED81738AEA289 /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; - 0C0CD41C24A77E0620C082FC9118A030 /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; - 0C76B9A7597F550A8E5A73D9A459B8CB /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; + 0CABC6F6EBE38588FD08D8CDF4EAF88F /* RDEPUBSettingsFlipAutomation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSettingsFlipAutomation.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 = ""; }; 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 = ""; }; + 0EA1817F681CEC8A380F9824BD490E73 /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; 0EA3863B341F56C9B54980AD6A1FD5C0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 0EDC8F9C8C06865DCF84B2F460F2DB55 /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; 0FAE8E0BCF1CB66D6936A3CACAE7CF0B /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; - 0FFB6BF7363A97A0F0CE998F9744D118 /* RDEpubReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderView.swift; sourceTree = ""; }; - 108120864A7F26BBCD8D0ABD84BE7DFA /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; - 114D34F41964E50EAD1D75520E8D9A65 /* RDEpubURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubURLReaderController.swift; sourceTree = ""; }; - 1184A290DF3FEBC82B95EAC0B173D4F0 /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; - 12BACD6A1DCB7D6967C9A95B10590197 /* RDPDFReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDPDFReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 101E8704978C7417FCD99D18764F42B6 /* RDEpubReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPreloadController.swift; sourceTree = ""; }; + 1178601791D03F742CB349BE582223E2 /* RDEPUBTextPaginationSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationSupport.swift; sourceTree = ""; }; 1312638E3010913FB511FD8BE3E2DC60 /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; 13C91A1E88D3B946A1FA082A6EB05C9A /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; - 13D045D805EC093303C56E46F8714499 /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; - 13FDD64A4BCF5D1074F108875FD35B17 /* RDEpubReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-prefix.pch"; sourceTree = ""; }; - 1436F2DD376B9A276627F7325D7BABDF /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; + 13FF31007A05E5706CF26F9BC9DBD462 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; 14AEB065E4B58020BECD466FA2C3582B /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; - 157AFFD84A5924FB4453156897B89901 /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; sourceTree = ""; }; + 14BBECB3A6235FDD72CE46FBCD08FE3C /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; + 15FA72422C7B69BBA7D5B3CFF098CCE5 /* RDPDFReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContentCell.swift; sourceTree = ""; }; 16023686DC389E6755BC79366433C45B /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; - 16CE21F4CD42CCA0279C894A63EA61D8 /* RDEpubReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderFlowLayout.swift; sourceTree = ""; }; - 16DF4A3EFED9261873EAA9FA0459AE52 /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.swift"; sourceTree = ""; }; + 1697531DEC18EA6F9B99D0146C015338 /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.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 = ""; }; - 17F534EF5E574026DACC1C5902876F9E /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; - 185F2084811059CBD2C4B4D01E593D7B /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.swift"; sourceTree = ""; }; + 183D5601B41EA616973AC94E459FA1AB /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; 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 = ""; }; - 18D7AF9F9922B2921E52062BF1F3515F /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; 1944985A167896CE8F522E61AFC67021 /* ResourceBundle-Resources-DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-DTCoreText-Info.plist"; sourceTree = ""; }; + 197D0C3E827B624F40FB510F3BD8A906 /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; 1A2A7B53BCE33A88EB155ED5C4F5C09D /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; - 1A86D6EC76230DDBDA6E2450454F9C94 /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; 1AD502A1FA6EB1E38200B5283F979504 /* Pods-ReadViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReadViewDemo.release.xcconfig"; sourceTree = ""; }; - 1B471B34FFCCCA17B5FBD65D6C44569F /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; - 1B90920F144B60FF3A2640092C34C1E5 /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.swift; sourceTree = ""; }; - 1BFC340D5D2F9CE3EB06CC05EDD71846 /* RDEpubReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderSpreadResolver.swift; sourceTree = ""; }; + 1B05F3444C3A7680B4D1E4DE01B8A567 /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.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 = ""; }; - 1CE98FF96BF7DCEE1E359C122AAA69CF /* RDPDFReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderTheme.swift; sourceTree = ""; }; - 1D02B121F8A30E42AEE560BF7A112E44 /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.swift; sourceTree = ""; }; - 1D3BD023700277ABFFDD468D4B86508A /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; + 1CC0B71EB8AFFDB330E0D8E99CFFCDD3 /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; 1D70C4504AFE88A621171FBB9368722F /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; - 1DCBCEEF127955E485DBA3B5DE2C95DF /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; - 1E203C95DB51A1EA6741A61D8B307846 /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; - 1E532D28451A9FCF38848856ADEC9C59 /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; + 1D7343E0F0547D801BC11E2D708AA33A /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; + 1DE4839D4FBE796B7FDD121170DAD53A /* RDPDFReaderSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsView.swift; sourceTree = ""; }; + 1E68AD352C43FD90827957D8073F835A /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; 1E77200B2588979A91C702B9393646FE /* DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTCoreText-Info.plist"; sourceTree = ""; }; - 1EA7017C03F5D375D7A04B7DF7B3FC64 /* RDEPUBSettingsFlipAutomation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSettingsFlipAutomation.swift; sourceTree = ""; }; - 1ED039739CBB08894FE27469D1AFAAF0 /* RDEPUBChapterTailNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterTailNormalizer.swift; sourceTree = ""; }; + 1E7DF84037D55273D99B5284EDE7F7FC /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; 1F72747C46CC41B906C8A967ED5A47E6 /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; + 1FC7A51A9F6D730A23D6220001DF40BC /* RDEpubReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDEpubReaderView.modulemap; sourceTree = ""; }; 1FDA83DF0F8A6E9142BC2640BC2F9844 /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; - 200DE6B837D5493FEA2710CC3B6577A0 /* RDPDFReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-prefix.pch"; sourceTree = ""; }; + 1FDE32176816BC0A42D4B28D78235370 /* RDPDFReaderDrawingToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingToolbar.swift; sourceTree = ""; }; 2047430DF5C84E0A8FC8874A2B915FC3 /* Pods-ReadViewDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReadViewDemo-acknowledgements.markdown"; sourceTree = ""; }; - 207EF4D0FE030A80462834E8A489A6BE /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; 20AFDAE6841D0000824C044E2CCEED62 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; 2129FCC5AA430659582F12DBA1350292 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; + 2185E45C320FFD388943A87A125FB42D /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.swift; sourceTree = ""; }; + 2193B99AFE9594D920D7CA76190FFC8E /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.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 = ""; }; - 21EACCCA7F9D46E51E5814B94865E81A /* RDPDFZoomablePageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFZoomablePageView.swift; sourceTree = ""; }; + 21AE24836ACB2BC812E9FF5C0F4302FE /* RDPDFReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDPDFReaderView.modulemap; sourceTree = ""; }; 226AE0F5865FC6A88B9D0C73C28A8381 /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; - 226DFBAF9E02071AE8F79A02E72EB4F7 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; - 228A48BF8210766EF3CFE0908D2E0C69 /* RDEpubReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ContentAccess.swift"; sourceTree = ""; }; - 230105AB8EF7CFD998C6FF564482498E /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; - 234124B59F632D05E97E8C71430EBF90 /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; + 232BAE44CA9BE28B729B402BC8B8FAD8 /* 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; }; 23E6F02F41FDE074ACD5C78DA921EEED /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; + 244A0250D275B067EFA790D022396B24 /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; + 24818987BA7C833972E50A1921661271 /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; 2557D3D9913F2F7C7C6AD2C114C2A5C5 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; - 277219E67E7997E62759CE92EFFBDA06 /* RDPDFReaderAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationEditorViewController.swift; sourceTree = ""; }; + 257E3A6D94EB339AF710CBA1515719DC /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; + 2701BC5B247F7F1B1AF269EE0B553ED8 /* RDEpubReaderView+ContentAccess.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ContentAccess.swift"; sourceTree = ""; }; 28FF8B4C669DE2384EE37199498D23E9 /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; 295BCC7FDA963E5D8F53CBF64F08B2B5 /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; + 296DC86D94CA633F2A0697072F76F90D /* RDEPUBTextSelectionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSelectionController.swift; sourceTree = ""; }; 298CF23475A19D50E172630BD6D1D1EA /* NSString+DTFormatNumbers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTFormatNumbers.m"; path = "Core/Source/NSString+DTFormatNumbers.m"; sourceTree = ""; }; + 298E057B5F44628E4EE593F1513E95A6 /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.debug.xcconfig; sourceTree = ""; }; - 2AD4C7470E6B9737E2206681E0352BAC /* RDPDFReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.debug.xcconfig; sourceTree = ""; }; - 2AFF7550C910918791396F95BA0E784B /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; + 2ADB2BD72FA5B1DA4D59440FFC04DE2C /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; 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 = ""; }; - 2C1EFE112AE9D15F54343784066B22ED /* RDPDFReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDPDFReaderView-dummy.m"; sourceTree = ""; }; + 2C37E4DD39F7CDCFA4C0776B8CAB60A7 /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; 2C866ED63128D4AB5D968EEDA3CB7516 /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; - 2DB249934B60DDC3ADB50D4B6C1637AA /* RDPDFReaderDrawingToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingToolbar.swift; sourceTree = ""; }; - 2E8311A315E4A83FC7A16613F723CC97 /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; sourceTree = ""; }; - 2EA962A821F566BC34551F4FAA569478 /* RDEPUBCSSCompatibilityLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCSSCompatibilityLayer.swift; sourceTree = ""; }; - 303F1F1C7CAD8C3FFC1B0D2E49A7FA54 /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; + 2CF7C6BEE1CB54D2546C94E58BEE0EC6 /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; + 2EDE0B4A3EB73E17912FEC91AECADBD6 /* RDPDFReaderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContainerView.swift; sourceTree = ""; }; + 2F23F0E002BEE47B1E786821D96067E4 /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "EPUBCore/Resources/rangy-serializer.js"; sourceTree = ""; }; + 2FF34F8FF314B2B52DA562E7160E9AFD /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.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 = ""; }; + 3085A431A30E4E2DC3F5E4CAFBA83B5D /* RDEPUBReaderPersistence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPersistence.swift; 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 = ""; }; + 318A173BC4548B559258A9FE99D42742 /* RDEPUBPageLayoutSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageLayoutSnapshot.swift; sourceTree = ""; }; 31B00EC977C5120446E63A976AD9DBC3 /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; 32D4D2890461C2EF2403D78EBF03B29D /* DTCoreTextFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFunctions.h; path = Core/Source/DTCoreTextFunctions.h; sourceTree = ""; }; - 338C871316C439906D847FF4ABCE7E26 /* RDEpubReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderGestureController.swift; sourceTree = ""; }; + 34112F3165802F124416A83D4B7B15AA /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; + 34407B046ADF145B3DA08FE4C28609C6 /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; 34F66F7B56F490F71666C3CC51B50EDB /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; + 359E871CA4A99767E938A99718B48F88 /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; 36E06DBE2154F8FCE42DD5E8CB02B258 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; - 37DBFE0446072C23DBEA71CC4A03B6FD /* RDEPUBPageBreakPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageBreakPolicy.swift; sourceTree = ""; }; + 37946E93F2D5F5FF5392FCC3BF0F9424 /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; 380BFE2729ACC77B6F3E846E9C456848 /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; - 384FDFD5C48BA25500437AF93ED575C9 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; - 38F0D9C8F739B1AD63F78DC6DB52E19F /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; + 3822FA364A35F16FFA9D2AAE31E22EF0 /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.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 = ""; }; - 3B0196FC40D2C37F4F398FE37F750E5D /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.swift; sourceTree = ""; }; + 3A59ED3F13A984E625FF8F6639060AC0 /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; + 3A71A099FDBC70A51AE773741C33A4AC /* 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; }; 3BE28706DBAE983FB19FBE122D9F9E68 /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; + 3BEBF652FA65A9AB3D558E1A2A511051 /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; 3D1E29A71B902CC46EBA81C84ADCDA50 /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; 3D86855B4F039593754D5DC832865EA9 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; - 3E166B7546DD376BF9029360A5A28595 /* RDPDFReaderAnnotationListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationListViewController.swift; sourceTree = ""; }; - 3EBA7CE21BCB1D54C01820049786ADCD /* RDEpubReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderViewProtocols.swift; sourceTree = ""; }; + 3DB723617A3D02BEBFBC7DD8E83D47E6 /* RDPDFReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPagingController.swift; sourceTree = ""; }; + 3E2EA68BCB5C16362AF8A87E6BED539C /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; 3EF3AD9CA30968DDCB34B4B8F3477AA8 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - 3FC858070CE2793D286FCFD877306766 /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; 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 = ""; }; + 3FE0B907BC40F5886B5D8761C8E1C984 /* RDEPUBAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationEditorViewController.swift; sourceTree = ""; }; 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.debug.xcconfig; sourceTree = ""; }; - 4004BFA54E3225403BC0BABBA2F1FF12 /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; + 40123F24B4E99825DEBE316FC14BE8F2 /* RDEpubReaderView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-prefix.pch"; sourceTree = ""; }; 407D64FA06B0D5E2DD9CDBC471AB9195 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; + 40F8654BEEBD1B51A4079D96899C140D /* RDEpubReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ToolView.swift"; sourceTree = ""; }; 4113E34E3BD2181F4202CECBB3A0DDBA /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; - 41BAD07193432415DFD17CCDC575C5E7 /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.swift; sourceTree = ""; }; 41C70D721E1873184464B93001110824 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.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 = ""; }; + 422C9DACF0702754BAAA0A37E8A0D4F9 /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; 42C2ECC838DE8A6E5DEB264BEA6F59E4 /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; - 42FC8DF7301C6E48B74EE20C58A049EB /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; - 4333640F3EA8AE8B3C37BAC08EB8CC1C /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.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 = ""; }; - 43E6455DEB4A4191D074A5CEED3BC2CE /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 44765E4CAD77632F37A650F5ABDCDAD5 /* RDEpubReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-umbrella.h"; sourceTree = ""; }; 44894FF917F68A61F0E523342FA5D0A8 /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; - 4586D4C4B438CBC9C10C1F34CB6D2DF2 /* RDEpubReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPagingController.swift; sourceTree = ""; }; - 45B6A030E85C43B4814FE8C4894CB4B3 /* RDPDFReaderHighlightOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderHighlightOverlayView.swift; sourceTree = ""; }; + 45019AE00B85C161910232F35A46E260 /* RDEPUBNoteResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteResolver.swift; sourceTree = ""; }; + 4516C344651B4BAB7D3B3676952563AC /* RDPDFReaderPageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageView.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 = ""; }; - 45E0BB5F74AD3A79CEC11519134A7931 /* RDEpubReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDEpubReaderView-dummy.m"; sourceTree = ""; }; + 46D6BA3E651245BCC8808128EF553958 /* RDEPUBBackgroundPriorityPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundPriorityPolicy.swift; sourceTree = ""; }; 4703F3A2832A267D9F6D1EEA83ACB7CC /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; + 47856474DDE696BF61255DF73D2D799D /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; + 47A01EEE1789F4E1A109C1B49D125E3F /* RDPDFZoomablePageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFZoomablePageView.swift; sourceTree = ""; }; 47E0F42EC4845B73E0193AA0062A1576 /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; 4822B5E091C79BBDF0CEC9C27FAD11ED /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/ZIPFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; 48A4A6EDC08C8AC933D0DCD507E9D173 /* ZIPFoundation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZIPFoundation; path = ZIPFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 48BC031A7181176F87178CB4438E1AA1 /* RDEpubReaderPreloadController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPreloadController.swift; sourceTree = ""; }; - 492237C138740EC84E20660F395A1046 /* RDEpubReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDEpubReaderView.modulemap; sourceTree = ""; }; - 494A49C8C5EF7191537D252AE03671C2 /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; - 49E992115477F84A15A4129365D12DDB /* RDEPUBResourceURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceURLSchemeHandler.swift; sourceTree = ""; }; + 4977ECD606F12A1293FCF0EF36934E5E /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; + 499B927AB070F064B0E8A012382003F1 /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; + 49BEE692A99D3F6541F6A273A49A865D /* RDEPUBCFICompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFICompatibility.swift; sourceTree = ""; }; + 49F4B0888234A678C5FF3E5866E73021 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; + 4A230A3524DED0923CEC303B4C54C833 /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; + 4AF75964868B86A27B63709439E9AF91 /* RDPDFReaderContracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContracts.swift; sourceTree = ""; }; 4B1C52776D8E95B99DC3657201FB6FD0 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; - 4B96C04A8EF23BA144246390EC85DB60 /* 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; }; - 4C69F2BA771FBC9C0271A7B09439242D /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.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 = ""; }; + 4D468DB9B31EA67BD86A1A48BE74733A /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 4D4997C97BB58CF60B165D1BD0C31985 /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; + 4D4D4F7D2C3A548F609164CC506388BE /* RDEPUBReaderController+Orientation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Orientation.swift"; sourceTree = ""; }; 4D4D642664400ACAE92FB5136B8121D0 /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; - 4DBC82062B43BABA38B8DDCE7EF48841 /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; + 4F61B106422AACE26C3C7B05C5293DCC /* RDPDFReaderNavigationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationView.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 = ""; }; - 508E7B0E537815AE336FE286AF553F1F /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; - 50D9E1C1D838BADF3D6BF9072FA237FD /* RDEpubReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.debug.xcconfig; sourceTree = ""; }; + 5088A729186A207F65C88E148F0392F4 /* RDEpubReaderViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderViewProtocols.swift; sourceTree = ""; }; + 508BA727504170CFC09B46B584079A86 /* RDEPUBTextPaginationInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPaginationInterfaces.swift; sourceTree = ""; }; + 50AE5BE674D885BED9B796FE8D97FAF8 /* 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; }; 50E9C6F457FD3662DF4FC74CA5ACB962 /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; - 519CEDEF94B66AD1E728B0932724F6EE /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.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 = ""; }; 52A65E0D6AD4CFB0EECC8AD17A4E8EAC /* DTTextBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextBlock.h; path = Core/Source/DTTextBlock.h; sourceTree = ""; }; - 52A94B6B5161E4AD8EC82FCA7EBB482C /* RDPDFReaderPanelPresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPanelPresentation.swift; sourceTree = ""; }; + 53AF19D77192D711E50E669495472086 /* RDEPUBSelectionLoupeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionLoupeView.swift; sourceTree = ""; }; + 53BD308DABD26A8A8B9CC272486D6EB0 /* RDEpubReaderSpreadResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderSpreadResolver.swift; sourceTree = ""; }; 53C2C2B5D2F9E3E125F8C7B1B2B41CA8 /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/ZIPFoundation/Entry+Serialization.swift"; sourceTree = ""; }; - 548FE1785FF283BDEB6346F49C5A2F88 /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; - 550E94CB46C92A20F7D44770291517EA /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; + 53E8A047531C39D6A6942EC72AF77ADD /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; sourceTree = ""; }; + 543B7B3F4EEB0FAD86C96E5DCE0E22CC /* RDEpubReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.release.xcconfig; sourceTree = ""; }; + 5465156489BA8D643EA9935146897329 /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; + 54B4C37E4A452238A2B3D65A483FF624 /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; + 54F55F21A6B7661A8D560DB1557E6B97 /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; + 54F7EED7DF4D198244A6D06C00CC3F00 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.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 = ""; }; + 5563F7DA776199803E76170B264676BE /* RDPDFReaderNavigationPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationPanelViewController.swift; sourceTree = ""; }; + 557386F3232CE41AD7A21D1D0C412FC0 /* RDEPUBChapterOffsetMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterOffsetMap.swift; sourceTree = ""; }; 5680AB3CE2258BA50F7E7FA84AA71368 /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; - 5771993C5702150B0F9B7F937B012676 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 58591A875354C8532DFF2907CB056395 /* RDEPUBStyleSheetComposer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetComposer.swift; sourceTree = ""; }; + 579B4F428B2ACA84D95B05569FE72F1A /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; + 57F1B61908D2C1EBC6471CC6E9B90A4C /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; + 5943DD019F4F6E9E8608E88D2420888C /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; 5977986EDFE76D5EF96A6D95483B12F7 /* Pods-ReadViewDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReadViewDemo-frameworks.sh"; sourceTree = ""; }; - 5A44E8A934F0559A9A3F1BE1BB1843AA /* RDEPUBParser+ReadingProfile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+ReadingProfile.swift"; sourceTree = ""; }; - 5ACB52162952848C6A801C079CB9CCC7 /* RDEpubReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.release.xcconfig; sourceTree = ""; }; - 5ACB85E7827799CCF3DF86133CAD2D77 /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; - 5B61DAFDEE306ACC7BD87261D5E513F3 /* RDPDFReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContentCell.swift; sourceTree = ""; }; - 5C3650434CBDCDDC9405E62BDFBCEBB7 /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.swift"; sourceTree = ""; }; - 5CD458F3F5787E00148717A6CF9C9E52 /* RDEPUBReadingSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingSession.swift; sourceTree = ""; }; + 59FBE51D9C334D6C796944A37A36FA0B /* RDEPUBChapterLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLoader.swift; sourceTree = ""; }; + 5AAE327FF1505A989454CFB6BE8D5056 /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; + 5AC70C974C448660DF34C7FBA424FD78 /* RDEPUBTypesettingPipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTypesettingPipeline.swift; sourceTree = ""; }; + 5B394C9C9A51160FF8B06D89C3147EDF /* RDPDFReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderTheme.swift; sourceTree = ""; }; + 5D82EEDCF29F3E5B37BEA5191F49610E /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; + 5D9886E67C654192303F817E356E9C60 /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.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 = ""; }; - 5FBCD7326003D3600C31262B27025656 /* RDEPUBParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBParser.swift; sourceTree = ""; }; - 5FE086C6878D5213AA4C991C42B28C72 /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; + 5EC177D3B91E8E624750D11D7E09F3B6 /* RDPDFReaderViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderViewController.swift; sourceTree = ""; }; + 5ECBBE5C440153A7C6B87D92B16289B0 /* wxread-dark.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-dark.css"; path = "EPUBCore/Resources/wxread-dark.css"; sourceTree = ""; }; + 5F2315273E8A0E225152D3BBBD8441AA /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.swift; sourceTree = ""; }; 60052288EBFD0DEA0CD594641192FB5C /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; 60599FA355FBC31A4ED1E2EE5A09A312 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; - 60EF713631DB78343848058532C0AE06 /* RDEPUBChapterWarmupOrchestrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterWarmupOrchestrator.swift; sourceTree = ""; }; + 60BD829978DA910F152D499A1BA7E04B /* RDEPUBReaderChromeCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChromeCoordinator.swift; sourceTree = ""; }; + 6101F66C96A97F01A48A9214DEE40D02 /* RDEPUBBuildDiagnosticsReporter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBuildDiagnosticsReporter.swift; sourceTree = ""; }; 617D0CB55C260D48CC4ED2FF0A3A1051 /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; - 61B505AC85F109801EC708BAC8F6374F /* RDPDFReaderKitView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderKitView.swift; sourceTree = ""; }; - 628C845621A1AB074955F2238E35EE09 /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; + 61FEB7BE16889FD8532441C936C01304 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; + 63482DC4A15D66980EFBAA222D2D6CA8 /* 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; }; + 636AF7DBBCB7320FC883EAFE197EF923 /* RDPDFReaderImageTextRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextRecognizer.swift; sourceTree = ""; }; 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 = ""; }; + 64394008B6544FFDF5097612472AEE24 /* RDEpubReaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderView.swift; sourceTree = ""; }; + 64DE54DECA8006B6CC936B6A5271D1ED /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; 64ECE2655E3EFB266C23544D1149B39F /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; - 655616F30F054425AA178BFF79BA5840 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; 65806394BC872987207CCB0FB587E3B1 /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; - 6695E46F0A0838241051951EDE4FDE8F /* RDEPUBTextSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextSearchEngine.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 = ""; }; + 671C2212E0B20B47CA0A56D7138411B1 /* RDPDFReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+ToolView.swift"; sourceTree = ""; }; 67C4B1FD4CAF8FFB009FF39F501B2650 /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/ZIPFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; + 67CE7F078B6F280727666D10430B4FBD /* RDEPUBNoteDetector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteDetector.swift; sourceTree = ""; }; 68302D3003412D32673539BAF3A71FFD /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; - 683946BB28C88E77187DB918AF14A8BB /* RDEPUBReaderController+Trial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Trial.swift"; sourceTree = ""; }; - 690FEB18BA479297CEE1DF5D5CCB43F2 /* RDEPUBAnnotationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationModels.swift; sourceTree = ""; }; - 691EBEEADC8CDB5F06340114374ED848 /* RDPDFReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+ToolView.swift"; sourceTree = ""; }; + 69252E848F3036D84BCE5A09B0544390 /* RDEpubReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPagingController.swift; sourceTree = ""; }; 6A21D84422DA0E64EA29D0155532671F /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; - 6A30F39D52BFC67B9904B0F6954CCEFE /* RDPDFReaderView+Paging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+Paging.swift"; sourceTree = ""; }; - 6B29C1716D91E427023E6FA9B0FBF037 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; - 6B69D525EF04515B4D7AC71279C59645 /* RDEPUBDecryptingImageAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDecryptingImageAttachment.swift; sourceTree = ""; }; + 6B56088831DB283C0FCC800A365BA5B2 /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; 6B839E12858DFC58AF91990D8B6D27A3 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 6B8F8BA870ACB6C7ACBDF945336D485C /* RDEPUBTextRendererSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRendererSupport.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 = ""; }; - 6C0462268B1CAB03FEDD2D04CD8CBC22 /* RDPDFReaderNavigationPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationPanelViewController.swift; sourceTree = ""; }; - 6C66D6A919F91566D730A55A8FCE9B0A /* wxread-default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-default.css"; path = "EPUBCore/Resources/wxread-default.css"; sourceTree = ""; }; - 6CDE71E415F7E3067F6C022EC10874CF /* RDEPUBPageInteractionController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageInteractionController.swift; sourceTree = ""; }; + 6C877F262E89255B3135DE1E935D3246 /* RDEpubReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+CollectionView.swift"; sourceTree = ""; }; 6D211ACA62A5B241A668A682054310DE /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; 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 = ""; }; - 6E15CE4CE4C23075DE1010D6FCD65BF6 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; - 6E61E4FDE971D7EEF2F853F425A0336F /* RDEPUBHTMLNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBHTMLNormalizer.swift; sourceTree = ""; }; + 6E58C1EF4EC5E0B8E2B38CA2270B93E9 /* RDReaderDocumentFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDReaderDocumentFormat.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 = ""; }; + 6EF4435215EDB7548944507506D0A4C9 /* RDEPUBNotePopupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupViewController.swift; sourceTree = ""; }; + 6F37E867DE563EFD505DBB674F4FDDF6 /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; 6F38E01209C5238001BD7CD009ED3E88 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; - 6F5D2B06C38C58089881AA69D11FAF6C /* RDEpubReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+CollectionView.swift"; sourceTree = ""; }; 6F97367EBFF425820B717CAC4FAF59F2 /* DTImageTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTImageTextAttachment.m; path = Core/Source/DTImageTextAttachment.m; sourceTree = ""; }; - 6FC121B9BD52BFEFB088D015A7D47845 /* RDEPUBCoreTextPageFrameFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCoreTextPageFrameFactory.swift; sourceTree = ""; }; + 6FCABB4D698319B7BD34E6F1984C6C81 /* RDEPUBFontNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontNormalizer.swift; sourceTree = ""; }; 702AB4F450076D82E264C7AF93A45F14 /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; - 70581F979E8449528CAE97C3AEEBAA1E /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; 708CF8B218058AAAA710BB7ADFC504FE /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; - 70929B50B4324B914A30A8063AFA37A1 /* RDEPUBTextPageVerticalJustifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageVerticalJustifier.swift; sourceTree = ""; }; - 719923921751E2AFF9C080A34C67663F /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.swift; sourceTree = ""; }; - 71EC45084F977648BC9C9265ED6A6FEF /* RDPDFReaderDrawingCanvasView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingCanvasView.swift; sourceTree = ""; }; - 724D0458DE1B4507BD7782A74DB0C3B1 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; - 734F2118247AB68A8A965BA63E8E7D6A /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.swift; sourceTree = ""; }; + 71751F490BDBE080BDE46E24BD09DC25 /* cssInjector.js */ = {isa = PBXFileReference; includeInIndex = 1; name = cssInjector.js; path = EPUBCore/Resources/cssInjector.js; sourceTree = ""; }; + 7340AFD453A481A52CFFC7C7D8C50B87 /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.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 = ""; }; 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 = ""; }; - 74F0FEF736604ACC8C2EA61D24BAAAAE /* RDEPUBStyleCompatibilityModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleCompatibilityModels.swift; sourceTree = ""; }; 74F621BADD77F0A22003EDCA6F92D153 /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; + 76244BD19BB5CB592A5EB99402C94A45 /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; + 767016761BF5B8D57595E288BC501BF7 /* RDEPUBAttachmentTooltipView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipView.swift; sourceTree = ""; }; 7698F9998B2922CC8875BDD7849ED710 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; - 7712769A1FFD45BC054467C55547248F /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; 773601B72FDE742724A1FE66115AC185 /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; - 7784A11A6685C9FE1ED5BF258DB8930E /* RDEPUBParser+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Resources.swift"; sourceTree = ""; }; - 7892B716F556E5D9A1469662F4DBDDAA /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; 78AA6CC1C34A3A64CED4C314B1FAE2F1 /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; + 78B720430DB36E3E3D207599DC78CCF1 /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; 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 = ""; }; - 7A558E9A32F1A536976CBAECE6D15106 /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; - 7AA234CA89B983CD0BA2CF6D36282461 /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; + 795CACF19C9BC6269156E3E87CAC5A4A /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 79D6E6B825D0F311663E6A9EFA5D2A7F /* RDEPUBReaderController+Trial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Trial.swift"; sourceTree = ""; }; + 79D75F4A7A02692556E18AC3A388A190 /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.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 = ""; }; - 7CC9E976C6DEB0AC4CB1FC2E1AC8C0F0 /* RDEPUBReaderController+ContentDelegates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ContentDelegates.swift"; sourceTree = ""; }; - 7CE186B9F292E96FE1D65B18B4B7E607 /* RDEPUBReaderController+RuntimeBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RuntimeBridge.swift"; sourceTree = ""; }; + 7CCE92FD9E1B88BD2FE582C98A4AE8EC /* RDEPUBMetadataParseWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseWorker.swift; sourceTree = ""; }; + 7CE5B910E4B90BDD78B2747C7184C745 /* RDEPUBReaderSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettings.swift; sourceTree = ""; }; + 7D41D5F7E42BDEF71C2CD08D7E019C1D /* RDEPUBTextPageVerticalJustifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageVerticalJustifier.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 = ""; }; - 7E5D96C4E8D4900AD2681A58A3819F72 /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; + 7F00C52E49C78CE7F63C155C5C74AFBE /* RDEPUBReaderAnnotationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAnnotationCoordinator.swift; sourceTree = ""; }; 7F533E14DBE841E334D44FEDC9132726 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; - 7FA9BBA625DCDA7FEAE9F7351F14BFF5 /* RDPDFReaderView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RDPDFReaderView.modulemap; sourceTree = ""; }; - 7FFF22C518787CDED7AE164DE4635617 /* RDEPUBTextIndexTable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextIndexTable.swift; sourceTree = ""; }; - 814ED791E332D02C2475A0569569C2E4 /* RDPDFReaderChromeViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderChromeViews.swift; sourceTree = ""; }; + 80EF554F6662D1148455292C4F03A585 /* RDEpubReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDEpubReaderView.debug.xcconfig; sourceTree = ""; }; + 81032F879C858B2A45DF02DCF7ED8E6A /* RDEPUBChapterPageCounter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterPageCounter.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 = ""; }; - 8269FADB6807B8D2C67418206DA0BD1A /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; + 82C4B8E3666736C72FD8AA9774095CD5 /* RDEPUBReaderToolViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolViewProtocols.swift; sourceTree = ""; }; + 830E2FF68050B3931209AF2581249082 /* RDPDFKitPageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFKitPageProvider.swift; sourceTree = ""; }; 8442D87941EF389213FFB9992DEF5D64 /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; - 845E8AF8104393679B9D9172D2A52D66 /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; + 84B6EFF1EBD266465C28091AEDD73E0B /* RDPDFReaderDrawingCanvasView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingCanvasView.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 = ""; }; 856FED9E82D238C3694CC665594928A4 /* DTFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTFoundation-Info.plist"; sourceTree = ""; }; - 85D568D485492AE28BE9D94F8380CD54 /* 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; }; - 85F17808123CD4EC70FA9F0E2C8C115C /* RDEpubReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDEpubReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 86172F915BDAB5EC68B8CB7BF50084E3 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; 86255994A7212A40F60FBEE69C526FF9 /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; - 87A0721FFCC0ECB01A9AA521BFBF7C2E /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; + 87A369FECC06D50D3068A665BCD42179 /* RDPDFReaderSettingsPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsPanelViewController.swift; sourceTree = ""; }; 88A74F7BF47C6E3B2026A80DC4783F1A /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; - 88FE071676A715670B029103BBEBCC61 /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.swift; sourceTree = ""; }; - 891BB97274B07FA451D7C2403E7C5B46 /* RDPDFReaderSettingsPanelViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsPanelViewController.swift; sourceTree = ""; }; + 88FCFBF2D7F2A0C26D1FBF5161035517 /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; 8961D7BA81FEA0F2525F9E82F156426A /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; + 898D56C24CC6E71662D88243FD4A030E /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; + 89DEA6EF4DB86448B595CCB2ACC06C97 /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; 8A15541928DAA1303B6219C49CCE42C9 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; 8A54C0C47B44A133E0CFF71526B88FAF /* DTAttributedTextCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextCell.m; path = Core/Source/DTAttributedTextCell.m; sourceTree = ""; }; 8B10FCCF1F8CF05D36F5B65963EB1F41 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; + 8B1B27CD14A9E7FB6895C4F6F2E70179 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; 8B35D0622F339A5B8A864FAA0C9EAE47 /* Pods-ReadViewDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReadViewDemo-acknowledgements.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 = ""; }; - 8CF11AAFD2AE9015646F7EE3246E0E17 /* RDPDFReaderPagingController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPagingController.swift; sourceTree = ""; }; + 8B6EC13F25BB402502F307A53001F7D4 /* RDEPUBReaderLoadCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLoadCoordinator.swift; sourceTree = ""; }; + 8B808EF921BB59C1A78691D36ECC666B /* RDEPUBParser+TOC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+TOC.swift"; sourceTree = ""; }; 8D071D3F1AC2022BBB40C82D2DC2DFE3 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; + 8D1DCB390ECBFC669909F9181A3FE8B0 /* RDEPUBCFI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFI.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 = ""; }; - 8E79DB6AFFD86EF0579829BED1166B24 /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; - 8EF845DBD3C48E620CC2304C2731C207 /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; - 908BEA0B59C6233AA09BE39365CFC82E /* RDPDFReaderImageTextRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextRecognizer.swift; sourceTree = ""; }; - 92006F90F6EB856FCA69BDEF8608D40A /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; + 8E5DEEA6A9CEFC805D050932E03E1A21 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.swift"; sourceTree = ""; }; + 8F3756D5F4282ABEF00423938EAF6DE2 /* RDEPUBTextPageDecorationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageDecorationView.swift; sourceTree = ""; }; + 8F533FF48C81C0B1684CA895D72C646F /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; + 8F65D6C8950F76034AD414199E8D4C2E /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; + 90FED6AA55769B0F41A57155366E801D /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; + 916630DBF02CC978ECEBBFD77F10FB65 /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; 9213525F01D9956B799C00C0D4A56558 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; - 921D3D8E1ACC8478C4C6220D14A612C5 /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; - 939114DFDFBF654A6F7E4BEBC994848A /* RDEPUBPaginator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginator.swift; sourceTree = ""; }; + 924A837FC3890B67B17DF9246FB39A4C /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; + 926FC58A23312DD1B9B06F1C52993208 /* RDEPUBReaderViewportMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderViewportMonitor.swift; sourceTree = ""; }; + 92790B32EB81BDF75E8ACD8E3C4BBE10 /* RDEPUBWebView+JavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+JavaScriptBridge.swift"; sourceTree = ""; }; + 92AA4E9E3B871C30A1C7BF9141CD9770 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; + 930C3411505409ABE11F153B7A416991 /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; + 932004ABE6C86E9E2ED0030B979ED9FF /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; + 933404827F6B057EB29BBDD6125374E4 /* RDEpubPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubPlainTextBookBuilder.swift; sourceTree = ""; }; 93D34826E445B4E08B0CEC27C6EB4DF3 /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; - 94D345572B8F40A0410861049C321487 /* RDEPUBResourceResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceResolver.swift; sourceTree = ""; }; - 94E7C01CB644C1B2D394DD4030FC77FF /* RDEPUBMetadataParseCancellationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMetadataParseCancellationController.swift; sourceTree = ""; }; + 94885CDA3F48C7BEEDD826129955D4D2 /* RDEpubReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+PageCurl.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 = ""; }; - 95BB29B9413EEF238033BA497FA4E551 /* 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; }; 9678265F1949A0F038F13D422F2B55FD /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; - 96E1140CDDCC684CA4C6CDEB3E012E35 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; 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; }; - 983B628249A36DFF4CF081B8DF100553 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; - 9863B2725D2F1BB2A0DB1E8D6D5D5D7F /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; - 995B096022F7C738F27BCA2533534438 /* RDEPUBReadingLocationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReadingLocationModels.swift; sourceTree = ""; }; + 9862A154F02C241514009AD44CC3567B /* RDEPUBReaderController+AttachmentTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+AttachmentTooltip.swift"; sourceTree = ""; }; + 98A73A4E2FE3A04E24598C615F097708 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; 9A381F075AF6CD9AFBB86130B39E20B4 /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; + 9C5C5D2EF233B42FA8D3BCF06713DF42 /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; 9C66F715840302F2CF4DA6C8558A09BD /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; + 9CC380EF32AB6FB2395CF0B9E62F3317 /* RDEPUBResourceDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceDataProvider.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; }; - 9DFB708C4A48201B65DE1D2E16A1AF2A /* RDPDFReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.release.xcconfig; sourceTree = ""; }; - 9E0663696AAC6407F79F316697D9A9A4 /* RDEpubReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPageChildViewController.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 = ""; }; + 9EC5B30703AA81763AA7A3A2A5A1C9CA /* RDEPUBSelectionOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionOverlayView.swift; sourceTree = ""; }; 9F02C3AC85C88DDA0DB8A9EECF07DC35 /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; - 9F995C600287E46F60E33DA452E1C2F3 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; + 9F3DE5DDD4D63B6FB5FEADA0E292CB33 /* 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; }; 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 = ""; }; - A06F5728AFE470F80BEAA4D7D554F4F1 /* RDEpubReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderContentCell.swift; sourceTree = ""; }; + A00A7D3C70A06A1D06B0EF2D25AA3DC8 /* String+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+RDEPUB.swift"; sourceTree = ""; }; A0BD46122D186FBB226483F8DB80E6CE /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; - A10A3BD7FB2F7FA2FE1F72FA1FA44EC2 /* RDEPUBWebView+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Configuration.swift"; sourceTree = ""; }; - A1605040E2F0212F9D5A73DCF69DA457 /* rangy-serializer.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-serializer.js"; path = "EPUBCore/Resources/rangy-serializer.js"; 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 = ""; }; + A2046F1B0D719EC5C1291C1714DF0751 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; + A24CED4F43EC2C2F55A6512A761B97B9 /* UIColor+RDEPUBHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUBHex.swift"; sourceTree = ""; }; A319B0AD0B5F014BB090153D3020DBA5 /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; - A31ACDA197724BC1B7D9B42D3B1C7522 /* WeReadApi.js */ = {isa = PBXFileReference; includeInIndex = 1; name = WeReadApi.js; path = EPUBCore/Resources/WeReadApi.js; sourceTree = ""; }; - A4DD8A1A273E718BC605D24E8789D47A /* RDEPUBResourceDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBResourceDataProvider.swift; sourceTree = ""; }; - A64BC9567033C874297B5D167793952A /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.swift; sourceTree = ""; }; + A5AAA2346B2236EB367432D8CD2FB317 /* RDPDFReaderKitView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderKitView.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 = ""; }; - A764063F8FFB29B25C936E4C626CCD48 /* RDEPUBCFIResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIResolver.swift; sourceTree = ""; }; + A6D09BDBD02839781AC66D29F3611E41 /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; + A76FEE9775014055776105D8698AE74E /* RDEpubReaderContentCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderContentCell.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 = ""; }; AA0811310099A4BCB3D52683B70DB3D1 /* Pods-ReadViewDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReadViewDemo-dummy.m"; sourceTree = ""; }; - AA153D679D524FF17574716601202C51 /* RDEPUBReaderSearchCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchCoordinator.swift; 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 = ""; }; AC22C3CB82EEE746663403422F344116 /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; - AC7B6AA174033D137FA1A052F40E2FDD /* RDEPUBReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderController.swift; sourceTree = ""; }; AC925B7832B651D3B1C84393FF2F9573 /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; - ACD3AD31D03AC7EBCBD762EBB73D0E59 /* RDEPUBReaderController+RenderSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+RenderSupport.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 = ""; }; - AD356A8B2995301BC6FA6F3E46C7BCDB /* RDPDFReaderViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderViewController.swift; sourceTree = ""; }; - AD673881894A19611CEF5FD16272DF07 /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; + AE3CFAC2C855F60E5A3BFC2F3861BA1C /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; AE51B89744E67BA9CF7E4E2C6DB4DA05 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; - AE58D216D4E69D486F0AB4AC5F71518A /* RDEPUBReaderSearchBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSearchBarView.swift; sourceTree = ""; }; + AED29B787D83E9C4459430CDE0DB612A /* epub-fixed-layout.html */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-fixed-layout.html"; path = "EPUBCore/Resources/epub-fixed-layout.html"; sourceTree = ""; }; AF41F6780E56AB0F76C46A75363DA697 /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; - AF7CF50D52DCA13C2251358552DAAD3C /* RDPDFReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+CollectionView.swift"; sourceTree = ""; }; AFBB8005939E9A85DD9BDAEAA3002E57 /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; AFFD40FFE61C73861D47FD66561E7E93 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; + B0AC91254785C4B0B73D391B603ADE47 /* 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; }; + B15FA2EA6F88DB9AE0FB9356EC5B515C /* RDEPUBChapterSummaryDiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterSummaryDiskCache.swift; sourceTree = ""; }; B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.debug.xcconfig; sourceTree = ""; }; + B1F0955DB654E4B3265622218E9CF71A /* RDPDFReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-umbrella.h"; sourceTree = ""; }; B2542127DF3D3CEF3D1EB999F8576341 /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; - B2604E9D64804DC4A2CA43E0C668DEAC /* RDPDFReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageChildViewController.swift; sourceTree = ""; }; - B277BAEE25D9D6A3C5EB9E55B603BAD5 /* RDEpubReaderView+ToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+ToolView.swift"; sourceTree = ""; }; - B372C329258D1C49F5BF44F81AB0E237 /* RDEPUBChapterDisplayContentCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDisplayContentCache.swift; sourceTree = ""; }; + B36A4B649DD5CA1C5D4DAFC54E0E13DC /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; B3C67AF64AACAFBCB1D6D909BF030731 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; - B3CB5C8EE9C521C9C45EB7D6A7EBA941 /* RDEPUBTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookBuilder.swift; sourceTree = ""; }; + B3F4461DF9B7620283F97023A78C08D8 /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; + B3FC196B05ACAB99474CEA476B0CD195 /* RDPDFReaderImageTextLayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderImageTextLayerView.swift; sourceTree = ""; }; B44119BC710BFFD4549A1B83FBF80CF8 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; B466C1278D8245B512592A07C1965D32 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; - B4770ADCF39D17D831B68D7E56ECD598 /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; - B4D747ACE10BD9D8BCED758A4A46AF52 /* RDEPUBChapterCacheKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterCacheKey.swift; sourceTree = ""; }; + B4B83042E21707CE00778B566E8CB805 /* RDEPUBDarkImageAdjuster.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDarkImageAdjuster.swift; sourceTree = ""; }; B53424287733C45D387175CE9132AFBD /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; + B59F66F549E44C57A256286385891551 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.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 = ""; }; + B6677A5CD728A7E722DC3075C374CDF4 /* 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; }; + B6BC7F1D23C7996F1D9C176B3EB7F0A6 /* RDPDFReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDPDFReaderView-Info.plist"; sourceTree = ""; }; + B6FC740435D649A1BF4303E48F85889C /* RDEPUBReaderController+LocationResolution.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+LocationResolution.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 = ""; }; - B7587FF81578DE5EC06D53194DE8B9F2 /* RDEPUBChapterRuntimeStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterRuntimeStore.swift; sourceTree = ""; }; - B79D3DB96F14BE31474079E9E88FB6A7 /* RDEPUBAttachmentTooltipOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentTooltipOverlayView.swift; sourceTree = ""; }; - B7AE034BE473A605AC52077AEF86BC27 /* RDPDFReaderDebugViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDebugViewController.swift; sourceTree = ""; }; - B8AA7E0D66A87D65E78484C2A848ADF4 /* RDPDFReaderNavigationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderNavigationView.swift; sourceTree = ""; }; + B7B712780654B2698F0379C758B2613E /* RDPDFReaderPersistenceStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPersistenceStore.swift; sourceTree = ""; }; + B81D503CA2CCE9D4172B5D9BB346ED30 /* RDEPUBPaginationCacheCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationCacheCoordinator.swift; sourceTree = ""; }; B8CC7968142149B581329E3460D35484 /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; - B9846B4C57BA2860663A488DC70A390D /* RDEPUBCFIUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIUtilities.swift; sourceTree = ""; }; + B977B258211F447182E6FA36952EA842 /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.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; }; - BA6DD4FDA389DB9F4C8F97B054C10AAF /* RDEPUBWebContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebContentView.swift; sourceTree = ""; }; - BA822947B8B2C54ED946D86C7736AB5D /* RDEPUBTextPositionConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPositionConverter.swift; sourceTree = ""; }; + B9E2296EBB237D8071B8280E81601AE2 /* RDEPUBBookPageMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBookPageMap.swift; sourceTree = ""; }; BA83941397AFE127903C2DA0EE626295 /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; 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 = ""; }; - BAFCF35759F6130F534D4138AECDBC8E /* RDEPUBReaderChapterListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderChapterListController.swift; sourceTree = ""; }; - BB0A3551A7313EF0434A26B6F5A0796E /* RDPDFReaderPersistenceStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPersistenceStore.swift; sourceTree = ""; }; BB2A34C872861E98642DDE455E8E3A72 /* DTAttributedTextCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextCell.h; path = Core/Source/DTAttributedTextCell.h; sourceTree = ""; }; BB7271637D32095C0F526965851E2E06 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; - BC6FC55B88E3F0D723DF388867829698 /* RDEPUBReaderTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTheme.swift; sourceTree = ""; }; + BBD91BDB14FD6C89E095E237DC0F37A7 /* RDEPUBReaderBottomToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderBottomToolView.swift; sourceTree = ""; }; + BC923AF5182183071C8C905DCFD0C5DC /* RDPDFReaderAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationEditorViewController.swift; sourceTree = ""; }; BCF9B3BF987216CF1766D80FED04CF72 /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; BD929E02D9C56EC44BBB74C1999F9892 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; 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 = ""; }; - BF43112A9642930711240B85F895FBA4 /* RDEPUBPageMapReconciliationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageMapReconciliationCoordinator.swift; sourceTree = ""; }; + BDFF6A065216B0DB4C460DB8E30D43AB /* RDPDFReaderDebugViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDebugViewController.swift; sourceTree = ""; }; + BE2A00DBD5096609160A1EBB511C0CF0 /* RDEPUBNoteModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNoteModels.swift; sourceTree = ""; }; + BE9EC25AFCAE91B4EA5A1DDD5FE564DD /* wxread-replace-latin.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace-latin.css"; path = "EPUBCore/Resources/wxread-replace-latin.css"; sourceTree = ""; }; + BEAE3FA90F67CCE6CFC228B56189BD20 /* RDEPUBJumpSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJumpSession.swift; sourceTree = ""; }; + BEC7D701A0361A9C2BB93906A4A7DFDD /* RDEPUBTextBookCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookCache.swift; sourceTree = ""; }; + BECF37BB61D57665E8B2439D3B326503 /* RDEPUBTextPageRenderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageRenderView.swift; sourceTree = ""; }; + BFB4A8DFD2E0EE6D2285B69A5BEA0CBE /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; + BFCB5D51A2FE9AE00599C8B10A728AC7 /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; BFD69C3CC4E96BBD5634E64370DBDA98 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; C06D2A51375DCB872C5A41004E287C0D /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; C171DA66E3550E5F4492D2964AB04FB2 /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; - C1D05F5421885C5D856CB4AFF76DF543 /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; - C22B806740A293207B136B9B5E8AF844 /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; + C24DC0DF11DB45CDC92395B3EA2689B5 /* RDEPUBStyleSheetBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBStyleSheetBuilder.swift; sourceTree = ""; }; + C26F63F750A573082295256163B7B3F7 /* RDEPUBCFIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIParser.swift; sourceTree = ""; }; C3096FD2B7053B4AF08D2B6156C7CA1A /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; - C31ED4EB4A9C339511F3685FF228D8B0 /* RDPDFReaderSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderSettingsView.swift; sourceTree = ""; }; - C330E74881B4D425F9A5780577A5C248 /* RDEPUBReaderRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderRuntime.swift; sourceTree = ""; }; - C408B7DA4233579306399A575A6A256F /* RDEPUBAssetRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAssetRepository.swift; sourceTree = ""; }; + C351D0643D777D8082434A64A04B7312 /* RDEPUBCFITextAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFITextAssertion.swift; sourceTree = ""; }; + C3BA5BC80827B5E54253367E574D3623 /* RDEPUBFixedLayoutTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFixedLayoutTemplate.swift; sourceTree = ""; }; + C4701A7F7E553E7824903F43562AFC19 /* wxread-replace.css */ = {isa = PBXFileReference; includeInIndex = 1; name = "wxread-replace.css"; path = "EPUBCore/Resources/wxread-replace.css"; sourceTree = ""; }; + C48F11FB4EFE57B4DED13881F78ED4A8 /* rangy-core.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "rangy-core.js"; path = "EPUBCore/Resources/rangy-core.js"; sourceTree = ""; }; + C4E616B199145721C28A90BE0D21C98B /* RDEPUBImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewController.swift; sourceTree = ""; }; + C5090C56303AB966C51846110FF05A64 /* RDPDFReaderView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.debug.xcconfig; sourceTree = ""; }; C56EB0E701347B766F12260495801CE1 /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; - C5974AECFECE8D60F316936780D22DD9 /* RDEPUBViewportTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBViewportTypes.swift; sourceTree = ""; }; - C612565C2509C34BCBFF7389F34E6E54 /* RDPDFReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDPDFReaderView-Info.plist"; sourceTree = ""; }; + C5F29D53A7FD825F0CEAB345B46B3FC6 /* RDPDFReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDPDFReaderView-dummy.m"; sourceTree = ""; }; C6303D6C8B50248F87D70D77E2CA66B7 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; - C699FF0C7478AADF0B16C444586156F8 /* RDEPUBPageResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageResolver.swift; sourceTree = ""; }; - C7E6E05CB6C2547550C0AA979367DC6B /* RDPDFReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDPDFReaderView-umbrella.h"; sourceTree = ""; }; + C6954E717DF2A17466B5D30D25C12666 /* RDPDFReaderAnnotationListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderAnnotationListViewController.swift; sourceTree = ""; }; + C6B4FC527668E1E4A43F77E5D5B034EF /* RDEPUBAttachmentNormalizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAttachmentNormalizer.swift; sourceTree = ""; }; + C70BC146F77AE5CE624A06A7946C1703 /* RDEPUBCFIMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMarkerInjector.swift; sourceTree = ""; }; + C764F1B6E5567DB91D1ABE809D25AB99 /* RDEpubReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderPageChildViewController.swift; sourceTree = ""; }; C7EDB07502C56DF3D4F6E90F93880B28 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; + C7FC439421769A5FC6884F5135ABAF08 /* RDEPUBFragmentMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFragmentMarkerInjector.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 = ""; }; - C840FD76BB93F898AF93E8BD842DFE09 /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; sourceTree = ""; }; C862AF3C9768AEC3AF792217547BE47D /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; C8A6E90AB5E26049710E2C2404C28B9A /* RDEpubReaderView-RDEpubReaderViewAssets */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RDEpubReaderView-RDEpubReaderViewAssets"; path = RDEpubReaderViewAssets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - C8C69D03B5519293DC977F7E46AA9BFE /* RDEPUBReaderController+Orientation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+Orientation.swift"; sourceTree = ""; }; C911EE625C8CD488E8B66FA8BA2B5C8F /* DTTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachment.h; path = Core/Source/DTTextAttachment.h; sourceTree = ""; }; C920C702702D03C98A6A6ADDE53C9E78 /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; - CA1ED4036FD80E30C31C2BDBF09F72E9 /* RDEPUBReaderToolViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolViewProtocols.swift; sourceTree = ""; }; + C9D1B125AA5600F835F9AB456100B5BC /* RDEPUBReaderController+TableOfContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+TableOfContents.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; }; + CA7B6B7B55D1E706B41644DDA956D2CA /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; CAED9812FF45FFA82A7B68F7B2B656D4 /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; - CBCFAAE0163F224D1A5AADD2408E9811 /* RDEPUBDTCoreTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDTCoreTextRenderer.swift; sourceTree = ""; }; + CB6B2A6C61E6FB95968A8366924DE033 /* RDEPUBReaderHighlightsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderHighlightsViewController.swift; sourceTree = ""; }; + CB985E900E9F34170BD44A81E7FD1C83 /* RDEPUBRenderDiagnosticsCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderDiagnosticsCollector.swift; sourceTree = ""; }; CBD58858F74B286AB42B1D9C0E299BC0 /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/ZIPFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; - CCE7D4C320D8AE6645FBF46632A60DAB /* epub-bridge.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "epub-bridge.js"; path = "EPUBCore/Resources/epub-bridge.js"; sourceTree = ""; }; - CD04D91292084F30072716D85979DC49 /* RDEPUBCFIGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIGenerator.swift; sourceTree = ""; }; + CC13BF0AF43ECCBA7F956B059633C358 /* RDEPUBReaderState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderState.swift; sourceTree = ""; }; CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + CD9D544D3DF2CDAE5B6EECFF892BD9F5 /* 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 = ""; }; CE669FB235F0A79C31606AC2D531E6C7 /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; - CEC56A9C84FA72CF9807C14A8F6F699B /* RDEPUBPageCountCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPageCountCache.swift; sourceTree = ""; }; - CEF0F0E8E0EAF84CAF398E3F459CBEC8 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.swift; sourceTree = ""; }; CFF70C90945A3410647B87CF1F107605 /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; - D02D7D8A9E0E406B4B7DE16756C29EFC /* RDEPUBJavaScriptBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBJavaScriptBridge.swift; sourceTree = ""; }; - D06EB1604CF5B48E50EE9B4FE0A518BD /* RDEPUBPublication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPublication.swift; sourceTree = ""; }; - D14718D15ACB3676A3423EBBB1044E4E /* RDEPUBTextAnchor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnchor.swift; sourceTree = ""; }; + D1057324B30CCD038ABC27688B0DC6A3 /* RDPDFReaderPageChildViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPageChildViewController.swift; sourceTree = ""; }; + D18CE46766B67622CBA19146529FE7AD /* RDEPUBReaderSettingsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderSettingsViewController.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 = ""; }; - D2135D16EDAFE4339D273F2575162C68 /* RDEPUBTextPageBoundaryValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageBoundaryValidator.swift; sourceTree = ""; }; + D241F2043503DC1C01B6FBDE8C08DD1B /* RDEPUBReaderAssemblyCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderAssemblyCoordinator.swift; sourceTree = ""; }; + D24510AD02ED2650316ED6246FD926EE /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.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 = ""; }; + D27A3BD8D86D036B86A90C4384EF483A /* RDEPUBTextLayouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayouter.swift; sourceTree = ""; }; + D2B596E0DC8B043ECE5DAEFEF7DD2EBC /* RDPDFReaderDrawingLayersView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingLayersView.swift; sourceTree = ""; }; D362CCA87B017930E7481AFE2E73FB74 /* DTExtendedFileAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTExtendedFileAttributes.h; path = Core/Source/DTExtendedFileAttributes.h; sourceTree = ""; }; - D371DFD0FC419701C89C30AEAB5D78C0 /* RDEPUBBackgroundTrace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundTrace.swift; sourceTree = ""; }; D3A4BA792340D151ECB734018B2FD3EF /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; - D3AE1FFC202446FD757A48580E35F97F /* RDEPUBTextBookModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBookModels.swift; sourceTree = ""; }; D3C2F16A4F9F4BEAA317715C1F17C81F /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; - D44149271FD4631FF7616F01343BD79A /* RDEPUBPaginationModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPaginationModels.swift; sourceTree = ""; }; + D3CE152E896CA22C59944E4E3BBBF760 /* RDPDFReaderView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RDPDFReaderView.release.xcconfig; sourceTree = ""; }; + D436946B4DC3D4F40E7B50F9F3A77DF6 /* RDEPUBTextBuildPipelineInterfaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextBuildPipelineInterfaces.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 = ""; }; + D4ABEB07AC55D55BE9BCECAA2B25D794 /* RDEpubReaderView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RDEpubReaderView-dummy.m"; 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 = ""; }; - D5B415C0B230E1471E23C9B037EC7E2A /* RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDEpubReaderView-Info.plist"; sourceTree = ""; }; + D5657837156EA19733E55FE7DE6403C6 /* RDEpubReaderView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RDEpubReaderView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + D597E864BC3B6215B502FC3B05C13364 /* RDEPUBNotePopupCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNotePopupCoordinator.swift; sourceTree = ""; }; D5D2445B4619EC0C62C7560649DD2204 /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; - D5DB4208378CCE8CB855A1C6DA724AD5 /* RDEPUBWebDecorationOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebDecorationOverlayView.swift; sourceTree = ""; }; - D5E005150A64B16EA98048A15B8A4631 /* RDEPUBReaderController+PublicAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+PublicAPI.swift"; sourceTree = ""; }; - D64AE1D37C74699EBE98C957AF7FF16E /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; - D6A7BC6810106F285EF55F02D28F25B6 /* RDPDFReaderDrawingLayersView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderDrawingLayersView.swift; sourceTree = ""; }; - D7528E03B8934B146947FDF9147D7846 /* RDEPUBReaderPaginationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderPaginationCoordinator.swift; sourceTree = ""; }; + D6A2D1BF70F1C6B7354AC88C3DC52656 /* RDEPUBChapterLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterLocation.swift; sourceTree = ""; }; + D730579455F74FB03C7E8A4E50484823 /* RDEPUBReaderController+ExternalLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+ExternalLinks.swift"; sourceTree = ""; }; + D752B202581818FDFBB68CDD7FA75213 /* RDEPUBWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebView.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 = ""; }; + D7D294019CB6322021FE87237FA56DA3 /* RDEPUBReaderTableOfContentsItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTableOfContentsItem.swift; sourceTree = ""; }; D7D4385F08260E348B370DC79366E6CD /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; + D815A3BEB1A8F3959502A4B87558549C /* RDEPUBParser+Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Archive.swift"; sourceTree = ""; }; D816721347D943A1D204E1507FFA5019 /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; + D86146C71353D766AED457B0B59F13E3 /* RDEPUBReaderTopToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderTopToolView.swift; sourceTree = ""; }; D89968532D9F2672C6B6D01C290AE466 /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; + D8CD636112E10AA865F164AA3D168C00 /* RDEPUBReaderEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderEnvironment.swift; sourceTree = ""; }; + D8CFFED8482DB33A1FCB300586CD3AFA /* 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; }; D8D859DA88367D318DA839A12B29A149 /* NSAttributedString+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTCoreText.h"; path = "Core/Source/NSAttributedString+DTCoreText.h"; sourceTree = ""; }; D92D7AF796DC45709FBBF4BBCBF47095 /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; D97A43F1E6018B92E85B58BB6549F7CB /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; + D984CA4AF47D4219E0FB6506CD7D2C27 /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; + D9FE68DE46E8F50DDA44B5EF63ABC67A /* RDEPUBWebView+Reflowable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Reflowable.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 = ""; }; - DB4B2C2DAB04A274AA42EE8673031B4D /* RDEPUBParser+Package.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBParser+Package.swift"; sourceTree = ""; }; DBAEA965F9F262BB8BF17C77B01C0956 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; - DBFF9A0CB4BCE0E33B65B03FF68AE577 /* RDEPUBCFIDOMPathBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIDOMPathBuilder.swift; sourceTree = ""; }; - DC54F4A57E211890551F91CCFAF4B59A /* RDEPUBReaderDependencies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDependencies.swift; sourceTree = ""; }; - DDAC1D10BF65035581AF2F9821CA2835 /* RDEPUBReaderController+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBReaderController+DataSource.swift"; sourceTree = ""; }; + DC04C30BD0D2F6408EB5B8054F36B4F2 /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; + DC7EF3FC064B375733390FA3799A617B /* RDEPUBRenderRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRenderRequest.swift; sourceTree = ""; }; + DD002812D1D11866A93FEFB5024D5DA0 /* RDPDFReaderView+CollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+CollectionView.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 = ""; }; - E05A32054F050060822F49BB8707B792 /* RDEPUBImageViewerCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBImageViewerCoordinator.swift; sourceTree = ""; }; - E05FACFD35497E37E245CBC7C261AB13 /* RDEpubReaderView+PageCurl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEpubReaderView+PageCurl.swift"; sourceTree = ""; }; - E06CC927BADF654D292DC523F0DFDB52 /* RDEPUBCFIError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIError.swift; sourceTree = ""; }; - E0AF4C7A330235BBF8B62F08FBF3EC92 /* RDEPUBWebViewDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBWebViewDebug.swift; sourceTree = ""; }; + DE5B47B33D7F759C3CD6BEDA1A69185D /* UIColor+RDEPUB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+RDEPUB.swift"; sourceTree = ""; }; + E02FC3DBD9707CA1A2C087E36DEBDFF8 /* RDEPUBDecryptingImageAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBDecryptingImageAttachment.swift; sourceTree = ""; }; + E0E0892DD8B09BBF7E0234F6E258D6B5 /* RDMOBIParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDMOBIParser.swift; sourceTree = ""; }; + E1308D476F85ACCA10D54AF2ED9B34BE /* RDEPUBChapterDisplayContentCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDisplayContentCache.swift; sourceTree = ""; }; E15930CD8D9ED2F990B87E8F78DD5A32 /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; - E18E6E8D39404427745CE696526DE777 /* RDEPUBChapterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterData.swift; sourceTree = ""; }; E1D1532D1876B11C0E08D8B7D4FA131B /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; - E1E3C0347A8864AB95A590EC70FD5ABD /* 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; }; E209D74CEC1626A09885E55370AEFA53 /* Date+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+ZIP.swift"; path = "Sources/ZIPFoundation/Date+ZIP.swift"; sourceTree = ""; }; + E242368DFEDB6BD27EDA8C0E5915D6F5 /* RDEPUBReaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderDelegate.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 = ""; }; E2993B5AF554E26603DFF0DE92D89C92 /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; - E3D78AD63AADF4FB3DE6514B40F0D941 /* RDEPUBPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPreferences.swift; sourceTree = ""; }; - E3F1D7684E9910C3A3D916BD2B58BE27 /* RDEpubReaderView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RDEpubReaderView-umbrella.h"; sourceTree = ""; }; - E45294A3F8158EC3C68ECF3D9594C7EE /* RDEPUBSearchModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchModels.swift; sourceTree = ""; }; - E47640ACB9437F479CF434FB6DEF3603 /* RDEPUBTextPerformanceSampler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPerformanceSampler.swift; sourceTree = ""; }; - E519FFEE6627E0BFC3063238F0B06EE6 /* RDEPUBCFISerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFISerializer.swift; sourceTree = ""; }; + E3BF1AFD43CD35EDA59ED119955FAC96 /* RDPDFReaderView+Paging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDPDFReaderView+Paging.swift"; sourceTree = ""; }; + E5C393B65BEDBCD67A7B2BD0FD26B869 /* RDEPUBReaderContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderContext.swift; sourceTree = ""; }; E64ED14B8FB7C0060C3BAA215AC25363 /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/ZIPFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; E6AD45B90D08BACAF3AF76AE40BBCC10 /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; - E6DC87AB92A31B288DFBEC314EBA61DB /* RDEPUBMemoryProbe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMemoryProbe.swift; sourceTree = ""; }; + E6BD7E7A08332F631D063AEBB4DD8F7C /* RDEPUBTextPageBoundaryValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextPageBoundaryValidator.swift; sourceTree = ""; }; + E6F0CF779FBA5FFD0E72068E1F714942 /* RDEpubReaderView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RDEpubReaderView-Info.plist"; sourceTree = ""; }; + E74C786C11A2410677CDAEBF7DD1B4AD /* RDEpubReaderGestureController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderGestureController.swift; 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 = ""; }; E9A09B9A70653ED4FB65C8A3934E3937 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - EB0EEFB71EDB43C8D13587E231AEA1B0 /* RDEPUBCFIPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIPath.swift; sourceTree = ""; }; - EB2C31F1487766829228BDB6DBF915F1 /* RDEPUBSemanticMarkerInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSemanticMarkerInjector.swift; sourceTree = ""; }; EB434D5D2C4FC39DB37D676ABB6B7C68 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; - EB84ABBEE467BC984D1E9E3F43B5119F /* RDEPUBModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBModels.swift; sourceTree = ""; }; EBA0272559B0F7FAD8AC670AC7431188 /* Pods-ReadViewDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReadViewDemo-umbrella.h"; sourceTree = ""; }; EBD26CED79D9BC8B6093FB7163627198 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; - EC17096445F0AAEFBD5F4BA3875E1A78 /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; - EC2A0D875AEA9AB8ACE30139D100E394 /* RDEPUBReaderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderConfiguration.swift; sourceTree = ""; }; - EC6581B7BD334A42A3D4B0BB876361E5 /* 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; }; - EC7A2B13E87974E141C7E3518F9D0EBF /* RDEPUBWebView+Search.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+Search.swift"; sourceTree = ""; }; - ECBDEADA2700EFDE005F0303A97D272F /* RDEPUBSelectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSelectionState.swift; sourceTree = ""; }; + ECBD2FB74FE0B1966256CD0C39BF1F83 /* RDEPUBSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSearchEngine.swift; sourceTree = ""; }; EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTCoreText; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EE10390ED67255ABE5E4D1A1B1EF07F5 /* RDPDFReaderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RDPDFReaderView; path = RDPDFReaderView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EE4506392D83069D836221FAB813E8D6 /* DTCoreText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-prefix.pch"; sourceTree = ""; }; + EE5872817E44E6DDC2CF80A8297E5A47 /* RDPDFReaderChromeViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderChromeViews.swift; sourceTree = ""; }; + EE8ABB198220CF4FE67049FE2349947A /* RDEPUBMemoryProbe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBMemoryProbe.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 = ""; }; - F06C21F4D409CF92C76D4498B3134E8B /* RDEPUBReaderLocationCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderLocationCoordinator.swift; sourceTree = ""; }; + EFEB0AF1FD346F25E44C810A469B78E1 /* RDEPUBTextRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextRenderer.swift; sourceTree = ""; }; + F09DDC12AA1A0CD529F310E5CE0F99A1 /* RDEPUBCFIRecoveryEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRecoveryEngine.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 = ""; }; - F19ED99ABDCF88F81F05E71BECAD550E /* 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; }; - F1A0D29FD3196A1FB2F83394AB355405 /* RDEPUBTextContentInteractionCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextContentInteractionCoordinator.swift; sourceTree = ""; }; - F1F75A2E00B511750B5DE5A7F28B7738 /* RDEPUBAnnotationEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBAnnotationEditorViewController.swift; sourceTree = ""; }; - F276E0C828D7E362E1AB740474DFD344 /* RDEpubReaderTapRegionHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderTapRegionHandler.swift; sourceTree = ""; }; - F3351DB26E94A1B4929F19A6CD7DABD9 /* RDEPUBTextAnnotationOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextAnnotationOverlay.swift; sourceTree = ""; }; + F3440F352D2E851EAA150592C9292D9F /* RDCBZReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDCBZReaderController.swift; sourceTree = ""; }; F3ABB3278539E3E13585120647F01258 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; + F3CF1BCEE24E319CEA749FF14F5C9D7E /* RDEpubReaderFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubReaderFlowLayout.swift; sourceTree = ""; }; F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; F43B7563256C964F3030A6C9BED2EA16 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; 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; }; - F519C9FB96C0B36AF37F132A5E58427F /* RDEPUBReaderServices.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderServices.swift; sourceTree = ""; }; + F51399FB07DB540E97ED404FAB685C31 /* RDEPUBPresentationRuntime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBPresentationRuntime.swift; sourceTree = ""; }; + F53A99F5B071BEA755E7344615C5D4FD /* RDEPUBRuntimeChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimeChapter.swift; sourceTree = ""; }; + F57ADB5984DCA56EDF32CDB6B4A983DD /* RDPDFReaderPanelPresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderPanelPresentation.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 = ""; }; F610362838046514D87BF38DAC3B7829 /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; F7382BDDD61B00469E398482B8AA31F3 /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/ZIPFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; + F766A861EB3484C3C519700E104BF91B /* RDEPUBSafeArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBSafeArea.swift; sourceTree = ""; }; F78033C34E8C1FAD3B27FFC4F959A611 /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; - F7F02564FDDFA1E2D5D9C201B2F921E0 /* RDEPUBWebView+FixedLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RDEPUBWebView+FixedLayout.swift"; sourceTree = ""; }; - F827FC838580CE1BE71A03555F9BCDF4 /* RDEPUBBackgroundCoverageStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBBackgroundCoverageStore.swift; sourceTree = ""; }; - F82DF9D2C16A6C1956D43123C5D5F9FC /* RDEPUBReaderUIState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderUIState.swift; sourceTree = ""; }; + F7AAEDE9AFDB7C593B3B29F05A8A9702 /* RDEPUBRuntimePageCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBRuntimePageCount.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 = ""; }; - F89F29E75C30E37D6CB823974307BF0E /* RDEPUBNavigatorLayoutContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBNavigatorLayoutContext.swift; sourceTree = ""; }; - F8BD01B9C58678FECA98B5CABFE43AF0 /* RDPDFReaderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDPDFReaderContainerView.swift; sourceTree = ""; }; + F88EAEAB89867B1405011D65F95E4F64 /* RDEpubURLReaderController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubURLReaderController.swift; sourceTree = ""; }; F8F398A3D1144707216F9A20BEDF911E /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; - F9B856145AE64DF1C0DDC43555DE1BBB /* RDEPUBTextLayoutFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBTextLayoutFrame.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 = ""; }; FAA140AF73738B23155578D0AA734FE3 /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; + FB1FB4D69D71D0D1B4C5749FE44F4DA8 /* RDEPUBFontFallbackResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBFontFallbackResolver.swift; sourceTree = ""; }; FC467FD187B387BBBF0D10B192925B53 /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; - FC8877FCA14B6646C4FEF59A3B0F1ACE /* RDEPUBReaderToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBReaderToolView.swift; sourceTree = ""; }; - FCA56243CDDB901C3906DC4B542787B9 /* RDEpubPlainTextBookBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEpubPlainTextBookBuilder.swift; sourceTree = ""; }; + FCEAC930B7FAD0BFD2BF58A81C1B82C6 /* RDEPUBCFIRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIRange.swift; sourceTree = ""; }; + FD69D7E6008EE4ABAB3B5DC7AA868A15 /* RDEPUBCFIMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBCFIMap.swift; sourceTree = ""; }; FE2F750872F6BAE0ACB02ADF23011AF8 /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; 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 = ""; }; + FF56076797358B800EE1C35C5FB6360B /* RDEPUBChapterDataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RDEPUBChapterDataCache.swift; 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 */ @@ -1210,34 +1220,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 371B87B1F7D323203B8C533B4CD24682 /* Frameworks */ = { + 254A9D21D857AA584C5D2ADC600A6710 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 74E04D9FFB1157F3BB13694DAF9A1190 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E6AAED7E5F728BE4AD1030966E99673 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 3AA460AD21EF5603DD8D72E7AA9E9B21 /* Frameworks */ = { + 4898DBD55913F2B54919C55D71F7EF07 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 514455551257DAD3C261568B87309678 /* Frameworks */ = { + 572FEB02353F89A14C0C06D3CAD01317 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6874108C8D77E0B850ABFE50BBC4B1AC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C6A707F9902F28B25EFB1758779D2E6E /* CoreImage.framework in Frameworks */, - 774E6F3D3205170E15EC719AA27E84C4 /* Foundation.framework in Frameworks */, - 7BB1F7E48AE3391415BE28627E578783 /* Vision.framework in Frameworks */, + D97E374FEF0C11AE2CF9911A474BB864 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1254,44 +1263,46 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 73A4CA22CA64362A4424EBA8B775DA6A /* Frameworks */ = { + 74DA18DBECE4D8CB854F846D9F357396 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B5315FE923C0DCADF321864AB4B3DFDC /* Foundation.framework in Frameworks */, - D7CC6B1036176C86E740636FD91D78A3 /* ImageIO.framework in Frameworks */, - 21151A13DEA3D2D63276965B2CA36971 /* QuartzCore.framework in Frameworks */, + DDAD8BD9E54E6BFE5D39A29BF6217750 /* Foundation.framework in Frameworks */, + D2C6FE518520667288530D6983D2BE91 /* ImageIO.framework in Frameworks */, + 08A306C9384471B8D7F3E748E57AEA96 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 98498040CD9BDDE55929E28B46278010 /* Frameworks */ = { + 841175627F988EF292F0FDC3FB0EF011 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EDC52AF71F363B14DCA6DD6F90242E5B /* CoreImage.framework in Frameworks */, + 872E2091594BCB3529FD1AD9FEEDD24F /* Foundation.framework in Frameworks */, + 19C8677572874927A3364FF627870BBE /* PDFKit.framework in Frameworks */, + 5DE66A256BFD2ABBD1F05DB20AA70E2F /* Vision.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE82FD7DE740122C0E1F3ACA79D8D325 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A6C86E73E08E0EE41160C8B4929384EF /* Frameworks */ = { + BB775B7E3898A645CA9A57B93ED9668D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 31B8465BD0B77725D8A004CA168F1BAC /* Foundation.framework in Frameworks */, + C52ACA043C901B7925AD97DD33CA7D8F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F2FF89916CD02D42BFA1656A5EF0CB82 /* Frameworks */ = { + F1A20C66D5D753698A0580C836197161 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62AF96178739A70BCD82320CAD4510A8 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FA10314229BF9E0511EA736EB8886E78 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F175B01CE5E29B4180521039360FCA0B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1306,6 +1317,23 @@ name = Resources; sourceTree = ""; }; + 0656CE04288357F0748AB498835BA03E /* Frameworks */ = { + isa = PBXGroup; + children = ( + DAC1DE7BF5C2D9CBABA8F20B8B79EAE1 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 0BBAC52764CEAE2020B3D2FD7E8CA22F /* Development Pods */ = { + isa = PBXGroup; + children = ( + ACE9EC81EC6D670D075A6387E895F1EC /* RDEpubReaderView */, + 92ABBF90628E715301E38B1FE0110CC9 /* RDPDFReaderView */, + ); + name = "Development Pods"; + sourceTree = ""; + }; 0D4A349829D1C0DC0E69C0A64B9A4139 /* Pods-ReadViewDemo */ = { isa = PBXGroup; children = ( @@ -1323,68 +1351,13 @@ path = "Target Support Files/Pods-ReadViewDemo"; sourceTree = ""; }; - 11B7FD3A70A573331C4CDB93EB637608 /* CFI */ = { + 12AA3A987A0426F2462A865D2B48B81A /* Pod */ = { isa = PBXGroup; children = ( - 88FE071676A715670B029103BBEBCC61 /* RDEPUBCFI.swift */, - 0C0CD41C24A77E0620C082FC9118A030 /* RDEPUBCFICompatibility.swift */, - DBFF9A0CB4BCE0E33B65B03FF68AE577 /* RDEPUBCFIDOMPathBuilder.swift */, - E06CC927BADF654D292DC523F0DFDB52 /* RDEPUBCFIError.swift */, - CD04D91292084F30072716D85979DC49 /* RDEPUBCFIGenerator.swift */, - 1DCBCEEF127955E485DBA3B5DE2C95DF /* RDEPUBCFIMap.swift */, - 519CEDEF94B66AD1E728B0932724F6EE /* RDEPUBCFIParser.swift */, - EB0EEFB71EDB43C8D13587E231AEA1B0 /* RDEPUBCFIPath.swift */, - 18D7AF9F9922B2921E52062BF1F3515F /* RDEPUBCFIRange.swift */, - A64BC9567033C874297B5D167793952A /* RDEPUBCFIRecoveryEngine.swift */, - A764063F8FFB29B25C936E4C626CCD48 /* RDEPUBCFIResolver.swift */, - E519FFEE6627E0BFC3063238F0B06EE6 /* RDEPUBCFISerializer.swift */, - 4333640F3EA8AE8B3C37BAC08EB8CC1C /* RDEPUBCFITextAssertion.swift */, - B9846B4C57BA2860663A488DC70A390D /* RDEPUBCFIUtilities.swift */, + D5657837156EA19733E55FE7DE6403C6 /* RDEpubReaderView.podspec */, + 795CACF19C9BC6269156E3E87CAC5A4A /* README.md */, ); - name = CFI; - path = CFI; - sourceTree = ""; - }; - 1698ACC033ECDDF8C08FBEFC1725327F /* EPUBCore */ = { - isa = PBXGroup; - children = ( - C408B7DA4233579306399A575A6A256F /* RDEPUBAssetRepository.swift */, - AD673881894A19611CEF5FD16272DF07 /* RDEPUBFixedLayoutTemplate.swift */, - D02D7D8A9E0E406B4B7DE16756C29EFC /* RDEPUBJavaScriptBridge.swift */, - EB84ABBEE467BC984D1E9E3F43B5119F /* RDEPUBModels.swift */, - F89F29E75C30E37D6CB823974307BF0E /* RDEPUBNavigatorLayoutContext.swift */, - 939114DFDFBF654A6F7E4BEBC994848A /* RDEPUBPaginator.swift */, - 5FBCD7326003D3600C31262B27025656 /* RDEPUBParser.swift */, - C22B806740A293207B136B9B5E8AF844 /* RDEPUBParser+Archive.swift */, - DB4B2C2DAB04A274AA42EE8673031B4D /* RDEPUBParser+Package.swift */, - 5A44E8A934F0559A9A3F1BE1BB1843AA /* RDEPUBParser+ReadingProfile.swift */, - 7784A11A6685C9FE1ED5BF258DB8930E /* RDEPUBParser+Resources.swift */, - 1E532D28451A9FCF38848856ADEC9C59 /* RDEPUBParser+TOC.swift */, - E3D78AD63AADF4FB3DE6514B40F0D941 /* RDEPUBPreferences.swift */, - D06EB1604CF5B48E50EE9B4FE0A518BD /* RDEPUBPublication.swift */, - 5CD458F3F5787E00148717A6CF9C9E52 /* RDEPUBReadingSession.swift */, - B4770ADCF39D17D831B68D7E56ECD598 /* RDEPUBRenderRequest.swift */, - A4DD8A1A273E718BC605D24E8789D47A /* RDEPUBResourceDataProvider.swift */, - 94D345572B8F40A0410861049C321487 /* RDEPUBResourceResolver.swift */, - 49E992115477F84A15A4129365D12DDB /* RDEPUBResourceURLSchemeHandler.swift */, - 1436F2DD376B9A276627F7325D7BABDF /* RDEPUBSafeArea.swift */, - 0BD4BD1413A94A8B342ED81738AEA289 /* RDEPUBSearchEngine.swift */, - E45294A3F8158EC3C68ECF3D9594C7EE /* RDEPUBSearchModels.swift */, - 2AFF7550C910918791396F95BA0E784B /* RDEPUBStyleSheetBuilder.swift */, - D14718D15ACB3676A3423EBBB1044E4E /* RDEPUBTextAnchor.swift */, - 41BAD07193432415DFD17CCDC575C5E7 /* RDEPUBWebView.swift */, - A10A3BD7FB2F7FA2FE1F72FA1FA44EC2 /* RDEPUBWebView+Configuration.swift */, - F7F02564FDDFA1E2D5D9C201B2F921E0 /* RDEPUBWebView+FixedLayout.swift */, - 845E8AF8104393679B9D9172D2A52D66 /* RDEPUBWebView+JavaScriptBridge.swift */, - 16DF4A3EFED9261873EAA9FA0459AE52 /* RDEPUBWebView+Reflowable.swift */, - EC7A2B13E87974E141C7E3518F9D0EBF /* RDEPUBWebView+Search.swift */, - E0AF4C7A330235BBF8B62F08FBF3EC92 /* RDEPUBWebViewDebug.swift */, - 11B7FD3A70A573331C4CDB93EB637608 /* CFI */, - F7F49436E7CFDEBE3591ED107065A806 /* Models */, - C2236B99045D4AF0D628093A2AF07781 /* Notes */, - ); - name = EPUBCore; - path = EPUBCore; + name = Pod; sourceTree = ""; }; 17A436C4B45A61A61A73C52ECF2CADA5 /* Resources */ = { @@ -1402,25 +1375,15 @@ name = Core; sourceTree = ""; }; - 20A451AE253F0D2BC8CE5E94269FF8DB /* Pod */ = { + 283A5FB1D5F251D92061976EF101E7A4 /* Notes */ = { isa = PBXGroup; children = ( - 12BACD6A1DCB7D6967C9A95B10590197 /* RDPDFReaderView.podspec */, - 5771993C5702150B0F9B7F937B012676 /* README.md */, + 67CE7F078B6F280727666D10430B4FBD /* RDEPUBNoteDetector.swift */, + BE2A00DBD5096609160A1EBB511C0CF0 /* RDEPUBNoteModels.swift */, + 45019AE00B85C161910232F35A46E260 /* RDEPUBNoteResolver.swift */, ); - name = Pod; - sourceTree = ""; - }; - 2A9463A4BF9F567C49319E9C78E9F349 /* Paging */ = { - isa = PBXGroup; - children = ( - 4586D4C4B438CBC9C10C1F34CB6D2DF2 /* RDEpubReaderPagingController.swift */, - 48BC031A7181176F87178CB4438E1AA1 /* RDEpubReaderPreloadController.swift */, - 1BFC340D5D2F9CE3EB06CC05EDD71846 /* RDEpubReaderSpreadResolver.swift */, - F276E0C828D7E362E1AB740474DFD344 /* RDEpubReaderTapRegionHandler.swift */, - ); - name = Paging; - path = Paging; + name = Notes; + path = Notes; sourceTree = ""; }; 2CA280394B77BE3923FC19933C026113 /* ZIPFoundation */ = { @@ -1470,63 +1433,15 @@ path = "../Target Support Files/SnapKit"; sourceTree = ""; }; - 3A6523DB726E85A3F054E876972DB30B /* Typesetter */ = { + 4B02D3227E5D9E7F70981E0648FAAF3B /* Models */ = { isa = PBXGroup; children = ( - 5FE086C6878D5213AA4C991C42B28C72 /* RDEPUBAttachmentNormalizer.swift */, - 7892B716F556E5D9A1469662F4DBDDAA /* RDEPUBCFIMarkerInjector.swift */, - 6B69D525EF04515B4D7AC71279C59645 /* RDEPUBDecryptingImageAttachment.swift */, - 4C69F2BA771FBC9C0271A7B09439242D /* RDEPUBFontNormalizer.swift */, - 719923921751E2AFF9C080A34C67663F /* RDEPUBFragmentMarkerInjector.swift */, - 6E61E4FDE971D7EEF2F853F425A0336F /* RDEPUBHTMLNormalizer.swift */, - 0A0F81F9E370FEA72D49B06C783FA4DE /* RDEPUBRenderDiagnosticsCollector.swift */, - EB2C31F1487766829228BDB6DBF915F1 /* RDEPUBSemanticMarkerInjector.swift */, - 58591A875354C8532DFF2907CB056395 /* RDEPUBStyleSheetComposer.swift */, - 6B8F8BA870ACB6C7ACBDF945336D485C /* RDEPUBTextRendererSupport.swift */, - 03A6759BC4A2F6455311B40FC733C962 /* RDEPUBTypesettingPipeline.swift */, - BE3BB9DA791D18E373BF786FEF0939ED /* Compatibility */, + 34112F3165802F124416A83D4B7B15AA /* RDEPUBAnnotationModels.swift */, + A6D09BDBD02839781AC66D29F3611E41 /* RDEPUBPaginationModels.swift */, + 924A837FC3890B67B17DF9246FB39A4C /* RDEPUBReadingLocationModels.swift */, ); - name = Typesetter; - path = Typesetter; - sourceTree = ""; - }; - 4157B4B8F0440295C8356DB8A4BE1C70 /* Pagination */ = { - isa = PBXGroup; - children = ( - 734F2118247AB68A8A965BA63E8E7D6A /* RDEPUBChapterPageCounter.swift */, - 6FC121B9BD52BFEFB088D015A7D47845 /* RDEPUBCoreTextPageFrameFactory.swift */, - 37DBFE0446072C23DBEA71CC4A03B6FD /* RDEPUBPageBreakPolicy.swift */, - 3FC858070CE2793D286FCFD877306766 /* RDEPUBTextLayouter.swift */, - F9B856145AE64DF1C0DDC43555DE1BBB /* RDEPUBTextLayoutFrame.swift */, - 1B471B34FFCCCA17B5FBD65D6C44569F /* RDEPUBTextPaginationInterfaces.swift */, - 096F7D1110CB057D3FF288E71929D347 /* RDEPUBTextPaginationSupport.swift */, - ); - name = Pagination; - path = Pagination; - sourceTree = ""; - }; - 4168FFAA19982F98B8FD094179AEAB0C /* iOS */ = { - isa = PBXGroup; - children = ( - 4B96C04A8EF23BA144246390EC85DB60 /* CoreGraphics.framework */, - 85D568D485492AE28BE9D94F8380CD54 /* CoreImage.framework */, - EC6581B7BD334A42A3D4B0BB876361E5 /* CoreText.framework */, - 03656C13BA24A9D20544506E4F641802 /* Foundation.framework */, - F19ED99ABDCF88F81F05E71BECAD550E /* ImageIO.framework */, - E1E3C0347A8864AB95A590EC70FD5ABD /* MediaPlayer.framework */, - 09CBEF1B079E6DB8C0D954127E9FE36B /* QuartzCore.framework */, - 95BB29B9413EEF238033BA497FA4E551 /* Vision.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 4402B8B927ABC44C55D41E07055FC33B /* Development Pods */ = { - isa = PBXGroup; - children = ( - 8E96897634F89ADD8AEB26E62C133AAF /* RDEpubReaderView */, - EE60D33F73BFAE2CB750B235E0BBF81D /* RDPDFReaderView */, - ); - name = "Development Pods"; + name = Models; + path = Models; sourceTree = ""; }; 4B674E3B8239984DCF70FD510FCFF709 /* SnapKit */ = { @@ -1587,19 +1502,30 @@ name = Pods; sourceTree = ""; }; - 54BDE2AEC74D119850B215FB3EC02D80 /* Support Files */ = { + 4E5FF130AC100E8943729466CF529221 /* Pagination */ = { isa = PBXGroup; children = ( - 7FA9BBA625DCDA7FEAE9F7351F14BFF5 /* RDPDFReaderView.modulemap */, - 2C1EFE112AE9D15F54343784066B22ED /* RDPDFReaderView-dummy.m */, - C612565C2509C34BCBFF7389F34E6E54 /* RDPDFReaderView-Info.plist */, - 200DE6B837D5493FEA2710CC3B6577A0 /* RDPDFReaderView-prefix.pch */, - C7E6E05CB6C2547550C0AA979367DC6B /* RDPDFReaderView-umbrella.h */, - 2AD4C7470E6B9737E2206681E0352BAC /* RDPDFReaderView.debug.xcconfig */, - 9DFB708C4A48201B65DE1D2E16A1AF2A /* RDPDFReaderView.release.xcconfig */, + 81032F879C858B2A45DF02DCF7ED8E6A /* RDEPUBChapterPageCounter.swift */, + 54F7EED7DF4D198244A6D06C00CC3F00 /* RDEPUBCoreTextPageFrameFactory.swift */, + 359E871CA4A99767E938A99718B48F88 /* RDEPUBPageBreakPolicy.swift */, + D27A3BD8D86D036B86A90C4384EF483A /* RDEPUBTextLayouter.swift */, + 2185E45C320FFD388943A87A125FB42D /* RDEPUBTextLayoutFrame.swift */, + 508BA727504170CFC09B46B584079A86 /* RDEPUBTextPaginationInterfaces.swift */, + 1178601791D03F742CB349BE582223E2 /* RDEPUBTextPaginationSupport.swift */, ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDPDFReaderView"; + name = Pagination; + path = Pagination; + sourceTree = ""; + }; + 5CF51AAF204A51E43EC2F5A0358FE4D9 /* DocumentFormats */ = { + isa = PBXGroup; + children = ( + F3440F352D2E851EAA150592C9292D9F /* RDCBZReaderController.swift */, + E0E0892DD8B09BBF7E0234F6E258D6B5 /* RDMOBIParser.swift */, + 6E58C1EF4EC5E0B8E2B38CA2270B93E9 /* RDReaderDocumentFormat.swift */, + ); + name = DocumentFormats; + path = DocumentFormats; sourceTree = ""; }; 5D84EFCD32A12A50AB9692ACEF5C88EE /* DTFoundation */ = { @@ -1615,14 +1541,13 @@ path = DTFoundation; sourceTree = ""; }; - 601A548B5DA78399EBCC5E1FC2D0068F /* Notes */ = { + 67B330C87C949111FBD9B86FA4108CCA /* Paging */ = { isa = PBXGroup; children = ( - 724D0458DE1B4507BD7782A74DB0C3B1 /* RDEPUBNotePopupCoordinator.swift */, - 494A49C8C5EF7191537D252AE03671C2 /* RDEPUBNotePopupViewController.swift */, + 3DB723617A3D02BEBFBC7DD8E83D47E6 /* RDPDFReaderPagingController.swift */, ); - name = Notes; - path = Notes; + name = Paging; + path = Paging; sourceTree = ""; }; 68553AEBE09FBCACA2E3C5DA7EB11494 /* Resources */ = { @@ -1633,6 +1558,38 @@ name = Resources; sourceTree = ""; }; + 6AF68E04F5BCA966976C43F4B4A1FE63 /* Sources */ = { + isa = PBXGroup; + children = ( + 830E2FF68050B3931209AF2581249082 /* RDPDFKitPageProvider.swift */, + BC923AF5182183071C8C905DCFD0C5DC /* RDPDFReaderAnnotationEditorViewController.swift */, + C6954E717DF2A17466B5D30D25C12666 /* RDPDFReaderAnnotationListViewController.swift */, + EE5872817E44E6DDC2CF80A8297E5A47 /* RDPDFReaderChromeViews.swift */, + 2EDE0B4A3EB73E17912FEC91AECADBD6 /* RDPDFReaderContainerView.swift */, + 4AF75964868B86A27B63709439E9AF91 /* RDPDFReaderContracts.swift */, + BDFF6A065216B0DB4C460DB8E30D43AB /* RDPDFReaderDebugViewController.swift */, + 84B6EFF1EBD266465C28091AEDD73E0B /* RDPDFReaderDrawingCanvasView.swift */, + D2B596E0DC8B043ECE5DAEFEF7DD2EBC /* RDPDFReaderDrawingLayersView.swift */, + 1FDE32176816BC0A42D4B28D78235370 /* RDPDFReaderDrawingToolbar.swift */, + 034F5FDCBB44D08C5A68F8AB2B4777F1 /* RDPDFReaderHighlightOverlayView.swift */, + B3FC196B05ACAB99474CEA476B0CD195 /* RDPDFReaderImageTextLayerView.swift */, + 636AF7DBBCB7320FC883EAFE197EF923 /* RDPDFReaderImageTextRecognizer.swift */, + A5AAA2346B2236EB367432D8CD2FB317 /* RDPDFReaderKitView.swift */, + 5563F7DA776199803E76170B264676BE /* RDPDFReaderNavigationPanelViewController.swift */, + 4F61B106422AACE26C3C7B05C5293DCC /* RDPDFReaderNavigationView.swift */, + 4516C344651B4BAB7D3B3676952563AC /* RDPDFReaderPageView.swift */, + F57ADB5984DCA56EDF32CDB6B4A983DD /* RDPDFReaderPanelPresentation.swift */, + B7B712780654B2698F0379C758B2613E /* RDPDFReaderPersistenceStore.swift */, + 87A369FECC06D50D3068A665BCD42179 /* RDPDFReaderSettingsPanelViewController.swift */, + 1DE4839D4FBE796B7FDD121170DAD53A /* RDPDFReaderSettingsView.swift */, + 5B394C9C9A51160FF8B06D89C3147EDF /* RDPDFReaderTheme.swift */, + 5EC177D3B91E8E624750D11D7E09F3B6 /* RDPDFReaderViewController.swift */, + 47A01EEE1789F4E1A109C1B49D125E3F /* RDPDFZoomablePageView.swift */, + ); + name = Sources; + path = Sources; + sourceTree = ""; + }; 6F4044234426984401A57CF2DB1C7C47 /* Products */ = { isa = PBXGroup; children = ( @@ -1651,37 +1608,23 @@ name = Products; sourceTree = ""; }; - 79D5D808204BDE6BB479E6181BBA1237 /* ReaderController */ = { + 77642874661547D9559633730603385E /* ReaderView */ = { isa = PBXGroup; children = ( - F827FC838580CE1BE71A03555F9BCDF4 /* RDEPUBBackgroundCoverageStore.swift */, - 05E4852E5E5E06F38C185F78020B0739 /* RDEPUBBackgroundPriorityPolicy.swift */, - 9863B2725D2F1BB2A0DB1E8D6D5D5D7F /* RDEPUBJumpSession.swift */, - E6DC87AB92A31B288DFBEC314EBA61DB /* RDEPUBMemoryProbe.swift */, - 94E7C01CB644C1B2D394DD4030FC77FF /* RDEPUBMetadataParseCancellationController.swift */, - 70581F979E8449528CAE97C3AEEBAA1E /* RDEPUBMetadataParseWorker.swift */, - BF43112A9642930711240B85F895FBA4 /* RDEPUBPageMapReconciliationCoordinator.swift */, - 13D045D805EC093303C56E46F8714499 /* RDEPUBPresentationRuntime.swift */, - 38F0D9C8F739B1AD63F78DC6DB52E19F /* RDEPUBReaderAnnotationCoordinator.swift */, - 8269FADB6807B8D2C67418206DA0BD1A /* RDEPUBReaderAssemblyCoordinator.swift */, - 053B6B55A0AF584768D1654E4E8CD2A9 /* RDEPUBReaderChromeCoordinator.swift */, - D64AE1D37C74699EBE98C957AF7FF16E /* RDEPUBReaderContext.swift */, - DC54F4A57E211890551F91CCFAF4B59A /* RDEPUBReaderDependencies.swift */, - 508E7B0E537815AE336FE286AF553F1F /* RDEPUBReaderEnvironment.swift */, - 7A558E9A32F1A536976CBAECE6D15106 /* RDEPUBReaderLoadCoordinator.swift */, - F06C21F4D409CF92C76D4498B3134E8B /* RDEPUBReaderLocationCoordinator.swift */, - D7528E03B8934B146947FDF9147D7846 /* RDEPUBReaderPaginationCoordinator.swift */, - C330E74881B4D425F9A5780577A5C248 /* RDEPUBReaderRuntime.swift */, - AA153D679D524FF17574716601202C51 /* RDEPUBReaderSearchCoordinator.swift */, - F519C9FB96C0B36AF37F132A5E58427F /* RDEPUBReaderServices.swift */, - 4DBC82062B43BABA38B8DDCE7EF48841 /* RDEPUBReaderState.swift */, - F82DF9D2C16A6C1956D43123C5D5F9FC /* RDEPUBReaderUIState.swift */, - 17F534EF5E574026DACC1C5902876F9E /* RDEPUBReaderViewportMonitor.swift */, - ECBDEADA2700EFDE005F0303A97D272F /* RDEPUBSelectionState.swift */, - 8A139C38C4405BA9C4EAD8C8216E0733 /* ChapterRuntime */, + A76FEE9775014055776105D8698AE74E /* RDEpubReaderContentCell.swift */, + F3CF1BCEE24E319CEA749FF14F5C9D7E /* RDEpubReaderFlowLayout.swift */, + E74C786C11A2410677CDAEBF7DD1B4AD /* RDEpubReaderGestureController.swift */, + C764F1B6E5567DB91D1ABE809D25AB99 /* RDEpubReaderPageChildViewController.swift */, + 64394008B6544FFDF5097612472AEE24 /* RDEpubReaderView.swift */, + 6C877F262E89255B3135DE1E935D3246 /* RDEpubReaderView+CollectionView.swift */, + 2701BC5B247F7F1B1AF269EE0B553ED8 /* RDEpubReaderView+ContentAccess.swift */, + 94885CDA3F48C7BEEDD826129955D4D2 /* RDEpubReaderView+PageCurl.swift */, + 40F8654BEEBD1B51A4079D96899C140D /* RDEpubReaderView+ToolView.swift */, + 5088A729186A207F65C88E148F0392F4 /* RDEpubReaderViewProtocols.swift */, + BAC1AA0B57FFD6E0CEB4D6DE0C8E2EEA /* Paging */, ); - name = ReaderController; - path = ReaderController; + name = ReaderView; + path = ReaderView; sourceTree = ""; }; 7CA1F6C8239220E05E9A390877954050 /* DTAnimatedGIF */ = { @@ -1693,69 +1636,6 @@ name = DTAnimatedGIF; sourceTree = ""; }; - 821E982C235EF4AE6F500A8CD2B73A05 /* ReaderView */ = { - isa = PBXGroup; - children = ( - A06F5728AFE470F80BEAA4D7D554F4F1 /* RDEpubReaderContentCell.swift */, - 16CE21F4CD42CCA0279C894A63EA61D8 /* RDEpubReaderFlowLayout.swift */, - 338C871316C439906D847FF4ABCE7E26 /* RDEpubReaderGestureController.swift */, - 9E0663696AAC6407F79F316697D9A9A4 /* RDEpubReaderPageChildViewController.swift */, - 0FFB6BF7363A97A0F0CE998F9744D118 /* RDEpubReaderView.swift */, - 6F5D2B06C38C58089881AA69D11FAF6C /* RDEpubReaderView+CollectionView.swift */, - 228A48BF8210766EF3CFE0908D2E0C69 /* RDEpubReaderView+ContentAccess.swift */, - E05FACFD35497E37E245CBC7C261AB13 /* RDEpubReaderView+PageCurl.swift */, - B277BAEE25D9D6A3C5EB9E55B603BAD5 /* RDEpubReaderView+ToolView.swift */, - 3EBA7CE21BCB1D54C01820049786ADCD /* RDEpubReaderViewProtocols.swift */, - 2A9463A4BF9F567C49319E9C78E9F349 /* Paging */, - ); - name = ReaderView; - path = ReaderView; - sourceTree = ""; - }; - 82A2FB9A35EA092FFC1F24E6899FC0FB /* TextPage */ = { - isa = PBXGroup; - children = ( - B372C329258D1C49F5BF44F81AB0E237 /* RDEPUBChapterDisplayContentCache.swift */, - 628C845621A1AB074955F2238E35EE09 /* RDEPUBDarkImageAdjuster.swift */, - 6CDE71E415F7E3067F6C022EC10874CF /* RDEPUBPageInteractionController.swift */, - 0C76B9A7597F550A8E5A73D9A459B8CB /* RDEPUBPageLayoutSnapshot.swift */, - 207EF4D0FE030A80462834E8A489A6BE /* RDEPUBSelectionLoupeView.swift */, - 230105AB8EF7CFD998C6FF564482498E /* RDEPUBSelectionOverlayView.swift */, - F3351DB26E94A1B4929F19A6CD7DABD9 /* RDEPUBTextAnnotationOverlay.swift */, - F1A0D29FD3196A1FB2F83394AB355405 /* RDEPUBTextContentInteractionCoordinator.swift */, - 0A326047296C6BB35D531C82E494545D /* RDEPUBTextContentView.swift */, - D2135D16EDAFE4339D273F2575162C68 /* RDEPUBTextPageBoundaryValidator.swift */, - 7AA234CA89B983CD0BA2CF6D36282461 /* RDEPUBTextPageDecorationView.swift */, - 5ACB85E7827799CCF3DF86133CAD2D77 /* RDEPUBTextPageRenderView.swift */, - 70929B50B4324B914A30A8063AFA37A1 /* RDEPUBTextPageVerticalJustifier.swift */, - 1D3BD023700277ABFFDD468D4B86508A /* RDEPUBTextSelectionController.swift */, - ); - name = TextPage; - path = TextPage; - sourceTree = ""; - }; - 8A139C38C4405BA9C4EAD8C8216E0733 /* ChapterRuntime */ = { - isa = PBXGroup; - children = ( - D371DFD0FC419701C89C30AEAB5D78C0 /* RDEPUBBackgroundTrace.swift */, - 9F995C600287E46F60E33DA452E1C2F3 /* RDEPUBBookPageMap.swift */, - B4D747ACE10BD9D8BCED758A4A46AF52 /* RDEPUBChapterCacheKey.swift */, - 157AFFD84A5924FB4453156897B89901 /* RDEPUBChapterDataCache.swift */, - 548FE1785FF283BDEB6346F49C5A2F88 /* RDEPUBChapterLoader.swift */, - 550E94CB46C92A20F7D44770291517EA /* RDEPUBChapterLocation.swift */, - 09D2C6BAE2C63C338C7E9D27CB89170A /* RDEPUBChapterOffsetMap.swift */, - B7587FF81578DE5EC06D53194DE8B9F2 /* RDEPUBChapterRuntimeStore.swift */, - 303F1F1C7CAD8C3FFC1B0D2E49A7FA54 /* RDEPUBChapterSummaryDiskCache.swift */, - 60EF713631DB78343848058532C0AE06 /* RDEPUBChapterWarmupOrchestrator.swift */, - CEC56A9C84FA72CF9807C14A8F6F699B /* RDEPUBPageCountCache.swift */, - C699FF0C7478AADF0B16C444586156F8 /* RDEPUBPageResolver.swift */, - 921D3D8E1ACC8478C4C6220D14A612C5 /* RDEPUBRuntimeChapter.swift */, - 1B90920F144B60FF3A2640092C34C1E5 /* RDEPUBRuntimePageCount.swift */, - ); - name = ChapterRuntime; - path = ChapterRuntime; - sourceTree = ""; - }; 8ABEF91894658D3904F0DB438C040928 /* Support Files */ = { isa = PBXGroup; children = ( @@ -1772,37 +1652,34 @@ path = "../Target Support Files/DTCoreText"; sourceTree = ""; }; - 8CD09465C87A4C188FACE43812A27D04 /* Paging */ = { + 92ABBF90628E715301E38B1FE0110CC9 /* RDPDFReaderView */ = { isa = PBXGroup; children = ( - 8CF11AAFD2AE9015646F7EE3246E0E17 /* RDPDFReaderPagingController.swift */, + CDF44A36D7B12F11BD1411607DDF4E7C /* Pod */, + E04622974B1D25E1074FBDC80FEC41F0 /* ReaderView */, + 6AF68E04F5BCA966976C43F4B4A1FE63 /* Sources */, + FE435C6EC3B8B0869661E7503001D153 /* Support Files */, ); - name = Paging; - path = Paging; + name = RDPDFReaderView; + path = ../../Sources/RDPDFReaderView; sourceTree = ""; }; - 8E96897634F89ADD8AEB26E62C133AAF /* RDEpubReaderView */ = { + 94E9D80E89F979CA2006199F3D17F066 /* EPUBTextRendering */ = { isa = PBXGroup; children = ( - 6B29C1716D91E427023E6FA9B0FBF037 /* cssInjector.js */, - CCE7D4C320D8AE6645FBF46632A60DAB /* epub-bridge.js */, - 1E203C95DB51A1EA6741A61D8B307846 /* epub-fixed-layout.html */, - 234124B59F632D05E97E8C71430EBF90 /* rangy-core.js */, - A1605040E2F0212F9D5A73DCF69DA457 /* rangy-serializer.js */, - A31ACDA197724BC1B7D9B42D3B1C7522 /* WeReadApi.js */, - 108120864A7F26BBCD8D0ABD84BE7DFA /* wxread-dark.css */, - 6C66D6A919F91566D730A55A8FCE9B0A /* wxread-default.css */, - 92006F90F6EB856FCA69BDEF8608D40A /* wxread-replace.css */, - 1A86D6EC76230DDBDA6E2450454F9C94 /* wxread-replace-latin.css */, - 1698ACC033ECDDF8C08FBEFC1725327F /* EPUBCore */, - A289E328B9AB17B68AA8672311369E16 /* EPUBTextRendering */, - CC3942C0800FBE7AB953AA106C250C1F /* EPUBUI */, - D36E96EF18CD8589120CF8A2B39F2C8B /* Pod */, - 821E982C235EF4AE6F500A8CD2B73A05 /* ReaderView */, - 99B93890939755974364842A2BBEA6E2 /* Support Files */, + 930C3411505409ABE11F153B7A416991 /* RDEPUBChapterData.swift */, + 932004ABE6C86E9E2ED0030B979ED9FF /* RDEPUBDTCoreTextRenderer.swift */, + 933404827F6B057EB29BBDD6125374E4 /* RDEpubPlainTextBookBuilder.swift */, + 61FEB7BE16889FD8532441C936C01304 /* RDEPUBTextIndexTable.swift */, + 916630DBF02CC978ECEBBFD77F10FB65 /* RDEPUBTextPositionConverter.swift */, + EFEB0AF1FD346F25E44C810A469B78E1 /* RDEPUBTextRenderer.swift */, + 089966C3069A2468CA1E889EB69E74A7 /* RDEPUBTextSearchEngine.swift */, + F4ABFCA5463D9D2536BD19ADE48A0E9D /* BuildPipeline */, + 4E5FF130AC100E8943729466CF529221 /* Pagination */, + AE3EBB65F97E2C9FE94518C1A088601B /* Typesetter */, ); - name = RDEpubReaderView; - path = ../../Sources/RDEpubReaderView; + name = EPUBTextRendering; + path = EPUBTextRendering; sourceTree = ""; }; 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */ = { @@ -1813,54 +1690,69 @@ name = "Targets Support Files"; sourceTree = ""; }; - 99B93890939755974364842A2BBEA6E2 /* Support Files */ = { + 9CECC4167508D16F7FB1F7E19349BA76 /* TextPage */ = { isa = PBXGroup; children = ( - 492237C138740EC84E20660F395A1046 /* RDEpubReaderView.modulemap */, - 45E0BB5F74AD3A79CEC11519134A7931 /* RDEpubReaderView-dummy.m */, - D5B415C0B230E1471E23C9B037EC7E2A /* RDEpubReaderView-Info.plist */, - 13FDD64A4BCF5D1074F108875FD35B17 /* RDEpubReaderView-prefix.pch */, - E3F1D7684E9910C3A3D916BD2B58BE27 /* RDEpubReaderView-umbrella.h */, - 50D9E1C1D838BADF3D6BF9072FA237FD /* RDEpubReaderView.debug.xcconfig */, - 5ACB52162952848C6A801C079CB9CCC7 /* RDEpubReaderView.release.xcconfig */, - C840FD76BB93F898AF93E8BD842DFE09 /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */, + E1308D476F85ACCA10D54AF2ED9B34BE /* RDEPUBChapterDisplayContentCache.swift */, + B4B83042E21707CE00778B566E8CB805 /* RDEPUBDarkImageAdjuster.swift */, + 257E3A6D94EB339AF710CBA1515719DC /* RDEPUBPageInteractionController.swift */, + 318A173BC4548B559258A9FE99D42742 /* RDEPUBPageLayoutSnapshot.swift */, + 53AF19D77192D711E50E669495472086 /* RDEPUBSelectionLoupeView.swift */, + 9EC5B30703AA81763AA7A3A2A5A1C9CA /* RDEPUBSelectionOverlayView.swift */, + 2FF34F8FF314B2B52DA562E7160E9AFD /* RDEPUBTextAnnotationOverlay.swift */, + 3A59ED3F13A984E625FF8F6639060AC0 /* RDEPUBTextContentInteractionCoordinator.swift */, + 06D8D0804A9C685D066179823080D2E5 /* RDEPUBTextContentView.swift */, + E6BD7E7A08332F631D063AEBB4DD8F7C /* RDEPUBTextPageBoundaryValidator.swift */, + 8F3756D5F4282ABEF00423938EAF6DE2 /* RDEPUBTextPageDecorationView.swift */, + BECF37BB61D57665E8B2439D3B326503 /* RDEPUBTextPageRenderView.swift */, + 7D41D5F7E42BDEF71C2CD08D7E019C1D /* RDEPUBTextPageVerticalJustifier.swift */, + 296DC86D94CA633F2A0697072F76F90D /* RDEPUBTextSelectionController.swift */, ); - name = "Support Files"; - path = "../../ReadViewDemo/Pods/Target Support Files/RDEpubReaderView"; + name = TextPage; + path = TextPage; sourceTree = ""; }; - 9C36D2594205D801AC6EDCE203664A09 /* BuildPipeline */ = { + 9D970EBA1BA40EC64171E66F3B136F81 /* Notes */ = { isa = PBXGroup; children = ( - 226DFBAF9E02071AE8F79A02E72EB4F7 /* RDEPUBBuildDiagnosticsReporter.swift */, - 1ED039739CBB08894FE27469D1AFAAF0 /* RDEPUBChapterTailNormalizer.swift */, - 1184A290DF3FEBC82B95EAC0B173D4F0 /* RDEPUBPaginationCacheCoordinator.swift */, - B3CB5C8EE9C521C9C45EB7D6A7EBA941 /* RDEPUBTextBookBuilder.swift */, - 87A0721FFCC0ECB01A9AA521BFBF7C2E /* RDEPUBTextBookCache.swift */, - D3AE1FFC202446FD757A48580E35F97F /* RDEPUBTextBookModels.swift */, - CEF0F0E8E0EAF84CAF398E3F459CBEC8 /* RDEPUBTextBuildPipelineInterfaces.swift */, - E47640ACB9437F479CF434FB6DEF3603 /* RDEPUBTextPerformanceSampler.swift */, + D597E864BC3B6215B502FC3B05C13364 /* RDEPUBNotePopupCoordinator.swift */, + 6EF4435215EDB7548944507506D0A4C9 /* RDEPUBNotePopupViewController.swift */, ); - name = BuildPipeline; - path = BuildPipeline; + name = Notes; + path = Notes; sourceTree = ""; }; - A289E328B9AB17B68AA8672311369E16 /* EPUBTextRendering */ = { + A1F674084BE06F873B68AA9765E155DE /* Compatibility */ = { isa = PBXGroup; children = ( - E18E6E8D39404427745CE696526DE777 /* RDEPUBChapterData.swift */, - CBCFAAE0163F224D1A5AADD2408E9811 /* RDEPUBDTCoreTextRenderer.swift */, - FCA56243CDDB901C3906DC4B542787B9 /* RDEpubPlainTextBookBuilder.swift */, - 7FFF22C518787CDED7AE164DE4635617 /* RDEPUBTextIndexTable.swift */, - BA822947B8B2C54ED946D86C7736AB5D /* RDEPUBTextPositionConverter.swift */, - 4004BFA54E3225403BC0BABBA2F1FF12 /* RDEPUBTextRenderer.swift */, - 6695E46F0A0838241051951EDE4FDE8F /* RDEPUBTextSearchEngine.swift */, - 9C36D2594205D801AC6EDCE203664A09 /* BuildPipeline */, - 4157B4B8F0440295C8356DB8A4BE1C70 /* Pagination */, - 3A6523DB726E85A3F054E876972DB30B /* Typesetter */, + 0594E39D9568D488378ADCB812715321 /* RDEPUBCSSCompatibilityLayer.swift */, + FB1FB4D69D71D0D1B4C5749FE44F4DA8 /* RDEPUBFontFallbackResolver.swift */, + 3E2EA68BCB5C16362AF8A87E6BED539C /* RDEPUBStyleCompatibilityModels.swift */, ); - name = EPUBTextRendering; - path = EPUBTextRendering; + name = Compatibility; + path = Compatibility; + sourceTree = ""; + }; + A49CE1BC027ECB5B0D06251AC9EC97A6 /* CFI */ = { + isa = PBXGroup; + children = ( + 8D1DCB390ECBFC669909F9181A3FE8B0 /* RDEPUBCFI.swift */, + 49BEE692A99D3F6541F6A273A49A865D /* RDEPUBCFICompatibility.swift */, + 579B4F428B2ACA84D95B05569FE72F1A /* RDEPUBCFIDOMPathBuilder.swift */, + 49F4B0888234A678C5FF3E5866E73021 /* RDEPUBCFIError.swift */, + 1E7DF84037D55273D99B5284EDE7F7FC /* RDEPUBCFIGenerator.swift */, + FD69D7E6008EE4ABAB3B5DC7AA868A15 /* RDEPUBCFIMap.swift */, + C26F63F750A573082295256163B7B3F7 /* RDEPUBCFIParser.swift */, + DC04C30BD0D2F6408EB5B8054F36B4F2 /* RDEPUBCFIPath.swift */, + FCEAC930B7FAD0BFD2BF58A81C1B82C6 /* RDEPUBCFIRange.swift */, + F09DDC12AA1A0CD529F310E5CE0F99A1 /* RDEPUBCFIRecoveryEngine.swift */, + 88FCFBF2D7F2A0C26D1FBF5161035517 /* RDEPUBCFIResolver.swift */, + D984CA4AF47D4219E0FB6506CD7D2C27 /* RDEPUBCFISerializer.swift */, + C351D0643D777D8082434A64A04B7312 /* RDEPUBCFITextAssertion.swift */, + 244A0250D275B067EFA790D022396B24 /* RDEPUBCFIUtilities.swift */, + ); + name = CFI; + path = CFI; sourceTree = ""; }; A621C86DBEEBABB5DCCB206A343F5945 /* DTCoreText */ = { @@ -2000,6 +1892,51 @@ path = DTCoreText; sourceTree = ""; }; + ACE9EC81EC6D670D075A6387E895F1EC /* RDEpubReaderView */ = { + isa = PBXGroup; + children = ( + 71751F490BDBE080BDE46E24BD09DC25 /* cssInjector.js */, + B3F4461DF9B7620283F97023A78C08D8 /* epub-bridge.js */, + AED29B787D83E9C4459430CDE0DB612A /* epub-fixed-layout.html */, + C48F11FB4EFE57B4DED13881F78ED4A8 /* rangy-core.js */, + 2F23F0E002BEE47B1E786821D96067E4 /* rangy-serializer.js */, + 14BBECB3A6235FDD72CE46FBCD08FE3C /* WeReadApi.js */, + 5ECBBE5C440153A7C6B87D92B16289B0 /* wxread-dark.css */, + 1D7343E0F0547D801BC11E2D708AA33A /* wxread-default.css */, + C4701A7F7E553E7824903F43562AFC19 /* wxread-replace.css */, + BE9EC25AFCAE91B4EA5A1DDD5FE564DD /* wxread-replace-latin.css */, + 5CF51AAF204A51E43EC2F5A0358FE4D9 /* DocumentFormats */, + C48850EA7D5AA97D7433CC6AC925D959 /* EPUBCore */, + 94E9D80E89F979CA2006199F3D17F066 /* EPUBTextRendering */, + C1C8C1213789AAA7171C30160874422B /* EPUBUI */, + 12AA3A987A0426F2462A865D2B48B81A /* Pod */, + 77642874661547D9559633730603385E /* ReaderView */, + F20A30A149F873CE03DAAB1A694007CD /* Support Files */, + ); + name = RDEpubReaderView; + path = ../../Sources/RDEpubReaderView; + sourceTree = ""; + }; + AE3EBB65F97E2C9FE94518C1A088601B /* Typesetter */ = { + isa = PBXGroup; + children = ( + C6B4FC527668E1E4A43F77E5D5B034EF /* RDEPUBAttachmentNormalizer.swift */, + C70BC146F77AE5CE624A06A7946C1703 /* RDEPUBCFIMarkerInjector.swift */, + E02FC3DBD9707CA1A2C087E36DEBDFF8 /* RDEPUBDecryptingImageAttachment.swift */, + 6FCABB4D698319B7BD34E6F1984C6C81 /* RDEPUBFontNormalizer.swift */, + C7FC439421769A5FC6884F5135ABAF08 /* RDEPUBFragmentMarkerInjector.swift */, + 54B4C37E4A452238A2B3D65A483FF624 /* RDEPUBHTMLNormalizer.swift */, + CB985E900E9F34170BD44A81E7FD1C83 /* RDEPUBRenderDiagnosticsCollector.swift */, + B36A4B649DD5CA1C5D4DAFC54E0E13DC /* RDEPUBSemanticMarkerInjector.swift */, + 2ADB2BD72FA5B1DA4D59440FFC04DE2C /* RDEPUBStyleSheetComposer.swift */, + 5F2315273E8A0E225152D3BBBD8441AA /* RDEPUBTextRendererSupport.swift */, + 5AC70C974C448660DF34C7FBA424FD78 /* RDEPUBTypesettingPipeline.swift */, + A1F674084BE06F873B68AA9765E155DE /* Compatibility */, + ); + name = Typesetter; + path = Typesetter; + sourceTree = ""; + }; B463807D92B5853C009524A41B5F7B6D /* Core */ = { isa = PBXGroup; children = ( @@ -2047,6 +1984,52 @@ name = Core; sourceTree = ""; }; + B693261E4FA6A82FD11B40B7E7BD4958 /* Settings */ = { + isa = PBXGroup; + children = ( + 92AA4E9E3B871C30A1C7BF9141CD9770 /* RDEPUBReaderConfiguration.swift */, + 7CE5B910E4B90BDD78B2747C7184C745 /* RDEPUBReaderSettings.swift */, + D18CE46766B67622CBA19146529FE7AD /* RDEPUBReaderSettingsViewController.swift */, + 8F65D6C8950F76034AD414199E8D4C2E /* RDEPUBReaderTheme.swift */, + ); + name = Settings; + path = Settings; + sourceTree = ""; + }; + BAC1AA0B57FFD6E0CEB4D6DE0C8E2EEA /* Paging */ = { + isa = PBXGroup; + children = ( + 69252E848F3036D84BCE5A09B0544390 /* RDEpubReaderPagingController.swift */, + 101E8704978C7417FCD99D18764F42B6 /* RDEpubReaderPreloadController.swift */, + 53BD308DABD26A8A8B9CC272486D6EB0 /* RDEpubReaderSpreadResolver.swift */, + 05A48723D29BFECCDE51DE4E1CABDD67 /* RDEpubReaderTapRegionHandler.swift */, + ); + name = Paging; + path = Paging; + sourceTree = ""; + }; + BB63F9A378E1403079A93D9C2C038091 /* ChapterRuntime */ = { + isa = PBXGroup; + children = ( + 78B720430DB36E3E3D207599DC78CCF1 /* RDEPUBBackgroundTrace.swift */, + B9E2296EBB237D8071B8280E81601AE2 /* RDEPUBBookPageMap.swift */, + 37946E93F2D5F5FF5392FCC3BF0F9424 /* RDEPUBChapterCacheKey.swift */, + FF56076797358B800EE1C35C5FB6360B /* RDEPUBChapterDataCache.swift */, + 59FBE51D9C334D6C796944A37A36FA0B /* RDEPUBChapterLoader.swift */, + D6A2D1BF70F1C6B7354AC88C3DC52656 /* RDEPUBChapterLocation.swift */, + 557386F3232CE41AD7A21D1D0C412FC0 /* RDEPUBChapterOffsetMap.swift */, + 6B56088831DB283C0FCC800A365BA5B2 /* RDEPUBChapterRuntimeStore.swift */, + B15FA2EA6F88DB9AE0FB9356EC5B515C /* RDEPUBChapterSummaryDiskCache.swift */, + 4977ECD606F12A1293FCF0EF36934E5E /* RDEPUBChapterWarmupOrchestrator.swift */, + BFB4A8DFD2E0EE6D2285B69A5BEA0CBE /* RDEPUBPageCountCache.swift */, + 7340AFD453A481A52CFFC7C7D8C50B87 /* RDEPUBPageResolver.swift */, + F53A99F5B071BEA755E7344615C5D4FD /* RDEPUBRuntimeChapter.swift */, + F7AAEDE9AFDB7C593B3B29F05A8A9702 /* RDEPUBRuntimePageCount.swift */, + ); + name = ChapterRuntime; + path = ChapterRuntime; + sourceTree = ""; + }; BC94BBA575D65BD789B3BBC38F35DA38 /* Support Files */ = { isa = PBXGroup; children = ( @@ -2063,75 +2046,104 @@ path = "../Target Support Files/ZIPFoundation"; sourceTree = ""; }; - BE3BB9DA791D18E373BF786FEF0939ED /* Compatibility */ = { + C1C8C1213789AAA7171C30160874422B /* EPUBUI */ = { isa = PBXGroup; children = ( - 2EA962A821F566BC34551F4FAA569478 /* RDEPUBCSSCompatibilityLayer.swift */, - EC17096445F0AAEFBD5F4BA3875E1A78 /* RDEPUBFontFallbackResolver.swift */, - 74F0FEF736604ACC8C2EA61D24BAAAAE /* RDEPUBStyleCompatibilityModels.swift */, - ); - name = Compatibility; - path = Compatibility; - sourceTree = ""; - }; - C2236B99045D4AF0D628093A2AF07781 /* Notes */ = { - isa = PBXGroup; - children = ( - 011C2BAB67F18C829B4038BED71596C9 /* RDEPUBNoteDetector.swift */, - 7E5D96C4E8D4900AD2681A58A3819F72 /* RDEPUBNoteModels.swift */, - 0A73DC1F76E6DD9A58DA0217EBA5FC03 /* RDEPUBNoteResolver.swift */, - ); - name = Notes; - path = Notes; - sourceTree = ""; - }; - CC3942C0800FBE7AB953AA106C250C1F /* EPUBUI */ = { - isa = PBXGroup; - children = ( - F1F75A2E00B511750B5DE5A7F28B7738 /* RDEPUBAnnotationEditorViewController.swift */, - B79D3DB96F14BE31474079E9E88FB6A7 /* RDEPUBAttachmentTooltipOverlayView.swift */, - 42FC8DF7301C6E48B74EE20C58A049EB /* RDEPUBAttachmentTooltipView.swift */, - 7712769A1FFD45BC054467C55547248F /* RDEPUBImageViewController.swift */, - E05A32054F050060822F49BB8707B792 /* RDEPUBImageViewerCoordinator.swift */, - 384FDFD5C48BA25500437AF93ED575C9 /* RDEPUBReaderBottomToolView.swift */, - BAFCF35759F6130F534D4138AECDBC8E /* RDEPUBReaderChapterListController.swift */, - AC7B6AA174033D137FA1A052F40E2FDD /* RDEPUBReaderController.swift */, - 8EF845DBD3C48E620CC2304C2731C207 /* RDEPUBReaderController+AttachmentTooltip.swift */, - 7CC9E976C6DEB0AC4CB1FC2E1AC8C0F0 /* RDEPUBReaderController+ContentDelegates.swift */, - DDAC1D10BF65035581AF2F9821CA2835 /* RDEPUBReaderController+DataSource.swift */, - 6E15CE4CE4C23075DE1010D6FCD65BF6 /* RDEPUBReaderController+ExternalLinks.swift */, - 5C3650434CBDCDDC9405E62BDFBCEBB7 /* RDEPUBReaderController+LocationResolution.swift */, - C8C69D03B5519293DC977F7E46AA9BFE /* RDEPUBReaderController+Orientation.swift */, - D5E005150A64B16EA98048A15B8A4631 /* RDEPUBReaderController+PublicAPI.swift */, - ACD3AD31D03AC7EBCBD762EBB73D0E59 /* RDEPUBReaderController+RenderSupport.swift */, - 7CE186B9F292E96FE1D65B18B4B7E607 /* RDEPUBReaderController+RuntimeBridge.swift */, - 185F2084811059CBD2C4B4D01E593D7B /* RDEPUBReaderController+TableOfContents.swift */, - 683946BB28C88E77187DB918AF14A8BB /* RDEPUBReaderController+Trial.swift */, - 1D02B121F8A30E42AEE560BF7A112E44 /* RDEPUBReaderDelegate.swift */, - 86172F915BDAB5EC68B8CB7BF50084E3 /* RDEPUBReaderHighlightsViewController.swift */, - 2E8311A315E4A83FC7A16613F723CC97 /* RDEPUBReaderPersistence.swift */, - AE58D216D4E69D486F0AB4AC5F71518A /* RDEPUBReaderSearchBarView.swift */, - 983B628249A36DFF4CF081B8DF100553 /* RDEPUBReaderTableOfContentsItem.swift */, - FC8877FCA14B6646C4FEF59A3B0F1ACE /* RDEPUBReaderToolView.swift */, - CA1ED4036FD80E30C31C2BDBF09F72E9 /* RDEPUBReaderToolViewProtocols.swift */, - 96E1140CDDCC684CA4C6CDEB3E012E35 /* RDEPUBReaderTopToolView.swift */, - 1EA7017C03F5D375D7A04B7DF7B3FC64 /* RDEPUBSettingsFlipAutomation.swift */, - 114D34F41964E50EAD1D75520E8D9A65 /* RDEpubURLReaderController.swift */, - C5974AECFECE8D60F316936780D22DD9 /* RDEPUBViewportTypes.swift */, - BA6DD4FDA389DB9F4C8F97B054C10AAF /* RDEPUBWebContentView.swift */, - D5DB4208378CCE8CB855A1C6DA724AD5 /* RDEPUBWebDecorationOverlayView.swift */, - 0EDC8F9C8C06865DCF84B2F460F2DB55 /* String+RDEPUB.swift */, - C1D05F5421885C5D856CB4AFF76DF543 /* UIColor+RDEPUB.swift */, - 8E79DB6AFFD86EF0579829BED1166B24 /* UIColor+RDEPUBHex.swift */, - 601A548B5DA78399EBCC5E1FC2D0068F /* Notes */, - 79D5D808204BDE6BB479E6181BBA1237 /* ReaderController */, - ECB9D6A2C3CAD15DF0A39161742BD32D /* Settings */, - 82A2FB9A35EA092FFC1F24E6899FC0FB /* TextPage */, + 3FE0B907BC40F5886B5D8761C8E1C984 /* RDEPUBAnnotationEditorViewController.swift */, + 298E057B5F44628E4EE593F1513E95A6 /* RDEPUBAttachmentTooltipOverlayView.swift */, + 767016761BF5B8D57595E288BC501BF7 /* RDEPUBAttachmentTooltipView.swift */, + C4E616B199145721C28A90BE0D21C98B /* RDEPUBImageViewController.swift */, + B977B258211F447182E6FA36952EA842 /* RDEPUBImageViewerCoordinator.swift */, + BBD91BDB14FD6C89E095E237DC0F37A7 /* RDEPUBReaderBottomToolView.swift */, + 9C5C5D2EF233B42FA8D3BCF06713DF42 /* RDEPUBReaderChapterListController.swift */, + 1697531DEC18EA6F9B99D0146C015338 /* RDEPUBReaderController.swift */, + 9862A154F02C241514009AD44CC3567B /* RDEPUBReaderController+AttachmentTooltip.swift */, + 57F1B61908D2C1EBC6471CC6E9B90A4C /* RDEPUBReaderController+ContentDelegates.swift */, + 8B1B27CD14A9E7FB6895C4F6F2E70179 /* RDEPUBReaderController+DataSource.swift */, + D730579455F74FB03C7E8A4E50484823 /* RDEPUBReaderController+ExternalLinks.swift */, + B6FC740435D649A1BF4303E48F85889C /* RDEPUBReaderController+LocationResolution.swift */, + 4D4D4F7D2C3A548F609164CC506388BE /* RDEPUBReaderController+Orientation.swift */, + CD9D544D3DF2CDAE5B6EECFF892BD9F5 /* RDEPUBReaderController+PublicAPI.swift */, + 8E5DEEA6A9CEFC805D050932E03E1A21 /* RDEPUBReaderController+RenderSupport.swift */, + 76244BD19BB5CB592A5EB99402C94A45 /* RDEPUBReaderController+RuntimeBridge.swift */, + C9D1B125AA5600F835F9AB456100B5BC /* RDEPUBReaderController+TableOfContents.swift */, + 79D6E6B825D0F311663E6A9EFA5D2A7F /* RDEPUBReaderController+Trial.swift */, + E242368DFEDB6BD27EDA8C0E5915D6F5 /* RDEPUBReaderDelegate.swift */, + CB6B2A6C61E6FB95968A8366924DE033 /* RDEPUBReaderHighlightsViewController.swift */, + 3085A431A30E4E2DC3F5E4CAFBA83B5D /* RDEPUBReaderPersistence.swift */, + 197D0C3E827B624F40FB510F3BD8A906 /* RDEPUBReaderSearchBarView.swift */, + D7D294019CB6322021FE87237FA56DA3 /* RDEPUBReaderTableOfContentsItem.swift */, + 499B927AB070F064B0E8A012382003F1 /* RDEPUBReaderToolView.swift */, + 82C4B8E3666736C72FD8AA9774095CD5 /* RDEPUBReaderToolViewProtocols.swift */, + D86146C71353D766AED457B0B59F13E3 /* RDEPUBReaderTopToolView.swift */, + 0CABC6F6EBE38588FD08D8CDF4EAF88F /* RDEPUBSettingsFlipAutomation.swift */, + F88EAEAB89867B1405011D65F95E4F64 /* RDEpubURLReaderController.swift */, + 2CF7C6BEE1CB54D2546C94E58BEE0EC6 /* RDEPUBViewportTypes.swift */, + 34407B046ADF145B3DA08FE4C28609C6 /* RDEPUBWebContentView.swift */, + 5AAE327FF1505A989454CFB6BE8D5056 /* RDEPUBWebDecorationOverlayView.swift */, + A00A7D3C70A06A1D06B0EF2D25AA3DC8 /* String+RDEPUB.swift */, + DE5B47B33D7F759C3CD6BEDA1A69185D /* UIColor+RDEPUB.swift */, + A24CED4F43EC2C2F55A6512A761B97B9 /* UIColor+RDEPUBHex.swift */, + 9D970EBA1BA40EC64171E66F3B136F81 /* Notes */, + E07D4D63009D077C1166DC1CD5BB5FEB /* ReaderController */, + B693261E4FA6A82FD11B40B7E7BD4958 /* Settings */, + 9CECC4167508D16F7FB1F7E19349BA76 /* TextPage */, ); name = EPUBUI; path = EPUBUI; sourceTree = ""; }; + C48850EA7D5AA97D7433CC6AC925D959 /* EPUBCore */ = { + isa = PBXGroup; + children = ( + 6F37E867DE563EFD505DBB674F4FDDF6 /* RDEPUBAssetRepository.swift */, + C3BA5BC80827B5E54253367E574D3623 /* RDEPUBFixedLayoutTemplate.swift */, + 47856474DDE696BF61255DF73D2D799D /* RDEPUBJavaScriptBridge.swift */, + 79D75F4A7A02692556E18AC3A388A190 /* RDEPUBModels.swift */, + 89DEA6EF4DB86448B595CCB2ACC06C97 /* RDEPUBNavigatorLayoutContext.swift */, + 90FED6AA55769B0F41A57155366E801D /* RDEPUBPaginator.swift */, + 5D82EEDCF29F3E5B37BEA5191F49610E /* RDEPUBParser.swift */, + D815A3BEB1A8F3959502A4B87558549C /* RDEPUBParser+Archive.swift */, + 1CC0B71EB8AFFDB330E0D8E99CFFCDD3 /* RDEPUBParser+Package.swift */, + 2C37E4DD39F7CDCFA4C0776B8CAB60A7 /* RDEPUBParser+ReadingProfile.swift */, + 4D4997C97BB58CF60B165D1BD0C31985 /* RDEPUBParser+Resources.swift */, + 8B808EF921BB59C1A78691D36ECC666B /* RDEPUBParser+TOC.swift */, + 016C4701210031B8CBC8C4C2D03DB357 /* RDEPUBPreferences.swift */, + 24818987BA7C833972E50A1921661271 /* RDEPUBPublication.swift */, + 422C9DACF0702754BAAA0A37E8A0D4F9 /* RDEPUBReadingSession.swift */, + DC7EF3FC064B375733390FA3799A617B /* RDEPUBRenderRequest.swift */, + 9CC380EF32AB6FB2395CF0B9E62F3317 /* RDEPUBResourceDataProvider.swift */, + 2193B99AFE9594D920D7CA76190FFC8E /* RDEPUBResourceResolver.swift */, + 3822FA364A35F16FFA9D2AAE31E22EF0 /* RDEPUBResourceURLSchemeHandler.swift */, + F766A861EB3484C3C519700E104BF91B /* RDEPUBSafeArea.swift */, + ECBD2FB74FE0B1966256CD0C39BF1F83 /* RDEPUBSearchEngine.swift */, + CA7B6B7B55D1E706B41644DDA956D2CA /* RDEPUBSearchModels.swift */, + C24DC0DF11DB45CDC92395B3EA2689B5 /* RDEPUBStyleSheetBuilder.swift */, + 5D9886E67C654192303F817E356E9C60 /* RDEPUBTextAnchor.swift */, + D752B202581818FDFBB68CDD7FA75213 /* RDEPUBWebView.swift */, + 13FF31007A05E5706CF26F9BC9DBD462 /* RDEPUBWebView+Configuration.swift */, + 54F55F21A6B7661A8D560DB1557E6B97 /* RDEPUBWebView+FixedLayout.swift */, + 92790B32EB81BDF75E8ACD8E3C4BBE10 /* RDEPUBWebView+JavaScriptBridge.swift */, + D9FE68DE46E8F50DDA44B5EF63ABC67A /* RDEPUBWebView+Reflowable.swift */, + BFCB5D51A2FE9AE00599C8B10A728AC7 /* RDEPUBWebView+Search.swift */, + 1E68AD352C43FD90827957D8073F835A /* RDEPUBWebViewDebug.swift */, + A49CE1BC027ECB5B0D06251AC9EC97A6 /* CFI */, + 4B02D3227E5D9E7F70981E0648FAAF3B /* Models */, + 283A5FB1D5F251D92061976EF101E7A4 /* Notes */, + ); + name = EPUBCore; + path = EPUBCore; + sourceTree = ""; + }; + CDF44A36D7B12F11BD1411607DDF4E7C /* Pod */ = { + isa = PBXGroup; + children = ( + 07206349472D73174829CAD2B189B5FF /* RDPDFReaderView.podspec */, + 4D468DB9B31EA67BD86A1A48BE74733A /* README.md */, + ); + name = Pod; + sourceTree = ""; + }; CE79C46AB83D5ADB696E51F586C0BD5B /* Support Files */ = { isa = PBXGroup; children = ( @@ -2151,37 +2163,77 @@ isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 4402B8B927ABC44C55D41E07055FC33B /* Development Pods */, - F119B4A0ABE017AECEE69836596133B2 /* Frameworks */, + 0BBAC52764CEAE2020B3D2FD7E8CA22F /* Development Pods */, + 0656CE04288357F0748AB498835BA03E /* Frameworks */, 4DEB1352F0064F93A274DDB2378895FC /* Pods */, 6F4044234426984401A57CF2DB1C7C47 /* Products */, 994C39A644C0722C7A9E97AB46DB8965 /* Targets Support Files */, ); sourceTree = ""; }; - D36E96EF18CD8589120CF8A2B39F2C8B /* Pod */ = { + DAC1DE7BF5C2D9CBABA8F20B8B79EAE1 /* iOS */ = { isa = PBXGroup; children = ( - 85F17808123CD4EC70FA9F0E2C8C115C /* RDEpubReaderView.podspec */, - 43E6455DEB4A4191D074A5CEED3BC2CE /* README.md */, + B6677A5CD728A7E722DC3075C374CDF4 /* CoreGraphics.framework */, + 04DF49B738958596E47F57961FA3A69A /* CoreImage.framework */, + 63482DC4A15D66980EFBAA222D2D6CA8 /* CoreText.framework */, + D8CFFED8482DB33A1FCB300586CD3AFA /* Foundation.framework */, + B0AC91254785C4B0B73D391B603ADE47 /* ImageIO.framework */, + 3A71A099FDBC70A51AE773741C33A4AC /* MediaPlayer.framework */, + 232BAE44CA9BE28B729B402BC8B8FAD8 /* PDFKit.framework */, + 50AE5BE674D885BED9B796FE8D97FAF8 /* QuartzCore.framework */, + 9F3DE5DDD4D63B6FB5FEADA0E292CB33 /* Vision.framework */, ); - name = Pod; + name = iOS; sourceTree = ""; }; - DF6913CF284F0970B31DD7116DD32A97 /* ReaderView */ = { + E04622974B1D25E1074FBDC80FEC41F0 /* ReaderView */ = { isa = PBXGroup; children = ( - 5B61DAFDEE306ACC7BD87261D5E513F3 /* RDPDFReaderContentCell.swift */, - B2604E9D64804DC4A2CA43E0C668DEAC /* RDPDFReaderPageChildViewController.swift */, - AF7CF50D52DCA13C2251358552DAAD3C /* RDPDFReaderView+CollectionView.swift */, - 6A30F39D52BFC67B9904B0F6954CCEFE /* RDPDFReaderView+Paging.swift */, - 691EBEEADC8CDB5F06340114374ED848 /* RDPDFReaderView+ToolView.swift */, - 8CD09465C87A4C188FACE43812A27D04 /* Paging */, + 15FA72422C7B69BBA7D5B3CFF098CCE5 /* RDPDFReaderContentCell.swift */, + D1057324B30CCD038ABC27688B0DC6A3 /* RDPDFReaderPageChildViewController.swift */, + DD002812D1D11866A93FEFB5024D5DA0 /* RDPDFReaderView+CollectionView.swift */, + E3BF1AFD43CD35EDA59ED119955FAC96 /* RDPDFReaderView+Paging.swift */, + 671C2212E0B20B47CA0A56D7138411B1 /* RDPDFReaderView+ToolView.swift */, + 67B330C87C949111FBD9B86FA4108CCA /* Paging */, ); name = ReaderView; path = ReaderView; sourceTree = ""; }; + E07D4D63009D077C1166DC1CD5BB5FEB /* ReaderController */ = { + isa = PBXGroup; + children = ( + 8F533FF48C81C0B1684CA895D72C646F /* RDEPUBBackgroundCoverageStore.swift */, + 46D6BA3E651245BCC8808128EF553958 /* RDEPUBBackgroundPriorityPolicy.swift */, + BEAE3FA90F67CCE6CFC228B56189BD20 /* RDEPUBJumpSession.swift */, + EE8ABB198220CF4FE67049FE2349947A /* RDEPUBMemoryProbe.swift */, + 4A230A3524DED0923CEC303B4C54C833 /* RDEPUBMetadataParseCancellationController.swift */, + 7CCE92FD9E1B88BD2FE582C98A4AE8EC /* RDEPUBMetadataParseWorker.swift */, + 898D56C24CC6E71662D88243FD4A030E /* RDEPUBPageMapReconciliationCoordinator.swift */, + F51399FB07DB540E97ED404FAB685C31 /* RDEPUBPresentationRuntime.swift */, + 7F00C52E49C78CE7F63C155C5C74AFBE /* RDEPUBReaderAnnotationCoordinator.swift */, + D241F2043503DC1C01B6FBDE8C08DD1B /* RDEPUBReaderAssemblyCoordinator.swift */, + 60BD829978DA910F152D499A1BA7E04B /* RDEPUBReaderChromeCoordinator.swift */, + E5C393B65BEDBCD67A7B2BD0FD26B869 /* RDEPUBReaderContext.swift */, + 5465156489BA8D643EA9935146897329 /* RDEPUBReaderDependencies.swift */, + D8CD636112E10AA865F164AA3D168C00 /* RDEPUBReaderEnvironment.swift */, + 8B6EC13F25BB402502F307A53001F7D4 /* RDEPUBReaderLoadCoordinator.swift */, + AE3CFAC2C855F60E5A3BFC2F3861BA1C /* RDEPUBReaderLocationCoordinator.swift */, + A2046F1B0D719EC5C1291C1714DF0751 /* RDEPUBReaderPaginationCoordinator.swift */, + 64DE54DECA8006B6CC936B6A5271D1ED /* RDEPUBReaderRuntime.swift */, + 53E8A047531C39D6A6942EC72AF77ADD /* RDEPUBReaderSearchCoordinator.swift */, + 0EA1817F681CEC8A380F9824BD490E73 /* RDEPUBReaderServices.swift */, + CC13BF0AF43ECCBA7F956B059633C358 /* RDEPUBReaderState.swift */, + D24510AD02ED2650316ED6246FD926EE /* RDEPUBReaderUIState.swift */, + 926FC58A23312DD1B9B06F1C52993208 /* RDEPUBReaderViewportMonitor.swift */, + 3BEBF652FA65A9AB3D558E1A2A511051 /* RDEPUBSelectionState.swift */, + BB63F9A378E1403079A93D9C2C038091 /* ChapterRuntime */, + ); + name = ReaderController; + path = ReaderController; + sourceTree = ""; + }; EC1DF5C41F0676128C483B9B7B6368BB /* UIKit */ = { isa = PBXGroup; children = ( @@ -2209,30 +2261,6 @@ name = UIKit; sourceTree = ""; }; - ECB9D6A2C3CAD15DF0A39161742BD32D /* Settings */ = { - isa = PBXGroup; - children = ( - EC2A0D875AEA9AB8ACE30139D100E394 /* RDEPUBReaderConfiguration.swift */, - 655616F30F054425AA178BFF79BA5840 /* RDEPUBReaderSettings.swift */, - 3B0196FC40D2C37F4F398FE37F750E5D /* RDEPUBReaderSettingsViewController.swift */, - BC6FC55B88E3F0D723DF388867829698 /* RDEPUBReaderTheme.swift */, - ); - name = Settings; - path = Settings; - sourceTree = ""; - }; - EE60D33F73BFAE2CB750B235E0BBF81D /* RDPDFReaderView */ = { - isa = PBXGroup; - children = ( - 20A451AE253F0D2BC8CE5E94269FF8DB /* Pod */, - DF6913CF284F0970B31DD7116DD32A97 /* ReaderView */, - FB85CAD5B2E7F1BA8ABE4894BA154A1F /* Sources */, - 54BDE2AEC74D119850B215FB3EC02D80 /* Support Files */, - ); - name = RDPDFReaderView; - path = ../../Sources/RDPDFReaderView; - sourceTree = ""; - }; F0B5602D4D4DEF32DA9FFEAE235178C9 /* DTHTMLParser */ = { isa = PBXGroup; children = ( @@ -2242,67 +2270,56 @@ name = DTHTMLParser; sourceTree = ""; }; - F119B4A0ABE017AECEE69836596133B2 /* Frameworks */ = { + F20A30A149F873CE03DAAB1A694007CD /* Support Files */ = { isa = PBXGroup; children = ( - 4168FFAA19982F98B8FD094179AEAB0C /* iOS */, + 1FC7A51A9F6D730A23D6220001DF40BC /* RDEpubReaderView.modulemap */, + D4ABEB07AC55D55BE9BCECAA2B25D794 /* RDEpubReaderView-dummy.m */, + E6F0CF779FBA5FFD0E72068E1F714942 /* RDEpubReaderView-Info.plist */, + 40123F24B4E99825DEBE316FC14BE8F2 /* RDEpubReaderView-prefix.pch */, + 44765E4CAD77632F37A650F5ABDCDAD5 /* RDEpubReaderView-umbrella.h */, + 80EF554F6662D1148455292C4F03A585 /* RDEpubReaderView.debug.xcconfig */, + 543B7B3F4EEB0FAD86C96E5DCE0E22CC /* RDEpubReaderView.release.xcconfig */, + 183D5601B41EA616973AC94E459FA1AB /* ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist */, ); - name = Frameworks; + name = "Support Files"; + path = "../../ReadViewDemo/Pods/Target Support Files/RDEpubReaderView"; sourceTree = ""; }; - F7F49436E7CFDEBE3591ED107065A806 /* Models */ = { + F4ABFCA5463D9D2536BD19ADE48A0E9D /* BuildPipeline */ = { isa = PBXGroup; children = ( - 690FEB18BA479297CEE1DF5D5CCB43F2 /* RDEPUBAnnotationModels.swift */, - D44149271FD4631FF7616F01343BD79A /* RDEPUBPaginationModels.swift */, - 995B096022F7C738F27BCA2533534438 /* RDEPUBReadingLocationModels.swift */, + 6101F66C96A97F01A48A9214DEE40D02 /* RDEPUBBuildDiagnosticsReporter.swift */, + 1B05F3444C3A7680B4D1E4DE01B8A567 /* RDEPUBChapterTailNormalizer.swift */, + B81D503CA2CCE9D4172B5D9BB346ED30 /* RDEPUBPaginationCacheCoordinator.swift */, + 98A73A4E2FE3A04E24598C615F097708 /* RDEPUBTextBookBuilder.swift */, + BEC7D701A0361A9C2BB93906A4A7DFDD /* RDEPUBTextBookCache.swift */, + 5943DD019F4F6E9E8608E88D2420888C /* RDEPUBTextBookModels.swift */, + D436946B4DC3D4F40E7B50F9F3A77DF6 /* RDEPUBTextBuildPipelineInterfaces.swift */, + B59F66F549E44C57A256286385891551 /* RDEPUBTextPerformanceSampler.swift */, ); - name = Models; - path = Models; + name = BuildPipeline; + path = BuildPipeline; sourceTree = ""; }; - FB85CAD5B2E7F1BA8ABE4894BA154A1F /* Sources */ = { + FE435C6EC3B8B0869661E7503001D153 /* Support Files */ = { isa = PBXGroup; children = ( - 277219E67E7997E62759CE92EFFBDA06 /* RDPDFReaderAnnotationEditorViewController.swift */, - 3E166B7546DD376BF9029360A5A28595 /* RDPDFReaderAnnotationListViewController.swift */, - 814ED791E332D02C2475A0569569C2E4 /* RDPDFReaderChromeViews.swift */, - F8BD01B9C58678FECA98B5CABFE43AF0 /* RDPDFReaderContainerView.swift */, - 04CF41462885413233567E97D513A2A1 /* RDPDFReaderContracts.swift */, - B7AE034BE473A605AC52077AEF86BC27 /* RDPDFReaderDebugViewController.swift */, - 71EC45084F977648BC9C9265ED6A6FEF /* RDPDFReaderDrawingCanvasView.swift */, - D6A7BC6810106F285EF55F02D28F25B6 /* RDPDFReaderDrawingLayersView.swift */, - 2DB249934B60DDC3ADB50D4B6C1637AA /* RDPDFReaderDrawingToolbar.swift */, - 45B6A030E85C43B4814FE8C4894CB4B3 /* RDPDFReaderHighlightOverlayView.swift */, - 01C5EEBCD3070B6D686C7E0074D071FE /* RDPDFReaderImageTextLayerView.swift */, - 908BEA0B59C6233AA09BE39365CFC82E /* RDPDFReaderImageTextRecognizer.swift */, - 61B505AC85F109801EC708BAC8F6374F /* RDPDFReaderKitView.swift */, - 6C0462268B1CAB03FEDD2D04CD8CBC22 /* RDPDFReaderNavigationPanelViewController.swift */, - B8AA7E0D66A87D65E78484C2A848ADF4 /* RDPDFReaderNavigationView.swift */, - 0B35BFEDF59569A794D28F4E41D1878C /* RDPDFReaderPageView.swift */, - 52A94B6B5161E4AD8EC82FCA7EBB482C /* RDPDFReaderPanelPresentation.swift */, - BB0A3551A7313EF0434A26B6F5A0796E /* RDPDFReaderPersistenceStore.swift */, - 891BB97274B07FA451D7C2403E7C5B46 /* RDPDFReaderSettingsPanelViewController.swift */, - C31ED4EB4A9C339511F3685FF228D8B0 /* RDPDFReaderSettingsView.swift */, - 1CE98FF96BF7DCEE1E359C122AAA69CF /* RDPDFReaderTheme.swift */, - AD356A8B2995301BC6FA6F3E46C7BCDB /* RDPDFReaderViewController.swift */, - 21EACCCA7F9D46E51E5814B94865E81A /* RDPDFZoomablePageView.swift */, + 21AE24836ACB2BC812E9FF5C0F4302FE /* RDPDFReaderView.modulemap */, + C5F29D53A7FD825F0CEAB345B46B3FC6 /* RDPDFReaderView-dummy.m */, + B6BC7F1D23C7996F1D9C176B3EB7F0A6 /* RDPDFReaderView-Info.plist */, + 021E6F2E185A56B66D1B92DDB9FE8DE7 /* RDPDFReaderView-prefix.pch */, + B1F0955DB654E4B3265622218E9CF71A /* RDPDFReaderView-umbrella.h */, + C5090C56303AB966C51846110FF05A64 /* RDPDFReaderView.debug.xcconfig */, + D3CE152E896CA22C59944E4E3BBBF760 /* RDPDFReaderView.release.xcconfig */, ); - name = Sources; - path = Sources; + name = "Support Files"; + path = "../../ReadViewDemo/Pods/Target Support Files/RDPDFReaderView"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 00B6CE67D2F5D9038343E6D89B494675 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F925233C7FDBFF7FEDEE5480822791AF /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 29CB77F5EC62298B8E19FEFFD791AEAD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2384,68 +2401,76 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 55B34396410608E90FB61A8BB73C2693 /* Headers */ = { + 3CB54C2BD3C748472316E55EA21956B4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B4BA6C70CACE2D020D4618484CF71EDA /* RDEpubReaderView-umbrella.h in Headers */, + 6FE5AF431C87317881376957C2CF69A9 /* DTActivityTitleView.h in Headers */, + 4EE1DE32B6F53040034BD25CD6546805 /* DTAnimatedGIF.h in Headers */, + 00FD74A9CCE1BD7C92EF92B3051C7EAC /* DTBase64Coding.h in Headers */, + D5635DF62FAB378BEF97BBF8F8809DF5 /* DTBlockFunctions.h in Headers */, + 87A781E3D8E62CD7CEB6119E868AA323 /* DTCompatibility.h in Headers */, + 1018B5174E5013C9C38391BB507C4F8B /* DTCoreGraphicsUtils.h in Headers */, + 0B5BA9A15467D36EB54F7CFF8036AB85 /* DTCustomColoredAccessory.h in Headers */, + 2D9ED50265434753B6D9C1B50A21FCED /* DTExtendedFileAttributes.h in Headers */, + 9310666E5DB97AB7D7BA35A9FF70488E /* DTFolderMonitor.h in Headers */, + 03290D0EDE675175B8346B3BBA253DE0 /* DTFoundation-umbrella.h in Headers */, + 8A6C2CB8AE2F41661DB70FE4262F7058 /* DTFoundationConstants.h in Headers */, + 228E6814C78EEBFEE8E9EA4802016FC0 /* DTHTMLParser.h in Headers */, + 987AC28BE0204F311650F5193918CFA0 /* DTLog.h in Headers */, + 694BD20B3540D7F581D1A2A619B0CA30 /* DTPieProgressIndicator.h in Headers */, + 0092B10CEF9FA5B003A243F20E685AC0 /* DTSmartPagingScrollView.h in Headers */, + D484255D55B2E6965411F26256BB39A4 /* DTTiledLayerWithoutFade.h in Headers */, + 3D8AC6AA5DA1B5B430DBC4A2DE86C977 /* DTVersion.h in Headers */, + 47377798BC8063B8C0BF24DB9E7A6410 /* DTWeakSupport.h in Headers */, + 1F811F480AA892090B887D50BF1FB361 /* NSArray+DTError.h in Headers */, + 8ADB863F8874EB8B39500114164F30CF /* NSData+DTCrypto.h in Headers */, + CCBDC2E4ABEBFB94C69CD31C1062F52B /* NSDictionary+DTError.h in Headers */, + 167B3023D4C7C6FEB312E907C356283E /* NSFileWrapper+DTCopying.h in Headers */, + 2474F7E6FA6B8473C121C81B6FCDCCF3 /* NSMutableArray+DTMoving.h in Headers */, + 105FAC578AB664388C1943FF0F6F84ED /* NSString+DTFormatNumbers.h in Headers */, + 75963BFC9C773BEC204A40DBD9FCB60F /* NSString+DTPaths.h in Headers */, + E344F26F1775C03DF2F885AC51CF5424 /* NSString+DTURLEncoding.h in Headers */, + FCCDEDD358B1CE7CB1A11A1CB1BEDFD8 /* NSString+DTUtilities.h in Headers */, + 7D6F73E1161FF39B9A117AAEB0A962D9 /* NSURL+DTAppLinks.h in Headers */, + 7F155CDA8CE804815318D2E26C97EFA9 /* NSURL+DTComparing.h in Headers */, + 63FD358173BBF197BDB59F4B6696C3F0 /* NSURL+DTUnshorten.h in Headers */, + 629BBA5268F2ABA1AAB10761703FD219 /* UIApplication+DTNetworkActivity.h in Headers */, + 4C098A754CDDF19F161D09EB3C31AA91 /* UIImage+DTFoundation.h in Headers */, + 72C6CEBCA38D27D9135CD1A48699315B /* UIScreen+DTFoundation.h in Headers */, + A2582EBC9C4BF15AB10F62F5C2F70654 /* UIView+DTFoundation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7635C663CD77A84881BC35798E4460CB /* Headers */ = { + 4C1684944E3ADD50FE3310550898BBAB /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A3D5637DCBDA368A6EC35456117519CF /* RDPDFReaderView-umbrella.h in Headers */, + 9AFFCA108C94C7B57BA13D014B19659B /* SnapKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - A3D255444226A2FFD94B8F9954EBB887 /* Headers */ = { + 53ECB19DC74817B07016A027204C241A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D580626321B6AE41153627CE9CA41584 /* ZIPFoundation-umbrella.h in Headers */, + 684586D0E8F908278BC13DC47C845A4B /* ZIPFoundation-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - FDCF362D4585302368D2CBDF392ECD5E /* Headers */ = { + 8CF10C3020A3847E1C40BC768EA687E0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D06769F23D4D524A389DC6B5ADA080BA /* DTActivityTitleView.h in Headers */, - 559423F9BFE52B64951455A6DE443744 /* DTAnimatedGIF.h in Headers */, - 3E79E408729FBDD4637F60B1BC5F2858 /* DTBase64Coding.h in Headers */, - 4D6F1FAC6A0556DE6B476EE77D9E4A14 /* DTBlockFunctions.h in Headers */, - EA02502E59B652D82FD7E51185335D91 /* DTCompatibility.h in Headers */, - 75B60C234A83180A72287EF61D7661FF /* DTCoreGraphicsUtils.h in Headers */, - F005C2EEC8CBAA17188A1203018A18A1 /* DTCustomColoredAccessory.h in Headers */, - 487D0AA4338850A7722DA2BBB1A74FBC /* DTExtendedFileAttributes.h in Headers */, - B01B3EB64C729474B684613828AD383C /* DTFolderMonitor.h in Headers */, - CA83BBE2CF230A0A6823264D51C21710 /* DTFoundation-umbrella.h in Headers */, - 45D22FCB6BA2A4F871FE30366B8B9DAC /* DTFoundationConstants.h in Headers */, - C148E238ECD332527E0546B6B5DEF528 /* DTHTMLParser.h in Headers */, - 003C65AB0C1074E8F0B143E3851B22BE /* DTLog.h in Headers */, - 391CFF77BEC993504231889C8CEA6B45 /* DTPieProgressIndicator.h in Headers */, - 162EE6E1F3EAF5D032ED89C227B7B388 /* DTSmartPagingScrollView.h in Headers */, - CF087101A07C895255A6BB1E3977B671 /* DTTiledLayerWithoutFade.h in Headers */, - 84219D0C61E91A7BB9A1FCA7C2830B8B /* DTVersion.h in Headers */, - 3D62724A3FD10A568D3F932E10B679B0 /* DTWeakSupport.h in Headers */, - 6469499A34249BD18B4433EAB1A3DA38 /* NSArray+DTError.h in Headers */, - B8DA6BEB3EE5A9F8AADCF0845304FC3A /* NSData+DTCrypto.h in Headers */, - 12BD58B4AD50F68DF894CA5C10EBF594 /* NSDictionary+DTError.h in Headers */, - 3498112B821CDC8112CF4B7D3874FD58 /* NSFileWrapper+DTCopying.h in Headers */, - BAEBBDF1F3DC59E4A4FE6BB87DFAB5C1 /* NSMutableArray+DTMoving.h in Headers */, - 969BD0FD5E9EA50EB76BFB8C87029202 /* NSString+DTFormatNumbers.h in Headers */, - 6D102E7B164A5C60400EDF323B79F249 /* NSString+DTPaths.h in Headers */, - 971A90F9097FB02335C9E799A55654DB /* NSString+DTURLEncoding.h in Headers */, - 55F7F98AF0A68A0CC9000E164D86C388 /* NSString+DTUtilities.h in Headers */, - 207CA30C69A1CDEE6010BA3E13F9779A /* NSURL+DTAppLinks.h in Headers */, - D8451A300FFE4BB4E898FA79D11B90A1 /* NSURL+DTComparing.h in Headers */, - A26BB16FCB0E5ED669FB9465BC88713D /* NSURL+DTUnshorten.h in Headers */, - 1C51645361B2C060E7608643AF9A58D5 /* UIApplication+DTNetworkActivity.h in Headers */, - C858028A3D05786E8D07A69FFC538DA6 /* UIImage+DTFoundation.h in Headers */, - BADA723F886FFEF278AAB43C659EC970 /* UIScreen+DTFoundation.h in Headers */, - 855D781893EB344322EF98DB08C996AB /* UIView+DTFoundation.h in Headers */, + 726811A34F893A622DB858800E67775F /* RDEpubReaderView-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B581C780943F1A5388188F4104D41129 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BD2F4AE3043328378219197D0CE5F804 /* RDPDFReaderView-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2454,11 +2479,11 @@ /* Begin PBXNativeTarget section */ 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */ = { isa = PBXNativeTarget; - buildConfigurationList = EA3A0F218A66AA9D13E86F6B070FAB65 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; + buildConfigurationList = CAE5795EE48AE1205511CFBA8E272E8E /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; buildPhases = ( - 70A9F8F93758993FABCC4CFF223E7148 /* Sources */, - 3AA460AD21EF5603DD8D72E7AA9E9B21 /* Frameworks */, - 7000150BA8BBB656AD10637069B37840 /* Resources */, + D8A10A612E7BD6B832AFCA8097CEAE8F /* Sources */, + 4898DBD55913F2B54919C55D71F7EF07 /* Frameworks */, + B4AFABD9FC33F90FA9F8C6178ABE1A34 /* Resources */, ); buildRules = ( ); @@ -2471,17 +2496,17 @@ }; 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { isa = PBXNativeTarget; - buildConfigurationList = C39A3BF49A3A5CECAE228D5E269702E3 /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildConfigurationList = 2F57F2EF53B056EC18070F8A87684FD3 /* Build configuration list for PBXNativeTarget "SnapKit" */; buildPhases = ( - 00B6CE67D2F5D9038343E6D89B494675 /* Headers */, - 86AADFA00FC53DA026F2685DCE7D5D7F /* Sources */, - A6C86E73E08E0EE41160C8B4929384EF /* Frameworks */, - 8DFEF1F47FB7FAE7847582B99517FAC3 /* Resources */, + 4C1684944E3ADD50FE3310550898BBAB /* Headers */, + 79B3E3F214EE4E4CBE7114FA2591FE52 /* Sources */, + 254A9D21D857AA584C5D2ADC600A6710 /* Frameworks */, + 6029058CB5172491FE327CFBD715DE9F /* Resources */, ); buildRules = ( ); dependencies = ( - C129CF487F655E6FB905C9753F6B9EED /* PBXTargetDependency */, + 816D08A1CE30E219E8187F8D929C6027 /* PBXTargetDependency */, ); name = SnapKit; productName = SnapKit; @@ -2490,17 +2515,17 @@ }; 352EC96AFAEE0EDF74FD76A958827133 /* RDPDFReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = 9677DC5425DCC1A154D5AFB9237260F5 /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */; + buildConfigurationList = 42BAB7FC9D396091287DDED59DDA4E5B /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */; buildPhases = ( - 7635C663CD77A84881BC35798E4460CB /* Headers */, - 941E24363EAD2678023A563A365C0A83 /* Sources */, - 6874108C8D77E0B850ABFE50BBC4B1AC /* Frameworks */, - FC121A77038CDCED0CADA7ACBFDEB99A /* Resources */, + B581C780943F1A5388188F4104D41129 /* Headers */, + 4811A347041CD3123495E41396D145CD /* Sources */, + 841175627F988EF292F0FDC3FB0EF011 /* Frameworks */, + BF894CA4954DFA18B93C7E624AA09ABC /* Resources */, ); buildRules = ( ); dependencies = ( - D8C3AC1D871FBC776E35B1DC8DE974B8 /* PBXTargetDependency */, + BE6CB9FE5495066560BCDA1BFF40A557 /* PBXTargetDependency */, ); name = RDPDFReaderView; productName = RDPDFReaderView; @@ -2519,12 +2544,12 @@ buildRules = ( ); dependencies = ( - DB4377A41DAD62B32AF023278E7B50B3 /* PBXTargetDependency */, - F01B0530044FB26AE79C04C188FD061A /* PBXTargetDependency */, - 82290A5FF20F9282AF1D67DAE11B8257 /* PBXTargetDependency */, - B3C0F40222D27355D0A67EB0E1FE0823 /* PBXTargetDependency */, - BBE956211CD1EC16185BC0FEFB82C740 /* PBXTargetDependency */, - 9D8C3E83FA676276852D57DBB73A9AD3 /* PBXTargetDependency */, + B8FE988ECDB2D8B87605057DA0A0204D /* PBXTargetDependency */, + 2DD972CA169E151AAEAABB373D497F01 /* PBXTargetDependency */, + 2F84AD8A95F9891FF10615622C18AEC4 /* PBXTargetDependency */, + 1CB1483421357596C395A4C72082EEFB /* PBXTargetDependency */, + 9288E43C082AE6E0A34C7F9E8D7DA38E /* PBXTargetDependency */, + FF40085F4184C2B90AAC6F7AE1041CAF /* PBXTargetDependency */, ); name = "Pods-ReadViewDemo"; productName = Pods_ReadViewDemo; @@ -2533,11 +2558,11 @@ }; 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 8FFFE848E062F1B9C863E4837EF688FE /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; + buildConfigurationList = 33B8E6F12A2866899330113FB5CA8694 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; buildPhases = ( - E88F8FE29DAE30894D62257780B88688 /* Sources */, - 514455551257DAD3C261568B87309678 /* Frameworks */, - ED7A5374470818EFC6AD65DF45793C17 /* Resources */, + E1ACC866735994FB5DDF16E332392DAE /* Sources */, + F1A20C66D5D753698A0580C836197161 /* Frameworks */, + CC3C0F03A4CE38153145F509B24D51EA /* Resources */, ); buildRules = ( ); @@ -2550,12 +2575,12 @@ }; 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 1A283F9AD34B7606CE3BAA9553D5D745 /* Build configuration list for PBXNativeTarget "DTFoundation" */; + buildConfigurationList = AFB5B4291A9F31B14509185C00540A6F /* Build configuration list for PBXNativeTarget "DTFoundation" */; buildPhases = ( - FDCF362D4585302368D2CBDF392ECD5E /* Headers */, - CD9699E49EFA7A195B34D3AFCDBF79E2 /* Sources */, - 73A4CA22CA64362A4424EBA8B775DA6A /* Frameworks */, - DF5118F2AFA6F7BF93D930798CD43941 /* Resources */, + 3CB54C2BD3C748472316E55EA21956B4 /* Headers */, + 02F95287884B445A0622E6AAF18B2DB2 /* Sources */, + 74DA18DBECE4D8CB854F846D9F357396 /* Frameworks */, + 9D9F044BC2FC640D4A1F374F23ED26F1 /* Resources */, ); buildRules = ( ); @@ -2568,17 +2593,17 @@ }; AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 2F25B85A3671CF2E2F838DFCEFEC70C0 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; + buildConfigurationList = E0C21A08F8F342F93C78BE4579478379 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; buildPhases = ( - A3D255444226A2FFD94B8F9954EBB887 /* Headers */, - 09803DD33BEAE1BCAA5677B40F714A8F /* Sources */, - F2FF89916CD02D42BFA1656A5EF0CB82 /* Frameworks */, - 3430079098C1FE60B13A6BF7ED9D780A /* Resources */, + 53ECB19DC74817B07016A027204C241A /* Headers */, + 78858E76A13C1C769450576FA6328029 /* Sources */, + 572FEB02353F89A14C0C06D3CAD01317 /* Frameworks */, + A976A8E8CD539371320FAE3C68A33868 /* Resources */, ); buildRules = ( ); dependencies = ( - 3C536403A67E0B92E89A113349CD682D /* PBXTargetDependency */, + 5F130D3703CF962F4D3CB2C627477170 /* PBXTargetDependency */, ); name = ZIPFoundation; productName = ZIPFoundation; @@ -2597,8 +2622,8 @@ buildRules = ( ); dependencies = ( - 246662D40DA3354465266FC20F6D0224 /* PBXTargetDependency */, - 5C64B2E1568EB81CAF1BE1BC1C20C018 /* PBXTargetDependency */, + 09C917BF14A53A5A6B7D0AB0F28BDE87 /* PBXTargetDependency */, + 5AF53B4F6DFEA88AB7C850609586CA7B /* PBXTargetDependency */, ); name = DTCoreText; productName = DTCoreText; @@ -2607,11 +2632,11 @@ }; C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = D15EEE861AE1ED3C332162F130BB923E /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; + buildConfigurationList = 290D8DA6C68E22E3AC02AEEC679F9AB1 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */; buildPhases = ( - 36754E7062C08DA07E3A3C4B3F4698F6 /* Sources */, - 98498040CD9BDDE55929E28B46278010 /* Frameworks */, - 2CC3B1EED1FAA997AD209FAEF7C94E89 /* Resources */, + 5E93E448B68A840FDF8BFC9C495D6398 /* Sources */, + 2E6AAED7E5F728BE4AD1030966E99673 /* Frameworks */, + 290357E480D37476A3F2E69B2397E939 /* Resources */, ); buildRules = ( ); @@ -2624,11 +2649,11 @@ }; E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */ = { isa = PBXNativeTarget; - buildConfigurationList = D08A0E31EC5F9881A6AC6E3945BB52E6 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */; + buildConfigurationList = E612880EB9499755AABD2CA212042C88 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */; buildPhases = ( - A3239CFDC19DE7660CE71BFF3BEC9D45 /* Sources */, - 371B87B1F7D323203B8C533B4CD24682 /* Frameworks */, - 6E2279808729F6803A530AB0053F226B /* Resources */, + 1D39B32170C86F95C041002A5CAD64EB /* Sources */, + AE82FD7DE740122C0E1F3ACA79D8D325 /* Frameworks */, + 1BCCF165CF55A95A43EF6E0B84CA1F58 /* Resources */, ); buildRules = ( ); @@ -2641,20 +2666,20 @@ }; FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */ = { isa = PBXNativeTarget; - buildConfigurationList = CEB45790C4D960C7BB8FDC4A1A8699FA /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */; + buildConfigurationList = CFB9BBE2424D1D36CA1904E73FE1D1DD /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */; buildPhases = ( - 55B34396410608E90FB61A8BB73C2693 /* Headers */, - 0A36F66C99685CD4746AA0EAFA588C95 /* Sources */, - FA10314229BF9E0511EA736EB8886E78 /* Frameworks */, - 75ECF70B1CAC61E0B6D4C3EB6EA5A756 /* Resources */, + 8CF10C3020A3847E1C40BC768EA687E0 /* Headers */, + 555C73618585AE6A4CFC6E68CAD9BC9F /* Sources */, + BB775B7E3898A645CA9A57B93ED9668D /* Frameworks */, + FE6CF7CAB15D62BC7D0F1F287AA2C73B /* Resources */, ); buildRules = ( ); dependencies = ( - A8C63C6883782ED965A8A8847F504BC8 /* PBXTargetDependency */, - E5FAFF15D73B39405D143617507D4FE9 /* PBXTargetDependency */, - 68F3E9D281169251954DC912268CB0BE /* PBXTargetDependency */, - 2D967E6F611DBCD6C02CE36846ED235A /* PBXTargetDependency */, + B3EFFAD8C8F5A4687F9BE26C20400EB4 /* PBXTargetDependency */, + 5C84F363AB364AC2256A20768F4D4F63 /* PBXTargetDependency */, + EB391B439FA4DA9B9CD9393C265500E0 /* PBXTargetDependency */, + 7934BEA3095F46B97A03F7A60B8F1E6A /* PBXTargetDependency */, ); name = RDEpubReaderView; productName = RDEpubReaderView; @@ -2701,11 +2726,28 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2CC3B1EED1FAA997AD209FAEF7C94E89 /* Resources */ = { + 1BCCF165CF55A95A43EF6E0B84CA1F58 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BAA44C6AE8DFF084D548D41646A40024 /* PrivacyInfo.xcprivacy in Resources */, + 086F18593CE2300734027A8BD396A28F /* cssInjector.js in Resources */, + AD5854B028EAE75971250523F24E7AC0 /* epub-bridge.js in Resources */, + 50B113FC2E2AEB996202A5F72411754A /* epub-fixed-layout.html in Resources */, + 4D2C32204598EEB25DE02652DA3A4517 /* rangy-core.js in Resources */, + 1EAE1F26CFFAAE7BA3EED4A895A65283 /* rangy-serializer.js in Resources */, + 3F8E5BF8A103AFF70E8EF1BEF40C80A3 /* WeReadApi.js in Resources */, + 3D29E3866F13EFDCD0F969C068317E99 /* wxread-dark.css in Resources */, + 09C5D40EBC95C1DF08980AB315CEC608 /* wxread-default.css in Resources */, + 98CC3155061E818ECC5294ADD7BD39A9 /* wxread-replace.css in Resources */, + CD0642736D05FF86A5AAEB0A8298257E /* wxread-replace-latin.css in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 290357E480D37476A3F2E69B2397E939 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E1B45048654ED73F34DD7100669F3A6E /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2716,14 +2758,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3430079098C1FE60B13A6BF7ED9D780A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1C2DD8EEDA6E74D2C2E040D910E7B40D /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 378BF991D3B318AACBF6D78F57218233 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2732,314 +2766,385 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6E2279808729F6803A530AB0053F226B /* Resources */ = { + 6029058CB5172491FE327CFBD715DE9F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4670A2F48A30E2D6F06A63786F96F617 /* cssInjector.js in Resources */, - E566FC7B59DC02015E534C6B987670A3 /* epub-bridge.js in Resources */, - 559CCC842F999531111486107DACDF45 /* epub-fixed-layout.html in Resources */, - 63ED5C1F069073E63E3D9C0BDD57892B /* rangy-core.js in Resources */, - A02DC728B13F2AB73C3BCA1DBFC731E2 /* rangy-serializer.js in Resources */, - 6B257220D57F7FD3B39276C2B8129BB8 /* WeReadApi.js in Resources */, - 39A97567817948C7DFFA421903E94D3F /* wxread-dark.css in Resources */, - 9083BC70A6B97535B9B4BE10A9E5BE1E /* wxread-default.css in Resources */, - 7B7865D7DB409E1318EA37F256150355 /* wxread-replace.css in Resources */, - C567A1936DB1927CB23B030E22A0D1D7 /* wxread-replace-latin.css in Resources */, + C4048BBBD3ED54C527E258693E0E6895 /* SnapKit-SnapKit_Privacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7000150BA8BBB656AD10637069B37840 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 20CD16D8B558C657C008537A23D8CCAB /* default.css in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 75ECF70B1CAC61E0B6D4C3EB6EA5A756 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EFEA0D9BA85D1BE52137BEDD7E463E1B /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFEF1F47FB7FAE7847582B99517FAC3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CC7F3C8BFEE5A8178A2369DF5AE99476 /* SnapKit-SnapKit_Privacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DF5118F2AFA6F7BF93D930798CD43941 /* Resources */ = { + 9D9F044BC2FC640D4A1F374F23ED26F1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - ED7A5374470818EFC6AD65DF45793C17 /* Resources */ = { + A976A8E8CD539371320FAE3C68A33868 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - CA3E2A9DD453A5BAB49CE247E3B2CB0A /* PrivacyInfo.xcprivacy in Resources */, + 8218AC044246907D694EB1E6E3111F0B /* ZIPFoundation-ZIPFoundation_Privacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FC121A77038CDCED0CADA7ACBFDEB99A /* Resources */ = { + B4AFABD9FC33F90FA9F8C6178ABE1A34 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4C146C2C2DD2C526CBFC04352ADF45F8 /* default.css in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BF894CA4954DFA18B93C7E624AA09ABC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CC3C0F03A4CE38153145F509B24D51EA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 83A114ACB998BF93F4D4E76EBB01D8B4 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FE6CF7CAB15D62BC7D0F1F287AA2C73B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E1DA99F683B479E7514F59584F010D77 /* RDEpubReaderView-RDEpubReaderViewAssets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 09803DD33BEAE1BCAA5677B40F714A8F /* Sources */ = { + 02F95287884B445A0622E6AAF18B2DB2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 336DA2E0817E5E425296CFC25635AE9B /* Archive.swift in Sources */, - 8EDEF14C9F974E3335CE4459D4CE8F4E /* Archive+BackingConfiguration.swift in Sources */, - BFC09117F478724BCEDDD625D7FDC370 /* Archive+Deprecated.swift in Sources */, - FACB6496B4F4DF664AD55D389398EA03 /* Archive+Helpers.swift in Sources */, - 9133D109B9976C5A85F6C38385973FE8 /* Archive+MemoryFile.swift in Sources */, - 0E1EE9175703F0C3BE30FB6052D03656 /* Archive+Progress.swift in Sources */, - EE479BF276FAF25057A8B5FF62BE6D74 /* Archive+Reading.swift in Sources */, - A060FF958E35AAA03B03681EFACB3307 /* Archive+ReadingDeprecated.swift in Sources */, - D006B328DEC4A4731AE357F2A4527992 /* Archive+Writing.swift in Sources */, - 1410FE1B311FEA480FE3CE8DC708A6C0 /* Archive+WritingDeprecated.swift in Sources */, - 12F09945E58781F38F0AD0D823F2D1D2 /* Archive+ZIP64.swift in Sources */, - 3E6BB28D89E571D6DBF0A8E3FFD57152 /* Data+Compression.swift in Sources */, - 000E4DDB16481806A621C99D4B933EE1 /* Data+CompressionDeprecated.swift in Sources */, - E45FCFED4E5A28EDCAEE569C752C399B /* Data+Serialization.swift in Sources */, - 1040F34BD9EC09FA718EAC2EDF9E2E6E /* Date+ZIP.swift in Sources */, - D1D49D20EF5F17AB4DD78227948AE6AE /* Entry.swift in Sources */, - 3175BD0E3F08E1872F79B3399A0D3925 /* Entry+Serialization.swift in Sources */, - 7288926B490A9528DF27875BD3CE771D /* Entry+ZIP64.swift in Sources */, - D9DF2359E956AEF7DA0DAE3FAF3C2859 /* FileManager+ZIP.swift in Sources */, - 10BFE7CF4EA8F622375D2DE88A857ED7 /* FileManager+ZIPDeprecated.swift in Sources */, - 2EF00FEF0F4932FDA31DC090B20001F2 /* URL+ZIP.swift in Sources */, - 64960015EDE9A4BEAF04E7429E778401 /* ZIPFoundation-dummy.m in Sources */, + 8EE605D9B102DD1A41A4718F9555F6C4 /* DTActivityTitleView.m in Sources */, + 24BC5333E523715A7F230CBF3E2C073F /* DTAnimatedGIF.m in Sources */, + 812272B922627EF9643A9CDBC9AA2EFB /* DTBase64Coding.m in Sources */, + ED18AB764B6B2D7D51BA3BB30C77BC6D /* DTBlockFunctions.m in Sources */, + CF713B6B05119D72EF91307795B1AEDC /* DTCoreGraphicsUtils.m in Sources */, + 9A16F390AAAAC68FD7859C578B4054CB /* DTCustomColoredAccessory.m in Sources */, + 14D5FEB30629D96E8DA566B49D770031 /* DTExtendedFileAttributes.m in Sources */, + 1ECBE1E3E48F3BEB91DA496842A61CE8 /* DTFolderMonitor.m in Sources */, + 6A053B2EC45ADD509497F2909AD4DBFD /* DTFoundation-dummy.m in Sources */, + 5B7CC211EBF1F22C9429B66CD4D31973 /* DTFoundationConstants.m in Sources */, + A4E1CAF494796BA32FFC884698C85729 /* DTHTMLParser.m in Sources */, + D3CF74B30A5AB5E67F433079376E830C /* DTLog.m in Sources */, + 984F604C1818609B7836604F85ADEEDE /* DTPieProgressIndicator.m in Sources */, + 17B9F651C4E7C21338A2AB04DAB3121D /* DTSmartPagingScrollView.m in Sources */, + DB06FAC271AAEE1B3CD5C1ED97225398 /* DTTiledLayerWithoutFade.m in Sources */, + A1D1E55062DC72F0193C86A29A02234D /* DTVersion.m in Sources */, + 5F8F35C67B84F3985373B76354706C23 /* NSArray+DTError.m in Sources */, + 2CEB3C712A0253686046DF022AFAA816 /* NSData+DTCrypto.m in Sources */, + E7426FD3F56158482B494AB93FF6388F /* NSDictionary+DTError.m in Sources */, + F8633FA6F73C45BEA8BD04DEA57CEDA8 /* NSFileWrapper+DTCopying.m in Sources */, + 1B5052AC71482489C571B9C473DE3ED4 /* NSMutableArray+DTMoving.m in Sources */, + B388AF7C09885B72DF0DE4327A3B149B /* NSString+DTFormatNumbers.m in Sources */, + 1A53A0E3B617A60D8ADC80B68EEE35A1 /* NSString+DTPaths.m in Sources */, + 5D523DAF9BFA543904E32342D0EEFC0D /* NSString+DTURLEncoding.m in Sources */, + 55BD44A705AA661A7950A255165D15F9 /* NSString+DTUtilities.m in Sources */, + B24F819D98E4DF194465D63CC6C30F26 /* NSURL+DTAppLinks.m in Sources */, + A4E98600889A26605AFDBEFEF99763C8 /* NSURL+DTComparing.m in Sources */, + 737152818FBA3502222A2E161A88A145 /* NSURL+DTUnshorten.m in Sources */, + F6EBFF6B774713E2F798201913C3F5E0 /* UIApplication+DTNetworkActivity.m in Sources */, + 04ADF9469A9C4CE55FA682EA65EB5DF5 /* UIImage+DTFoundation.m in Sources */, + 74A86C4AB3ED0481830E8D1D5A2AB8B2 /* UIScreen+DTFoundation.m in Sources */, + 84C67060BE07E8581665985F83F31B02 /* UIView+DTFoundation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0A36F66C99685CD4746AA0EAFA588C95 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7FE0205BC0491191984F364702B2487D /* RDEPUBAnnotationEditorViewController.swift in Sources */, - 11FE35D5EA18C783309DDCEC4C06DDEB /* RDEPUBAnnotationModels.swift in Sources */, - 5FCF34234044EE4C69F80A3E81BE3F3C /* RDEPUBAssetRepository.swift in Sources */, - 3BA122531A484A0F3A6174AE497FFFC5 /* RDEPUBAttachmentNormalizer.swift in Sources */, - 6CB2E1DC6A1BD620ACEAF9C2FCE8B627 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, - BB362814D44E7E75C42478226B057023 /* RDEPUBAttachmentTooltipView.swift in Sources */, - F67B190D8DC1CCD89229D26498014C2D /* RDEPUBBackgroundCoverageStore.swift in Sources */, - 49CE36A4491D3259E2C0DFCAA8EC1247 /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, - 654D666DC057691343337DAD9A782B2D /* RDEPUBBackgroundTrace.swift in Sources */, - 6E2EAE35FB0816BC65587D2059C89FF5 /* RDEPUBBookPageMap.swift in Sources */, - 156F1DA0F5E1CFD1BAFD83B274CD912E /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, - 2F001AFEEF5EDCB2A6EB6CF0632B70EA /* RDEPUBCFI.swift in Sources */, - 46EA9A16CA91B9C683D48064D803F522 /* RDEPUBCFICompatibility.swift in Sources */, - 6768C21F6AF86124B487D230B22A7841 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, - C59BAE874E386CF6912967ED864F9D50 /* RDEPUBCFIError.swift in Sources */, - CAD61F1F189C7B64F2C96222D48957BF /* RDEPUBCFIGenerator.swift in Sources */, - 0ECCD05F0321964293D75C01422140C3 /* RDEPUBCFIMap.swift in Sources */, - E6D4A9A9D5583402ED248D061A07406E /* RDEPUBCFIMarkerInjector.swift in Sources */, - 61717DC84B5E784D4B5F2ECA1C8C8C65 /* RDEPUBCFIParser.swift in Sources */, - 5170B2493FC2D4DE69D4A7CA8C25141E /* RDEPUBCFIPath.swift in Sources */, - FCE05D9B947E5C4A4BAA351330ABE265 /* RDEPUBCFIRange.swift in Sources */, - D14DC59DB6C8B06561B120362A6C13C1 /* RDEPUBCFIRecoveryEngine.swift in Sources */, - DFBFC61B8725D74E450F31AD8C962902 /* RDEPUBCFIResolver.swift in Sources */, - 5F96698E997C02C0D5D45370CF3A60B0 /* RDEPUBCFISerializer.swift in Sources */, - F53F56179BD76AECCB4A327FDCD84007 /* RDEPUBCFITextAssertion.swift in Sources */, - 9E81E50EC667B51B5DB673C4673A1C6A /* RDEPUBCFIUtilities.swift in Sources */, - 0376C4FC3B9AEBDC398BEFDA367E95CA /* RDEPUBChapterCacheKey.swift in Sources */, - D7DB1C22A73B7D0018BE0959630C3829 /* RDEPUBChapterData.swift in Sources */, - 07B3830D139CFCB60F7973FD2FF5CDA8 /* RDEPUBChapterDataCache.swift in Sources */, - AD06E1BAAC13692376BEDAFEB1F94557 /* RDEPUBChapterDisplayContentCache.swift in Sources */, - C183EB4A50A1DD9C8868EC90D0402674 /* RDEPUBChapterLoader.swift in Sources */, - E3E926004ABCFE29E9519621B6CC0078 /* RDEPUBChapterLocation.swift in Sources */, - 6FA4B5AA82186A23F43F7507F0AA745F /* RDEPUBChapterOffsetMap.swift in Sources */, - BA2343D26FB0584E31BCF54CA12E7401 /* RDEPUBChapterPageCounter.swift in Sources */, - B805174632AE0738FA6F898D1391AD39 /* RDEPUBChapterRuntimeStore.swift in Sources */, - 7292E3D73AED0110586090700653CFCF /* RDEPUBChapterSummaryDiskCache.swift in Sources */, - 59799C28C42AAB00342D322F16B00974 /* RDEPUBChapterTailNormalizer.swift in Sources */, - 8D516FCF5766F296EAE7C29AEF9B2AD1 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, - BACBBC2192FF32EFCCD860AB67BE755E /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, - 05B467DEE5B9A5E664E4763F4BF4B916 /* RDEPUBCSSCompatibilityLayer.swift in Sources */, - B5BC3DC219D397FF38BDE0F50899A901 /* RDEPUBDarkImageAdjuster.swift in Sources */, - BBFB55CDBD678B777FD9A4F75DF5A61B /* RDEPUBDecryptingImageAttachment.swift in Sources */, - 0E111E02116D762C0A1744A2F635C583 /* RDEPUBDTCoreTextRenderer.swift in Sources */, - 625907CE0962E15B47B8D28F06FA7AF4 /* RDEPUBFixedLayoutTemplate.swift in Sources */, - F4BF22914B722004151F768BA6BF008D /* RDEPUBFontFallbackResolver.swift in Sources */, - D3CC13D95C94E081B5492C6E9A2A6455 /* RDEPUBFontNormalizer.swift in Sources */, - BF4CEB7375E7DB1212DF9A0EEB4B21BE /* RDEPUBFragmentMarkerInjector.swift in Sources */, - 5428A2EB5DD9CC554F83ACB2398FA2ED /* RDEPUBHTMLNormalizer.swift in Sources */, - BC813ED27C5D155CD65C95DF2DD6635B /* RDEPUBImageViewController.swift in Sources */, - CAAE0DCD0AB85A5814CA1A5057627AC1 /* RDEPUBImageViewerCoordinator.swift in Sources */, - 70F2CED517A0B6D90ABFE293D2173039 /* RDEPUBJavaScriptBridge.swift in Sources */, - 9992C8D1F6A3078A4FC0C31B2CFFF5AC /* RDEPUBJumpSession.swift in Sources */, - 11603ADFD8D5D76C47EEDAC2D83566CC /* RDEPUBMemoryProbe.swift in Sources */, - E52BA1060E8E0E52054D36892C231F0F /* RDEPUBMetadataParseCancellationController.swift in Sources */, - 4303036E872254A4D3E1FE61B545FA1A /* RDEPUBMetadataParseWorker.swift in Sources */, - C5C667746CCE2E7A0902C43ADF4D2F9A /* RDEPUBModels.swift in Sources */, - 0046F7D0A6760A908B9318F39FB82445 /* RDEPUBNavigatorLayoutContext.swift in Sources */, - 99896956141FFB3007508EB4D4074A1C /* RDEPUBNoteDetector.swift in Sources */, - 1618F40576BCC521A3909B191C73A9EB /* RDEPUBNoteModels.swift in Sources */, - FF61ABC6139E8DAFA49DB9F5373E6F55 /* RDEPUBNotePopupCoordinator.swift in Sources */, - 37FD0903639B905E4409D09977752D03 /* RDEPUBNotePopupViewController.swift in Sources */, - E9F125CBF00A57CF9F5F6B064CBEA1E8 /* RDEPUBNoteResolver.swift in Sources */, - 43B272324F27B049A22999BFD57A641B /* RDEPUBPageBreakPolicy.swift in Sources */, - 287DC2B351EBFCB17E9FD06BD5B0BEEC /* RDEPUBPageCountCache.swift in Sources */, - 2113EC29933BDAF581E451E20C5D5870 /* RDEPUBPageInteractionController.swift in Sources */, - E2F0ECB4C3448EB622D3C2F0E6098D19 /* RDEPUBPageLayoutSnapshot.swift in Sources */, - 8145763F6FDDF9986302BABBF0600710 /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, - 489B4BAE35B92E1D5B1C946496BFFB24 /* RDEPUBPageResolver.swift in Sources */, - 6D20E3C4021A2398B5A425D16802B247 /* RDEPUBPaginationCacheCoordinator.swift in Sources */, - A9CEF959019A1A2C2F7CE1300AD8DA99 /* RDEPUBPaginationModels.swift in Sources */, - 08C38A4AB51BB19D174FCE84B7C8B818 /* RDEPUBPaginator.swift in Sources */, - 77FDBEC035F8E996829CB0445674B86E /* RDEPUBParser.swift in Sources */, - 4C48F14434E73F1E51BC0E4B1A77BF4F /* RDEPUBParser+Archive.swift in Sources */, - 78E053FA47E95A6C2B88FC7D28F33FA0 /* RDEPUBParser+Package.swift in Sources */, - C642545C1CE663191B5637C00117A61F /* RDEPUBParser+ReadingProfile.swift in Sources */, - B3AA0EC896AC9F7B8C82BE9423DF9129 /* RDEPUBParser+Resources.swift in Sources */, - 7BC475257897595BA9124800D77B3DF1 /* RDEPUBParser+TOC.swift in Sources */, - 414B95A808B30DE71071E3C8058FDBC0 /* RDEpubPlainTextBookBuilder.swift in Sources */, - F60AAA294767CDDD3169E406247B9380 /* RDEPUBPreferences.swift in Sources */, - F8E3A064FB1E769180E2817B219D286F /* RDEPUBPresentationRuntime.swift in Sources */, - 194F401A32504D7AC25E8E7411624FE4 /* RDEPUBPublication.swift in Sources */, - EC3EA7B4C01A3A1ED4D5407A39A76959 /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, - 5EEA291AB8D9C2BA9EE37E6D48F6E791 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, - 811430D44019ECFC12EB4817CCFD669D /* RDEPUBReaderBottomToolView.swift in Sources */, - 999A87A2813577216B3082C27972A3B1 /* RDEPUBReaderChapterListController.swift in Sources */, - 01B473A60B6660F28A6C2DC1190983D7 /* RDEPUBReaderChromeCoordinator.swift in Sources */, - D797A6DF3DFA1F3951EECF63EF7FB830 /* RDEPUBReaderConfiguration.swift in Sources */, - 8BCE26241634E2C62ECB2DE34B76253F /* RDEpubReaderContentCell.swift in Sources */, - 492817F158DC14ECA68675244770685C /* RDEPUBReaderContext.swift in Sources */, - 264A59B26EDB3A58F5A52FEEC435D9DC /* RDEPUBReaderController.swift in Sources */, - 87247223B203F712F11E08857C4D1A4C /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, - 7C11FBF88BF8E6975649475023157266 /* RDEPUBReaderController+ContentDelegates.swift in Sources */, - 25E20B7238DC18D01EDDB93DF7050E4A /* RDEPUBReaderController+DataSource.swift in Sources */, - 79B6EE55793AA058E8E8CF558AC6E336 /* RDEPUBReaderController+ExternalLinks.swift in Sources */, - BA74FEDF8386A784161857DE1FA11BDE /* RDEPUBReaderController+LocationResolution.swift in Sources */, - B745D0F2F3582E9657748004043FBF2E /* RDEPUBReaderController+Orientation.swift in Sources */, - 0BEE93A7D9D0566CEF608DCFD5DF6AC1 /* RDEPUBReaderController+PublicAPI.swift in Sources */, - 6EF13EBC866CB374570EEC5B4568F533 /* RDEPUBReaderController+RenderSupport.swift in Sources */, - 6691B82D9F522CDDEC01EB69E7492072 /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, - 6289FF67E541F32D2E29CFE631E65959 /* RDEPUBReaderController+TableOfContents.swift in Sources */, - 3B4272C2EE99AA088720ABF347EB480A /* RDEPUBReaderController+Trial.swift in Sources */, - 38483B4553B19EF8DDC3AAC456354850 /* RDEPUBReaderDelegate.swift in Sources */, - 586BE94A6F3AFAB1C0709E7C0283995E /* RDEPUBReaderDependencies.swift in Sources */, - B197A8F1AD9DFAB142A54A4D1B83CACF /* RDEPUBReaderEnvironment.swift in Sources */, - DD1CCD2CA55E1009E5BB6D340F459FFA /* RDEpubReaderFlowLayout.swift in Sources */, - 4C66A02D5240C8F92875B6BF22F2A253 /* RDEpubReaderGestureController.swift in Sources */, - B12DCCFD850AA833E552217D84A57740 /* RDEPUBReaderHighlightsViewController.swift in Sources */, - EC50C49C8E909D9F03EB5599195EA601 /* RDEPUBReaderLoadCoordinator.swift in Sources */, - 69898B3BD87FCA85D66513041A4F0E34 /* RDEPUBReaderLocationCoordinator.swift in Sources */, - 84F2F5779FDDD73E46EFFB12FC9C2A2C /* RDEpubReaderPageChildViewController.swift in Sources */, - 8F3D639470BE37946D38E600ABCA1E79 /* RDEPUBReaderPaginationCoordinator.swift in Sources */, - D2EFA41E48C5E15F3E7ECF1B4D8045E7 /* RDEpubReaderPagingController.swift in Sources */, - 1475FE85DA4D305E075E794861399715 /* RDEPUBReaderPersistence.swift in Sources */, - 58F31A458C136CF488BCBE23AEE55185 /* RDEpubReaderPreloadController.swift in Sources */, - 27D53DB003BBEC19B384BA5191EE6428 /* RDEPUBReaderRuntime.swift in Sources */, - C3D4C353A0EFC89081D53B3A308E25A3 /* RDEPUBReaderSearchBarView.swift in Sources */, - 49E511D8DF590B4FA8E477C3FC5576F5 /* RDEPUBReaderSearchCoordinator.swift in Sources */, - FD3CEE6F4F96C93BF5FE67869F21B693 /* RDEPUBReaderServices.swift in Sources */, - 44FA82871891E16D3EB00A4FABB0B1BE /* RDEPUBReaderSettings.swift in Sources */, - 01FC8D01C6DF7A1953933A1A4A5BC06B /* RDEPUBReaderSettingsViewController.swift in Sources */, - 9531215E369DDA589C0D7C0550196B4F /* RDEpubReaderSpreadResolver.swift in Sources */, - 76B3E09A46D2939B431CC8102510A35A /* RDEPUBReaderState.swift in Sources */, - 99C6A65D237A3EE8C68106ED485EF808 /* RDEPUBReaderTableOfContentsItem.swift in Sources */, - 69D8BA3ECD52020AE48E7E11DAFF09FB /* RDEpubReaderTapRegionHandler.swift in Sources */, - C36631B1DB4935D5C41182D974CBAD92 /* RDEPUBReaderTheme.swift in Sources */, - 3A683EB20C298AA24A299B6E5960929C /* RDEPUBReaderToolView.swift in Sources */, - 4A9D5D28A50783AD3230977BE9EBB358 /* RDEPUBReaderToolViewProtocols.swift in Sources */, - 5289B37B4A81818EFDBA4FD40BC72D57 /* RDEPUBReaderTopToolView.swift in Sources */, - FB80164766B3E15E5D30427D6C72982C /* RDEPUBReaderUIState.swift in Sources */, - 281EBD1BE04710DBC26D7407DA465709 /* RDEpubReaderView.swift in Sources */, - E890843A862487F8C52F6F2993E41C00 /* RDEpubReaderView+CollectionView.swift in Sources */, - EFA62638A4805560C20BAE9ECE0673DD /* RDEpubReaderView+ContentAccess.swift in Sources */, - 50FB42EE78B35DFCFBAD41AC690CE9E7 /* RDEpubReaderView+PageCurl.swift in Sources */, - 6FE680367E784484A92D342F828FDCA9 /* RDEpubReaderView+ToolView.swift in Sources */, - 281408D8F2091DB12464115FD520601E /* RDEpubReaderView-dummy.m in Sources */, - 9B23C738C7E6F86B0F1F7CB233C11836 /* RDEPUBReaderViewportMonitor.swift in Sources */, - A7CB934B6D9ECD5DD836CBDE2C76138C /* RDEpubReaderViewProtocols.swift in Sources */, - 33CAC9C49BD3C2AF5B55A5E4D402F671 /* RDEPUBReadingLocationModels.swift in Sources */, - 13826FE38E03A06B73EFA9A4D16BCB88 /* RDEPUBReadingSession.swift in Sources */, - EF1C288D3C6D6476D771041C6428A031 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, - 097C183F7379FF900C6D66724E240FB6 /* RDEPUBRenderRequest.swift in Sources */, - F73BB9A9DA4804A77FFE2C0B7FEA96B1 /* RDEPUBResourceDataProvider.swift in Sources */, - AF7391A8E39D9D7119A6BB0B53A6A713 /* RDEPUBResourceResolver.swift in Sources */, - 06AEE05D787968CD850BDC966973F1D5 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, - FE74CACF479DFAAB0933F6A7F2B94A0C /* RDEPUBRuntimeChapter.swift in Sources */, - EB972D445111651277060695E6C1C4E1 /* RDEPUBRuntimePageCount.swift in Sources */, - 0E312B4083BA7E353A066E0B2F52B803 /* RDEPUBSafeArea.swift in Sources */, - 99E5012CC97FB2F6192E96CFED83C9E0 /* RDEPUBSearchEngine.swift in Sources */, - D5443E226EA5E8D4D1A13276FB752A28 /* RDEPUBSearchModels.swift in Sources */, - 0FF1BAE6301935C231F1B10CD4374126 /* RDEPUBSelectionLoupeView.swift in Sources */, - 231A81A503466DE0974C0840323CE4C5 /* RDEPUBSelectionOverlayView.swift in Sources */, - 2D3295438CB416E54FF9CE6E6087CD25 /* RDEPUBSelectionState.swift in Sources */, - E6CEA730EEC2B7B3CA2FB7C8418836B3 /* RDEPUBSemanticMarkerInjector.swift in Sources */, - B5A7E8836997AFD32BC70B7CD7C16483 /* RDEPUBSettingsFlipAutomation.swift in Sources */, - 9F5E4F6DE654A1BA5D0387F79F010704 /* RDEPUBStyleCompatibilityModels.swift in Sources */, - E20C37421313D42FE46DC856B1A5D520 /* RDEPUBStyleSheetBuilder.swift in Sources */, - D39C7A23B07B8C9406EF8113D16AEC09 /* RDEPUBStyleSheetComposer.swift in Sources */, - 1225145907B41006DD79D787886C2FEA /* RDEPUBTextAnchor.swift in Sources */, - 02B7EAC8CAB6EA20DAD85D00AE6B2477 /* RDEPUBTextAnnotationOverlay.swift in Sources */, - 1D0FDD4B2C405E4CBD58C91991223ABD /* RDEPUBTextBookBuilder.swift in Sources */, - 5F05D1AA8F614A5618791FC426FE19BD /* RDEPUBTextBookCache.swift in Sources */, - C0998111AEB004F0029967869EEAD5C6 /* RDEPUBTextBookModels.swift in Sources */, - BEDB446C8D343B72E2505BC47B82E81E /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, - 8793467B170F43AAF2C69E88FEDCD235 /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, - 66000437E246337C7600141FB88AEA62 /* RDEPUBTextContentView.swift in Sources */, - 08C8FEA2CF7BDE60973411D7C1521D30 /* RDEPUBTextIndexTable.swift in Sources */, - 0EEA85BCABDAEE137C78FB33C557491A /* RDEPUBTextLayouter.swift in Sources */, - 6F2176AE1E59A9B752E9EC78A2B08860 /* RDEPUBTextLayoutFrame.swift in Sources */, - DD0F576655440D98457A1B2933BC5A8C /* RDEPUBTextPageBoundaryValidator.swift in Sources */, - E43EC0646802EE76F8312B1A6C9F7B11 /* RDEPUBTextPageDecorationView.swift in Sources */, - F795F8E9C157937ED21049306BD2E4CD /* RDEPUBTextPageRenderView.swift in Sources */, - 4F1F5D5483FDDA251FB1467DE9923A30 /* RDEPUBTextPageVerticalJustifier.swift in Sources */, - 09917E2A011B509FB0B3BA35AB0E6F64 /* RDEPUBTextPaginationInterfaces.swift in Sources */, - 0EEE12315BDD224D8B876D1853E1E3DA /* RDEPUBTextPaginationSupport.swift in Sources */, - E9E8DD0934BB047ADE647818AAE1F54D /* RDEPUBTextPerformanceSampler.swift in Sources */, - 481AF1684ABE890B8E8391E1D31C8696 /* RDEPUBTextPositionConverter.swift in Sources */, - 0EDED556A8A6194CC1C962D80F869CB0 /* RDEPUBTextRenderer.swift in Sources */, - 3CBB95CC6329A1108C2D722FE3FE50B3 /* RDEPUBTextRendererSupport.swift in Sources */, - 41D74CCD30877BDEDD686AD4CDB713CF /* RDEPUBTextSearchEngine.swift in Sources */, - E0CB722E0C3D809340E8169823491A7D /* RDEPUBTextSelectionController.swift in Sources */, - CBEF5FF22C882C786456610977CEE989 /* RDEPUBTypesettingPipeline.swift in Sources */, - E02C561890ABEF226084F28312C144FD /* RDEpubURLReaderController.swift in Sources */, - C6EEDBAF5F7BBDA5043DD092207B23B2 /* RDEPUBViewportTypes.swift in Sources */, - 1629BA48D5AB565701A53B759CFD285A /* RDEPUBWebContentView.swift in Sources */, - 7C9658EFE8821A7FE9724951BD959878 /* RDEPUBWebDecorationOverlayView.swift in Sources */, - 4339FA7E2F1E77F9B19A6A5944C0A9BC /* RDEPUBWebView.swift in Sources */, - 62EDA1F4611ECDB2DFEA96CCBFBBCD4B /* RDEPUBWebView+Configuration.swift in Sources */, - 6F8C2314843AA543313C23C23EB5ADA5 /* RDEPUBWebView+FixedLayout.swift in Sources */, - 77EA2DC848D5E5A10E3C4C6D997961A6 /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, - A5C84793439F72FF37B5D796B9302187 /* RDEPUBWebView+Reflowable.swift in Sources */, - 10C1E078A80225DEEE18C2932DD49834 /* RDEPUBWebView+Search.swift in Sources */, - B6B6E1CF260CB973934D7E3ACE76AE95 /* RDEPUBWebViewDebug.swift in Sources */, - 4BD3879013E9A19BBD376D48FAEDD35E /* String+RDEPUB.swift in Sources */, - 49BA9E62A11CF85EBA7E4C0CA5571CF6 /* UIColor+RDEPUB.swift in Sources */, - 6A64360D4047EC479DBA9C73800DD363 /* UIColor+RDEPUBHex.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 36754E7062C08DA07E3A3C4B3F4698F6 /* Sources */ = { + 1D39B32170C86F95C041002A5CAD64EB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 70A9F8F93758993FABCC4CFF223E7148 /* Sources */ = { + 4811A347041CD3123495E41396D145CD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 42E8C52579C378B702EFF01188E53CF7 /* RDPDFKitPageProvider.swift in Sources */, + FE60C8821EA6FDFFF15F22E2E7D77D8B /* RDPDFReaderAnnotationEditorViewController.swift in Sources */, + 8D3EB4BD6C7DFA99BF6D73893EA68A33 /* RDPDFReaderAnnotationListViewController.swift in Sources */, + E3003D23FF1F66710D96674FD3401AC9 /* RDPDFReaderChromeViews.swift in Sources */, + C52C6F329DFC3DFAD3C819385035E5BF /* RDPDFReaderContainerView.swift in Sources */, + 53CD7480D7A5DEA16105271B3A4A0EDA /* RDPDFReaderContentCell.swift in Sources */, + 3E43290CAF5CBB6952FA4429D0E59F7C /* RDPDFReaderContracts.swift in Sources */, + BD99B69B1FBE455C5C1D97E400CBA08A /* RDPDFReaderDebugViewController.swift in Sources */, + 01F9BDEBC2DAA860F9B415ABB5A66A64 /* RDPDFReaderDrawingCanvasView.swift in Sources */, + FB86725957F487474653A42C45AA42C9 /* RDPDFReaderDrawingLayersView.swift in Sources */, + F7A44934CBC37DA0C73DCE477BE239C4 /* RDPDFReaderDrawingToolbar.swift in Sources */, + 33C7582C73593E4E03EDFD4EC04C1FA9 /* RDPDFReaderHighlightOverlayView.swift in Sources */, + 4DE021908E4E1FD343F225D687828B6C /* RDPDFReaderImageTextLayerView.swift in Sources */, + 19FB4576BF3DC1B22EFE421249D4CE70 /* RDPDFReaderImageTextRecognizer.swift in Sources */, + 23BC290FF41AD9EFC3C9C0E9BB9F008C /* RDPDFReaderKitView.swift in Sources */, + 26315E878BB38BE50BD5DD77C00BBBED /* RDPDFReaderNavigationPanelViewController.swift in Sources */, + 1DB02C024072801E6C83196C6F4CD925 /* RDPDFReaderNavigationView.swift in Sources */, + E2A1C8666A6AA28DB866B92F5345A5CE /* RDPDFReaderPageChildViewController.swift in Sources */, + 9D2756A6EA62DC05464345D73FAD772F /* RDPDFReaderPageView.swift in Sources */, + 7168E1F9C232A71118B3DA2720556BF4 /* RDPDFReaderPagingController.swift in Sources */, + 85DC4667579FA4FB8F06DE10D79C1BDB /* RDPDFReaderPanelPresentation.swift in Sources */, + 38A91EB79CFAB78049BB83EB5305634A /* RDPDFReaderPersistenceStore.swift in Sources */, + 4FE3F57478AE12AF0762DB8B7F6658FF /* RDPDFReaderSettingsPanelViewController.swift in Sources */, + 396CC47765C52E169161945557D1E0AC /* RDPDFReaderSettingsView.swift in Sources */, + DEEF4E1E4B210B2DDC5F92CA5567CBD0 /* RDPDFReaderTheme.swift in Sources */, + 129D4B35C96A44FF51627D670168E256 /* RDPDFReaderView+CollectionView.swift in Sources */, + 23A689CCA9073CE674B1BD450629DECA /* RDPDFReaderView+Paging.swift in Sources */, + D0210B7499AF32A36B60CE3505882F5A /* RDPDFReaderView+ToolView.swift in Sources */, + E332413296CEEDC19C116F40479D29DB /* RDPDFReaderView-dummy.m in Sources */, + F3B8C6A7E543BD8E7CAE2E415B37F0D1 /* RDPDFReaderViewController.swift in Sources */, + 6718A9F16B4A4A16F013239280B88878 /* RDPDFZoomablePageView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 555C73618585AE6A4CFC6E68CAD9BC9F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E77445593DA7F38F2F26305070A40C4D /* RDCBZReaderController.swift in Sources */, + F8CC36A42110B1FA934258DCF4EB4762 /* RDEPUBAnnotationEditorViewController.swift in Sources */, + 10446CA423A9DBE2C3CE27C0C5BBE952 /* RDEPUBAnnotationModels.swift in Sources */, + A3E97A57562EF0233C951964D26DBBCA /* RDEPUBAssetRepository.swift in Sources */, + 09B49EFE6223F79FA3DBF2322ABEC3A1 /* RDEPUBAttachmentNormalizer.swift in Sources */, + 57FC7A6DE84141D6B2636B9ED8E0BE82 /* RDEPUBAttachmentTooltipOverlayView.swift in Sources */, + 792F6B7B1C3B9A3E43BD3041EB92C0EF /* RDEPUBAttachmentTooltipView.swift in Sources */, + CF77CBF45ED2550761E077F815485CC8 /* RDEPUBBackgroundCoverageStore.swift in Sources */, + 28E83C2B2DBF5887E15EA2F133800C2D /* RDEPUBBackgroundPriorityPolicy.swift in Sources */, + F27993F10ABA4CC86FD5C58FF39D5883 /* RDEPUBBackgroundTrace.swift in Sources */, + 817FA29F739BD7F8C5C1133184CF2746 /* RDEPUBBookPageMap.swift in Sources */, + E879F9B012873321CEC6EA825C6DFBF5 /* RDEPUBBuildDiagnosticsReporter.swift in Sources */, + 3ACD250804B9C734DEAF67E260F15920 /* RDEPUBCFI.swift in Sources */, + B62CB41227F697B35B476BF17EDFE501 /* RDEPUBCFICompatibility.swift in Sources */, + 683AFD98CF56982AB1C10BA80D822FA2 /* RDEPUBCFIDOMPathBuilder.swift in Sources */, + 8805A1F85260DC0DFCFDE413253C02FF /* RDEPUBCFIError.swift in Sources */, + 1E3CAFB57AC9CEDA5052E2B7C2862DFD /* RDEPUBCFIGenerator.swift in Sources */, + 706B056B4481A496B6A0B743A5597C07 /* RDEPUBCFIMap.swift in Sources */, + 0BB8E31E895FFFDDAB4CC41EEE1FB440 /* RDEPUBCFIMarkerInjector.swift in Sources */, + 49DFEB47397EBEBF0A18636FADB893BD /* RDEPUBCFIParser.swift in Sources */, + 5D05C7FABA8E6A777B3666515CC940B1 /* RDEPUBCFIPath.swift in Sources */, + 55C51A8032ED8F803ABD609382A716E1 /* RDEPUBCFIRange.swift in Sources */, + 90408C125712B1309AEA647C8804B199 /* RDEPUBCFIRecoveryEngine.swift in Sources */, + 27C488C467E166610F298953A8253BC2 /* RDEPUBCFIResolver.swift in Sources */, + 96AFFB9EB202E212B3EED5A173C4E9E3 /* RDEPUBCFISerializer.swift in Sources */, + 3DE492221688A9FD941CB0C4F83B3EEB /* RDEPUBCFITextAssertion.swift in Sources */, + B99880D5CC636DA9EA158C79AD0454A1 /* RDEPUBCFIUtilities.swift in Sources */, + FC910AA696FF18C84A6365DF9C9C424F /* RDEPUBChapterCacheKey.swift in Sources */, + 00BFF92A6EB62A825FC27C55B773FFB4 /* RDEPUBChapterData.swift in Sources */, + A0AD6102848CEFDC5FB444E65B956F6E /* RDEPUBChapterDataCache.swift in Sources */, + 72195EDF65B2BA88E55902F13FBDB5A4 /* RDEPUBChapterDisplayContentCache.swift in Sources */, + ABD0544F7103859B11D1DE040E2D516C /* RDEPUBChapterLoader.swift in Sources */, + B4349104AAB928C77DA7856B8078D9A6 /* RDEPUBChapterLocation.swift in Sources */, + 43B0CBD98713B6E86A6FB47D0C57A364 /* RDEPUBChapterOffsetMap.swift in Sources */, + 460DDC8FF9C5EE77B50366F64504C975 /* RDEPUBChapterPageCounter.swift in Sources */, + 78FF15D0FA9004E03E7ADE959EFFE565 /* RDEPUBChapterRuntimeStore.swift in Sources */, + 6C9845389C901217D168604D8F9E904E /* RDEPUBChapterSummaryDiskCache.swift in Sources */, + 2FA5C87F7EAAA97726C4CD9D9B059B6F /* RDEPUBChapterTailNormalizer.swift in Sources */, + 76FFC611487FEE9BB8BAC371752FDDE8 /* RDEPUBChapterWarmupOrchestrator.swift in Sources */, + 758FFAAF7DE564B5765C9F3BAEA2E202 /* RDEPUBCoreTextPageFrameFactory.swift in Sources */, + B8FA5ED7AFE0CBE95DC65A57AAA0273F /* RDEPUBCSSCompatibilityLayer.swift in Sources */, + D570C4EE6360476832BEE5BD97163074 /* RDEPUBDarkImageAdjuster.swift in Sources */, + A27AB28EB7B1A95485537F7493161E24 /* RDEPUBDecryptingImageAttachment.swift in Sources */, + 8CE7E564E4F1F50CEC10E13DAE1DB56D /* RDEPUBDTCoreTextRenderer.swift in Sources */, + 6E735A47E8E6CD48E6AB808F6296686B /* RDEPUBFixedLayoutTemplate.swift in Sources */, + ECFAA40DD992BE7A5EDE980982AD08DD /* RDEPUBFontFallbackResolver.swift in Sources */, + 363B602299B0E9D8B396DB307E881B45 /* RDEPUBFontNormalizer.swift in Sources */, + 67B6056A1C2233857A796A920A5C94D0 /* RDEPUBFragmentMarkerInjector.swift in Sources */, + B96DE08EB4CDFD7CE0250A3927A31B8F /* RDEPUBHTMLNormalizer.swift in Sources */, + C0214EF0F9B92329063CB89AD0B5880F /* RDEPUBImageViewController.swift in Sources */, + 7CBF1FB34C28C44DF64801D6DEB4F783 /* RDEPUBImageViewerCoordinator.swift in Sources */, + D189922DBB83C25BC8E8F59FF51BAF34 /* RDEPUBJavaScriptBridge.swift in Sources */, + 658095BA15CB2808046C9EB08F06CCED /* RDEPUBJumpSession.swift in Sources */, + 15E4A50ACA89EF7661AE074DBFFDF5B7 /* RDEPUBMemoryProbe.swift in Sources */, + 6F8DFEC4D6D635520E3156DEDB24B4FC /* RDEPUBMetadataParseCancellationController.swift in Sources */, + 7B38C10310A465531DE6ADCAC241E681 /* RDEPUBMetadataParseWorker.swift in Sources */, + 01AF419B0730918A46EF569E2391B967 /* RDEPUBModels.swift in Sources */, + 98A025951F12B433AD115CD3CEDDDBD8 /* RDEPUBNavigatorLayoutContext.swift in Sources */, + 307B51E3CC861F36EACCB6A40E68B9CD /* RDEPUBNoteDetector.swift in Sources */, + CC3DE77B844BEE95F78D0769BC4EBAF9 /* RDEPUBNoteModels.swift in Sources */, + A097F26C01A8A85039E5E2D19EABF24D /* RDEPUBNotePopupCoordinator.swift in Sources */, + 36DC8E915917725A9DB5CABDCB5015D4 /* RDEPUBNotePopupViewController.swift in Sources */, + 1E8BEAB75C40E2ED799CAA16BAC8807A /* RDEPUBNoteResolver.swift in Sources */, + 9C05C97A74E7281F25F2BB0245A9D715 /* RDEPUBPageBreakPolicy.swift in Sources */, + 8DB5CC8706F527BFB11525A6B73BB1B2 /* RDEPUBPageCountCache.swift in Sources */, + 2808691D62CA0901739A8462538139A5 /* RDEPUBPageInteractionController.swift in Sources */, + 5075124CA1638D3C269DEA00ECA3964D /* RDEPUBPageLayoutSnapshot.swift in Sources */, + E102A76415883B74C6C2A300C9094F0F /* RDEPUBPageMapReconciliationCoordinator.swift in Sources */, + FD9CC3756A7CBCC3040DD785487B0500 /* RDEPUBPageResolver.swift in Sources */, + 5836CA35B11F27537237D9A6E3E3C334 /* RDEPUBPaginationCacheCoordinator.swift in Sources */, + E999AE7BACD93F7AFDF04211C39AC35D /* RDEPUBPaginationModels.swift in Sources */, + 5587CEE3C0E5288818C3C5DD8562EF3D /* RDEPUBPaginator.swift in Sources */, + 0B16758571EB7BE5E544AE8896E74B36 /* RDEPUBParser.swift in Sources */, + 66B93253DE7FE999F8144CC939605F3A /* RDEPUBParser+Archive.swift in Sources */, + 1A4D4371A6D8086811CA461DC49BA33F /* RDEPUBParser+Package.swift in Sources */, + F85A22E53A91AC2EF0FBECA87103370C /* RDEPUBParser+ReadingProfile.swift in Sources */, + EA2491A494DAB37C07D615273AEC8DE5 /* RDEPUBParser+Resources.swift in Sources */, + 5F48422418D87D8794EB690F577D9D14 /* RDEPUBParser+TOC.swift in Sources */, + 3ED3D590470EB5D28E8E0A0F35DE1A23 /* RDEpubPlainTextBookBuilder.swift in Sources */, + 407E8286C3E02E9DCA0119C0D969FEF6 /* RDEPUBPreferences.swift in Sources */, + B71CA96B831364187FC460130EB25C8A /* RDEPUBPresentationRuntime.swift in Sources */, + 5363B2BC23909119FC8F9986DC3665F2 /* RDEPUBPublication.swift in Sources */, + 51340BC6E06C090CB50B286724831E7B /* RDEPUBReaderAnnotationCoordinator.swift in Sources */, + BE2B7071A08224DF4550AB00049D73F2 /* RDEPUBReaderAssemblyCoordinator.swift in Sources */, + CB5890C41FEAB82999C9A4DFFC425A5D /* RDEPUBReaderBottomToolView.swift in Sources */, + 54CC0E42773420964101E9C51F71E941 /* RDEPUBReaderChapterListController.swift in Sources */, + BF0E8909D0E84A8E6623208CB97C9CC4 /* RDEPUBReaderChromeCoordinator.swift in Sources */, + A06D0DF52FF6AE1F6C4482BBABD73C1F /* RDEPUBReaderConfiguration.swift in Sources */, + E9EB20207ED0C4F50D5A555F62CE845A /* RDEpubReaderContentCell.swift in Sources */, + 1989C9CC57E1100B8EDF3F5844C9DA6E /* RDEPUBReaderContext.swift in Sources */, + 51A0BEADEA665AE04BFEC268553C1249 /* RDEPUBReaderController.swift in Sources */, + E690D3041E8FF360ED48B6A3B1CF1AEB /* RDEPUBReaderController+AttachmentTooltip.swift in Sources */, + E31F16819C8D2E59CE9EC3EAF8E88C51 /* RDEPUBReaderController+ContentDelegates.swift in Sources */, + A53382EEF80D25E2E84B30BDF87D32CA /* RDEPUBReaderController+DataSource.swift in Sources */, + 69215D0CBD8EB9B7941A6E997428AB35 /* RDEPUBReaderController+ExternalLinks.swift in Sources */, + 739B2A424AACAA53C6F2A454C1147C51 /* RDEPUBReaderController+LocationResolution.swift in Sources */, + 0D165B3DF90CADA8EE5DCCCB44A9B2E1 /* RDEPUBReaderController+Orientation.swift in Sources */, + 9EAEDB014CE2E937A47B6BB37B59743A /* RDEPUBReaderController+PublicAPI.swift in Sources */, + 4995967B0C0F48A4437FBA42B1525685 /* RDEPUBReaderController+RenderSupport.swift in Sources */, + 58BD63B311E131A04D27C09E6A44DCAD /* RDEPUBReaderController+RuntimeBridge.swift in Sources */, + B9271BC5E425AD8ADD4C6D561B97D4C1 /* RDEPUBReaderController+TableOfContents.swift in Sources */, + 84DF69BDF1ABA4C534918FECEB4FC190 /* RDEPUBReaderController+Trial.swift in Sources */, + 56FF83A81EAAE4DF9074B3D93B447C60 /* RDEPUBReaderDelegate.swift in Sources */, + 13779EFC4B60766AA45F4C453EC5E89A /* RDEPUBReaderDependencies.swift in Sources */, + C93FDFB56432C0DBE56701FB01995625 /* RDEPUBReaderEnvironment.swift in Sources */, + 9D8DF57114A6CB59686EC2A5EF82720A /* RDEpubReaderFlowLayout.swift in Sources */, + 4C571730BAEA49B8E2B4AAB5FF4C6ABC /* RDEpubReaderGestureController.swift in Sources */, + 1B757164A8714741AEB51962CE84E0AF /* RDEPUBReaderHighlightsViewController.swift in Sources */, + 88739AD8ADFE0F01CCE72073E6B5EE29 /* RDEPUBReaderLoadCoordinator.swift in Sources */, + 757A9887DFF1AE4E5CA26E82C4129CA3 /* RDEPUBReaderLocationCoordinator.swift in Sources */, + A184446D12B20A2A45844257D9E09E1E /* RDEpubReaderPageChildViewController.swift in Sources */, + EAB24829872CF4EA95664E3FA0FD3A68 /* RDEPUBReaderPaginationCoordinator.swift in Sources */, + E00758E44CA106CFC4DC2A2137F62C68 /* RDEpubReaderPagingController.swift in Sources */, + FC5C5DF74B3755DADC1B85BC0B35FAF6 /* RDEPUBReaderPersistence.swift in Sources */, + CC2EF0E7EBB0C4F7D7F2B360DF7FE9B8 /* RDEpubReaderPreloadController.swift in Sources */, + 135E8C300067D3E03A313D518706EAA9 /* RDEPUBReaderRuntime.swift in Sources */, + A4E62D819CC311F109A2672A40906667 /* RDEPUBReaderSearchBarView.swift in Sources */, + F5CA27E5123B11C9A15C361F2D9DE8D8 /* RDEPUBReaderSearchCoordinator.swift in Sources */, + 5C91C49D7918D688CA79565E21001BF8 /* RDEPUBReaderServices.swift in Sources */, + ABF58E16D763E200F4199DCC20ADC6DF /* RDEPUBReaderSettings.swift in Sources */, + 287346F1E7822C038D95AAC869F8EE1A /* RDEPUBReaderSettingsViewController.swift in Sources */, + AB15CDEC956F4EA7131C036C892962B6 /* RDEpubReaderSpreadResolver.swift in Sources */, + C21EA46F0CB466BE3330A769D4E02E45 /* RDEPUBReaderState.swift in Sources */, + 88834B5C7C7321AE147C125A772EBD22 /* RDEPUBReaderTableOfContentsItem.swift in Sources */, + 9262E9FD58A8DF61BA8D1828AC78ECE0 /* RDEpubReaderTapRegionHandler.swift in Sources */, + 2B2B79EBE69FD69100988552BD920775 /* RDEPUBReaderTheme.swift in Sources */, + 4953AE4BD31D4185D3091ECC6CAC24F9 /* RDEPUBReaderToolView.swift in Sources */, + 051F47746E8330E1BB280C3A4A0EC510 /* RDEPUBReaderToolViewProtocols.swift in Sources */, + 5E9A7DB6BB90E0A62F1B7153EED46953 /* RDEPUBReaderTopToolView.swift in Sources */, + 598FECAC8A0A211A0CD1C4BFC4F5D17D /* RDEPUBReaderUIState.swift in Sources */, + 762B5E129DB0C0E55E2B15F0DE33A3D0 /* RDEpubReaderView.swift in Sources */, + C6E5F70AFE3C2B3D74A6555B3F96FC7B /* RDEpubReaderView+CollectionView.swift in Sources */, + DB6F4AB155823AFB16A8B6FAE732A062 /* RDEpubReaderView+ContentAccess.swift in Sources */, + 47823BDDB026FB3AA03789F952BADF09 /* RDEpubReaderView+PageCurl.swift in Sources */, + A7A84555DC1EFB6AA2A1CD92EF8E05EB /* RDEpubReaderView+ToolView.swift in Sources */, + B1209E507F02612272E977F7388C1CA6 /* RDEpubReaderView-dummy.m in Sources */, + 786E03AE79A040289810E23F3650798A /* RDEPUBReaderViewportMonitor.swift in Sources */, + AC493BA061950FEE835F5305A5C0EFED /* RDEpubReaderViewProtocols.swift in Sources */, + 58E895FB648D69922341F4D6FC7D223F /* RDEPUBReadingLocationModels.swift in Sources */, + 6A7B01BF9329C09B25AD50C51CB57400 /* RDEPUBReadingSession.swift in Sources */, + 1639ACF52DF98CEB9D0209EAD4CD6AA3 /* RDEPUBRenderDiagnosticsCollector.swift in Sources */, + 2C3E8B24AC8FD7CC8759287E1DA19180 /* RDEPUBRenderRequest.swift in Sources */, + 3EB9DCC1A22D23ECBA68D493F0EB8994 /* RDEPUBResourceDataProvider.swift in Sources */, + E0249E144B3E3276D4B97F9A63E87825 /* RDEPUBResourceResolver.swift in Sources */, + 6CCD41B742640A2FE9F2537378D53FE6 /* RDEPUBResourceURLSchemeHandler.swift in Sources */, + 8E74EF124593A0E8C42F05F34F18DF7D /* RDEPUBRuntimeChapter.swift in Sources */, + 61953AE6CF7B054825AF861A30F0E0D1 /* RDEPUBRuntimePageCount.swift in Sources */, + E676D40AA424AC6D817FEBFEBC17D6A8 /* RDEPUBSafeArea.swift in Sources */, + 17281C88AE75A26C730E43C15467E723 /* RDEPUBSearchEngine.swift in Sources */, + 9E7B8B9F265A36A8058BE39018E9E339 /* RDEPUBSearchModels.swift in Sources */, + D8445E15B15818CC32F0F5FEA3DB32C8 /* RDEPUBSelectionLoupeView.swift in Sources */, + 795AC979765E7A188006C6A44D1A5081 /* RDEPUBSelectionOverlayView.swift in Sources */, + B647D72A5A14CFD2C63C9E33B8A83B62 /* RDEPUBSelectionState.swift in Sources */, + 2285D8F6F8450CB71AAFC2398CA269EC /* RDEPUBSemanticMarkerInjector.swift in Sources */, + 6E8D5163A139D27A576ECFFF0EE0BF47 /* RDEPUBSettingsFlipAutomation.swift in Sources */, + EB6DDD12EA3D1E5E365E6A3C5D1A248C /* RDEPUBStyleCompatibilityModels.swift in Sources */, + 4D1DE840FE2BDF91A821B28921B9DA46 /* RDEPUBStyleSheetBuilder.swift in Sources */, + AD1E9FB8A3B05645F8805FB26F814DF4 /* RDEPUBStyleSheetComposer.swift in Sources */, + FD23980142BDA1955145B577739A2CD2 /* RDEPUBTextAnchor.swift in Sources */, + 99602A29E251C50BCC2EFD40D03716C8 /* RDEPUBTextAnnotationOverlay.swift in Sources */, + 6E3C87D8CA0283564A8FDCDCC44B2DC9 /* RDEPUBTextBookBuilder.swift in Sources */, + A5D15AF6A625AAEE7A68E724600DE2EE /* RDEPUBTextBookCache.swift in Sources */, + B56C0BC177945BD67D43DA9784709273 /* RDEPUBTextBookModels.swift in Sources */, + C2A74F19B4F40EBF0E94256A632E8EFD /* RDEPUBTextBuildPipelineInterfaces.swift in Sources */, + F6B6B5335297604654B91F9DB1B625CC /* RDEPUBTextContentInteractionCoordinator.swift in Sources */, + C0FA604044813AF3977DB6E38D086EAE /* RDEPUBTextContentView.swift in Sources */, + 3FE37FCED1213F0CCD4CE93FD10BD0E9 /* RDEPUBTextIndexTable.swift in Sources */, + 55BA631EFFCE67592653F9A6790490DB /* RDEPUBTextLayouter.swift in Sources */, + EFE6DECC787C462818A9B3C3E075E0E5 /* RDEPUBTextLayoutFrame.swift in Sources */, + 416183B9FBBC3C7623F0F97E2A0DEB09 /* RDEPUBTextPageBoundaryValidator.swift in Sources */, + 89B166C4B24D15FAA70EB6B52E89B572 /* RDEPUBTextPageDecorationView.swift in Sources */, + CF4B683FEB083614C57097E02204930B /* RDEPUBTextPageRenderView.swift in Sources */, + 460CEA9F3899BE4066AE872BCA931771 /* RDEPUBTextPageVerticalJustifier.swift in Sources */, + D2419445E59791BD0A58247BEC366E9F /* RDEPUBTextPaginationInterfaces.swift in Sources */, + 78115EEA858DA63B6836E385A8D3D7EB /* RDEPUBTextPaginationSupport.swift in Sources */, + D860F690E2BA824A33842A069D805612 /* RDEPUBTextPerformanceSampler.swift in Sources */, + D521D48B2138B46063941457702CCFBF /* RDEPUBTextPositionConverter.swift in Sources */, + E1E62EA38EAAA0B37F4C2B94AEABA717 /* RDEPUBTextRenderer.swift in Sources */, + F35FC5777D29A52C05955D9A33E191F3 /* RDEPUBTextRendererSupport.swift in Sources */, + AB3268891858D675485E80816DFA75C1 /* RDEPUBTextSearchEngine.swift in Sources */, + BCF514662DC610C45F4EBB4CDD4DB446 /* RDEPUBTextSelectionController.swift in Sources */, + F10C0868A69A442CA04FC421CBE6C1FC /* RDEPUBTypesettingPipeline.swift in Sources */, + 3C6F422428CE8B9F2AED56B60B2C9602 /* RDEpubURLReaderController.swift in Sources */, + 8003BE5D54D632D2DB96F39A97EA14BC /* RDEPUBViewportTypes.swift in Sources */, + 05D41C82695A154984AB656F29955C77 /* RDEPUBWebContentView.swift in Sources */, + 9CF3ED83D568246E7BCEA2A2C4D38473 /* RDEPUBWebDecorationOverlayView.swift in Sources */, + 89933A4738255CBB0CECFD0C4FCEC371 /* RDEPUBWebView.swift in Sources */, + 00A77DF1E3D88B9FB43E68863591E2E7 /* RDEPUBWebView+Configuration.swift in Sources */, + F67B03A6B84144C24A8727EBA9A85560 /* RDEPUBWebView+FixedLayout.swift in Sources */, + 4054EDC26E6972F014B40C6D58B1E348 /* RDEPUBWebView+JavaScriptBridge.swift in Sources */, + 7D1BC4BFD9942BC180D8B2F8AE1C1952 /* RDEPUBWebView+Reflowable.swift in Sources */, + 15ADFF2FC3055D22BE783942D1212A11 /* RDEPUBWebView+Search.swift in Sources */, + 294DF90539B944BF674F3C9C999D6F23 /* RDEPUBWebViewDebug.swift in Sources */, + 1B0202FF627E2F99AA09AD8D76A84AC9 /* RDMOBIParser.swift in Sources */, + 553D996359941996BCDF3F73F48CB96A /* RDReaderDocumentFormat.swift in Sources */, + 91DD2C713D72D75B59D2E5FD28733A8E /* String+RDEPUB.swift in Sources */, + FD31618D8F4420C75C745EDCFC38D9EB /* UIColor+RDEPUB.swift in Sources */, + 0580598854A03D4712CE0EE68716DBAD /* UIColor+RDEPUBHex.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5E93E448B68A840FDF8BFC9C495D6398 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 78858E76A13C1C769450576FA6328029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 10D2345D0BDAB0A1116848C3E6556168 /* Archive.swift in Sources */, + 9CE219EB6F092600CA33E15CE41CC38E /* Archive+BackingConfiguration.swift in Sources */, + 4EC2770415CD64F8EC90F4971FE01F2A /* Archive+Deprecated.swift in Sources */, + D0CEC4798C2DA9CDC93E3CC59BD03B79 /* Archive+Helpers.swift in Sources */, + 3AABEE7BEF895AE3EEC5DEA7743A4356 /* Archive+MemoryFile.swift in Sources */, + 2413A6C52542F45B1661CF6AC1FE2D65 /* Archive+Progress.swift in Sources */, + 222A251FA9F106A668FC4273EC4200FF /* Archive+Reading.swift in Sources */, + 62F77E2F83B486840605A84A8BFC670E /* Archive+ReadingDeprecated.swift in Sources */, + AF16ED52BCD49CCD7B7D19E5CC19F617 /* Archive+Writing.swift in Sources */, + F7C25175A4415DE466783A53BDBDBB9E /* Archive+WritingDeprecated.swift in Sources */, + 81E05D0BAEC9A1F7FC50DB906D83B4C0 /* Archive+ZIP64.swift in Sources */, + 1EE5DC3F2D93547DB6E397E8B963C7F6 /* Data+Compression.swift in Sources */, + DDCD814F4CFC21B9941982C85653DC65 /* Data+CompressionDeprecated.swift in Sources */, + B2905E16F0C9B8659C065FCFD4F8C04E /* Data+Serialization.swift in Sources */, + CD7BE6FF1D68DD425C945B2CE0247C5A /* Date+ZIP.swift in Sources */, + B6870FF977C2C853A5448FEBCB5023EA /* Entry.swift in Sources */, + B02F375B16AD7C7C33D916BC92AA6DD8 /* Entry+Serialization.swift in Sources */, + BF0BDBA82FA333DA21F02074DF249459 /* Entry+ZIP64.swift in Sources */, + 09B8D40F105A1239C137746B77D54A49 /* FileManager+ZIP.swift in Sources */, + FF538BF0A80A8D99B78743597C47334F /* FileManager+ZIPDeprecated.swift in Sources */, + 39B236CB7C9212BFAE8D3830C361B196 /* URL+ZIP.swift in Sources */, + 9BCC983EA5231C9D263FA645D58D0CC4 /* ZIPFoundation-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3051,135 +3156,59 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 86AADFA00FC53DA026F2685DCE7D5D7F /* Sources */ = { + 79B3E3F214EE4E4CBE7114FA2591FE52 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CED3CE21E1645DBA2A501CA1C83E9BE1 /* Constraint.swift in Sources */, - C613249A85C77E9C43DCA47A9AE945D8 /* ConstraintAttributes.swift in Sources */, - 6B34BED0BE3E42DD6766994507411010 /* ConstraintConfig.swift in Sources */, - 8D8693D24CC0B3A63CA2B625DA7527A6 /* ConstraintConstantTarget.swift in Sources */, - F3D2B73B9F771B747DAA052AD43D995A /* ConstraintDescription.swift in Sources */, - CABB94F792C73EAD4440D122DB442578 /* ConstraintDirectionalInsets.swift in Sources */, - 02327DA0F3E6004674D1E7AB340460D3 /* ConstraintDirectionalInsetTarget.swift in Sources */, - FB2FCAAD9D0863BD6627155B0E22A9CD /* ConstraintDSL.swift in Sources */, - 6944C0486AACC018A3594D2FF44B091C /* ConstraintInsets.swift in Sources */, - E1A5ABA2C94654121B71B7AACBADBF22 /* ConstraintInsetTarget.swift in Sources */, - 4CF50C1063D92172A3870CC7CE56390A /* ConstraintItem.swift in Sources */, - E5D2B6889CDB07A18DE6BF5D3E3C8F41 /* ConstraintLayoutGuide.swift in Sources */, - 64D323E53849CEC5DA02471030AF380E /* ConstraintLayoutGuide+Extensions.swift in Sources */, - 323C5826CB22EA9CFDE97DDF0E34BABC /* ConstraintLayoutGuideDSL.swift in Sources */, - 43550113041670206E6B2B7FD12E0617 /* ConstraintLayoutSupport.swift in Sources */, - 5543DD40077B88D5D9FCABA6B3C6545B /* ConstraintLayoutSupportDSL.swift in Sources */, - 813FCE7200C4EDE80AB2778A78E3F97A /* ConstraintMaker.swift in Sources */, - 4FFCEA35D3F94EF9915425BF6074B532 /* ConstraintMakerEditable.swift in Sources */, - 760DB6B13D63ADD85CD56D1B38E1483F /* ConstraintMakerExtendable.swift in Sources */, - CC822208F3392EB10A21409435862AD5 /* ConstraintMakerFinalizable.swift in Sources */, - 4B33EA19AEA45043C9243B89B3B0BE99 /* ConstraintMakerPrioritizable.swift in Sources */, - 08FB57288C347F62017392F600BAA125 /* ConstraintMakerRelatable.swift in Sources */, - 0AC10C7D9FCA224D69994127F1F565EA /* ConstraintMakerRelatable+Extensions.swift in Sources */, - EFFBA0D067AF69E544E0C281376E8292 /* ConstraintMultiplierTarget.swift in Sources */, - CB924D66C628DC58D5EB0ECA173AFD06 /* ConstraintOffsetTarget.swift in Sources */, - 9F2E29FBAF2D78C3FA705FA4DFF200E6 /* ConstraintPriority.swift in Sources */, - 770F036B35ECA7FE47DBCB438B90FA87 /* ConstraintPriorityTarget.swift in Sources */, - 129F14F7249D4F8967048B531FD5DAC1 /* ConstraintRelatableTarget.swift in Sources */, - ABC2245EAE7966C55ED85B5C8D580153 /* ConstraintRelation.swift in Sources */, - ADDEFD3EAF600CBD6E033E73917C8B75 /* ConstraintView.swift in Sources */, - 02AED0A624C2668913C7E251E1B5383A /* ConstraintView+Extensions.swift in Sources */, - 007914DC0FA00D1715074DCDE279DAB6 /* ConstraintViewDSL.swift in Sources */, - 400A072B0685B2775273D54DCAEB7EEB /* Debugging.swift in Sources */, - EFDBAD111E6786095F9260B218773B06 /* LayoutConstraint.swift in Sources */, - 711F6E1D5B3013616AB1F2DCE379843B /* LayoutConstraintItem.swift in Sources */, - 40E94901309752B5935E850C7BAEA84E /* SnapKit-dummy.m in Sources */, - 1D89AD7754C1740422BEFCA0F8570295 /* Typealiases.swift in Sources */, - F6254E5BE265BA67E1140D8764994BAB /* UILayoutSupport+Extensions.swift in Sources */, + 96B287B7613D827030A3444C1F1016A3 /* Constraint.swift in Sources */, + BC4AE1B68D8554F1A9C71FEFC4FBCB31 /* ConstraintAttributes.swift in Sources */, + 5766BBAF238D43A234A9965D209D3456 /* ConstraintConfig.swift in Sources */, + 23BBE3B3573E7296084D8A61A1FA1AD4 /* ConstraintConstantTarget.swift in Sources */, + 2BD3DBBA503E1B2B2AB4AE1EED3612A4 /* ConstraintDescription.swift in Sources */, + 010659F20A2ABE308E90E1BBC242BD90 /* ConstraintDirectionalInsets.swift in Sources */, + D43F7557B00A156FE247DBE8E26E51B3 /* ConstraintDirectionalInsetTarget.swift in Sources */, + 92F000C7625CBA207F48EF95B9781D89 /* ConstraintDSL.swift in Sources */, + 96724FD78DA6E4B95E96A4260EBC7C0F /* ConstraintInsets.swift in Sources */, + 155F420C89324E92D8DE72847F1D7E64 /* ConstraintInsetTarget.swift in Sources */, + 44B308C0F464440B6DC02DA06AC0CEBE /* ConstraintItem.swift in Sources */, + 8F44CA30A7274B9035B30B0CEC895B47 /* ConstraintLayoutGuide.swift in Sources */, + 46759C5BEEA541B506D8364771C1762F /* ConstraintLayoutGuide+Extensions.swift in Sources */, + 13939482D36155060087CC4080166F49 /* ConstraintLayoutGuideDSL.swift in Sources */, + 7E47D5B14C16612DADE842BFAF3E6DF2 /* ConstraintLayoutSupport.swift in Sources */, + 24B7824198086E4C7FEA42755440DF60 /* ConstraintLayoutSupportDSL.swift in Sources */, + 05FCA262E9BFEA1114B209A4B7A369E1 /* ConstraintMaker.swift in Sources */, + 1ECD2540B27D5D2E20144AC08D55DC85 /* ConstraintMakerEditable.swift in Sources */, + 682437E668DB3D6C9E6B72FEB41D5FBF /* ConstraintMakerExtendable.swift in Sources */, + E0D06D790679C2908871D9A7C32D19CF /* ConstraintMakerFinalizable.swift in Sources */, + 41181309680AD350246E05D2FF51B3CE /* ConstraintMakerPrioritizable.swift in Sources */, + D72B9DD54B69A441232EB4675E9A396A /* ConstraintMakerRelatable.swift in Sources */, + 10639C21834EA03821258B750FF59966 /* ConstraintMakerRelatable+Extensions.swift in Sources */, + 954296DCFAC0A89B6ED281D0B88ED2B9 /* ConstraintMultiplierTarget.swift in Sources */, + 2636FEA811FE9EEEFEA940143DD17AB3 /* ConstraintOffsetTarget.swift in Sources */, + 3A6FC9CBAE2C39A84FF7ED27DA29CC5B /* ConstraintPriority.swift in Sources */, + 6071184E8ECB9E5DE7187A363FAE8C62 /* ConstraintPriorityTarget.swift in Sources */, + 1A2AED084871CA3A78226A16B2893A71 /* ConstraintRelatableTarget.swift in Sources */, + 786BF7747848520712F08044A0D02D80 /* ConstraintRelation.swift in Sources */, + 00533D00D0799587B6A77B4BAF852F16 /* ConstraintView.swift in Sources */, + 40E6FDFB6C87C3FACD94999F9007B22A /* ConstraintView+Extensions.swift in Sources */, + 90755EAACF679D579C32EB0775BEA867 /* ConstraintViewDSL.swift in Sources */, + D441C9BCE1EDEDF0C962A695D33E1C04 /* Debugging.swift in Sources */, + AAE4A96FB3FBC30E2F73F040437B8380 /* LayoutConstraint.swift in Sources */, + 05D03C10C306DD68133220014C15C963 /* LayoutConstraintItem.swift in Sources */, + 0961AAE9066CA5087BF43739577F66D1 /* SnapKit-dummy.m in Sources */, + D09EAE862E8BA3A7A5EC8028EC30DEB9 /* Typealiases.swift in Sources */, + 59B5E86ACB2ECBF2F44515967AF5C0F5 /* UILayoutSupport+Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 941E24363EAD2678023A563A365C0A83 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED9F3821439164320766526A05EEF187 /* RDPDFReaderAnnotationEditorViewController.swift in Sources */, - 328F6059B7D9E758307410242C05AF3F /* RDPDFReaderAnnotationListViewController.swift in Sources */, - 48EDA2D55A7167AE17A4C55CF592B77E /* RDPDFReaderChromeViews.swift in Sources */, - A7315C7C4E7FC712CDCEEC5DD0A436DC /* RDPDFReaderContainerView.swift in Sources */, - 03F5BDB8A984D25AA8B5C3A04A0785BA /* RDPDFReaderContentCell.swift in Sources */, - DD2E6568C5109C447B7113123444CD50 /* RDPDFReaderContracts.swift in Sources */, - 3C6E19F45001B5C9C01B2544C766C6E3 /* RDPDFReaderDebugViewController.swift in Sources */, - 394D1577E6E86952C1D8DB4496A64C78 /* RDPDFReaderDrawingCanvasView.swift in Sources */, - 730342A37FC7D80FB266E2B5BD395070 /* RDPDFReaderDrawingLayersView.swift in Sources */, - 34BA70D70F94E2240BEBE8CE27203C61 /* RDPDFReaderDrawingToolbar.swift in Sources */, - 709C702B15F40DB71C082DADBE993E26 /* RDPDFReaderHighlightOverlayView.swift in Sources */, - C0BD6A2A0BFA9552C94844FE493CC4E4 /* RDPDFReaderImageTextLayerView.swift in Sources */, - B1A0E1F244DCC9E5D49208B01EB756C6 /* RDPDFReaderImageTextRecognizer.swift in Sources */, - B38E537DAE3BBAC3E2C426EFAEAEFF07 /* RDPDFReaderKitView.swift in Sources */, - 7AD242618A854B4FF4C15CB36862C0D6 /* RDPDFReaderNavigationPanelViewController.swift in Sources */, - D37D0606E2087689C082AC7032547B6C /* RDPDFReaderNavigationView.swift in Sources */, - 35A1CD803CDF14B6CE408C2FC23FC059 /* RDPDFReaderPageChildViewController.swift in Sources */, - AF0B5F178E8A2C2AF944B6DEF7C6E79F /* RDPDFReaderPageView.swift in Sources */, - 0C0DE559E65693CFEC1F49EEA39B5D7E /* RDPDFReaderPagingController.swift in Sources */, - EE4E3A6762CF0068B24D55CCE4164DA7 /* RDPDFReaderPanelPresentation.swift in Sources */, - 12229251FA0223B4619966FAC3DE54A4 /* RDPDFReaderPersistenceStore.swift in Sources */, - 4BEC081BB83F4E358E754FF2F09D57CF /* RDPDFReaderSettingsPanelViewController.swift in Sources */, - 3AF74ED60F7242695BCB9DF5C3F5154C /* RDPDFReaderSettingsView.swift in Sources */, - B8F65BDCD7DEE6A6FF858DC09F0B868B /* RDPDFReaderTheme.swift in Sources */, - 43D5BAD34F2EF39D535F2DAA02DC0C18 /* RDPDFReaderView+CollectionView.swift in Sources */, - CF1C1C1594E975B1A5D725BD2232ED6C /* RDPDFReaderView+Paging.swift in Sources */, - B4345692E8FDDE9E39D091497A1C2858 /* RDPDFReaderView+ToolView.swift in Sources */, - 18260901971682DAF87FDF74375B7846 /* RDPDFReaderView-dummy.m in Sources */, - 6068081647E41ACD790F48A7DC7E8D95 /* RDPDFReaderViewController.swift in Sources */, - 857D183273B8CFCE83BCB7E548DF1734 /* RDPDFZoomablePageView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A3239CFDC19DE7660CE71BFF3BEC9D45 /* Sources */ = { + D8A10A612E7BD6B832AFCA8097CEAE8F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - CD9699E49EFA7A195B34D3AFCDBF79E2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6C15E26F78FA13288D563773D4B7CD76 /* DTActivityTitleView.m in Sources */, - 9C9BEA9FA0EC8CCC68C9156484F3F767 /* DTAnimatedGIF.m in Sources */, - 4F860E6DC7E00100950C3A782E5191B8 /* DTBase64Coding.m in Sources */, - 253D4CBC95F1C5B2E9614C3CEEF43EC6 /* DTBlockFunctions.m in Sources */, - 4867E6D264B0650B5473806235ADE1E2 /* DTCoreGraphicsUtils.m in Sources */, - 72E1926B9480CE898BDF2084AECD30E4 /* DTCustomColoredAccessory.m in Sources */, - B6B65B6F9C01891F3456978A1AEE39FF /* DTExtendedFileAttributes.m in Sources */, - 1D31B00CAB218A1D45772B3BCA0F1B66 /* DTFolderMonitor.m in Sources */, - 5F05E3821BE6D3624B2D49FB4D0D3408 /* DTFoundation-dummy.m in Sources */, - D5EBE8972B4538BAA29E1BA825F2626D /* DTFoundationConstants.m in Sources */, - 56065A55CD386F9B441B9DD060C77E0B /* DTHTMLParser.m in Sources */, - 8DF3588F15FDA83A4D747C9A4BA60899 /* DTLog.m in Sources */, - F96E66283981901CE090E285129E4D8F /* DTPieProgressIndicator.m in Sources */, - 3AF4E1B78AC2C629774E960920FC3B2D /* DTSmartPagingScrollView.m in Sources */, - 38FB9A3277FFFA9FDC3CD305FC4451B6 /* DTTiledLayerWithoutFade.m in Sources */, - CA36ADF90F5750756F5A017162BA0DC4 /* DTVersion.m in Sources */, - DE80CF9CC448DB78683E901B671BD7B2 /* NSArray+DTError.m in Sources */, - DB4F0CD4D779E1BF3FF6B96CDAB8AE95 /* NSData+DTCrypto.m in Sources */, - 1A66CAD5382C98B32A471B733CAAB56B /* NSDictionary+DTError.m in Sources */, - 994AD889AE134FA09DFD941E960D195D /* NSFileWrapper+DTCopying.m in Sources */, - A74F0F08A744AF77B84A0481E0C1AEF7 /* NSMutableArray+DTMoving.m in Sources */, - 19111E28A2F8B49503BA160D7E8E096F /* NSString+DTFormatNumbers.m in Sources */, - BE9C6D3BC7C8A3F373DC328B8359D867 /* NSString+DTPaths.m in Sources */, - 737EE166B6761466BA16725FFFA424C2 /* NSString+DTURLEncoding.m in Sources */, - 16C518C5D2F2C1CC3A414FF6D62AC9A1 /* NSString+DTUtilities.m in Sources */, - 1714DE5101178793BE596F7E7C0B6DD1 /* NSURL+DTAppLinks.m in Sources */, - A4B198E2345E8A25E20480C86A0AFFE2 /* NSURL+DTComparing.m in Sources */, - 3E390120B079DACA105740A0F7998371 /* NSURL+DTUnshorten.m in Sources */, - 700D5DF3C3D2F6C25EA302DE5A75F4A1 /* UIApplication+DTNetworkActivity.m in Sources */, - 48A724CA6B8D8DF114B9B56946E739F2 /* UIImage+DTFoundation.m in Sources */, - 3BCB33768CEA3AACEFF26CE21B625A3D /* UIScreen+DTFoundation.m in Sources */, - F094C8A4AF708DF86947F9354147E16A /* UIView+DTFoundation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E88F8FE29DAE30894D62257780B88688 /* Sources */ = { + E1ACC866735994FB5DDF16E332392DAE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -3258,120 +3287,141 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 246662D40DA3354465266FC20F6D0224 /* PBXTargetDependency */ = { + 09C917BF14A53A5A6B7D0AB0F28BDE87 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "DTCoreText-Resources"; target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; - targetProxy = F7651B8F0C65E456E0C7DB0A47FD183E /* PBXContainerItemProxy */; + targetProxy = CA71454BC17E37142EA167FC0D497218 /* PBXContainerItemProxy */; }; - 2D967E6F611DBCD6C02CE36846ED235A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = BAB75BFCF72DB9BEBF8C38332A07CBAC /* PBXContainerItemProxy */; - }; - 3C536403A67E0B92E89A113349CD682D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "ZIPFoundation-ZIPFoundation_Privacy"; - target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; - targetProxy = FE483F97B32E013BA287D689F22C7568 /* PBXContainerItemProxy */; - }; - 5C64B2E1568EB81CAF1BE1BC1C20C018 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTFoundation; - target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = 0BC6C9419E40C637580DEAEA3F614561 /* PBXContainerItemProxy */; - }; - 68F3E9D281169251954DC912268CB0BE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 007AE6375408953CE11BCC1D4B52B668 /* PBXContainerItemProxy */; - }; - 82290A5FF20F9282AF1D67DAE11B8257 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RDEpubReaderView; - target = FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */; - targetProxy = 04891627A375471323118B36AD59C2D3 /* PBXContainerItemProxy */; - }; - 9D8C3E83FA676276852D57DBB73A9AD3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = A97C5D385CBC51D9532844787CB38C5D /* PBXContainerItemProxy */; - }; - A8C63C6883782ED965A8A8847F504BC8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = F84DD36C7570FBCCBCB8CAFEB1EF419C /* PBXContainerItemProxy */; - }; - B3C0F40222D27355D0A67EB0E1FE0823 /* PBXTargetDependency */ = { + 1CB1483421357596C395A4C72082EEFB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RDPDFReaderView; target = 352EC96AFAEE0EDF74FD76A958827133 /* RDPDFReaderView */; - targetProxy = 5A3BC65697710E2EA99ECB9C448A50F6 /* PBXContainerItemProxy */; + targetProxy = BA4028C24C0013B0A03CED17724094EF /* PBXContainerItemProxy */; }; - BBE956211CD1EC16185BC0FEFB82C740 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 2F34DB0ADDF1E29FC1780CEEB4029C6F /* PBXContainerItemProxy */; - }; - C129CF487F655E6FB905C9753F6B9EED /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SnapKit-SnapKit_Privacy"; - target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; - targetProxy = FC66B30DEF534D4F9BB288E5310F311D /* PBXContainerItemProxy */; - }; - D8C3AC1D871FBC776E35B1DC8DE974B8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 09454F7B473D1E7ACED3710C7D14F88A /* PBXContainerItemProxy */; - }; - DB4377A41DAD62B32AF023278E7B50B3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DTCoreText; - target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; - targetProxy = 83F63747A451213A0E66349165AEC47D /* PBXContainerItemProxy */; - }; - E5FAFF15D73B39405D143617507D4FE9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "RDEpubReaderView-RDEpubReaderViewAssets"; - target = E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */; - targetProxy = 9B69DDBBA744650032CAC3DEF6FAD867 /* PBXContainerItemProxy */; - }; - F01B0530044FB26AE79C04C188FD061A /* PBXTargetDependency */ = { + 2DD972CA169E151AAEAABB373D497F01 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DTFoundation; target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; - targetProxy = FD155185E43437078965258537A25B96 /* PBXContainerItemProxy */; + targetProxy = 5D53C2F5FD65E6CD8E8652A497BAA4B1 /* PBXContainerItemProxy */; + }; + 2F84AD8A95F9891FF10615622C18AEC4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RDEpubReaderView; + target = FBCB57A3AEAAA3449B3F365930BC0977 /* RDEpubReaderView */; + targetProxy = B6CD365D3C9BF96A2B0402B1084C7753 /* PBXContainerItemProxy */; + }; + 5AF53B4F6DFEA88AB7C850609586CA7B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = E2F62FE95F2A46E4E30A3BB09AED49A3 /* PBXContainerItemProxy */; + }; + 5C84F363AB364AC2256A20768F4D4F63 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "RDEpubReaderView-RDEpubReaderViewAssets"; + target = E07DDD766DCBF90486BCE6C2EA671E5E /* RDEpubReaderView-RDEpubReaderViewAssets */; + targetProxy = DD19C0F32844A61F07F1ECB13D355A85 /* PBXContainerItemProxy */; + }; + 5F130D3703CF962F4D3CB2C627477170 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ZIPFoundation-ZIPFoundation_Privacy"; + target = C7A8D82E407CD3FDC3BA55CEE519B252 /* ZIPFoundation-ZIPFoundation_Privacy */; + targetProxy = 80504DFF5A5AD74D41D48A50675C2868 /* PBXContainerItemProxy */; + }; + 7934BEA3095F46B97A03F7A60B8F1E6A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = FF25772B8CDE34CEEA71AC7EF594EA0E /* PBXContainerItemProxy */; + }; + 816D08A1CE30E219E8187F8D929C6027 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapKit-SnapKit_Privacy"; + target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; + targetProxy = 4F9EBF9F2EC34F1D069E0B7A384ABDFF /* PBXContainerItemProxy */; + }; + 9288E43C082AE6E0A34C7F9E8D7DA38E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 2FA9DB204EBAB127A33BB8E4A75C753F /* PBXContainerItemProxy */; + }; + B3EFFAD8C8F5A4687F9BE26C20400EB4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = F01A5D40B4F3128453B6F24E1230C400 /* PBXContainerItemProxy */; + }; + B8FE988ECDB2D8B87605057DA0A0204D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = 52A62E1544F8F1CB8A0841D9C035A446 /* PBXContainerItemProxy */; + }; + BE6CB9FE5495066560BCDA1BFF40A557 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 90EA3F52B53B30D0599E44601689BAD6 /* PBXContainerItemProxy */; + }; + EB391B439FA4DA9B9CD9393C265500E0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = F020CE938454AADA341AF610460A014D /* PBXContainerItemProxy */; + }; + FF40085F4184C2B90AAC6F7AE1041CAF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = D9527F41C7D96D531D5F1C5AE5AAC1F4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0AC0EE11FB242E69BE8BA74C6A694666 /* Release */ = { + 23019F36561142BD43D5CBD6706803DC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F3D00D37E3CB914B9957CBEC6F302A0B /* SnapKit.release.xcconfig */; + baseConfigurationReference = 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; + 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; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + 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; - PRODUCT_NAME = SnapKit_Privacy; + 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"; - WRAPPER_EXTENSION = bundle; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 16DC266A20BED5AE48FDE32276AD0F7D /* Debug */ = { + 24A1D9E253C3AABB60323796DC99AA84 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2AD4C7470E6B9737E2206681E0352BAC /* RDPDFReaderView.debug.xcconfig */; + baseConfigurationReference = D3CE152E896CA22C59944E4E3BBBF760 /* RDPDFReaderView.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3403,49 +3453,11 @@ 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; - }; - 30508DC20BB424677B34508E500F92A9 /* 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; + name = Release; }; 312D49A3D80184C28FB9AC227489FE3D /* Debug */ = { isa = XCBuildConfiguration; @@ -3486,9 +3498,9 @@ }; name = Debug; }; - 3C6A2E44F9BBCE75138B94604F719C03 /* Release */ = { + 41849447990ECC3ECD217C57B1826838 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */; + baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3501,9 +3513,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -3511,20 +3523,19 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; + 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; + name = Debug; }; 44A4B2FB6211B90C1949A44A381F6D1F /* Release */ = { isa = XCBuildConfiguration; @@ -3589,7 +3600,100 @@ }; name = Release; }; - 453E9C4076E6CA10D21FEB64DE720281 /* Debug */ = { + 5262F3A67360B39002149BD6CB7C9830 /* 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; + }; + 5E6FECA7E82E76277592B6F146CEC264 /* 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; + }; + 80297E59640305FED07C30F5A4987FFC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 80EF554F6662D1148455292C4F03A585 /* 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; + }; + 8DA4B6420F839F28DA697714309D5A65 /* 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; + }; + 95A586A2DFC2B0EF9173D83088BD0863 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = B1D682E70FAFEEF08569FCA32E219FD1 /* ZIPFoundation.debug.xcconfig */; buildSettings = { @@ -3628,17 +3732,17 @@ }; name = Debug; }; - 619E9261A48AD2BFA91F2E5F7612D44B /* Debug */ = { + 9CAA084411645A1BC17FDE93745EC5FB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD770BD6314F1E02A05DC9744C65B5A4 /* SnapKit.debug.xcconfig */; + baseConfigurationReference = 80EF554F6662D1148455292C4F03A585 /* RDEpubReaderView.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; ENABLE_USER_SCRIPT_SANDBOXING = NO; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + IBSC_MODULE = RDEpubReaderView; + INFOPLIST_FILE = "Target Support Files/RDEpubReaderView/ResourceBundle-RDEpubReaderViewAssets-RDEpubReaderView-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SnapKit_Privacy; + PRODUCT_NAME = RDEpubReaderViewAssets; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3646,46 +3750,6 @@ }; name = Debug; }; - 82A37F68839A5903689D802C77925AD7 /* 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 = { @@ -3833,46 +3897,6 @@ }; name = Release; }; - A303A1CE89CD7FAB43783E1189CDD608 /* 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; - }; A843E21C1B95C92BE904EB3F8115DD30 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3FFE1E06FDE8D4BA1EE289A4D0E7D127 /* DTCoreText.debug.xcconfig */; @@ -3912,142 +3936,9 @@ }; name = Debug; }; - BC6751DB19DECE33495D429ADF9C8816 /* Debug */ = { + A991F3A7DDED36BC3937B9891872B4B7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 50D9E1C1D838BADF3D6BF9072FA237FD /* 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; - }; - CBE348C685F084F1CEB93B45C546F28F /* 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; - }; - CC27061E4B1CF14EAA8CC116CF853A17 /* 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; - }; - CE3828A1F3D44889D3DFA7B8930A68BF /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5ACB52162952848C6A801C079CB9CCC7 /* 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; - }; - D034CF6D722429BCB52062A51E8EF5E4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5ACB52162952848C6A801C079CB9CCC7 /* 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; - }; - D06E71422C211EB0AAD9E14C1163949F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2A39B1AC101FC87E52C5110F072FEA07 /* DTFoundation.debug.xcconfig */; + baseConfigurationReference = 039B47D5CF4FDEA47C608CF07378D3DF /* DTFoundation.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -4079,14 +3970,113 @@ 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 = Debug; + name = Release; }; - D893EE23D7FFFA0BBC06415ABD04B4B1 /* Debug */ = { + A9D38B8C9F8BA282B889A45E39CFAD84 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 50D9E1C1D838BADF3D6BF9072FA237FD /* RDEpubReaderView.debug.xcconfig */; + baseConfigurationReference = 543B7B3F4EEB0FAD86C96E5DCE0E22CC /* 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; + }; + B296E9583A64194A7D7A49E0958D1B8E /* 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; + PRODUCT_NAME = SnapKit_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + C8824E39917FB7F331BA3460704A7E08 /* 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; + }; + CD3962B11342915FA6AE2735806CC617 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 543B7B3F4EEB0FAD86C96E5DCE0E22CC /* RDEpubReaderView.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RDEpubReaderView"; @@ -4100,47 +4090,11 @@ TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; - }; - DD5B9D1D763AE6B98C9AE23EEE7C94A8 /* 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; }; - EF9492DB697AF72A6487A23EA452C058 /* Release */ = { + E3A72AD6CD18DF2C70B1BABFFA63F995 /* Debug */ = { 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; - }; - F19C2676F36932EFF0E434189BDE1E81 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9DFB708C4A48201B65DE1D2E16A1AF2A /* RDPDFReaderView.release.xcconfig */; + baseConfigurationReference = C5090C56303AB966C51846110FF05A64 /* RDPDFReaderView.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -4172,6 +4126,81 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E6370E48B3BBEC1E10F258A29029A0A1 /* 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; + }; + F12C0B99ADBF153DE7481F3417CCB06B /* 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; + }; + FD2F00BDBBEEAB4AEE68DD9A52086608 /* 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 = ""; @@ -4199,20 +4228,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1A283F9AD34B7606CE3BAA9553D5D745 /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { + 290D8DA6C68E22E3AC02AEEC679F9AB1 /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - D06E71422C211EB0AAD9E14C1163949F /* Debug */, - 3C6A2E44F9BBCE75138B94604F719C03 /* Release */, + F12C0B99ADBF153DE7481F3417CCB06B /* Debug */, + 5262F3A67360B39002149BD6CB7C9830 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2F25B85A3671CF2E2F838DFCEFEC70C0 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { + 2F57F2EF53B056EC18070F8A87684FD3 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - 453E9C4076E6CA10D21FEB64DE720281 /* Debug */, - A303A1CE89CD7FAB43783E1189CDD608 /* Release */, + 41849447990ECC3ECD217C57B1826838 /* Debug */, + C8824E39917FB7F331BA3460704A7E08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33B8E6F12A2866899330113FB5CA8694 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6370E48B3BBEC1E10F258A29029A0A1 /* Debug */, + B296E9583A64194A7D7A49E0958D1B8E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 42BAB7FC9D396091287DDED59DDA4E5B /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3A72AD6CD18DF2C70B1BABFFA63F995 /* Debug */, + 24A1D9E253C3AABB60323796DC99AA84 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4226,65 +4273,47 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8FFFE848E062F1B9C863E4837EF688FE /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { + AFB5B4291A9F31B14509185C00540A6F /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - 619E9261A48AD2BFA91F2E5F7612D44B /* Debug */, - 0AC0EE11FB242E69BE8BA74C6A694666 /* Release */, + 23019F36561142BD43D5CBD6706803DC /* Debug */, + A991F3A7DDED36BC3937B9891872B4B7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9677DC5425DCC1A154D5AFB9237260F5 /* Build configuration list for PBXNativeTarget "RDPDFReaderView" */ = { + CAE5795EE48AE1205511CFBA8E272E8E /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { isa = XCConfigurationList; buildConfigurations = ( - 16DC266A20BED5AE48FDE32276AD0F7D /* Debug */, - F19C2676F36932EFF0E434189BDE1E81 /* Release */, + 8DA4B6420F839F28DA697714309D5A65 /* Debug */, + 5E6FECA7E82E76277592B6F146CEC264 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C39A3BF49A3A5CECAE228D5E269702E3 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + CFB9BBE2424D1D36CA1904E73FE1D1DD /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 30508DC20BB424677B34508E500F92A9 /* Debug */, - 82A37F68839A5903689D802C77925AD7 /* Release */, + 80297E59640305FED07C30F5A4987FFC /* Debug */, + A9D38B8C9F8BA282B889A45E39CFAD84 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CEB45790C4D960C7BB8FDC4A1A8699FA /* Build configuration list for PBXNativeTarget "RDEpubReaderView" */ = { + E0C21A08F8F342F93C78BE4579478379 /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - BC6751DB19DECE33495D429ADF9C8816 /* Debug */, - CE3828A1F3D44889D3DFA7B8930A68BF /* Release */, + 95A586A2DFC2B0EF9173D83088BD0863 /* Debug */, + FD2F00BDBBEEAB4AEE68DD9A52086608 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D08A0E31EC5F9881A6AC6E3945BB52E6 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */ = { + E612880EB9499755AABD2CA212042C88 /* Build configuration list for PBXNativeTarget "RDEpubReaderView-RDEpubReaderViewAssets" */ = { isa = XCConfigurationList; buildConfigurations = ( - D893EE23D7FFFA0BBC06415ABD04B4B1 /* Debug */, - D034CF6D722429BCB52062A51E8EF5E4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D15EEE861AE1ED3C332162F130BB923E /* Build configuration list for PBXNativeTarget "ZIPFoundation-ZIPFoundation_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CBE348C685F084F1CEB93B45C546F28F /* Debug */, - EF9492DB697AF72A6487A23EA452C058 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EA3A0F218A66AA9D13E86F6B070FAB65 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CC27061E4B1CF14EAA8CC116CF853A17 /* Debug */, - DD5B9D1D763AE6B98C9AE23EEE7C94A8 /* Release */, + 9CAA084411645A1BC17FDE93745EC5FB /* Debug */, + CD3962B11342915FA6AE2735806CC617 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; 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 dc2e69d..890f798 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}/RDEpubReaderView/RDEpubReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView/RDPDFReaderView.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"swiftCoreGraphics" -l"xml2" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "SnapKit" -framework "Vision" -framework "ZIPFoundation" +OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -l"xml2" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "PDFKit" -framework "QuartzCore" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "SnapKit" -framework "Vision" -framework "ZIPFoundation" OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "-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 dc2e69d..890f798 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}/RDEpubReaderView/RDEpubReaderView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView/RDPDFReaderView.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"swiftCoreGraphics" -l"xml2" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "SnapKit" -framework "Vision" -framework "ZIPFoundation" +OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -l"xml2" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreText" -framework "DTCoreText" -framework "DTFoundation" -framework "ImageIO" -framework "MediaPlayer" -framework "PDFKit" -framework "QuartzCore" -framework "RDEpubReaderView" -framework "RDPDFReaderView" -framework "SnapKit" -framework "Vision" -framework "ZIPFoundation" OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "-F${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDEpubReaderView" "-F${PODS_CONFIGURATION_BUILD_DIR}/RDPDFReaderView" "-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/RDPDFReaderView/RDPDFReaderView.debug.xcconfig b/ReadViewDemo/Pods/Target Support Files/RDPDFReaderView/RDPDFReaderView.debug.xcconfig index 7811dff..17ca4fb 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}/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 "CoreImage" -framework "SnapKit" -framework "Vision" +OTHER_LDFLAGS = $(inherited) -framework "CoreImage" -framework "PDFKit" -framework "SnapKit" -framework "Vision" 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 7811dff..17ca4fb 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}/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 "CoreImage" -framework "SnapKit" -framework "Vision" +OTHER_LDFLAGS = $(inherited) -framework "CoreImage" -framework "PDFKit" -framework "SnapKit" -framework "Vision" 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 d73042c..da25cda 100644 --- a/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj +++ b/ReadViewDemo/ReadViewDemo.xcodeproj/project.pbxproj @@ -20,6 +20,7 @@ 1A2B3C4D00000015AABBCC01 /* AsyncChapterLoadingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2B3C4D00000016AABBCC01 /* AsyncChapterLoadingTests.swift */; }; 1A2B3C4D00000021AABBCC01 /* MemoryFootprintTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2B3C4D00000020AABBCC01 /* MemoryFootprintTests.swift */; }; 1A2B3C4D00000030AABBCC01 /* FixedLayoutRotationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2B3C4D00000031AABBCC01 /* FixedLayoutRotationTests.swift */; }; + 1A2B3C4D00000033AABBCC01 /* PDFDrawingModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2B3C4D00000032AABBCC01 /* PDFDrawingModeTests.swift */; }; 23BB1155EA379786DAA10A89 /* DisplayTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB49AFCCBC2BE04C82B8F286 /* DisplayTypeTests.swift */; }; 369C9658D870DCAFC17EB7F7 /* SearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE01DBDCB8D790832A4DE3F /* SearchTests.swift */; }; 3BC5C96D7A0ACF35F2192CC7 /* XCUIApplication+Launch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B4C44287820D68ED6570F8 /* XCUIApplication+Launch.swift */; }; @@ -31,6 +32,18 @@ C08FF8D030048DC5147729E9 /* ReaderOpenCloseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EDF066BA12974E6CFBE519F /* ReaderOpenCloseTests.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 */; }; + 2B3C4D5E00000001AABBCC01 /* BookmarkChromeStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000001AABBCC02 /* BookmarkChromeStateTests.swift */; }; + 2B3C4D5E00000002AABBCC01 /* BookmarkManagementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000002AABBCC02 /* BookmarkManagementTests.swift */; }; + 2B3C4D5E00000003AABBCC01 /* ErrorAndEdgeCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000003AABBCC02 /* ErrorAndEdgeCaseTests.swift */; }; + 2B3C4D5E00000004AABBCC01 /* HighlightsManagementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000004AABBCC02 /* HighlightsManagementTests.swift */; }; + 2B3C4D5E00000005AABBCC01 /* LargeBookOnDemandTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000005AABBCC02 /* LargeBookOnDemandTests.swift */; }; + 2B3C4D5E00000006AABBCC01 /* LocationPersistenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000006AABBCC02 /* LocationPersistenceTests.swift */; }; + 2B3C4D5E00000007AABBCC01 /* NavigationBackwardTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000007AABBCC02 /* NavigationBackwardTests.swift */; }; + 2B3C4D5E00000008AABBCC01 /* SelectionAnnotateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000008AABBCC02 /* SelectionAnnotateTests.swift */; }; + 2B3C4D5E00000009AABBCC01 /* SelectionMenuTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E00000009AABBCC02 /* SelectionMenuTests.swift */; }; + 2B3C4D5E0000000AAABBCC01 /* SettingsEffectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E0000000AAABBCC02 /* SettingsEffectTests.swift */; }; + 2B3C4D5E0000000BAABBCC01 /* TOCInteractionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E0000000BAABBCC02 /* TOCInteractionTests.swift */; }; + 2B3C4D5E0000000CAABBCC01 /* ToolbarStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3C4D5E0000000CAABBCC02 /* ToolbarStateTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -58,6 +71,7 @@ 1A2B3C4D00000016AABBCC01 /* AsyncChapterLoadingTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AsyncChapterLoadingTests.swift; sourceTree = ""; }; 1A2B3C4D00000020AABBCC01 /* MemoryFootprintTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MemoryFootprintTests.swift; sourceTree = ""; }; 1A2B3C4D00000031AABBCC01 /* FixedLayoutRotationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FixedLayoutRotationTests.swift; sourceTree = ""; }; + 1A2B3C4D00000032AABBCC01 /* PDFDrawingModeTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PDFDrawingModeTests.swift; sourceTree = ""; }; 201C2B482287866487EFAE66 /* SettingsPanelTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsPanelTests.swift; sourceTree = ""; }; 20BD15E5D8F04E7E9A239E14 /* ReaderAnnotationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReaderAnnotationTests.swift; sourceTree = ""; }; 3A43AED288BFCA3ADBA97DD7 /* Pods-ReadViewDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReadViewDemo.release.xcconfig"; path = "Target Support Files/Pods-ReadViewDemo/Pods-ReadViewDemo.release.xcconfig"; sourceTree = ""; }; @@ -72,6 +86,18 @@ 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 = ""; }; + 2B3C4D5E00000001AABBCC02 /* BookmarkChromeStateTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BookmarkChromeStateTests.swift; sourceTree = ""; }; + 2B3C4D5E00000002AABBCC02 /* BookmarkManagementTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BookmarkManagementTests.swift; sourceTree = ""; }; + 2B3C4D5E00000003AABBCC02 /* ErrorAndEdgeCaseTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ErrorAndEdgeCaseTests.swift; sourceTree = ""; }; + 2B3C4D5E00000004AABBCC02 /* HighlightsManagementTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HighlightsManagementTests.swift; sourceTree = ""; }; + 2B3C4D5E00000005AABBCC02 /* LargeBookOnDemandTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LargeBookOnDemandTests.swift; sourceTree = ""; }; + 2B3C4D5E00000006AABBCC02 /* LocationPersistenceTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocationPersistenceTests.swift; sourceTree = ""; }; + 2B3C4D5E00000007AABBCC02 /* NavigationBackwardTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NavigationBackwardTests.swift; sourceTree = ""; }; + 2B3C4D5E00000008AABBCC02 /* SelectionAnnotateTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectionAnnotateTests.swift; sourceTree = ""; }; + 2B3C4D5E00000009AABBCC02 /* SelectionMenuTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectionMenuTests.swift; sourceTree = ""; }; + 2B3C4D5E0000000AAABBCC02 /* SettingsEffectTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsEffectTests.swift; sourceTree = ""; }; + 2B3C4D5E0000000BAABBCC02 /* TOCInteractionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TOCInteractionTests.swift; sourceTree = ""; }; + 2B3C4D5E0000000CAABBCC02 /* ToolbarStateTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ToolbarStateTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -187,6 +213,18 @@ FB49AFCCBC2BE04C82B8F286 /* DisplayTypeTests.swift */, 1A2B3C4D00000008AABBCC01 /* PageNavigationTests.swift */, A1C5E34F6B7192D400A1B235 /* PDFAnnotationTests.swift */, + 2B3C4D5E00000001AABBCC02 /* BookmarkChromeStateTests.swift */, + 2B3C4D5E00000002AABBCC02 /* BookmarkManagementTests.swift */, + 2B3C4D5E00000003AABBCC02 /* ErrorAndEdgeCaseTests.swift */, + 2B3C4D5E00000004AABBCC02 /* HighlightsManagementTests.swift */, + 2B3C4D5E00000005AABBCC02 /* LargeBookOnDemandTests.swift */, + 2B3C4D5E00000006AABBCC02 /* LocationPersistenceTests.swift */, + 2B3C4D5E00000007AABBCC02 /* NavigationBackwardTests.swift */, + 2B3C4D5E00000008AABBCC02 /* SelectionAnnotateTests.swift */, + 2B3C4D5E00000009AABBCC02 /* SelectionMenuTests.swift */, + 2B3C4D5E0000000AAABBCC02 /* SettingsEffectTests.swift */, + 2B3C4D5E0000000BAABBCC02 /* TOCInteractionTests.swift */, + 2B3C4D5E0000000CAABBCC02 /* ToolbarStateTests.swift */, 20BD15E5D8F04E7E9A239E14 /* ReaderAnnotationTests.swift */, 1A2B3C4D0000000AAABBCC01 /* ReaderAnnotationExtendedTests.swift */, 9EDF066BA12974E6CFBE519F /* ReaderOpenCloseTests.swift */, @@ -202,6 +240,7 @@ 1A2B3C4D00000020AABBCC01 /* MemoryFootprintTests.swift */, 1A2B3C4D00000016AABBCC01 /* AsyncChapterLoadingTests.swift */, 1A2B3C4D00000031AABBCC01 /* FixedLayoutRotationTests.swift */, + 1A2B3C4D00000032AABBCC01 /* PDFDrawingModeTests.swift */, ); path = ReaderUITests; sourceTree = ""; @@ -355,6 +394,18 @@ 23BB1155EA379786DAA10A89 /* DisplayTypeTests.swift in Sources */, 1A2B3C4D00000007AABBCC01 /* PageNavigationTests.swift in Sources */, A1C5E34F6B7192D400A1B234 /* PDFAnnotationTests.swift in Sources */, + 2B3C4D5E00000001AABBCC01 /* BookmarkChromeStateTests.swift in Sources */, + 2B3C4D5E00000002AABBCC01 /* BookmarkManagementTests.swift in Sources */, + 2B3C4D5E00000003AABBCC01 /* ErrorAndEdgeCaseTests.swift in Sources */, + 2B3C4D5E00000004AABBCC01 /* HighlightsManagementTests.swift in Sources */, + 2B3C4D5E00000005AABBCC01 /* LargeBookOnDemandTests.swift in Sources */, + 2B3C4D5E00000006AABBCC01 /* LocationPersistenceTests.swift in Sources */, + 2B3C4D5E00000007AABBCC01 /* NavigationBackwardTests.swift in Sources */, + 2B3C4D5E00000008AABBCC01 /* SelectionAnnotateTests.swift in Sources */, + 2B3C4D5E00000009AABBCC01 /* SelectionMenuTests.swift in Sources */, + 2B3C4D5E0000000AAABBCC01 /* SettingsEffectTests.swift in Sources */, + 2B3C4D5E0000000BAABBCC01 /* TOCInteractionTests.swift in Sources */, + 2B3C4D5E0000000CAABBCC01 /* ToolbarStateTests.swift in Sources */, 52A6A0C9941A4B5F9B88C6B0 /* ReaderAnnotationTests.swift in Sources */, 1A2B3C4D00000009AABBCC01 /* ReaderAnnotationExtendedTests.swift in Sources */, C08FF8D030048DC5147729E9 /* ReaderOpenCloseTests.swift in Sources */, @@ -370,6 +421,7 @@ 1A2B3C4D00000021AABBCC01 /* MemoryFootprintTests.swift in Sources */, 1A2B3C4D00000015AABBCC01 /* AsyncChapterLoadingTests.swift in Sources */, 1A2B3C4D00000030AABBCC01 /* FixedLayoutRotationTests.swift in Sources */, + 1A2B3C4D00000033AABBCC01 /* PDFDrawingModeTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ReadViewDemo/ReadViewDemo/PDFDemoReaderViewController.swift b/ReadViewDemo/ReadViewDemo/PDFDemoReaderViewController.swift index 13266d6..2124821 100644 --- a/ReadViewDemo/ReadViewDemo/PDFDemoReaderViewController.swift +++ b/ReadViewDemo/ReadViewDemo/PDFDemoReaderViewController.swift @@ -10,19 +10,23 @@ enum PDFDemoImageTextSource: String { case none } -/// PDFKit 适配层:只负责把宿主 PDF 变成 SDK 的页面、缩略图和目录数据。 -private final class PDFDemoPageProvider: RDPDFReaderPageProvider, RDPDFReaderOutlineProviding { +/// 模拟“宿主只能提供页面图片”的适配层,用于验证自定义加密 PDF 接入方式。 +private final class PDFDemoPageProvider: RDPDFReaderPageProvider, RDPDFReaderOutlineProviding, RDPDFReaderAsyncOutlineProviding { private let document: PDFDocument private let identifier: String private let title: String private let textSource: PDFDemoImageTextSource - private var images: [Int: UIImage] = [:] + private let renderQueue = DispatchQueue(label: "com.readviewsdk.demo-pdf-render", qos: .userInitiated) + private let images = NSCache() + private var outlineItemsCache: [RDPDFReaderOutlineItem]? init(document: PDFDocument, identifier: String, title: String, textSource: PDFDemoImageTextSource) { self.document = document self.identifier = identifier self.title = title self.textSource = textSource + images.countLimit = 6 + images.totalCostLimit = 96 * 1024 * 1024 } func readerBookDescriptor() -> RDPDFReaderBookDescriptor { @@ -35,19 +39,46 @@ private final class PDFDemoPageProvider: RDPDFReaderPageProvider, RDPDFReaderOut case .hostFixture: textRuns = fixtureTextRuns(for: index) case .vision, .none: textRuns = nil } - completion(.init(index: index, image: image(at: index), textRuns: textRuns)) + renderQueue.async { [weak self] in + guard let self else { return } + let image = self.image(at: index) + DispatchQueue.main.async { completion(.init(index: index, image: image, textRuns: textRuns)) } + } } func readerThumbnail(at index: Int, targetSize: CGSize, completion: @escaping (UIImage?) -> Void) { - guard let page = document.page(at: index) else { completion(nil); return } - let box = page.bounds(for: .mediaBox) - let scale = min(targetSize.width / box.width, targetSize.height / box.height) * UIScreen.main.scale - let size = CGSize(width: box.width * scale, height: box.height * scale) - completion(render(page, size: size, scale: scale)) + renderQueue.async { [weak self] in + guard let self, let page = self.document.page(at: index) else { + DispatchQueue.main.async { completion(nil) } + return + } + let box = page.bounds(for: .mediaBox) + let scale = min(targetSize.width / box.width, targetSize.height / box.height) * UIScreen.main.scale + let size = CGSize(width: box.width * scale, height: box.height * scale) + let image = self.render(page, size: size, scale: scale) + DispatchQueue.main.async { completion(image) } + } } func readerOutlineItems() -> [RDPDFReaderOutlineItem] { - guard let root = document.outlineRoot else { return pageOutlineItems() } + renderQueue.sync { outlineItemsLocked() } + } + + func readerOutlineItems(completion: @escaping ([RDPDFReaderOutlineItem]) -> Void) { + renderQueue.async { [weak self] in + guard let self else { return } + let items = self.outlineItemsLocked() + DispatchQueue.main.async { completion(items) } + } + } + + private func outlineItemsLocked() -> [RDPDFReaderOutlineItem] { + if let outlineItemsCache { return outlineItemsCache } + guard let root = document.outlineRoot else { + let items = pageOutlineItems() + outlineItemsCache = items + return items + } var items: [RDPDFReaderOutlineItem] = [] func append(_ outline: PDFOutline, level: Int) { for index in 0.. UIImage { @@ -81,12 +114,14 @@ private final class PDFDemoPageProvider: RDPDFReaderPageProvider, RDPDFReaderOut } private func image(at index: Int) -> UIImage? { - if let image = images[index] { return image } + if let image = images.object(forKey: NSNumber(value: index)) { return image } guard let page = document.page(at: index) else { return nil } let box = page.bounds(for: .mediaBox) let scale = max(2, UIScreen.main.scale) let image = render(page, size: CGSize(width: box.width * scale, height: box.height * scale), scale: scale) - images[index] = image + let cost = image.cgImage.map { $0.bytesPerRow * $0.height } + ?? Int(image.size.width * image.size.height * image.scale * image.scale * 4) + images.setObject(image, forKey: NSNumber(value: index), cost: cost) return image } @@ -118,6 +153,8 @@ final class PDFDemoReaderViewController: UIViewController, RDPDFReaderViewContro private let reader: RDPDFReaderViewController private var navigationBarHiddenBeforeReader: Bool? private var display = "pagecurl" + private var lastPageIndex = 0 + private var lastCopiedText: String? private let stateLabel: UILabel = { let label = UILabel() label.accessibilityIdentifier = "demo.reader.state" @@ -127,19 +164,44 @@ final class PDFDemoReaderViewController: UIViewController, RDPDFReaderViewContro }() init(url: URL, bookIdentifier: String? = nil, textSource: PDFDemoImageTextSource = .vision) { - guard let document = PDFDocument(url: url) else { fatalError("无法打开 PDF") } let identifier = bookIdentifier ?? url.lastPathComponent - let provider = PDFDemoPageProvider(document: document, identifier: identifier, title: url.deletingPathExtension().lastPathComponent, textSource: textSource) let store = RDPDFReaderPersistenceStore(rootURL: Self.annotationStorageURL(for: identifier, legacyBookURL: url)) var configuration = RDPDFReaderViewController.Configuration() configuration.enablesOCR = textSource == .vision configuration.missingTextSource = .region configuration.recognitionLanguages = ["zh-Hans", "en-US"] - configuration.pageImageTransform = { [weak provider] image, theme in provider?.transformed(image, for: theme) ?? image } - reader = RDPDFReaderViewController(pageProvider: provider, annotationPersistence: store, configuration: configuration) + + if textSource != .vision { + guard let document = PDFDocument(url: url) else { fatalError("无法打开 PDF") } + let provider = PDFDemoPageProvider( + document: document, + identifier: identifier, + title: url.deletingPathExtension().lastPathComponent, + textSource: textSource + ) + configuration.pageImageTransform = { [weak provider] image, theme in + provider?.transformed(image, for: theme) ?? image + } + reader = RDPDFReaderViewController( + pageProvider: provider, + annotationPersistence: store, + configuration: configuration + ) + } else { + do { + reader = try RDPDFReaderViewController( + pdfURL: url, + bookIdentifier: identifier, + annotationPersistence: store, + configuration: configuration + ) + } catch { + fatalError("无法打开 PDF:\(error.localizedDescription)") + } + } super.init(nibName: nil, bundle: nil) reader.delegate = self - title = provider.readerBookDescriptor().title + title = url.deletingPathExtension().lastPathComponent } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -182,6 +244,11 @@ final class PDFDemoReaderViewController: UIViewController, RDPDFReaderViewContro func pdfReaderViewController(_ controller: RDPDFReaderViewController, didChangePage pageIndex: Int) { updateState(page: pageIndex) } + func pdfReaderViewController(_ controller: RDPDFReaderViewController, didCopyText text: String) { + lastCopiedText = text + updateState(page: lastPageIndex) + } + func pdfReaderViewController(_ controller: RDPDFReaderViewController, didFailAnnotationPersistence error: Error) { stateLabel.text = "reader=opened mode=pdf annotationStorage=error" guard presentedViewController == nil else { return } @@ -190,7 +257,16 @@ final class PDFDemoReaderViewController: UIViewController, RDPDFReaderViewContro present(alert, animated: true) } - private func updateState(page: Int) { stateLabel.text = "reader=opened mode=pdf page=\(page + 1) display=\(display)" } + private func updateState(page: Int) { + lastPageIndex = page + var state = "reader=opened mode=pdf page=\(page + 1) display=\(display)" + if let lastCopiedText { + // 状态字段以空格分隔,文本需百分号编码;UI 测试端会解码还原。 + let encoded = lastCopiedText.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? "" + state += " copy=success copiedText=\(encoded)" + } + stateLabel.text = state + } private static func annotationStorageURL(for bookIdentifier: String, legacyBookURL: URL) -> URL { let root = annotationStorageRoot() diff --git a/ReadViewDemo/ReadViewDemo/ViewController.swift b/ReadViewDemo/ReadViewDemo/ViewController.swift index ee0f939..a6064c3 100644 --- a/ReadViewDemo/ReadViewDemo/ViewController.swift +++ b/ReadViewDemo/ReadViewDemo/ViewController.swift @@ -112,7 +112,7 @@ final class ViewController: UIViewController { label.textAlignment = .center label.textColor = .secondaryLabel label.font = .systemFont(ofSize: 15) - label.text = "book 目录下暂时没有可阅读的 txt 或 epub 文件" + label.text = "book 目录下暂时没有可阅读的 EPUB、TXT、MOBI、CBZ 或 PDF 文件" label.accessibilityIdentifier = "demo.books.empty" return label }() @@ -165,7 +165,7 @@ final class ViewController: UIViewController { private func updateChrome() { if books.isEmpty { - statusLabel.text = "ReadViewSDK Demo\nbook 目录下未找到 txt 或 epub 文件" + statusLabel.text = "ReadViewSDK Demo\nbook 目录下未找到 EPUB、TXT、MOBI、CBZ 或 PDF 文件" tableView.backgroundView = emptyStateLabel } else { statusLabel.text = "ReadViewSDK Demo\n已发现 \(books.count) 本本地图书,点击即可进入阅读器" @@ -191,7 +191,7 @@ final class ViewController: UIViewController { return fileURLs .filter { url in let ext = url.pathExtension.lowercased() - return ext == "epub" || ext == "txt" || ext == "pdf" + return RDReaderDocumentFormat.supports(url) || ext == "pdf" } .reduce(into: [URL]()) { result, url in if !result.contains(url) { diff --git a/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift b/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift index 74d3f9f..52e3ee6 100644 --- a/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift +++ b/ReadViewDemo/ReadViewDemoUITests/Helpers/AccessibilityIdentifiers.swift @@ -44,9 +44,9 @@ enum IDs { /// The text layer is the precise, image-coordinate based interaction surface. static let pdfTextLayer = "pdf.reader.text.layer" static let pdfOCRStatus = "pdf.reader.ocr.status" - /// PDF 选区菜单与 EPUB 相同,使用系统编辑菜单,按菜单项标题(复制/高亮/注释)定位。 + /// PDF 选区菜单与 EPUB 相同,使用系统编辑菜单,按菜单项标题(复制/划线/注释)定位。 static let pdfSelectionMenuCopy = "复制" - static let pdfSelectionMenuHighlight = "高亮" + static let pdfSelectionMenuHighlight = "划线" static let pdfSelectionMenuAnnotate = "注释" static let pdfCopyStatus = "pdf.reader.copy.status" diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/HighlightsManagementTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/HighlightsManagementTests.swift index 91dc8f0..80e8d73 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/HighlightsManagementTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/HighlightsManagementTests.swift @@ -119,7 +119,9 @@ final class HighlightsManagementTests: XCTestCase { let deleteControl = highlightsTable.buttons["删除"].firstMatch XCTAssertTrue(deleteControl.waitForExistence(timeout: 3), "编辑状态应显示删除控件") deleteControl.tap() - app.buttons["删除"].lastMatch.tap() + // 编辑态的行内“删除”与确认用的“删除”同名;确认按钮是最后出现的那个。 + let deleteButtons = app.buttons.matching(identifier: "删除") + deleteButtons.element(boundBy: max(0, deleteButtons.count - 1)).tap() XCTAssertTrue(app.staticTexts[IDs.readerHighlightsEmptyLabel].waitForExistence(timeout: 5), "删除后应显示空状态") } diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift index 6b26fd4..c04caca 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/LocationPersistenceTests.swift @@ -153,7 +153,7 @@ final class LocationPersistenceTests: XCTestCase { } func testHighlightNavigationSurvivesFontChoiceChange() throws { - app.launchAndOpenSampleBook(resetsReaderState: true, pageNumber: 3) + app.launchAndOpenSampleBook(pageNumber: 3, resetsReaderState: true) app.waitForReader(timeout: 12) let initialState = app.waitForDemoReaderState(timeout: 8, description: "初始位于第 3 页") { state in diff --git a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/PDFDrawingModeTests.swift b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/PDFDrawingModeTests.swift index 2f6e5bb..ec5b105 100644 --- a/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/PDFDrawingModeTests.swift +++ b/ReadViewDemo/ReadViewDemoUITests/ReaderUITests/PDFDrawingModeTests.swift @@ -58,6 +58,46 @@ final class PDFDrawingModeTests: XCTestCase { ) } + /// 放大状态下同一规则:未选中工具单指拖动画面,选中画笔后单指只用于绘制。 + func testZoomedPageDragsOnlyWhenDrawingToolIsDeselected() { + app.launchAndOpenSampleBook(bookTitleQuery: "英汉大词典", displayType: "pagecurl") + app.waitForReader() + + let content = app.otherElements[IDs.readerContent].firstMatch + XCTAssertTrue(content.waitForExistence(timeout: 8), "PDF 阅读页面未出现") + + app.showReaderChromeIfNeeded(requiredButtonIDs: [IDs.pdfDrawing]) + let drawing = app.buttons[IDs.pdfDrawing] + XCTAssertTrue(drawing.waitForExistence(timeout: 5), "画笔入口未出现") + drawing.tap() + + let pen = app.buttons[IDs.pdfDrawingPen] + XCTAssertTrue(pen.waitForExistence(timeout: 5), "画笔工具未出现") + + // 未选中工具 → 双指放大 + content.pinch(withScale: 2.5, velocity: 1) + RunLoop.current.run(until: Date().addingTimeInterval(1.0)) + let zoomedFrame = content.frame + XCTAssertGreaterThan(zoomedFrame.width, app.windows.firstMatch.frame.width * 1.2, "画笔面板打开时无法双指放大页面") + + // 未选中工具 → 单指拖动应移动页面 + let start = content.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)) + let end = content.coordinate(withNormalizedOffset: CGVector(dx: 0.3, dy: 0.3)) + start.press(forDuration: 0.05, thenDragTo: end) + RunLoop.current.run(until: Date().addingTimeInterval(0.8)) + let draggedFrame = content.frame + XCTAssertNotEqual(draggedFrame.origin, zoomedFrame.origin, "未选中工具时,放大页面无法单指拖动") + + // 选中画笔 → 单指应绘制而非拖动 + pen.tap() + let frameBeforeStroke = content.frame + let strokeStart = content.coordinate(withNormalizedOffset: CGVector(dx: 0.45, dy: 0.45)) + let strokeEnd = content.coordinate(withNormalizedOffset: CGVector(dx: 0.6, dy: 0.6)) + strokeStart.press(forDuration: 0.05, thenDragTo: strokeEnd) + RunLoop.current.run(until: Date().addingTimeInterval(0.8)) + XCTAssertEqual(content.frame.origin, frameBeforeStroke.origin, "选中画笔后,单指仍拖动了放大页面而不是绘制") + } + private func waitForLandscapeLayout() -> Bool { let deadline = Date().addingTimeInterval(8) while Date() < deadline { @@ -69,8 +109,12 @@ final class PDFDrawingModeTests: XCTestCase { } private func scrollToAnotherPage(_ content: XCUIElement, from page: Int) -> Bool { + let window = app.windows.firstMatch for _ in 0..<5 { - content.swipeUp() + // 从屏幕上半部拖动,避开底部画笔工具条区域。 + let start = window.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.35)) + let end = window.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.05)) + start.press(forDuration: 0.05, thenDragTo: end, withVelocity: .fast, thenHoldForDuration: 0) let deadline = Date().addingTimeInterval(1.5) while Date() < deadline { if let current = app.currentDemoReaderState()?.page, current != page { return true } diff --git a/Sources/RDEpubReaderView/DocumentFormats/RDCBZReaderController.swift b/Sources/RDEpubReaderView/DocumentFormats/RDCBZReaderController.swift new file mode 100644 index 0000000..fa39346 --- /dev/null +++ b/Sources/RDEpubReaderView/DocumentFormats/RDCBZReaderController.swift @@ -0,0 +1,238 @@ +import UIKit +import ZIPFoundation + +public enum RDCBZReaderError: LocalizedError { + case archiveOpenFailed + case noImages + case tooManyPages + case archiveTooLarge + + public var errorDescription: String? { + switch self { + case .archiveOpenFailed: return "无法打开 CBZ 文件" + case .noImages: return "CBZ 文件中没有可显示的图片" + case .tooManyPages: return "CBZ 图片数量超过安全限制" + case .archiveTooLarge: return "CBZ 解压后的内容超过安全限制" + } + } +} + +/// Image-based comic reader for CBZ archives. Pages use the same paging engine +/// as the EPUB reader and are extracted to a bounded disk cache on demand at +/// controller creation time, avoiding retention of all decoded images. +public final class RDCBZReaderController: UIViewController { + public let readerView = RDEpubReaderView(frame: .zero) + + private let bookURL: URL + private let configuration: RDEPUBReaderConfiguration + private var pageURLs: [URL] = [] + private let loadingIndicator = UIActivityIndicatorView(style: .large) + + public init(bookURL: URL, configuration: RDEPUBReaderConfiguration = .default) { + self.bookURL = bookURL + self.configuration = configuration + super.init(nibName: nil, bundle: nil) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + public override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = configuration.theme.contentBackgroundColor + title = bookURL.deletingPathExtension().lastPathComponent + loadingIndicator.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(loadingIndicator) + NSLayoutConstraint.activate([ + loadingIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor), + loadingIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor) + ]) + loadingIndicator.startAnimating() + + let bookURL = self.bookURL + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + let result = Result { try RDCBZArchiveExtractor().extractPages(from: bookURL) } + DispatchQueue.main.async { + guard let self else { return } + self.loadingIndicator.stopAnimating() + switch result { + case let .success(pageURLs): + self.pageURLs = pageURLs + self.configureReaderView() + case let .failure(error): + self.show(error: error) + } + } + } + } + + private func configureReaderView() { + readerView.pageProvider = self + readerView.delegate = self + readerView.currentDisplayType = configuration.displayType + readerView.landscapeDualPageEnabled = configuration.landscapeDualPageEnabled + readerView.coverPageIndex = pageURLs.isEmpty ? nil : 0 + readerView.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(readerView) + readerView.register( + contentView: RDCBZPageView.self, + contentViewWithReuseIdentifier: NSStringFromClass(RDCBZPageView.self) + ) + NSLayoutConstraint.activate([ + readerView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + readerView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + readerView.topAnchor.constraint(equalTo: view.topAnchor), + readerView.bottomAnchor.constraint(equalTo: view.bottomAnchor) + ]) + readerView.reloadData() + readerView.transitionToPage(pageNum: restoredPageIndex(), animated: false) + } + + public var currentPageNumber: Int? { + readerView.currentPage >= 0 ? readerView.currentPage + 1 : nil + } + + public func setDisplayType(_ displayType: RDEpubReaderView.DisplayType) { + readerView.switchReaderDisplayType(displayType) + } + + @discardableResult + public func goToPage(_ pageNumber: Int, animated: Bool = false) -> Bool { + guard pageNumber > 0, pageNumber <= pageURLs.count else { return false } + readerView.transitionToPage(pageNum: pageNumber - 1, animated: animated) + return true + } + + private func restoredPageIndex() -> Int { + min(max(UserDefaults.standard.integer(forKey: persistenceKey), 0), max(pageURLs.count - 1, 0)) + } + + private var persistenceKey: String { + "ssreader.cbz.page.\(bookURL.lastPathComponent)" + } + + private func show(error: Error) { + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.textColor = .secondaryLabel + label.text = error.localizedDescription + label.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(label) + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 24), + label.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -24), + label.centerYAnchor.constraint(equalTo: view.centerYAnchor) + ]) + } +} + +extension RDCBZReaderController: RDEpubReaderPageProvider, RDEpubReaderDelegate { + public func numberOfPages(in readerView: RDEpubReaderView) -> Int { pageURLs.count } + + public func readerView(_ readerView: RDEpubReaderView, viewForPageAt index: Int, reusableView: UIView?) -> UIView { + let pageView = (reusableView as? RDCBZPageView) ?? RDCBZPageView() + pageView.configure(imageURL: pageURLs[index], backgroundColor: configuration.theme.contentBackgroundColor) + return pageView + } + + public func pageIdentifier(in readerView: RDEpubReaderView, index: Int) -> String? { + NSStringFromClass(RDCBZPageView.self) + } + + public func pageNum(readerView: RDEpubReaderView, pageNum: Int) { + UserDefaults.standard.set(pageNum, forKey: persistenceKey) + } +} + +private final class RDCBZPageView: UIView { + private let imageView = UIImageView() + + override init(frame: CGRect) { + super.init(frame: frame) + imageView.contentMode = .scaleAspectFit + imageView.clipsToBounds = true + imageView.translatesAutoresizingMaskIntoConstraints = false + addSubview(imageView) + NSLayoutConstraint.activate([ + imageView.leadingAnchor.constraint(equalTo: leadingAnchor), + imageView.trailingAnchor.constraint(equalTo: trailingAnchor), + imageView.topAnchor.constraint(equalTo: topAnchor), + imageView.bottomAnchor.constraint(equalTo: bottomAnchor) + ]) + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + func configure(imageURL: URL, backgroundColor: UIColor) { + self.backgroundColor = backgroundColor + imageView.image = UIImage(contentsOfFile: imageURL.path) + accessibilityLabel = imageURL.deletingPathExtension().lastPathComponent + } +} + +private struct RDCBZArchiveExtractor { + private let maximumPageCount = 10_000 + private let maximumUncompressedSize: UInt64 = 2 * 1024 * 1024 * 1024 + private let imageExtensions: Set = ["jpg", "jpeg", "png", "gif", "webp", "heic", "heif", "bmp", "tif", "tiff"] + + func extractPages(from archiveURL: URL) throws -> [URL] { + let archive: Archive + do { + archive = try Archive(url: archiveURL, accessMode: .read) + } catch { + throw RDCBZReaderError.archiveOpenFailed + } + let entries = archive.filter { entry in + entry.type == .file && imageExtensions.contains(URL(fileURLWithPath: entry.path).pathExtension.lowercased()) + }.sorted { lhs, rhs in + lhs.path.localizedStandardCompare(rhs.path) == .orderedAscending + } + guard entries.isEmpty == false else { throw RDCBZReaderError.noImages } + guard entries.count <= maximumPageCount else { throw RDCBZReaderError.tooManyPages } + let totalSize = entries.reduce(UInt64(0)) { partial, entry in + let (sum, overflow) = partial.addingReportingOverflow(UInt64(entry.uncompressedSize)) + return overflow ? UInt64.max : sum + } + guard totalSize <= maximumUncompressedSize else { throw RDCBZReaderError.archiveTooLarge } + + let directory = cacheDirectory(for: archiveURL) + let fileManager = FileManager.default + let existing = existingPages(in: directory) + if existing.count == entries.count { return existing } + + try? fileManager.removeItem(at: directory) + try fileManager.createDirectory(at: directory, withIntermediateDirectories: true) + do { + var output: [URL] = [] + output.reserveCapacity(entries.count) + for (index, entry) in entries.enumerated() { + let ext = URL(fileURLWithPath: entry.path).pathExtension.lowercased() + let destination = directory.appendingPathComponent(String(format: "%06d.%@", index, ext)) + _ = try archive.extract(entry, to: destination) + output.append(destination) + } + return output + } catch { + try? fileManager.removeItem(at: directory) + throw error + } + } + + private func existingPages(in directory: URL) -> [URL] { + ((try? FileManager.default.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles])) ?? []) + .filter { imageExtensions.contains($0.pathExtension.lowercased()) } + .sorted { $0.lastPathComponent < $1.lastPathComponent } + } + + private func cacheDirectory(for archiveURL: URL) -> URL { + let attributes = try? FileManager.default.attributesOfItem(atPath: archiveURL.path) + let size = (attributes?[.size] as? NSNumber)?.uint64Value ?? 0 + let modified = (attributes?[.modificationDate] as? Date)?.timeIntervalSince1970 ?? 0 + let rawName = archiveURL.deletingPathExtension().lastPathComponent + let safeName = rawName.replacingOccurrences(of: #"[^A-Za-z0-9._-]"#, with: "_", options: .regularExpression) + let base = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first ?? FileManager.default.temporaryDirectory + return base.appendingPathComponent("ssreaderview-cbz", isDirectory: true) + .appendingPathComponent("\(safeName)-\(size)-\(Int64(modified))", isDirectory: true) + } +} diff --git a/Sources/RDEpubReaderView/DocumentFormats/RDMOBIParser.swift b/Sources/RDEpubReaderView/DocumentFormats/RDMOBIParser.swift new file mode 100644 index 0000000..17374bb --- /dev/null +++ b/Sources/RDEpubReaderView/DocumentFormats/RDMOBIParser.swift @@ -0,0 +1,214 @@ +import Foundation + +public struct RDMOBIDocument: Equatable, Sendable { + public let title: String + public let text: String + + public init(title: String, text: String) { + self.title = title + self.text = text + } +} + +public enum RDMOBIParserError: LocalizedError, Equatable { + case invalidHeader + case invalidRecordTable + case encryptedBook + case unsupportedCompression(UInt16) + case emptyText + + public var errorDescription: String? { + switch self { + case .invalidHeader: + return "MOBI 文件头无效" + case .invalidRecordTable: + return "MOBI 记录表损坏" + case .encryptedBook: + return "暂不支持受 DRM 保护的 MOBI 文件" + case let .unsupportedCompression(value): + return "暂不支持此 MOBI 压缩方式(\(value))" + case .emptyText: + return "MOBI 文件中没有可阅读的正文" + } + } +} + +/// Reader for classic PalmDOC/MOBI6 books. Uncompressed and PalmDOC-compressed +/// text records are supported; DRM and HUFF/CDIC books fail with a clear error. +public final class RDMOBIParser { + public init() {} + + public func parse(fileURL: URL) throws -> RDMOBIDocument { + try parse(data: Data(contentsOf: fileURL), fallbackTitle: fileURL.deletingPathExtension().lastPathComponent) + } + + public func parse(data: Data, fallbackTitle: String = "MOBI") throws -> RDMOBIDocument { + guard data.count >= 86, + let recordCount = data.rdUInt16BE(at: 76), + recordCount > 0 else { + throw RDMOBIParserError.invalidHeader + } + + let tableEnd = 78 + Int(recordCount) * 8 + guard tableEnd <= data.count else { + throw RDMOBIParserError.invalidRecordTable + } + + var offsets: [Int] = [] + offsets.reserveCapacity(Int(recordCount) + 1) + for index in 0..= tableEnd, + Int(offset) < data.count, + offsets.last.map({ Int(offset) > $0 }) ?? true else { + throw RDMOBIParserError.invalidRecordTable + } + offsets.append(Int(offset)) + } + offsets.append(data.count) + + let recordZero = data.subdata(in: offsets[0]..= 16, + let compression = recordZero.rdUInt16BE(at: 0), + let textLengthValue = recordZero.rdUInt32BE(at: 4), + let textRecordCount = recordZero.rdUInt16BE(at: 8), + let encryption = recordZero.rdUInt16BE(at: 12) else { + throw RDMOBIParserError.invalidHeader + } + guard encryption == 0 else { throw RDMOBIParserError.encryptedBook } + guard compression == 1 || compression == 2 else { + throw RDMOBIParserError.unsupportedCompression(compression) + } + + let availableTextRecords = min(Int(textRecordCount), max(0, offsets.count - 2)) + guard availableTextRecords > 0 else { throw RDMOBIParserError.emptyText } + + var decoded = Data() + decoded.reserveCapacity(min(Int(textLengthValue), 16 * 1024 * 1024)) + for recordIndex in 1...availableTextRecords { + let record = data.subdata(in: offsets[recordIndex]..= Int(textLengthValue) { break } + } + if decoded.count > Int(textLengthValue) { + decoded = decoded.prefix(Int(textLengthValue)) + } + + let encodingCode = recordZero.count >= 32 ? recordZero.rdUInt32BE(at: 28) : nil + let rawText = decodeText(decoded, encodingCode: encodingCode) + let text = normalizeMarkup(rawText) + guard text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false else { + throw RDMOBIParserError.emptyText + } + + let pdbTitle = decodePDBTitle(data.prefix(32)) + return RDMOBIDocument(title: pdbTitle.isEmpty ? fallbackTitle : pdbTitle, text: text) + } + + private func decompressPalmDOC(_ input: Data) throws -> Data { + let bytes = [UInt8](input) + var output: [UInt8] = [] + output.reserveCapacity(bytes.count * 2) + var index = 0 + + while index < bytes.count { + let byte = bytes[index] + index += 1 + switch byte { + case 0: + output.append(0) + case 1...8: + let count = Int(byte) + guard index + count <= bytes.count else { throw RDMOBIParserError.invalidRecordTable } + output.append(contentsOf: bytes[index..<(index + count)]) + index += count + case 9...0x7f: + output.append(byte) + case 0x80...0xbf: + guard index < bytes.count else { throw RDMOBIParserError.invalidRecordTable } + let pair = (UInt16(byte) << 8) | UInt16(bytes[index]) + index += 1 + let distance = Int((pair & 0x3fff) >> 3) + let count = Int(pair & 0x0007) + 3 + guard distance > 0, distance <= output.count else { throw RDMOBIParserError.invalidRecordTable } + for _ in 0.. String { + if encodingCode == 65001, let value = String(data: data, encoding: .utf8) { return value } + if encodingCode == 1252, let value = String(data: data, encoding: .windowsCP1252) { return value } + if let value = String(data: data, encoding: .utf8) { return value } + if let value = String(data: data, encoding: .windowsCP1252) { return value } + return String(decoding: data, as: UTF8.self) + } + + private func decodePDBTitle(_ data: Data.SubSequence) -> String { + let titleBytes = data.prefix { $0 != 0 } + return String(data: Data(titleBytes), encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + } + + private func normalizeMarkup(_ source: String) -> String { + var text = source + text = text.replacingOccurrences( + of: #"(?is)<(br\s*/?|/p|/div|/h[1-6]|/li|/blockquote|/tr)>"#, + with: "\n", + options: .regularExpression + ) + text = text.replacingOccurrences(of: #"(?is)<[^>]+>"#, with: "", options: .regularExpression) + let entities: [(String, String)] = [ + (" ", " "), ("&", "&"), ("<", "<"), + (">", ">"), (""", "\""), ("'", "'"), ("'", "'") + ] + for (entity, value) in entities { + text = text.replacingOccurrences(of: entity, with: value, options: .caseInsensitive) + } + text = decodeNumericEntities(text) + text = text.replacingOccurrences(of: #"[\t\u{00a0}]+"#, with: " ", options: .regularExpression) + text = text.replacingOccurrences(of: #"\n{3,}"#, with: "\n\n", options: .regularExpression) + return text.trimmingCharacters(in: .whitespacesAndNewlines) + } + + private func decodeNumericEntities(_ source: String) -> String { + guard let regex = try? NSRegularExpression(pattern: #"&#(x[0-9A-Fa-f]+|\d+);"#, options: [.caseInsensitive]) else { + return source + } + let result = NSMutableString(string: source) + let matches = regex.matches(in: source, range: NSRange(location: 0, length: result.length)) + for match in matches.reversed() { + let token = result.substring(with: match.range(at: 1)) + let radix = token.lowercased().hasPrefix("x") ? 16 : 10 + let digits = radix == 16 ? String(token.dropFirst()) : token + guard let value = UInt32(digits, radix: radix), let scalar = UnicodeScalar(value) else { continue } + result.replaceCharacters(in: match.range, with: String(Character(scalar))) + } + return result as String + } +} + +private extension Data { + func rdUInt16BE(at offset: Int) -> UInt16? { + guard offset >= 0, offset + 2 <= count else { return nil } + return (UInt16(self[offset]) << 8) | UInt16(self[offset + 1]) + } + + func rdUInt32BE(at offset: Int) -> UInt32? { + guard offset >= 0, offset + 4 <= count else { return nil } + return (UInt32(self[offset]) << 24) + | (UInt32(self[offset + 1]) << 16) + | (UInt32(self[offset + 2]) << 8) + | UInt32(self[offset + 3]) + } +} diff --git a/Sources/RDEpubReaderView/DocumentFormats/RDReaderDocumentFormat.swift b/Sources/RDEpubReaderView/DocumentFormats/RDReaderDocumentFormat.swift new file mode 100644 index 0000000..d2e5c82 --- /dev/null +++ b/Sources/RDEpubReaderView/DocumentFormats/RDReaderDocumentFormat.swift @@ -0,0 +1,21 @@ +import Foundation + +/// File formats that can be opened by `RDEpubURLReaderController`. +public enum RDReaderDocumentFormat: String, CaseIterable, Sendable { + case epub + case plainText = "txt" + case mobi + case cbz + + public init?(fileURL: URL) { + self.init(rawValue: fileURL.pathExtension.lowercased()) + } + + public static func supports(_ fileURL: URL) -> Bool { + RDReaderDocumentFormat(fileURL: fileURL) != nil + } + + public static var supportedPathExtensions: Set { + Set(allCases.map(\.rawValue)) + } +} diff --git a/Sources/RDEpubReaderView/EPUBTextRendering/RDEpubPlainTextBookBuilder.swift b/Sources/RDEpubReaderView/EPUBTextRendering/RDEpubPlainTextBookBuilder.swift index e0cdc60..590999c 100644 --- a/Sources/RDEpubReaderView/EPUBTextRendering/RDEpubPlainTextBookBuilder.swift +++ b/Sources/RDEpubReaderView/EPUBTextRendering/RDEpubPlainTextBookBuilder.swift @@ -18,6 +18,18 @@ public final class RDEpubPlainTextBookBuilder { style: RDEPUBTextRenderStyle ) throws -> RDEPUBTextBook { let rawText = rd_decodeTextFile(url: textFileURL) + return try build(text: rawText, pageSize: pageSize, style: style) + } + + /// Builds a paginated book from text already held in memory. This is used + /// by container formats such as MOBI, whose text does not exist as a + /// standalone file on disk. + public func build( + text: String, + pageSize: CGSize, + style: RDEPUBTextRenderStyle + ) throws -> RDEPUBTextBook { + let rawText = text let chapterSpecs = splitChapters(from: rawText) var chapters: [RDEPUBTextChapter] = [] diff --git a/Sources/RDEpubReaderView/EPUBUI/RDEpubURLReaderController.swift b/Sources/RDEpubReaderView/EPUBUI/RDEpubURLReaderController.swift index 66daaaf..f491afe 100644 --- a/Sources/RDEpubReaderView/EPUBUI/RDEpubURLReaderController.swift +++ b/Sources/RDEpubReaderView/EPUBUI/RDEpubURLReaderController.swift @@ -73,7 +73,11 @@ public final class RDEpubURLReaderController: UIViewController { } public func applyDemoDisplayType(_ displayType: RDEpubReaderView.DisplayType) { - readerController?.configuration.displayType = displayType + if let readerController { + readerController.configuration.displayType = displayType + } else { + cbzReaderController?.setDisplayType(displayType) + } emitDemoState(prefix: "display=\(displayType.demoArgumentValue)") } @@ -145,14 +149,16 @@ public final class RDEpubURLReaderController: UIViewController { private func embedReaderController() { let controller: UIViewController - if bookURL.pathExtension.lowercased() == "epub" { + switch RDReaderDocumentFormat(fileURL: bookURL) { + case .epub: controller = RDEPUBReaderController( epubURL: bookURL, configuration: epubConfiguration ) - } else { + case .cbz: + controller = RDCBZReaderController(bookURL: bookURL, configuration: epubConfiguration) + case .mobi, .plainText: let bookIdentifier = bookURL.lastPathComponent - let bookTitle = bookURL.deletingPathExtension().lastPathComponent let pageSize = currentTextPageSize() let renderStyle = currentTextRenderStyle() let safeInsets = RDEPUBSafeArea.resolve(view.safeAreaInsets) @@ -176,23 +182,33 @@ public final class RDEpubURLReaderController: UIViewController { imageMaxHeightRatio: 0.85 ) ) - if let textBook = try? builder.build(textFileURL: bookURL, pageSize: pageSize, style: renderStyle) { + do { + let source: (textURL: URL, title: String) + if RDReaderDocumentFormat(fileURL: bookURL) == .mobi { + let document = try RDMOBIParser().parse(fileURL: bookURL) + source = (try cachedMOBITextURL(text: document.text), document.title) + } else { + source = (bookURL, bookURL.deletingPathExtension().lastPathComponent) + } + let textBook = try builder.build(textFileURL: source.textURL, pageSize: pageSize, style: renderStyle) controller = RDEPUBReaderController( textBook: textBook, bookIdentifier: bookIdentifier, - title: bookTitle, - textFileURL: bookURL, + title: source.title, + textFileURL: source.textURL, configuration: epubConfiguration ) - } else { - - let fallback = UIViewController() - let textView = UITextView() - textView.isEditable = false - textView.text = rd_decodeTextFile(url: bookURL) - fallback.view = textView - controller = fallback + } catch { + controller = makeErrorController(error) } + case nil: + controller = makeErrorController( + NSError( + domain: "RDEpubReaderView.UnsupportedFormat", + code: 1, + userInfo: [NSLocalizedDescriptionKey: "不支持此文件格式"] + ) + ) } embeddedController = controller addChild(controller) @@ -213,8 +229,15 @@ public final class RDEpubURLReaderController: UIViewController { embeddedController as? RDEPUBReaderController } + private var cbzReaderController: RDCBZReaderController? { + embeddedController as? RDCBZReaderController + } + @discardableResult private func performDemoPageNavigation(_ pageNumber: Int, animated: Bool) -> Bool { + if let cbzReaderController { + return cbzReaderController.goToPage(pageNumber, animated: animated) + } guard let readerController else { return false } guard pageNumber > 0 else { return false } @@ -451,18 +474,41 @@ public final class RDEpubURLReaderController: UIViewController { ) } - private func rd_decodeTextFile(url: URL) -> String { - if let content = try? NSString(contentsOf: url, encoding: String.Encoding.utf8.rawValue) as String { - return content - } - if let content = try? NSString(contentsOf: url, encoding: 0x80000632) as String { - return content - } - if let content = try? NSString(contentsOf: url, encoding: 0x80000631) as String { - return content - } - return "" + private func cachedMOBITextURL(text: String) throws -> URL { + let attributes = try? FileManager.default.attributesOfItem(atPath: bookURL.path) + let size = (attributes?[.size] as? NSNumber)?.uint64Value ?? 0 + let modified = (attributes?[.modificationDate] as? Date)?.timeIntervalSince1970 ?? 0 + let safeName = bookURL.deletingPathExtension().lastPathComponent + .replacingOccurrences(of: #"[^A-Za-z0-9._-]"#, with: "_", options: .regularExpression) + let base = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first + ?? FileManager.default.temporaryDirectory + let directory = base.appendingPathComponent("ssreaderview-mobi", isDirectory: true) + .appendingPathComponent("\(safeName)-\(size)-\(Int64(modified))", isDirectory: true) + let textURL = directory.appendingPathComponent("content.txt") + if FileManager.default.fileExists(atPath: textURL.path) { return textURL } + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + try Data(text.utf8).write(to: textURL, options: .atomic) + return textURL } + + private func makeErrorController(_ error: Error) -> UIViewController { + let fallback = UIViewController() + fallback.view.backgroundColor = .systemBackground + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.textColor = .secondaryLabel + label.text = error.localizedDescription + label.translatesAutoresizingMaskIntoConstraints = false + fallback.view.addSubview(label) + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: fallback.view.leadingAnchor, constant: 24), + label.trailingAnchor.constraint(equalTo: fallback.view.trailingAnchor, constant: -24), + label.centerYAnchor.constraint(equalTo: fallback.view.centerYAnchor) + ]) + return fallback + } + } extension RDEpubURLReaderController: RDEPUBReaderDelegate { diff --git a/Sources/RDEpubReaderView/RDEpubReaderView.podspec b/Sources/RDEpubReaderView/RDEpubReaderView.podspec index 0fc2648..92b3625 100644 --- a/Sources/RDEpubReaderView/RDEpubReaderView.podspec +++ b/Sources/RDEpubReaderView/RDEpubReaderView.podspec @@ -2,7 +2,7 @@ Pod::Spec.new do |s| s.name = "RDEpubReaderView" s.module_name = "RDEpubReaderView" s.version = "0.0.2" - s.summary = "A reader view for EPUB and plain-text books" + s.summary = "A reader view for EPUB, TXT, MOBI, and CBZ books" s.platform = :ios, "15.0" s.swift_versions = ["5.10"] s.homepage = "http://192.168.21.200:8418/4v5u09Z5a4Yuc/ReadViewSDK.git" diff --git a/Sources/RDEpubReaderView/README.md b/Sources/RDEpubReaderView/README.md index 7d96c76..bc32c93 100644 --- a/Sources/RDEpubReaderView/README.md +++ b/Sources/RDEpubReaderView/README.md @@ -1,6 +1,15 @@ # RDEpubReaderView -项目内置的 EPUB 阅读器 CocoaPods 源码。 +项目内置的 EPUB、TXT、MOBI 与 CBZ 阅读器 CocoaPods 源码。 + +统一使用 `RDEpubURLReaderController(bookURL:)` 打开文件,支持扩展名: + +- `epub`:完整 EPUB 解析与排版 +- `txt`:纯文本章节识别与排版 +- `mobi`:无 DRM 的经典 MOBI6/PalmDOC(未压缩或 PalmDOC 压缩) +- `cbz`:ZIP 漫画图片包,文件名自然排序、图片分页与阅读进度保存 + +MOBI 的 HUFF/CDIC 压缩、KF8 专有排版以及 DRM 内容会返回明确的不支持错误;CBZ 会限制页数和解压体积,避免异常压缩包耗尽设备资源。 `Podfile` 通过 `:path => 'Vendor/RDEpubReaderView'` 引用本目录;自动复制工程到其他目录打包时,不再依赖仓库外的 `ReadViewSDK` 路径。 diff --git a/Sources/RDPDFReaderView/RDPDFReaderView.podspec b/Sources/RDPDFReaderView/RDPDFReaderView.podspec index f67946f..836dd35 100644 --- a/Sources/RDPDFReaderView/RDPDFReaderView.podspec +++ b/Sources/RDPDFReaderView/RDPDFReaderView.podspec @@ -2,7 +2,7 @@ Pod::Spec.new do |s| s.name = "RDPDFReaderView" s.module_name = "RDPDFReaderView" s.version = "0.0.1" - s.summary = "Independent UIKit PDF reader interaction engine" + s.summary = "UIKit PDF reader supporting host images and direct PDFKit parsing" s.platform = :ios, "15.0" s.swift_versions = ["5.10"] s.homepage = "https://example.invalid/RDPDFReaderView" @@ -11,6 +11,6 @@ Pod::Spec.new do |s| s.license = "MIT" s.source_files = "{Sources,ReaderView}/**/*.swift" s.dependency "SnapKit", "~> 5.7" - s.frameworks = "Vision", "CoreImage" + s.frameworks = "Vision", "CoreImage", "PDFKit" s.requires_arc = true end diff --git a/Sources/RDPDFReaderView/README.md b/Sources/RDPDFReaderView/README.md index 7910c12..0a7599e 100644 --- a/Sources/RDPDFReaderView/README.md +++ b/Sources/RDPDFReaderView/README.md @@ -4,6 +4,32 @@ 主工程的下载、解密、缓存、链接、标注和持久化仍由现有 PDF Feature 管理;后续通过适配层逐步迁移,避免把业务问题和手势问题混在一起。 +## PDF 数据来源 + +普通 PDF 可以由 SDK 使用 PDFKit 直接解析: + +```swift +let reader = try RDPDFReaderViewController( + pdfURL: fileURL, + bookIdentifier: stableBookID, + password: standardPDFPassword, + persistence: persistence, + annotationPersistence: annotationStore +) +``` + +自定义加密 PDF 继续由宿主解密并提供页面图片,不需要把原始文件交给 SDK: + +```swift +let reader = RDPDFReaderViewController( + pageProvider: encryptedImageProvider, + persistence: persistence, + annotationPersistence: annotationStore +) +``` + +两种入口最终都转换为 `RDPDFReaderPageProvider`,共用翻页、缩放、目录、书签、OCR、标注和画笔功能。内置 PDFKit 数据源按需渲染页面、限制最大图片尺寸并使用内存缓存;能够读取的原生 PDF 文字会直接用于选择和标注,图片扫描页则按配置回退到 OCR。 + ## 调试入口 在任意测试宿主中 push `RDPDFReaderDebugViewController()`: diff --git a/Sources/RDPDFReaderView/ReaderView/RDPDFReaderView+CollectionView.swift b/Sources/RDPDFReaderView/ReaderView/RDPDFReaderView+CollectionView.swift index 749789a..ea72111 100644 --- a/Sources/RDPDFReaderView/ReaderView/RDPDFReaderView+CollectionView.swift +++ b/Sources/RDPDFReaderView/ReaderView/RDPDFReaderView+CollectionView.swift @@ -45,6 +45,8 @@ extension RDPDFReaderView: UICollectionViewDataSource, UICollectionViewDelegateF private func updateCurrentPageAfterScroll(_ scrollView: UIScrollView) { guard currentDisplayType != .pageCurl else { return } + // 用户主动滚动后保留其页内阅读位置;不再应用先前跳页等待异步布局的顶部锚点。 + pendingWidthFitJumpPage = nil if currentDisplayType == .verticalScroll { // 宽度适配下各 cell 高度不同,页码取视口中心命中的 cell。 // 顶部/底部回弹时中心点会越出内容范围,钳制回内容内再取 cell。 diff --git a/Sources/RDPDFReaderView/Sources/RDPDFKitPageProvider.swift b/Sources/RDPDFReaderView/Sources/RDPDFKitPageProvider.swift new file mode 100644 index 0000000..795e92e --- /dev/null +++ b/Sources/RDPDFReaderView/Sources/RDPDFKitPageProvider.swift @@ -0,0 +1,296 @@ +import UIKit +import PDFKit + +public enum RDPDFKitPageProviderError: LocalizedError { + case cannotOpen(URL) + case passwordRequired + case incorrectPassword + case emptyDocument + + public var errorDescription: String? { + switch self { + case .cannotOpen: + return "无法打开 PDF 文件" + case .passwordRequired: + return "PDF 文件需要密码" + case .incorrectPassword: + return "PDF 密码不正确" + case .emptyDocument: + return "PDF 文件中没有可阅读的页面" + } + } +} + +/// SDK 内置的普通 PDF 数据源。自定义加密 PDF 仍可继续实现 +/// `RDPDFReaderPageProvider`,无需把原始文件交给 SDK。 +public final class RDPDFKitPageProvider: RDPDFReaderPageProvider, RDPDFReaderOutlineProviding, RDPDFReaderAsyncOutlineProviding { + private let document: PDFDocument + private let descriptor: RDPDFReaderBookDescriptor + private let renderQueue = DispatchQueue(label: "com.readviewsdk.pdfkit.render", qos: .userInitiated) + private let pageCache = NSCache() + private let thumbnailCache = NSCache() + private let maximumPagePixelDimension: CGFloat + private let screenScale: CGFloat + private let textRunDiskCache: RDPDFReaderTextRunDiskCache? + /// 只在 `renderQueue` 上访问,PDFDocument 与文字选择始终串行。 + private var textRunsCache: [Int: [RDPDFReaderTextRun]] = [:] + /// 只在 `renderQueue` 上读写。目录通常不变,缓存后打开导航面板无需再次遍历 PDFOutline。 + private var outlineCache: [RDPDFReaderOutlineItem]? + + /// 默认在设备原生分辨率基础上留出约 2 倍捏合放大余量,并封顶 4096: + /// 大屏 iPad 保持清晰度,小屏 iPhone 不为超大开本页面付出数十 MB 的位图。 + public static var defaultMaximumPagePixelDimension: CGFloat { + let screenSize = UIScreen.main.bounds.size + let screenMaxPixels = max(screenSize.width, screenSize.height) * UIScreen.main.scale + return min(4_096, max(2_048, screenMaxPixels * 2)) + } + + public init( + pdfURL: URL, + bookIdentifier: String? = nil, + title: String? = nil, + password: String? = nil, + maximumPagePixelDimension: CGFloat = RDPDFKitPageProvider.defaultMaximumPagePixelDimension, + cachesTextRunsOnDisk: Bool = true, + textRunDiskCacheVersion: Int = 1 + ) throws { + guard let document = PDFDocument(url: pdfURL) else { + throw RDPDFKitPageProviderError.cannotOpen(pdfURL) + } + if document.isLocked { + guard let password, password.isEmpty == false else { + throw RDPDFKitPageProviderError.passwordRequired + } + guard document.unlock(withPassword: password), document.isLocked == false else { + throw RDPDFKitPageProviderError.incorrectPassword + } + } + guard document.pageCount > 0 else { throw RDPDFKitPageProviderError.emptyDocument } + + self.document = document + self.maximumPagePixelDimension = max(1_024, maximumPagePixelDimension) + screenScale = max(UIScreen.main.scale, 2) + let metadataTitle = document.documentAttributes?[PDFDocumentAttribute.titleAttribute] as? String + let resolvedIdentifier = bookIdentifier ?? Self.defaultBookIdentifier(for: pdfURL) + descriptor = RDPDFReaderBookDescriptor( + identifier: resolvedIdentifier, + title: title ?? metadataTitle?.nonEmptyPDFTitle ?? pdfURL.deletingPathExtension().lastPathComponent, + totalPages: document.pageCount + ) + textRunDiskCache = cachesTextRunsOnDisk + ? RDPDFReaderTextRunDiskCache( + bookIdentifier: resolvedIdentifier, + cacheVersion: textRunDiskCacheVersion, + namespace: "pdfkit-native", + profile: "cropbox-normalized-1" + ) + : nil + pageCache.countLimit = 6 + pageCache.totalCostLimit = 96 * 1024 * 1024 + thumbnailCache.countLimit = 80 + thumbnailCache.totalCostLimit = 24 * 1024 * 1024 + } + + public func readerBookDescriptor() -> RDPDFReaderBookDescriptor { descriptor } + + public func readerPage(at index: Int, completion: @escaping (RDPDFReaderPageDescriptor) -> Void) { + guard index >= 0, index < descriptor.totalPages else { + completion(.init(index: index, image: nil, textRuns: nil)) + return + } + if let image = pageCache.object(forKey: NSNumber(value: index)) { + renderQueue.async { [weak self] in + let runs = self?.cachedTextRuns(for: index) + DispatchQueue.main.async { + completion(.init(index: index, image: image, textRuns: runs?.isEmpty == false ? runs : nil)) + } + } + return + } + + renderQueue.async { [weak self] in + guard let self, let page = self.document.page(at: index) else { + DispatchQueue.main.async { completion(.init(index: index, image: nil, textRuns: nil)) } + return + } + let image = autoreleasepool { self.renderPage(page) } + if let image { + self.pageCache.setObject(image, forKey: NSNumber(value: index), cost: image.rdEstimatedMemoryCost) + } + let runs = self.cachedTextRuns(for: index, page: page) + DispatchQueue.main.async { + completion(.init(index: index, image: image, textRuns: runs.isEmpty ? nil : runs)) + } + } + } + + public func readerThumbnail(at index: Int, targetSize: CGSize, completion: @escaping (UIImage?) -> Void) { + guard index >= 0, index < descriptor.totalPages, + targetSize.width > 0, targetSize.height > 0 else { + completion(nil) + return + } + let key = NSString(string: "\(index)-\(Int(targetSize.width.rounded()))x\(Int(targetSize.height.rounded()))") + if let cached = thumbnailCache.object(forKey: key) { + completion(cached) + return + } + renderQueue.async { [weak self] in + guard let self, let page = self.document.page(at: index) else { + DispatchQueue.main.async { completion(nil) } + return + } + let image = autoreleasepool { page.thumbnail(of: targetSize, for: .cropBox) } + self.thumbnailCache.setObject(image, forKey: key, cost: image.rdEstimatedMemoryCost) + DispatchQueue.main.async { completion(image) } + } + } + + public func readerOutlineItems() -> [RDPDFReaderOutlineItem] { + renderQueue.sync { outlineItemsLocked() } + } + + public func readerOutlineItems(completion: @escaping ([RDPDFReaderOutlineItem]) -> Void) { + renderQueue.async { [weak self] in + guard let self else { return } + let items = self.outlineItemsLocked() + DispatchQueue.main.async { completion(items) } + } + } + + public func removeCachedImages() { + pageCache.removeAllObjects() + thumbnailCache.removeAllObjects() + renderQueue.async { [weak self] in self?.textRunsCache.removeAll(keepingCapacity: false) } + } + + /// 与控制器的页面图片缓存窗口保持一致,避免原生文本结果在长 PDF 中无限累积。 + public func trimTextRuns(around pageIndex: Int, radius: Int) { + let safeRadius = max(0, radius) + renderQueue.async { [weak self] in + guard let self else { return } + self.textRunsCache = self.textRunsCache.filter { abs($0.key - pageIndex) <= safeRadius } + } + } + + private func renderPage(_ page: PDFPage) -> UIImage? { + let bounds = page.bounds(for: .cropBox) + guard bounds.width > 0, bounds.height > 0 else { return nil } + let requestedMaximum = max(bounds.width, bounds.height) * screenScale + let scale = min(screenScale, maximumPagePixelDimension / max(bounds.width, bounds.height)) + let effectiveScale = requestedMaximum > maximumPagePixelDimension ? max(scale, 0.1) : screenScale + let pixelSize = CGSize( + width: max(1, (bounds.width * effectiveScale).rounded(.up)), + height: max(1, (bounds.height * effectiveScale).rounded(.up)) + ) + let format = UIGraphicsImageRendererFormat() + format.scale = 1 + format.opaque = true + return UIGraphicsImageRenderer(size: pixelSize, format: format).image { context in + UIColor.white.setFill() + context.fill(CGRect(origin: .zero, size: pixelSize)) + context.cgContext.translateBy(x: 0, y: pixelSize.height) + context.cgContext.scaleBy(x: effectiveScale, y: -effectiveScale) + context.cgContext.translateBy(x: -bounds.minX, y: -bounds.minY) + page.draw(with: .cropBox, to: context.cgContext) + } + } + + private func cachedTextRuns(for index: Int, page suppliedPage: PDFPage? = nil) -> [RDPDFReaderTextRun] { + if let cached = textRunsCache[index] { return cached } + if let cached = textRunDiskCache?.loadSynchronously(pageIndex: index) { + textRunsCache[index] = cached + return cached + } + guard let page = suppliedPage ?? document.page(at: index) else { return [] } + let runs = textRuns(for: page) + textRunsCache[index] = runs + textRunDiskCache?.save(runs, pageIndex: index) + return runs + } + + /// 身份签名只取文件名、大小和头部内容。绝对路径在 iOS 容器迁移(应用更新、 + /// 备份恢复)后会变化,修改时间在重新下载后会变化;它们参与签名会让以 + /// identifier 为 key 的书签、笔迹和阅读进度整体失效。 + private static func defaultBookIdentifier(for url: URL) -> String { + let fileURL = url.standardizedFileURL + let fileSize = (try? fileURL.resourceValues(forKeys: [.fileSizeKey]))?.fileSize + var signature = "\(fileURL.lastPathComponent)|\(fileSize.map(String.init) ?? "")" + if let handle = try? FileHandle(forReadingFrom: fileURL) { + let head = handle.readData(ofLength: 64 * 1024) + handle.closeFile() + if head.isEmpty == false { + signature += "|\(RDPDFReaderTextRunDiskCache.stableIdentifier(for: head))" + } + } + return "pdf.\(RDPDFReaderTextRunDiskCache.stableIdentifier(for: signature))" + } + + private func outlineItemsLocked() -> [RDPDFReaderOutlineItem] { + if let outlineCache { return outlineCache } + guard let root = document.outlineRoot else { + let items = fallbackOutline() + outlineCache = items + return items + } + var items: [RDPDFReaderOutlineItem] = [] + func appendChildren(of outline: PDFOutline, level: Int) { + for childIndex in 0.. [RDPDFReaderTextRun] { + let pageBounds = page.bounds(for: .cropBox) + guard pageBounds.width > 0, pageBounds.height > 0, + let selection = page.selection(for: pageBounds) else { return [] } + return selection.selectionsByLine().enumerated().compactMap { order, line in + guard let text = line.string?.trimmingCharacters(in: .whitespacesAndNewlines), text.isEmpty == false else { + return nil + } + let rect = line.bounds(for: page).intersection(pageBounds) + guard rect.isNull == false, rect.isEmpty == false else { return nil } + let normalized = CGRect( + x: (rect.minX - pageBounds.minX) / pageBounds.width, + y: (pageBounds.maxY - rect.maxY) / pageBounds.height, + width: rect.width / pageBounds.width, + height: rect.height / pageBounds.height + ) + return RDPDFReaderTextRun(text: text, normalizedRect: normalized, readingOrder: order) + } + } + + private func fallbackOutline() -> [RDPDFReaderOutlineItem] { + (0.. Void)? private(set) var isPresented = false + /// 画笔/橡皮被选中时,放大层把单指让给页面内的画布,仅保留双指拖动与捏合。 + var isDrawingToolActive = false { + didSet { scrollView.panGestureRecognizer.minimumNumberOfTouches = isDrawingToolActive ? 2 : 1 } + } + override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .white @@ -536,8 +581,13 @@ final class RDPDFReaderZoomOverlayView: UIView, UIScrollViewDelegate, UIGestureR scrollView.minimumZoomScale = 0.65 scrollView.maximumZoomScale = 3 scrollView.bouncesZoom = true + scrollView.contentInsetAdjustmentBehavior = .never scrollView.showsHorizontalScrollIndicator = false scrollView.showsVerticalScrollIndicator = false + // 画笔选中时笔迹必须立即送达画布,不能等滚动判定;未选中时画布不接收触摸,无副作用。 + // 保留 canCancelContentTouches 默认值:双指拖动仍可从画布手中接管触摸, + // 画布在收到第二根手指或触摸取消时会自行丢弃未完成笔迹。 + scrollView.delaysContentTouches = false // Overlay 显示后的后续捏合由 UIScrollView 自己接收,也必须遵循缩小回弹流程。 scrollView.pinchGestureRecognizer?.addTarget(self, action: #selector(handleOverlayPinch(_:))) addSubview(scrollView) @@ -558,6 +608,8 @@ final class RDPDFReaderZoomOverlayView: UIView, UIScrollViewDelegate, UIGestureR func present(leftPage: UIView, rightPage: UIView?, bookSize: CGSize, backgroundColor: UIColor) { self.backgroundColor = backgroundColor + // Overlay 仍隐藏时完成所有换父视图和居中布局,避免把中间态提交到屏幕。 + layoutIfNeeded() restoreLeasedPages() let safeSize = CGSize(width: max(1, bookSize.width), height: max(1, bookSize.height)) canvasView.frame = CGRect(origin: .zero, size: safeSize) @@ -570,12 +622,14 @@ final class RDPDFReaderZoomOverlayView: UIView, UIScrollViewDelegate, UIGestureR $0.readerSetInternalGesturesEnabled(false) } scrollView.setZoomScale(1, animated: false) - scrollView.contentOffset = .zero + updateInsets() + // UIScrollView 在带 contentInset 的静止位置不是 .zero,而是负 inset。 + // 先写 .zero 再等待 UIKit 校正会产生一帧书页贴顶的闪动。 + scrollView.contentOffset = CGPoint(x: -scrollView.contentInset.left, y: -scrollView.contentInset.top) // 容器在 present 后已进入放大态;即便用户第一步就是缩小,也要保证结束时能发出 false。 reportedZoomed = true isPresented = true isHidden = false - updateInsets() } func dismiss() { @@ -677,6 +731,8 @@ final class RDPDFReaderZoomOverlayView: UIView, UIScrollViewDelegate, UIGestureR page.autoresizingMask = [] canvasView.addSubview(page) page.frame = frame + page.setNeedsLayout() + page.layoutIfNeeded() } private func restoreLeasedPages() { @@ -736,6 +792,8 @@ final class RDPDFReaderPageSpreadView: UIView, RDPDFReaderPageInteractable { return nil } + var pageViews: [UIView] { [leftPage, rightPage].compactMap { $0 } } + var readerContentTapHandler: ((CGPoint) -> Void)? var readerZoomStateChangedHandler: ((Bool) -> Void)? var readerSelectionStateChangedHandler: ((Bool) -> Void)? @@ -744,6 +802,7 @@ final class RDPDFReaderPageSpreadView: UIView, RDPDFReaderPageInteractable { func readerSetInternalGesturesEnabled(_ enabled: Bool) { pages.forEach { $0.readerSetInternalGesturesEnabled(enabled) } } func readerClearTextSelection() { pages.forEach { $0.readerClearTextSelection() } } + func readerFinishActiveDrawingStroke() { pages.forEach { $0.readerFinishActiveDrawingStroke() } } func readerBeginExternalPinch(at point: CGPoint) { activePage(at: point)?.readerBeginExternalPinch(at: point) } func readerUpdateExternalPinch(scale: CGFloat, at point: CGPoint) { activePage(at: point)?.readerUpdateExternalPinch(scale: scale, at: point) } func readerEndExternalPinch() { pages.forEach { $0.readerEndExternalPinch() } } diff --git a/Sources/RDPDFReaderView/Sources/RDPDFReaderContracts.swift b/Sources/RDPDFReaderView/Sources/RDPDFReaderContracts.swift index 21fde90..c32cf0f 100644 --- a/Sources/RDPDFReaderView/Sources/RDPDFReaderContracts.swift +++ b/Sources/RDPDFReaderView/Sources/RDPDFReaderContracts.swift @@ -238,7 +238,8 @@ public struct RDPDFReaderHighlight: Equatable, Codable { } } -/// 主程序实现此协议,把“已经解析好的页面”提供给 SDK。 +/// 主程序实现此协议,把“已经解析好的页面”提供给 SDK。页面和缩略图回调可在任意 +/// 队列触发;SDK 会在接收结果后自行切回主线程更新界面。 public protocol RDPDFReaderPageProvider: AnyObject { func readerBookDescriptor() -> RDPDFReaderBookDescriptor func readerPage(at index: Int, completion: @escaping (RDPDFReaderPageDescriptor) -> Void) @@ -267,6 +268,12 @@ public protocol RDPDFReaderOutlineProviding: AnyObject { func readerOutlineItems() -> [RDPDFReaderOutlineItem] } +/// 可选的异步目录提供协议。适用于目录解析可能耗时的文件格式;SDK 会在加载完成后 +/// 再展示导航面板,避免阻塞主线程。未实现时继续兼容 `RDPDFReaderOutlineProviding`。 +public protocol RDPDFReaderAsyncOutlineProviding: AnyObject { + func readerOutlineItems(completion: @escaping ([RDPDFReaderOutlineItem]) -> Void) +} + /// 媒体、购买、外链等业务行为由宿主处理,SDK 不引用路由或播放器实现。 public enum RDPDFReaderHostAction: Equatable { case back diff --git a/Sources/RDPDFReaderView/Sources/RDPDFReaderDrawingCanvasView.swift b/Sources/RDPDFReaderView/Sources/RDPDFReaderDrawingCanvasView.swift index 112211d..5b3084b 100644 --- a/Sources/RDPDFReaderView/Sources/RDPDFReaderDrawingCanvasView.swift +++ b/Sources/RDPDFReaderView/Sources/RDPDFReaderDrawingCanvasView.swift @@ -8,21 +8,36 @@ public struct RDPDFReaderDrawingPath: Codable, Equatable { public let tool: RDPDFReaderDrawingTool /// 笔迹所属图层。旧版文件没有该字段时会归入默认图层。 public let layerID: UUID? + /// 创建笔迹时的实际书页尺寸。渲染时会从该尺寸映射到当前书页尺寸, + /// 因而横竖屏切换只改变显示比例,不改变笔迹相对 PDF 页的位置和粗细。 + /// 旧版数据没有该字段时继续按原始 UIKit 点坐标显示。 + public let referencePageSize: CGSize? public var points: [CGPoint] public let createdAt: Date - public init(id: UUID = UUID(), page: Int, color: String, lineWidth: CGFloat, tool: RDPDFReaderDrawingTool, layerID: UUID? = nil, points: [CGPoint], createdAt: Date = Date()) { + public init( + id: UUID = UUID(), + page: Int, + color: String, + lineWidth: CGFloat, + tool: RDPDFReaderDrawingTool, + layerID: UUID? = nil, + referencePageSize: CGSize? = nil, + points: [CGPoint], + createdAt: Date = Date() + ) { self.id = id self.page = page self.color = color self.lineWidth = lineWidth self.tool = tool self.layerID = layerID + self.referencePageSize = referencePageSize self.points = points self.createdAt = createdAt } - private enum CodingKeys: String, CodingKey { case id, page, color, lineWidth, tool, layerID, points, createdAt } + private enum CodingKeys: String, CodingKey { case id, page, color, lineWidth, tool, layerID, referencePageSize, points, createdAt } public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) @@ -32,6 +47,14 @@ public struct RDPDFReaderDrawingPath: Codable, Equatable { lineWidth = try container.decode(CGFloat.self, forKey: .lineWidth) tool = try container.decode(RDPDFReaderDrawingTool.self, forKey: .tool) layerID = try container.decodeIfPresent(UUID.self, forKey: .layerID) + if let values = try container.decodeIfPresent([CGFloat].self, forKey: .referencePageSize), + values.count >= 2, + values[0] > 0, + values[1] > 0 { + referencePageSize = CGSize(width: values[0], height: values[1]) + } else { + referencePageSize = nil + } createdAt = Date(timeIntervalSince1970: try container.decode(TimeInterval.self, forKey: .createdAt)) let rawPoints = try container.decode([[CGFloat]].self, forKey: .points) points = rawPoints.compactMap { values in values.count >= 2 ? CGPoint(x: values[0], y: values[1]) : nil } @@ -45,6 +68,9 @@ public struct RDPDFReaderDrawingPath: Codable, Equatable { try container.encode(lineWidth, forKey: .lineWidth) try container.encode(tool, forKey: .tool) try container.encodeIfPresent(layerID, forKey: .layerID) + if let referencePageSize { + try container.encode([referencePageSize.width, referencePageSize.height], forKey: .referencePageSize) + } try container.encode(points.map { [$0.x, $0.y] }, forKey: .points) try container.encode(createdAt.timeIntervalSince1970, forKey: .createdAt) } @@ -115,6 +141,8 @@ public final class RDPDFReaderDrawingCanvasView: UIView { super.init(frame: frame) isOpaque = false backgroundColor = .clear + // 书页尺寸变化时重新按 referencePageSize 绘制,避免复用旧位图造成失真或模糊。 + contentMode = .redraw contentScaleFactor = UIScreen.main.scale isMultipleTouchEnabled = true } @@ -128,7 +156,17 @@ public final class RDPDFReaderDrawingCanvasView: UIView { let defaultLayer = RDPDFReaderDrawingLayer(name: "图层 1") layers = [defaultLayer] paths = paths.map { path in - RDPDFReaderDrawingPath(id: path.id, page: path.page, color: path.color, lineWidth: path.lineWidth, tool: path.tool, layerID: defaultLayer.id, points: path.points, createdAt: path.createdAt) + RDPDFReaderDrawingPath( + id: path.id, + page: path.page, + color: path.color, + lineWidth: path.lineWidth, + tool: path.tool, + layerID: defaultLayer.id, + referencePageSize: path.referencePageSize, + points: path.points, + createdAt: path.createdAt + ) } } activeLayerID = layers.first(where: \.isVisible)?.id ?? layers.first?.id @@ -142,6 +180,12 @@ public final class RDPDFReaderDrawingCanvasView: UIView { public func loadPaths(_ paths: [RDPDFReaderDrawingPath]) { load(document: .init(pageNo: currentPage, paths: paths)) } public func currentPaths() -> [RDPDFReaderDrawingPath] { paths } + /// 显式跳页或关闭画笔时提交当前已采集的笔迹,避免 UIView 被移除导致最后一笔丢失。 + public func finishCurrentStroke() { + guard currentPath != nil else { return } + commitCurrentStroke() + activeDrawingTouch = nil + } public func drawingDocument() -> RDPDFReaderDrawingDocument { .init(pageNo: currentPage, paths: paths, layers: layers) } public func drawingLayers() -> [RDPDFReaderDrawingLayer] { layers } public func selectedDrawingLayerID() -> UUID? { activeLayerID } @@ -299,23 +343,25 @@ public final class RDPDFReaderDrawingCanvasView: UIView { private func draw(path: RDPDFReaderDrawingPath, in context: CGContext) { guard !path.points.isEmpty else { return } + let renderedPoints = path.points.map { renderedPoint($0, for: path) } + let renderedLineWidth = path.lineWidth * renderedScale(for: path) context.setBlendMode(path.tool == .eraser ? .clear : .normal) context.setStrokeColor(UIColor(hexString: path.color).cgColor) context.setFillColor(UIColor(hexString: path.color).cgColor) - context.setLineWidth(path.tool == .eraser ? eraserLineWidth(for: path) : path.lineWidth) + context.setLineWidth(path.tool == .eraser ? eraserLineWidth(for: path, renderedLineWidth: renderedLineWidth) : renderedLineWidth) context.setLineCap(.round) context.setLineJoin(.round) context.setAlpha(path.tool == .highlighter ? 0.3 : 1) - if path.points.count == 1 { - let radius = (path.tool == .eraser ? eraserLineWidth(for: path) : path.lineWidth) / 2 - let point = path.points[0] + if renderedPoints.count == 1 { + let radius = (path.tool == .eraser ? eraserLineWidth(for: path, renderedLineWidth: renderedLineWidth) : renderedLineWidth) / 2 + let point = renderedPoints[0] context.fillEllipse(in: CGRect(x: point.x - radius, y: point.y - radius, width: radius * 2, height: radius * 2)) context.setAlpha(1) context.setBlendMode(.normal) return } context.beginPath() - addSmoothedCurve(for: path.points, to: context) + addSmoothedCurve(for: renderedPoints, to: context) context.strokePath() context.setAlpha(1) context.setBlendMode(.normal) @@ -339,13 +385,35 @@ public final class RDPDFReaderDrawingCanvasView: UIView { lineWidth: tool == .highlighter ? 8 : lineWidth, tool: tool, layerID: activeLayerID, + referencePageSize: bounds.size, points: [clampedPoint(point)] ) } - private func eraserLineWidth(for path: RDPDFReaderDrawingPath) -> CGFloat { - // SheetMusic 的橡皮与画笔共享大小滑杆;在 UIKit 点坐标系中给出可感知的对应直径。 - max(path.lineWidth * 2, 12) + private func renderedPoint(_ point: CGPoint, for path: RDPDFReaderDrawingPath) -> CGPoint { + guard let referenceSize = path.referencePageSize, + referenceSize.width > 0, + referenceSize.height > 0, + bounds.width > 0, + bounds.height > 0 else { return point } + return CGPoint( + x: point.x * bounds.width / referenceSize.width, + y: point.y * bounds.height / referenceSize.height + ) + } + + private func renderedScale(for path: RDPDFReaderDrawingPath) -> CGFloat { + guard let referenceSize = path.referencePageSize, + referenceSize.width > 0, + referenceSize.height > 0, + bounds.width > 0, + bounds.height > 0 else { return 1 } + return min(bounds.width / referenceSize.width, bounds.height / referenceSize.height) + } + + private func eraserLineWidth(for path: RDPDFReaderDrawingPath, renderedLineWidth: CGFloat) -> CGFloat { + // 橡皮最小直径也随实际书页缩放,避免横竖屏切换后擦除范围与笔迹比例脱节。 + max(renderedLineWidth * 2, 12 * renderedScale(for: path)) } /// 触点使用 Catmull–Rom 到三次贝塞尔的转换。这样保留原始笔迹数据和撤销语义, diff --git a/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextLayerView.swift b/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextLayerView.swift index c2063cc..97afbea 100644 --- a/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextLayerView.swift +++ b/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextLayerView.swift @@ -346,10 +346,13 @@ public final class RDPDFReaderImageTextLayerView: UIView, UIGestureRecognizerDel } public override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { + // UIKit 会就“命中本视图的所有手势”(含外层翻页滚动、阅读器捏合)调用此方法; + // 这里只允许约束本层自己的选择手势,其余一律交还默认判定,否则画笔会话 + // 关闭选区(isSelectionEnabled = false)时会连带否决外层的拖动与缩放。 + let ownsGesture = gestureRecognizer === longPressGestureRecognizer + || gestureRecognizer === selectionHandlePanGestureRecognizer + guard ownsGesture else { return super.gestureRecognizerShouldBegin(gestureRecognizer) } guard isSelectionEnabled, bounds.width > 0, bounds.height > 0 else { return false } - if gestureRecognizer === longPressGestureRecognizer { - return true - } if gestureRecognizer === selectionHandlePanGestureRecognizer { guard let selection = selectedSelection, selection.source != .region else { return false } return selectionHandle(at: gestureRecognizer.location(in: self)) != nil diff --git a/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextRecognizer.swift b/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextRecognizer.swift index 2aace75..5b9fa35 100644 --- a/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextRecognizer.swift +++ b/Sources/RDPDFReaderView/Sources/RDPDFReaderImageTextRecognizer.swift @@ -20,6 +20,11 @@ public final class RDPDFReaderImageTextRecognizer { label: "com.readoor.pdf-reader.image-text-recognizer", qos: .userInitiated ) + private let requestLock = NSLock() + private var pendingRequests: [UUID: DispatchWorkItem] = [:] + /// 已进入 `perform` 的请求。`DispatchWorkItem.cancel()` 中断不了它们, + /// 必须对 VNRequest 本身调用 `cancel()`。 + private var activeVisionRequests: [UUID: VNRecognizeTextRequest] = [:] public init( recognitionLevel: VNRequestTextRecognitionLevel = .accurate, @@ -32,10 +37,12 @@ public final class RDPDFReaderImageTextRecognizer { } /// 异步识别页面图片中的文字。结果的矩形以图片左上角为原点,范围为 0...1。 - public func recognizeTextRuns(in image: UIImage, completion: @escaping Completion) { + @discardableResult + public func recognizeTextRuns(in image: UIImage, completion: @escaping Completion) -> UUID { + let requestID = UUID() guard let cgImage = Self.makeCGImage(from: image) else { deliver([], to: completion) - return + return requestID } let configuration = Configuration( @@ -45,22 +52,50 @@ public final class RDPDFReaderImageTextRecognizer { ) let orientation = CGImagePropertyOrientation(orientation: image.imageOrientation) - processingQueue.async { + let workItem = DispatchWorkItem { [weak self] in + guard let self else { return } let request = VNRecognizeTextRequest { request, _ in let observations = request.results as? [VNRecognizedTextObservation] ?? [] let runs = Self.makeTextRuns(from: observations) + guard self.removeRequest(requestID) else { return } self.deliver(runs, to: completion) } request.recognitionLevel = configuration.recognitionLevel request.recognitionLanguages = configuration.recognitionLanguages request.usesLanguageCorrection = configuration.usesLanguageCorrection + guard self.registerActiveVisionRequest(request, for: requestID) else { return } + var performFailed = false do { try VNImageRequestHandler(cgImage: cgImage, orientation: orientation).perform([request]) } catch { + performFailed = true + } + self.unregisterActiveVisionRequest(requestID) + if performFailed { + guard self.removeRequest(requestID) else { return } self.deliver([], to: completion) } } + requestLock.lock() + pendingRequests[requestID] = workItem + requestLock.unlock() + processingQueue.async(execute: workItem) + return requestID + } + + /// 丢弃尚未开始的识别请求,并忽略正在执行请求的完成结果。 + /// 用于快速翻页后优先让当前停留页进入串行 OCR 队列。 + public func cancelAllRequests() { + requestLock.lock() + let queued = pendingRequests.values + let inFlight = activeVisionRequests.values + pendingRequests.removeAll() + activeVisionRequests.removeAll() + requestLock.unlock() + queued.forEach { $0.cancel() } + // 让正在执行的识别尽快返回,当前停留页不必等整页识别跑完才能入队。 + inFlight.forEach { $0.cancel() } } /// Swift Concurrency 版本,与回调版本使用相同的识别和主线程回调语义。 @@ -171,6 +206,30 @@ public final class RDPDFReaderImageTextRecognizer { completion(runs) } } + + /// 只有仍处于活跃状态的请求才能进入执行阶段并登记可取消的 VNRequest。 + private func registerActiveVisionRequest(_ request: VNRecognizeTextRequest, for requestID: UUID) -> Bool { + requestLock.lock() + defer { requestLock.unlock() } + guard pendingRequests[requestID]?.isCancelled == false else { return false } + activeVisionRequests[requestID] = request + return true + } + + private func unregisterActiveVisionRequest(_ requestID: UUID) { + requestLock.lock() + activeVisionRequests.removeValue(forKey: requestID) + requestLock.unlock() + } + + /// 仅活跃请求能取得完成权;被取消或已替代的请求结果必须丢弃。 + @discardableResult + private func removeRequest(_ requestID: UUID) -> Bool { + requestLock.lock() + defer { requestLock.unlock() } + guard let request = pendingRequests.removeValue(forKey: requestID), !request.isCancelled else { return false } + return true + } } private extension CGImagePropertyOrientation { @@ -197,3 +256,87 @@ private extension CGImagePropertyOrientation { } } } + +/// 页面文本结果的可清除磁盘缓存。OCR 与 PDFKit 原生文本使用不同命名空间,避免混用。 +final class RDPDFReaderTextRunDiskCache { + private struct Document: Codable { + let version: Int + let runs: [RDPDFReaderTextRun] + } + + private static let documentVersion = 1 + private let rootURL: URL + private let queue = DispatchQueue(label: "com.readoor.pdf-reader.ocr-disk-cache", qos: .utility) + + init(bookIdentifier: String, cacheVersion: Int, namespace: String, profile: String = "") { + // 目录分两级:书籍散列在外、命名空间+版本+配置在内。这样 version/profile + // 变更后能定位并删除同一本书同一命名空间下不再使用的旧目录。 + let variantName = "\(namespace)-v\(cacheVersion)-\(Self.stableIdentifier(for: profile))" + let cachesURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let bookRootURL = cachesURL + .appendingPathComponent("RDPDFReaderView", isDirectory: true) + .appendingPathComponent("TextRuns", isDirectory: true) + .appendingPathComponent(Self.stableIdentifier(for: bookIdentifier), isDirectory: true) + rootURL = bookRootURL.appendingPathComponent(variantName, isDirectory: true) + queue.async { + let entries = (try? FileManager.default.contentsOfDirectory( + at: bookRootURL, + includingPropertiesForKeys: nil + )) ?? [] + for entry in entries + where entry.lastPathComponent.hasPrefix("\(namespace)-") && entry.lastPathComponent != variantName { + try? FileManager.default.removeItem(at: entry) + } + } + } + + func load(pageIndex: Int, completion: @escaping ([RDPDFReaderTextRun]?) -> Void) { + queue.async { + let runs = self.loadLocked(pageIndex: pageIndex) + DispatchQueue.main.async { completion(runs) } + } + } + + /// PDFKit 的渲染队列在后台调用,避免为了读磁盘缓存再切换到主线程。 + func loadSynchronously(pageIndex: Int) -> [RDPDFReaderTextRun]? { + queue.sync { loadLocked(pageIndex: pageIndex) } + } + + func save(_ runs: [RDPDFReaderTextRun], pageIndex: Int) { + let url = fileURL(for: pageIndex) + queue.async { + guard let data = try? JSONEncoder().encode(Document(version: Self.documentVersion, runs: runs)) else { return } + do { + try FileManager.default.createDirectory(at: self.rootURL, withIntermediateDirectories: true) + try data.write(to: url, options: .atomic) + } catch { + // 文本缓存不可用时仍可重新提取/识别,不能影响阅读流程。 + } + } + } + + private func fileURL(for pageIndex: Int) -> URL { + rootURL.appendingPathComponent("\(max(0, pageIndex)).json") + } + + static func stableIdentifier(for value: String) -> String { + stableIdentifier(for: Array(value.utf8)) + } + + static func stableIdentifier(for bytes: Bytes) -> String where Bytes.Element == UInt8 { + var hash: UInt64 = 14_695_981_039_346_656_037 + for byte in bytes { + hash ^= UInt64(byte) + hash &*= 1_099_511_628_211 + } + return String(hash, radix: 16) + } + + private func loadLocked(pageIndex: Int) -> [RDPDFReaderTextRun]? { + let url = fileURL(for: pageIndex) + guard let data = try? Data(contentsOf: url), + let document = try? JSONDecoder().decode(Document.self, from: data), + document.version == Self.documentVersion else { return nil } + return document.runs + } +} diff --git a/Sources/RDPDFReaderView/Sources/RDPDFReaderPageView.swift b/Sources/RDPDFReaderView/Sources/RDPDFReaderPageView.swift index 4b01cd3..80c331c 100644 --- a/Sources/RDPDFReaderView/Sources/RDPDFReaderPageView.swift +++ b/Sources/RDPDFReaderView/Sources/RDPDFReaderPageView.swift @@ -94,6 +94,7 @@ public final class RDPDFReaderPageView: UIView, RDPDFReaderPageInteractable, UIG public func readerSetInternalGesturesEnabled(_ enabled: Bool) { zoomView.setInternalGesturesEnabled(enabled) } public func readerClearTextSelection() { textLayer.clearSelection() } + public func readerFinishActiveDrawingStroke() { drawingCanvas.finishCurrentStroke() } public func readerBeginExternalPinch(at point: CGPoint) { zoomView.beginExternalPinch(at: convert(point, to: zoomView)) } public func readerUpdateExternalPinch(scale: CGFloat, at point: CGPoint) { zoomView.updateExternalPinch(scale: scale, at: convert(point, to: zoomView)) @@ -135,6 +136,8 @@ public final class RDPDFReaderPageView: UIView, RDPDFReaderPageInteractable, UIG ) { textLayer.pageIndex = pageIndex textLayer.textSource = textSource + // 无文字来源时长按空白进入区域框选;有文字时保持与 EPUB 一致只响应文本。 + textLayer.allowsRegionSelection = textSource == .region textLayer.textRuns = textRuns textLayer.annotations = annotations updateAccessibilityViewport() diff --git a/Sources/RDPDFReaderView/Sources/RDPDFReaderViewController.swift b/Sources/RDPDFReaderView/Sources/RDPDFReaderViewController.swift index c21baf7..da8f458 100644 --- a/Sources/RDPDFReaderView/Sources/RDPDFReaderViewController.swift +++ b/Sources/RDPDFReaderView/Sources/RDPDFReaderViewController.swift @@ -1,8 +1,8 @@ import UIKit import SnapKit -/// 成品 PDF 阅读控制器。宿主提供已解析的页面和可选存储;阅读交互、OCR、标注及面板 -/// 由 SDK 统一编排,因此 SDK 不需要接触 PDFKit、数据库或应用路由。 +/// 成品 PDF 阅读控制器。自定义加密文件由宿主提供页面;普通 PDF 可由 SDK 使用 +/// PDFKit 直接解析。两种来源共用阅读交互、OCR、标注及面板。 public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataSource, RDPDFReaderDelegate, RDPDFReaderPageViewDelegate { public struct Configuration { @@ -13,9 +13,22 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS public var initialThemeIdentifier: Int = 0 public var enablesOCR = true public var recognitionLanguages: [String] = [] + /// 将 Vision 识别结果写入系统可清除的缓存目录;再次打开同一书籍时可直接复用。 + public var cachesOCRResultsOnDisk = true + /// 书籍内容、识别语言或 OCR 算法策略变更时递增,以使旧缓存自动失效。 + public var ocrDiskCacheVersion = 1 + /// 将 PDFKit 原生文本与坐标写入系统可清除的缓存目录。 + public var cachesNativeTextResultsOnDisk = true + /// PDF 内容、裁剪框规则或原生文本坐标转换策略变更时递增。 + public var nativeTextDiskCacheVersion = 1 /// 未提供文字且 OCR 关闭时,页面仍可使用区域标注。 public var missingTextSource: RDPDFReaderAnnotationSource = .region - /// 页面图片归宿主所有;宿主可在此进行缓存、反色或其它主题渲染。 + /// SDK 直读 PDF 时,控制器保留当前页前后页面描述的半径,避免长 PDF 阅读时 + /// 持续持有已离开的页面图片。宿主 Provider 的原有缓存行为保持不变。 + public var pageDescriptorCacheRadius = 3 + /// 内存中保留当前页前后的 OCR 结果数量;默认沿用页面描述缓存半径。 + public var ocrMemoryCacheRadius: Int? + /// 宿主或内置 Provider 提供页面后,可在此进行反色或其它主题渲染。 public var pageImageTransform: ((UIImage, RDPDFReaderThemeOption) -> UIImage)? public init() {} @@ -29,14 +42,18 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS private let readerView = RDPDFReaderView() private let recognizer: RDPDFReaderImageTextRecognizer + private let ocrDiskCache: RDPDFReaderTextRunDiskCache? private var book: RDPDFReaderBookDescriptor private var currentTheme: RDPDFReaderThemeOption private var pageDescriptors: [Int: RDPDFReaderPageDescriptor] = [:] private var ocrRuns: [Int: [RDPDFReaderTextRun]] = [:] private var recognizingPages = Set() + /// 每页的逻辑请求标识。快速翻页取消旧请求后,迟到回调不能覆盖当前状态。 + private var ocrRequestTokens: [Int: UUID] = [:] private var bookmarks = Set() private weak var topToolbar: RDPDFReaderKitTopToolView? private weak var bottomToolbar: RDPDFReaderKitBottomToolView? + private var navigationLoadingIndicator: UIActivityIndicatorView? private let drawingToolbar = RDPDFReaderDrawingToolbar() private var isDrawingMode = false /// `nil` 时处于画笔面板内的浏览状态,可单指拖动画面。 @@ -66,10 +83,45 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS currentTheme = configuration.themes.first { $0.identifier == configuration.initialThemeIdentifier } ?? configuration.themes[0] preferredDisplayType = configuration.displayType recognizer = RDPDFReaderImageTextRecognizer(recognitionLanguages: configuration.recognitionLanguages) + ocrDiskCache = configuration.cachesOCRResultsOnDisk + ? RDPDFReaderTextRunDiskCache( + bookIdentifier: book.identifier, + cacheVersion: configuration.ocrDiskCacheVersion, + namespace: "vision-ocr", + profile: "\(configuration.recognitionLanguages.sorted().joined(separator: ","))|accurate-1" + ) + : nil super.init(nibName: nil, bundle: nil) title = book.title } + /// 直接打开普通 PDF。标准 PDF 密码可通过 `password` 传入;自定义加密文件应继续 + /// 使用 `init(pageProvider:...)`,由宿主解密后提供页面图片。 + public convenience init( + pdfURL: URL, + bookIdentifier: String? = nil, + title: String? = nil, + password: String? = nil, + persistence: RDPDFReaderPersistence? = nil, + annotationPersistence: RDPDFReaderAnnotationPersisting? = nil, + configuration: Configuration = .init() + ) throws { + let provider = try RDPDFKitPageProvider( + pdfURL: pdfURL, + bookIdentifier: bookIdentifier, + title: title, + password: password, + cachesTextRunsOnDisk: configuration.cachesNativeTextResultsOnDisk, + textRunDiskCacheVersion: configuration.nativeTextDiskCacheVersion + ) + self.init( + pageProvider: provider, + persistence: persistence, + annotationPersistence: annotationPersistence, + configuration: configuration + ) + } + public required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } public override func viewDidLoad() { @@ -100,6 +152,18 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS bookmarks = Set(persistence?.loadBookmarks(for: book.identifier).map(\.pageIndex) ?? []) } + public override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + cancelOutstandingOCRRequests() + // 保留仍在屏幕上的页:描述被清掉后没有任何路径会重新请求它, + // 当前页会因取不到 image 而永远无法恢复选字/划线。 + let visibleIndexes = Set(visiblePageViews().map(\.tag)) + pageDescriptors = pageDescriptors.filter { visibleIndexes.contains($0.key) } + ocrRuns = ocrRuns.filter { visibleIndexes.contains($0.key) } + (pageProvider as? RDPDFKitPageProvider)?.removeCachedImages() + visibleIndexes.sorted().forEach { startOCRIfNeeded($0) } + } + public func switchDisplayType(_ type: RDPDFReaderView.DisplayType) { preferredDisplayType = type applyDisplayTypeForCurrentInterface() @@ -170,6 +234,21 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS public func pageNum(readerView: RDPDFReaderView, pageNum: Int) { guard pageNum >= 0 else { return } + // OCR 队列是串行的。快速翻页后取消过期任务,避免停留页排在大量离开页之后。 + cancelOutstandingOCRRequests() + // 取消是全量的:双页的右页和竖滑可见邻页也被一并取消,必须重新排队, + // 否则它们在 cell 重建前一直没有文字层。当前页先入队以获得串行队列优先权。 + startOCRIfNeeded(pageNum) + visiblePageViews().map(\.tag).filter { $0 != pageNum }.sorted().forEach { startOCRIfNeeded($0) } + trimOCRCache( + around: pageNum, + radius: configuration.ocrMemoryCacheRadius ?? configuration.pageDescriptorCacheRadius + ) + trimPageDescriptorCache(around: pageNum, radius: configuration.pageDescriptorCacheRadius) + (pageProvider as? RDPDFKitPageProvider)?.trimTextRuns( + around: pageNum, + radius: configuration.pageDescriptorCacheRadius + ) title = "PDF · \(pageNum + 1) / \(book.totalPages)" topToolbar?.setTitle(title ?? book.title) topToolbar?.setBookmarkSelected(bookmarks.contains(pageNum)) @@ -177,6 +256,20 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS delegate?.pdfReaderViewController(self, didChangePage: pageNum) } + private func trimPageDescriptorCache(around pageIndex: Int, radius: Int) { + let safeRadius = max(0, radius) + let stalePages = pageDescriptors.keys.filter { abs($0 - pageIndex) > safeRadius } + for cachedPage in stalePages { + pageDescriptors.removeValue(forKey: cachedPage) + } + } + + private func trimOCRCache(around pageIndex: Int, radius: Int) { + let safeRadius = max(0, radius) + let stalePages = ocrRuns.keys.filter { abs($0 - pageIndex) > safeRadius } + stalePages.forEach { ocrRuns.removeValue(forKey: $0) } + } + private func configure(_ page: RDPDFReaderPageView, at index: Int) { let descriptor = pageDescriptors[index] page.image = descriptor.flatMap { renderedImage($0.image) } @@ -203,11 +296,13 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS } guard descriptor == nil else { startOCRIfNeeded(index); return } pageProvider.readerPage(at: index) { [weak self, weak page] descriptor in - guard let self, descriptor.index == index else { return } - self.pageDescriptors[index] = descriptor - // 宽度适配竖滑下,占位的一屏高 cell 要按真实纸张比例重新排版。 - self.readerView.invalidateWidthFitLayoutIfNeeded() - if let page { self.configure(page, at: index) } + DispatchQueue.main.async { [weak self, weak page] in + guard let self, descriptor.index == index else { return } + self.pageDescriptors[index] = descriptor + // 宽度适配竖滑下,占位的一屏高 cell 要按真实纸张比例重新排版。 + self.readerView.invalidateWidthFitLayoutIfNeeded(updatedPage: index) + if let page { self.configure(page, at: index) } + } } } @@ -220,12 +315,45 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS guard configuration.enablesOCR, pageDescriptors[index]?.textRuns == nil, ocrRuns[index] == nil, !recognizingPages.contains(index), let image = pageDescriptors[index]?.image else { return } recognizingPages.insert(index) - recognizer.recognizeTextRuns(in: image) { [weak self] runs in - guard let self else { return } - self.recognizingPages.remove(index) - self.ocrRuns[index] = runs - self.refreshVisiblePage(index) + let token = UUID() + ocrRequestTokens[index] = token + ocrDiskCache?.load(pageIndex: index) { [weak self] cachedRuns in + guard let self, self.ocrRequestTokens[index] == token else { return } + if let cachedRuns { + self.completeOCR(cachedRuns, pageIndex: index, token: token, shouldPersist: false) + return + } + self.recognizer.recognizeTextRuns(in: image) { [weak self] runs in + self?.completeOCR(runs, pageIndex: index, token: token, shouldPersist: true) + } } + // 没有磁盘缓存时直接入队,避免等待一个永远不会调用的读取回调。 + if ocrDiskCache == nil { + recognizer.recognizeTextRuns(in: image) { [weak self] runs in + self?.completeOCR(runs, pageIndex: index, token: token, shouldPersist: false) + } + } + } + + private func completeOCR( + _ runs: [RDPDFReaderTextRun], + pageIndex: Int, + token: UUID, + shouldPersist: Bool + ) { + guard ocrRequestTokens[pageIndex] == token else { return } + ocrRequestTokens.removeValue(forKey: pageIndex) + recognizingPages.remove(pageIndex) + ocrRuns[pageIndex] = runs + if shouldPersist { ocrDiskCache?.save(runs, pageIndex: pageIndex) } + // 只有仍在屏幕上的页会被重新配置;快速翻过的页面不抢占当前页 UI 更新。 + refreshVisiblePage(pageIndex) + } + + private func cancelOutstandingOCRRequests() { + recognizer.cancelAllRequests() + recognizingPages.removeAll() + ocrRequestTokens.removeAll() } private func refreshVisiblePage(_ index: Int) { @@ -233,6 +361,18 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS configure(page, at: index) } + /// 屏幕上所有内容页视图。双页模式下 `visiblePageContentViews` 返回的是 spread + /// 容器,需要拆出左右两个内容页。 + private func visiblePageViews() -> [RDPDFReaderPageView] { + readerView.visiblePageContentViews() + .flatMap { view -> [UIView] in + if let spread = view as? RDPDFReaderPageSpreadView { return spread.pageViews } + return [view] + } + .compactMap { $0 as? RDPDFReaderPageView } + .filter { $0.tag >= 0 } + } + private func annotations(for index: Int) -> [RDPDFReaderAnnotation] { do { return try annotationPersistence?.loadAnnotations().filter { $0.pageIndex == index } ?? [] } catch { delegate?.pdfReaderViewController(self, didFailAnnotationPersistence: error); return [] } @@ -248,12 +388,52 @@ public final class RDPDFReaderViewController: UIViewController, RDPDFReaderDataS } private func showNavigation() { - let outline = (pageProvider as? RDPDFReaderOutlineProviding)?.readerOutlineItems() ?? (0..