Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
15 changes: 13 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
3 changes: 2 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
Expand Down
2,688 changes: 2,688 additions & 0 deletions Flowlight.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0E90A4F6F62FF71E3D3A1786"
BuildableName = "FlowlightAppStore.app"
BlueprintName = "FlowlightAppStore"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0E90A4F6F62FF71E3D3A1786"
BuildableName = "FlowlightAppStore.app"
BlueprintName = "FlowlightAppStore"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0E90A4F6F62FF71E3D3A1786"
BuildableName = "FlowlightAppStore.app"
BlueprintName = "FlowlightAppStore"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0E90A4F6F62FF71E3D3A1786"
BuildableName = "FlowlightAppStore.app"
BlueprintName = "FlowlightAppStore"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "AppStore"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
116 changes: 116 additions & 0 deletions Flowlight.xcodeproj/xcshareddata/xcschemes/Flowlight.xcscheme
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C9BF0C33D1912981FB4B5AD"
BuildableName = "Flowlight.app"
BlueprintName = "Flowlight"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0249194ABEFD25813E6C14AB"
BuildableName = "FlowlightTests.xctest"
BlueprintName = "FlowlightTests"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C9BF0C33D1912981FB4B5AD"
BuildableName = "Flowlight.app"
BlueprintName = "Flowlight"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0249194ABEFD25813E6C14AB"
BuildableName = "FlowlightTests.xctest"
BlueprintName = "FlowlightTests"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C9BF0C33D1912981FB4B5AD"
BuildableName = "Flowlight.app"
BlueprintName = "Flowlight"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C9BF0C33D1912981FB4B5AD"
BuildableName = "Flowlight.app"
BlueprintName = "Flowlight"
ReferencedContainer = "container:Flowlight.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion docs/404.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ <h1>That page isn't here</h1><p class="lede">Try the <a href="/">home page</a>,
<div class="legal">
<span>© 2026 The Flowlight contributors. Flowlight is free software, released under the
<a href="https://github.com/xinbetween/flowlight/blob/main/LICENSE">GNU General Public License v3.0</a>.</span>
<span>Version 0.15.5 · Not affiliated with Apple or any AI provider named on this site.</span>
<span>Version 0.15.6 · Not affiliated with Apple or any AI provider named on this site.</span>
</div>
</div>
</footer>
Expand Down
8 changes: 7 additions & 1 deletion docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/about/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ <h2 id="thanks">Thanks</h2>
<div class="legal">
<span>© 2026 The Flowlight contributors. Flowlight is free software, released under the
<a href="https://github.com/xinbetween/flowlight/blob/main/LICENSE">GNU General Public License v3.0</a>.</span>
<span>Version 0.15.5 · Not affiliated with Apple or any AI provider named on this site.</span>
<span>Version 0.15.6 · Not affiliated with Apple or any AI provider named on this site.</span>
</div>
</div>
</footer>
Expand Down
2 changes: 1 addition & 1 deletion docs/de/about/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ <h2 id="thanks">Dank</h2>
</div>
<div class="legal">
<span>© 2026 Die Flowlight-Mitwirkenden. Flowlight ist freie Software, veröffentlicht unter der <a href="https://github.com/xinbetween/flowlight/blob/main/LICENSE">GNU General Public License v3.0</a>.</span>
<span>Version 0.15.5 · Nicht verbunden mit Apple oder einem der hier genannten KI-Anbieter.</span>
<span>Version 0.15.6 · Nicht verbunden mit Apple oder einem der hier genannten KI-Anbieter.</span>
</div>
</div>
</footer>
Expand Down
4 changes: 2 additions & 2 deletions docs/de/docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
<section class="page-head"><div class="wrap">
<p class="eyebrow">Dokumentation</p>
<h1>Flowlight benutzen</h1>
<p class="lede">Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.15.5, macOS 15 oder neuer.</p>
<p class="lede">Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.15.6, macOS 15 oder neuer.</p>
</div></section>
<div class="wrap prose-wrap">
<nav class="toc" aria-label="Auf dieser Seite">
Expand Down Expand Up @@ -755,7 +755,7 @@ <h2 id="limits">Grenzen</h2>
</div>
<div class="legal">
<span>© 2026 Die Flowlight-Mitwirkenden. Flowlight ist freie Software, veröffentlicht unter der <a href="https://github.com/xinbetween/flowlight/blob/main/LICENSE">GNU General Public License v3.0</a>.</span>
<span>Version 0.15.5 · Nicht verbunden mit Apple oder einem der hier genannten KI-Anbieter.</span>
<span>Version 0.15.6 · Nicht verbunden mit Apple oder einem der hier genannten KI-Anbieter.</span>
</div>
</div>
</footer>
Expand Down
6 changes: 3 additions & 3 deletions docs/de/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
<link rel="apple-touch-icon" href="../assets/apple-touch-icon.png">

<link rel="stylesheet" href="../assets/site.css?v=807a8a77">
<script type="application/ld+json">{"@context": "https://schema.org", "@graph": [{"@type": "WebSite", "@id": "https://flowlight.xinbetween.com/#website-de", "url": "https://flowlight.xinbetween.com/de/", "name": "Flowlight", "inLanguage": "de", "publisher": {"@id": "https://flowlight.xinbetween.com/#publisher"}}, {"@type": "Organization", "@id": "https://flowlight.xinbetween.com/#publisher", "name": "xinbetween", "url": "https://flowlight.xinbetween.com/", "logo": "https://flowlight.xinbetween.com/assets/icon.png", "sameAs": ["https://github.com/xinbetween/flowlight"]}, {"@type": "WebPage", "@id": "https://flowlight.xinbetween.com/de/#webpage", "url": "https://flowlight.xinbetween.com/de/", "name": "Flowlight für macOS", "description": "Flowlight ist Open-Source-Netzwerküberwachung für macOS – app-genau, mit dem tiefsten Blick auf KI-Agenten, ihre Tools und MCP-Server.", "inLanguage": "de", "isPartOf": {"@id": "https://flowlight.xinbetween.com/#website-de"}, "dateModified": "2026-10-20"}, {"@type": "SoftwareApplication", "@id": "https://flowlight.xinbetween.com/#app-de", "name": "Flowlight", "description": "Flowlight ist Open-Source-Netzwerküberwachung für macOS – app-genau, mit dem tiefsten Blick auf KI-Agenten, ihre Tools und MCP-Server.", "url": "https://flowlight.xinbetween.com/de/", "applicationCategory": "SecurityApplication", "applicationSubCategory": "Network monitor", "operatingSystem": "macOS 15 or later", "softwareVersion": "0.15.5", "downloadUrl": "https://github.com/xinbetween/flowlight/releases/latest/download/Flowlight.dmg", "installUrl": "https://flowlight.xinbetween.com/de/docs/#install", "image": "https://flowlight.xinbetween.com/assets/social-card.png", "screenshot": "https://flowlight.xinbetween.com/assets/screenshots/agents.png", "license": "https://www.gnu.org/licenses/gpl-3.0.html", "isAccessibleForFree": true, "publisher": {"@id": "https://flowlight.xinbetween.com/#publisher"}, "offers": {"@type": "Offer", "price": "0", "priceCurrency": "USD", "availability": "https://schema.org/InStock"}}]}</script>
<script type="application/ld+json">{"@context": "https://schema.org", "@graph": [{"@type": "WebSite", "@id": "https://flowlight.xinbetween.com/#website-de", "url": "https://flowlight.xinbetween.com/de/", "name": "Flowlight", "inLanguage": "de", "publisher": {"@id": "https://flowlight.xinbetween.com/#publisher"}}, {"@type": "Organization", "@id": "https://flowlight.xinbetween.com/#publisher", "name": "xinbetween", "url": "https://flowlight.xinbetween.com/", "logo": "https://flowlight.xinbetween.com/assets/icon.png", "sameAs": ["https://github.com/xinbetween/flowlight"]}, {"@type": "WebPage", "@id": "https://flowlight.xinbetween.com/de/#webpage", "url": "https://flowlight.xinbetween.com/de/", "name": "Flowlight für macOS", "description": "Flowlight ist Open-Source-Netzwerküberwachung für macOS – app-genau, mit dem tiefsten Blick auf KI-Agenten, ihre Tools und MCP-Server.", "inLanguage": "de", "isPartOf": {"@id": "https://flowlight.xinbetween.com/#website-de"}, "dateModified": "2026-10-20"}, {"@type": "SoftwareApplication", "@id": "https://flowlight.xinbetween.com/#app-de", "name": "Flowlight", "description": "Flowlight ist Open-Source-Netzwerküberwachung für macOS – app-genau, mit dem tiefsten Blick auf KI-Agenten, ihre Tools und MCP-Server.", "url": "https://flowlight.xinbetween.com/de/", "applicationCategory": "SecurityApplication", "applicationSubCategory": "Network monitor", "operatingSystem": "macOS 15 or later", "softwareVersion": "0.15.6", "downloadUrl": "https://github.com/xinbetween/flowlight/releases/latest/download/Flowlight.dmg", "installUrl": "https://flowlight.xinbetween.com/de/docs/#install", "image": "https://flowlight.xinbetween.com/assets/social-card.png", "screenshot": "https://flowlight.xinbetween.com/assets/screenshots/agents.png", "license": "https://www.gnu.org/licenses/gpl-3.0.html", "isAccessibleForFree": true, "publisher": {"@id": "https://flowlight.xinbetween.com/#publisher"}, "offers": {"@type": "Offer", "price": "0", "priceCurrency": "USD", "availability": "https://schema.org/InStock"}}]}</script>
</head>
<body>
<a class="skip" href="#main" style="position:absolute;left:-999px">Zum Inhalt springen</a>
Expand Down Expand Up @@ -90,7 +90,7 @@ <h1 style="margin-top:16px">Sieh, was deine Apps im Netz tun.<br><span class="fl
Stern auf GitHub
</a>
<p class="brew"><code>brew install --cask xinbetween/tap/flowlight</code><button type="button" class="copy" data-copy="brew install --cask xinbetween/tap/flowlight">Kopieren</button></p>
<p class="meta-row"><span>v0.15.5</span><span>macOS 15+</span><span>Universal</span><span>GPL-3.0</span><span>Keine Telemetrie</span></p>
<p class="meta-row"><span>v0.15.6</span><span>macOS 15+</span><span>Universal</span><span>GPL-3.0</span><span>Keine Telemetrie</span></p>
</div>
</div>

Expand Down Expand Up @@ -572,7 +572,7 @@ <h2>Wisse, was deinen Mac verlässt.</h2>
</div>
<div class="legal">
<span>© 2026 Die Flowlight-Mitwirkenden. Flowlight ist freie Software, veröffentlicht unter der <a href="https://github.com/xinbetween/flowlight/blob/main/LICENSE">GNU General Public License v3.0</a>.</span>
<span>Version 0.15.5 · Nicht verbunden mit Apple oder einem der hier genannten KI-Anbieter.</span>
<span>Version 0.15.6 · Nicht verbunden mit Apple oder einem der hier genannten KI-Anbieter.</span>
</div>
</div>
</footer>
Expand Down
Loading
Loading