diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf49525..52638cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -175,8 +175,8 @@ jobs: - name: Install XcodeGen run: brew install xcodegen - - name: Generate the project - run: xcodegen generate + - name: Generate the project and reject drift + run: scripts/check_xcode_project.sh # This compiles a different product graph and activation path from the Developer ID build. Ad-hoc signing # deliberately strips protected entitlements; archive signing validates those with the distribution profiles. diff --git a/.gitignore b/.gitignore index 1a29090..d7b8003 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,19 @@ xcuserdata/ *.pkg *.dmg -# Generated by XcodeGen (regenerate with `xcodegen generate`) -Flowlight.xcodeproj/ +# Generated by XcodeGen (regenerate with `xcodegen generate`). The shared project +# and schemes stay committed because Xcode Cloud must discover its selected +# container before any post-clone script can run. Local and Xcode-managed state +# remains ignored. +Flowlight.xcodeproj/* +!Flowlight.xcodeproj/project.pbxproj +!Flowlight.xcodeproj/project.xcworkspace/ +Flowlight.xcodeproj/project.xcworkspace/* +!Flowlight.xcodeproj/project.xcworkspace/contents.xcworkspacedata +!Flowlight.xcodeproj/xcshareddata/ +Flowlight.xcodeproj/xcshareddata/* +!Flowlight.xcodeproj/xcshareddata/xcschemes/ +!Flowlight.xcodeproj/xcshareddata/xcschemes/*.xcscheme # Signing material. Never commit any of this, however briefly it lives here. certs/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e16a8ac..c7a9555 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,8 @@ Thanks for helping make network activity on macOS understandable. ```sh brew install xcodegen -xcodegen generate +scripts/check_xcode_project.sh --write +scripts/check_xcode_project.sh scripts/build-local.sh open build/Build/Products/Release/Flowlight.app --args -FLDemo YES # synthetic data, safe for screenshots ``` diff --git a/Flowlight.xcodeproj/project.pbxproj b/Flowlight.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8f5d434 --- /dev/null +++ b/Flowlight.xcodeproj/project.pbxproj @@ -0,0 +1,2688 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 028E3BA5025E1089C1CA7CEB /* CodeSignatureCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168D824382963305ED7E6C04 /* CodeSignatureCheck.swift */; }; + 03861BEFD76EF771618B928F /* TrafficModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6096AB6A3EF78490BE10DF50 /* TrafficModels.swift */; }; + 042EE0F6F95E5432AB027C65 /* InspectionBudgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F07BDE0C2D8005899C1AF21C /* InspectionBudgetView.swift */; }; + 046D743441B8528AD853BF2D /* BluetoothMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9B6A48D086EF16CF6E438FF /* BluetoothMonitor.swift */; }; + 0500979C1F127E3E8BAC2C0F /* AgentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5656604B2CFCBB61EFE050C /* AgentCatalog.swift */; }; + 0567566CCFA1B23855C3C0F1 /* ExportDisclosure.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF2DEA93C3D6844E3345D2D8 /* ExportDisclosure.swift */; }; + 059D1C5ECA497BBF749BFA1F /* RulePackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08C5F9CC0D644DCA03F5F4C5 /* RulePackTests.swift */; }; + 05D3F9927B8A2B6F4D3CC93C /* WindowVisibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45902808344F173033EB0F5 /* WindowVisibility.swift */; }; + 06806F580BC3A25E6C76B4DE /* HTTPDataTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C34C9D0A9B302B4CF4C7125 /* HTTPDataTransport.swift */; }; + 06A92144D13855A43F30221D /* DemoInspection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FFEA980768CD488D58CC0B1 /* DemoInspection.swift */; }; + 06C9D883620A08BF10DBF82A /* SystemExtensions.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81F190466C9691ADAF7BC8DA /* SystemExtensions.framework */; }; + 06D7DABCED6EF2ED5BD1B725 /* DatabaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D6A2870B379B2C1C171C7A3 /* DatabaseTests.swift */; }; + 07B78C868D02BC6FB6FC561C /* AgentLauncher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440DB80190A1847AC834210D /* AgentLauncher.swift */; }; + 094C8F94FD053B615836D494 /* MCPDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6CCA395BF33CDF9F92B725 /* MCPDomains.swift */; }; + 0998D0711C9591F12AE30085 /* FeatureGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D568056D9E6FACAC42D563 /* FeatureGuide.swift */; }; + 099CCC081C36710CCD4FFBD5 /* BPFProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20CA8150CA012929A40558FB /* BPFProgram.swift */; }; + 09A86273E9179E24B619D829 /* InspectMenuItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406DB466CD32DA8223AE61A6 /* InspectMenuItems.swift */; }; + 09B577964D76B2CCADA2E3EF /* AgentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082111849A66652DD9F1BE01 /* AgentsModel.swift */; }; + 09F9A2B71C1F7867CB04DDAC /* NetworkScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F383DF6343F2DB3052413C9 /* NetworkScope.swift */; }; + 0ACF3321E6670591EC9B1306 /* ProtocolClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C533BB77B419198656C6284 /* ProtocolClassifier.swift */; }; + 0B9096994698EFB06A95D26D /* ToolActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B2E7474FB6A7B8B56B98917 /* ToolActivity.swift */; }; + 0BB12E96D54D92C8D24619B5 /* GlobMatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0872CE92A9A3D5A785ECC816 /* GlobMatch.swift */; }; + 0BC685F72E943E55AA0DFC1A /* RulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88962BAF6E215B83FE0AFF9A /* RulesView.swift */; }; + 0C0204670BD00994D9821D5F /* FocusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61080233ED162067497EE2E3 /* FocusView.swift */; }; + 0CDAAF2B3729A02854447210 /* AskChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14C234AF77E7451A1505DDF9 /* AskChart.swift */; }; + 0D37699776684FD04F8D9D07 /* ProtocolClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C533BB77B419198656C6284 /* ProtocolClassifier.swift */; }; + 0D622C67AB136A6F14708CA6 /* IPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8A0C2D83843716604FD3F0 /* IPCServer.swift */; }; + 0D7D15BD7081161D53ED1578 /* InspectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15E51941A085C6B16AF395BB /* InspectionController.swift */; }; + 10776A2B276E82BD07243E07 /* DeviceModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD774DADE526BE4F507BE06C /* DeviceModels.swift */; }; + 118B4F7C72898BC0091B8F6A /* GlobMatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0872CE92A9A3D5A785ECC816 /* GlobMatch.swift */; }; + 1203A91F64B3D15431700D4F /* GuardrailEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15456E37F11CE5E19A124753 /* GuardrailEngine.swift */; }; + 120C7E644032F70B351DB87E /* AgentWorkspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E79F3A686C0EC5D7B28E8C /* AgentWorkspace.swift */; }; + 124C56A74E24D77F75AA8D08 /* HTTPHostParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228B5C4135EAD9D85F91ED0E /* HTTPHostParser.swift */; }; + 13299931E36F0173B3FCDC1B /* BlockEnforcer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA6FB03454241CB84A9AA13 /* BlockEnforcer.swift */; }; + 1438E3A19D4B0225397E92F7 /* HostCanonicalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA83082A5085897BE34D963 /* HostCanonicalizer.swift */; }; + 145E54492C15FDD359B6DB08 /* InsightsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C0843B4BD70F8F83167F2D3 /* InsightsModel.swift */; }; + 149824D7E5DBBF87A16CFBDB /* TLSSNIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C4444B7A84352BE3672C41 /* TLSSNIParser.swift */; }; + 14ACBD3AE23905CA5DA965CB /* RulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88962BAF6E215B83FE0AFF9A /* RulesView.swift */; }; + 155D31587F84936506FDEBB2 /* ProcessNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F3F458498856491A40E88C /* ProcessNaming.swift */; }; + 157717AA8B338201B7C3B4C7 /* FlowlightExtension.systemextension in Embed Dependencies */ = {isa = PBXBuildFile; fileRef = D1C046DCF0CB1227CA93DA24 /* FlowlightExtension.systemextension */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 18F94A8B0CE6DD3B1714C5DC /* DNSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D61C3343882268C81871C9B /* DNSParser.swift */; }; + 1ADF39B07A56B2AFFC721C1B /* ExportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E01AEB9AB4F8723FFFA4BFB /* ExportTests.swift */; }; + 1C699CA261A1C0963BF36120 /* BoundedHTTPDataTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78D5C4691F1B4DFDDCC1A705 /* BoundedHTTPDataTransport.swift */; }; + 1C837EBCE2110C53FB85C886 /* AnomalySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = F61F7D8D3D08054C7697792D /* AnomalySettings.swift */; }; + 1D11256FDE7183EBBED5D308 /* BoundedHTTPDataTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78D5C4691F1B4DFDDCC1A705 /* BoundedHTTPDataTransport.swift */; }; + 1D997A2137B9445F4D423737 /* ProcessNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F3F458498856491A40E88C /* ProcessNaming.swift */; }; + 1E0AB61964E7FD024B5B4E71 /* AgentPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF99FCE4EBE61D20FFC1E2F1 /* AgentPolicy.swift */; }; + 1EC06D8718C4B684BEF492D4 /* Focus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC957336FC5BD77D7A81651 /* Focus.swift */; }; + 1F1CF3F7D03FBB27616B2200 /* InspectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15E51941A085C6B16AF395BB /* InspectionController.swift */; }; + 1F8686DCB3451158B115A8FD /* AgentLauncher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440DB80190A1847AC834210D /* AgentLauncher.swift */; }; + 2072AA79A8637D84267BE43F /* MCPDomainsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34AD2BFFA35727FB39287960 /* MCPDomainsTests.swift */; }; + 216BDAB2AB83A06B61EE6325 /* InstalledApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67F3203B4BE2D664F3B1EC9 /* InstalledApps.swift */; }; + 21D7D0DF6C5DF97EB3D1EFD9 /* RulePackCatalogComposition.swift in Sources */ = {isa = PBXBuildFile; fileRef = E858E52F162361C6FD039F16 /* RulePackCatalogComposition.swift */; }; + 22B534F23EF9F05AE27A6D71 /* FeatureGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D568056D9E6FACAC42D563 /* FeatureGuide.swift */; }; + 239189796A5B358CF23BFCF9 /* MockRulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8406C2280A8FF08E883A1E0 /* MockRulesView.swift */; }; + 23CC0B3EE557E6F247EC4100 /* RuleEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08643257F8D11784563BD6CC /* RuleEditor.swift */; }; + 24582219230DE364D6B2E2D1 /* BlockingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F529FE0E06B11298D8CD1E90 /* BlockingTests.swift */; }; + 2497E16386CDFE769EFB0EF6 /* RulePackEditorDraft.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089476A21B8A6AE7F3F4A53A /* RulePackEditorDraft.swift */; }; + 2499CE8E13B7B57DDA281E39 /* AgentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC8F91DE12A1C58BB2BD7038 /* AgentTests.swift */; }; + 2504E2CFD3C6AFA86FDC86D3 /* InspectionBudget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF0ACB7FCA10D7758DE177D /* InspectionBudget.swift */; }; + 255816A7B82038B2B9780E24 /* TrafficMonitorRulePackStartupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA8D35E21C4BC1F15368DE3 /* TrafficMonitorRulePackStartupTests.swift */; }; + 2560A34A00122DEF53A1C407 /* ProcessResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F2F1F8536857610FB4C9854 /* ProcessResolver.swift */; }; + 268A7C1C22F1C06F7B6DA52C /* AnomalySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = F61F7D8D3D08054C7697792D /* AnomalySettings.swift */; }; + 26C4AD2122DB5A299CA57CE6 /* RulePack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10036A17CDFCA45E068708EE /* RulePack.swift */; }; + 26D43E956CC67CECE784EF26 /* RulePackEventDelivery.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15168A448857A6CC759F7BB /* RulePackEventDelivery.swift */; }; + 274EE87B6A63D7F18C0D0E1E /* DeviceModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD774DADE526BE4F507BE06C /* DeviceModels.swift */; }; + 27B5D51389021FC95AAB2530 /* MockGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC8A1658834152DBFBA4494 /* MockGate.swift */; }; + 27DC00A62F0BCEE6B1FC2B07 /* Focus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC957336FC5BD77D7A81651 /* Focus.swift */; }; + 280B869A858715537934AC50 /* DNSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D61C3343882268C81871C9B /* DNSParser.swift */; }; + 28A7A4AF29B86B1927DBF4D3 /* Guardrail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A65C830B699BC4477CA879 /* Guardrail.swift */; }; + 290D1B10464B9915C1505610 /* RulePackEventDelivery.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15168A448857A6CC759F7BB /* RulePackEventDelivery.swift */; }; + 2A1BCAACA256067CD96D1066 /* AppleSystemApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16976C5552006B1F9975A62 /* AppleSystemApps.swift */; }; + 2AE5BF2C6ADA89975EA76B83 /* AskQueryRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD71004CFB571B9167866770 /* AskQueryRunner.swift */; }; + 2AFEE6E1F9393DE9D219552F /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ACA1ABA6B37B6457004C94A /* NetworkExtension.framework */; }; + 2B6D1084BEC5D8FD8C1340B8 /* RuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EEA2706008C57CB75FB17CD /* RuleTests.swift */; }; + 2C879C6EA95A548B2BC9D9DB /* Guardrail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A65C830B699BC4477CA879 /* Guardrail.swift */; }; + 2D10E8EE0B452C5746D2AF73 /* AgentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5656604B2CFCBB61EFE050C /* AgentCatalog.swift */; }; + 2D89FAAC905437BEC596808B /* ProxyJanitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C18286421CD591157CF1E1FD /* ProxyJanitor.swift */; }; + 2DADC58723CCECF67EAC1613 /* ExtensionRecovery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1218F146542CC01A417469F9 /* ExtensionRecovery.swift */; }; + 2E110029B0BE1C39A967E0CA /* CertificateAuthority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6652559787FD52622A19834A /* CertificateAuthority.swift */; }; + 2F2E867F1E599C48EC6DE525 /* RulePackTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30AC102A5B36107D8B6B31F /* RulePackTransfer.swift */; }; + 2F805A324684FF8CB7E0297B /* HostCanonicalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA83082A5085897BE34D963 /* HostCanonicalizer.swift */; }; + 2F80C3268E914A2041232706 /* TLSSNIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C4444B7A84352BE3672C41 /* TLSSNIParser.swift */; }; + 30733BCFC01E165EFF02EBA2 /* DestinationProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = A62A00EA0C0D8B7844E6F7B2 /* DestinationProfile.swift */; }; + 3144B2FBE6DEA543CA36D1CD /* LLMToolCalls.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAEE09994253E82748BCCCB /* LLMToolCalls.swift */; }; + 315C5531C14F1DDE99043A18 /* DeviceStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC1036E5ABBFDB8740405F3 /* DeviceStore.swift */; }; + 32FCEAF70EBFB57EA5579E96 /* Rule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92BAF46D43D2171398478FC3 /* Rule.swift */; }; + 3570CB0F911ED4160DC8F4BD /* AppleSystemApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16976C5552006B1F9975A62 /* AppleSystemApps.swift */; }; + 35B3F93219A8854FFF1D3EEF /* OnDeviceAsk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEDBAB278885D747B420AD3 /* OnDeviceAsk.swift */; }; + 3607E7DD7A3ABB2C73955832 /* ExtensionTrafficSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95761708CD76CABDF0696BCE /* ExtensionTrafficSource.swift */; }; + 361DD804991495DEEE15121C /* IPCProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A2DDEBC714CDCFDB919F35 /* IPCProtocol.swift */; }; + 362251769AB9DAC1BF063FD0 /* RuleTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD00CA1EF2A7DA909E3A31B5 /* RuleTemplates.swift */; }; + 3654D301BB54F59D172A1668 /* ProxyRelaunch.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAE5D54ABFD08CCFFE447 /* ProxyRelaunch.swift */; }; + 36F61F7BAE54F429B4C19D22 /* Motion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992F80EF7B17CA25C7D83AC8 /* Motion.swift */; }; + 37BAEA33191AFCF7EED18540 /* BlockRules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BC5E16F824FC642C12C8B0 /* BlockRules.swift */; }; + 381C9AC13AAA9CC8D1DCD8FD /* CertificateAuthority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6652559787FD52622A19834A /* CertificateAuthority.swift */; }; + 3860DCC8B5AF2121D11144DE /* InspectionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCB2008E4820D1DE1DE154F /* InspectionRecorder.swift */; }; + 3900BC10AB6AE27C341962CE /* AskQueryRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD71004CFB571B9167866770 /* AskQueryRunner.swift */; }; + 3A12FB5ECC1D6C88CE759CFC /* AgentPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF99FCE4EBE61D20FFC1E2F1 /* AgentPolicy.swift */; }; + 3A195005D8A4580FADEC59A9 /* HTTPDataTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C34C9D0A9B302B4CF4C7125 /* HTTPDataTransport.swift */; }; + 3B1CF30E04CBAAD0EC92DC5B /* ExportModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF216452A0F90D9E90A6BD34 /* ExportModels.swift */; }; + 3BB8B3792AD8FFCDE2B0897A /* ToolResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A7703953570391821257DD /* ToolResults.swift */; }; + 3C257D9C841FEE3F373EA661 /* JSONValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D9926D17DD57B7F97E895C9 /* JSONValue.swift */; }; + 3C3AAF8E67A81B9447144BE2 /* BPFProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20CA8150CA012929A40558FB /* BPFProgram.swift */; }; + 3DB4B694F1FBA50E559F7D9B /* Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33480D5241332B3AA21CBE49 /* Localization.swift */; }; + 3E265CB16F7C94A36ED3D11E /* NetworkChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A21E183B79E3C66146070D /* NetworkChannel.swift */; }; + 3E591F9FC749BBE46FE5C100 /* RemoteAsk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91657F4898EFEBCB551ADD4E /* RemoteAsk.swift */; }; + 3EB92870A15033FFE64CA6A4 /* FocusTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50FB4666B2D07DDE032C87EC /* FocusTests.swift */; }; + 3F09CA57A97AA100EAA0FC26 /* AppRestart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DA4611687EF2F8AADA58A49 /* AppRestart.swift */; }; + 3F90E760FD34949F451FBDF4 /* ExportDisclosure.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF2DEA93C3D6844E3345D2D8 /* ExportDisclosure.swift */; }; + 3FBACA5ECB1C08ED614FDDE7 /* LocalRiskViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461E9D1F76A4F9505335AB87 /* LocalRiskViews.swift */; }; + 3FE68A4EC4BEA3A2B81D069E /* LiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4408358C5CC9516B4C1ABCB /* LiveView.swift */; }; + 41033D5CF2A9446276DADB97 /* AlertsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB04B24A750D5362449F8197 /* AlertsView.swift */; }; + 413D6E44997AA769C597FF23 /* RulePackCatalogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59B40E5AD74F74A029AD46E4 /* RulePackCatalogTests.swift */; }; + 41750EE3E0461E85FC71FBAF /* VersionNameRepairTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F05A2DD30C79643247AF74C9 /* VersionNameRepairTests.swift */; }; + 41EEA62E4E2A0DDC2FA6C7AC /* ExportVisibilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2A4754CFE5FD187CAF66AD /* ExportVisibilityTests.swift */; }; + 42E39E8ADC51DA39DE0784AD /* Motion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992F80EF7B17CA25C7D83AC8 /* Motion.swift */; }; + 42F74C2DB00410D8FB790B70 /* BuiltInRulePacks.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABD4C8B6E3620F5E46C69434 /* BuiltInRulePacks.swift */; }; + 4323C68638C74F3E8D02FA65 /* PluginPackageVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C96560CB05BDDBB136E34B /* PluginPackageVerifier.swift */; }; + 43329736A36E1C4367881E40 /* LocalRiskSettingsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 662F0B94BED1CA47AD516AC9 /* LocalRiskSettingsSection.swift */; }; + 4453A6861DA4D5A8AE3CC793 /* AskChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14C234AF77E7451A1505DDF9 /* AskChart.swift */; }; + 451AB2522DC0E73CF1301EE1 /* FlowlightApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3244269609CC161996866B5 /* FlowlightApp.swift */; }; + 45C6C2569D63744568474B91 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F186517132592B36ED2B9F80 /* main.swift */; }; + 46A21D07D20963DBAC9169F6 /* index.html in Resources */ = {isa = PBXBuildFile; fileRef = 9EF395A2F3D6C97FF9EC53E4 /* index.html */; }; + 46E686B76B70B444AA375FBC /* RewriteRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA3B4EB0E0D40E39CE24E1B /* RewriteRule.swift */; }; + 4767B9EBDCBFD6B3483079B2 /* NetworkScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F383DF6343F2DB3052413C9 /* NetworkScope.swift */; }; + 47F1C0E114B1AFD567C42792 /* ResponseGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9340FE2B6C417D1A19AF54 /* ResponseGate.swift */; }; + 48170BB139B744FAD6513959 /* Guardrail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A65C830B699BC4477CA879 /* Guardrail.swift */; }; + 48330DCACD790F31E072D0B3 /* MCPAttribution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FE9D6F8BA82F3C266E147A /* MCPAttribution.swift */; }; + 489DB4725FD189472CC078BE /* AgentPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B07796D1108F037FF196443 /* AgentPolicyTests.swift */; }; + 48CD1538B6B7899F0B8A83E8 /* official.json in Resources */ = {isa = PBXBuildFile; fileRef = ADDB360F7DA88D34505F4D8A /* official.json */; }; + 4947873A05817C02C14E461D /* CoverageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1C69EEECAA62FC98DBC8CB2 /* CoverageView.swift */; }; + 498E9916E85245C7982E9110 /* LocalRiskAnalysisTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64FEF0DA4ACD3157DA6FA4B3 /* LocalRiskAnalysisTests.swift */; }; + 4A0EDDA9455A32B4A43F42FF /* AppleSystemApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16976C5552006B1F9975A62 /* AppleSystemApps.swift */; }; + 4B0B6CA666157D7B72A8F511 /* LocalRiskViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461E9D1F76A4F9505335AB87 /* LocalRiskViews.swift */; }; + 4B7736E9D3BEAB93A4AA8B4E /* ToolResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A7703953570391821257DD /* ToolResults.swift */; }; + 4BAEC22536747CFB9525934A /* ExportDisclosureSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA72D307E4B1A08BE4B8AEF8 /* ExportDisclosureSheet.swift */; }; + 4C028FF54CB024B6DAEA2DBA /* HTTPHostParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228B5C4135EAD9D85F91ED0E /* HTTPHostParser.swift */; }; + 4D676BCFC2B27CB77015BDFA /* FocusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61080233ED162067497EE2E3 /* FocusView.swift */; }; + 4EF5727ADC37F80E20EF4327 /* TrafficMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC0A436E879000F8F5FF9E7 /* TrafficMonitor.swift */; }; + 4F732CB0B9C2FB627217CC17 /* RulePackCatalogUpdaterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8507D8801643823A18134BF8 /* RulePackCatalogUpdaterTests.swift */; }; + 4F929BE1C94FDF359E1B0F39 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ACA1ABA6B37B6457004C94A /* NetworkExtension.framework */; }; + 50CD7EF8F4121F7DD1C65680 /* RewriteRulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44CCD94E9D554D6DD61486FF /* RewriteRulesView.swift */; }; + 51694FE8AB65C2BC3BD5B21D /* GuardrailsPane.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F08D1913575FFC1F548CAB5 /* GuardrailsPane.swift */; }; + 518B305308454622B576FF3B /* HostCanonicalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA83082A5085897BE34D963 /* HostCanonicalizer.swift */; }; + 52A067CD50920CBDEC98A32F /* Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33480D5241332B3AA21CBE49 /* Localization.swift */; }; + 55434CF888AEE73E90EDA953 /* UpdateVerificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21FEECAD5C958CF49A659E14 /* UpdateVerificationTests.swift */; }; + 55FB36AE92AEF84914CCA6E8 /* RuleTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 254FA06DF59A8410C9BAE161 /* RuleTemplateTests.swift */; }; + 56AE97B7A55B1A70250CAA57 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E49720B1B25DC9EBB2ABA0 /* Constants.swift */; }; + 574A061E9456AD6BD7E3AB5A /* RulePackCatalogUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 738E050AC8811051BF14E529 /* RulePackCatalogUpdater.swift */; }; + 57DADB20CBF7D6EF6F6B8167 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 77D58ED5F4678FC1C2A5634A /* Localizable.strings */; }; + 585CA811DBF12784CBF086EA /* AgentWorkspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E79F3A686C0EC5D7B28E8C /* AgentWorkspace.swift */; }; + 58EB211C6C5B91A0435C5E11 /* PluginScriptRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = E593C4ED11E1BCADD22099E6 /* PluginScriptRunner.swift */; }; + 593C3A02860F39DAC8019A1E /* VersionNamingRegressionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED54978358DD9DE1E792A8B9 /* VersionNamingRegressionTests.swift */; }; + 597FCA0655D52D801C0542F4 /* RuleSimulationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B910FBB81CDAC17AE5ACCEA /* RuleSimulationView.swift */; }; + 59D83ED863E01486B578B923 /* ResponseGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9340FE2B6C417D1A19AF54 /* ResponseGate.swift */; }; + 5A2A8DF18D3C1FC584DAFBEB /* IPCProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A2DDEBC714CDCFDB919F35 /* IPCProtocol.swift */; }; + 5A3B1EB5936B67AD426A5967 /* NetworkChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD9D2D024F76347C8414BD5 /* NetworkChannelTests.swift */; }; + 5A58E6A00FD4F35DA506B390 /* RuleStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97943E847A22CF491FA82084 /* RuleStore.swift */; }; + 5AA48BB88F9E0F6F858DC553 /* BluetoothMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9B6A48D086EF16CF6E438FF /* BluetoothMonitor.swift */; }; + 5B0715A36BAB76BC06AE4052 /* FlowTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8267406A5D7DA536B7A713 /* FlowTracker.swift */; }; + 5D637AB4C3D308EAC8CC9448 /* RulePackDeliveryStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B24C254E2C17056730C06B /* RulePackDeliveryStats.swift */; }; + 5E22345FC07C19F4A32C5002 /* RuleEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08643257F8D11784563BD6CC /* RuleEditor.swift */; }; + 5EC8847DF0E49875B602B9AA /* ExtensionRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2747CAE7AD41663488F0E2B9 /* ExtensionRecoveryTests.swift */; }; + 6034C069D97EE923799AC9B2 /* FlowlightStoreExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 9341EDA5AB3454E82FECD53A /* FlowlightStoreExtension.appex */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 603AE25B0614892F454FE15B /* RulePackCatalogState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC4ADEE1B3578FBC6DFD9B74 /* RulePackCatalogState.swift */; }; + 607A677F2CEE245D16249316 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ACA1ABA6B37B6457004C94A /* NetworkExtension.framework */; }; + 61648ED4A0DBCEC775673448 /* ProtocolCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76792B4893790E9ACD4BFA8B /* ProtocolCatalog.swift */; }; + 623C50C16EB5A7DCA225F775 /* PluginEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A1C1F3361CA62C0D08C168 /* PluginEngine.swift */; }; + 62885CD8C265122129AF78FF /* RulePackCatalogVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C35EF76A8728F308E2D6973A /* RulePackCatalogVerifier.swift */; }; + 62ACF7BF40AB81E4CB9E4478 /* DNSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D61C3343882268C81871C9B /* DNSParser.swift */; }; + 631C449B074FB7E31D887EFC /* PluginModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F902D9D498F399BBDD85E0 /* PluginModels.swift */; }; + 63CBA5AACC00FC44C982ADAF /* AgentLauncher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440DB80190A1847AC834210D /* AgentLauncher.swift */; }; + 643D3B8316459A2CEFBA261F /* NettopTrafficSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 957EEA0C3C7342504E533506 /* NettopTrafficSource.swift */; }; + 64453A2D3AA57975F870BAE4 /* ExportDisclosureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF7C56CAF72886BEB812F8F /* ExportDisclosureTests.swift */; }; + 6464CE699E3EE225BA57C0EF /* DemoInspection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FFEA980768CD488D58CC0B1 /* DemoInspection.swift */; }; + 64D1D0E76973447B888270C1 /* PluginEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A1C1F3361CA62C0D08C168 /* PluginEngine.swift */; }; + 6514A22112924B2965D507DE /* OnDeviceRiskProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74F1DEAAAAAA607CEA5EC303 /* OnDeviceRiskProvider.swift */; }; + 653556BA776A6E7755D3DD53 /* ExportPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD3230056607B454EAC381D /* ExportPayload.swift */; }; + 654EE33CAE5B208F04985952 /* HTTPHostParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228B5C4135EAD9D85F91ED0E /* HTTPHostParser.swift */; }; + 657B4D3A0DC9860BCAA78E25 /* ParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15AF59D58B332F548630D949 /* ParserTests.swift */; }; + 65A926A0C3E7431E89CDC7FE /* AlertsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB04B24A750D5362449F8197 /* AlertsView.swift */; }; + 65C108E51ADCFAE65FE2C8AA /* WindowVisibilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70965BF26E0B4B3F9719122B /* WindowVisibilityTests.swift */; }; + 65DE86F9DCCC5A1293FC29E2 /* SQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D9FCA36BD4A101EA1F02DFF /* SQLite.swift */; }; + 65F285392A51B100F8FD2BBA /* NetworkScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F383DF6343F2DB3052413C9 /* NetworkScope.swift */; }; + 65F6E16AC002847C032ECC48 /* ExportController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C6211A645D4DDF8526DF2 /* ExportController.swift */; }; + 66605C2D5AE7B9D23E83AF0E /* SystemExtensionScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2DD7D42B7798A6C57F8C49E /* SystemExtensionScanTests.swift */; }; + 668FFA90C24788C66043286B /* TrafficModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6096AB6A3EF78490BE10DF50 /* TrafficModels.swift */; }; + 6794B84FCA2A7991AD670BDA /* OnDeviceRiskProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74F1DEAAAAAA607CEA5EC303 /* OnDeviceRiskProvider.swift */; }; + 679B74263454FB76473F1006 /* CaptureWarning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61823557D86136986EEE4A18 /* CaptureWarning.swift */; }; + 67F5BAFB0D59F3692C418D0C /* RuleStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97943E847A22CF491FA82084 /* RuleStore.swift */; }; + 697ACED9A5F7CF5854461210 /* ResponseTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ADADFFC230017F80D707ECE /* ResponseTransformTests.swift */; }; + 6BE9B797667820AD0E72D789 /* RemoteAsk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91657F4898EFEBCB551ADD4E /* RemoteAsk.swift */; }; + 6C3AC854882827BEA6A2B9CB /* TLSSNIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C4444B7A84352BE3672C41 /* TLSSNIParser.swift */; }; + 6C42E5ECB1F31F42DDD421F7 /* RulePackCatalogState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC4ADEE1B3578FBC6DFD9B74 /* RulePackCatalogState.swift */; }; + 6FC332766A183D00E84656E3 /* Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C1CF4C48AA260D71155C022 /* Components.swift */; }; + 70584ACFC97B4A66381BDF95 /* AnomalyEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A2E14BFE5E66664D0A604B /* AnomalyEngine.swift */; }; + 705BEA6B331562969B8FCD26 /* ResponseTransformRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB223BC3AD00430A5673C439 /* ResponseTransformRule.swift */; }; + 70B794AEAC36D7B581841A5D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 615E4FAE5D0865FB1E2492E8 /* Assets.xcassets */; }; + 70CD0A27AAF526B9BB07BBAE /* DevicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2FBA5700CA1489D6740FC8 /* DevicesView.swift */; }; + 7212BA0F348AC67423887CF5 /* DNSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D61C3343882268C81871C9B /* DNSParser.swift */; }; + 72410A21824E39F8FF1854A3 /* RuleSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8BAA4EB36D9B7D7BF56AD1 /* RuleSimulation.swift */; }; + 72FCD2D719346EDC2EE58A6E /* AskFeatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94004173EC96619B41EDF49F /* AskFeatureTests.swift */; }; + 7340527787A47AEDF1FE5991 /* GuardrailStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9195A6149AE1C6628A3E184 /* GuardrailStore.swift */; }; + 739AA7451B3E61F2963C3237 /* RulePackEditorDraft.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089476A21B8A6AE7F3F4A53A /* RulePackEditorDraft.swift */; }; + 742203151D5AF7CC2A2C1440 /* DesignTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF0C2E06D541DAEC1BC5F33 /* DesignTokens.swift */; }; + 7471DD6A1CB6304ECCFD0C3B /* InspectScopeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC2D26D49B4E14A148BE9C6 /* InspectScopeTests.swift */; }; + 7726A81EF6802B2BC4606540 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E49720B1B25DC9EBB2ABA0 /* Constants.swift */; }; + 7732BE202B8D390C8A9A0DE0 /* LLMToolCalls.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAEE09994253E82748BCCCB /* LLMToolCalls.swift */; }; + 77E90A284280B87F30A30487 /* ProtocolCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76792B4893790E9ACD4BFA8B /* ProtocolCatalog.swift */; }; + 780A2B3FCEDB696FC8FBD4AF /* Notifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D1D13FDE75AF5064805D258 /* Notifier.swift */; }; + 78D210201D9072B255C058B1 /* FlowlightApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3244269609CC161996866B5 /* FlowlightApp.swift */; }; + 78FD830C8350A22AD11723EC /* RulePacksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC12B7176A61DD80F12043A /* RulePacksView.swift */; }; + 7A572D1F12B86CB4F91E72A0 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ACA1ABA6B37B6457004C94A /* NetworkExtension.framework */; }; + 7B995B6E769204525B48DDFB /* DemoData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594F3762D9AD6347C83BA710 /* DemoData.swift */; }; + 7BA8D2912D68E61C0523F3B6 /* AskEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7611E8788B3B6AF18F1CEDF7 /* AskEnvironment.swift */; }; + 7BE6EA58391841D37FB1117F /* TrafficTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2FA5540C38FA293E3EB457 /* TrafficTree.swift */; }; + 7C4D73113ECB44CDDAB40D58 /* official.json in Resources */ = {isa = PBXBuildFile; fileRef = ADDB360F7DA88D34505F4D8A /* official.json */; }; + 7C7D39AF8E2C36BE514BF10C /* GuardrailEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15456E37F11CE5E19A124753 /* GuardrailEngine.swift */; }; + 7D0431D1C2B4142A2A3B9A2D /* IPCProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A2DDEBC714CDCFDB919F35 /* IPCProtocol.swift */; }; + 7D613ABDA5085E4150738DA6 /* TrafficSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A370EA2BA551D5351835E6 /* TrafficSource.swift */; }; + 7E1481BA85DDCD19B4972B99 /* AppRestart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DA4611687EF2F8AADA58A49 /* AppRestart.swift */; }; + 7F2257D0029DC85A25033B9B /* PluginModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F902D9D498F399BBDD85E0 /* PluginModels.swift */; }; + 7FBA685D695EA14B08E9F18A /* CaptureAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD4661C1ABB39E65894AE7F /* CaptureAccess.swift */; }; + 807AB517A5ED9EE6738FD707 /* AgentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81434EE3C45929E8A768D42E /* AgentsView.swift */; }; + 80D7CBA2AE6B117ACC0BE7BB /* SettingsEnforcer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8251DBDC21C44CB92CC1C67 /* SettingsEnforcer.swift */; }; + 80FA6E238AC7FDEE36C05B5C /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92FDE4C87CC59491B70BF3F3 /* ContentView.swift */; }; + 81072D7510803E8189EA2671 /* JSONTreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23CAA36BFFADC83D65DBF0FE /* JSONTreeView.swift */; }; + 813089B6205B28E82D260539 /* AgentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5656604B2CFCBB61EFE050C /* AgentCatalog.swift */; }; + 8349898AD32AB76CB57C65D9 /* AskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AE1A6CC673544FCEC9E7F4 /* AskView.swift */; }; + 836D7B339C78B6FC98DD5AA8 /* RulePackTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30AC102A5B36107D8B6B31F /* RulePackTransfer.swift */; }; + 83B35B9C8D236EA11ED27A43 /* DemoData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594F3762D9AD6347C83BA710 /* DemoData.swift */; }; + 83E9F19608C25B32DF8C52AB /* RulePackSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E3B19A61C74DA87F74E4CA /* RulePackSimulation.swift */; }; + 846FECA436B94D952C489DEE /* SharedStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC02CB8000B00C4C0AD84E60 /* SharedStrings.swift */; }; + 84E8F07CBD455A23EE2DF978 /* ExportSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B82FFB06C5A1C98D5E4D7D1 /* ExportSettingsView.swift */; }; + 850653E102AF3CD2C3833524 /* ProcessNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F3F458498856491A40E88C /* ProcessNaming.swift */; }; + 858D19CFF01AFC9E3FF8F364 /* AskProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D59A773537F63761107681A3 /* AskProvider.swift */; }; + 8658DBDD8DE41686E075C7B0 /* DestinationProfileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C46B9250A6ADDFD915500B /* DestinationProfileTests.swift */; }; + 8753FD9223EF6AE4C892DB9A /* RewriteRuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 694D30A62FAF11702B7EF605 /* RewriteRuleTests.swift */; }; + 875CEAD8A14432BD5E46F0DF /* AskController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67763C99431F26FE1D428EA2 /* AskController.swift */; }; + 87B80FD11BAC558198442507 /* TrafficModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6096AB6A3EF78490BE10DF50 /* TrafficModels.swift */; }; + 87E68C01975E4936B8D6A921 /* AskTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB78709D1E01638E63A484D3 /* AskTests.swift */; }; + 87F047938C7E5461658F8CE3 /* Coverage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC52100D779B101B1B2595F /* Coverage.swift */; }; + 88B1D1AFC30EEFB351A2D10F /* USBMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A903BAF9BBDCFEAEC2F023FF /* USBMonitor.swift */; }; + 897D75C0AEE76F10ADF0CD5C /* ResponseTransformRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB223BC3AD00430A5673C439 /* ResponseTransformRule.swift */; }; + 89B09C7F77A5D116433291C5 /* AgentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082111849A66652DD9F1BE01 /* AgentsModel.swift */; }; + 89E518A6DD4F49D012E47AFE /* ActivityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E872723F2D92AA78F7941259 /* ActivityMonitor.swift */; }; + 8A5E37FB8BB6623CEF21420D /* MockRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7FBB33595155CF835AF14D5 /* MockRule.swift */; }; + 8B41FBD2537503B964EC5C81 /* ToolActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B2E7474FB6A7B8B56B98917 /* ToolActivity.swift */; }; + 8B74946210FB3616E1F4ACD1 /* SharedStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC02CB8000B00C4C0AD84E60 /* SharedStrings.swift */; }; + 8BD67221A510AAB93D73CC7D /* MockResponseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E35905A6578A1204796962E /* MockResponseTests.swift */; }; + 8BE14301F6CA5DEF8209A4FC /* BehaviourPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB40E7DB142C886F94FE2448 /* BehaviourPanel.swift */; }; + 8D0ECCF27AEAA38CE6E939B0 /* FilterDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F212ADB3B37A2EF68A7CFB84 /* FilterDataProvider.swift */; }; + 8D0F2F917038A8C52AE9E271 /* UpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC0873969A030F170A6AA3F5 /* UpdateTests.swift */; }; + 8D660394CF2B20BC98E53675 /* UpdateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D210A86033CB79C792000CA2 /* UpdateView.swift */; }; + 8D8D47E8D81B928A8895178A /* ProtocolCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76792B4893790E9ACD4BFA8B /* ProtocolCatalog.swift */; }; + 8DAA531E3904A7B356FE2B77 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4849A413C60A9ABC4F9C16E /* SettingsView.swift */; }; + 8F7C96FA3DFC112A72976562 /* TrafficModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6096AB6A3EF78490BE10DF50 /* TrafficModels.swift */; }; + 8FDF38674C022B58C5E6068F /* RuleSimulationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD9DD248FDC1D5D58EFC726 /* RuleSimulationTests.swift */; }; + 91433E64078D356DD3940C57 /* Rule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92BAF46D43D2171398478FC3 /* Rule.swift */; }; + 9162E455E37916AAD651349B /* AgentPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF99FCE4EBE61D20FFC1E2F1 /* AgentPolicy.swift */; }; + 931D85D9291D5E557B69BD43 /* PluginSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02ACC341615D95ADA623BBEC /* PluginSettingsView.swift */; }; + 93937351BA21608974D54900 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 615E4FAE5D0865FB1E2492E8 /* Assets.xcassets */; }; + 939DB311C31E0F1B33583B8A /* SystemExtensionScan.swift in Sources */ = {isa = PBXBuildFile; fileRef = A617D9483BCC31A0F4200A90 /* SystemExtensionScan.swift */; }; + 93AC6FC795BBEAB3FCFA2C93 /* AskController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67763C99431F26FE1D428EA2 /* AskController.swift */; }; + 93AE87F6497373A647A92DD4 /* USBMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A903BAF9BBDCFEAEC2F023FF /* USBMonitor.swift */; }; + 9524F078035F746A98A5BD1A /* GuardrailTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A401B3A5D8ED9031EAAF03 /* GuardrailTests.swift */; }; + 953BF001428B13E4B3B04D4C /* AppNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0158F10AEABEF28A925E8C3 /* AppNavigation.swift */; }; + 969FC166DAA7623081DA7392 /* RulePackTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30AC102A5B36107D8B6B31F /* RulePackTransfer.swift */; }; + 9767A4CE180F4083B693CC19 /* AgentPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF99FCE4EBE61D20FFC1E2F1 /* AgentPolicy.swift */; }; + 97CE90F39AE2FC5B9E0AD84C /* Notifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D1D13FDE75AF5064805D258 /* Notifier.swift */; }; + 9814BB05A2FC8648EB62145C /* ResponseTransformRulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F8FB5C78D8391B25733C9B /* ResponseTransformRulesView.swift */; }; + 9891F943C7CAD36651D24774 /* ProtocolClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C533BB77B419198656C6284 /* ProtocolClassifier.swift */; }; + 9A03509ED600BF1065FD2800 /* MCPDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6CCA395BF33CDF9F92B725 /* MCPDomains.swift */; }; + 9B22FA903C576B32C9232523 /* DeviceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 638E7A9BEB644503868C49E9 /* DeviceTests.swift */; }; + 9BE0BB0A6D132461427E755B /* UpdateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D210A86033CB79C792000CA2 /* UpdateView.swift */; }; + 9D9CC413EDA13E69B872454F /* BlockRules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BC5E16F824FC642C12C8B0 /* BlockRules.swift */; }; + 9DA08B1BDE7F624176CB2AF2 /* FlowJudgementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CFC920FE55E719B46039E1F /* FlowJudgementTests.swift */; }; + 9DA5CB6639FF673FC53D033A /* ExportController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D2C6211A645D4DDF8526DF2 /* ExportController.swift */; }; + A108B205EE74FC1ADD45FD9E /* CoverageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1C69EEECAA62FC98DBC8CB2 /* CoverageView.swift */; }; + A147D607E84B5B0B102C824A /* RulePack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10036A17CDFCA45E068708EE /* RulePack.swift */; }; + A1DE70B1FFF145A8057E85C4 /* UpdateInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121FF2EBC93394E8EDCFF0BF /* UpdateInstaller.swift */; }; + A224249AD83D44E25C293EC3 /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8974956FEBD82934CA1EB5 /* HTTPStream.swift */; }; + A3417EC0EF2DD2A4D35CAAB5 /* ExportQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719C08673D2446F21DAF9F54 /* ExportQueue.swift */; }; + A3FF156082D5E00D561A7099 /* InsightsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FA151AA64480DAACC602123 /* InsightsPanel.swift */; }; + A48DC12BB97A0E5499A3D87D /* ExtensionTrafficSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95761708CD76CABDF0696BCE /* ExtensionTrafficSource.swift */; }; + A4CEEDBC97449B58C674CD4F /* ProcessLookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = E489125D1DBF3EF98AEED4EB /* ProcessLookup.swift */; }; + A6B2B75108CE6233CD3EDF00 /* InsightsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C0843B4BD70F8F83167F2D3 /* InsightsModel.swift */; }; + A7369F9D640FCFDAC459E5F6 /* CaptureWarning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61823557D86136986EEE4A18 /* CaptureWarning.swift */; }; + A78C8671BF1CC788E969814C /* ExportPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD3230056607B454EAC381D /* ExportPayload.swift */; }; + A8347F99B5A1857DDF39D56F /* RulePackCatalogVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C35EF76A8728F308E2D6973A /* RulePackCatalogVerifier.swift */; }; + A83BA0983BAC28C6E56B49BE /* MCPAttributionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02EE3A99F49A058BF061C147 /* MCPAttributionTests.swift */; }; + A8869D4F16D83EC7120D901E /* PluginStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55A095537DB24454B007D1B /* PluginStore.swift */; }; + A912218AF0A00A7FB4EE5221 /* InsightsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FA151AA64480DAACC602123 /* InsightsPanel.swift */; }; + A9675AD6413CA1740A75CE8F /* JSONValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D9926D17DD57B7F97E895C9 /* JSONValue.swift */; }; + AC5E1A01FEBC6A4C9951353E /* RuleSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8BAA4EB36D9B7D7BF56AD1 /* RuleSimulation.swift */; }; + ACC7529D79C19667761AEAD2 /* RulePackEventDeliveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB0C0840C443F8AEDD254AE0 /* RulePackEventDeliveryTests.swift */; }; + AD57CBF846824C0BE9878BF1 /* LLMFacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95765A2F0D026D17736C9D9D /* LLMFacts.swift */; }; + ADC857099AB3E324DEC334BC /* ProxyJanitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45076E14820DDD4CFF352226 /* ProxyJanitorTests.swift */; }; + AF1BB39DC13C09CAC6253943 /* ProxyJanitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C18286421CD591157CF1E1FD /* ProxyJanitor.swift */; }; + AF8A26B4F8FFA3C94F0D276E /* InspectionProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD96902AACB4B557DEFFBCD /* InspectionProxy.swift */; }; + AF9E41AC8E40F018E642A73E /* MockRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7FBB33595155CF835AF14D5 /* MockRule.swift */; }; + B0140F7BF021D067E67BF817 /* GuardrailStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9195A6149AE1C6628A3E184 /* GuardrailStore.swift */; }; + B13CAA0E1DA5A274F3F4D849 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E49720B1B25DC9EBB2ABA0 /* Constants.swift */; }; + B141482792DF3953D575CFF9 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A12EC605B35B8042A369205 /* libsqlite3.tbd */; }; + B1DCF272AD61D6284A4D63BD /* RulePackDeliveryStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B24C254E2C17056730C06B /* RulePackDeliveryStats.swift */; }; + B1E5CA21DA13E924DD50CB51 /* AgentAttributor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B98E13F994F7E684F57C07 /* AgentAttributor.swift */; }; + B3D4CAEA3D9EB39E1B7BCBA7 /* TrafficMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC0A436E879000F8F5FF9E7 /* TrafficMonitor.swift */; }; + B40A4A6A12B15C206C69FE22 /* BodySearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B95789E8FFF77D3182BADCF /* BodySearchTests.swift */; }; + B4A39C2F0D1B775D59ADC50C /* AskQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415931FB0EB29261A56B90C7 /* AskQuery.swift */; }; + B4C83BAE6447273B72D237AB /* ProxyRelaunch.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAE5D54ABFD08CCFFE447 /* ProxyRelaunch.swift */; }; + B5614834E9118B531713207A /* NetworkChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A21E183B79E3C66146070D /* NetworkChannel.swift */; }; + B5A31798C953DDD61039E82D /* ExtensionRebootTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC63F61F2956394B88C762F4 /* ExtensionRebootTests.swift */; }; + B5E88F4AF351CB717C46B22E /* ResponseScriptRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61D6646248D4CDF3EB86A893 /* ResponseScriptRunner.swift */; }; + B5F94B9F6FC2B75A867FB2F8 /* official-rule-packs-v1-public.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1F49F6CFAF06DFBB9416246D /* official-rule-packs-v1-public.pem */; }; + B766E7284317D94D160C1386 /* AppleSystemAppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF28074238079D33EFB6B862 /* AppleSystemAppTests.swift */; }; + B7D99A1E19A198CB04FDDC73 /* NetworkChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A21E183B79E3C66146070D /* NetworkChannel.swift */; }; + B80FC9A3A8F21AFFCF5149A9 /* IPOwnerLookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B4B0B76D53D8089C95762F /* IPOwnerLookup.swift */; }; + B87A6542EDA6ACDB5B961EFA /* CoverageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD012519AD3D674CC0D35FC /* CoverageTests.swift */; }; + B88D4DE798915EA469DF73B3 /* PacketSniffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F062E6D35F98D8EEF1EBE47C /* PacketSniffer.swift */; }; + B8AF34F3100E3ABF6190BE68 /* FilterDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F212ADB3B37A2EF68A7CFB84 /* FilterDataProvider.swift */; }; + B8B770675C09113D28BDF3F1 /* SettingsEnforcer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8251DBDC21C44CB92CC1C67 /* SettingsEnforcer.swift */; }; + BA072680D0A6AC1C40DB8608 /* Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C1CF4C48AA260D71155C022 /* Components.swift */; }; + BA5C8DE36B0484931B6652E0 /* ProcessLookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = E489125D1DBF3EF98AEED4EB /* ProcessLookup.swift */; }; + BB4533F39F79A5D13D438C34 /* ExtensionRecovery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1218F146542CC01A417469F9 /* ExtensionRecovery.swift */; }; + BBCAB0EE0D040C8BF3E30556 /* TLSSNIParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C4444B7A84352BE3672C41 /* TLSSNIParser.swift */; }; + BC092B149B32D158A62ADB8A /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C087727B358A400DCFD7E0E6 /* JavaScriptCore.framework */; }; + BC84D4873C2547F075562715 /* LocalRiskAnalysis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93E71941B27710D83594A6C5 /* LocalRiskAnalysis.swift */; }; + BD91747457B98A2408D1977D /* MockGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC8A1658834152DBFBA4494 /* MockGate.swift */; }; + BDF6030BBFAE6327B278A128 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E49720B1B25DC9EBB2ABA0 /* Constants.swift */; }; + BEC1503B1920AF74D38E2077 /* RulePackCatalogPersistenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1C1786F72F8D0BC95B9BAC /* RulePackCatalogPersistenceTests.swift */; }; + BF013D373CC9FFFAD75B9C22 /* InspectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE93ABADFF46C961FCABAB8 /* InspectView.swift */; }; + BF89D9E22CBBA7B5ACBD491B /* GuardrailsPane.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F08D1913575FFC1F548CAB5 /* GuardrailsPane.swift */; }; + C030AD2D9C98160C80D356AD /* FlowTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8267406A5D7DA536B7A713 /* FlowTracker.swift */; }; + C05C1729B55B00FC0AF1C20C /* AgentLauncher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440DB80190A1847AC834210D /* AgentLauncher.swift */; }; + C066C0BE0A8B0C621654095F /* LiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4408358C5CC9516B4C1ABCB /* LiveView.swift */; }; + C07CFCE9876D9F55F8BA9C25 /* FlowlightResponseScriptHelper in Embed Dependencies */ = {isa = PBXBuildFile; fileRef = BD0D85E63A3FEC65FE1FD068 /* FlowlightResponseScriptHelper */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + C094B24A112FF0FE00623E9F /* TrafficTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2FA5540C38FA293E3EB457 /* TrafficTree.swift */; }; + C2587EAF39C9E71650F3B6FC /* EnrichmentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89C74F92FC42AE36F5D97F1F /* EnrichmentTests.swift */; }; + C35F10A4B87D29525A740DD5 /* AgentAttributor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B98E13F994F7E684F57C07 /* AgentAttributor.swift */; }; + C456CD5C4C3C603419925D58 /* NetworkChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A21E183B79E3C66146070D /* NetworkChannel.swift */; }; + C49DD542101E64D0EEBD05E4 /* ExportDisclosureSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA72D307E4B1A08BE4B8AEF8 /* ExportDisclosureSheet.swift */; }; + C4F66F4C8F679F53C70399D6 /* MCPAttribution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FE9D6F8BA82F3C266E147A /* MCPAttribution.swift */; }; + C5077734C82AD352CC3EFA5C /* BlockRules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BC5E16F824FC642C12C8B0 /* BlockRules.swift */; }; + C513F5D1936E202D0D6ECEFD /* BuiltInRulePacks.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABD4C8B6E3620F5E46C69434 /* BuiltInRulePacks.swift */; }; + C558099602CDA3A231384EBD /* InstalledApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67F3203B4BE2D664F3B1EC9 /* InstalledApps.swift */; }; + C57A3811A5DB984FC0F2549A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 77D58ED5F4678FC1C2A5634A /* Localizable.strings */; }; + C5E82EFABFE12297251D924C /* BlockRules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BC5E16F824FC642C12C8B0 /* BlockRules.swift */; }; + C62FF7278DAD93AB68B2FFF1 /* WindowVisibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45902808344F173033EB0F5 /* WindowVisibility.swift */; }; + C646009EEAACFFED739EA0E9 /* InspectNavigationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E4E7F1E8B83D086AF0CB1B /* InspectNavigationTests.swift */; }; + C6B736C06DB70C19217FA5AE /* PluginStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55A095537DB24454B007D1B /* PluginStore.swift */; }; + C6E8C518995B36DB53128B05 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A12EC605B35B8042A369205 /* libsqlite3.tbd */; }; + C72889236AE51E71206B2F57 /* ExportQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719C08673D2446F21DAF9F54 /* ExportQueue.swift */; }; + C7798BE6AE9C79EB8BA3576C /* AnomalyEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A2E14BFE5E66664D0A604B /* AnomalyEngine.swift */; }; + C7B4D535CFF9FA9D0DE8D708 /* RulePacksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC12B7176A61DD80F12043A /* RulePacksView.swift */; }; + C7FAFFB62ADB58699720440A /* ExportSecrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AE72E8F916C18A468E968A /* ExportSecrets.swift */; }; + C85056033D72ECD693E4AE7A /* RulePackSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E3B19A61C74DA87F74E4CA /* RulePackSimulation.swift */; }; + C9E61A29C4EA61E978DF7C1A /* ToolCallLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FE7804F3D1F6A247F0C8DF /* ToolCallLinks.swift */; }; + C9F9F6FF27500A2CB5BE992B /* SQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D9FCA36BD4A101EA1F02DFF /* SQLite.swift */; }; + CA9FF629E45A3643774DDACD /* InspectionBudget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF0ACB7FCA10D7758DE177D /* InspectionBudget.swift */; }; + CAE2EEC350E48F001B343DE1 /* ProtocolCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76792B4893790E9ACD4BFA8B /* ProtocolCatalog.swift */; }; + CAFBA60EFEF3BB7D4F8D38E9 /* Guardrail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A65C830B699BC4477CA879 /* Guardrail.swift */; }; + CB731DCD258C0048C4FECDF2 /* MockRulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8406C2280A8FF08E883A1E0 /* MockRulesView.swift */; }; + CC282F84A0B0F97D5007F449 /* AskQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415931FB0EB29261A56B90C7 /* AskQuery.swift */; }; + CD507B163DA11479FAFBF2A6 /* ExtensionSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B2EB4E838E550B396BDB883 /* ExtensionSourceTests.swift */; }; + CDFFBF64E8D14CAB558D87F7 /* CaptureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9F2521A73E6E3264F557E6 /* CaptureView.swift */; }; + CE0458FD46CC7EF3A1379B53 /* ResponseTransformRulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F8FB5C78D8391B25733C9B /* ResponseTransformRulesView.swift */; }; + CE1589D1A40B2EC1084C7A88 /* Rule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92BAF46D43D2171398478FC3 /* Rule.swift */; }; + CF16C383C4E52E86951F7B17 /* RulePackStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B5736850B28B462739C2CD /* RulePackStore.swift */; }; + CF2049DA978EB9588596556F /* RulePack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10036A17CDFCA45E068708EE /* RulePack.swift */; }; + CF8EE120DA5241445ECD1797 /* DeviceStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC1036E5ABBFDB8740405F3 /* DeviceStore.swift */; }; + CF9E8E6FBFB1D1DBD7610DA1 /* ToolCallLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FE7804F3D1F6A247F0C8DF /* ToolCallLinks.swift */; }; + D10DE307D1AD32A7D8173A41 /* HostCanonicalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA83082A5085897BE34D963 /* HostCanonicalizer.swift */; }; + D211B6AF0F0C9ABE3F5D1A57 /* LocalizationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C0F9AC24A75E20F3FA0B2BB /* LocalizationTests.swift */; }; + D30A985B88E65A6F89E9E7E7 /* UpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C9C36E21D6DB161C80DF3F6 /* UpdateChecker.swift */; }; + D30F3B5A02E089EEADBDE98B /* ActivityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E872723F2D92AA78F7941259 /* ActivityMonitor.swift */; }; + D3EB4913132CAEA7FA827B08 /* CaptureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9F2521A73E6E3264F557E6 /* CaptureView.swift */; }; + D4B24A76368B295B8DE8EC0B /* RuleSimulationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B910FBB81CDAC17AE5ACCEA /* RuleSimulationView.swift */; }; + D57246BD18C4FBBCEA71F08A /* InsightsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2A5AC7D1719857AE8ED1CFA /* InsightsTests.swift */; }; + D58E19691840000472807F80 /* MCPDomainsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1888DEE22E9C2FCFB5DC064 /* MCPDomainsSection.swift */; }; + D5C09E269CC11D38728B69FC /* GlobMatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0872CE92A9A3D5A785ECC816 /* GlobMatch.swift */; }; + D5D014F2811B94832DC6CC81 /* bpf-access.sh in Resources */ = {isa = PBXBuildFile; fileRef = 20C95610696E32B96E500E8F /* bpf-access.sh */; }; + D662DA2727A039F0137E0472 /* CaptureAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD4661C1ABB39E65894AE7F /* CaptureAccess.swift */; }; + D688BB9313DA940E107D8237 /* NettopParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 497DF4817317CE033F2A83A2 /* NettopParser.swift */; }; + D690491C9CCCFFA1DE64ECE8 /* BoundedHTTPDataTransportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810530D0FFDE61BE5CDB4CC2 /* BoundedHTTPDataTransportTests.swift */; }; + D698B39BD305EC2E4168B923 /* TrafficSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A370EA2BA551D5351835E6 /* TrafficSource.swift */; }; + D6DB988F5D1D2A3C2A5753E5 /* IPCProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A2DDEBC714CDCFDB919F35 /* IPCProtocol.swift */; }; + D73CBA15CD6E91DE465C0556 /* DesignTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF0C2E06D541DAEC1BC5F33 /* DesignTokens.swift */; }; + D77B6BB95661074A90B12EE7 /* NettopParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 497DF4817317CE033F2A83A2 /* NettopParser.swift */; }; + D9987CC20EB70831208A0430 /* OnDeviceAsk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEDBAB278885D747B420AD3 /* OnDeviceAsk.swift */; }; + DB09CEC00A661AF26C37244E /* DestinationProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = A62A00EA0C0D8B7844E6F7B2 /* DestinationProfile.swift */; }; + DB969099AF17B4E0DBA3034C /* UpdateInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121FF2EBC93394E8EDCFF0BF /* UpdateInstaller.swift */; }; + DBC04B2A1B129C44A3D8A40D /* ProcessNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F3F458498856491A40E88C /* ProcessNaming.swift */; }; + DC7F897C9C4E1E353F05E3A5 /* PluginSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02ACC341615D95ADA623BBEC /* PluginSettingsView.swift */; }; + DC86A6B4919CF1B6D72662FE /* InspectionBudgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F07BDE0C2D8005899C1AF21C /* InspectionBudgetView.swift */; }; + DDC032E6272181F3E1B1BB4F /* ReportsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCD98C0A49FC6C5521129087 /* ReportsView.swift */; }; + DDE2B0B0A807C428B9F78120 /* AgentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5656604B2CFCBB61EFE050C /* AgentCatalog.swift */; }; + DE40C611330AC62B7A53B63C /* AgentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81434EE3C45929E8A768D42E /* AgentsView.swift */; }; + DE472CC9E3475EF582BB706E /* DemoDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83A96A61DE59D2731045A8C /* DemoDataTests.swift */; }; + DED507EF1A36E9B66FE4512E /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8974956FEBD82934CA1EB5 /* HTTPStream.swift */; }; + DEDCFC43A3BBD2E91277302F /* PluginScriptRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = E593C4ED11E1BCADD22099E6 /* PluginScriptRunner.swift */; }; + DF8776D774DE087DBBFB257F /* TrafficDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94538A9E26BCD8960123C7E4 /* TrafficDatabase.swift */; }; + DFC721C64B216FEB81C55917 /* UpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C9C36E21D6DB161C80DF3F6 /* UpdateChecker.swift */; }; + E00C03B4955BFBA626340B5C /* InspectMenuItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406DB466CD32DA8223AE61A6 /* InspectMenuItems.swift */; }; + E09B5E0093DE7BABBC1561DA /* ExtensionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53217054F0EFD8EC322BC5B1 /* ExtensionManager.swift */; }; + E0C3CC3AA91B74C0D98ACE5F /* RulePackSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E3B19A61C74DA87F74E4CA /* RulePackSimulation.swift */; }; + E12E137A657C739019D6F4D3 /* RewriteRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA3B4EB0E0D40E39CE24E1B /* RewriteRule.swift */; }; + E15272D4731FBF6CB1126495 /* JSONTreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23CAA36BFFADC83D65DBF0FE /* JSONTreeView.swift */; }; + E16E772F86A6469231B18EB2 /* RulePackCatalogUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 738E050AC8811051BF14E529 /* RulePackCatalogUpdater.swift */; }; + E25A53EA4362FCC71BCE5A80 /* ExportModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF216452A0F90D9E90A6BD34 /* ExportModels.swift */; }; + E384EA8E1EEBA1689E638B8C /* official-rule-packs-v1-public.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1F49F6CFAF06DFBB9416246D /* official-rule-packs-v1-public.pem */; }; + E3C7DC93B1AC66ECA40B7820 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92FDE4C87CC59491B70BF3F3 /* ContentView.swift */; }; + E3F2CFD47F40B6A9481C5777 /* PluginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D460484C8D6DFA5D495132 /* PluginTests.swift */; }; + E4D30933B930F00B7CAADE20 /* MCPDomainsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1888DEE22E9C2FCFB5DC064 /* MCPDomainsSection.swift */; }; + E592D3A1D73A580676FA5696 /* InspectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE93ABADFF46C961FCABAB8 /* InspectView.swift */; }; + E5973D84F73F277220538694 /* RulePackCatalogComposition.swift in Sources */ = {isa = PBXBuildFile; fileRef = E858E52F162361C6FD039F16 /* RulePackCatalogComposition.swift */; }; + E62BAD317B20BE6E16A21FA3 /* IPCServer.txt in Resources */ = {isa = PBXBuildFile; fileRef = 76B6293D3AAFF511F855C4E6 /* IPCServer.txt */; }; + E69786240DE2CC058F7A307A /* ResponseScriptRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61D6646248D4CDF3EB86A893 /* ResponseScriptRunner.swift */; }; + E6B53114FFB3F672BA02FE69 /* LLMFacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95765A2F0D026D17736C9D9D /* LLMFacts.swift */; }; + E6D43A9CA39D3D205D2FD8EC /* TrafficTreePagingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 158356080B1479D37407B9F7 /* TrafficTreePagingTests.swift */; }; + E7F844DADB9BBF4F5A2024B6 /* InspectionProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD96902AACB4B557DEFFBCD /* InspectionProxy.swift */; }; + E844FB53C6EA5C8BF5F37849 /* NettopTrafficSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 957EEA0C3C7342504E533506 /* NettopTrafficSource.swift */; }; + E88DD26D7D2E9C0E0FBACD6F /* ProtocolClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C533BB77B419198656C6284 /* ProtocolClassifier.swift */; }; + E8F73E4CF1E8701968CB2E96 /* AppLifecycleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D73C529EED550F2BD81CB72 /* AppLifecycleTests.swift */; }; + EA2D23AFA530F762A6901E08 /* AgentWorkspaceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B484EC45F6D3CF2D66D12BE0 /* AgentWorkspaceTests.swift */; }; + EA679C463EB3158EA7195052 /* Coverage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC52100D779B101B1B2595F /* Coverage.swift */; }; + EA73DD364261DB7A3860FCF1 /* AppleSystemApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16976C5552006B1F9975A62 /* AppleSystemApps.swift */; }; + EAA7D632ABC5F2450CDDB68E /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB82D0B63E8C783DD0A4FB5 /* main.swift */; }; + EB842377A7936B0BC9AAEC71 /* BehaviourPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB40E7DB142C886F94FE2448 /* BehaviourPanel.swift */; }; + ECE292CA7FBB8A6CE372B4F5 /* RulePackTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30AC102A5B36107D8B6B31F /* RulePackTransfer.swift */; }; + ED1CF3BBC1C4D317658D07A0 /* ProxyRelaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D29667127E5DE57908D936 /* ProxyRelaunchTests.swift */; }; + ED2148A66082B969315461CA /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F186517132592B36ED2B9F80 /* main.swift */; }; + EDAB8186A2117A6EE711A8B9 /* RulePackStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B5736850B28B462739C2CD /* RulePackStore.swift */; }; + EDB017EC114FFAF18CEC2786 /* PacketSniffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F062E6D35F98D8EEF1EBE47C /* PacketSniffer.swift */; }; + EDEAECD3FA4B513114C0B581 /* CodeSignatureCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168D824382963305ED7E6C04 /* CodeSignatureCheck.swift */; }; + EE32964EF451CD9211A37D6A /* ProcessResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F2F1F8536857610FB4C9854 /* ProcessResolver.swift */; }; + EEA0FEAC3D3CA9C73393EF3E /* AskEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7611E8788B3B6AF18F1CEDF7 /* AskEnvironment.swift */; }; + EF0EBBEAC6177681CBD4F0D7 /* GlobMatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0872CE92A9A3D5A785ECC816 /* GlobMatch.swift */; }; + EF23A175A11656427632BE45 /* AskProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D59A773537F63761107681A3 /* AskProvider.swift */; }; + EF4CBFD483B59B62F3432F3E /* NetworkScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F383DF6343F2DB3052413C9 /* NetworkScope.swift */; }; + EF8276E6A9A832CB5D74AFE3 /* ExportSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B82FFB06C5A1C98D5E4D7D1 /* ExportSettingsView.swift */; }; + EF884A8D586CA5022C4DD01B /* SystemExtensionScan.swift in Sources */ = {isa = PBXBuildFile; fileRef = A617D9483BCC31A0F4200A90 /* SystemExtensionScan.swift */; }; + EFBA053570FE24748547DDB2 /* TrafficDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94538A9E26BCD8960123C7E4 /* TrafficDatabase.swift */; }; + F130AF6A964F77EF85EBB32D /* RuleTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD00CA1EF2A7DA909E3A31B5 /* RuleTemplates.swift */; }; + F1ACC6A35E482FC31C0EA0B1 /* InstalledAppsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D752E3A8C7633C8BC939BE /* InstalledAppsTests.swift */; }; + F205410D7C07CB367224D44F /* ExportSecrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AE72E8F916C18A468E968A /* ExportSecrets.swift */; }; + F2304F128BB915C60307AD44 /* BlockEnforcer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA6FB03454241CB84A9AA13 /* BlockEnforcer.swift */; }; + F26718FE423FEE15B5502B8A /* Rule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92BAF46D43D2171398478FC3 /* Rule.swift */; }; + F454E718DC7E6F7BDA3ECA61 /* RuleSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8BAA4EB36D9B7D7BF56AD1 /* RuleSimulation.swift */; }; + F47E13AFAFF872BB15EA4E59 /* AskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AE1A6CC673544FCEC9E7F4 /* AskView.swift */; }; + F5AE32D382E6DDD1B06783B8 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4849A413C60A9ABC4F9C16E /* SettingsView.swift */; }; + F5F925E03C86F8B023DC788D /* ExtensionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53217054F0EFD8EC322BC5B1 /* ExtensionManager.swift */; }; + F75EB274ED11E8E4225746B2 /* ReportsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCD98C0A49FC6C5521129087 /* ReportsView.swift */; }; + F782A1187A8564DA1C37EDC1 /* DevicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2FBA5700CA1489D6740FC8 /* DevicesView.swift */; }; + F7D8E5F618EF5B76959097BF /* InspectionBudgetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E4DFA9032765BBB7E75706F /* InspectionBudgetTests.swift */; }; + F842F0968BAFF7623B4A86BE /* RulePack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10036A17CDFCA45E068708EE /* RulePack.swift */; }; + F8E48AAE0CDB4DD16025AAEE /* IPOwnerLookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B4B0B76D53D8089C95762F /* IPOwnerLookup.swift */; }; + F9429DCDFAEE199D6635BA33 /* LocalRiskAnalysis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93E71941B27710D83594A6C5 /* LocalRiskAnalysis.swift */; }; + FACBCE71B0804DB4187D132B /* AnswerTextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15380DABDCB2492A132A90E4 /* AnswerTextTests.swift */; }; + FB53CA12F4EA8442D4E773E4 /* IPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8A0C2D83843716604FD3F0 /* IPCServer.swift */; }; + FBE542C1BDCE771392543BD1 /* AppNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0158F10AEABEF28A925E8C3 /* AppNavigation.swift */; }; + FC820F255E16C392B007726B /* RuleSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8BAA4EB36D9B7D7BF56AD1 /* RuleSimulation.swift */; }; + FCD81B854E4C12AA3BE84A4D /* SettingsEnforcerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E1E1E6E8B1C2130BD563759 /* SettingsEnforcerTests.swift */; }; + FD08E709481530B77F4ED795 /* HelpTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 351C523438EA0A811504B57C /* HelpTests.swift */; }; + FE234FA5F34AAB7B7074BDB9 /* InspectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70F169CF4776BE3FAF69AE73 /* InspectionTests.swift */; }; + FE3B0FCAFA812B5CEA810488 /* InspectionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCB2008E4820D1DE1DE154F /* InspectionRecorder.swift */; }; + FECA6CBE50938E777E17D87D /* HTTPHostParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228B5C4135EAD9D85F91ED0E /* HTTPHostParser.swift */; }; + FEE9F18D463C7060E835F757 /* RulePackSimulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E3B19A61C74DA87F74E4CA /* RulePackSimulation.swift */; }; + FF3F2EE3FE29F6827D527B31 /* AgentLauncherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD30777A046F705110A99269 /* AgentLauncherTests.swift */; }; + FF4E47F54DE6A3BCFFEBAA01 /* LocalRiskSettingsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 662F0B94BED1CA47AD516AC9 /* LocalRiskSettingsSection.swift */; }; + FF4E8EC8F36613C1C03549AE /* PluginPackageVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C96560CB05BDDBB136E34B /* PluginPackageVerifier.swift */; }; + FF59AD47E15AFE192913C918 /* RewriteRulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44CCD94E9D554D6DD61486FF /* RewriteRulesView.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 7C42FA3A564662B5DB0FD5BF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 27052BCDFA1783A148CD45FD /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1C9BF0C33D1912981FB4B5AD; + remoteInfo = Flowlight; + }; + 8E69049BBCF586A050AA927F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 27052BCDFA1783A148CD45FD /* Project object */; + proxyType = 1; + remoteGlobalIDString = 36B21D467163CD9F57115778; + remoteInfo = FlowlightResponseScriptHelper; + }; + 8F920FDBFA157B736CCD7ECE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 27052BCDFA1783A148CD45FD /* Project object */; + proxyType = 1; + remoteGlobalIDString = 94D00543044D9B601CDCA877; + remoteInfo = FlowlightExtension; + }; + A212C96A4D9348FC9F87A9EA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 27052BCDFA1783A148CD45FD /* Project object */; + proxyType = 1; + remoteGlobalIDString = 904DAC0BB81071A09FF1A5B0; + remoteInfo = FlowlightStoreExtension; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 32FF3A971C555C5CD158F63B /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 6034C069D97EE923799AC9B2 /* FlowlightStoreExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 645C1B96C25EC035E5415BD4 /* Embed Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ../Library/Helpers; + dstSubfolderSpec = 6; + files = ( + C07CFCE9876D9F55F8BA9C25 /* FlowlightResponseScriptHelper in Embed Dependencies */, + ); + name = "Embed Dependencies"; + runOnlyForDeploymentPostprocessing = 0; + }; + BD32BB41996D3CEEDBC8D17E /* Embed Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ../Library/SystemExtensions; + dstSubfolderSpec = 13; + files = ( + 157717AA8B338201B7C3B4C7 /* FlowlightExtension.systemextension in Embed Dependencies */, + ); + name = "Embed Dependencies"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 02ACC341615D95ADA623BBEC /* PluginSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginSettingsView.swift; sourceTree = ""; }; + 02B5736850B28B462739C2CD /* RulePackStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackStore.swift; sourceTree = ""; }; + 02EE3A99F49A058BF061C147 /* MCPAttributionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MCPAttributionTests.swift; sourceTree = ""; }; + 0599916780428125A134B249 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 06816A9441C5EFEF5EF55CA5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 077EA8EE506D61EC90E4411E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + 07F902D9D498F399BBDD85E0 /* PluginModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginModels.swift; sourceTree = ""; }; + 082111849A66652DD9F1BE01 /* AgentsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentsModel.swift; sourceTree = ""; }; + 08643257F8D11784563BD6CC /* RuleEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleEditor.swift; sourceTree = ""; }; + 0872CE92A9A3D5A785ECC816 /* GlobMatch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobMatch.swift; sourceTree = ""; }; + 089476A21B8A6AE7F3F4A53A /* RulePackEditorDraft.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackEditorDraft.swift; sourceTree = ""; }; + 08A401B3A5D8ED9031EAAF03 /* GuardrailTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardrailTests.swift; sourceTree = ""; }; + 08C5F9CC0D644DCA03F5F4C5 /* RulePackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackTests.swift; sourceTree = ""; }; + 09E79F3A686C0EC5D7B28E8C /* AgentWorkspace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentWorkspace.swift; sourceTree = ""; }; + 0A12EC605B35B8042A369205 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; + 0ADADFFC230017F80D707ECE /* ResponseTransformTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseTransformTests.swift; sourceTree = ""; }; + 0CBBF571DC526F85E7232F79 /* FlowlightTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlowlightTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 0F2F1F8536857610FB4C9854 /* ProcessResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessResolver.swift; sourceTree = ""; }; + 10036A17CDFCA45E068708EE /* RulePack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePack.swift; sourceTree = ""; }; + 10E3B19A61C74DA87F74E4CA /* RulePackSimulation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackSimulation.swift; sourceTree = ""; }; + 11A65C830B699BC4477CA879 /* Guardrail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Guardrail.swift; sourceTree = ""; }; + 1218F146542CC01A417469F9 /* ExtensionRecovery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionRecovery.swift; sourceTree = ""; }; + 121FF2EBC93394E8EDCFF0BF /* UpdateInstaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateInstaller.swift; sourceTree = ""; }; + 13D29667127E5DE57908D936 /* ProxyRelaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyRelaunchTests.swift; sourceTree = ""; }; + 14C234AF77E7451A1505DDF9 /* AskChart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskChart.swift; sourceTree = ""; }; + 15380DABDCB2492A132A90E4 /* AnswerTextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnswerTextTests.swift; sourceTree = ""; }; + 15456E37F11CE5E19A124753 /* GuardrailEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardrailEngine.swift; sourceTree = ""; }; + 158356080B1479D37407B9F7 /* TrafficTreePagingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficTreePagingTests.swift; sourceTree = ""; }; + 15AF59D58B332F548630D949 /* ParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParserTests.swift; sourceTree = ""; }; + 15E51941A085C6B16AF395BB /* InspectionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionController.swift; sourceTree = ""; }; + 168D824382963305ED7E6C04 /* CodeSignatureCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeSignatureCheck.swift; sourceTree = ""; }; + 1B2E7474FB6A7B8B56B98917 /* ToolActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolActivity.swift; sourceTree = ""; }; + 1B2EB4E838E550B396BDB883 /* ExtensionSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionSourceTests.swift; sourceTree = ""; }; + 1C63D0070EAC9A8146D63ABD /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; + 1D0AA61D989998AB7A90CDDB /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + 1F49F6CFAF06DFBB9416246D /* official-rule-packs-v1-public.pem */ = {isa = PBXFileReference; path = "official-rule-packs-v1-public.pem"; sourceTree = ""; }; + 1FD96902AACB4B557DEFFBCD /* InspectionProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionProxy.swift; sourceTree = ""; }; + 20C95610696E32B96E500E8F /* bpf-access.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "bpf-access.sh"; sourceTree = ""; }; + 20CA8150CA012929A40558FB /* BPFProgram.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BPFProgram.swift; sourceTree = ""; }; + 21A2E14BFE5E66664D0A604B /* AnomalyEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnomalyEngine.swift; sourceTree = ""; }; + 21FEECAD5C958CF49A659E14 /* UpdateVerificationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateVerificationTests.swift; sourceTree = ""; }; + 228B5C4135EAD9D85F91ED0E /* HTTPHostParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPHostParser.swift; sourceTree = ""; }; + 22C46B9250A6ADDFD915500B /* DestinationProfileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DestinationProfileTests.swift; sourceTree = ""; }; + 22D460484C8D6DFA5D495132 /* PluginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginTests.swift; sourceTree = ""; }; + 23CAA36BFFADC83D65DBF0FE /* JSONTreeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONTreeView.swift; sourceTree = ""; }; + 254FA06DF59A8410C9BAE161 /* RuleTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleTemplateTests.swift; sourceTree = ""; }; + 2747CAE7AD41663488F0E2B9 /* ExtensionRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionRecoveryTests.swift; sourceTree = ""; }; + 2B82FFB06C5A1C98D5E4D7D1 /* ExportSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportSettingsView.swift; sourceTree = ""; }; + 2B95789E8FFF77D3182BADCF /* BodySearchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BodySearchTests.swift; sourceTree = ""; }; + 2CC957336FC5BD77D7A81651 /* Focus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Focus.swift; sourceTree = ""; }; + 2CFC920FE55E719B46039E1F /* FlowJudgementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlowJudgementTests.swift; sourceTree = ""; }; + 2D1D13FDE75AF5064805D258 /* Notifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifier.swift; sourceTree = ""; }; + 2D6CCA395BF33CDF9F92B725 /* MCPDomains.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MCPDomains.swift; sourceTree = ""; }; + 2E1E1E6E8B1C2130BD563759 /* SettingsEnforcerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEnforcerTests.swift; sourceTree = ""; }; + 2E35905A6578A1204796962E /* MockResponseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockResponseTests.swift; sourceTree = ""; }; + 2E4DFA9032765BBB7E75706F /* InspectionBudgetTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionBudgetTests.swift; sourceTree = ""; }; + 33480D5241332B3AA21CBE49 /* Localization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Localization.swift; sourceTree = ""; }; + 34AD2BFFA35727FB39287960 /* MCPDomainsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MCPDomainsTests.swift; sourceTree = ""; }; + 351C523438EA0A811504B57C /* HelpTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpTests.swift; sourceTree = ""; }; + 37AE72E8F916C18A468E968A /* ExportSecrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportSecrets.swift; sourceTree = ""; }; + 37FE9D6F8BA82F3C266E147A /* MCPAttribution.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MCPAttribution.swift; sourceTree = ""; }; + 38E49720B1B25DC9EBB2ABA0 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 3B07796D1108F037FF196443 /* AgentPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentPolicyTests.swift; sourceTree = ""; }; + 3B2FA5540C38FA293E3EB457 /* TrafficTree.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficTree.swift; sourceTree = ""; }; + 3C1CF4C48AA260D71155C022 /* Components.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Components.swift; sourceTree = ""; }; + 3C533BB77B419198656C6284 /* ProtocolClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProtocolClassifier.swift; sourceTree = ""; }; + 3C8267406A5D7DA536B7A713 /* FlowTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlowTracker.swift; sourceTree = ""; }; + 3D61C3343882268C81871C9B /* DNSParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DNSParser.swift; sourceTree = ""; }; + 3EA83082A5085897BE34D963 /* HostCanonicalizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostCanonicalizer.swift; sourceTree = ""; }; + 3FD3230056607B454EAC381D /* ExportPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportPayload.swift; sourceTree = ""; }; + 3FD4661C1ABB39E65894AE7F /* CaptureAccess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptureAccess.swift; sourceTree = ""; }; + 4017B3BE9E7FC6895D23FB6C /* Flowlight-AppStore.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Flowlight-AppStore.entitlements"; sourceTree = ""; }; + 406DB466CD32DA8223AE61A6 /* InspectMenuItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectMenuItems.swift; sourceTree = ""; }; + 415931FB0EB29261A56B90C7 /* AskQuery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskQuery.swift; sourceTree = ""; }; + 41AE1A6CC673544FCEC9E7F4 /* AskView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskView.swift; sourceTree = ""; }; + 41B98E13F994F7E684F57C07 /* AgentAttributor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentAttributor.swift; sourceTree = ""; }; + 440DB80190A1847AC834210D /* AgentLauncher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentLauncher.swift; sourceTree = ""; }; + 44CCD94E9D554D6DD61486FF /* RewriteRulesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewriteRulesView.swift; sourceTree = ""; }; + 45076E14820DDD4CFF352226 /* ProxyJanitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyJanitorTests.swift; sourceTree = ""; }; + 461E9D1F76A4F9505335AB87 /* LocalRiskViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalRiskViews.swift; sourceTree = ""; }; + 48B24C254E2C17056730C06B /* RulePackDeliveryStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackDeliveryStats.swift; sourceTree = ""; }; + 497DF4817317CE033F2A83A2 /* NettopParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NettopParser.swift; sourceTree = ""; }; + 4D2C6211A645D4DDF8526DF2 /* ExportController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportController.swift; sourceTree = ""; }; + 4D73C529EED550F2BD81CB72 /* AppLifecycleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLifecycleTests.swift; sourceTree = ""; }; + 4D9926D17DD57B7F97E895C9 /* JSONValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONValue.swift; sourceTree = ""; }; + 4EEDBAB278885D747B420AD3 /* OnDeviceAsk.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnDeviceAsk.swift; sourceTree = ""; }; + 4F2FBA5700CA1489D6740FC8 /* DevicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DevicesView.swift; sourceTree = ""; }; + 4F383DF6343F2DB3052413C9 /* NetworkScope.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkScope.swift; sourceTree = ""; }; + 50FB4666B2D07DDE032C87EC /* FocusTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusTests.swift; sourceTree = ""; }; + 53217054F0EFD8EC322BC5B1 /* ExtensionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionManager.swift; sourceTree = ""; }; + 594F3762D9AD6347C83BA710 /* DemoData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoData.swift; sourceTree = ""; }; + 59A21E183B79E3C66146070D /* NetworkChannel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkChannel.swift; sourceTree = ""; }; + 59B40E5AD74F74A029AD46E4 /* RulePackCatalogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogTests.swift; sourceTree = ""; }; + 5B9F2521A73E6E3264F557E6 /* CaptureView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptureView.swift; sourceTree = ""; }; + 5BC2D26D49B4E14A148BE9C6 /* InspectScopeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectScopeTests.swift; sourceTree = ""; }; + 5C0F9AC24A75E20F3FA0B2BB /* LocalizationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationTests.swift; sourceTree = ""; }; + 5C34C9D0A9B302B4CF4C7125 /* HTTPDataTransport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPDataTransport.swift; sourceTree = ""; }; + 5D8BAA4EB36D9B7D7BF56AD1 /* RuleSimulation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleSimulation.swift; sourceTree = ""; }; + 6053ADC7641DB8CAEA9390D6 /* FlowlightAppStore.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FlowlightAppStore.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6096AB6A3EF78490BE10DF50 /* TrafficModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficModels.swift; sourceTree = ""; }; + 61080233ED162067497EE2E3 /* FocusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusView.swift; sourceTree = ""; }; + 615E4FAE5D0865FB1E2492E8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 61823557D86136986EEE4A18 /* CaptureWarning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptureWarning.swift; sourceTree = ""; }; + 61D6646248D4CDF3EB86A893 /* ResponseScriptRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseScriptRunner.swift; sourceTree = ""; }; + 62444723DE772055CA79A923 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 638E7A9BEB644503868C49E9 /* DeviceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceTests.swift; sourceTree = ""; }; + 64FEF0DA4ACD3157DA6FA4B3 /* LocalRiskAnalysisTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalRiskAnalysisTests.swift; sourceTree = ""; }; + 662F0B94BED1CA47AD516AC9 /* LocalRiskSettingsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalRiskSettingsSection.swift; sourceTree = ""; }; + 6652559787FD52622A19834A /* CertificateAuthority.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertificateAuthority.swift; sourceTree = ""; }; + 67763C99431F26FE1D428EA2 /* AskController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskController.swift; sourceTree = ""; }; + 694D30A62FAF11702B7EF605 /* RewriteRuleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewriteRuleTests.swift; sourceTree = ""; }; + 6AF0ACB7FCA10D7758DE177D /* InspectionBudget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionBudget.swift; sourceTree = ""; }; + 6E8974956FEBD82934CA1EB5 /* HTTPStream.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPStream.swift; sourceTree = ""; }; + 6F9EEC138B6EE3479F9F10E0 /* Flowlight.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Flowlight.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7075FF219DB5D21F32149FE5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + 70965BF26E0B4B3F9719122B /* WindowVisibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowVisibilityTests.swift; sourceTree = ""; }; + 70F169CF4776BE3FAF69AE73 /* InspectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionTests.swift; sourceTree = ""; }; + 719C08673D2446F21DAF9F54 /* ExportQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportQueue.swift; sourceTree = ""; }; + 738E050AC8811051BF14E529 /* RulePackCatalogUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogUpdater.swift; sourceTree = ""; }; + 74F1DEAAAAAA607CEA5EC303 /* OnDeviceRiskProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnDeviceRiskProvider.swift; sourceTree = ""; }; + 7611E8788B3B6AF18F1CEDF7 /* AskEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskEnvironment.swift; sourceTree = ""; }; + 76792B4893790E9ACD4BFA8B /* ProtocolCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProtocolCatalog.swift; sourceTree = ""; }; + 76B6293D3AAFF511F855C4E6 /* IPCServer.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = IPCServer.txt; sourceTree = ""; }; + 76D752E3A8C7633C8BC939BE /* InstalledAppsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstalledAppsTests.swift; sourceTree = ""; }; + 78D5C4691F1B4DFDDCC1A705 /* BoundedHTTPDataTransport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoundedHTTPDataTransport.swift; sourceTree = ""; }; + 7BA6FB03454241CB84A9AA13 /* BlockEnforcer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockEnforcer.swift; sourceTree = ""; }; + 7EEA2706008C57CB75FB17CD /* RuleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleTests.swift; sourceTree = ""; }; + 7FA151AA64480DAACC602123 /* InsightsPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsightsPanel.swift; sourceTree = ""; }; + 80BC5E16F824FC642C12C8B0 /* BlockRules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockRules.swift; sourceTree = ""; }; + 810530D0FFDE61BE5CDB4CC2 /* BoundedHTTPDataTransportTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoundedHTTPDataTransportTests.swift; sourceTree = ""; }; + 81434EE3C45929E8A768D42E /* AgentsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentsView.swift; sourceTree = ""; }; + 81F190466C9691ADAF7BC8DA /* SystemExtensions.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemExtensions.framework; path = System/Library/Frameworks/SystemExtensions.framework; sourceTree = SDKROOT; }; + 82D568056D9E6FACAC42D563 /* FeatureGuide.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureGuide.swift; sourceTree = ""; }; + 8507D8801643823A18134BF8 /* RulePackCatalogUpdaterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogUpdaterTests.swift; sourceTree = ""; }; + 88962BAF6E215B83FE0AFF9A /* RulesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulesView.swift; sourceTree = ""; }; + 89C74F92FC42AE36F5D97F1F /* EnrichmentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnrichmentTests.swift; sourceTree = ""; }; + 8ACA1ABA6B37B6457004C94A /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; }; + 8CB82D0B63E8C783DD0A4FB5 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; + 8E01AEB9AB4F8723FFFA4BFB /* ExportTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportTests.swift; sourceTree = ""; }; + 8EF576B7B41898D84B4E487F /* Info-AppStore.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-AppStore.plist"; sourceTree = ""; }; + 8F08D1913575FFC1F548CAB5 /* GuardrailsPane.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardrailsPane.swift; sourceTree = ""; }; + 91657F4898EFEBCB551ADD4E /* RemoteAsk.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteAsk.swift; sourceTree = ""; }; + 92BAF46D43D2171398478FC3 /* Rule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Rule.swift; sourceTree = ""; }; + 92FDE4C87CC59491B70BF3F3 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 9341EDA5AB3454E82FECD53A /* FlowlightStoreExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = FlowlightStoreExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 93E71941B27710D83594A6C5 /* LocalRiskAnalysis.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalRiskAnalysis.swift; sourceTree = ""; }; + 94004173EC96619B41EDF49F /* AskFeatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskFeatureTests.swift; sourceTree = ""; }; + 94538A9E26BCD8960123C7E4 /* TrafficDatabase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficDatabase.swift; sourceTree = ""; }; + 94F3F458498856491A40E88C /* ProcessNaming.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessNaming.swift; sourceTree = ""; }; + 95761708CD76CABDF0696BCE /* ExtensionTrafficSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionTrafficSource.swift; sourceTree = ""; }; + 95765A2F0D026D17736C9D9D /* LLMFacts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMFacts.swift; sourceTree = ""; }; + 957EEA0C3C7342504E533506 /* NettopTrafficSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NettopTrafficSource.swift; sourceTree = ""; }; + 96A2DDEBC714CDCFDB919F35 /* IPCProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPCProtocol.swift; sourceTree = ""; }; + 97943E847A22CF491FA82084 /* RuleStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleStore.swift; sourceTree = ""; }; + 98FE7804F3D1F6A247F0C8DF /* ToolCallLinks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolCallLinks.swift; sourceTree = ""; }; + 992F80EF7B17CA25C7D83AC8 /* Motion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Motion.swift; sourceTree = ""; }; + 9970A61AD194525C58096029 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + 9B910FBB81CDAC17AE5ACCEA /* RuleSimulationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleSimulationView.swift; sourceTree = ""; }; + 9C0843B4BD70F8F83167F2D3 /* InsightsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsightsModel.swift; sourceTree = ""; }; + 9C9C36E21D6DB161C80DF3F6 /* UpdateChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateChecker.swift; sourceTree = ""; }; + 9CC12B7176A61DD80F12043A /* RulePacksView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePacksView.swift; sourceTree = ""; }; + 9D6A2870B379B2C1C171C7A3 /* DatabaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseTests.swift; sourceTree = ""; }; + 9D9FCA36BD4A101EA1F02DFF /* SQLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SQLite.swift; sourceTree = ""; }; + 9DA4611687EF2F8AADA58A49 /* AppRestart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRestart.swift; sourceTree = ""; }; + 9EC52100D779B101B1B2595F /* Coverage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Coverage.swift; sourceTree = ""; }; + 9EF395A2F3D6C97FF9EC53E4 /* index.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + 9FFEA980768CD488D58CC0B1 /* DemoInspection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoInspection.swift; sourceTree = ""; }; + A0A1C1F3361CA62C0D08C168 /* PluginEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginEngine.swift; sourceTree = ""; }; + A15168A448857A6CC759F7BB /* RulePackEventDelivery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackEventDelivery.swift; sourceTree = ""; }; + A2A5AC7D1719857AE8ED1CFA /* InsightsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsightsTests.swift; sourceTree = ""; }; + A30AC102A5B36107D8B6B31F /* RulePackTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackTransfer.swift; sourceTree = ""; }; + A55A095537DB24454B007D1B /* PluginStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginStore.swift; sourceTree = ""; }; + A5A9D356FF073F1DA1C05522 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + A617D9483BCC31A0F4200A90 /* SystemExtensionScan.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemExtensionScan.swift; sourceTree = ""; }; + A62A00EA0C0D8B7844E6F7B2 /* DestinationProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DestinationProfile.swift; sourceTree = ""; }; + A7BDAE5D54ABFD08CCFFE447 /* ProxyRelaunch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyRelaunch.swift; sourceTree = ""; }; + A903BAF9BBDCFEAEC2F023FF /* USBMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = USBMonitor.swift; sourceTree = ""; }; + A95B12B83D0B4346AF52BDA6 /* FlowlightExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = FlowlightExtension.entitlements; sourceTree = ""; }; + AA72D307E4B1A08BE4B8AEF8 /* ExportDisclosureSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportDisclosureSheet.swift; sourceTree = ""; }; + AA9340FE2B6C417D1A19AF54 /* ResponseGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseGate.swift; sourceTree = ""; }; + AAD9DD248FDC1D5D58EFC726 /* RuleSimulationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleSimulationTests.swift; sourceTree = ""; }; + AB0C0840C443F8AEDD254AE0 /* RulePackEventDeliveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackEventDeliveryTests.swift; sourceTree = ""; }; + ABD4C8B6E3620F5E46C69434 /* BuiltInRulePacks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuiltInRulePacks.swift; sourceTree = ""; }; + AC02CB8000B00C4C0AD84E60 /* SharedStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedStrings.swift; sourceTree = ""; }; + AC8A0C2D83843716604FD3F0 /* IPCServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPCServer.swift; sourceTree = ""; }; + ADD9D2D024F76347C8414BD5 /* NetworkChannelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkChannelTests.swift; sourceTree = ""; }; + ADDB360F7DA88D34505F4D8A /* official.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = official.json; sourceTree = ""; }; + AE2A4754CFE5FD187CAF66AD /* ExportVisibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportVisibilityTests.swift; sourceTree = ""; }; + AEB593C0CD03CAA473F143ED /* Flowlight.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Flowlight.entitlements; sourceTree = ""; }; + AF8F5D7CBCD592768D4C3F2E /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + AF99FCE4EBE61D20FFC1E2F1 /* AgentPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentPolicy.swift; sourceTree = ""; }; + AFA3B4EB0E0D40E39CE24E1B /* RewriteRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewriteRule.swift; sourceTree = ""; }; + AFAEE09994253E82748BCCCB /* LLMToolCalls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMToolCalls.swift; sourceTree = ""; }; + B0158F10AEABEF28A925E8C3 /* AppNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppNavigation.swift; sourceTree = ""; }; + B1888DEE22E9C2FCFB5DC064 /* MCPDomainsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MCPDomainsSection.swift; sourceTree = ""; }; + B1C69EEECAA62FC98DBC8CB2 /* CoverageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoverageView.swift; sourceTree = ""; }; + B3244269609CC161996866B5 /* FlowlightApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlowlightApp.swift; sourceTree = ""; }; + B4849A413C60A9ABC4F9C16E /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + B484EC45F6D3CF2D66D12BE0 /* AgentWorkspaceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentWorkspaceTests.swift; sourceTree = ""; }; + B545B09C3EE58C355E7D048A /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + B5C4444B7A84352BE3672C41 /* TLSSNIParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TLSSNIParser.swift; sourceTree = ""; }; + B9B6A48D086EF16CF6E438FF /* BluetoothMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetoothMonitor.swift; sourceTree = ""; }; + BB40E7DB142C886F94FE2448 /* BehaviourPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BehaviourPanel.swift; sourceTree = ""; }; + BD0D85E63A3FEC65FE1FD068 /* FlowlightResponseScriptHelper */ = {isa = PBXFileReference; includeInIndex = 0; path = FlowlightResponseScriptHelper; sourceTree = BUILT_PRODUCTS_DIR; }; + BF216452A0F90D9E90A6BD34 /* ExportModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportModels.swift; sourceTree = ""; }; + BFE93ABADFF46C961FCABAB8 /* InspectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectView.swift; sourceTree = ""; }; + C087727B358A400DCFD7E0E6 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + C18286421CD591157CF1E1FD /* ProxyJanitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyJanitor.swift; sourceTree = ""; }; + C35EF76A8728F308E2D6973A /* RulePackCatalogVerifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogVerifier.swift; sourceTree = ""; }; + C3E4E7F1E8B83D086AF0CB1B /* InspectNavigationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectNavigationTests.swift; sourceTree = ""; }; + C4A370EA2BA551D5351835E6 /* TrafficSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficSource.swift; sourceTree = ""; }; + C8251DBDC21C44CB92CC1C67 /* SettingsEnforcer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEnforcer.swift; sourceTree = ""; }; + CAC8A1658834152DBFBA4494 /* MockGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockGate.swift; sourceTree = ""; }; + CB1C1786F72F8D0BC95B9BAC /* RulePackCatalogPersistenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogPersistenceTests.swift; sourceTree = ""; }; + CB78709D1E01638E63A484D3 /* AskTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskTests.swift; sourceTree = ""; }; + CCA8D35E21C4BC1F15368DE3 /* TrafficMonitorRulePackStartupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficMonitorRulePackStartupTests.swift; sourceTree = ""; }; + CD774DADE526BE4F507BE06C /* DeviceModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceModels.swift; sourceTree = ""; }; + CF28074238079D33EFB6B862 /* AppleSystemAppTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleSystemAppTests.swift; sourceTree = ""; }; + CF2DEA93C3D6844E3345D2D8 /* ExportDisclosure.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportDisclosure.swift; sourceTree = ""; }; + CFC1036E5ABBFDB8740405F3 /* DeviceStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceStore.swift; sourceTree = ""; }; + D16976C5552006B1F9975A62 /* AppleSystemApps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleSystemApps.swift; sourceTree = ""; }; + D1C046DCF0CB1227CA93DA24 /* FlowlightExtension.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = FlowlightExtension.systemextension; sourceTree = BUILT_PRODUCTS_DIR; }; + D210A86033CB79C792000CA2 /* UpdateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateView.swift; sourceTree = ""; }; + D2DD7D42B7798A6C57F8C49E /* SystemExtensionScanTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemExtensionScanTests.swift; sourceTree = ""; }; + D5656604B2CFCBB61EFE050C /* AgentCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentCatalog.swift; sourceTree = ""; }; + D59A773537F63761107681A3 /* AskProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskProvider.swift; sourceTree = ""; }; + D7DE406298624DC5F3A82A22 /* FlowlightExtension-AppStore.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "FlowlightExtension-AppStore.entitlements"; sourceTree = ""; }; + D9195A6149AE1C6628A3E184 /* GuardrailStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuardrailStore.swift; sourceTree = ""; }; + DB223BC3AD00430A5673C439 /* ResponseTransformRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseTransformRule.swift; sourceTree = ""; }; + DBC0A436E879000F8F5FF9E7 /* TrafficMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrafficMonitor.swift; sourceTree = ""; }; + DC8F91DE12A1C58BB2BD7038 /* AgentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentTests.swift; sourceTree = ""; }; + DCCB2008E4820D1DE1DE154F /* InspectionRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionRecorder.swift; sourceTree = ""; }; + DCF7C56CAF72886BEB812F8F /* ExportDisclosureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportDisclosureTests.swift; sourceTree = ""; }; + DD30777A046F705110A99269 /* AgentLauncherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentLauncherTests.swift; sourceTree = ""; }; + DD71004CFB571B9167866770 /* AskQueryRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskQueryRunner.swift; sourceTree = ""; }; + E45902808344F173033EB0F5 /* WindowVisibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowVisibility.swift; sourceTree = ""; }; + E489125D1DBF3EF98AEED4EB /* ProcessLookup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessLookup.swift; sourceTree = ""; }; + E593C4ED11E1BCADD22099E6 /* PluginScriptRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginScriptRunner.swift; sourceTree = ""; }; + E6A7703953570391821257DD /* ToolResults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolResults.swift; sourceTree = ""; }; + E7FBB33595155CF835AF14D5 /* MockRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockRule.swift; sourceTree = ""; }; + E83A96A61DE59D2731045A8C /* DemoDataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoDataTests.swift; sourceTree = ""; }; + E858E52F162361C6FD039F16 /* RulePackCatalogComposition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogComposition.swift; sourceTree = ""; }; + E872723F2D92AA78F7941259 /* ActivityMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityMonitor.swift; sourceTree = ""; }; + EB04B24A750D5362449F8197 /* AlertsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertsView.swift; sourceTree = ""; }; + EBD012519AD3D674CC0D35FC /* CoverageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoverageTests.swift; sourceTree = ""; }; + EC292A1F1020AAA580DA3CDB /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + EC63F61F2956394B88C762F4 /* ExtensionRebootTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionRebootTests.swift; sourceTree = ""; }; + ED54978358DD9DE1E792A8B9 /* VersionNamingRegressionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionNamingRegressionTests.swift; sourceTree = ""; }; + EFF0C2E06D541DAEC1BC5F33 /* DesignTokens.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DesignTokens.swift; sourceTree = ""; }; + F05A2DD30C79643247AF74C9 /* VersionNameRepairTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionNameRepairTests.swift; sourceTree = ""; }; + F062E6D35F98D8EEF1EBE47C /* PacketSniffer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketSniffer.swift; sourceTree = ""; }; + F07BDE0C2D8005899C1AF21C /* InspectionBudgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectionBudgetView.swift; sourceTree = ""; }; + F186517132592B36ED2B9F80 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; + F212ADB3B37A2EF68A7CFB84 /* FilterDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterDataProvider.swift; sourceTree = ""; }; + F3C96560CB05BDDBB136E34B /* PluginPackageVerifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginPackageVerifier.swift; sourceTree = ""; }; + F4408358C5CC9516B4C1ABCB /* LiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveView.swift; sourceTree = ""; }; + F529FE0E06B11298D8CD1E90 /* BlockingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockingTests.swift; sourceTree = ""; }; + F61F7D8D3D08054C7697792D /* AnomalySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnomalySettings.swift; sourceTree = ""; }; + F67F3203B4BE2D664F3B1EC9 /* InstalledApps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstalledApps.swift; sourceTree = ""; }; + F6B4B0B76D53D8089C95762F /* IPOwnerLookup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPOwnerLookup.swift; sourceTree = ""; }; + F8406C2280A8FF08E883A1E0 /* MockRulesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockRulesView.swift; sourceTree = ""; }; + F8F8FB5C78D8391B25733C9B /* ResponseTransformRulesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseTransformRulesView.swift; sourceTree = ""; }; + FC0873969A030F170A6AA3F5 /* UpdateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateTests.swift; sourceTree = ""; }; + FC4ADEE1B3578FBC6DFD9B74 /* RulePackCatalogState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulePackCatalogState.swift; sourceTree = ""; }; + FCD98C0A49FC6C5521129087 /* ReportsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportsView.swift; sourceTree = ""; }; + FD00CA1EF2A7DA909E3A31B5 /* RuleTemplates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleTemplates.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2D134D9B93ED0CF9B46F2117 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4F929BE1C94FDF359E1B0F39 /* NetworkExtension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4A59E2EDCDD8E4A557ED627B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BC092B149B32D158A62ADB8A /* JavaScriptCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79DC5CAE407312B80BF20233 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B141482792DF3953D575CFF9 /* libsqlite3.tbd in Frameworks */, + 7A572D1F12B86CB4F91E72A0 /* NetworkExtension.framework in Frameworks */, + 06C9D883620A08BF10DBF82A /* SystemExtensions.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 983145C81A2D24465E7F44B6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C6E8C518995B36DB53128B05 /* libsqlite3.tbd in Frameworks */, + 2AFEE6E1F9393DE9D219552F /* NetworkExtension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B516522A2EB85C9D1E4298D8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 607A677F2CEE245D16249316 /* NetworkExtension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 01638FD6753C2AF708F580CA /* docs */ = { + isa = PBXGroup; + children = ( + 05B37DCC5CE723AABF1262DF /* docs */, + ); + path = docs; + sourceTree = ""; + }; + 05B37DCC5CE723AABF1262DF /* docs */ = { + isa = PBXGroup; + children = ( + 9EF395A2F3D6C97FF9EC53E4 /* index.html */, + ); + path = docs; + sourceTree = ""; + }; + 0CE3576DC40E71590960E248 /* Enrichment */ = { + isa = PBXGroup; + children = ( + 20CA8150CA012929A40558FB /* BPFProgram.swift */, + 3FD4661C1ABB39E65894AE7F /* CaptureAccess.swift */, + F6B4B0B76D53D8089C95762F /* IPOwnerLookup.swift */, + F062E6D35F98D8EEF1EBE47C /* PacketSniffer.swift */, + ); + path = Enrichment; + sourceTree = ""; + }; + 14FE4EA5DAAC3CF469DF2DF7 /* Channels */ = { + isa = PBXGroup; + children = ( + B9B6A48D086EF16CF6E438FF /* BluetoothMonitor.swift */, + CD774DADE526BE4F507BE06C /* DeviceModels.swift */, + CFC1036E5ABBFDB8740405F3 /* DeviceStore.swift */, + A903BAF9BBDCFEAEC2F023FF /* USBMonitor.swift */, + ); + path = Channels; + sourceTree = ""; + }; + 19F2ECDA2D0846DD0C8AA438 /* Flowlight */ = { + isa = PBXGroup; + children = ( + 615E4FAE5D0865FB1E2492E8 /* Assets.xcassets */, + 4017B3BE9E7FC6895D23FB6C /* Flowlight-AppStore.entitlements */, + AEB593C0CD03CAA473F143ED /* Flowlight.entitlements */, + A5A9D356FF073F1DA1C05522 /* Info.plist */, + 3944E092E097CA9FE66602C2 /* Analysis */, + AD43AD3D26806E2C0D8E2898 /* App */, + 7E89EFDC08791E588B285D1C /* Ask */, + F6C47AC904440C94AFC4016D /* Capture */, + 14FE4EA5DAAC3CF469DF2DF7 /* Channels */, + 0CE3576DC40E71590960E248 /* Enrichment */, + 85B9DE62499BF1EAB938A4A7 /* Export */, + 36C0E584D1897E1022A44014 /* Inspection */, + 1C0216F524771DC67009B967 /* Localization */, + 76EBCF9D9239BC88E1A6B467 /* Plugins */, + C23D46CAD0729079B295BF85 /* Resources */, + BA858536CDA7B1F73C14DC7D /* Storage */, + AFB91EF695297110D08D29F5 /* UI */, + ); + path = Flowlight; + sourceTree = ""; + }; + 1C0216F524771DC67009B967 /* Localization */ = { + isa = PBXGroup; + children = ( + 33480D5241332B3AA21CBE49 /* Localization.swift */, + 77D58ED5F4678FC1C2A5634A /* Localizable.strings */, + ); + path = Localization; + sourceTree = ""; + }; + 315048F637ED4E869E58FC34 /* FlowlightExtension */ = { + isa = PBXGroup; + children = ( + 7BA6FB03454241CB84A9AA13 /* BlockEnforcer.swift */, + F212ADB3B37A2EF68A7CFB84 /* FilterDataProvider.swift */, + D7DE406298624DC5F3A82A22 /* FlowlightExtension-AppStore.entitlements */, + A95B12B83D0B4346AF52BDA6 /* FlowlightExtension.entitlements */, + 3C8267406A5D7DA536B7A713 /* FlowTracker.swift */, + 8EF576B7B41898D84B4E487F /* Info-AppStore.plist */, + 06816A9441C5EFEF5EF55CA5 /* Info.plist */, + AC8A0C2D83843716604FD3F0 /* IPCServer.swift */, + F186517132592B36ED2B9F80 /* main.swift */, + 0F2F1F8536857610FB4C9854 /* ProcessResolver.swift */, + ); + path = FlowlightExtension; + sourceTree = ""; + }; + 36C0E584D1897E1022A44014 /* Inspection */ = { + isa = PBXGroup; + children = ( + 6652559787FD52622A19834A /* CertificateAuthority.swift */, + 15456E37F11CE5E19A124753 /* GuardrailEngine.swift */, + 6E8974956FEBD82934CA1EB5 /* HTTPStream.swift */, + 6AF0ACB7FCA10D7758DE177D /* InspectionBudget.swift */, + 15E51941A085C6B16AF395BB /* InspectionController.swift */, + 1FD96902AACB4B557DEFFBCD /* InspectionProxy.swift */, + DCCB2008E4820D1DE1DE154F /* InspectionRecorder.swift */, + 4D9926D17DD57B7F97E895C9 /* JSONValue.swift */, + 95765A2F0D026D17736C9D9D /* LLMFacts.swift */, + AFAEE09994253E82748BCCCB /* LLMToolCalls.swift */, + CAC8A1658834152DBFBA4494 /* MockGate.swift */, + E7FBB33595155CF835AF14D5 /* MockRule.swift */, + C18286421CD591157CF1E1FD /* ProxyJanitor.swift */, + A7BDAE5D54ABFD08CCFFE447 /* ProxyRelaunch.swift */, + AA9340FE2B6C417D1A19AF54 /* ResponseGate.swift */, + 61D6646248D4CDF3EB86A893 /* ResponseScriptRunner.swift */, + DB223BC3AD00430A5673C439 /* ResponseTransformRule.swift */, + AFA3B4EB0E0D40E39CE24E1B /* RewriteRule.swift */, + C8251DBDC21C44CB92CC1C67 /* SettingsEnforcer.swift */, + 1B2E7474FB6A7B8B56B98917 /* ToolActivity.swift */, + 98FE7804F3D1F6A247F0C8DF /* ToolCallLinks.swift */, + E6A7703953570391821257DD /* ToolResults.swift */, + ); + path = Inspection; + sourceTree = ""; + }; + 3944E092E097CA9FE66602C2 /* Analysis */ = { + isa = PBXGroup; + children = ( + E872723F2D92AA78F7941259 /* ActivityMonitor.swift */, + 41B98E13F994F7E684F57C07 /* AgentAttributor.swift */, + 09E79F3A686C0EC5D7B28E8C /* AgentWorkspace.swift */, + 21A2E14BFE5E66664D0A604B /* AnomalyEngine.swift */, + F61F7D8D3D08054C7697792D /* AnomalySettings.swift */, + ABD4C8B6E3620F5E46C69434 /* BuiltInRulePacks.swift */, + 9EC52100D779B101B1B2595F /* Coverage.swift */, + A62A00EA0C0D8B7844E6F7B2 /* DestinationProfile.swift */, + 2CC957336FC5BD77D7A81651 /* Focus.swift */, + D9195A6149AE1C6628A3E184 /* GuardrailStore.swift */, + F67F3203B4BE2D664F3B1EC9 /* InstalledApps.swift */, + 93E71941B27710D83594A6C5 /* LocalRiskAnalysis.swift */, + 37FE9D6F8BA82F3C266E147A /* MCPAttribution.swift */, + 2D6CCA395BF33CDF9F92B725 /* MCPDomains.swift */, + 2D1D13FDE75AF5064805D258 /* Notifier.swift */, + E858E52F162361C6FD039F16 /* RulePackCatalogComposition.swift */, + FC4ADEE1B3578FBC6DFD9B74 /* RulePackCatalogState.swift */, + 738E050AC8811051BF14E529 /* RulePackCatalogUpdater.swift */, + C35EF76A8728F308E2D6973A /* RulePackCatalogVerifier.swift */, + A15168A448857A6CC759F7BB /* RulePackEventDelivery.swift */, + 02B5736850B28B462739C2CD /* RulePackStore.swift */, + 97943E847A22CF491FA82084 /* RuleStore.swift */, + FD00CA1EF2A7DA909E3A31B5 /* RuleTemplates.swift */, + ); + path = Analysis; + sourceTree = ""; + }; + 47D0F2D7B8D7DEDEA845284F /* FlowlightTests */ = { + isa = PBXGroup; + children = ( + DD30777A046F705110A99269 /* AgentLauncherTests.swift */, + 3B07796D1108F037FF196443 /* AgentPolicyTests.swift */, + DC8F91DE12A1C58BB2BD7038 /* AgentTests.swift */, + B484EC45F6D3CF2D66D12BE0 /* AgentWorkspaceTests.swift */, + 15380DABDCB2492A132A90E4 /* AnswerTextTests.swift */, + CF28074238079D33EFB6B862 /* AppleSystemAppTests.swift */, + 4D73C529EED550F2BD81CB72 /* AppLifecycleTests.swift */, + 94004173EC96619B41EDF49F /* AskFeatureTests.swift */, + CB78709D1E01638E63A484D3 /* AskTests.swift */, + F529FE0E06B11298D8CD1E90 /* BlockingTests.swift */, + 2B95789E8FFF77D3182BADCF /* BodySearchTests.swift */, + 810530D0FFDE61BE5CDB4CC2 /* BoundedHTTPDataTransportTests.swift */, + EBD012519AD3D674CC0D35FC /* CoverageTests.swift */, + 9D6A2870B379B2C1C171C7A3 /* DatabaseTests.swift */, + E83A96A61DE59D2731045A8C /* DemoDataTests.swift */, + 22C46B9250A6ADDFD915500B /* DestinationProfileTests.swift */, + 638E7A9BEB644503868C49E9 /* DeviceTests.swift */, + 89C74F92FC42AE36F5D97F1F /* EnrichmentTests.swift */, + DCF7C56CAF72886BEB812F8F /* ExportDisclosureTests.swift */, + 8E01AEB9AB4F8723FFFA4BFB /* ExportTests.swift */, + AE2A4754CFE5FD187CAF66AD /* ExportVisibilityTests.swift */, + EC63F61F2956394B88C762F4 /* ExtensionRebootTests.swift */, + 2747CAE7AD41663488F0E2B9 /* ExtensionRecoveryTests.swift */, + 1B2EB4E838E550B396BDB883 /* ExtensionSourceTests.swift */, + 2CFC920FE55E719B46039E1F /* FlowJudgementTests.swift */, + 50FB4666B2D07DDE032C87EC /* FocusTests.swift */, + 08A401B3A5D8ED9031EAAF03 /* GuardrailTests.swift */, + 351C523438EA0A811504B57C /* HelpTests.swift */, + A2A5AC7D1719857AE8ED1CFA /* InsightsTests.swift */, + 2E4DFA9032765BBB7E75706F /* InspectionBudgetTests.swift */, + 70F169CF4776BE3FAF69AE73 /* InspectionTests.swift */, + C3E4E7F1E8B83D086AF0CB1B /* InspectNavigationTests.swift */, + 5BC2D26D49B4E14A148BE9C6 /* InspectScopeTests.swift */, + 76D752E3A8C7633C8BC939BE /* InstalledAppsTests.swift */, + 5C0F9AC24A75E20F3FA0B2BB /* LocalizationTests.swift */, + 64FEF0DA4ACD3157DA6FA4B3 /* LocalRiskAnalysisTests.swift */, + 02EE3A99F49A058BF061C147 /* MCPAttributionTests.swift */, + 34AD2BFFA35727FB39287960 /* MCPDomainsTests.swift */, + 2E35905A6578A1204796962E /* MockResponseTests.swift */, + ADD9D2D024F76347C8414BD5 /* NetworkChannelTests.swift */, + 15AF59D58B332F548630D949 /* ParserTests.swift */, + 22D460484C8D6DFA5D495132 /* PluginTests.swift */, + 45076E14820DDD4CFF352226 /* ProxyJanitorTests.swift */, + 13D29667127E5DE57908D936 /* ProxyRelaunchTests.swift */, + 0ADADFFC230017F80D707ECE /* ResponseTransformTests.swift */, + 694D30A62FAF11702B7EF605 /* RewriteRuleTests.swift */, + CB1C1786F72F8D0BC95B9BAC /* RulePackCatalogPersistenceTests.swift */, + 59B40E5AD74F74A029AD46E4 /* RulePackCatalogTests.swift */, + 8507D8801643823A18134BF8 /* RulePackCatalogUpdaterTests.swift */, + AB0C0840C443F8AEDD254AE0 /* RulePackEventDeliveryTests.swift */, + 08C5F9CC0D644DCA03F5F4C5 /* RulePackTests.swift */, + AAD9DD248FDC1D5D58EFC726 /* RuleSimulationTests.swift */, + 254FA06DF59A8410C9BAE161 /* RuleTemplateTests.swift */, + 7EEA2706008C57CB75FB17CD /* RuleTests.swift */, + 2E1E1E6E8B1C2130BD563759 /* SettingsEnforcerTests.swift */, + D2DD7D42B7798A6C57F8C49E /* SystemExtensionScanTests.swift */, + CCA8D35E21C4BC1F15368DE3 /* TrafficMonitorRulePackStartupTests.swift */, + 158356080B1479D37407B9F7 /* TrafficTreePagingTests.swift */, + FC0873969A030F170A6AA3F5 /* UpdateTests.swift */, + 21FEECAD5C958CF49A659E14 /* UpdateVerificationTests.swift */, + F05A2DD30C79643247AF74C9 /* VersionNameRepairTests.swift */, + ED54978358DD9DE1E792A8B9 /* VersionNamingRegressionTests.swift */, + 70965BF26E0B4B3F9719122B /* WindowVisibilityTests.swift */, + 9D7230F1DB0AC11FC9FD80EE /* Fixtures */, + ); + path = FlowlightTests; + sourceTree = ""; + }; + 76EBCF9D9239BC88E1A6B467 /* Plugins */ = { + isa = PBXGroup; + children = ( + A0A1C1F3361CA62C0D08C168 /* PluginEngine.swift */, + 07F902D9D498F399BBDD85E0 /* PluginModels.swift */, + F3C96560CB05BDDBB136E34B /* PluginPackageVerifier.swift */, + E593C4ED11E1BCADD22099E6 /* PluginScriptRunner.swift */, + A55A095537DB24454B007D1B /* PluginStore.swift */, + ); + path = Plugins; + sourceTree = ""; + }; + 7CEBEFFB19C7CA1A293946A5 /* Classification */ = { + isa = PBXGroup; + children = ( + 3D61C3343882268C81871C9B /* DNSParser.swift */, + 228B5C4135EAD9D85F91ED0E /* HTTPHostParser.swift */, + 76792B4893790E9ACD4BFA8B /* ProtocolCatalog.swift */, + 3C533BB77B419198656C6284 /* ProtocolClassifier.swift */, + B5C4444B7A84352BE3672C41 /* TLSSNIParser.swift */, + ); + path = Classification; + sourceTree = ""; + }; + 7E89EFDC08791E588B285D1C /* Ask */ = { + isa = PBXGroup; + children = ( + 14C234AF77E7451A1505DDF9 /* AskChart.swift */, + 67763C99431F26FE1D428EA2 /* AskController.swift */, + 7611E8788B3B6AF18F1CEDF7 /* AskEnvironment.swift */, + D59A773537F63761107681A3 /* AskProvider.swift */, + 415931FB0EB29261A56B90C7 /* AskQuery.swift */, + DD71004CFB571B9167866770 /* AskQueryRunner.swift */, + 82D568056D9E6FACAC42D563 /* FeatureGuide.swift */, + 4EEDBAB278885D747B420AD3 /* OnDeviceAsk.swift */, + 74F1DEAAAAAA607CEA5EC303 /* OnDeviceRiskProvider.swift */, + 91657F4898EFEBCB551ADD4E /* RemoteAsk.swift */, + ); + path = Ask; + sourceTree = ""; + }; + 85B9DE62499BF1EAB938A4A7 /* Export */ = { + isa = PBXGroup; + children = ( + 4D2C6211A645D4DDF8526DF2 /* ExportController.swift */, + CF2DEA93C3D6844E3345D2D8 /* ExportDisclosure.swift */, + AA72D307E4B1A08BE4B8AEF8 /* ExportDisclosureSheet.swift */, + BF216452A0F90D9E90A6BD34 /* ExportModels.swift */, + 3FD3230056607B454EAC381D /* ExportPayload.swift */, + 719C08673D2446F21DAF9F54 /* ExportQueue.swift */, + 37AE72E8F916C18A468E968A /* ExportSecrets.swift */, + 2B82FFB06C5A1C98D5E4D7D1 /* ExportSettingsView.swift */, + ); + path = Export; + sourceTree = ""; + }; + 8AB062F3019C5E4A8D16A9E9 /* Shared */ = { + isa = PBXGroup; + children = ( + D5656604B2CFCBB61EFE050C /* AgentCatalog.swift */, + 440DB80190A1847AC834210D /* AgentLauncher.swift */, + AF99FCE4EBE61D20FFC1E2F1 /* AgentPolicy.swift */, + D16976C5552006B1F9975A62 /* AppleSystemApps.swift */, + 80BC5E16F824FC642C12C8B0 /* BlockRules.swift */, + 38E49720B1B25DC9EBB2ABA0 /* Constants.swift */, + 0872CE92A9A3D5A785ECC816 /* GlobMatch.swift */, + 11A65C830B699BC4477CA879 /* Guardrail.swift */, + 3EA83082A5085897BE34D963 /* HostCanonicalizer.swift */, + 96A2DDEBC714CDCFDB919F35 /* IPCProtocol.swift */, + 59A21E183B79E3C66146070D /* NetworkChannel.swift */, + 4F383DF6343F2DB3052413C9 /* NetworkScope.swift */, + 94F3F458498856491A40E88C /* ProcessNaming.swift */, + 92BAF46D43D2171398478FC3 /* Rule.swift */, + 10036A17CDFCA45E068708EE /* RulePack.swift */, + 10E3B19A61C74DA87F74E4CA /* RulePackSimulation.swift */, + A30AC102A5B36107D8B6B31F /* RulePackTransfer.swift */, + 5D8BAA4EB36D9B7D7BF56AD1 /* RuleSimulation.swift */, + 6096AB6A3EF78490BE10DF50 /* TrafficModels.swift */, + 7CEBEFFB19C7CA1A293946A5 /* Classification */, + ); + path = Shared; + sourceTree = ""; + }; + 9D7230F1DB0AC11FC9FD80EE /* Fixtures */ = { + isa = PBXGroup; + children = ( + 76B6293D3AAFF511F855C4E6 /* IPCServer.txt */, + ); + path = Fixtures; + sourceTree = ""; + }; + A6B39D870B3CF6E7A6C31AD3 /* Products */ = { + isa = PBXGroup; + children = ( + 6F9EEC138B6EE3479F9F10E0 /* Flowlight.app */, + 6053ADC7641DB8CAEA9390D6 /* FlowlightAppStore.app */, + D1C046DCF0CB1227CA93DA24 /* FlowlightExtension.systemextension */, + BD0D85E63A3FEC65FE1FD068 /* FlowlightResponseScriptHelper */, + 9341EDA5AB3454E82FECD53A /* FlowlightStoreExtension.appex */, + 0CBBF571DC526F85E7232F79 /* FlowlightTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + AD43AD3D26806E2C0D8E2898 /* App */ = { + isa = PBXGroup; + children = ( + B0158F10AEABEF28A925E8C3 /* AppNavigation.swift */, + 9DA4611687EF2F8AADA58A49 /* AppRestart.swift */, + 78D5C4691F1B4DFDDCC1A705 /* BoundedHTTPDataTransport.swift */, + 168D824382963305ED7E6C04 /* CodeSignatureCheck.swift */, + 594F3762D9AD6347C83BA710 /* DemoData.swift */, + 9FFEA980768CD488D58CC0B1 /* DemoInspection.swift */, + B3244269609CC161996866B5 /* FlowlightApp.swift */, + 5C34C9D0A9B302B4CF4C7125 /* HTTPDataTransport.swift */, + DBC0A436E879000F8F5FF9E7 /* TrafficMonitor.swift */, + 9C9C36E21D6DB161C80DF3F6 /* UpdateChecker.swift */, + 121FF2EBC93394E8EDCFF0BF /* UpdateInstaller.swift */, + E45902808344F173033EB0F5 /* WindowVisibility.swift */, + ); + path = App; + sourceTree = ""; + }; + ADA9F48B47F7D9E8BA6C8F1C /* Frameworks */ = { + isa = PBXGroup; + children = ( + C087727B358A400DCFD7E0E6 /* JavaScriptCore.framework */, + 0A12EC605B35B8042A369205 /* libsqlite3.tbd */, + 8ACA1ABA6B37B6457004C94A /* NetworkExtension.framework */, + 81F190466C9691ADAF7BC8DA /* SystemExtensions.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + AFB91EF695297110D08D29F5 /* UI */ = { + isa = PBXGroup; + children = ( + 082111849A66652DD9F1BE01 /* AgentsModel.swift */, + 81434EE3C45929E8A768D42E /* AgentsView.swift */, + EB04B24A750D5362449F8197 /* AlertsView.swift */, + 41AE1A6CC673544FCEC9E7F4 /* AskView.swift */, + 5B9F2521A73E6E3264F557E6 /* CaptureView.swift */, + 61823557D86136986EEE4A18 /* CaptureWarning.swift */, + 3C1CF4C48AA260D71155C022 /* Components.swift */, + 92FDE4C87CC59491B70BF3F3 /* ContentView.swift */, + B1C69EEECAA62FC98DBC8CB2 /* CoverageView.swift */, + EFF0C2E06D541DAEC1BC5F33 /* DesignTokens.swift */, + 4F2FBA5700CA1489D6740FC8 /* DevicesView.swift */, + 61080233ED162067497EE2E3 /* FocusView.swift */, + 8F08D1913575FFC1F548CAB5 /* GuardrailsPane.swift */, + F07BDE0C2D8005899C1AF21C /* InspectionBudgetView.swift */, + 406DB466CD32DA8223AE61A6 /* InspectMenuItems.swift */, + BFE93ABADFF46C961FCABAB8 /* InspectView.swift */, + 23CAA36BFFADC83D65DBF0FE /* JSONTreeView.swift */, + F4408358C5CC9516B4C1ABCB /* LiveView.swift */, + 662F0B94BED1CA47AD516AC9 /* LocalRiskSettingsSection.swift */, + 461E9D1F76A4F9505335AB87 /* LocalRiskViews.swift */, + B1888DEE22E9C2FCFB5DC064 /* MCPDomainsSection.swift */, + F8406C2280A8FF08E883A1E0 /* MockRulesView.swift */, + 992F80EF7B17CA25C7D83AC8 /* Motion.swift */, + 02ACC341615D95ADA623BBEC /* PluginSettingsView.swift */, + FCD98C0A49FC6C5521129087 /* ReportsView.swift */, + F8F8FB5C78D8391B25733C9B /* ResponseTransformRulesView.swift */, + 44CCD94E9D554D6DD61486FF /* RewriteRulesView.swift */, + 08643257F8D11784563BD6CC /* RuleEditor.swift */, + 089476A21B8A6AE7F3F4A53A /* RulePackEditorDraft.swift */, + 9CC12B7176A61DD80F12043A /* RulePacksView.swift */, + 9B910FBB81CDAC17AE5ACCEA /* RuleSimulationView.swift */, + 88962BAF6E215B83FE0AFF9A /* RulesView.swift */, + B4849A413C60A9ABC4F9C16E /* SettingsView.swift */, + AC02CB8000B00C4C0AD84E60 /* SharedStrings.swift */, + 3B2FA5540C38FA293E3EB457 /* TrafficTree.swift */, + D210A86033CB79C792000CA2 /* UpdateView.swift */, + B9A40907CF2A6CAF3E9583A1 /* Insights */, + ); + path = UI; + sourceTree = ""; + }; + B9A40907CF2A6CAF3E9583A1 /* Insights */ = { + isa = PBXGroup; + children = ( + BB40E7DB142C886F94FE2448 /* BehaviourPanel.swift */, + 9C0843B4BD70F8F83167F2D3 /* InsightsModel.swift */, + 7FA151AA64480DAACC602123 /* InsightsPanel.swift */, + ); + path = Insights; + sourceTree = ""; + }; + BA64269E7DEB0D9E7F9ED3D0 /* RulePacks */ = { + isa = PBXGroup; + children = ( + 1F49F6CFAF06DFBB9416246D /* official-rule-packs-v1-public.pem */, + ADDB360F7DA88D34505F4D8A /* official.json */, + ); + path = RulePacks; + sourceTree = ""; + }; + BA858536CDA7B1F73C14DC7D /* Storage */ = { + isa = PBXGroup; + children = ( + 48B24C254E2C17056730C06B /* RulePackDeliveryStats.swift */, + 9D9FCA36BD4A101EA1F02DFF /* SQLite.swift */, + 94538A9E26BCD8960123C7E4 /* TrafficDatabase.swift */, + ); + path = Storage; + sourceTree = ""; + }; + C23D46CAD0729079B295BF85 /* Resources */ = { + isa = PBXGroup; + children = ( + 20C95610696E32B96E500E8F /* bpf-access.sh */, + BA64269E7DEB0D9E7F9ED3D0 /* RulePacks */, + ); + path = Resources; + sourceTree = ""; + }; + DC95BF9D5F32304264FF7BD0 = { + isa = PBXGroup; + children = ( + 01638FD6753C2AF708F580CA /* docs */, + 19F2ECDA2D0846DD0C8AA438 /* Flowlight */, + 315048F637ED4E869E58FC34 /* FlowlightExtension */, + F377D0F1A3D6A6F8C5DC5F1A /* FlowlightResponseScriptHelper */, + 47D0F2D7B8D7DEDEA845284F /* FlowlightTests */, + 8AB062F3019C5E4A8D16A9E9 /* Shared */, + ADA9F48B47F7D9E8BA6C8F1C /* Frameworks */, + A6B39D870B3CF6E7A6C31AD3 /* Products */, + ); + sourceTree = ""; + }; + F377D0F1A3D6A6F8C5DC5F1A /* FlowlightResponseScriptHelper */ = { + isa = PBXGroup; + children = ( + 8CB82D0B63E8C783DD0A4FB5 /* main.swift */, + ); + path = FlowlightResponseScriptHelper; + sourceTree = ""; + }; + F6C47AC904440C94AFC4016D /* Capture */ = { + isa = PBXGroup; + children = ( + 53217054F0EFD8EC322BC5B1 /* ExtensionManager.swift */, + 1218F146542CC01A417469F9 /* ExtensionRecovery.swift */, + 95761708CD76CABDF0696BCE /* ExtensionTrafficSource.swift */, + 497DF4817317CE033F2A83A2 /* NettopParser.swift */, + 957EEA0C3C7342504E533506 /* NettopTrafficSource.swift */, + E489125D1DBF3EF98AEED4EB /* ProcessLookup.swift */, + A617D9483BCC31A0F4200A90 /* SystemExtensionScan.swift */, + C4A370EA2BA551D5351835E6 /* TrafficSource.swift */, + ); + path = Capture; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0249194ABEFD25813E6C14AB /* FlowlightTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6D4671AC947DCF84267F4477 /* Build configuration list for PBXNativeTarget "FlowlightTests" */; + buildPhases = ( + B00A2CB40DA6AAFDB17121AE /* Sources */, + 98EFD6B37E21EF6F78800814 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 531D8A14230A1D40ACDD824B /* PBXTargetDependency */, + ); + name = FlowlightTests; + packageProductDependencies = ( + ); + productName = FlowlightTests; + productReference = 0CBBF571DC526F85E7232F79 /* FlowlightTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 0E90A4F6F62FF71E3D3A1786 /* FlowlightAppStore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0F10D312DC2BCA5C48705215 /* Build configuration list for PBXNativeTarget "FlowlightAppStore" */; + buildPhases = ( + F4C8991BC53B54019DDD0015 /* Sources */, + 17E6317CE53AA648F1E6BA08 /* Resources */, + 983145C81A2D24465E7F44B6 /* Frameworks */, + 32FF3A971C555C5CD158F63B /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + ECC654C18DFE8F2D4FE918A4 /* PBXTargetDependency */, + ); + name = FlowlightAppStore; + packageProductDependencies = ( + ); + productName = FlowlightAppStore; + productReference = 6053ADC7641DB8CAEA9390D6 /* FlowlightAppStore.app */; + productType = "com.apple.product-type.application"; + }; + 1C9BF0C33D1912981FB4B5AD /* Flowlight */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4A74C79A97028F05EA626F95 /* Build configuration list for PBXNativeTarget "Flowlight" */; + buildPhases = ( + BB99E7E633832FA71E20AC59 /* Sources */, + E9FFBAE829733C47C6BC58DA /* Resources */, + 79DC5CAE407312B80BF20233 /* Frameworks */, + BD32BB41996D3CEEDBC8D17E /* Embed Dependencies */, + 645C1B96C25EC035E5415BD4 /* Embed Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + CBC6CA3966123861544E6E1F /* PBXTargetDependency */, + 0945A62A6C0D7F91032CFD50 /* PBXTargetDependency */, + ); + name = Flowlight; + packageProductDependencies = ( + ); + productName = Flowlight; + productReference = 6F9EEC138B6EE3479F9F10E0 /* Flowlight.app */; + productType = "com.apple.product-type.application"; + }; + 36B21D467163CD9F57115778 /* FlowlightResponseScriptHelper */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33A9FF4B8D9B2D5D15133A18 /* Build configuration list for PBXNativeTarget "FlowlightResponseScriptHelper" */; + buildPhases = ( + 3D320DCA90917018F4FC54BF /* Sources */, + 4A59E2EDCDD8E4A557ED627B /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FlowlightResponseScriptHelper; + packageProductDependencies = ( + ); + productName = FlowlightResponseScriptHelper; + productReference = BD0D85E63A3FEC65FE1FD068 /* FlowlightResponseScriptHelper */; + productType = "com.apple.product-type.tool"; + }; + 904DAC0BB81071A09FF1A5B0 /* FlowlightStoreExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = D76A79764257B12EB4B0EB70 /* Build configuration list for PBXNativeTarget "FlowlightStoreExtension" */; + buildPhases = ( + 44DFDBB900EDE29B4C67144D /* Sources */, + 2D134D9B93ED0CF9B46F2117 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FlowlightStoreExtension; + packageProductDependencies = ( + ); + productName = FlowlightStoreExtension; + productReference = 9341EDA5AB3454E82FECD53A /* FlowlightStoreExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 94D00543044D9B601CDCA877 /* FlowlightExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6C5A1D60ED3AC8932FFE1FB1 /* Build configuration list for PBXNativeTarget "FlowlightExtension" */; + buildPhases = ( + D08D03E8FB49A5314F071BB1 /* Sources */, + B516522A2EB85C9D1E4298D8 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FlowlightExtension; + packageProductDependencies = ( + ); + productName = FlowlightExtension; + productReference = D1C046DCF0CB1227CA93DA24 /* FlowlightExtension.systemextension */; + productType = "com.apple.product-type.system-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 27052BCDFA1783A148CD45FD /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + 0249194ABEFD25813E6C14AB = { + ProvisioningStyle = Automatic; + }; + 0E90A4F6F62FF71E3D3A1786 = { + ProvisioningStyle = Automatic; + }; + 1C9BF0C33D1912981FB4B5AD = { + ProvisioningStyle = Automatic; + }; + 36B21D467163CD9F57115778 = { + ProvisioningStyle = Automatic; + }; + 904DAC0BB81071A09FF1A5B0 = { + ProvisioningStyle = Automatic; + }; + 94D00543044D9B601CDCA877 = { + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = CA490C327FA0F549ADD0301B /* Build configuration list for PBXProject "Flowlight" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + de, + en, + es, + fr, + it, + ja, + ko, + "pt-PT", + "zh-Hans", + "zh-Hant", + ); + mainGroup = DC95BF9D5F32304264FF7BD0; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = A6B39D870B3CF6E7A6C31AD3 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1C9BF0C33D1912981FB4B5AD /* Flowlight */, + 36B21D467163CD9F57115778 /* FlowlightResponseScriptHelper */, + 94D00543044D9B601CDCA877 /* FlowlightExtension */, + 904DAC0BB81071A09FF1A5B0 /* FlowlightStoreExtension */, + 0E90A4F6F62FF71E3D3A1786 /* FlowlightAppStore */, + 0249194ABEFD25813E6C14AB /* FlowlightTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 17E6317CE53AA648F1E6BA08 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 93937351BA21608974D54900 /* Assets.xcassets in Resources */, + 57DADB20CBF7D6EF6F6B8167 /* Localizable.strings in Resources */, + E384EA8E1EEBA1689E638B8C /* official-rule-packs-v1-public.pem in Resources */, + 7C4D73113ECB44CDDAB40D58 /* official.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 98EFD6B37E21EF6F78800814 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E62BAD317B20BE6E16A21FA3 /* IPCServer.txt in Resources */, + 46A21D07D20963DBAC9169F6 /* index.html in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E9FFBAE829733C47C6BC58DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 70B794AEAC36D7B581841A5D /* Assets.xcassets in Resources */, + C57A3811A5DB984FC0F2549A /* Localizable.strings in Resources */, + D5D014F2811B94832DC6CC81 /* bpf-access.sh in Resources */, + B5F94B9F6FC2B75A867FB2F8 /* official-rule-packs-v1-public.pem in Resources */, + 48CD1538B6B7899F0B8A83E8 /* official.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3D320DCA90917018F4FC54BF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EAA7D632ABC5F2450CDDB68E /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 44DFDBB900EDE29B4C67144D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0500979C1F127E3E8BAC2C0F /* AgentCatalog.swift in Sources */, + 1F8686DCB3451158B115A8FD /* AgentLauncher.swift in Sources */, + 1E0AB61964E7FD024B5B4E71 /* AgentPolicy.swift in Sources */, + 3570CB0F911ED4160DC8F4BD /* AppleSystemApps.swift in Sources */, + 13299931E36F0173B3FCDC1B /* BlockEnforcer.swift in Sources */, + 9D9CC413EDA13E69B872454F /* BlockRules.swift in Sources */, + B13CAA0E1DA5A274F3F4D849 /* Constants.swift in Sources */, + 7212BA0F348AC67423887CF5 /* DNSParser.swift in Sources */, + B8AF34F3100E3ABF6190BE68 /* FilterDataProvider.swift in Sources */, + 5B0715A36BAB76BC06AE4052 /* FlowTracker.swift in Sources */, + EF0EBBEAC6177681CBD4F0D7 /* GlobMatch.swift in Sources */, + 2C879C6EA95A548B2BC9D9DB /* Guardrail.swift in Sources */, + 654EE33CAE5B208F04985952 /* HTTPHostParser.swift in Sources */, + 518B305308454622B576FF3B /* HostCanonicalizer.swift in Sources */, + 7D0431D1C2B4142A2A3B9A2D /* IPCProtocol.swift in Sources */, + FB53CA12F4EA8442D4E773E4 /* IPCServer.swift in Sources */, + B7D99A1E19A198CB04FDDC73 /* NetworkChannel.swift in Sources */, + EF4CBFD483B59B62F3432F3E /* NetworkScope.swift in Sources */, + 1D997A2137B9445F4D423737 /* ProcessNaming.swift in Sources */, + EE32964EF451CD9211A37D6A /* ProcessResolver.swift in Sources */, + 8D8D47E8D81B928A8895178A /* ProtocolCatalog.swift in Sources */, + 9891F943C7CAD36651D24774 /* ProtocolClassifier.swift in Sources */, + 91433E64078D356DD3940C57 /* Rule.swift in Sources */, + 26C4AD2122DB5A299CA57CE6 /* RulePack.swift in Sources */, + C85056033D72ECD693E4AE7A /* RulePackSimulation.swift in Sources */, + ECE292CA7FBB8A6CE372B4F5 /* RulePackTransfer.swift in Sources */, + F454E718DC7E6F7BDA3ECA61 /* RuleSimulation.swift in Sources */, + BBCAB0EE0D040C8BF3E30556 /* TLSSNIParser.swift in Sources */, + 668FFA90C24788C66043286B /* TrafficModels.swift in Sources */, + 45C6C2569D63744568474B91 /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B00A2CB40DA6AAFDB17121AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FF3F2EE3FE29F6827D527B31 /* AgentLauncherTests.swift in Sources */, + 489DB4725FD189472CC078BE /* AgentPolicyTests.swift in Sources */, + 2499CE8E13B7B57DDA281E39 /* AgentTests.swift in Sources */, + EA2D23AFA530F762A6901E08 /* AgentWorkspaceTests.swift in Sources */, + FACBCE71B0804DB4187D132B /* AnswerTextTests.swift in Sources */, + E8F73E4CF1E8701968CB2E96 /* AppLifecycleTests.swift in Sources */, + B766E7284317D94D160C1386 /* AppleSystemAppTests.swift in Sources */, + 72FCD2D719346EDC2EE58A6E /* AskFeatureTests.swift in Sources */, + 87E68C01975E4936B8D6A921 /* AskTests.swift in Sources */, + 24582219230DE364D6B2E2D1 /* BlockingTests.swift in Sources */, + B40A4A6A12B15C206C69FE22 /* BodySearchTests.swift in Sources */, + D690491C9CCCFFA1DE64ECE8 /* BoundedHTTPDataTransportTests.swift in Sources */, + B87A6542EDA6ACDB5B961EFA /* CoverageTests.swift in Sources */, + 06D7DABCED6EF2ED5BD1B725 /* DatabaseTests.swift in Sources */, + DE472CC9E3475EF582BB706E /* DemoDataTests.swift in Sources */, + 8658DBDD8DE41686E075C7B0 /* DestinationProfileTests.swift in Sources */, + 9B22FA903C576B32C9232523 /* DeviceTests.swift in Sources */, + C2587EAF39C9E71650F3B6FC /* EnrichmentTests.swift in Sources */, + 64453A2D3AA57975F870BAE4 /* ExportDisclosureTests.swift in Sources */, + 1ADF39B07A56B2AFFC721C1B /* ExportTests.swift in Sources */, + 41EEA62E4E2A0DDC2FA6C7AC /* ExportVisibilityTests.swift in Sources */, + B5A31798C953DDD61039E82D /* ExtensionRebootTests.swift in Sources */, + 5EC8847DF0E49875B602B9AA /* ExtensionRecoveryTests.swift in Sources */, + CD507B163DA11479FAFBF2A6 /* ExtensionSourceTests.swift in Sources */, + 9DA08B1BDE7F624176CB2AF2 /* FlowJudgementTests.swift in Sources */, + 3EB92870A15033FFE64CA6A4 /* FocusTests.swift in Sources */, + 9524F078035F746A98A5BD1A /* GuardrailTests.swift in Sources */, + FD08E709481530B77F4ED795 /* HelpTests.swift in Sources */, + D57246BD18C4FBBCEA71F08A /* InsightsTests.swift in Sources */, + C646009EEAACFFED739EA0E9 /* InspectNavigationTests.swift in Sources */, + 7471DD6A1CB6304ECCFD0C3B /* InspectScopeTests.swift in Sources */, + F7D8E5F618EF5B76959097BF /* InspectionBudgetTests.swift in Sources */, + FE234FA5F34AAB7B7074BDB9 /* InspectionTests.swift in Sources */, + F1ACC6A35E482FC31C0EA0B1 /* InstalledAppsTests.swift in Sources */, + 498E9916E85245C7982E9110 /* LocalRiskAnalysisTests.swift in Sources */, + D211B6AF0F0C9ABE3F5D1A57 /* LocalizationTests.swift in Sources */, + A83BA0983BAC28C6E56B49BE /* MCPAttributionTests.swift in Sources */, + 2072AA79A8637D84267BE43F /* MCPDomainsTests.swift in Sources */, + 8BD67221A510AAB93D73CC7D /* MockResponseTests.swift in Sources */, + 5A3B1EB5936B67AD426A5967 /* NetworkChannelTests.swift in Sources */, + 657B4D3A0DC9860BCAA78E25 /* ParserTests.swift in Sources */, + E3F2CFD47F40B6A9481C5777 /* PluginTests.swift in Sources */, + ADC857099AB3E324DEC334BC /* ProxyJanitorTests.swift in Sources */, + ED1CF3BBC1C4D317658D07A0 /* ProxyRelaunchTests.swift in Sources */, + 697ACED9A5F7CF5854461210 /* ResponseTransformTests.swift in Sources */, + 8753FD9223EF6AE4C892DB9A /* RewriteRuleTests.swift in Sources */, + BEC1503B1920AF74D38E2077 /* RulePackCatalogPersistenceTests.swift in Sources */, + 413D6E44997AA769C597FF23 /* RulePackCatalogTests.swift in Sources */, + 4F732CB0B9C2FB627217CC17 /* RulePackCatalogUpdaterTests.swift in Sources */, + ACC7529D79C19667761AEAD2 /* RulePackEventDeliveryTests.swift in Sources */, + 059D1C5ECA497BBF749BFA1F /* RulePackTests.swift in Sources */, + 8FDF38674C022B58C5E6068F /* RuleSimulationTests.swift in Sources */, + 55FB36AE92AEF84914CCA6E8 /* RuleTemplateTests.swift in Sources */, + 2B6D1084BEC5D8FD8C1340B8 /* RuleTests.swift in Sources */, + FCD81B854E4C12AA3BE84A4D /* SettingsEnforcerTests.swift in Sources */, + 66605C2D5AE7B9D23E83AF0E /* SystemExtensionScanTests.swift in Sources */, + 255816A7B82038B2B9780E24 /* TrafficMonitorRulePackStartupTests.swift in Sources */, + E6D43A9CA39D3D205D2FD8EC /* TrafficTreePagingTests.swift in Sources */, + 8D0F2F917038A8C52AE9E271 /* UpdateTests.swift in Sources */, + 55434CF888AEE73E90EDA953 /* UpdateVerificationTests.swift in Sources */, + 41750EE3E0461E85FC71FBAF /* VersionNameRepairTests.swift in Sources */, + 593C3A02860F39DAC8019A1E /* VersionNamingRegressionTests.swift in Sources */, + 65C108E51ADCFAE65FE2C8AA /* WindowVisibilityTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BB99E7E633832FA71E20AC59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 89E518A6DD4F49D012E47AFE /* ActivityMonitor.swift in Sources */, + B1E5CA21DA13E924DD50CB51 /* AgentAttributor.swift in Sources */, + 2D10E8EE0B452C5746D2AF73 /* AgentCatalog.swift in Sources */, + 07B78C868D02BC6FB6FC561C /* AgentLauncher.swift in Sources */, + 9162E455E37916AAD651349B /* AgentPolicy.swift in Sources */, + 585CA811DBF12784CBF086EA /* AgentWorkspace.swift in Sources */, + 09B577964D76B2CCADA2E3EF /* AgentsModel.swift in Sources */, + DE40C611330AC62B7A53B63C /* AgentsView.swift in Sources */, + 65A926A0C3E7431E89CDC7FE /* AlertsView.swift in Sources */, + 70584ACFC97B4A66381BDF95 /* AnomalyEngine.swift in Sources */, + 1C837EBCE2110C53FB85C886 /* AnomalySettings.swift in Sources */, + FBE542C1BDCE771392543BD1 /* AppNavigation.swift in Sources */, + 3F09CA57A97AA100EAA0FC26 /* AppRestart.swift in Sources */, + 2A1BCAACA256067CD96D1066 /* AppleSystemApps.swift in Sources */, + 0CDAAF2B3729A02854447210 /* AskChart.swift in Sources */, + 93AC6FC795BBEAB3FCFA2C93 /* AskController.swift in Sources */, + 7BA8D2912D68E61C0523F3B6 /* AskEnvironment.swift in Sources */, + EF23A175A11656427632BE45 /* AskProvider.swift in Sources */, + CC282F84A0B0F97D5007F449 /* AskQuery.swift in Sources */, + 2AE5BF2C6ADA89975EA76B83 /* AskQueryRunner.swift in Sources */, + 8349898AD32AB76CB57C65D9 /* AskView.swift in Sources */, + 099CCC081C36710CCD4FFBD5 /* BPFProgram.swift in Sources */, + EB842377A7936B0BC9AAEC71 /* BehaviourPanel.swift in Sources */, + C5E82EFABFE12297251D924C /* BlockRules.swift in Sources */, + 046D743441B8528AD853BF2D /* BluetoothMonitor.swift in Sources */, + 1C699CA261A1C0963BF36120 /* BoundedHTTPDataTransport.swift in Sources */, + 42F74C2DB00410D8FB790B70 /* BuiltInRulePacks.swift in Sources */, + D662DA2727A039F0137E0472 /* CaptureAccess.swift in Sources */, + CDFFBF64E8D14CAB558D87F7 /* CaptureView.swift in Sources */, + 679B74263454FB76473F1006 /* CaptureWarning.swift in Sources */, + 381C9AC13AAA9CC8D1DCD8FD /* CertificateAuthority.swift in Sources */, + 028E3BA5025E1089C1CA7CEB /* CodeSignatureCheck.swift in Sources */, + BA072680D0A6AC1C40DB8608 /* Components.swift in Sources */, + BDF6030BBFAE6327B278A128 /* Constants.swift in Sources */, + E3C7DC93B1AC66ECA40B7820 /* ContentView.swift in Sources */, + EA679C463EB3158EA7195052 /* Coverage.swift in Sources */, + 4947873A05817C02C14E461D /* CoverageView.swift in Sources */, + 62ACF7BF40AB81E4CB9E4478 /* DNSParser.swift in Sources */, + 7B995B6E769204525B48DDFB /* DemoData.swift in Sources */, + 06A92144D13855A43F30221D /* DemoInspection.swift in Sources */, + D73CBA15CD6E91DE465C0556 /* DesignTokens.swift in Sources */, + 30733BCFC01E165EFF02EBA2 /* DestinationProfile.swift in Sources */, + 274EE87B6A63D7F18C0D0E1E /* DeviceModels.swift in Sources */, + CF8EE120DA5241445ECD1797 /* DeviceStore.swift in Sources */, + F782A1187A8564DA1C37EDC1 /* DevicesView.swift in Sources */, + 65F6E16AC002847C032ECC48 /* ExportController.swift in Sources */, + 3F90E760FD34949F451FBDF4 /* ExportDisclosure.swift in Sources */, + 4BAEC22536747CFB9525934A /* ExportDisclosureSheet.swift in Sources */, + 3B1CF30E04CBAAD0EC92DC5B /* ExportModels.swift in Sources */, + A78C8671BF1CC788E969814C /* ExportPayload.swift in Sources */, + C72889236AE51E71206B2F57 /* ExportQueue.swift in Sources */, + F205410D7C07CB367224D44F /* ExportSecrets.swift in Sources */, + EF8276E6A9A832CB5D74AFE3 /* ExportSettingsView.swift in Sources */, + E09B5E0093DE7BABBC1561DA /* ExtensionManager.swift in Sources */, + 2DADC58723CCECF67EAC1613 /* ExtensionRecovery.swift in Sources */, + 3607E7DD7A3ABB2C73955832 /* ExtensionTrafficSource.swift in Sources */, + 0998D0711C9591F12AE30085 /* FeatureGuide.swift in Sources */, + 78D210201D9072B255C058B1 /* FlowlightApp.swift in Sources */, + 1EC06D8718C4B684BEF492D4 /* Focus.swift in Sources */, + 0C0204670BD00994D9821D5F /* FocusView.swift in Sources */, + D5C09E269CC11D38728B69FC /* GlobMatch.swift in Sources */, + 28A7A4AF29B86B1927DBF4D3 /* Guardrail.swift in Sources */, + 7C7D39AF8E2C36BE514BF10C /* GuardrailEngine.swift in Sources */, + 7340527787A47AEDF1FE5991 /* GuardrailStore.swift in Sources */, + BF89D9E22CBBA7B5ACBD491B /* GuardrailsPane.swift in Sources */, + 06806F580BC3A25E6C76B4DE /* HTTPDataTransport.swift in Sources */, + 124C56A74E24D77F75AA8D08 /* HTTPHostParser.swift in Sources */, + A224249AD83D44E25C293EC3 /* HTTPStream.swift in Sources */, + 1438E3A19D4B0225397E92F7 /* HostCanonicalizer.swift in Sources */, + 361DD804991495DEEE15121C /* IPCProtocol.swift in Sources */, + F8E48AAE0CDB4DD16025AAEE /* IPOwnerLookup.swift in Sources */, + A6B2B75108CE6233CD3EDF00 /* InsightsModel.swift in Sources */, + A912218AF0A00A7FB4EE5221 /* InsightsPanel.swift in Sources */, + 09A86273E9179E24B619D829 /* InspectMenuItems.swift in Sources */, + BF013D373CC9FFFAD75B9C22 /* InspectView.swift in Sources */, + CA9FF629E45A3643774DDACD /* InspectionBudget.swift in Sources */, + DC86A6B4919CF1B6D72662FE /* InspectionBudgetView.swift in Sources */, + 1F1CF3F7D03FBB27616B2200 /* InspectionController.swift in Sources */, + E7F844DADB9BBF4F5A2024B6 /* InspectionProxy.swift in Sources */, + 3860DCC8B5AF2121D11144DE /* InspectionRecorder.swift in Sources */, + 216BDAB2AB83A06B61EE6325 /* InstalledApps.swift in Sources */, + 81072D7510803E8189EA2671 /* JSONTreeView.swift in Sources */, + 3C257D9C841FEE3F373EA661 /* JSONValue.swift in Sources */, + E6B53114FFB3F672BA02FE69 /* LLMFacts.swift in Sources */, + 7732BE202B8D390C8A9A0DE0 /* LLMToolCalls.swift in Sources */, + C066C0BE0A8B0C621654095F /* LiveView.swift in Sources */, + BC84D4873C2547F075562715 /* LocalRiskAnalysis.swift in Sources */, + FF4E47F54DE6A3BCFFEBAA01 /* LocalRiskSettingsSection.swift in Sources */, + 3FBACA5ECB1C08ED614FDDE7 /* LocalRiskViews.swift in Sources */, + 3DB4B694F1FBA50E559F7D9B /* Localization.swift in Sources */, + C4F66F4C8F679F53C70399D6 /* MCPAttribution.swift in Sources */, + 9A03509ED600BF1065FD2800 /* MCPDomains.swift in Sources */, + E4D30933B930F00B7CAADE20 /* MCPDomainsSection.swift in Sources */, + 27B5D51389021FC95AAB2530 /* MockGate.swift in Sources */, + 8A5E37FB8BB6623CEF21420D /* MockRule.swift in Sources */, + 239189796A5B358CF23BFCF9 /* MockRulesView.swift in Sources */, + 36F61F7BAE54F429B4C19D22 /* Motion.swift in Sources */, + D77B6BB95661074A90B12EE7 /* NettopParser.swift in Sources */, + E844FB53C6EA5C8BF5F37849 /* NettopTrafficSource.swift in Sources */, + B5614834E9118B531713207A /* NetworkChannel.swift in Sources */, + 09F9A2B71C1F7867CB04DDAC /* NetworkScope.swift in Sources */, + 780A2B3FCEDB696FC8FBD4AF /* Notifier.swift in Sources */, + D9987CC20EB70831208A0430 /* OnDeviceAsk.swift in Sources */, + 6514A22112924B2965D507DE /* OnDeviceRiskProvider.swift in Sources */, + B88D4DE798915EA469DF73B3 /* PacketSniffer.swift in Sources */, + 64D1D0E76973447B888270C1 /* PluginEngine.swift in Sources */, + 7F2257D0029DC85A25033B9B /* PluginModels.swift in Sources */, + FF4E8EC8F36613C1C03549AE /* PluginPackageVerifier.swift in Sources */, + DEDCFC43A3BBD2E91277302F /* PluginScriptRunner.swift in Sources */, + DC7F897C9C4E1E353F05E3A5 /* PluginSettingsView.swift in Sources */, + C6B736C06DB70C19217FA5AE /* PluginStore.swift in Sources */, + A4CEEDBC97449B58C674CD4F /* ProcessLookup.swift in Sources */, + 155D31587F84936506FDEBB2 /* ProcessNaming.swift in Sources */, + 61648ED4A0DBCEC775673448 /* ProtocolCatalog.swift in Sources */, + 0D37699776684FD04F8D9D07 /* ProtocolClassifier.swift in Sources */, + 2D89FAAC905437BEC596808B /* ProxyJanitor.swift in Sources */, + B4C83BAE6447273B72D237AB /* ProxyRelaunch.swift in Sources */, + 3E591F9FC749BBE46FE5C100 /* RemoteAsk.swift in Sources */, + DDC032E6272181F3E1B1BB4F /* ReportsView.swift in Sources */, + 59D83ED863E01486B578B923 /* ResponseGate.swift in Sources */, + B5E88F4AF351CB717C46B22E /* ResponseScriptRunner.swift in Sources */, + 705BEA6B331562969B8FCD26 /* ResponseTransformRule.swift in Sources */, + 9814BB05A2FC8648EB62145C /* ResponseTransformRulesView.swift in Sources */, + E12E137A657C739019D6F4D3 /* RewriteRule.swift in Sources */, + 50CD7EF8F4121F7DD1C65680 /* RewriteRulesView.swift in Sources */, + 32FCEAF70EBFB57EA5579E96 /* Rule.swift in Sources */, + 5E22345FC07C19F4A32C5002 /* RuleEditor.swift in Sources */, + F842F0968BAFF7623B4A86BE /* RulePack.swift in Sources */, + 21D7D0DF6C5DF97EB3D1EFD9 /* RulePackCatalogComposition.swift in Sources */, + 603AE25B0614892F454FE15B /* RulePackCatalogState.swift in Sources */, + E16E772F86A6469231B18EB2 /* RulePackCatalogUpdater.swift in Sources */, + A8347F99B5A1857DDF39D56F /* RulePackCatalogVerifier.swift in Sources */, + 5D637AB4C3D308EAC8CC9448 /* RulePackDeliveryStats.swift in Sources */, + 739AA7451B3E61F2963C3237 /* RulePackEditorDraft.swift in Sources */, + 26D43E956CC67CECE784EF26 /* RulePackEventDelivery.swift in Sources */, + FEE9F18D463C7060E835F757 /* RulePackSimulation.swift in Sources */, + EDAB8186A2117A6EE711A8B9 /* RulePackStore.swift in Sources */, + 2F2E867F1E599C48EC6DE525 /* RulePackTransfer.swift in Sources */, + 78FD830C8350A22AD11723EC /* RulePacksView.swift in Sources */, + AC5E1A01FEBC6A4C9951353E /* RuleSimulation.swift in Sources */, + 597FCA0655D52D801C0542F4 /* RuleSimulationView.swift in Sources */, + 5A58E6A00FD4F35DA506B390 /* RuleStore.swift in Sources */, + 362251769AB9DAC1BF063FD0 /* RuleTemplates.swift in Sources */, + 0BC685F72E943E55AA0DFC1A /* RulesView.swift in Sources */, + C9F9F6FF27500A2CB5BE992B /* SQLite.swift in Sources */, + B8B770675C09113D28BDF3F1 /* SettingsEnforcer.swift in Sources */, + F5AE32D382E6DDD1B06783B8 /* SettingsView.swift in Sources */, + 846FECA436B94D952C489DEE /* SharedStrings.swift in Sources */, + 939DB311C31E0F1B33583B8A /* SystemExtensionScan.swift in Sources */, + 149824D7E5DBBF87A16CFBDB /* TLSSNIParser.swift in Sources */, + 8B41FBD2537503B964EC5C81 /* ToolActivity.swift in Sources */, + CF9E8E6FBFB1D1DBD7610DA1 /* ToolCallLinks.swift in Sources */, + 3BB8B3792AD8FFCDE2B0897A /* ToolResults.swift in Sources */, + EFBA053570FE24748547DDB2 /* TrafficDatabase.swift in Sources */, + 8F7C96FA3DFC112A72976562 /* TrafficModels.swift in Sources */, + 4EF5727ADC37F80E20EF4327 /* TrafficMonitor.swift in Sources */, + D698B39BD305EC2E4168B923 /* TrafficSource.swift in Sources */, + C094B24A112FF0FE00623E9F /* TrafficTree.swift in Sources */, + 88B1D1AFC30EEFB351A2D10F /* USBMonitor.swift in Sources */, + D30A985B88E65A6F89E9E7E7 /* UpdateChecker.swift in Sources */, + DB969099AF17B4E0DBA3034C /* UpdateInstaller.swift in Sources */, + 9BE0BB0A6D132461427E755B /* UpdateView.swift in Sources */, + C62FF7278DAD93AB68B2FFF1 /* WindowVisibility.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D08D03E8FB49A5314F071BB1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 813089B6205B28E82D260539 /* AgentCatalog.swift in Sources */, + C05C1729B55B00FC0AF1C20C /* AgentLauncher.swift in Sources */, + 3A12FB5ECC1D6C88CE759CFC /* AgentPolicy.swift in Sources */, + EA73DD364261DB7A3860FCF1 /* AppleSystemApps.swift in Sources */, + F2304F128BB915C60307AD44 /* BlockEnforcer.swift in Sources */, + 37BAEA33191AFCF7EED18540 /* BlockRules.swift in Sources */, + 56AE97B7A55B1A70250CAA57 /* Constants.swift in Sources */, + 18F94A8B0CE6DD3B1714C5DC /* DNSParser.swift in Sources */, + 8D0ECCF27AEAA38CE6E939B0 /* FilterDataProvider.swift in Sources */, + C030AD2D9C98160C80D356AD /* FlowTracker.swift in Sources */, + 0BB12E96D54D92C8D24619B5 /* GlobMatch.swift in Sources */, + CAFBA60EFEF3BB7D4F8D38E9 /* Guardrail.swift in Sources */, + FECA6CBE50938E777E17D87D /* HTTPHostParser.swift in Sources */, + 2F805A324684FF8CB7E0297B /* HostCanonicalizer.swift in Sources */, + D6DB988F5D1D2A3C2A5753E5 /* IPCProtocol.swift in Sources */, + 0D622C67AB136A6F14708CA6 /* IPCServer.swift in Sources */, + 3E265CB16F7C94A36ED3D11E /* NetworkChannel.swift in Sources */, + 65F285392A51B100F8FD2BBA /* NetworkScope.swift in Sources */, + DBC04B2A1B129C44A3D8A40D /* ProcessNaming.swift in Sources */, + 2560A34A00122DEF53A1C407 /* ProcessResolver.swift in Sources */, + 77E90A284280B87F30A30487 /* ProtocolCatalog.swift in Sources */, + E88DD26D7D2E9C0E0FBACD6F /* ProtocolClassifier.swift in Sources */, + F26718FE423FEE15B5502B8A /* Rule.swift in Sources */, + A147D607E84B5B0B102C824A /* RulePack.swift in Sources */, + 83E9F19608C25B32DF8C52AB /* RulePackSimulation.swift in Sources */, + 969FC166DAA7623081DA7392 /* RulePackTransfer.swift in Sources */, + FC820F255E16C392B007726B /* RuleSimulation.swift in Sources */, + 6C3AC854882827BEA6A2B9CB /* TLSSNIParser.swift in Sources */, + 87B80FD11BAC558198442507 /* TrafficModels.swift in Sources */, + ED2148A66082B969315461CA /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F4C8991BC53B54019DDD0015 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D30F3B5A02E089EEADBDE98B /* ActivityMonitor.swift in Sources */, + C35F10A4B87D29525A740DD5 /* AgentAttributor.swift in Sources */, + DDE2B0B0A807C428B9F78120 /* AgentCatalog.swift in Sources */, + 63CBA5AACC00FC44C982ADAF /* AgentLauncher.swift in Sources */, + 9767A4CE180F4083B693CC19 /* AgentPolicy.swift in Sources */, + 120C7E644032F70B351DB87E /* AgentWorkspace.swift in Sources */, + 89B09C7F77A5D116433291C5 /* AgentsModel.swift in Sources */, + 807AB517A5ED9EE6738FD707 /* AgentsView.swift in Sources */, + 41033D5CF2A9446276DADB97 /* AlertsView.swift in Sources */, + C7798BE6AE9C79EB8BA3576C /* AnomalyEngine.swift in Sources */, + 268A7C1C22F1C06F7B6DA52C /* AnomalySettings.swift in Sources */, + 953BF001428B13E4B3B04D4C /* AppNavigation.swift in Sources */, + 7E1481BA85DDCD19B4972B99 /* AppRestart.swift in Sources */, + 4A0EDDA9455A32B4A43F42FF /* AppleSystemApps.swift in Sources */, + 4453A6861DA4D5A8AE3CC793 /* AskChart.swift in Sources */, + 875CEAD8A14432BD5E46F0DF /* AskController.swift in Sources */, + EEA0FEAC3D3CA9C73393EF3E /* AskEnvironment.swift in Sources */, + 858D19CFF01AFC9E3FF8F364 /* AskProvider.swift in Sources */, + B4A39C2F0D1B775D59ADC50C /* AskQuery.swift in Sources */, + 3900BC10AB6AE27C341962CE /* AskQueryRunner.swift in Sources */, + F47E13AFAFF872BB15EA4E59 /* AskView.swift in Sources */, + 3C3AAF8E67A81B9447144BE2 /* BPFProgram.swift in Sources */, + 8BE14301F6CA5DEF8209A4FC /* BehaviourPanel.swift in Sources */, + C5077734C82AD352CC3EFA5C /* BlockRules.swift in Sources */, + 5AA48BB88F9E0F6F858DC553 /* BluetoothMonitor.swift in Sources */, + 1D11256FDE7183EBBED5D308 /* BoundedHTTPDataTransport.swift in Sources */, + C513F5D1936E202D0D6ECEFD /* BuiltInRulePacks.swift in Sources */, + 7FBA685D695EA14B08E9F18A /* CaptureAccess.swift in Sources */, + D3EB4913132CAEA7FA827B08 /* CaptureView.swift in Sources */, + A7369F9D640FCFDAC459E5F6 /* CaptureWarning.swift in Sources */, + 2E110029B0BE1C39A967E0CA /* CertificateAuthority.swift in Sources */, + EDEAECD3FA4B513114C0B581 /* CodeSignatureCheck.swift in Sources */, + 6FC332766A183D00E84656E3 /* Components.swift in Sources */, + 7726A81EF6802B2BC4606540 /* Constants.swift in Sources */, + 80FA6E238AC7FDEE36C05B5C /* ContentView.swift in Sources */, + 87F047938C7E5461658F8CE3 /* Coverage.swift in Sources */, + A108B205EE74FC1ADD45FD9E /* CoverageView.swift in Sources */, + 280B869A858715537934AC50 /* DNSParser.swift in Sources */, + 83B35B9C8D236EA11ED27A43 /* DemoData.swift in Sources */, + 6464CE699E3EE225BA57C0EF /* DemoInspection.swift in Sources */, + 742203151D5AF7CC2A2C1440 /* DesignTokens.swift in Sources */, + DB09CEC00A661AF26C37244E /* DestinationProfile.swift in Sources */, + 10776A2B276E82BD07243E07 /* DeviceModels.swift in Sources */, + 315C5531C14F1DDE99043A18 /* DeviceStore.swift in Sources */, + 70CD0A27AAF526B9BB07BBAE /* DevicesView.swift in Sources */, + 9DA5CB6639FF673FC53D033A /* ExportController.swift in Sources */, + 0567566CCFA1B23855C3C0F1 /* ExportDisclosure.swift in Sources */, + C49DD542101E64D0EEBD05E4 /* ExportDisclosureSheet.swift in Sources */, + E25A53EA4362FCC71BCE5A80 /* ExportModels.swift in Sources */, + 653556BA776A6E7755D3DD53 /* ExportPayload.swift in Sources */, + A3417EC0EF2DD2A4D35CAAB5 /* ExportQueue.swift in Sources */, + C7FAFFB62ADB58699720440A /* ExportSecrets.swift in Sources */, + 84E8F07CBD455A23EE2DF978 /* ExportSettingsView.swift in Sources */, + F5F925E03C86F8B023DC788D /* ExtensionManager.swift in Sources */, + BB4533F39F79A5D13D438C34 /* ExtensionRecovery.swift in Sources */, + A48DC12BB97A0E5499A3D87D /* ExtensionTrafficSource.swift in Sources */, + 22B534F23EF9F05AE27A6D71 /* FeatureGuide.swift in Sources */, + 451AB2522DC0E73CF1301EE1 /* FlowlightApp.swift in Sources */, + 27DC00A62F0BCEE6B1FC2B07 /* Focus.swift in Sources */, + 4D676BCFC2B27CB77015BDFA /* FocusView.swift in Sources */, + 118B4F7C72898BC0091B8F6A /* GlobMatch.swift in Sources */, + 48170BB139B744FAD6513959 /* Guardrail.swift in Sources */, + 1203A91F64B3D15431700D4F /* GuardrailEngine.swift in Sources */, + B0140F7BF021D067E67BF817 /* GuardrailStore.swift in Sources */, + 51694FE8AB65C2BC3BD5B21D /* GuardrailsPane.swift in Sources */, + 3A195005D8A4580FADEC59A9 /* HTTPDataTransport.swift in Sources */, + 4C028FF54CB024B6DAEA2DBA /* HTTPHostParser.swift in Sources */, + DED507EF1A36E9B66FE4512E /* HTTPStream.swift in Sources */, + D10DE307D1AD32A7D8173A41 /* HostCanonicalizer.swift in Sources */, + 5A2A8DF18D3C1FC584DAFBEB /* IPCProtocol.swift in Sources */, + B80FC9A3A8F21AFFCF5149A9 /* IPOwnerLookup.swift in Sources */, + 145E54492C15FDD359B6DB08 /* InsightsModel.swift in Sources */, + A3FF156082D5E00D561A7099 /* InsightsPanel.swift in Sources */, + E00C03B4955BFBA626340B5C /* InspectMenuItems.swift in Sources */, + E592D3A1D73A580676FA5696 /* InspectView.swift in Sources */, + 2504E2CFD3C6AFA86FDC86D3 /* InspectionBudget.swift in Sources */, + 042EE0F6F95E5432AB027C65 /* InspectionBudgetView.swift in Sources */, + 0D7D15BD7081161D53ED1578 /* InspectionController.swift in Sources */, + AF8A26B4F8FFA3C94F0D276E /* InspectionProxy.swift in Sources */, + FE3B0FCAFA812B5CEA810488 /* InspectionRecorder.swift in Sources */, + C558099602CDA3A231384EBD /* InstalledApps.swift in Sources */, + E15272D4731FBF6CB1126495 /* JSONTreeView.swift in Sources */, + A9675AD6413CA1740A75CE8F /* JSONValue.swift in Sources */, + AD57CBF846824C0BE9878BF1 /* LLMFacts.swift in Sources */, + 3144B2FBE6DEA543CA36D1CD /* LLMToolCalls.swift in Sources */, + 3FE68A4EC4BEA3A2B81D069E /* LiveView.swift in Sources */, + F9429DCDFAEE199D6635BA33 /* LocalRiskAnalysis.swift in Sources */, + 43329736A36E1C4367881E40 /* LocalRiskSettingsSection.swift in Sources */, + 4B0B6CA666157D7B72A8F511 /* LocalRiskViews.swift in Sources */, + 52A067CD50920CBDEC98A32F /* Localization.swift in Sources */, + 48330DCACD790F31E072D0B3 /* MCPAttribution.swift in Sources */, + 094C8F94FD053B615836D494 /* MCPDomains.swift in Sources */, + D58E19691840000472807F80 /* MCPDomainsSection.swift in Sources */, + BD91747457B98A2408D1977D /* MockGate.swift in Sources */, + AF9E41AC8E40F018E642A73E /* MockRule.swift in Sources */, + CB731DCD258C0048C4FECDF2 /* MockRulesView.swift in Sources */, + 42E39E8ADC51DA39DE0784AD /* Motion.swift in Sources */, + D688BB9313DA940E107D8237 /* NettopParser.swift in Sources */, + 643D3B8316459A2CEFBA261F /* NettopTrafficSource.swift in Sources */, + C456CD5C4C3C603419925D58 /* NetworkChannel.swift in Sources */, + 4767B9EBDCBFD6B3483079B2 /* NetworkScope.swift in Sources */, + 97CE90F39AE2FC5B9E0AD84C /* Notifier.swift in Sources */, + 35B3F93219A8854FFF1D3EEF /* OnDeviceAsk.swift in Sources */, + 6794B84FCA2A7991AD670BDA /* OnDeviceRiskProvider.swift in Sources */, + EDB017EC114FFAF18CEC2786 /* PacketSniffer.swift in Sources */, + 623C50C16EB5A7DCA225F775 /* PluginEngine.swift in Sources */, + 631C449B074FB7E31D887EFC /* PluginModels.swift in Sources */, + 4323C68638C74F3E8D02FA65 /* PluginPackageVerifier.swift in Sources */, + 58EB211C6C5B91A0435C5E11 /* PluginScriptRunner.swift in Sources */, + 931D85D9291D5E557B69BD43 /* PluginSettingsView.swift in Sources */, + A8869D4F16D83EC7120D901E /* PluginStore.swift in Sources */, + BA5C8DE36B0484931B6652E0 /* ProcessLookup.swift in Sources */, + 850653E102AF3CD2C3833524 /* ProcessNaming.swift in Sources */, + CAE2EEC350E48F001B343DE1 /* ProtocolCatalog.swift in Sources */, + 0ACF3321E6670591EC9B1306 /* ProtocolClassifier.swift in Sources */, + AF1BB39DC13C09CAC6253943 /* ProxyJanitor.swift in Sources */, + 3654D301BB54F59D172A1668 /* ProxyRelaunch.swift in Sources */, + 6BE9B797667820AD0E72D789 /* RemoteAsk.swift in Sources */, + F75EB274ED11E8E4225746B2 /* ReportsView.swift in Sources */, + 47F1C0E114B1AFD567C42792 /* ResponseGate.swift in Sources */, + E69786240DE2CC058F7A307A /* ResponseScriptRunner.swift in Sources */, + 897D75C0AEE76F10ADF0CD5C /* ResponseTransformRule.swift in Sources */, + CE0458FD46CC7EF3A1379B53 /* ResponseTransformRulesView.swift in Sources */, + 46E686B76B70B444AA375FBC /* RewriteRule.swift in Sources */, + FF59AD47E15AFE192913C918 /* RewriteRulesView.swift in Sources */, + CE1589D1A40B2EC1084C7A88 /* Rule.swift in Sources */, + 23CC0B3EE557E6F247EC4100 /* RuleEditor.swift in Sources */, + CF2049DA978EB9588596556F /* RulePack.swift in Sources */, + E5973D84F73F277220538694 /* RulePackCatalogComposition.swift in Sources */, + 6C42E5ECB1F31F42DDD421F7 /* RulePackCatalogState.swift in Sources */, + 574A061E9456AD6BD7E3AB5A /* RulePackCatalogUpdater.swift in Sources */, + 62885CD8C265122129AF78FF /* RulePackCatalogVerifier.swift in Sources */, + B1DCF272AD61D6284A4D63BD /* RulePackDeliveryStats.swift in Sources */, + 2497E16386CDFE769EFB0EF6 /* RulePackEditorDraft.swift in Sources */, + 290D1B10464B9915C1505610 /* RulePackEventDelivery.swift in Sources */, + E0C3CC3AA91B74C0D98ACE5F /* RulePackSimulation.swift in Sources */, + CF16C383C4E52E86951F7B17 /* RulePackStore.swift in Sources */, + 836D7B339C78B6FC98DD5AA8 /* RulePackTransfer.swift in Sources */, + C7B4D535CFF9FA9D0DE8D708 /* RulePacksView.swift in Sources */, + 72410A21824E39F8FF1854A3 /* RuleSimulation.swift in Sources */, + D4B24A76368B295B8DE8EC0B /* RuleSimulationView.swift in Sources */, + 67F5BAFB0D59F3692C418D0C /* RuleStore.swift in Sources */, + F130AF6A964F77EF85EBB32D /* RuleTemplates.swift in Sources */, + 14ACBD3AE23905CA5DA965CB /* RulesView.swift in Sources */, + 65DE86F9DCCC5A1293FC29E2 /* SQLite.swift in Sources */, + 80D7CBA2AE6B117ACC0BE7BB /* SettingsEnforcer.swift in Sources */, + 8DAA531E3904A7B356FE2B77 /* SettingsView.swift in Sources */, + 8B74946210FB3616E1F4ACD1 /* SharedStrings.swift in Sources */, + EF884A8D586CA5022C4DD01B /* SystemExtensionScan.swift in Sources */, + 2F80C3268E914A2041232706 /* TLSSNIParser.swift in Sources */, + 0B9096994698EFB06A95D26D /* ToolActivity.swift in Sources */, + C9E61A29C4EA61E978DF7C1A /* ToolCallLinks.swift in Sources */, + 4B7736E9D3BEAB93A4AA8B4E /* ToolResults.swift in Sources */, + DF8776D774DE087DBBFB257F /* TrafficDatabase.swift in Sources */, + 03861BEFD76EF771618B928F /* TrafficModels.swift in Sources */, + B3D4CAEA3D9EB39E1B7BCBA7 /* TrafficMonitor.swift in Sources */, + 7D613ABDA5085E4150738DA6 /* TrafficSource.swift in Sources */, + 7BE6EA58391841D37FB1117F /* TrafficTree.swift in Sources */, + 93AE87F6497373A647A92DD4 /* USBMonitor.swift in Sources */, + DFC721C64B216FEB81C55917 /* UpdateChecker.swift in Sources */, + A1DE70B1FFF145A8057E85C4 /* UpdateInstaller.swift in Sources */, + 8D660394CF2B20BC98E53675 /* UpdateView.swift in Sources */, + 05D3F9927B8A2B6F4D3CC93C /* WindowVisibility.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0945A62A6C0D7F91032CFD50 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 36B21D467163CD9F57115778 /* FlowlightResponseScriptHelper */; + targetProxy = 8E69049BBCF586A050AA927F /* PBXContainerItemProxy */; + }; + 531D8A14230A1D40ACDD824B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1C9BF0C33D1912981FB4B5AD /* Flowlight */; + targetProxy = 7C42FA3A564662B5DB0FD5BF /* PBXContainerItemProxy */; + }; + CBC6CA3966123861544E6E1F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 94D00543044D9B601CDCA877 /* FlowlightExtension */; + targetProxy = 8F920FDBFA157B736CCD7ECE /* PBXContainerItemProxy */; + }; + ECC654C18DFE8F2D4FE918A4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 904DAC0BB81071A09FF1A5B0 /* FlowlightStoreExtension */; + targetProxy = A212C96A4D9348FC9F87A9EA /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 77D58ED5F4678FC1C2A5634A /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 077EA8EE506D61EC90E4411E /* de */, + 0599916780428125A134B249 /* en */, + 7075FF219DB5D21F32149FE5 /* es */, + EC292A1F1020AAA580DA3CDB /* fr */, + 1D0AA61D989998AB7A90CDDB /* it */, + 9970A61AD194525C58096029 /* ja */, + B545B09C3EE58C355E7D048A /* ko */, + 1C63D0070EAC9A8146D63ABD /* pt-PT */, + 62444723DE772055CA79A923 /* zh-Hans */, + AF8F5D7CBCD592768D4C3F2E /* zh-Hant */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0B4E4BC53709054EB9EDCBAF /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = FlowlightExtension/FlowlightExtension.entitlements; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = FlowlightExtension/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.filter; + PRODUCT_NAME = com.flowlight.app.filter; + PROVISIONING_PROFILE_SPECIFIER = "$(FL_EXT_PROFILE)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = AppStore; + }; + 0CB4AC86125929DEE6BFCBA3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = FlowlightExtension/FlowlightExtension.entitlements; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = FlowlightExtension/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.filter; + PRODUCT_NAME = com.flowlight.app.filter; + PROVISIONING_PROFILE_SPECIFIER = "$(FL_EXT_PROFILE)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 2BA4D1560ECB8CD40C5DB361 /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Flowlight/Flowlight-AppStore.entitlements"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = Flowlight/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app; + PRODUCT_NAME = Flowlight; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + }; + name = AppStore; + }; + 3ED55A66D80AB5682CABEB3C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 51; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 15.0; + MARKETING_VERSION = 0.15.6; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 3F7729973334863819D4A284 /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 51; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 38RJUJHKZS; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 15.0; + MARKETING_VERSION = 0.15.6; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = AppStore; + }; + 532DCA2CF4D443B8A0124ECE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Flowlight/Flowlight.entitlements; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = Flowlight/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app; + PRODUCT_NAME = Flowlight; + PROVISIONING_PROFILE_SPECIFIER = "$(FL_APP_PROFILE)"; + SDKROOT = macosx; + }; + name = Release; + }; + 555311EB7E3588CBED9AD438 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 51; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 15.0; + MARKETING_VERSION = 0.15.6; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 59D8FF91B8AD2C705CDDAC5E /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.tests; + SDKROOT = macosx; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight"; + }; + name = AppStore; + }; + 5DBD3E9CE3B414BC7FEEB00E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Flowlight/Flowlight.entitlements; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = Flowlight/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app; + PRODUCT_NAME = Flowlight; + PROVISIONING_PROFILE_SPECIFIER = "$(FL_APP_PROFILE)"; + SDKROOT = macosx; + }; + name = Debug; + }; + 745FC642D34466CA97B01B26 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "FlowlightExtension/FlowlightExtension-AppStore.entitlements"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "FlowlightExtension/Info-AppStore.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.filter; + PRODUCT_NAME = com.flowlight.app.filter; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + }; + name = Release; + }; + 7B63A17199D52F8B6039FF81 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.tests; + SDKROOT = macosx; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight"; + }; + name = Release; + }; + 82A2F2D87C1F408C546D371E /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Flowlight/Flowlight.entitlements; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = Flowlight/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app; + PRODUCT_NAME = Flowlight; + PROVISIONING_PROFILE_SPECIFIER = "$(FL_APP_PROFILE)"; + SDKROOT = macosx; + }; + name = AppStore; + }; + 8DE6CC23E67C44FB5A4DFE4E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Flowlight/Flowlight-AppStore.entitlements"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = Flowlight/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app; + PRODUCT_NAME = Flowlight; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + }; + name = Release; + }; + 9456127BB85B5DFEA0196234 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "FlowlightExtension/FlowlightExtension-AppStore.entitlements"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "FlowlightExtension/Info-AppStore.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.filter; + PRODUCT_NAME = com.flowlight.app.filter; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + }; + name = Debug; + }; + 98278C91D8AA57F268A040BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.tests; + SDKROOT = macosx; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight"; + }; + name = Debug; + }; + A806300B0CAD7CC42ED5F904 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = FlowlightExtension/FlowlightExtension.entitlements; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = FlowlightExtension/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.filter; + PRODUCT_NAME = com.flowlight.app.filter; + PROVISIONING_PROFILE_SPECIFIER = "$(FL_EXT_PROFILE)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + ADBBC4464F6E91D8258DD00A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.FlowlightResponseScriptHelper; + PRODUCT_NAME = FlowlightResponseScriptHelper; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + CAD52FE1B16C85FE2E4B8081 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.FlowlightResponseScriptHelper; + PRODUCT_NAME = FlowlightResponseScriptHelper; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + D6B73476179B6ECC0E8FF0AC /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "FlowlightExtension/FlowlightExtension-AppStore.entitlements"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "FlowlightExtension/Info-AppStore.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.filter; + PRODUCT_NAME = com.flowlight.app.filter; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + }; + name = AppStore; + }; + E49C0C89C2E9D3324293BA12 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Flowlight/Flowlight-AppStore.entitlements"; + COMBINE_HIDPI_IMAGES = YES; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = Flowlight/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app; + PRODUCT_NAME = Flowlight; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) APP_STORE"; + }; + name = Debug; + }; + E89D09DB0A0881E3F0A59071 /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.FlowlightResponseScriptHelper; + PRODUCT_NAME = FlowlightResponseScriptHelper; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = AppStore; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0F10D312DC2BCA5C48705215 /* Build configuration list for PBXNativeTarget "FlowlightAppStore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2BA4D1560ECB8CD40C5DB361 /* AppStore */, + E49C0C89C2E9D3324293BA12 /* Debug */, + 8DE6CC23E67C44FB5A4DFE4E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; + 33A9FF4B8D9B2D5D15133A18 /* Build configuration list for PBXNativeTarget "FlowlightResponseScriptHelper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E89D09DB0A0881E3F0A59071 /* AppStore */, + CAD52FE1B16C85FE2E4B8081 /* Debug */, + ADBBC4464F6E91D8258DD00A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; + 4A74C79A97028F05EA626F95 /* Build configuration list for PBXNativeTarget "Flowlight" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 82A2F2D87C1F408C546D371E /* AppStore */, + 5DBD3E9CE3B414BC7FEEB00E /* Debug */, + 532DCA2CF4D443B8A0124ECE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; + 6C5A1D60ED3AC8932FFE1FB1 /* Build configuration list for PBXNativeTarget "FlowlightExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0B4E4BC53709054EB9EDCBAF /* AppStore */, + 0CB4AC86125929DEE6BFCBA3 /* Debug */, + A806300B0CAD7CC42ED5F904 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; + 6D4671AC947DCF84267F4477 /* Build configuration list for PBXNativeTarget "FlowlightTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 59D8FF91B8AD2C705CDDAC5E /* AppStore */, + 98278C91D8AA57F268A040BA /* Debug */, + 7B63A17199D52F8B6039FF81 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; + CA490C327FA0F549ADD0301B /* Build configuration list for PBXProject "Flowlight" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3F7729973334863819D4A284 /* AppStore */, + 555311EB7E3588CBED9AD438 /* Debug */, + 3ED55A66D80AB5682CABEB3C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; + D76A79764257B12EB4B0EB70 /* Build configuration list for PBXNativeTarget "FlowlightStoreExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D6B73476179B6ECC0E8FF0AC /* AppStore */, + 9456127BB85B5DFEA0196234 /* Debug */, + 745FC642D34466CA97B01B26 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = AppStore; + }; +/* End XCConfigurationList section */ + }; + rootObject = 27052BCDFA1783A148CD45FD /* Project object */; +} diff --git a/Flowlight.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Flowlight.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Flowlight.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight App Store.xcscheme b/Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight App Store.xcscheme new file mode 100644 index 0000000..382dcac --- /dev/null +++ b/Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight App Store.xcscheme @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight.xcscheme b/Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight.xcscheme new file mode 100644 index 0000000..5d3375a --- /dev/null +++ b/Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight.xcscheme @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 3e4f01a..42f2f0f 100644 --- a/README.md +++ b/README.md @@ -352,7 +352,8 @@ same local database. ```sh brew install xcodegen git clone https://github.com/xinbetween/flowlight.git && cd flowlight -xcodegen generate +scripts/check_xcode_project.sh --write # regenerate the committed shared Xcode project +scripts/check_xcode_project.sh # verify it still matches project.yml scripts/build-local.sh # ad-hoc signed, no Apple account needed open build/Build/Products/Release/Flowlight.app scripts/build-dmg.sh # optional: drag-to-install disk image (build/Flowlight.dmg) diff --git a/docs/404.html b/docs/404.html index fd3eef9..2c7f850 100644 --- a/docs/404.html +++ b/docs/404.html @@ -86,7 +86,7 @@

That page isn't here

Try the home page,

diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index ba3be94..a8e0155 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -5,7 +5,8 @@ Internals, build options and the Network Extension path. For an overview, see th ## Layout ``` -project.yml XcodeGen spec (run `xcodegen generate` to regenerate the .xcodeproj) +project.yml XcodeGen source of truth +Flowlight.xcodeproj/ Committed shared output so Xcode Cloud can discover the project before build scripts run Shared/ Compiled into both targets TrafficModels.swift FlowKey (pid, bundle, ip, domain, port, protocol) → bytes in/out, flows IPCProtocol.swift XPC contract between the extension and the app @@ -79,6 +80,11 @@ TEAM_ID=ABCDE12345 scripts/build-signed.sh Run the tests with `xcodebuild -scheme Flowlight test CODE_SIGN_IDENTITY=- CODE_SIGN_ENTITLEMENTS= DEVELOPMENT_TEAM=`. +`project.yml` remains the editable project definition. After changing it, run +`scripts/check_xcode_project.sh --write`, verify with `scripts/check_xcode_project.sh`, and commit the four shared files under +`Flowlight.xcodeproj/`. The generated project is deliberately committed because Xcode Cloud must find its selected +container before a post-clone script can run. User data and Xcode Cloud's local manifest remain ignored. + **If the checkout is under `~/Desktop`, `~/Documents` or `~/Downloads`, two tests will hang for two minutes each and the run will fail.** `HelpTests` reads the built `docs/docs/index.html` to check that every screen's Help anchor exists, and macOS asks for consent before the test host may read those folders — with nobody there diff --git a/docs/about/index.html b/docs/about/index.html index 20d3739..b152f6f 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -153,7 +153,7 @@

Thanks

diff --git a/docs/de/about/index.html b/docs/de/about/index.html index 3509703..1581c47 100644 --- a/docs/de/about/index.html +++ b/docs/de/about/index.html @@ -152,7 +152,7 @@

Dank

diff --git a/docs/de/docs/index.html b/docs/de/docs/index.html index da801b3..2f94863 100644 --- a/docs/de/docs/index.html +++ b/docs/de/docs/index.html @@ -76,7 +76,7 @@

Dokumentation

Flowlight benutzen

-

Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.15.5, macOS 15 oder neuer.

+

Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.15.6, macOS 15 oder neuer.

diff --git a/docs/de/index.html b/docs/de/index.html index ff75d1b..2aba175 100644 --- a/docs/de/index.html +++ b/docs/de/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Sieh, was deine Apps im Netz tun.
brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+UniversalGPL-3.0Keine Telemetrie

+

v0.15.6macOS 15+UniversalGPL-3.0Keine Telemetrie

@@ -572,7 +572,7 @@

Wisse, was deinen Mac verlässt.

diff --git a/docs/de/privacy/index.html b/docs/de/privacy/index.html index ce975f2..d4b1327 100644 --- a/docs/de/privacy/index.html +++ b/docs/de/privacy/index.html @@ -189,7 +189,7 @@

Kontakt

diff --git a/docs/de/threat-model/index.html b/docs/de/threat-model/index.html index 20d0e5b..4a4bf1e 100644 --- a/docs/de/threat-model/index.html +++ b/docs/de/threat-model/index.html @@ -225,7 +225,7 @@

Eine Schwachstelle melden

diff --git a/docs/docs/index.html b/docs/docs/index.html index 447fcea..1c2691a 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -76,7 +76,7 @@

Documentation

Using Flowlight

-

Everything from the first launch to tuning the agent rules. Flowlight 0.15.5, macOS 15 or later.

+

Everything from the first launch to tuning the agent rules. Flowlight 0.15.6, macOS 15 or later.

diff --git a/docs/es/about/index.html b/docs/es/about/index.html index bc1eb62..f42bf60 100644 --- a/docs/es/about/index.html +++ b/docs/es/about/index.html @@ -152,7 +152,7 @@

Agradecimientos

diff --git a/docs/es/docs/index.html b/docs/es/docs/index.html index efab8a0..2dee361 100644 --- a/docs/es/docs/index.html +++ b/docs/es/docs/index.html @@ -76,7 +76,7 @@

Documentación

Usar Flowlight

-

Todo, desde el primer arranque hasta el ajuste de las reglas de agentes. Flowlight 0.15.5, macOS 15 o posterior.

+

Todo, desde el primer arranque hasta el ajuste de las reglas de agentes. Flowlight 0.15.6, macOS 15 o posterior.

diff --git a/docs/es/index.html b/docs/es/index.html index 6bd350e..73330a5 100644 --- a/docs/es/index.html +++ b/docs/es/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Observa la actividad de red de tus apps.

brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+UniversalGPL-3.0Sin telemetría

+

v0.15.6macOS 15+UniversalGPL-3.0Sin telemetría

@@ -572,7 +572,7 @@

Ten claro qué sale de tu Mac.

diff --git a/docs/es/privacy/index.html b/docs/es/privacy/index.html index db5cb6d..8f3b9a5 100644 --- a/docs/es/privacy/index.html +++ b/docs/es/privacy/index.html @@ -189,7 +189,7 @@

Contacto

diff --git a/docs/es/threat-model/index.html b/docs/es/threat-model/index.html index 9d30869..ae84a02 100644 --- a/docs/es/threat-model/index.html +++ b/docs/es/threat-model/index.html @@ -221,7 +221,7 @@

Informar de una vulnerabilidad

diff --git a/docs/fr/about/index.html b/docs/fr/about/index.html index 3422fc6..5f82f33 100644 --- a/docs/fr/about/index.html +++ b/docs/fr/about/index.html @@ -152,7 +152,7 @@

Remerciements

diff --git a/docs/fr/docs/index.html b/docs/fr/docs/index.html index 9e9b6b7..0e1d2c5 100644 --- a/docs/fr/docs/index.html +++ b/docs/fr/docs/index.html @@ -76,7 +76,7 @@

Documentation

Utiliser Flowlight

-

Tout, du premier lancement au réglage des règles des agents. Flowlight 0.15.5, macOS 15 ou version ultérieure.

+

Tout, du premier lancement au réglage des règles des agents. Flowlight 0.15.6, macOS 15 ou version ultérieure.

diff --git a/docs/fr/index.html b/docs/fr/index.html index fc3dda2..72cc83b 100644 --- a/docs/fr/index.html +++ b/docs/fr/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Voyez l’activité réseau de vos apps.

brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+UniverselGPL-3.0Sans télémétrie

+

v0.15.6macOS 15+UniverselGPL-3.0Sans télémétrie

@@ -572,7 +572,7 @@

Sachez ce qui quitte votre Mac.

diff --git a/docs/fr/privacy/index.html b/docs/fr/privacy/index.html index ebbf5a2..a2afc06 100644 --- a/docs/fr/privacy/index.html +++ b/docs/fr/privacy/index.html @@ -189,7 +189,7 @@

Contact

diff --git a/docs/fr/threat-model/index.html b/docs/fr/threat-model/index.html index dcf1a52..9d2a6c7 100644 --- a/docs/fr/threat-model/index.html +++ b/docs/fr/threat-model/index.html @@ -224,7 +224,7 @@

Signaler une vulnérabilité

diff --git a/docs/index.html b/docs/index.html index f921ef6..b082bac 100644 --- a/docs/index.html +++ b/docs/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

See your apps' network activity.
brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+UniversalGPL-3.0No telemetry

+

v0.15.6macOS 15+UniversalGPL-3.0No telemetry

@@ -594,7 +594,7 @@

Know what leaves your Mac.

diff --git a/docs/it/about/index.html b/docs/it/about/index.html index fc17bb7..f09ce98 100644 --- a/docs/it/about/index.html +++ b/docs/it/about/index.html @@ -152,7 +152,7 @@

Ringraziamenti

diff --git a/docs/it/docs/index.html b/docs/it/docs/index.html index 08d8ef6..63987ce 100644 --- a/docs/it/docs/index.html +++ b/docs/it/docs/index.html @@ -76,7 +76,7 @@

Documentazione

Usare Flowlight

-

Tutto, dal primo avvio alla messa a punto delle regole per gli agenti. Flowlight 0.15.5, macOS 15 o successivo.

+

Tutto, dal primo avvio alla messa a punto delle regole per gli agenti. Flowlight 0.15.6, macOS 15 o successivo.

diff --git a/docs/it/index.html b/docs/it/index.html index dce4c12..1244dc9 100644 --- a/docs/it/index.html +++ b/docs/it/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Vedi la rete delle tue app.
Ca Metti una stella su GitHub

brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+UniversaleGPL-3.0Nessuna telemetria

+

v0.15.6macOS 15+UniversaleGPL-3.0Nessuna telemetria

@@ -572,7 +572,7 @@

Sappi che cosa esce dal tuo Mac.

diff --git a/docs/it/privacy/index.html b/docs/it/privacy/index.html index 40eb2ea..973bcda 100644 --- a/docs/it/privacy/index.html +++ b/docs/it/privacy/index.html @@ -189,7 +189,7 @@

Contatti

diff --git a/docs/it/threat-model/index.html b/docs/it/threat-model/index.html index f0e1d09..b6f54d6 100644 --- a/docs/it/threat-model/index.html +++ b/docs/it/threat-model/index.html @@ -223,7 +223,7 @@

Segnalare una vulnerabilità

diff --git a/docs/ja/about/index.html b/docs/ja/about/index.html index 2cbe255..cf08426 100644 --- a/docs/ja/about/index.html +++ b/docs/ja/about/index.html @@ -153,7 +153,7 @@

謝辞

diff --git a/docs/ja/docs/index.html b/docs/ja/docs/index.html index febcec1..c9a1acd 100644 --- a/docs/ja/docs/index.html +++ b/docs/ja/docs/index.html @@ -76,7 +76,7 @@

ドキュメント

Flowlight の使い方

-

初回起動からエージェントのルールの調整まで、すべてここに。Flowlight 0.15.5、macOS 15 以降。

+

初回起動からエージェントのルールの調整まで、すべてここに。Flowlight 0.15.6、macOS 15 以降。

diff --git a/docs/ja/index.html b/docs/ja/index.html index 2f5958a..1fbfea7 100644 --- a/docs/ja/index.html +++ b/docs/ja/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

アプリの通信が見える。
brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+ユニバーサルGPL-3.0テレメトリなし

+

v0.15.6macOS 15+ユニバーサルGPL-3.0テレメトリなし

@@ -571,7 +571,7 @@

Mac から何が出ていくのかを知る。

diff --git a/docs/ja/privacy/index.html b/docs/ja/privacy/index.html index aee6959..156fa76 100644 --- a/docs/ja/privacy/index.html +++ b/docs/ja/privacy/index.html @@ -187,7 +187,7 @@

連絡先

diff --git a/docs/ja/threat-model/index.html b/docs/ja/threat-model/index.html index 9d34d73..b54d85b 100644 --- a/docs/ja/threat-model/index.html +++ b/docs/ja/threat-model/index.html @@ -222,7 +222,7 @@

脆弱性を報告する

diff --git a/docs/ko/about/index.html b/docs/ko/about/index.html index a47efae..09319d4 100644 --- a/docs/ko/about/index.html +++ b/docs/ko/about/index.html @@ -153,7 +153,7 @@

감사

diff --git a/docs/ko/docs/index.html b/docs/ko/docs/index.html index 9dbfce0..8b625c8 100644 --- a/docs/ko/docs/index.html +++ b/docs/ko/docs/index.html @@ -76,7 +76,7 @@

문서

Flowlight 사용하기

-

첫 실행부터 에이전트 규칙 조정까지 전부. Flowlight 0.15.5, macOS 15 이상.

+

첫 실행부터 에이전트 규칙 조정까지 전부. Flowlight 0.15.6, macOS 15 이상.

diff --git a/docs/ko/index.html b/docs/ko/index.html index b812881..6b4e4c0 100644 --- a/docs/ko/index.html +++ b/docs/ko/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

앱이 무엇을 하는지 봅니다.

brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+유니버설GPL-3.0텔레메트리 없음

+

v0.15.6macOS 15+유니버설GPL-3.0텔레메트리 없음

@@ -572,7 +572,7 @@

내 Mac에서 무엇이 나가는지 아세요.

diff --git a/docs/ko/privacy/index.html b/docs/ko/privacy/index.html index 35c2df0..7308565 100644 --- a/docs/ko/privacy/index.html +++ b/docs/ko/privacy/index.html @@ -190,7 +190,7 @@

문의

diff --git a/docs/ko/threat-model/index.html b/docs/ko/threat-model/index.html index 4203bc4..3a39a54 100644 --- a/docs/ko/threat-model/index.html +++ b/docs/ko/threat-model/index.html @@ -221,7 +221,7 @@

취약점 신고하기

diff --git a/docs/llms-full.txt b/docs/llms-full.txt index d5947d3..ca3d0e0 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -62,7 +62,7 @@ Documentation Using Flowlight - Everything from the first launch to tuning the agent rules. Flowlight 0.15.5, macOS 15 or later. + Everything from the first launch to tuning the agent rules. Flowlight 0.15.6, macOS 15 or later. On this page @@ -894,7 +894,7 @@ Understand your AI agents. brew install --cask xinbetween/tap/flowlightCopy - v0.15.5macOS 15+UniversalGPL-3.0No telemetry + v0.15.6macOS 15+UniversalGPL-3.0No telemetry connectionslive @@ -1629,8 +1629,21 @@ Releases Downloads, checksums and full notes for each version are on GitHub Releases. + 0.15.6 +October 23, 2026Latest + + Give Xcode Cloud a stable App Store project. The shared XcodeGen project and Store archive scheme are now + committed so Apple can discover the selected container before any cloud build script runs. + + Keep the generated project honest. A repeatable drift gate regenerates the project from + project.yml, canonicalizes XcodeGen’s one equivalent copy-phase ordering, and fails CI if shared project files are + stale while continuing to ignore user-specific and Xcode-managed state. + + Preserve both distribution channels. The committed project builds the sandboxed App Store content-filter + extension and the Developer ID system extension as separate product graphs, with Store packaging checks unchanged. + 0.15.5 -October 22, 2026Latest +October 22, 2026 Keep changed packs visible until fresh consent. A catalog update that disables an active pack now raises a persistent app-wide notice and Rules badge. Changed and removed packs stay off and visible until acknowledged or freshly diff --git a/docs/llms.txt b/docs/llms.txt index f10ea70..dddd817 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -1,6 +1,6 @@ # Flowlight -> Free, open-source (GPL-3.0) application-aware network monitor for macOS, with focused visibility into AI agents. It attributes observed TCP and UDP activity to the application that made it and records the destination, protocol and byte counts, keeping local history from second to year. Recognized AI agents are listed by name along with the tools and MCP servers they start, under per-agent allowlists. It can also refuse, once asked: a rule blocks an application, a destination or a URL for as long as you specify, and a guardrail withholds a tool from an agent before its model is offered it. Runs on macOS 15 or later; capture is by a sampler or a Network Extension. Current version: 0.15.5. +> Free, open-source (GPL-3.0) application-aware network monitor for macOS, with focused visibility into AI agents. It attributes observed TCP and UDP activity to the application that made it and records the destination, protocol and byte counts, keeping local history from second to year. Recognized AI agents are listed by name along with the tools and MCP servers they start, under per-agent allowlists. It can also refuse, once asked: a rule blocks an application, a destination or a URL for as long as you specify, and a guardrail withholds a tool from an agent before its model is offered it. Runs on macOS 15 or later; capture is by a sampler or a Network Extension. Current version: 0.15.6. - [Download Flowlight.dmg](https://github.com/xinbetween/flowlight/releases/latest/download/Flowlight.dmg) - [Source code](https://github.com/xinbetween/flowlight) diff --git a/docs/plugins/index.html b/docs/plugins/index.html index 313ec31..902083f 100644 --- a/docs/plugins/index.html +++ b/docs/plugins/index.html @@ -211,7 +211,7 @@

Review checklist

diff --git a/docs/privacy/index.html b/docs/privacy/index.html index 347192a..d840f74 100644 --- a/docs/privacy/index.html +++ b/docs/privacy/index.html @@ -196,7 +196,7 @@

Contact

diff --git a/docs/pt-PT/about/index.html b/docs/pt-PT/about/index.html index e2883eb..fde3bba 100644 --- a/docs/pt-PT/about/index.html +++ b/docs/pt-PT/about/index.html @@ -152,7 +152,7 @@

Agradecimentos

diff --git a/docs/pt-PT/docs/index.html b/docs/pt-PT/docs/index.html index f905f67..043511d 100644 --- a/docs/pt-PT/docs/index.html +++ b/docs/pt-PT/docs/index.html @@ -76,7 +76,7 @@

Documentação

Usar o Flowlight

-

Tudo, da primeira abertura ao ajuste das regras dos agentes. Flowlight 0.15.5, macOS 15 ou posterior.

+

Tudo, da primeira abertura ao ajuste das regras dos agentes. Flowlight 0.15.6, macOS 15 ou posterior.

diff --git a/docs/pt-PT/index.html b/docs/pt-PT/index.html index fe88b78..8f782bf 100644 --- a/docs/pt-PT/index.html +++ b/docs/pt-PT/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Veja a atividade de rede das suas apps.

brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+UniversalGPL-3.0Sem telemetria

+

v0.15.6macOS 15+UniversalGPL-3.0Sem telemetria

@@ -572,7 +572,7 @@

Saiba o que sai do seu Mac.

diff --git a/docs/pt-PT/privacy/index.html b/docs/pt-PT/privacy/index.html index f963a4a..d8ab03c 100644 --- a/docs/pt-PT/privacy/index.html +++ b/docs/pt-PT/privacy/index.html @@ -189,7 +189,7 @@

Contacto

diff --git a/docs/pt-PT/threat-model/index.html b/docs/pt-PT/threat-model/index.html index 10619b7..6af27c8 100644 --- a/docs/pt-PT/threat-model/index.html +++ b/docs/pt-PT/threat-model/index.html @@ -222,7 +222,7 @@

Comunicar uma vulnerabilidade

diff --git a/docs/releases/index.html b/docs/releases/index.html index 2af01e6..9732c2a 100644 --- a/docs/releases/index.html +++ b/docs/releases/index.html @@ -28,7 +28,7 @@ - + @@ -61,7 +61,20 @@

What's new

-

0.15.5

Latest
+

0.15.6

Latest
+
    +
  • Give Xcode Cloud a stable App Store project. The shared XcodeGen project and Store archive scheme are now + committed so Apple can discover the selected container before any cloud build script runs.
  • +
  • Keep the generated project honest. A repeatable drift gate regenerates the project from + project.yml, canonicalizes XcodeGen’s one equivalent copy-phase ordering, and fails CI if shared project files are + stale while continuing to ignore user-specific and Xcode-managed state.
  • +
  • Preserve both distribution channels. The committed project builds the sandboxed App Store content-filter + extension and the Developer ID system extension as separate product graphs, with Store packaging checks unchanged.
  • +
+
+ +
+

0.15.5

  • Keep changed packs visible until fresh consent. A catalog update that disables an active pack now raises a persistent app-wide notice and Rules badge. Changed and removed packs stay off and visible until acknowledged or freshly @@ -1310,7 +1323,7 @@

    What's new

diff --git a/docs/sitemap.xml b/docs/sitemap.xml index bfe3b97..9f8edb9 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -5,7 +5,7 @@ https://flowlight.xinbetween.com/2026-10-20 https://flowlight.xinbetween.com/plugins/2026-10-13 https://flowlight.xinbetween.com/privacy/2026-10-20 - https://flowlight.xinbetween.com/releases/2026-10-22 + https://flowlight.xinbetween.com/releases/2026-10-23 https://flowlight.xinbetween.com/threat-model/2026-10-22 https://flowlight.xinbetween.com/de/about/2026-09-26 https://flowlight.xinbetween.com/de/docs/2026-10-22 diff --git a/docs/threat-model/index.html b/docs/threat-model/index.html index 7a3fa26..bd4ed3e 100644 --- a/docs/threat-model/index.html +++ b/docs/threat-model/index.html @@ -231,7 +231,7 @@

Reporting a vulnerability

diff --git a/docs/zh-Hans/about/index.html b/docs/zh-Hans/about/index.html index 59f54b1..2e79834 100644 --- a/docs/zh-Hans/about/index.html +++ b/docs/zh-Hans/about/index.html @@ -152,7 +152,7 @@

致谢

diff --git a/docs/zh-Hans/docs/index.html b/docs/zh-Hans/docs/index.html index 6060f6c..05394e4 100644 --- a/docs/zh-Hans/docs/index.html +++ b/docs/zh-Hans/docs/index.html @@ -76,7 +76,7 @@

文档

使用 Flowlight

-

从第一次启动到调整代理规则,需要的都在这里。Flowlight 0.15.5,macOS 15 或更高版本。

+

从第一次启动到调整代理规则,需要的都在这里。Flowlight 0.15.6,macOS 15 或更高版本。

diff --git a/docs/zh-Hans/index.html b/docs/zh-Hans/index.html index 70c226b..61c1768 100644 --- a/docs/zh-Hans/index.html +++ b/docs/zh-Hans/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

看清应用的网络活动。

brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+通用架构GPL-3.0无遥测

+

v0.15.6macOS 15+通用架构GPL-3.0无遥测

@@ -569,7 +569,7 @@

知道什么离开了你的 Mac。

diff --git a/docs/zh-Hans/privacy/index.html b/docs/zh-Hans/privacy/index.html index ebacd1a..be20231 100644 --- a/docs/zh-Hans/privacy/index.html +++ b/docs/zh-Hans/privacy/index.html @@ -187,7 +187,7 @@

联系方式

diff --git a/docs/zh-Hans/threat-model/index.html b/docs/zh-Hans/threat-model/index.html index 1fe3dd1..3a63348 100644 --- a/docs/zh-Hans/threat-model/index.html +++ b/docs/zh-Hans/threat-model/index.html @@ -210,7 +210,7 @@

报告漏洞

diff --git a/docs/zh-Hant/about/index.html b/docs/zh-Hant/about/index.html index b320e7a..a4c57a6 100644 --- a/docs/zh-Hant/about/index.html +++ b/docs/zh-Hant/about/index.html @@ -152,7 +152,7 @@

致謝

diff --git a/docs/zh-Hant/docs/index.html b/docs/zh-Hant/docs/index.html index 164dbca..7f4b6af 100644 --- a/docs/zh-Hant/docs/index.html +++ b/docs/zh-Hant/docs/index.html @@ -76,7 +76,7 @@

說明文件

使用 Flowlight

-

從第一次啟動到調整代理規則,全都在這裡。Flowlight 0.15.5,macOS 15 或以上版本。

+

從第一次啟動到調整代理規則,全都在這裡。Flowlight 0.15.6,macOS 15 或以上版本。

diff --git a/docs/zh-Hant/index.html b/docs/zh-Hant/index.html index fab1ff4..40a6a04 100644 --- a/docs/zh-Hant/index.html +++ b/docs/zh-Hant/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

看見每個 App 的網路活動。
brew install --cask xinbetween/tap/flowlight

-

v0.15.5macOS 15+通用架構GPL-3.0無遙測

+

v0.15.6macOS 15+通用架構GPL-3.0無遙測

@@ -570,7 +570,7 @@

知道有什麼離開了你的 Mac。

diff --git a/docs/zh-Hant/privacy/index.html b/docs/zh-Hant/privacy/index.html index c3eb5a1..2a2b0e9 100644 --- a/docs/zh-Hant/privacy/index.html +++ b/docs/zh-Hant/privacy/index.html @@ -187,7 +187,7 @@

聯絡

diff --git a/docs/zh-Hant/threat-model/index.html b/docs/zh-Hant/threat-model/index.html index cd46992..3b2485b 100644 --- a/docs/zh-Hant/threat-model/index.html +++ b/docs/zh-Hant/threat-model/index.html @@ -211,7 +211,7 @@

回報漏洞

diff --git a/project.yml b/project.yml index 755e295..b82da2b 100644 --- a/project.yml +++ b/project.yml @@ -15,8 +15,8 @@ settings: DEVELOPMENT_TEAM: "" CODE_SIGN_STYLE: Automatic ENABLE_HARDENED_RUNTIME: YES - MARKETING_VERSION: "0.15.5" - CURRENT_PROJECT_VERSION: "50" + MARKETING_VERSION: "0.15.6" + CURRENT_PROJECT_VERSION: "51" configs: AppStore: DEVELOPMENT_TEAM: 38RJUJHKZS diff --git a/scripts/check_xcode_project.sh b/scripts/check_xcode_project.sh new file mode 100755 index 0000000..a990e8a --- /dev/null +++ b/scripts/check_xcode_project.sh @@ -0,0 +1,121 @@ +#!/bin/bash +# Regenerates the committed XcodeGen project in isolation and fails if its shared files drift. +set -euo pipefail +cd "$(dirname "$0")/.." + +command -v xcodegen >/dev/null || { + echo "xcodegen is required (brew install xcodegen)." >&2 + exit 1 +} + +mode=${1:-check} +if [[ "$mode" != check && "$mode" != --write ]]; then + echo "usage: scripts/check_xcode_project.sh [--write]" >&2 + exit 2 +fi + +temporary=$(mktemp -d "${TMPDIR:-/tmp}/flowlight-xcode-project.XXXXXX") +trap 'rm -rf "$temporary"' EXIT +working_source="$temporary/working-source" +index_source="$temporary/index-source" +index_committed="$temporary/index-committed" +mkdir -p -- "$working_source" "$index_source" "$index_committed" + +copy_parent() { + local root=$1 file=$2 parent + if [[ "$file" == */* ]]; then parent=${file%/*}; else parent=.; fi + mkdir -p -- "$root/$parent" +} + +# Reproduce the working tree, including nonignored untracked files, without build output or Xcode state. +while IFS= read -r -d '' file; do + case "$file" in + Flowlight.xcodeproj/*) continue ;; + esac + [[ -e "$file" || -L "$file" ]] || continue + copy_parent "$working_source" "$file" + cp -P -- "./$file" "$working_source/$file" +done < <(git ls-files --cached --others --exclude-standard -z) + +# Reproduce the exact staged tree separately. Preserve its project for comparison, then regenerate from its spec. +git checkout-index --all --prefix="$index_source/" +if [[ -d "$index_source/Flowlight.xcodeproj" ]]; then + cp -R "$index_source/Flowlight.xcodeproj/." "$index_committed/" + rm -rf "$index_source/Flowlight.xcodeproj" +fi + +for root in "$working_source" "$index_source"; do + ( + cd "$root" + xcodegen generate >/dev/null + python3 -I scripts/normalize_xcode_project.py + ) +done + +copy_shared() { + local source=$1 destination=$2 file relative parent + mkdir -p -- "$destination" + for file in \ + "$source/project.pbxproj" \ + "$source/project.xcworkspace/contents.xcworkspacedata"; do + [[ -f "$file" ]] || continue + relative=${file#"$source/"} + copy_parent "$destination" "$relative" + cp -- "$file" "$destination/$relative" + done + if [[ -d "$source/xcshareddata/xcschemes" ]]; then + while IFS= read -r -d '' file; do + relative=${file#"$source/"} + copy_parent "$destination" "$relative" + cp -- "$file" "$destination/$relative" + done < <(find "$source/xcshareddata/xcschemes" -type f -name '*.xcscheme' -print0) + fi +} + +working_expected="$temporary/working-expected" +working_committed="$temporary/working-committed" +index_expected="$temporary/index-expected" +copy_shared "$working_source/Flowlight.xcodeproj" "$working_expected" +copy_shared Flowlight.xcodeproj "$working_committed" +copy_shared "$index_source/Flowlight.xcodeproj" "$index_expected" + +if [[ "$mode" == --write ]]; then + for file in project.pbxproj project.xcworkspace/contents.xcworkspacedata; do + copy_parent Flowlight.xcodeproj "$file" + cp -- "$working_expected/$file" "Flowlight.xcodeproj/$file" + done + + mkdir -p -- Flowlight.xcodeproj/xcshareddata/xcschemes + while IFS= read -r -d '' file; do + relative=${file#"Flowlight.xcodeproj/"} + [[ -f "$working_expected/$relative" ]] || rm -f -- "$file" + done < <(find Flowlight.xcodeproj/xcshareddata/xcschemes -type f -name '*.xcscheme' -print0) + while IFS= read -r -d '' file; do + relative=${file#"$working_expected/"} + copy_parent Flowlight.xcodeproj "$relative" + cp -- "$file" "Flowlight.xcodeproj/$relative" + done < <(find "$working_expected/xcshareddata/xcschemes" -type f -name '*.xcscheme' -print0) + + echo "Regenerated the committed Xcode project from project.yml." + echo "Stage project.yml and Flowlight.xcodeproj, then run this check again." + exit 0 +fi + +changed=0 +if ! diff -qr "$working_committed" "$working_expected" >/dev/null; then + echo "Working-tree Flowlight.xcodeproj differs from working-tree project.yml:" + diff -ru "$working_committed" "$working_expected" || true + changed=1 +fi +if ! diff -qr "$index_committed" "$index_expected" >/dev/null; then + echo "Staged Flowlight.xcodeproj differs from staged project.yml:" + diff -ru "$index_committed" "$index_expected" || true + changed=1 +fi + +if [[ "$changed" -ne 0 ]]; then + echo "Flowlight.xcodeproj is out of date — run scripts/check_xcode_project.sh --write, stage the shared files, and check again." >&2 + exit 1 +fi + +echo "Committed Xcode project matches project.yml in both the working tree and Git index." diff --git a/scripts/normalize_xcode_project.py b/scripts/normalize_xcode_project.py new file mode 100755 index 0000000..8ed1ba0 --- /dev/null +++ b/scripts/normalize_xcode_project.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +"""Canonicalize XcodeGen's equivalent duplicate copy-phase ordering.""" + +from pathlib import Path +import re +import sys + +PROJECT = Path(__file__).resolve().parents[1] / "Flowlight.xcodeproj/project.pbxproj" +PHASE = re.compile( + r"(?P
\t\t(?P[A-F0-9]{24}) /\* Embed Dependencies \*/ = \{\n)" + r"(?P\t\t\tisa = PBXCopyFilesBuildPhase;\n.*?" + r'\t\t\tname = "Embed Dependencies";\n' + r"\t\t\trunOnlyForDeploymentPostprocessing = 0;\n)" + r"(?P