From d9b8c979d5194f2a5840f8975d3aa71c45bf3214 Mon Sep 17 00:00:00 2001
From: synaptode
Date: Sun, 2 Aug 2026 21:30:12 +0700
Subject: [PATCH 1/3] ios13 minimum and sf symbols
---
CHANGELOG.md | 13 +-
Package.swift | 2 +-
PhantomSwift.podspec | 4 +-
PhantomSwift.xcodeproj/project.pbxproj | 1681 +++++++++++++++++
README.md | 16 +-
.../PhantomSwift/HUD/PhantomDashboardVC.swift | 4 +-
.../HUD/PhantomFeatureCatalog.swift | 2 +-
.../Interceptor/UI/InterceptorListVC.swift | 2 +-
.../Modules/Logger/LogEntry.swift | 2 +-
.../Modules/Logger/LogLevel.swift | 28 +-
.../Modules/Logger/UI/LogConsoleVC.swift | 58 +-
.../Modules/Network/UI/NetworkListVC.swift | 2 +-
.../Modules/Performance/UI/CrashLogVC.swift | 2 +-
.../UI/PerformanceDashboardVC.swift | 2 -
.../Modules/QA/Core/PhantomBugReporter.swift | 2 +-
.../QA/Core/PhantomPushSimulator.swift | 1 -
.../Modules/QA/UI/AppShortcutsVC.swift | 2 +-
.../RuntimeBrowser/UI/ClassDetailVC.swift | 2 +-
.../RuntimeBrowser/UI/RuntimeBrowserVC.swift | 2 +-
.../UIInspector/UI/LayoutConflictVC.swift | 2 +-
.../Components/PhantomEmptyStateView.swift | 15 +-
index.html | 14 +-
22 files changed, 1785 insertions(+), 73 deletions(-)
create mode 100644 PhantomSwift.xcodeproj/project.pbxproj
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1565d1c..ad3b8fb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,17 @@ All notable changes to PhantomSwift will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [1.2.0] - 2026-08-02
+
+### Changed
+- â ī¸ **Minimum Runtime Raised**: PhantomSwift now requires iOS 13.0 or newer, which allows the package to use SF Symbols directly across the UI and removes the legacy emoji fallback path
+- đ¨ **Icon System Cleanup**: Replaced remaining emoji-based UI icons with SF Symbol equivalents in the empty-state and logger surfaces
+
+### Technical Notes
+- **SemVer rationale**: Released as a minor version because the minimum supported platform changed, which is a breaking compatibility boundary for existing consumers
+- **Release focus**: iOS 13 baseline, native iconography, and release metadata consistency
+- **Recommended upgrade**: Consumers on `1.1.x` should move to `1.2.0` only if their app supports iOS 13 or newer
+
## [1.1.2] - 2026-07-05
### Added
@@ -107,7 +118,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- đ§ **.gitignore**: Expanded from 43 to 120 lines with organized sections for Xcode, SPM, CocoaPods, Carthage, Fastlane, coverage tools, and IDEs
### Technical Details
-- **Target**: iOS 12.0+ with #available guards for iOS 13+ APIs
+- **Target**: iOS 13.0+ with `#available` guards for iOS 13+ APIs
- **Dependencies**: Zero external dependencies (Apple frameworks only)
- **Language**: Swift 5.0+ / Swift 5.9+ recommended
- **Architecture**: UIKit-first, programmatic UI layout (no storyboards/XIBs)
diff --git a/Package.swift b/Package.swift
index 5645cf1..b457145 100644
--- a/Package.swift
+++ b/Package.swift
@@ -4,7 +4,7 @@ import PackageDescription
let package = Package(
name: "PhantomSwift",
platforms: [
- .iOS(.v12)
+ .iOS(.v13)
],
products: [
.library(
diff --git a/PhantomSwift.podspec b/PhantomSwift.podspec
index 6f20c60..2074e42 100644
--- a/PhantomSwift.podspec
+++ b/PhantomSwift.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'PhantomSwift'
- s.version = '1.1.2'
+ s.version = '1.2.0'
s.summary = 'Zero-dependency iOS debugging toolkit with 25 modules: network inspector, memory leak tracker, UI hierarchy, and more.'
s.description = <<-DESC
PhantomSwift is an open-source, zero-dependency iOS debugging library for Swift developers.
@@ -16,7 +16,7 @@ An alternative to FLEX, Netfox, and Pulse with no external dependencies required
s.author = { 'MRLF' => 'mrlf.synaptode@gmail.com' }
s.source = { :git => 'https://github.com/synaptode/PhantomSwift.git', :tag => "v#{s.version}" }
- s.ios.deployment_target = '12.0'
+ s.ios.deployment_target = '13.0'
s.swift_version = '5.9'
s.source_files = 'Sources/PhantomSwift/**/*'
diff --git a/PhantomSwift.xcodeproj/project.pbxproj b/PhantomSwift.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..bbf37bb
--- /dev/null
+++ b/PhantomSwift.xcodeproj/project.pbxproj
@@ -0,0 +1,1681 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00055ADA950978B69BB8EECE /* PhantomBadgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AF0237EBFE164DE6D88BCB /* PhantomBadgeView.swift */; };
+ 022BAFC3AD72BD3678A56412 /* BGTaskInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB998B360ABC6D55A96C046 /* BGTaskInspectorVC.swift */; };
+ 080F95604868D9EE1150DAA6 /* PhantomEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = B45673C9D749116330D85F0F /* PhantomEnvironment.swift */; };
+ 0B3ED71CD31E2041050D3619 /* PhantomAccessibilityAuditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB272FB22B1D8C308FFD71CA /* PhantomAccessibilityAuditor.swift */; };
+ 0C4F7FF001B446490B9AFD6C /* PhantomRuleMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7406251BC1DC5AB2EE2C187 /* PhantomRuleMatcher.swift */; };
+ 0CA8A41CD9D5049D1DFF7DE3 /* HangListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF512A1E29E60744E97F58D0 /* HangListVC.swift */; };
+ 12DA08CB2D72B8AEB0E701A7 /* CrashLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 170811D6DCE7215CAFBF6374 /* CrashLogVC.swift */; };
+ 1501766C99737638BAE33CDE /* MemoryGraphVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C03F3E00029BFC4A957DF5BA /* MemoryGraphVC.swift */; };
+ 1B3494202BB4BB11960A4FFC /* NetworkListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3DED2E0625FAFAE00FD4644 /* NetworkListVC.swift */; };
+ 1BF10A46CFBF59D39AE9DCD2 /* RenderListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE34E9772E4903AC8F74F9D3 /* RenderListVC.swift */; };
+ 1D10F8D56AEEE283B42C2606 /* PhantomFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = D465F76FA9AC8E64FFA4355B /* PhantomFeature.swift */; };
+ 21A27756608462CF07298E24 /* ExtensionLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0F927B455732C5F2B82C3A1 /* ExtensionLogVC.swift */; };
+ 236887AF009F53E7AA2D69F5 /* RequestReplayVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 730B9B09BF5898756A09F4A2 /* RequestReplayVC.swift */; };
+ 23B41ADFDC826478601FC5D0 /* PhantomTableVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000D79F8F86FC9611F4860D5 /* PhantomTableVC.swift */; };
+ 24DFF2B7E0840B93833D3A3D /* SecurityKeychainVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA082BF00FBC4004DAE338F /* SecurityKeychainVC.swift */; };
+ 25090D1ADC876840B68D46BB /* PhantomNetworkHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A10C3B186CFFB95E684F581 /* PhantomNetworkHeaderView.swift */; };
+ 266A534CCF9BC662546BCB8D /* PhantomMetricKitMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F935DE1EDE9D98BFF52EC801 /* PhantomMetricKitMonitor.swift */; };
+ 26A204471F37F1338F98285A /* PhantomLeakTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BB61DB22BCF55BDF4FD51C7 /* PhantomLeakTracker.swift */; };
+ 2707FDF23E3AAADF14C5775D /* PhantomLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA2B329018F0E8AED337FDC /* PhantomLocationManager.swift */; };
+ 29782A713FEF3BDB215DA193 /* LeakListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D94F1B1BC53566719A23845 /* LeakListVC.swift */; };
+ 2C1B93C3EF2688927EC04730 /* PhantomBugReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0EC902A33B5A23A49C5194 /* PhantomBugReporter.swift */; };
+ 2D583A33B782AF168E2BA5C5 /* PhantomSnapshotManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A62334119EB2BF45EC64DB0 /* PhantomSnapshotManager.swift */; };
+ 2E3AEA41C2656AE8A8A242EE /* PhantomUIKitTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D056FFE6E3B07C8F2100154 /* PhantomUIKitTracker.swift */; };
+ 2F42FEE8921D0158FA77D11D /* SnapshotListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7078D12327520BB2E2521A6 /* SnapshotListVC.swift */; };
+ 319023CF7CFF422590F7D17A /* AccessibilityAuditVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225CE97926C23CF35B0A97E1 /* AccessibilityAuditVC.swift */; };
+ 3299DD9D173646C3F9AFEEC7 /* UIExtensions+Phantom.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85C78D90D077E98B7656A7A /* UIExtensions+Phantom.swift */; };
+ 35DB28718B85F22329273EF7 /* PhantomPresentationResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 734B2DAF479223798F3F0A1D /* PhantomPresentationResolver.swift */; };
+ 377ECA57D735784377955C19 /* PhantomMemorySlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F490623CA0268DAA5DD7140 /* PhantomMemorySlayer.swift */; };
+ 3786AA85B3EC1B9261134457 /* PhantomLayoutConflictDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EA78CCCD2ABAFC2A2ACDFB8 /* PhantomLayoutConflictDetector.swift */; };
+ 3BE275A2AE2473104DB862B1 /* SecurityDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D27D46097C5745C79D6 /* SecurityDashboardVC.swift */; };
+ 3D51A35AA449949496E4A93F /* BadNetworkDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF2438BAA40CEFF162C8D6B /* BadNetworkDashboardVC.swift */; };
+ 3D7175AEB10EBB7D90D0A470 /* AssetListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6BFD5E09ECBCB077920390 /* AssetListVC.swift */; };
+ 3DF88B18A0D2405FFA9A1BC0 /* PhantomWebViewConsoleAutoInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEFF3EFBCE5D480363E2B20 /* PhantomWebViewConsoleAutoInstaller.swift */; };
+ 40D6FE4A4B3A1C470CF68090 /* PhantomSwiftExports.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FEECBC14A8CBC45E7A9E6F5 /* PhantomSwiftExports.swift */; };
+ 420736E551C6930C0765C9CD /* ViewHierarchy3DVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12136C1830CB8C303BA0A5D /* ViewHierarchy3DVC.swift */; };
+ 431A9ADAD625BAD4BBAA5528 /* PhantomAnalyticsMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C721FF8E5B7290B6EF38FA85 /* PhantomAnalyticsMonitor.swift */; };
+ 47802DC82757B9926A01AE32 /* PhantomHUDWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C8308F198CBEF9CAFB9A24 /* PhantomHUDWindow.swift */; };
+ 4C12651B8500B77D2C90328C /* PushSimulatorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7D681ED2700766870C52B7 /* PushSimulatorVC.swift */; };
+ 4F8FC452EC6032B69276A652 /* PhantomSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757AC796D4CB5FC559F6A5AF /* PhantomSwizzler.swift */; };
+ 53ADB07BB163E1C25F87A9BC /* PhantomWebViewConsoleBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2C7C5C310C97A4A9FD58A73 /* PhantomWebViewConsoleBridge.swift */; };
+ 53D17202D07C305716205AF2 /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = 8A1BFA093F1BBC4DB12CDD44 /* Documentation.docc */; };
+ 5442C81C51C92806A751B68A /* ClassDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92721BA6DD16EF8F1DAFC9 /* ClassDetailVC.swift */; };
+ 5592441869BDF902B415F2CF /* PhantomDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BE2BD98A4AFF5565CD83B6D /* PhantomDashboardVC.swift */; };
+ 56AA2CCFE6B91C01DFB3249D /* UserDefaultsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995D4C5DF02AB9BA6B0F0B80 /* UserDefaultsVC.swift */; };
+ 5FD28BA933D718815530677D /* KeychainInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF74934A3D0A47FF4D038F7A /* KeychainInspectorVC.swift */; };
+ 60B49AFD80B8B7E81A4499AD /* PhantomCURLExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FB036DF5F7F9E27258468B /* PhantomCURLExporter.swift */; };
+ 62C548959397C6142827721B /* PhantomDashboardSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03042793610B4AE8C3B84BBC /* PhantomDashboardSearch.swift */; };
+ 6518BCB403D8D515607D4CF6 /* PhantomHangDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B2E6F906ED8891BE92E2902 /* PhantomHangDetector.swift */; };
+ 6817AF6222AFDD9E8D614000 /* PhantomRuntimeInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04EEFFAA826DD75B17F4A2EA /* PhantomRuntimeInspector.swift */; };
+ 6B3ED8EC5FC591D2B16B0A9B /* PhantomTouchVisualizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAAFE8B54EA0016F03BCECF8 /* PhantomTouchVisualizer.swift */; };
+ 6D47C15896B6EC09FD567192 /* AppShortcutsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EC59D9DE6BFDE9017A20E45 /* AppShortcutsVC.swift */; };
+ 6E0BF30FE8A6BB246DA49333 /* PhantomLocaleManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4327717669535414FE001B29 /* PhantomLocaleManager.swift */; };
+ 700516C465199B0DB4E0F2BA /* PhantomAssetInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A77DE8DF2406CB8F6C3304 /* PhantomAssetInspector.swift */; };
+ 71BA814AB0B048B49FE0D76F /* PhantomUIInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4447A7822F63CEA644EFB6D /* PhantomUIInspector.swift */; };
+ 7214B5039AE109997511F3AD /* HeapSnapshotVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE95B82D013C548DA8AFCEAA /* HeapSnapshotVC.swift */; };
+ 7386C3F84DAAC5B726127CED /* UIViewController+Phantom.swift in Sources */ = {isa = PBXBuildFile; fileRef = F91EF16F0520D4809FFCDFD8 /* UIViewController+Phantom.swift */; };
+ 73BF3325F26F6432DB2D6B7D /* UIInspectorActionCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BF6FDBE4352F3628C38C6E /* UIInspectorActionCard.swift */; };
+ 793F92BD9AB756794636C268 /* PhantomLaunchPlanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D9D0C9BF0571D39C654EA35 /* PhantomLaunchPlanner.swift */; };
+ 7B65236F93E192F05AB1D001 /* LiveEditVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A94CE6D9DCE4585DAB8A5EE0 /* LiveEditVC.swift */; };
+ 7CC9BF15DF17298D1CA6BBC6 /* PhantomFeatureCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96089D5230B24C3A607A1DBB /* PhantomFeatureCatalog.swift */; };
+ 7DCF4E45C44DD23619B7F004 /* ConstraintInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C1BDB40B4BAB19E96428484 /* ConstraintInspectorVC.swift */; };
+ 7FF431958640AD9C64378366 /* SandboxInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 709CB5BE880223B5DCFEDDAD /* SandboxInspectorVC.swift */; };
+ 8305EC1ABA1703FE56BC187B /* PhantomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403B3DC793A1ACC4441B228F /* PhantomTimelineView.swift */; };
+ 843CB7A324B8F335BABE9B8C /* ColorPickerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47ACFC82CA9285AE81547BFF /* ColorPickerVC.swift */; };
+ 862AF437D25661DAF7584BE2 /* HangDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FCB5824CDFA90E49D78501 /* HangDetailVC.swift */; };
+ 86322B26C4B7102E48E5F348 /* PhantomMainThreadChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E04FA9BF2E1EADA753318FC /* PhantomMainThreadChecker.swift */; };
+ 878398BA2193E6D5520ABDE7 /* InterceptRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB9CAB064CB3D8C409958567 /* InterceptRule.swift */; };
+ 884E4E25B432E21E336E298C /* PhantomInterceptorDraft.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC125611DE7DB2D62B1F5E0D /* PhantomInterceptorDraft.swift */; };
+ 8A8DEFE6AEED1594753071E4 /* PhantomGridOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27C8856770EB86F1082A3A37 /* PhantomGridOverlay.swift */; };
+ 8A9A7281DF42741C90203835 /* LogEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62A1EB9E97905A624A7013F4 /* LogEntry.swift */; };
+ 8BCFE57494999806FEE48203 /* LogStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDDD5B68FFB2E6E3093202CD /* LogStore.swift */; };
+ 8EA4C9E344F9908A70F5061F /* PhantomEventBus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72FF46155BCF61FF5172B670 /* PhantomEventBus.swift */; };
+ 926CA15AF68B49FC3EB2E31F /* ResponderChainVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADECC18277C3E3925C8A8D4 /* ResponderChainVC.swift */; };
+ 926EACD4E754DC981307B1DA /* EnvironmentDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B26E2ACAB90E4313B2CD79 /* EnvironmentDashboardVC.swift */; };
+ 943A3815BA101FD3D4372490 /* RuntimeBrowserVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4892E780AF1DE7E41191CB2D /* RuntimeBrowserVC.swift */; };
+ 97294065B0468D9B5E30D150 /* ObjectRetainGraphVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B44F7DABADB44D0DBDA70 /* ObjectRetainGraphVC.swift */; };
+ 9AB8C839282FFAC97D5D1FC8 /* PhantomNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14EC047D71150408DD88947B /* PhantomNetworkModel.swift */; };
+ 9BEAB3A388758E98FE08E37A /* PhantomFeatureFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DB009D91B108A8376EB6177 /* PhantomFeatureFlags.swift */; };
+ 9D45A28A795748D767F95151 /* PhantomPluginRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DC326D7FF1F41E2FE045DFC /* PhantomPluginRegistry.swift */; };
+ 9E4C0226699DB0FCF7A10854 /* PhantomPushSimulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 032F6575A78D384E69AE1221 /* PhantomPushSimulator.swift */; };
+ 9F43D07ECE3F3F16098A5E8A /* NetworkWaterfallVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B8D5F58EC8A8BBE9E376D02 /* NetworkWaterfallVC.swift */; };
+ A0BE33DAF57DEAFCFC642249 /* GestureInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3220D2AB57A33C6FF8A86E57 /* GestureInspectorVC.swift */; };
+ A1E7AD59ABC70A22B48AF8B9 /* UIFont+Phantom.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9472CA8E283781549A25480 /* UIFont+Phantom.swift */; };
+ A42FB6D793BFE6B2066E3955 /* PhantomHARExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 361132A9C0D6CF00C464CA2C /* PhantomHARExporter.swift */; };
+ A58BF82843A39988A3741A46 /* UIImage+Phantom.swift in Sources */ = {isa = PBXBuildFile; fileRef = E85B9D4E1EDFCDA0561D4C6C /* UIImage+Phantom.swift */; };
+ A592EDD9D77446102C940785 /* PhantomEnvironmentMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B6734178FDCC4F738750B09 /* PhantomEnvironmentMonitor.swift */; };
+ A983CE9126FE12063E5D8E82 /* PerformanceMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C24794AE6628FAE5E548A375 /* PerformanceMonitor.swift */; };
+ AC6827417752017A976273B9 /* PhantomTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 974D9296ADF2283856BD9F9B /* PhantomTheme.swift */; };
+ ACD4EF26A61AB3840ABEED08 /* PhantomSwiftNetworking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 40C425AF2D95876BAF803761 /* PhantomSwiftNetworking.framework */; };
+ ADC540B76F1F2C8710DD7320 /* PhantomRenderStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DCD92C3D26809F0DC1FBED8 /* PhantomRenderStore.swift */; };
+ B029C7BE40F2F7A1EECF21AA /* CoreDataInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D87B35451446AFB8E3E78F /* CoreDataInspectorVC.swift */; };
+ B0F0F1326A3359478156B9FB /* MainThreadCheckerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4185F809625A25DDB471063E /* MainThreadCheckerVC.swift */; };
+ B19D3957FE765E16A4D5FAF0 /* PhantomNetworkSimulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BB2C8B8E02A0E940376AD8 /* PhantomNetworkSimulator.swift */; };
+ B28D0E07E37478812D305C8E /* PhantomSessionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45652B97CB40FA373C28769 /* PhantomSessionRecorder.swift */; };
+ B332DD6D0BC43DA5CDEF261E /* EnvironmentOverrideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD9A30F9D0C73391E0B1B08 /* EnvironmentOverrideVC.swift */; };
+ B4B5CE02E8F2909BB5C5A36F /* MemoryDiffVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48F28B4EE3A360EA4078671 /* MemoryDiffVC.swift */; };
+ B72569A5DD5D1EA544AB6C58 /* InterceptorListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5013898CB3EB208D678E48CE /* InterceptorListVC.swift */; };
+ B9AC9900ABA1326A696D15AE /* PhantomRequestStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61018E2D1F3C386074FB4C9E /* PhantomRequestStore.swift */; };
+ BD61B098490AE1E8B5486485 /* PhantomCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3E341848285B83B5F11BBD /* PhantomCodeView.swift */; };
+ BEAC0A36EDF293A34A1CB31A /* PhantomFPSMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC5A2C48D32F6C1BBD26CBA /* PhantomFPSMonitor.swift */; };
+ BF5FFD02D4A9C2DB2F03F423 /* PhantomDynamicIsland.swift in Sources */ = {isa = PBXBuildFile; fileRef = 333AC74F3B1E97D8E489CECD /* PhantomDynamicIsland.swift */; };
+ C381F8191B06898E9E0B5EAF /* StorageDashboardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 657C95A634A8A0FE9FE9AC68 /* StorageDashboardCell.swift */; };
+ C4136C5817D589D59FBFFC3D /* MacroRecorderVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4448C8E044E83C92D002C8B0 /* MacroRecorderVC.swift */; };
+ C50C77394D31FB63DECBD84E /* PhantomURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F399AFEF13530D9495EC58 /* PhantomURLProtocol.swift */; };
+ CA5C17FDF7BD6DC7E3A585B4 /* PhantomMeasurementTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD830D9018E1B28247010169 /* PhantomMeasurementTool.swift */; };
+ CBCDC19EF8D170BBA51BED04 /* UserDefaultsInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B1C7FB01BAFE92DF7CDABD6 /* UserDefaultsInspectorVC.swift */; };
+ CBF4817A5E85010AB65204A6 /* PerformanceDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABF249DE8CA43F66FCFBCE66 /* PerformanceDashboardVC.swift */; };
+ CC07CFB46CA9008DA1B245B7 /* PhantomRemoteServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8AB6866E42B7042123F6C79 /* PhantomRemoteServer.swift */; };
+ CC5B018BAB6F7873C9D0C77B /* SnapshotCompareVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E11EB4054F5335893AF7AE8 /* SnapshotCompareVC.swift */; };
+ CCD5723E0466EE96211A8228 /* LayoutConflictVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB34024EB243EB7EA5E8F23 /* LayoutConflictVC.swift */; };
+ CD2F2374903FD9C958DEB2A3 /* LogConsoleVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010FD1C81C958CEE78B51289 /* LogConsoleVC.swift */; };
+ CD36FD996C40DB483FF0436B /* FeatureFlagsDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144521B36FB328076D6AA881 /* FeatureFlagsDashboardVC.swift */; };
+ CD4808E87A5ED64015C724E2 /* PhantomSecurityInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D8D72D386D5AAEFEB90A1C4 /* PhantomSecurityInspector.swift */; };
+ D0C08391B41387CB0E7A310D /* PhantomInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 063512E737868C9CCFE9563D /* PhantomInterceptor.swift */; };
+ D5072C09381B4AD609CC1B77 /* LogLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88ACC0450235B7EF37FD97AC /* LogLevel.swift */; };
+ D61E4DD5FD7B95319AA7A6D9 /* UIViewController+PhantomAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE3BE396859DBFC8B2981DF /* UIViewController+PhantomAppearance.swift */; };
+ DABDC788B631621151A9E678 /* PhantomBGTaskInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BEA77324F73536FA95A66A /* PhantomBGTaskInspector.swift */; };
+ DC0532AE05FB571F59AAFF98 /* PhantomPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7F39F43962FAECF1614E246 /* PhantomPlugin.swift */; };
+ DC941C3FB9B186A16C1CB7FB /* PhantomRenderTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D1E243E3A2C84C6D502D87 /* PhantomRenderTracker.swift */; };
+ DE63541A99DDC7040A02075B /* PhantomObjectTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E50A00F61CAF00ECA65567 /* PhantomObjectTracker.swift */; };
+ DFE7CCB0727AF11E0051D621 /* AccessibilityDashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5601C61199E306C276A8607E /* AccessibilityDashboardVC.swift */; };
+ E069DB9E0A4CE06075A56ABD /* ViewDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 276D88EF9920B97868D67AA4 /* ViewDetailVC.swift */; };
+ E157F8475390C8FBAB82B09C /* Data+Phantom.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEAA9C475F2F27E0B067665D /* Data+Phantom.swift */; };
+ E1DF993188EFF6515DC7A097 /* GridOverlayVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8813DF3490D7AE0A80A2734A /* GridOverlayVC.swift */; };
+ E50148DCD494AA4B2D86CD7B /* InterceptorCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCB7309301BC21FF8B207F4C /* InterceptorCardCell.swift */; };
+ E51ADAD9A8F6714F29CC1E39 /* PhantomSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = A099768B32038A281FD80A9D /* PhantomSwift.swift */; };
+ E61BFAE425F45A64880F1995 /* AnalyticsListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C8C062343DE0E550C255409 /* AnalyticsListVC.swift */; };
+ E6521C0730B700F5DB6A8667 /* PhantomGestureHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F69BE976CFE47E9B3F2ECE1 /* PhantomGestureHandler.swift */; };
+ E6AC11CFD2EA6398205E7F62 /* PhantomCrashLogStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EA4CB78EE623924E02ADD72 /* PhantomCrashLogStore.swift */; };
+ E921AE3240C12A55032A66D6 /* AnimationInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D290358C697DE8615538028 /* AnimationInspectorVC.swift */; };
+ E9A4B7BACF326A1395280D11 /* PhantomMockEditorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D42B97164577C1972DED07C9 /* PhantomMockEditorVC.swift */; };
+ EC272C51AB023D734E0A9291 /* DeepLinkTesterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7CF6237ECAD2DE902F597A8 /* DeepLinkTesterVC.swift */; };
+ EC39E3FA9F711720217230D8 /* PhantomExtensionBus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE43F738AC7B802D75B4A1E /* PhantomExtensionBus.swift */; };
+ ECB7786BA7F986A2746F6F02 /* StorageListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC64C94304ED029916BF0BCB /* StorageListVC.swift */; };
+ ECE27A278EA7DB00CA87E2DE /* PhantomEmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1C9E459F52274E6A6363B5D /* PhantomEmptyStateView.swift */; };
+ ED94470506F6FE218FF76360 /* AssetGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2063276C73386EE308D8CFCF /* AssetGridCell.swift */; };
+ F01E45BE8A62CC44656333CD /* PhantomNetworkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B68997D6C90F68C03F2164 /* PhantomNetworkCell.swift */; };
+ F1A4404D3DEC9428A1B5BDE9 /* PhantomHeapSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1210F82D33FC8186C03FCE12 /* PhantomHeapSnapshot.swift */; };
+ F1E2A84AAE6AE898D5401F20 /* ViewHierarchyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28F5C2B38FBD3356DD5E4A32 /* ViewHierarchyVC.swift */; };
+ F25F0603D32EAE5EA88E1BAC /* UIColor+Phantom.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8A70CC73E1E05DF153E5F4 /* UIColor+Phantom.swift */; };
+ F587A91BDE3AD035B8C06C36 /* HitTestInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A971038DFE7595932A3D4EB /* HitTestInspectorVC.swift */; };
+ F8050874741260BAF4E6B3B0 /* SQLiteInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFF4FE1DBF546F4ECE204E6 /* SQLiteInspectorVC.swift */; };
+ F9E5042CA4DAA4AC216E9209 /* DevToolsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E8012451E884A5550AE1546 /* DevToolsVC.swift */; };
+ FAEA8E08B1459F07109554C9 /* PhantomLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12AAD4AEFF7E0EB598CB73D8 /* PhantomLog.swift */; };
+ FC914AF1DAC1883280EBFC85 /* PhantomOSLogBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30401E79075006332C172C8 /* PhantomOSLogBridge.swift */; };
+ FE37B9B7F8A02EDD234BF201 /* PhantomConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4151EBDD651D07A33C6FEFDC /* PhantomConfig.swift */; };
+ FF7BF61AB7C8606E8EC3D31D /* LayerInspectorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A00245CA56BA594E8345475A /* LayerInspectorVC.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ C6E1F736AB4255608011E745 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 044D9295FB2A012F7C9CEB06 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 02095BFF427C6D7D1D5EE05F;
+ remoteInfo = PhantomSwiftNetworking;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 2987EC469065ACE83A4E5BEB /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 98659DDFBC135891087687F9 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9A3879AEF73F734DA420C7F7 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ ACD4EF26A61AB3840ABEED08 /* PhantomSwiftNetworking.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 000D79F8F86FC9611F4860D5 /* PhantomTableVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomTableVC.swift; sourceTree = ""; };
+ 010FD1C81C958CEE78B51289 /* LogConsoleVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogConsoleVC.swift; sourceTree = ""; };
+ 03042793610B4AE8C3B84BBC /* PhantomDashboardSearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomDashboardSearch.swift; sourceTree = ""; };
+ 032F6575A78D384E69AE1221 /* PhantomPushSimulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomPushSimulator.swift; sourceTree = ""; };
+ 04EEFFAA826DD75B17F4A2EA /* PhantomRuntimeInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomRuntimeInspector.swift; sourceTree = ""; };
+ 063512E737868C9CCFE9563D /* PhantomInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomInterceptor.swift; sourceTree = ""; };
+ 0A62334119EB2BF45EC64DB0 /* PhantomSnapshotManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomSnapshotManager.swift; sourceTree = ""; };
+ 0AD9A30F9D0C73391E0B1B08 /* EnvironmentOverrideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentOverrideVC.swift; sourceTree = ""; };
+ 0D94F1B1BC53566719A23845 /* LeakListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeakListVC.swift; sourceTree = ""; };
+ 0E92721BA6DD16EF8F1DAFC9 /* ClassDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClassDetailVC.swift; sourceTree = ""; };
+ 0EFF4FE1DBF546F4ECE204E6 /* SQLiteInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SQLiteInspectorVC.swift; sourceTree = ""; };
+ 1210F82D33FC8186C03FCE12 /* PhantomHeapSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomHeapSnapshot.swift; sourceTree = ""; };
+ 12AAD4AEFF7E0EB598CB73D8 /* PhantomLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomLog.swift; sourceTree = ""; };
+ 144521B36FB328076D6AA881 /* FeatureFlagsDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlagsDashboardVC.swift; sourceTree = ""; };
+ 14EC047D71150408DD88947B /* PhantomNetworkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomNetworkModel.swift; sourceTree = ""; };
+ 170811D6DCE7215CAFBF6374 /* CrashLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashLogVC.swift; sourceTree = ""; };
+ 171E4D4E6D36859650346DBD /* PhantomSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PhantomSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1B1C7FB01BAFE92DF7CDABD6 /* UserDefaultsInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsInspectorVC.swift; sourceTree = ""; };
+ 1C5F8031AB4F686EBBB09256 /* PhantomSwiftNetworking-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "PhantomSwiftNetworking-Info.plist"; sourceTree = ""; };
+ 1C8C062343DE0E550C255409 /* AnalyticsListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsListVC.swift; sourceTree = ""; };
+ 1E7D681ED2700766870C52B7 /* PushSimulatorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushSimulatorVC.swift; sourceTree = ""; };
+ 1EA4CB78EE623924E02ADD72 /* PhantomCrashLogStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomCrashLogStore.swift; sourceTree = ""; };
+ 1F490623CA0268DAA5DD7140 /* PhantomMemorySlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomMemorySlayer.swift; sourceTree = ""; };
+ 1FE43F738AC7B802D75B4A1E /* PhantomExtensionBus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomExtensionBus.swift; sourceTree = ""; };
+ 1FF2438BAA40CEFF162C8D6B /* BadNetworkDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadNetworkDashboardVC.swift; sourceTree = ""; };
+ 2063276C73386EE308D8CFCF /* AssetGridCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetGridCell.swift; sourceTree = ""; };
+ 21B68997D6C90F68C03F2164 /* PhantomNetworkCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomNetworkCell.swift; sourceTree = ""; };
+ 225CE97926C23CF35B0A97E1 /* AccessibilityAuditVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityAuditVC.swift; sourceTree = ""; };
+ 24BEA77324F73536FA95A66A /* PhantomBGTaskInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomBGTaskInspector.swift; sourceTree = ""; };
+ 25C8308F198CBEF9CAFB9A24 /* PhantomHUDWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomHUDWindow.swift; sourceTree = ""; };
+ 276D88EF9920B97868D67AA4 /* ViewDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDetailVC.swift; sourceTree = ""; };
+ 27C8856770EB86F1082A3A37 /* PhantomGridOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomGridOverlay.swift; sourceTree = ""; };
+ 28F5C2B38FBD3356DD5E4A32 /* ViewHierarchyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewHierarchyVC.swift; sourceTree = ""; };
+ 29B26E2ACAB90E4313B2CD79 /* EnvironmentDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentDashboardVC.swift; sourceTree = ""; };
+ 2C1BDB40B4BAB19E96428484 /* ConstraintInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstraintInspectorVC.swift; sourceTree = ""; };
+ 2D056FFE6E3B07C8F2100154 /* PhantomUIKitTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomUIKitTracker.swift; sourceTree = ""; };
+ 2E04FA9BF2E1EADA753318FC /* PhantomMainThreadChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomMainThreadChecker.swift; sourceTree = ""; };
+ 3220D2AB57A33C6FF8A86E57 /* GestureInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GestureInspectorVC.swift; sourceTree = ""; };
+ 333AC74F3B1E97D8E489CECD /* PhantomDynamicIsland.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomDynamicIsland.swift; sourceTree = ""; };
+ 361132A9C0D6CF00C464CA2C /* PhantomHARExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomHARExporter.swift; sourceTree = ""; };
+ 3DCD92C3D26809F0DC1FBED8 /* PhantomRenderStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomRenderStore.swift; sourceTree = ""; };
+ 403B3DC793A1ACC4441B228F /* PhantomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomTimelineView.swift; sourceTree = ""; };
+ 40C425AF2D95876BAF803761 /* PhantomSwiftNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PhantomSwiftNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4151EBDD651D07A33C6FEFDC /* PhantomConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomConfig.swift; sourceTree = ""; };
+ 4185F809625A25DDB471063E /* MainThreadCheckerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainThreadCheckerVC.swift; sourceTree = ""; };
+ 4327717669535414FE001B29 /* PhantomLocaleManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomLocaleManager.swift; sourceTree = ""; };
+ 4448C8E044E83C92D002C8B0 /* MacroRecorderVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroRecorderVC.swift; sourceTree = ""; };
+ 47ACFC82CA9285AE81547BFF /* ColorPickerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorPickerVC.swift; sourceTree = ""; };
+ 4892E780AF1DE7E41191CB2D /* RuntimeBrowserVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeBrowserVC.swift; sourceTree = ""; };
+ 4DA082BF00FBC4004DAE338F /* SecurityKeychainVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityKeychainVC.swift; sourceTree = ""; };
+ 4EC59D9DE6BFDE9017A20E45 /* AppShortcutsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppShortcutsVC.swift; sourceTree = ""; };
+ 4F4E0D27D46097C5745C79D6 /* SecurityDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityDashboardVC.swift; sourceTree = ""; };
+ 4FEECBC14A8CBC45E7A9E6F5 /* PhantomSwiftExports.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomSwiftExports.swift; sourceTree = ""; };
+ 5013898CB3EB208D678E48CE /* InterceptorListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterceptorListVC.swift; sourceTree = ""; };
+ 5601C61199E306C276A8607E /* AccessibilityDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityDashboardVC.swift; sourceTree = ""; };
+ 59AF0237EBFE164DE6D88BCB /* PhantomBadgeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomBadgeView.swift; sourceTree = ""; };
+ 5BB998B360ABC6D55A96C046 /* BGTaskInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGTaskInspectorVC.swift; sourceTree = ""; };
+ 5D9D0C9BF0571D39C654EA35 /* PhantomLaunchPlanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomLaunchPlanner.swift; sourceTree = ""; };
+ 5F69BE976CFE47E9B3F2ECE1 /* PhantomGestureHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomGestureHandler.swift; sourceTree = ""; };
+ 61018E2D1F3C386074FB4C9E /* PhantomRequestStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomRequestStore.swift; sourceTree = ""; };
+ 62A1EB9E97905A624A7013F4 /* LogEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogEntry.swift; sourceTree = ""; };
+ 657C95A634A8A0FE9FE9AC68 /* StorageDashboardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageDashboardCell.swift; sourceTree = ""; };
+ 6B8D5F58EC8A8BBE9E376D02 /* NetworkWaterfallVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkWaterfallVC.swift; sourceTree = ""; };
+ 6CA2B329018F0E8AED337FDC /* PhantomLocationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomLocationManager.swift; sourceTree = ""; };
+ 709CB5BE880223B5DCFEDDAD /* SandboxInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SandboxInspectorVC.swift; sourceTree = ""; };
+ 72FF46155BCF61FF5172B670 /* PhantomEventBus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomEventBus.swift; sourceTree = ""; };
+ 730B9B09BF5898756A09F4A2 /* RequestReplayVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestReplayVC.swift; sourceTree = ""; };
+ 734B2DAF479223798F3F0A1D /* PhantomPresentationResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomPresentationResolver.swift; sourceTree = ""; };
+ 74C93DD1C29E5CC5F10672B0 /* PhantomSwift-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "PhantomSwift-Info.plist"; sourceTree = ""; };
+ 757AC796D4CB5FC559F6A5AF /* PhantomSwizzler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomSwizzler.swift; sourceTree = ""; };
+ 79D1E243E3A2C84C6D502D87 /* PhantomRenderTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomRenderTracker.swift; sourceTree = ""; };
+ 7B2E6F906ED8891BE92E2902 /* PhantomHangDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomHangDetector.swift; sourceTree = ""; };
+ 7BB61DB22BCF55BDF4FD51C7 /* PhantomLeakTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomLeakTracker.swift; sourceTree = ""; };
+ 7D0EC902A33B5A23A49C5194 /* PhantomBugReporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomBugReporter.swift; sourceTree = ""; };
+ 7E8012451E884A5550AE1546 /* DevToolsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DevToolsVC.swift; sourceTree = ""; };
+ 7EA78CCCD2ABAFC2A2ACDFB8 /* PhantomLayoutConflictDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomLayoutConflictDetector.swift; sourceTree = ""; };
+ 80BB2C8B8E02A0E940376AD8 /* PhantomNetworkSimulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomNetworkSimulator.swift; sourceTree = ""; };
+ 8813DF3490D7AE0A80A2734A /* GridOverlayVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridOverlayVC.swift; sourceTree = ""; };
+ 88ACC0450235B7EF37FD97AC /* LogLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogLevel.swift; sourceTree = ""; };
+ 88E50A00F61CAF00ECA65567 /* PhantomObjectTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomObjectTracker.swift; sourceTree = ""; };
+ 8A10C3B186CFFB95E684F581 /* PhantomNetworkHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomNetworkHeaderView.swift; sourceTree = ""; };
+ 8A1BFA093F1BBC4DB12CDD44 /* Documentation.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Documentation.docc; sourceTree = ""; };
+ 8A971038DFE7595932A3D4EB /* HitTestInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HitTestInspectorVC.swift; sourceTree = ""; };
+ 8B6734178FDCC4F738750B09 /* PhantomEnvironmentMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomEnvironmentMonitor.swift; sourceTree = ""; };
+ 8BE2BD98A4AFF5565CD83B6D /* PhantomDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomDashboardVC.swift; sourceTree = ""; };
+ 8D290358C697DE8615538028 /* AnimationInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimationInspectorVC.swift; sourceTree = ""; };
+ 8D8D72D386D5AAEFEB90A1C4 /* PhantomSecurityInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomSecurityInspector.swift; sourceTree = ""; };
+ 8DB009D91B108A8376EB6177 /* PhantomFeatureFlags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomFeatureFlags.swift; sourceTree = ""; };
+ 94D87B35451446AFB8E3E78F /* CoreDataInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataInspectorVC.swift; sourceTree = ""; };
+ 96089D5230B24C3A607A1DBB /* PhantomFeatureCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomFeatureCatalog.swift; sourceTree = ""; };
+ 96FB036DF5F7F9E27258468B /* PhantomCURLExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomCURLExporter.swift; sourceTree = ""; };
+ 96FCB5824CDFA90E49D78501 /* HangDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HangDetailVC.swift; sourceTree = ""; };
+ 974D9296ADF2283856BD9F9B /* PhantomTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomTheme.swift; sourceTree = ""; };
+ 995D4C5DF02AB9BA6B0F0B80 /* UserDefaultsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsVC.swift; sourceTree = ""; };
+ 9DC326D7FF1F41E2FE045DFC /* PhantomPluginRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomPluginRegistry.swift; sourceTree = ""; };
+ 9E11EB4054F5335893AF7AE8 /* SnapshotCompareVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapshotCompareVC.swift; sourceTree = ""; };
+ 9E3E341848285B83B5F11BBD /* PhantomCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomCodeView.swift; sourceTree = ""; };
+ A00245CA56BA594E8345475A /* LayerInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayerInspectorVC.swift; sourceTree = ""; };
+ A099768B32038A281FD80A9D /* PhantomSwift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomSwift.swift; sourceTree = ""; };
+ A0BF6FDBE4352F3628C38C6E /* UIInspectorActionCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIInspectorActionCard.swift; sourceTree = ""; };
+ A0F927B455732C5F2B82C3A1 /* ExtensionLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionLogVC.swift; sourceTree = ""; };
+ A30401E79075006332C172C8 /* PhantomOSLogBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomOSLogBridge.swift; sourceTree = ""; };
+ A7078D12327520BB2E2521A6 /* SnapshotListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapshotListVC.swift; sourceTree = ""; };
+ A7CF6237ECAD2DE902F597A8 /* DeepLinkTesterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkTesterVC.swift; sourceTree = ""; };
+ A9472CA8E283781549A25480 /* UIFont+Phantom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Phantom.swift"; sourceTree = ""; };
+ A94CE6D9DCE4585DAB8A5EE0 /* LiveEditVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveEditVC.swift; sourceTree = ""; };
+ ABF249DE8CA43F66FCFBCE66 /* PerformanceDashboardVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceDashboardVC.swift; sourceTree = ""; };
+ AEB34024EB243EB7EA5E8F23 /* LayoutConflictVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayoutConflictVC.swift; sourceTree = ""; };
+ B12136C1830CB8C303BA0A5D /* ViewHierarchy3DVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewHierarchy3DVC.swift; sourceTree = ""; };
+ B4447A7822F63CEA644EFB6D /* PhantomUIInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomUIInspector.swift; sourceTree = ""; };
+ B45673C9D749116330D85F0F /* PhantomEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomEnvironment.swift; sourceTree = ""; };
+ B7F39F43962FAECF1614E246 /* PhantomPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomPlugin.swift; sourceTree = ""; };
+ B85C78D90D077E98B7656A7A /* UIExtensions+Phantom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIExtensions+Phantom.swift"; sourceTree = ""; };
+ BC64C94304ED029916BF0BCB /* StorageListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageListVC.swift; sourceTree = ""; };
+ BDC5A2C48D32F6C1BBD26CBA /* PhantomFPSMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomFPSMonitor.swift; sourceTree = ""; };
+ BF512A1E29E60744E97F58D0 /* HangListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HangListVC.swift; sourceTree = ""; };
+ BF74934A3D0A47FF4D038F7A /* KeychainInspectorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainInspectorVC.swift; sourceTree = ""; };
+ C03F3E00029BFC4A957DF5BA /* MemoryGraphVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryGraphVC.swift; sourceTree = ""; };
+ C24794AE6628FAE5E548A375 /* PerformanceMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceMonitor.swift; sourceTree = ""; };
+ C48F28B4EE3A360EA4078671 /* MemoryDiffVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryDiffVC.swift; sourceTree = ""; };
+ C721FF8E5B7290B6EF38FA85 /* PhantomAnalyticsMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomAnalyticsMonitor.swift; sourceTree = ""; };
+ CB9CAB064CB3D8C409958567 /* InterceptRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterceptRule.swift; sourceTree = ""; };
+ CCB7309301BC21FF8B207F4C /* InterceptorCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterceptorCardCell.swift; sourceTree = ""; };
+ CD8A70CC73E1E05DF153E5F4 /* UIColor+Phantom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Phantom.swift"; sourceTree = ""; };
+ CDDD5B68FFB2E6E3093202CD /* LogStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogStore.swift; sourceTree = ""; };
+ CFE3BE396859DBFC8B2981DF /* UIViewController+PhantomAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+PhantomAppearance.swift"; sourceTree = ""; };
+ D1C9E459F52274E6A6363B5D /* PhantomEmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomEmptyStateView.swift; sourceTree = ""; };
+ D2C7C5C310C97A4A9FD58A73 /* PhantomWebViewConsoleBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomWebViewConsoleBridge.swift; sourceTree = ""; };
+ D42B97164577C1972DED07C9 /* PhantomMockEditorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomMockEditorVC.swift; sourceTree = ""; };
+ D45652B97CB40FA373C28769 /* PhantomSessionRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomSessionRecorder.swift; sourceTree = ""; };
+ D465F76FA9AC8E64FFA4355B /* PhantomFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomFeature.swift; sourceTree = ""; };
+ D55B44F7DABADB44D0DBDA70 /* ObjectRetainGraphVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectRetainGraphVC.swift; sourceTree = ""; };
+ D7406251BC1DC5AB2EE2C187 /* PhantomRuleMatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomRuleMatcher.swift; sourceTree = ""; };
+ D9F399AFEF13530D9495EC58 /* PhantomURLProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomURLProtocol.swift; sourceTree = ""; };
+ DB272FB22B1D8C308FFD71CA /* PhantomAccessibilityAuditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomAccessibilityAuditor.swift; sourceTree = ""; };
+ DC125611DE7DB2D62B1F5E0D /* PhantomInterceptorDraft.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomInterceptorDraft.swift; sourceTree = ""; };
+ DD830D9018E1B28247010169 /* PhantomMeasurementTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomMeasurementTool.swift; sourceTree = ""; };
+ DE95B82D013C548DA8AFCEAA /* HeapSnapshotVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeapSnapshotVC.swift; sourceTree = ""; };
+ E85B9D4E1EDFCDA0561D4C6C /* UIImage+Phantom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Phantom.swift"; sourceTree = ""; };
+ EAAFE8B54EA0016F03BCECF8 /* PhantomTouchVisualizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomTouchVisualizer.swift; sourceTree = ""; };
+ F3DED2E0625FAFAE00FD4644 /* NetworkListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkListVC.swift; sourceTree = ""; };
+ F6A77DE8DF2406CB8F6C3304 /* PhantomAssetInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomAssetInspector.swift; sourceTree = ""; };
+ F8AB6866E42B7042123F6C79 /* PhantomRemoteServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomRemoteServer.swift; sourceTree = ""; };
+ F91EF16F0520D4809FFCDFD8 /* UIViewController+Phantom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Phantom.swift"; sourceTree = ""; };
+ F935DE1EDE9D98BFF52EC801 /* PhantomMetricKitMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomMetricKitMonitor.swift; sourceTree = ""; };
+ FADECC18277C3E3925C8A8D4 /* ResponderChainVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponderChainVC.swift; sourceTree = ""; };
+ FDEFF3EFBCE5D480363E2B20 /* PhantomWebViewConsoleAutoInstaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhantomWebViewConsoleAutoInstaller.swift; sourceTree = ""; };
+ FE34E9772E4903AC8F74F9D3 /* RenderListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenderListVC.swift; sourceTree = ""; };
+ FE6BFD5E09ECBCB077920390 /* AssetListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetListVC.swift; sourceTree = ""; };
+ FEAA9C475F2F27E0B067665D /* Data+Phantom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Data+Phantom.swift"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 260E32B0A5C04092D430EFB9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 80E9B00B9B85EE733AB54AA3 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 01AE07A6246A1A81B87C011C /* Assets */ = {
+ isa = PBXGroup;
+ children = (
+ 15ED3EE774A5C0DF70787015 /* Core */,
+ 50DD8F0136F02BA1F48F65D6 /* UI */,
+ );
+ path = Assets;
+ sourceTree = "";
+ };
+ 04DB85DEB8C8F03CD1487FA5 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 96FB036DF5F7F9E27258468B /* PhantomCURLExporter.swift */,
+ 14EC047D71150408DD88947B /* PhantomNetworkModel.swift */,
+ 80BB2C8B8E02A0E940376AD8 /* PhantomNetworkSimulator.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 06F307B5ED86633718B88F3D /* QA */ = {
+ isa = PBXGroup;
+ children = (
+ 0B52D34C15979DE97EF496F9 /* Core */,
+ AE13EDE20FC23A73BE8E1176 /* UI */,
+ );
+ path = QA;
+ sourceTree = "";
+ };
+ 07BD8BDB481278C0987F6B2D /* Security */ = {
+ isa = PBXGroup;
+ children = (
+ 7B7BEE7C8023E448BFD0197B /* UI */,
+ 8D8D72D386D5AAEFEB90A1C4 /* PhantomSecurityInspector.swift */,
+ );
+ path = Security;
+ sourceTree = "";
+ };
+ 09768B71F1A469E138B0404D = {
+ isa = PBXGroup;
+ children = (
+ 9E2E008E53BCDFBF7813FCEF /* Products */,
+ 0D3DCDD73BED403D6AFFE975 /* Project */,
+ );
+ sourceTree = "";
+ };
+ 0AD03C5BB0A88256980BE738 /* Interceptor */ = {
+ isa = PBXGroup;
+ children = (
+ 728A39411FD4854EF5CC00E3 /* Core */,
+ 173F102567C7F8D523C061B6 /* UI */,
+ );
+ path = Interceptor;
+ sourceTree = "";
+ };
+ 0B52D34C15979DE97EF496F9 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ DB272FB22B1D8C308FFD71CA /* PhantomAccessibilityAuditor.swift */,
+ 24BEA77324F73536FA95A66A /* PhantomBGTaskInspector.swift */,
+ 7D0EC902A33B5A23A49C5194 /* PhantomBugReporter.swift */,
+ 8B6734178FDCC4F738750B09 /* PhantomEnvironmentMonitor.swift */,
+ 4327717669535414FE001B29 /* PhantomLocaleManager.swift */,
+ 6CA2B329018F0E8AED337FDC /* PhantomLocationManager.swift */,
+ 032F6575A78D384E69AE1221 /* PhantomPushSimulator.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 0B6AAA752CE8E9CEDE435492 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 1FE43F738AC7B802D75B4A1E /* PhantomExtensionBus.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 0D3DCDD73BED403D6AFFE975 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ C8BAF17C7E7E4D4AE4CFB9BF /* Derived */,
+ 3EA019D236583EF169A8B7A1 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 11B95A0BC7A67E23D25F3797 /* Extensions */ = {
+ isa = PBXGroup;
+ children = (
+ FEAA9C475F2F27E0B067665D /* Data+Phantom.swift */,
+ CD8A70CC73E1E05DF153E5F4 /* UIColor+Phantom.swift */,
+ B85C78D90D077E98B7656A7A /* UIExtensions+Phantom.swift */,
+ A9472CA8E283781549A25480 /* UIFont+Phantom.swift */,
+ E85B9D4E1EDFCDA0561D4C6C /* UIImage+Phantom.swift */,
+ F91EF16F0520D4809FFCDFD8 /* UIViewController+Phantom.swift */,
+ CFE3BE396859DBFC8B2981DF /* UIViewController+PhantomAppearance.swift */,
+ );
+ path = Extensions;
+ sourceTree = "";
+ };
+ 13C1C198870A309F976D0488 /* Helpers */ = {
+ isa = PBXGroup;
+ children = (
+ 734B2DAF479223798F3F0A1D /* PhantomPresentationResolver.swift */,
+ 757AC796D4CB5FC559F6A5AF /* PhantomSwizzler.swift */,
+ );
+ path = Helpers;
+ sourceTree = "";
+ };
+ 1493DB6EE0D5D39E642FDB27 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 2E04FA9BF2E1EADA753318FC /* PhantomMainThreadChecker.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 15ED3EE774A5C0DF70787015 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ F6A77DE8DF2406CB8F6C3304 /* PhantomAssetInspector.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 173F102567C7F8D523C061B6 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ CCB7309301BC21FF8B207F4C /* InterceptorCardCell.swift */,
+ 5013898CB3EB208D678E48CE /* InterceptorListVC.swift */,
+ D42B97164577C1972DED07C9 /* PhantomMockEditorVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 1DC08E9A522BD3BBC8D30BB0 /* UIInspector */ = {
+ isa = PBXGroup;
+ children = (
+ D792E57A8F609B5BA2619464 /* Core */,
+ E2BED055C8AE4B3E07F4F737 /* UI */,
+ B4447A7822F63CEA644EFB6D /* PhantomUIInspector.swift */,
+ );
+ path = UIInspector;
+ sourceTree = "";
+ };
+ 2094E6978E08CEC860E48BD9 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 74C93DD1C29E5CC5F10672B0 /* PhantomSwift-Info.plist */,
+ 1C5F8031AB4F686EBBB09256 /* PhantomSwiftNetworking-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 2483CBDC5A6B5DB910D50E80 /* Remote */ = {
+ isa = PBXGroup;
+ children = (
+ F8AB6866E42B7042123F6C79 /* PhantomRemoteServer.swift */,
+ );
+ path = Remote;
+ sourceTree = "";
+ };
+ 261E42D2E807B967EE48A2AB /* Components */ = {
+ isa = PBXGroup;
+ children = (
+ 59AF0237EBFE164DE6D88BCB /* PhantomBadgeView.swift */,
+ 9E3E341848285B83B5F11BBD /* PhantomCodeView.swift */,
+ D1C9E459F52274E6A6363B5D /* PhantomEmptyStateView.swift */,
+ 000D79F8F86FC9611F4860D5 /* PhantomTableVC.swift */,
+ );
+ path = Components;
+ sourceTree = "";
+ };
+ 285DA2F01B63315968B860D2 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 170811D6DCE7215CAFBF6374 /* CrashLogVC.swift */,
+ 96FCB5824CDFA90E49D78501 /* HangDetailVC.swift */,
+ BF512A1E29E60744E97F58D0 /* HangListVC.swift */,
+ C48F28B4EE3A360EA4078671 /* MemoryDiffVC.swift */,
+ C03F3E00029BFC4A957DF5BA /* MemoryGraphVC.swift */,
+ ABF249DE8CA43F66FCFBCE66 /* PerformanceDashboardVC.swift */,
+ 403B3DC793A1ACC4441B228F /* PhantomTimelineView.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 3081C53B06FF4375456578AA /* Performance */ = {
+ isa = PBXGroup;
+ children = (
+ 8BFDB4127E5281E89415DDA2 /* Core */,
+ 285DA2F01B63315968B860D2 /* UI */,
+ );
+ path = Performance;
+ sourceTree = "";
+ };
+ 315C715A0300E6580731E9C8 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 8DB009D91B108A8376EB6177 /* PhantomFeatureFlags.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 38882C45DFFD265C12A63063 /* Interceptor */ = {
+ isa = PBXGroup;
+ children = (
+ CB9CAB064CB3D8C409958567 /* InterceptRule.swift */,
+ 063512E737868C9CCFE9563D /* PhantomInterceptor.swift */,
+ D7406251BC1DC5AB2EE2C187 /* PhantomRuleMatcher.swift */,
+ );
+ path = Interceptor;
+ sourceTree = "";
+ };
+ 39C524129DC6C867C940B2D7 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 361132A9C0D6CF00C464CA2C /* PhantomHARExporter.swift */,
+ 61018E2D1F3C386074FB4C9E /* PhantomRequestStore.swift */,
+ D45652B97CB40FA373C28769 /* PhantomSessionRecorder.swift */,
+ D9F399AFEF13530D9495EC58 /* PhantomURLProtocol.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 3A554B9C6E835B11A41ABD87 /* Modules */ = {
+ isa = PBXGroup;
+ children = (
+ 38882C45DFFD265C12A63063 /* Interceptor */,
+ 699E12750D9BCC538F8FC56D /* Network */,
+ );
+ path = Modules;
+ sourceTree = "";
+ };
+ 3EA019D236583EF169A8B7A1 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ B388A78D303FAA565CFC668A /* PhantomSwift */,
+ DEF3BA7271B9F49EC2982306 /* PhantomSwiftNetworking */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 48872AA57664DC97A1460D84 /* Logger */ = {
+ isa = PBXGroup;
+ children = (
+ A19185EE43EF36AE20789CE2 /* UI */,
+ 62A1EB9E97905A624A7013F4 /* LogEntry.swift */,
+ 88ACC0450235B7EF37FD97AC /* LogLevel.swift */,
+ CDDD5B68FFB2E6E3093202CD /* LogStore.swift */,
+ 12AAD4AEFF7E0EB598CB73D8 /* PhantomLog.swift */,
+ A30401E79075006332C172C8 /* PhantomOSLogBridge.swift */,
+ FDEFF3EFBCE5D480363E2B20 /* PhantomWebViewConsoleAutoInstaller.swift */,
+ D2C7C5C310C97A4A9FD58A73 /* PhantomWebViewConsoleBridge.swift */,
+ );
+ path = Logger;
+ sourceTree = "";
+ };
+ 50DD8F0136F02BA1F48F65D6 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 2063276C73386EE308D8CFCF /* AssetGridCell.swift */,
+ FE6BFD5E09ECBCB077920390 /* AssetListVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 5EF0F6F298F81A3488C42A7C /* MemoryLeak */ = {
+ isa = PBXGroup;
+ children = (
+ A8E7853F7C1579DFF3E7A1EA /* UI */,
+ 1210F82D33FC8186C03FCE12 /* PhantomHeapSnapshot.swift */,
+ 7BB61DB22BCF55BDF4FD51C7 /* PhantomLeakTracker.swift */,
+ );
+ path = MemoryLeak;
+ sourceTree = "";
+ };
+ 6150DC99092D285331F77BC4 /* Network */ = {
+ isa = PBXGroup;
+ children = (
+ 39C524129DC6C867C940B2D7 /* Core */,
+ C8BAC1BB1E02E7F2435D423A /* UI */,
+ );
+ path = Network;
+ sourceTree = "";
+ };
+ 61D0A484774C6C2970CBCB39 /* HUD */ = {
+ isa = PBXGroup;
+ children = (
+ 03042793610B4AE8C3B84BBC /* PhantomDashboardSearch.swift */,
+ 8BE2BD98A4AFF5565CD83B6D /* PhantomDashboardVC.swift */,
+ 333AC74F3B1E97D8E489CECD /* PhantomDynamicIsland.swift */,
+ 96089D5230B24C3A607A1DBB /* PhantomFeatureCatalog.swift */,
+ 5F69BE976CFE47E9B3F2ECE1 /* PhantomGestureHandler.swift */,
+ 25C8308F198CBEF9CAFB9A24 /* PhantomHUDWindow.swift */,
+ 974D9296ADF2283856BD9F9B /* PhantomTheme.swift */,
+ );
+ path = HUD;
+ sourceTree = "";
+ };
+ 689876D4DEAF97506F9F55CD /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 0A62334119EB2BF45EC64DB0 /* PhantomSnapshotManager.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 699E12750D9BCC538F8FC56D /* Network */ = {
+ isa = PBXGroup;
+ children = (
+ 04DB85DEB8C8F03CD1487FA5 /* Core */,
+ );
+ path = Network;
+ sourceTree = "";
+ };
+ 6E7B0A5D82280E35CB6668A7 /* Analytics */ = {
+ isa = PBXGroup;
+ children = (
+ 8AE00AD359F1BF8BB9A0E6F6 /* Core */,
+ 9149BA363F8A0D13E96D981F /* UI */,
+ );
+ path = Analytics;
+ sourceTree = "";
+ };
+ 728A39411FD4854EF5CC00E3 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ DC125611DE7DB2D62B1F5E0D /* PhantomInterceptorDraft.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 784E7871765F24DA738F85E9 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 94D87B35451446AFB8E3E78F /* CoreDataInspectorVC.swift */,
+ BF74934A3D0A47FF4D038F7A /* KeychainInspectorVC.swift */,
+ 709CB5BE880223B5DCFEDDAD /* SandboxInspectorVC.swift */,
+ A7078D12327520BB2E2521A6 /* SnapshotListVC.swift */,
+ 0EFF4FE1DBF546F4ECE204E6 /* SQLiteInspectorVC.swift */,
+ 657C95A634A8A0FE9FE9AC68 /* StorageDashboardCell.swift */,
+ BC64C94304ED029916BF0BCB /* StorageListVC.swift */,
+ 995D4C5DF02AB9BA6B0F0B80 /* UserDefaultsVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 7B7BEE7C8023E448BFD0197B /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 4F4E0D27D46097C5745C79D6 /* SecurityDashboardVC.swift */,
+ 4DA082BF00FBC4004DAE338F /* SecurityKeychainVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 8AE00AD359F1BF8BB9A0E6F6 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ C721FF8E5B7290B6EF38FA85 /* PhantomAnalyticsMonitor.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 8BFDB4127E5281E89415DDA2 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ C24794AE6628FAE5E548A375 /* PerformanceMonitor.swift */,
+ 1EA4CB78EE623924E02ADD72 /* PhantomCrashLogStore.swift */,
+ 7B2E6F906ED8891BE92E2902 /* PhantomHangDetector.swift */,
+ 1F490623CA0268DAA5DD7140 /* PhantomMemorySlayer.swift */,
+ F935DE1EDE9D98BFF52EC801 /* PhantomMetricKitMonitor.swift */,
+ 88E50A00F61CAF00ECA65567 /* PhantomObjectTracker.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 9149BA363F8A0D13E96D981F /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 1C8C062343DE0E550C255409 /* AnalyticsListVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 947370426B66700A088FF3CE /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 04EEFFAA826DD75B17F4A2EA /* PhantomRuntimeInspector.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ 9562F6DA86A6519FAFF0056F /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ FE34E9772E4903AC8F74F9D3 /* RenderListVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ 9E2E008E53BCDFBF7813FCEF /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 171E4D4E6D36859650346DBD /* PhantomSwift.framework */,
+ 40C425AF2D95876BAF803761 /* PhantomSwiftNetworking.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ A19185EE43EF36AE20789CE2 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ A0F927B455732C5F2B82C3A1 /* ExtensionLogVC.swift */,
+ 010FD1C81C958CEE78B51289 /* LogConsoleVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ A8E7853F7C1579DFF3E7A1EA /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ DE95B82D013C548DA8AFCEAA /* HeapSnapshotVC.swift */,
+ 0D94F1B1BC53566719A23845 /* LeakListVC.swift */,
+ D55B44F7DABADB44D0DBDA70 /* ObjectRetainGraphVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ ACD2CB68E33F4D0C375EFD90 /* FeatureFlags */ = {
+ isa = PBXGroup;
+ children = (
+ 315C715A0300E6580731E9C8 /* Core */,
+ E54E95E8D71A5046A44FF4EA /* UI */,
+ );
+ path = FeatureFlags;
+ sourceTree = "";
+ };
+ AE13EDE20FC23A73BE8E1176 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 5601C61199E306C276A8607E /* AccessibilityDashboardVC.swift */,
+ 4EC59D9DE6BFDE9017A20E45 /* AppShortcutsVC.swift */,
+ 5BB998B360ABC6D55A96C046 /* BGTaskInspectorVC.swift */,
+ A7CF6237ECAD2DE902F597A8 /* DeepLinkTesterVC.swift */,
+ 29B26E2ACAB90E4313B2CD79 /* EnvironmentDashboardVC.swift */,
+ 4448C8E044E83C92D002C8B0 /* MacroRecorderVC.swift */,
+ 1E7D681ED2700766870C52B7 /* PushSimulatorVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ AF4DFE1A95340D419E96FD19 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 4151EBDD651D07A33C6FEFDC /* PhantomConfig.swift */,
+ B45673C9D749116330D85F0F /* PhantomEnvironment.swift */,
+ 72FF46155BCF61FF5172B670 /* PhantomEventBus.swift */,
+ D465F76FA9AC8E64FFA4355B /* PhantomFeature.swift */,
+ 5D9D0C9BF0571D39C654EA35 /* PhantomLaunchPlanner.swift */,
+ B7F39F43962FAECF1614E246 /* PhantomPlugin.swift */,
+ 9DC326D7FF1F41E2FE045DFC /* PhantomPluginRegistry.swift */,
+ A099768B32038A281FD80A9D /* PhantomSwift.swift */,
+ 4FEECBC14A8CBC45E7A9E6F5 /* PhantomSwiftExports.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ B388A78D303FAA565CFC668A /* PhantomSwift */ = {
+ isa = PBXGroup;
+ children = (
+ AF4DFE1A95340D419E96FD19 /* Core */,
+ 61D0A484774C6C2970CBCB39 /* HUD */,
+ C5A5EEB7EDFB6D7A1AFA2105 /* Modules */,
+ E56CD97DBE1F7941D18784C4 /* Shared */,
+ 8A1BFA093F1BBC4DB12CDD44 /* Documentation.docc */,
+ );
+ path = PhantomSwift;
+ sourceTree = "";
+ };
+ B3B4EE1C187D4A8606F4D1A2 /* SwiftUI */ = {
+ isa = PBXGroup;
+ children = (
+ D9B312C067F457DC368D1F1E /* Core */,
+ 9562F6DA86A6519FAFF0056F /* UI */,
+ );
+ path = SwiftUI;
+ sourceTree = "";
+ };
+ B678DAF7DF97242DB7C908EF /* RuntimeBrowser */ = {
+ isa = PBXGroup;
+ children = (
+ 947370426B66700A088FF3CE /* Core */,
+ F3B09766FCE653859A8BAB55 /* UI */,
+ );
+ path = RuntimeBrowser;
+ sourceTree = "";
+ };
+ C5A5EEB7EDFB6D7A1AFA2105 /* Modules */ = {
+ isa = PBXGroup;
+ children = (
+ 6E7B0A5D82280E35CB6668A7 /* Analytics */,
+ 01AE07A6246A1A81B87C011C /* Assets */,
+ 0B6AAA752CE8E9CEDE435492 /* Core */,
+ ACD2CB68E33F4D0C375EFD90 /* FeatureFlags */,
+ 0AD03C5BB0A88256980BE738 /* Interceptor */,
+ 48872AA57664DC97A1460D84 /* Logger */,
+ C86E2187713F5FA9AC582935 /* MainThreadChecker */,
+ 5EF0F6F298F81A3488C42A7C /* MemoryLeak */,
+ 6150DC99092D285331F77BC4 /* Network */,
+ 3081C53B06FF4375456578AA /* Performance */,
+ 06F307B5ED86633718B88F3D /* QA */,
+ 2483CBDC5A6B5DB910D50E80 /* Remote */,
+ B678DAF7DF97242DB7C908EF /* RuntimeBrowser */,
+ 07BD8BDB481278C0987F6B2D /* Security */,
+ D88ECDDE27FBCEE87E873F93 /* Storage */,
+ B3B4EE1C187D4A8606F4D1A2 /* SwiftUI */,
+ 1DC08E9A522BD3BBC8D30BB0 /* UIInspector */,
+ );
+ path = Modules;
+ sourceTree = "";
+ };
+ C86E2187713F5FA9AC582935 /* MainThreadChecker */ = {
+ isa = PBXGroup;
+ children = (
+ 1493DB6EE0D5D39E642FDB27 /* Core */,
+ EEEF0835AE95F89FD692AB33 /* UI */,
+ );
+ path = MainThreadChecker;
+ sourceTree = "";
+ };
+ C8BAC1BB1E02E7F2435D423A /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 1FF2438BAA40CEFF162C8D6B /* BadNetworkDashboardVC.swift */,
+ F3DED2E0625FAFAE00FD4644 /* NetworkListVC.swift */,
+ 6B8D5F58EC8A8BBE9E376D02 /* NetworkWaterfallVC.swift */,
+ 21B68997D6C90F68C03F2164 /* PhantomNetworkCell.swift */,
+ 8A10C3B186CFFB95E684F581 /* PhantomNetworkHeaderView.swift */,
+ 730B9B09BF5898756A09F4A2 /* RequestReplayVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ C8BAF17C7E7E4D4AE4CFB9BF /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 2094E6978E08CEC860E48BD9 /* InfoPlists */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ D792E57A8F609B5BA2619464 /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ BDC5A2C48D32F6C1BBD26CBA /* PhantomFPSMonitor.swift */,
+ 27C8856770EB86F1082A3A37 /* PhantomGridOverlay.swift */,
+ 7EA78CCCD2ABAFC2A2ACDFB8 /* PhantomLayoutConflictDetector.swift */,
+ DD830D9018E1B28247010169 /* PhantomMeasurementTool.swift */,
+ EAAFE8B54EA0016F03BCECF8 /* PhantomTouchVisualizer.swift */,
+ 2D056FFE6E3B07C8F2100154 /* PhantomUIKitTracker.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ D88ECDDE27FBCEE87E873F93 /* Storage */ = {
+ isa = PBXGroup;
+ children = (
+ 689876D4DEAF97506F9F55CD /* Core */,
+ 784E7871765F24DA738F85E9 /* UI */,
+ );
+ path = Storage;
+ sourceTree = "";
+ };
+ D9B312C067F457DC368D1F1E /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 3DCD92C3D26809F0DC1FBED8 /* PhantomRenderStore.swift */,
+ 79D1E243E3A2C84C6D502D87 /* PhantomRenderTracker.swift */,
+ );
+ path = Core;
+ sourceTree = "";
+ };
+ DEF3BA7271B9F49EC2982306 /* PhantomSwiftNetworking */ = {
+ isa = PBXGroup;
+ children = (
+ 3A554B9C6E835B11A41ABD87 /* Modules */,
+ );
+ path = PhantomSwiftNetworking;
+ sourceTree = "";
+ };
+ E2BED055C8AE4B3E07F4F737 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 225CE97926C23CF35B0A97E1 /* AccessibilityAuditVC.swift */,
+ 8D290358C697DE8615538028 /* AnimationInspectorVC.swift */,
+ 47ACFC82CA9285AE81547BFF /* ColorPickerVC.swift */,
+ 2C1BDB40B4BAB19E96428484 /* ConstraintInspectorVC.swift */,
+ 7E8012451E884A5550AE1546 /* DevToolsVC.swift */,
+ 0AD9A30F9D0C73391E0B1B08 /* EnvironmentOverrideVC.swift */,
+ 3220D2AB57A33C6FF8A86E57 /* GestureInspectorVC.swift */,
+ 8813DF3490D7AE0A80A2734A /* GridOverlayVC.swift */,
+ 8A971038DFE7595932A3D4EB /* HitTestInspectorVC.swift */,
+ A00245CA56BA594E8345475A /* LayerInspectorVC.swift */,
+ AEB34024EB243EB7EA5E8F23 /* LayoutConflictVC.swift */,
+ A94CE6D9DCE4585DAB8A5EE0 /* LiveEditVC.swift */,
+ FADECC18277C3E3925C8A8D4 /* ResponderChainVC.swift */,
+ 9E11EB4054F5335893AF7AE8 /* SnapshotCompareVC.swift */,
+ A0BF6FDBE4352F3628C38C6E /* UIInspectorActionCard.swift */,
+ 1B1C7FB01BAFE92DF7CDABD6 /* UserDefaultsInspectorVC.swift */,
+ 276D88EF9920B97868D67AA4 /* ViewDetailVC.swift */,
+ B12136C1830CB8C303BA0A5D /* ViewHierarchy3DVC.swift */,
+ 28F5C2B38FBD3356DD5E4A32 /* ViewHierarchyVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ E54E95E8D71A5046A44FF4EA /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 144521B36FB328076D6AA881 /* FeatureFlagsDashboardVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ E56CD97DBE1F7941D18784C4 /* Shared */ = {
+ isa = PBXGroup;
+ children = (
+ 261E42D2E807B967EE48A2AB /* Components */,
+ 11B95A0BC7A67E23D25F3797 /* Extensions */,
+ 13C1C198870A309F976D0488 /* Helpers */,
+ );
+ path = Shared;
+ sourceTree = "";
+ };
+ EEEF0835AE95F89FD692AB33 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 4185F809625A25DDB471063E /* MainThreadCheckerVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+ F3B09766FCE653859A8BAB55 /* UI */ = {
+ isa = PBXGroup;
+ children = (
+ 0E92721BA6DD16EF8F1DAFC9 /* ClassDetailVC.swift */,
+ 4892E780AF1DE7E41191CB2D /* RuntimeBrowserVC.swift */,
+ );
+ path = UI;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 02095BFF427C6D7D1D5EE05F /* PhantomSwiftNetworking */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = AB4DB1149FAC808937BC8FA5 /* Build configuration list for PBXNativeTarget "PhantomSwiftNetworking" */;
+ buildPhases = (
+ A0F4D680B1F55B4FA94FBD53 /* Sources */,
+ 4BF0BC0DEDE440910CF00363 /* Resources */,
+ 260E32B0A5C04092D430EFB9 /* Frameworks */,
+ 98659DDFBC135891087687F9 /* Embed Frameworks */,
+ 7EB25AF03932D879A9C1AAAB /* Copy Built Products for Explicit Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = PhantomSwiftNetworking;
+ packageProductDependencies = (
+ );
+ productName = PhantomSwiftNetworking;
+ productReference = 40C425AF2D95876BAF803761 /* PhantomSwiftNetworking.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 6B13B5B92ADC3026452FF6D3 /* PhantomSwift */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1185FAFF8C9B73FA9C291769 /* Build configuration list for PBXNativeTarget "PhantomSwift" */;
+ buildPhases = (
+ 95CC6EE0F26AC06B02F78B9C /* Sources */,
+ F2F211794FBEDFF9F64A6202 /* Resources */,
+ 80E9B00B9B85EE733AB54AA3 /* Frameworks */,
+ 2987EC469065ACE83A4E5BEB /* Embed Frameworks */,
+ 9A3879AEF73F734DA420C7F7 /* Dependencies */,
+ C65FBC7388401A9BE427B47E /* Copy Built Products for Explicit Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2D334CD3247B55BA3B22167F /* PBXTargetDependency */,
+ );
+ name = PhantomSwift;
+ packageProductDependencies = (
+ );
+ productName = PhantomSwift;
+ productReference = 171E4D4E6D36859650346DBD /* PhantomSwift.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 044D9295FB2A012F7C9CEB06 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ LastUpgradeCheck = 9999;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = 85EE9FD73432CF2BEDB668B2 /* Build configuration list for PBXProject "PhantomSwift" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ Base,
+ en,
+ );
+ mainGroup = 09768B71F1A469E138B0404D;
+ productRefGroup = 9E2E008E53BCDFBF7813FCEF /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 6B13B5B92ADC3026452FF6D3 /* PhantomSwift */,
+ 02095BFF427C6D7D1D5EE05F /* PhantomSwiftNetworking */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 4BF0BC0DEDE440910CF00363 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F2F211794FBEDFF9F64A6202 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 7EB25AF03932D879A9C1AAAB /* Copy Built Products for Explicit Dependencies */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "$(BUILD_DIR)/Debug$(EFFECTIVE_PLATFORM_NAME)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME)/$(PRODUCT_NAME).framework",
+ );
+ name = "Copy Built Products for Explicit Dependencies";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(BUILD_DIR)/Debug$(EFFECTIVE_PLATFORM_NAME)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME).framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# This script copies built products into the shared directory to be available for app and other targets that don't have scoped directories\n# If you try to archive any of the configurations seen in the output paths, the operation will fail due to `Multiple commands produce` error\n\nFILE=\"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME$TARGET_BUILD_SUBPATH/$PRODUCT_NAME/$PRODUCT_NAME.framework\"\nDESTINATION_FILE=\"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME$TARGET_BUILD_SUBPATH/$PRODUCT_NAME.framework\"\nif [[ -d \"$FILE\" && ! -d \"$DESTINATION_FILE\" ]]; then\n ln -s \"$FILE\" \"$DESTINATION_FILE\"\nfi\n\nif [[ -f \"$FILE\" && ! -f \"$DESTINATION_FILE\" ]]; then\n ln -s \"$FILE\" \"$DESTINATION_FILE\"\nfi";
+ };
+ C65FBC7388401A9BE427B47E /* Copy Built Products for Explicit Dependencies */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "$(BUILD_DIR)/Debug$(EFFECTIVE_PLATFORM_NAME)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME)/$(PRODUCT_NAME).framework",
+ );
+ name = "Copy Built Products for Explicit Dependencies";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(BUILD_DIR)/Debug$(EFFECTIVE_PLATFORM_NAME)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME).framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# This script copies built products into the shared directory to be available for app and other targets that don't have scoped directories\n# If you try to archive any of the configurations seen in the output paths, the operation will fail due to `Multiple commands produce` error\n\nFILE=\"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME$TARGET_BUILD_SUBPATH/$PRODUCT_NAME/$PRODUCT_NAME.framework\"\nDESTINATION_FILE=\"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME$TARGET_BUILD_SUBPATH/$PRODUCT_NAME.framework\"\nif [[ -d \"$FILE\" && ! -d \"$DESTINATION_FILE\" ]]; then\n ln -s \"$FILE\" \"$DESTINATION_FILE\"\nfi\n\nif [[ -f \"$FILE\" && ! -f \"$DESTINATION_FILE\" ]]; then\n ln -s \"$FILE\" \"$DESTINATION_FILE\"\nfi";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 95CC6EE0F26AC06B02F78B9C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FE37B9B7F8A02EDD234BF201 /* PhantomConfig.swift in Sources */,
+ 080F95604868D9EE1150DAA6 /* PhantomEnvironment.swift in Sources */,
+ 8EA4C9E344F9908A70F5061F /* PhantomEventBus.swift in Sources */,
+ 1D10F8D56AEEE283B42C2606 /* PhantomFeature.swift in Sources */,
+ 793F92BD9AB756794636C268 /* PhantomLaunchPlanner.swift in Sources */,
+ DC0532AE05FB571F59AAFF98 /* PhantomPlugin.swift in Sources */,
+ 9D45A28A795748D767F95151 /* PhantomPluginRegistry.swift in Sources */,
+ E51ADAD9A8F6714F29CC1E39 /* PhantomSwift.swift in Sources */,
+ 40D6FE4A4B3A1C470CF68090 /* PhantomSwiftExports.swift in Sources */,
+ 53D17202D07C305716205AF2 /* Documentation.docc in Sources */,
+ 62C548959397C6142827721B /* PhantomDashboardSearch.swift in Sources */,
+ 5592441869BDF902B415F2CF /* PhantomDashboardVC.swift in Sources */,
+ BF5FFD02D4A9C2DB2F03F423 /* PhantomDynamicIsland.swift in Sources */,
+ 7CC9BF15DF17298D1CA6BBC6 /* PhantomFeatureCatalog.swift in Sources */,
+ E6521C0730B700F5DB6A8667 /* PhantomGestureHandler.swift in Sources */,
+ 47802DC82757B9926A01AE32 /* PhantomHUDWindow.swift in Sources */,
+ AC6827417752017A976273B9 /* PhantomTheme.swift in Sources */,
+ 431A9ADAD625BAD4BBAA5528 /* PhantomAnalyticsMonitor.swift in Sources */,
+ E61BFAE425F45A64880F1995 /* AnalyticsListVC.swift in Sources */,
+ 700516C465199B0DB4E0F2BA /* PhantomAssetInspector.swift in Sources */,
+ ED94470506F6FE218FF76360 /* AssetGridCell.swift in Sources */,
+ 3D7175AEB10EBB7D90D0A470 /* AssetListVC.swift in Sources */,
+ EC39E3FA9F711720217230D8 /* PhantomExtensionBus.swift in Sources */,
+ 9BEAB3A388758E98FE08E37A /* PhantomFeatureFlags.swift in Sources */,
+ CD36FD996C40DB483FF0436B /* FeatureFlagsDashboardVC.swift in Sources */,
+ 884E4E25B432E21E336E298C /* PhantomInterceptorDraft.swift in Sources */,
+ E50148DCD494AA4B2D86CD7B /* InterceptorCardCell.swift in Sources */,
+ B72569A5DD5D1EA544AB6C58 /* InterceptorListVC.swift in Sources */,
+ E9A4B7BACF326A1395280D11 /* PhantomMockEditorVC.swift in Sources */,
+ 8A9A7281DF42741C90203835 /* LogEntry.swift in Sources */,
+ D5072C09381B4AD609CC1B77 /* LogLevel.swift in Sources */,
+ 8BCFE57494999806FEE48203 /* LogStore.swift in Sources */,
+ FAEA8E08B1459F07109554C9 /* PhantomLog.swift in Sources */,
+ FC914AF1DAC1883280EBFC85 /* PhantomOSLogBridge.swift in Sources */,
+ 3DF88B18A0D2405FFA9A1BC0 /* PhantomWebViewConsoleAutoInstaller.swift in Sources */,
+ 53ADB07BB163E1C25F87A9BC /* PhantomWebViewConsoleBridge.swift in Sources */,
+ 21A27756608462CF07298E24 /* ExtensionLogVC.swift in Sources */,
+ CD2F2374903FD9C958DEB2A3 /* LogConsoleVC.swift in Sources */,
+ 86322B26C4B7102E48E5F348 /* PhantomMainThreadChecker.swift in Sources */,
+ B0F0F1326A3359478156B9FB /* MainThreadCheckerVC.swift in Sources */,
+ F1A4404D3DEC9428A1B5BDE9 /* PhantomHeapSnapshot.swift in Sources */,
+ 26A204471F37F1338F98285A /* PhantomLeakTracker.swift in Sources */,
+ 7214B5039AE109997511F3AD /* HeapSnapshotVC.swift in Sources */,
+ 29782A713FEF3BDB215DA193 /* LeakListVC.swift in Sources */,
+ 97294065B0468D9B5E30D150 /* ObjectRetainGraphVC.swift in Sources */,
+ A42FB6D793BFE6B2066E3955 /* PhantomHARExporter.swift in Sources */,
+ B9AC9900ABA1326A696D15AE /* PhantomRequestStore.swift in Sources */,
+ B28D0E07E37478812D305C8E /* PhantomSessionRecorder.swift in Sources */,
+ C50C77394D31FB63DECBD84E /* PhantomURLProtocol.swift in Sources */,
+ 3D51A35AA449949496E4A93F /* BadNetworkDashboardVC.swift in Sources */,
+ 1B3494202BB4BB11960A4FFC /* NetworkListVC.swift in Sources */,
+ 9F43D07ECE3F3F16098A5E8A /* NetworkWaterfallVC.swift in Sources */,
+ F01E45BE8A62CC44656333CD /* PhantomNetworkCell.swift in Sources */,
+ 25090D1ADC876840B68D46BB /* PhantomNetworkHeaderView.swift in Sources */,
+ 236887AF009F53E7AA2D69F5 /* RequestReplayVC.swift in Sources */,
+ A983CE9126FE12063E5D8E82 /* PerformanceMonitor.swift in Sources */,
+ E6AC11CFD2EA6398205E7F62 /* PhantomCrashLogStore.swift in Sources */,
+ 6518BCB403D8D515607D4CF6 /* PhantomHangDetector.swift in Sources */,
+ 377ECA57D735784377955C19 /* PhantomMemorySlayer.swift in Sources */,
+ 266A534CCF9BC662546BCB8D /* PhantomMetricKitMonitor.swift in Sources */,
+ DE63541A99DDC7040A02075B /* PhantomObjectTracker.swift in Sources */,
+ 12DA08CB2D72B8AEB0E701A7 /* CrashLogVC.swift in Sources */,
+ 862AF437D25661DAF7584BE2 /* HangDetailVC.swift in Sources */,
+ 0CA8A41CD9D5049D1DFF7DE3 /* HangListVC.swift in Sources */,
+ B4B5CE02E8F2909BB5C5A36F /* MemoryDiffVC.swift in Sources */,
+ 1501766C99737638BAE33CDE /* MemoryGraphVC.swift in Sources */,
+ CBF4817A5E85010AB65204A6 /* PerformanceDashboardVC.swift in Sources */,
+ 8305EC1ABA1703FE56BC187B /* PhantomTimelineView.swift in Sources */,
+ 0B3ED71CD31E2041050D3619 /* PhantomAccessibilityAuditor.swift in Sources */,
+ DABDC788B631621151A9E678 /* PhantomBGTaskInspector.swift in Sources */,
+ 2C1B93C3EF2688927EC04730 /* PhantomBugReporter.swift in Sources */,
+ A592EDD9D77446102C940785 /* PhantomEnvironmentMonitor.swift in Sources */,
+ 6E0BF30FE8A6BB246DA49333 /* PhantomLocaleManager.swift in Sources */,
+ 2707FDF23E3AAADF14C5775D /* PhantomLocationManager.swift in Sources */,
+ 9E4C0226699DB0FCF7A10854 /* PhantomPushSimulator.swift in Sources */,
+ DFE7CCB0727AF11E0051D621 /* AccessibilityDashboardVC.swift in Sources */,
+ 6D47C15896B6EC09FD567192 /* AppShortcutsVC.swift in Sources */,
+ 022BAFC3AD72BD3678A56412 /* BGTaskInspectorVC.swift in Sources */,
+ EC272C51AB023D734E0A9291 /* DeepLinkTesterVC.swift in Sources */,
+ 926EACD4E754DC981307B1DA /* EnvironmentDashboardVC.swift in Sources */,
+ C4136C5817D589D59FBFFC3D /* MacroRecorderVC.swift in Sources */,
+ 4C12651B8500B77D2C90328C /* PushSimulatorVC.swift in Sources */,
+ CC07CFB46CA9008DA1B245B7 /* PhantomRemoteServer.swift in Sources */,
+ 6817AF6222AFDD9E8D614000 /* PhantomRuntimeInspector.swift in Sources */,
+ 5442C81C51C92806A751B68A /* ClassDetailVC.swift in Sources */,
+ 943A3815BA101FD3D4372490 /* RuntimeBrowserVC.swift in Sources */,
+ CD4808E87A5ED64015C724E2 /* PhantomSecurityInspector.swift in Sources */,
+ 3BE275A2AE2473104DB862B1 /* SecurityDashboardVC.swift in Sources */,
+ 24DFF2B7E0840B93833D3A3D /* SecurityKeychainVC.swift in Sources */,
+ 2D583A33B782AF168E2BA5C5 /* PhantomSnapshotManager.swift in Sources */,
+ B029C7BE40F2F7A1EECF21AA /* CoreDataInspectorVC.swift in Sources */,
+ 5FD28BA933D718815530677D /* KeychainInspectorVC.swift in Sources */,
+ F8050874741260BAF4E6B3B0 /* SQLiteInspectorVC.swift in Sources */,
+ 7FF431958640AD9C64378366 /* SandboxInspectorVC.swift in Sources */,
+ 2F42FEE8921D0158FA77D11D /* SnapshotListVC.swift in Sources */,
+ C381F8191B06898E9E0B5EAF /* StorageDashboardCell.swift in Sources */,
+ ECB7786BA7F986A2746F6F02 /* StorageListVC.swift in Sources */,
+ 56AA2CCFE6B91C01DFB3249D /* UserDefaultsVC.swift in Sources */,
+ ADC540B76F1F2C8710DD7320 /* PhantomRenderStore.swift in Sources */,
+ DC941C3FB9B186A16C1CB7FB /* PhantomRenderTracker.swift in Sources */,
+ 1BF10A46CFBF59D39AE9DCD2 /* RenderListVC.swift in Sources */,
+ BEAC0A36EDF293A34A1CB31A /* PhantomFPSMonitor.swift in Sources */,
+ 8A8DEFE6AEED1594753071E4 /* PhantomGridOverlay.swift in Sources */,
+ 3786AA85B3EC1B9261134457 /* PhantomLayoutConflictDetector.swift in Sources */,
+ CA5C17FDF7BD6DC7E3A585B4 /* PhantomMeasurementTool.swift in Sources */,
+ 6B3ED8EC5FC591D2B16B0A9B /* PhantomTouchVisualizer.swift in Sources */,
+ 2E3AEA41C2656AE8A8A242EE /* PhantomUIKitTracker.swift in Sources */,
+ 71BA814AB0B048B49FE0D76F /* PhantomUIInspector.swift in Sources */,
+ 319023CF7CFF422590F7D17A /* AccessibilityAuditVC.swift in Sources */,
+ E921AE3240C12A55032A66D6 /* AnimationInspectorVC.swift in Sources */,
+ 843CB7A324B8F335BABE9B8C /* ColorPickerVC.swift in Sources */,
+ 7DCF4E45C44DD23619B7F004 /* ConstraintInspectorVC.swift in Sources */,
+ F9E5042CA4DAA4AC216E9209 /* DevToolsVC.swift in Sources */,
+ B332DD6D0BC43DA5CDEF261E /* EnvironmentOverrideVC.swift in Sources */,
+ A0BE33DAF57DEAFCFC642249 /* GestureInspectorVC.swift in Sources */,
+ E1DF993188EFF6515DC7A097 /* GridOverlayVC.swift in Sources */,
+ F587A91BDE3AD035B8C06C36 /* HitTestInspectorVC.swift in Sources */,
+ FF7BF61AB7C8606E8EC3D31D /* LayerInspectorVC.swift in Sources */,
+ CCD5723E0466EE96211A8228 /* LayoutConflictVC.swift in Sources */,
+ 7B65236F93E192F05AB1D001 /* LiveEditVC.swift in Sources */,
+ 926CA15AF68B49FC3EB2E31F /* ResponderChainVC.swift in Sources */,
+ CC5B018BAB6F7873C9D0C77B /* SnapshotCompareVC.swift in Sources */,
+ 73BF3325F26F6432DB2D6B7D /* UIInspectorActionCard.swift in Sources */,
+ CBCDC19EF8D170BBA51BED04 /* UserDefaultsInspectorVC.swift in Sources */,
+ E069DB9E0A4CE06075A56ABD /* ViewDetailVC.swift in Sources */,
+ 420736E551C6930C0765C9CD /* ViewHierarchy3DVC.swift in Sources */,
+ F1E2A84AAE6AE898D5401F20 /* ViewHierarchyVC.swift in Sources */,
+ 00055ADA950978B69BB8EECE /* PhantomBadgeView.swift in Sources */,
+ BD61B098490AE1E8B5486485 /* PhantomCodeView.swift in Sources */,
+ ECE27A278EA7DB00CA87E2DE /* PhantomEmptyStateView.swift in Sources */,
+ 23B41ADFDC826478601FC5D0 /* PhantomTableVC.swift in Sources */,
+ E157F8475390C8FBAB82B09C /* Data+Phantom.swift in Sources */,
+ F25F0603D32EAE5EA88E1BAC /* UIColor+Phantom.swift in Sources */,
+ 3299DD9D173646C3F9AFEEC7 /* UIExtensions+Phantom.swift in Sources */,
+ A1E7AD59ABC70A22B48AF8B9 /* UIFont+Phantom.swift in Sources */,
+ A58BF82843A39988A3741A46 /* UIImage+Phantom.swift in Sources */,
+ 7386C3F84DAAC5B726127CED /* UIViewController+Phantom.swift in Sources */,
+ D61E4DD5FD7B95319AA7A6D9 /* UIViewController+PhantomAppearance.swift in Sources */,
+ 35DB28718B85F22329273EF7 /* PhantomPresentationResolver.swift in Sources */,
+ 4F8FC452EC6032B69276A652 /* PhantomSwizzler.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A0F4D680B1F55B4FA94FBD53 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 878398BA2193E6D5520ABDE7 /* InterceptRule.swift in Sources */,
+ D0C08391B41387CB0E7A310D /* PhantomInterceptor.swift in Sources */,
+ 0C4F7FF001B446490B9AFD6C /* PhantomRuleMatcher.swift in Sources */,
+ 60B49AFD80B8B7E81A4499AD /* PhantomCURLExporter.swift in Sources */,
+ 9AB8C839282FFAC97D5D1FC8 /* PhantomNetworkModel.swift in Sources */,
+ B19D3957FE765E16A4D5FAF0 /* PhantomNetworkSimulator.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 2D334CD3247B55BA3B22167F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = PhantomSwiftNetworking;
+ target = 02095BFF427C6D7D1D5EE05F /* PhantomSwiftNetworking */;
+ targetProxy = C6E1F736AB4255608011E745 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 35FD9141C05DDDCBE369B7C9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/PhantomSwift-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_SWIFT_FLAGS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = PhantomSwift;
+ PRODUCT_NAME = PhantomSwift;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,6";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 43845545EEE326D329A078A4 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUILT_PRODUCTS_DIR = "$(CONFIGURATION_BUILD_DIR)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME)";
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)$(TARGET_BUILD_SUBPATH)";
+ INFOPLIST_FILE = "Derived/InfoPlists/PhantomSwiftNetworking-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_SWIFT_FLAGS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = PhantomSwiftNetworking;
+ PRODUCT_NAME = PhantomSwiftNetworking;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,6";
+ TARGET_BUILD_DIR = "$(CONFIGURATION_BUILD_DIR)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME)";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 9D81AD2B8EFA4363C0A65293 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/PhantomSwiftNetworking-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_SWIFT_FLAGS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = PhantomSwiftNetworking;
+ PRODUCT_NAME = PhantomSwiftNetworking;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,6";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ BB944A15EF0A5CE10A9559D0 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = NO;
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PLATFORM_DIR)/Developer/Library/Frameworks",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ "SWIFT_PACKAGE=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 26.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-package-name",
+ PhantomSwift,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ SWIFT_PACKAGE,
+ );
+ SWIFT_SUPPRESS_WARNINGS = YES;
+ USE_HEADERMAP = NO;
+ };
+ name = Debug;
+ };
+ C589B9B5F869CF5866551BDA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUILT_PRODUCTS_DIR = "$(CONFIGURATION_BUILD_DIR)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME)";
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)$(TARGET_BUILD_SUBPATH)";
+ INFOPLIST_FILE = "Derived/InfoPlists/PhantomSwift-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_SWIFT_FLAGS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = PhantomSwift;
+ PRODUCT_NAME = PhantomSwift;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,6";
+ TARGET_BUILD_DIR = "$(CONFIGURATION_BUILD_DIR)$(TARGET_BUILD_SUBPATH)/$(PRODUCT_NAME)";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ D110BA246870819E031E2434 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PLATFORM_DIR)/Developer/Library/Frameworks",
+ );
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "SWIFT_PACKAGE=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 26.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-package-name",
+ PhantomSwift,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ SWIFT_PACKAGE,
+ );
+ SWIFT_SUPPRESS_WARNINGS = YES;
+ USE_HEADERMAP = NO;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1185FAFF8C9B73FA9C291769 /* Build configuration list for PBXNativeTarget "PhantomSwift" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C589B9B5F869CF5866551BDA /* Debug */,
+ 35FD9141C05DDDCBE369B7C9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 85EE9FD73432CF2BEDB668B2 /* Build configuration list for PBXProject "PhantomSwift" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ BB944A15EF0A5CE10A9559D0 /* Debug */,
+ D110BA246870819E031E2434 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ AB4DB1149FAC808937BC8FA5 /* Build configuration list for PBXNativeTarget "PhantomSwiftNetworking" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 43845545EEE326D329A078A4 /* Debug */,
+ 9D81AD2B8EFA4363C0A65293 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 044D9295FB2A012F7C9CEB06 /* Project object */;
+}
diff --git a/README.md b/README.md
index 95d6adc..d3207b6 100644
--- a/README.md
+++ b/README.md
@@ -9,8 +9,8 @@
-
-
+
+
@@ -30,7 +30,7 @@
PhantomSwift is an open-source iOS debugging library for Swift developers.
It provides network inspection, memory leak detection, UI hierarchy exploration,
and 25+ diagnostic tools â all in a single zero-dependency package.
-Compatible with UIKit and SwiftUI, installable via SPM or CocoaPods, with a minimum runtime target of iOS 12 and a validated Swift 5.9+ toolchain.
+Compatible with UIKit and SwiftUI, installable via SPM or CocoaPods, with a minimum runtime target of iOS 13 and a validated Swift 5.9+ toolchain.
---
@@ -69,7 +69,7 @@ Compatible with UIKit and SwiftUI, installable via SPM or CocoaPods, with a mini
- **Zero external dependencies** â built entirely with Apple frameworks
- **`#if DEBUG` safe** â every file is wrapped; nothing ships to the App Store
-- **iOS 12+ runtime support** â with `#available` guards for newer APIs
+- **iOS 13+ runtime support** â with `#available` guards for newer APIs
- **Swift 5.x aligned** â validated with Swift 5.9+ toolchains
- **Glassmorphic UI** â premium dark theme with blur, shadows, and micro-animations
- **Modular architecture** â enable or disable any module independently
@@ -188,7 +188,7 @@ Or add it to your `Package.swift`:
```swift
dependencies: [
- .package(url: "https://github.com/synaptode/PhantomSwift.git", from: "1.1.2")
+ .package(url: "https://github.com/synaptode/PhantomSwift.git", from: "1.2.0")
]
```
@@ -200,7 +200,7 @@ pod 'PhantomSwift', :configurations => ['Debug']
> **Important:** Always add PhantomSwift to your **Debug** configuration only. All code is wrapped in `#if DEBUG`, but restricting the dependency ensures zero bytes in release builds.
>
-> **Compatibility:** PhantomSwift supports **iOS 12.0+** at runtime. The current package manifest and CocoaPods spec are validated with **Swift 5.9+** toolchains, which keeps the library within the Swift 5 generation while matching the repo's actual build settings.
+> **Compatibility:** PhantomSwift supports **iOS 13.0+** at runtime. The current package manifest and CocoaPods spec are validated with **Swift 5.9+** toolchains, which keeps the library within the Swift 5 generation while matching the repo's actual build settings.
---
@@ -858,13 +858,13 @@ PhantomSwift.configure { config in
| Requirement | Minimum |
|-------------|---------|
-| iOS | 12.0+ |
+| iOS | 13.0+ |
| Swift | 5.9+ |
| Xcode | 15.0+ |
| Dependencies | None |
> **iOS Compatibility Notes:**
-> - **iOS 12â12.x:** Core functionality works. SF Symbols replaced with text/Menlo fallbacks.
+> - **iOS 13+:** Core functionality uses SF Symbols directly with no emoji fallbacks.
> - **iOS 13+:** Full SF Symbols, `UINavigationBarAppearance`, monospaced digit fonts.
> - **iOS 13+:** Remote WebSocket Server requires `Network.framework` (`NWListener`).
> - **iOS 14+:** OSLog bridge for unified logging.
diff --git a/Sources/PhantomSwift/HUD/PhantomDashboardVC.swift b/Sources/PhantomSwift/HUD/PhantomDashboardVC.swift
index 465a5bf..f9bf78a 100644
--- a/Sources/PhantomSwift/HUD/PhantomDashboardVC.swift
+++ b/Sources/PhantomSwift/HUD/PhantomDashboardVC.swift
@@ -81,7 +81,7 @@ internal final class PhantomDashboardVC: UIViewController {
private var sections: [AlphaSection] = []
private var lastVisibleSection = -1
private let emptyStateView = PhantomEmptyStateView(
- emoji: "đ",
+ symbolName: "magnifyingglass",
title: "No Results",
message: "No modules match your search."
)
@@ -167,7 +167,7 @@ internal final class PhantomDashboardVC: UIViewController {
// MARK: - Frosted glass background
private func setupFrostedBackground() {
- // Deep dark base (fallback for iOS 12)
+ // Deep dark base for the dashboard backdrop.
view.backgroundColor = UIColor(white: 0.04, alpha: 1.0)
if #available(iOS 13.0, *) {
diff --git a/Sources/PhantomSwift/HUD/PhantomFeatureCatalog.swift b/Sources/PhantomSwift/HUD/PhantomFeatureCatalog.swift
index 930a327..8c79f16 100644
--- a/Sources/PhantomSwift/HUD/PhantomFeatureCatalog.swift
+++ b/Sources/PhantomSwift/HUD/PhantomFeatureCatalog.swift
@@ -339,7 +339,7 @@ internal enum PhantomFeatureCatalog {
vc.title = title
vc.view.backgroundColor = PhantomTheme.shared.backgroundColor
- let emptyState = PhantomEmptyStateView(emoji: "âšī¸", title: title, message: message)
+ let emptyState = PhantomEmptyStateView(symbolName: "info.circle", title: title, message: message)
emptyState.translatesAutoresizingMaskIntoConstraints = false
vc.view.addSubview(emptyState)
diff --git a/Sources/PhantomSwift/Modules/Interceptor/UI/InterceptorListVC.swift b/Sources/PhantomSwift/Modules/Interceptor/UI/InterceptorListVC.swift
index 7e83497..bf8ae6d 100644
--- a/Sources/PhantomSwift/Modules/Interceptor/UI/InterceptorListVC.swift
+++ b/Sources/PhantomSwift/Modules/Interceptor/UI/InterceptorListVC.swift
@@ -294,7 +294,7 @@ internal final class InterceptorListVC: UIViewController {
private let mockoonValueLabel = UILabel()
private var refreshTimer: Timer?
private let emptyView = PhantomEmptyStateView(
- emoji: "đ",
+ symbolName: "theatermasks",
title: "No active rules",
message: "Intercept or mock network traffic by adding a rule.",
style: .compact
diff --git a/Sources/PhantomSwift/Modules/Logger/LogEntry.swift b/Sources/PhantomSwift/Modules/Logger/LogEntry.swift
index 4d3daf7..cf03906 100644
--- a/Sources/PhantomSwift/Modules/Logger/LogEntry.swift
+++ b/Sources/PhantomSwift/Modules/Logger/LogEntry.swift
@@ -32,7 +32,7 @@ public struct LogEntry: Identifiable {
/// Formatted log string for display.
public var formatted: String {
- "[\(level.emoji) \(level.name)] \(message)"
+ "[\(level.name)] \(message)"
}
}
#endif
diff --git a/Sources/PhantomSwift/Modules/Logger/LogLevel.swift b/Sources/PhantomSwift/Modules/Logger/LogLevel.swift
index 8fe864b..21940e6 100644
--- a/Sources/PhantomSwift/Modules/Logger/LogLevel.swift
+++ b/Sources/PhantomSwift/Modules/Logger/LogLevel.swift
@@ -3,17 +3,17 @@ import Foundation
/// Priority levels for PhantomSwift logs.
public enum LogLevel: Int, CaseIterable {
- /// đ Granular technical details
+ /// Granular technical details
case verbose = 0
- /// đ General debug info
+ /// General debug info
case debug = 1
- /// âšī¸ Normal app flow
+ /// Normal app flow
case info = 2
- /// â ī¸ Unusual but non-fatal
+ /// Unusual but non-fatal
case warning = 3
- /// â Error requiring attention
+ /// Error requiring attention
case error = 4
- /// đ¨ Fatal, potential crash
+ /// Fatal, potential crash
case critical = 5
/// User-friendly name
@@ -28,15 +28,15 @@ public enum LogLevel: Int, CaseIterable {
}
}
- /// Associated emoji for visual cues
- public var emoji: String {
+ /// Associated SF Symbol for visual cues
+ public var symbolName: String {
switch self {
- case .verbose: return "đ"
- case .debug: return "đ"
- case .info: return "âšī¸"
- case .warning: return "â ī¸"
- case .error: return "â"
- case .critical: return "đ¨"
+ case .verbose: return "magnifyingglass"
+ case .debug: return "ladybug"
+ case .info: return "info.circle"
+ case .warning: return "exclamationmark.triangle"
+ case .error: return "xmark.octagon"
+ case .critical: return "exclamationmark.shield"
}
}
}
diff --git a/Sources/PhantomSwift/Modules/Logger/UI/LogConsoleVC.swift b/Sources/PhantomSwift/Modules/Logger/UI/LogConsoleVC.swift
index 82fea1c..102f8ea 100644
--- a/Sources/PhantomSwift/Modules/Logger/UI/LogConsoleVC.swift
+++ b/Sources/PhantomSwift/Modules/Logger/UI/LogConsoleVC.swift
@@ -110,7 +110,7 @@ internal final class LogConsoleVC: UIViewController, PhantomEventObserver {
levelChips.append(allChip) // index 0 = ALL
for level in LogLevel.allCases {
- let chip = LevelChip(title: "\(level.emoji) \(level.name)", accent: accentColor(for: level))
+ let chip = LevelChip(title: level.name, symbolName: level.symbolName, accent: accentColor(for: level))
chip.level = level
chip.addTarget(self, action: #selector(levelChipTapped(_:)), for: .touchUpInside)
filterStack.addArrangedSubview(chip)
@@ -370,25 +370,40 @@ extension LogConsoleVC: UISearchBarDelegate {
private final class LevelChip: UIControl {
var level: LogLevel?
+ private let iconView = UIImageView()
private let label = UILabel()
+ private let stackView = UIStackView()
private let accent: UIColor
var isActive: Bool = false { didSet { updateAppearance() } }
- init(title: String, accent: UIColor) {
+ init(title: String, symbolName: String? = nil, accent: UIColor) {
self.accent = accent
super.init(frame: .zero)
+ stackView.axis = .horizontal
+ stackView.alignment = .center
+ stackView.spacing = symbolName == nil ? 0 : 5
+ stackView.translatesAutoresizingMaskIntoConstraints = false
+ addSubview(stackView)
+
+ if let symbolName {
+ iconView.image = UIImage(systemName: symbolName, withConfiguration: UIImage.SymbolConfiguration(pointSize: 11, weight: .semibold))
+ iconView.tintColor = accent
+ iconView.contentMode = .scaleAspectFit
+ stackView.addArrangedSubview(iconView)
+ }
+
label.text = title
label.font = .systemFont(ofSize: 11, weight: .bold)
- label.translatesAutoresizingMaskIntoConstraints = false
- addSubview(label)
+ stackView.addArrangedSubview(label)
+
layer.cornerRadius = 12
layer.borderWidth = 1
NSLayoutConstraint.activate([
- label.topAnchor.constraint(equalTo: topAnchor, constant: 5),
- label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -5),
- label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10),
- label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -10),
+ stackView.topAnchor.constraint(equalTo: topAnchor, constant: 5),
+ stackView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -5),
+ stackView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10),
+ stackView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -10),
])
updateAppearance()
}
@@ -399,10 +414,12 @@ private final class LevelChip: UIControl {
backgroundColor = accent.withAlphaComponent(0.2)
layer.borderColor = accent.cgColor
label.textColor = accent
+ iconView.tintColor = accent
} else {
backgroundColor = PhantomTheme.shared.surfaceColor
layer.borderColor = UIColor.white.withAlphaComponent(0.1).cgColor
label.textColor = PhantomTheme.shared.textColor.withAlphaComponent(0.5)
+ iconView.tintColor = PhantomTheme.shared.textColor.withAlphaComponent(0.5)
}
}
@@ -421,11 +438,11 @@ private final class LogCell: UITableViewCell {
}()
private let accentBar = UIView()
- private let levelBadge = UILabel()
private let messageLabel = UILabel()
private let metaLabel = UILabel()
private let tagBadge = UIView()
private let tagLabel = UILabel()
+ private let levelIcon = UIImageView()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
@@ -446,9 +463,10 @@ private final class LogCell: UITableViewCell {
accentBar.layer.cornerRadius = 2
contentView.addSubview(accentBar)
- levelBadge.font = .systemFont(ofSize: 16)
- levelBadge.translatesAutoresizingMaskIntoConstraints = false
- contentView.addSubview(levelBadge)
+ levelIcon.contentMode = .scaleAspectFit
+ levelIcon.tintColor = PhantomTheme.shared.textColor
+ levelIcon.translatesAutoresizingMaskIntoConstraints = false
+ contentView.addSubview(levelIcon)
messageLabel.font = UIFont.phantomMonospaced(size: 12, weight: .medium)
messageLabel.textColor = PhantomTheme.shared.textColor
@@ -481,16 +499,17 @@ private final class LogCell: UITableViewCell {
accentBar.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -6),
accentBar.widthAnchor.constraint(equalToConstant: 4),
- levelBadge.leadingAnchor.constraint(equalTo: accentBar.trailingAnchor, constant: 10),
- levelBadge.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12),
- levelBadge.widthAnchor.constraint(equalToConstant: 22),
+ levelIcon.leadingAnchor.constraint(equalTo: accentBar.trailingAnchor, constant: 10),
+ levelIcon.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12),
+ levelIcon.widthAnchor.constraint(equalToConstant: 18),
+ levelIcon.heightAnchor.constraint(equalToConstant: 18),
messageLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10),
- messageLabel.leadingAnchor.constraint(equalTo: levelBadge.trailingAnchor, constant: 6),
+ messageLabel.leadingAnchor.constraint(equalTo: levelIcon.trailingAnchor, constant: 6),
messageLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -12),
tagBadge.topAnchor.constraint(equalTo: messageLabel.bottomAnchor, constant: 5),
- tagBadge.leadingAnchor.constraint(equalTo: levelBadge.trailingAnchor, constant: 6),
+ tagBadge.leadingAnchor.constraint(equalTo: levelIcon.trailingAnchor, constant: 6),
tagLabel.topAnchor.constraint(equalTo: tagBadge.topAnchor, constant: 2),
tagLabel.bottomAnchor.constraint(equalTo: tagBadge.bottomAnchor, constant: -2),
@@ -512,7 +531,8 @@ private final class LogCell: UITableViewCell {
func configure(with entry: LogEntry) {
let accent = accentColor(for: entry.level)
accentBar.backgroundColor = accent
- levelBadge.text = entry.level.emoji
+ levelIcon.image = UIImage(systemName: entry.level.symbolName, withConfiguration: UIImage.SymbolConfiguration(pointSize: 14, weight: .semibold))
+ levelIcon.tintColor = accent
messageLabel.text = entry.message
messageLabel.textColor = accent.withAlphaComponent(entry.level == .verbose ? 0.6 : 1.0)
@@ -599,7 +619,7 @@ private final class LogDetailVC: UIViewController {
let file = URL(fileURLWithPath: entry.file).lastPathComponent
return [
("ENTRY", [
- ("Level", "\(entry.level.emoji) \(entry.level.name)"),
+ ("Level", entry.level.name),
("Tag", entry.tag ?? "â"),
("Time", LogDetailVC.dateFormatter.string(from: entry.timestamp)),
]),
diff --git a/Sources/PhantomSwift/Modules/Network/UI/NetworkListVC.swift b/Sources/PhantomSwift/Modules/Network/UI/NetworkListVC.swift
index b4960e0..f91204a 100644
--- a/Sources/PhantomSwift/Modules/Network/UI/NetworkListVC.swift
+++ b/Sources/PhantomSwift/Modules/Network/UI/NetworkListVC.swift
@@ -250,7 +250,7 @@ internal final class NetworkListVC: PhantomTableVC, PhantomEventObserver {
}
}
- private let emptyView = PhantomEmptyStateView(emoji: "đĄ", title: "No Requests", message: "Network traffic will appear here automatically.")
+ private let emptyView = PhantomEmptyStateView(symbolName: "antenna.radiowaves.left.and.right", title: "No Requests", message: "Network traffic will appear here automatically.")
private func updateEmptyState() {
if filteredRequests.isEmpty {
diff --git a/Sources/PhantomSwift/Modules/Performance/UI/CrashLogVC.swift b/Sources/PhantomSwift/Modules/Performance/UI/CrashLogVC.swift
index 55a7b4a..56293b5 100644
--- a/Sources/PhantomSwift/Modules/Performance/UI/CrashLogVC.swift
+++ b/Sources/PhantomSwift/Modules/Performance/UI/CrashLogVC.swift
@@ -17,7 +17,7 @@ internal final class CrashLogVC: UIViewController {
}()
private lazy var emptyView = PhantomEmptyStateView(
- emoji: "â
",
+ symbolName: "checkmark.seal",
title: "No Crashes Recorded",
message: "Uncaught NSExceptions and MetricKit crash diagnostics appear here."
)
diff --git a/Sources/PhantomSwift/Modules/Performance/UI/PerformanceDashboardVC.swift b/Sources/PhantomSwift/Modules/Performance/UI/PerformanceDashboardVC.swift
index b3dc8de..d1f57a5 100644
--- a/Sources/PhantomSwift/Modules/Performance/UI/PerformanceDashboardVC.swift
+++ b/Sources/PhantomSwift/Modules/Performance/UI/PerformanceDashboardVC.swift
@@ -447,8 +447,6 @@ private final class MetricView: UIView {
unitLabel.text = unit
if #available(iOS 13.0, *) {
iconView.image = UIImage(systemName: icon)
- } else {
- // iOS 12 Fallback text is placed in init usually, skipping since it's just decorative.
}
setup()
}
diff --git a/Sources/PhantomSwift/Modules/QA/Core/PhantomBugReporter.swift b/Sources/PhantomSwift/Modules/QA/Core/PhantomBugReporter.swift
index 477a803..ca0d541 100644
--- a/Sources/PhantomSwift/Modules/QA/Core/PhantomBugReporter.swift
+++ b/Sources/PhantomSwift/Modules/QA/Core/PhantomBugReporter.swift
@@ -54,7 +54,7 @@ public final class PhantomBugReporter {
// 4. Recent logs (last 100)
let logs = LogStore.shared.getAll().suffix(100)
- let logText = logs.map { "[\($0.level.emoji)] \($0.timestamp) | \($0.message)" }.joined(separator: "\n")
+ let logText = logs.map { "[\($0.level.name)] \($0.timestamp) | \($0.message)" }.joined(separator: "\n")
try logText.write(to: bundleDir.appendingPathComponent("recent_logs.txt"),
atomically: true, encoding: .utf8)
diff --git a/Sources/PhantomSwift/Modules/QA/Core/PhantomPushSimulator.swift b/Sources/PhantomSwift/Modules/QA/Core/PhantomPushSimulator.swift
index 4eb646c..5ca414d 100644
--- a/Sources/PhantomSwift/Modules/QA/Core/PhantomPushSimulator.swift
+++ b/Sources/PhantomSwift/Modules/QA/Core/PhantomPushSimulator.swift
@@ -285,7 +285,6 @@ private final class PhantomUNDelegate: NSObject, UNUserNotificationCenterDelegat
}
}
- @available(iOS 12.0, *)
func userNotificationCenter(
_ center: UNUserNotificationCenter,
openSettingsFor notification: UNNotification?
diff --git a/Sources/PhantomSwift/Modules/QA/UI/AppShortcutsVC.swift b/Sources/PhantomSwift/Modules/QA/UI/AppShortcutsVC.swift
index ff472ed..36be83a 100644
--- a/Sources/PhantomSwift/Modules/QA/UI/AppShortcutsVC.swift
+++ b/Sources/PhantomSwift/Modules/QA/UI/AppShortcutsVC.swift
@@ -14,7 +14,7 @@ internal final class AppShortcutsVC: PhantomTableVC {
private func loadShortcuts() {
self.shortcuts = PhantomSwift.shared.config.shortcuts
if shortcuts.isEmpty {
- let empty = PhantomEmptyStateView(emoji: "â¨ī¸", title: "No Shortcuts", message: "Register shortcuts in PhantomConfig to see them here.")
+ let empty = PhantomEmptyStateView(symbolName: "keyboard", title: "No Shortcuts", message: "Register shortcuts in PhantomConfig to see them here.")
tableView.backgroundView = empty
} else {
tableView.backgroundView = nil
diff --git a/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/ClassDetailVC.swift b/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/ClassDetailVC.swift
index 5b1cd98..32fb212 100644
--- a/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/ClassDetailVC.swift
+++ b/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/ClassDetailVC.swift
@@ -36,7 +36,7 @@ internal final class ClassDetailVC: UIViewController {
}
}()
private let emptyView = PhantomEmptyStateView(
- emoji: "đ",
+ symbolName: "doc.text.magnifyingglass",
title: "None Found",
message: "This class has no items in this category."
)
diff --git a/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/RuntimeBrowserVC.swift b/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/RuntimeBrowserVC.swift
index 2ef07f4..506f7bf 100644
--- a/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/RuntimeBrowserVC.swift
+++ b/Sources/PhantomSwift/Modules/RuntimeBrowser/UI/RuntimeBrowserVC.swift
@@ -29,7 +29,7 @@ internal final class RuntimeBrowserVC: UIViewController {
}()
private let statsLabel = UILabel()
private let emptyView = PhantomEmptyStateView(
- emoji: "đŦ",
+ symbolName: "magnifyingglass.circle",
title: "No Classes Found",
message: "Try a different search term."
)
diff --git a/Sources/PhantomSwift/Modules/UIInspector/UI/LayoutConflictVC.swift b/Sources/PhantomSwift/Modules/UIInspector/UI/LayoutConflictVC.swift
index 4a8ae3a..e2c76bb 100644
--- a/Sources/PhantomSwift/Modules/UIInspector/UI/LayoutConflictVC.swift
+++ b/Sources/PhantomSwift/Modules/UIInspector/UI/LayoutConflictVC.swift
@@ -17,7 +17,7 @@ internal final class LayoutConflictVC: UIViewController {
}()
private lazy var emptyView = PhantomEmptyStateView(
- emoji: "đ",
+ symbolName: "ruler",
title: "No Layout Conflicts",
message: "AutoLayout constraint breaks will appear here in real-time as you use the app."
)
diff --git a/Sources/PhantomSwift/Shared/Components/PhantomEmptyStateView.swift b/Sources/PhantomSwift/Shared/Components/PhantomEmptyStateView.swift
index 1a44dc1..3e46011 100644
--- a/Sources/PhantomSwift/Shared/Components/PhantomEmptyStateView.swift
+++ b/Sources/PhantomSwift/Shared/Components/PhantomEmptyStateView.swift
@@ -9,15 +9,15 @@ internal final class PhantomEmptyStateView: UIView {
}
private let stackView = UIStackView()
- private let emojiLabel = UILabel()
+ private let iconView = UIImageView()
private let titleLabel = UILabel()
private let messageLabel = UILabel()
private let style: Style
- internal init(emoji: String, title: String, message: String, style: Style = .standard) {
+ internal init(symbolName: String, title: String, message: String, style: Style = .standard) {
self.style = style
super.init(frame: .zero)
- emojiLabel.text = emoji
+ iconView.image = UIImage(systemName: symbolName)
titleLabel.text = title
messageLabel.text = message
setup()
@@ -33,18 +33,21 @@ internal final class PhantomEmptyStateView: UIView {
stackView.spacing = style == .compact ? 8 : 10
addSubview(stackView)
+ iconView.contentMode = .scaleAspectFit
+ iconView.tintColor = PhantomTheme.shared.primaryColor
+
switch style {
case .standard:
- emojiLabel.font = UIFont.systemFont(ofSize: 64)
+ iconView.preferredSymbolConfiguration = UIImage.SymbolConfiguration(pointSize: 52, weight: .regular)
titleLabel.font = UIFont.systemFont(ofSize: 18, weight: .bold)
messageLabel.font = UIFont.systemFont(ofSize: 14)
case .compact:
- emojiLabel.font = UIFont.systemFont(ofSize: 46)
+ iconView.preferredSymbolConfiguration = UIImage.SymbolConfiguration(pointSize: 38, weight: .regular)
titleLabel.font = UIFont.systemFont(ofSize: 15, weight: .bold)
messageLabel.font = UIFont.systemFont(ofSize: 12)
}
- stackView.addArrangedSubview(emojiLabel)
+ stackView.addArrangedSubview(iconView)
titleLabel.textColor = PhantomTheme.shared.textColor
stackView.addArrangedSubview(titleLabel)
diff --git a/index.html b/index.html
index abdbb58..248ff2c 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
PhantomSwift â Zero-Dependency iOS Debugging Toolkit
-
+
@@ -12,14 +12,14 @@
-
+
-
+