Add iPad support, auto-pinning, and comprehensive logging

- Adaptive iPhone/iPad layout with NavigationSplitView sidebar
- Auto-detect SSL-pinned domains, fall back to passthrough
- Certificate install via local HTTP server (Safari profile flow)
- App Group-backed CA, per-domain leaf cert LRU cache
- DB-backed config repository, Darwin notification throttling
- Rules engine, breakpoint rules, pinned domain tracking
- os.Logger instrumentation across tunnel/proxy/mitm/capture/cert/rules/db/ipc/ui
- Fix dyld framework embed, race conditions, thread safety
This commit is contained in:
Trey t
2026-04-11 12:52:18 -05:00
parent c77e506db5
commit 148bc3887c
77 changed files with 6710 additions and 847 deletions

View File

@@ -36,6 +36,15 @@ struct ComposeListView: View {
.foregroundStyle(.secondary)
.lineLimit(1)
}
if let ts = request.lastSentAt {
Text(formatTimestamp(ts))
.font(.caption2)
.foregroundStyle(.tertiary)
}
}
Spacer()
if let status = request.responseStatus {
StatusBadge(statusCode: status)
}
}
}
@@ -124,6 +133,13 @@ struct ComposeListView: View {
try? composeRepo.insert(&request)
}
private func formatTimestamp(_ ts: Double) -> String {
let date = Date(timeIntervalSince1970: ts)
let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .abbreviated
return "Sent \(formatter.localizedString(for: date, relativeTo: Date()))"
}
private func encodeHeaders(_ headers: [(key: String, value: String)]) -> String? {
var dict: [String: String] = [:]
for h in headers { dict[h.key] = h.value }