Initial project setup - Phases 1-3 complete
This commit is contained in:
29
.claude/settings.local.json
Normal file
29
.claude/settings.local.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"WebFetch(domain:docs.proxyman.com)",
|
||||
"WebSearch",
|
||||
"WebFetch(domain:freshbits.fi)",
|
||||
"WebFetch(domain:forums.swift.org)",
|
||||
"WebFetch(domain:github.com)",
|
||||
"Bash(xcode-select -p)",
|
||||
"Bash(xcodegen generate:*)",
|
||||
"Bash(rm -rf ~/Library/Developer/Xcode/DerivedData/ProxyApp-*/)",
|
||||
"Bash(rm -rf ~/Library/Developer/Xcode/DerivedData/ProxyApp-*)",
|
||||
"Read(//Users/treyt/Library/Developer/Xcode/DerivedData/**)",
|
||||
"Bash(pkill -f \"com.apple.dt.SKAgent\")",
|
||||
"Bash(rm -rf ~/Library/Developer/Xcode/DerivedData/ProxyApp-*/SourcePackages)",
|
||||
"Bash(rm -rf ~/Library/Caches/org.swift.swiftpm/repositories/GRDB*)",
|
||||
"Bash(pkill -9 -f xcodebuild)",
|
||||
"Bash(rm -rf ~/Library/Caches/org.swift.swiftpm)",
|
||||
"Bash(pkill -9 -f swift-build)",
|
||||
"Bash(pkill -9 -f \"com.apple.dt\")",
|
||||
"Bash(ls ~/Library/Developer/Xcode/DerivedData/ProxyApp-*/SourcePackages/checkouts/)",
|
||||
"Bash(cat ~/Library/Developer/Xcode/DerivedData/ProxyApp-*/SourcePackages/checkouts/swift-crypto/Package.swift)",
|
||||
"Bash(cat ~/Library/Developer/Xcode/DerivedData/ProxyApp-*/SourcePackages/checkouts/swift-certificates/Package.swift)",
|
||||
"Bash(git init:*)",
|
||||
"Bash(git add:*)",
|
||||
"Bash(git commit:*)"
|
||||
]
|
||||
}
|
||||
}
|
||||
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
.DS_Store
|
||||
*.xcuserdata
|
||||
DerivedData/
|
||||
.build/
|
||||
screens/
|
||||
103
App/AppState.swift
Normal file
103
App/AppState.swift
Normal file
@@ -0,0 +1,103 @@
|
||||
import SwiftUI
|
||||
import NetworkExtension
|
||||
import ProxyCore
|
||||
|
||||
@Observable
|
||||
@MainActor
|
||||
final class AppState {
|
||||
var vpnStatus: NEVPNStatus = .disconnected
|
||||
var isCertificateInstalled: Bool = false
|
||||
var isCertificateTrusted: Bool = false
|
||||
|
||||
private var vpnManager: NETunnelProviderManager?
|
||||
private var statusObservation: NSObjectProtocol?
|
||||
|
||||
init() {
|
||||
Task {
|
||||
await loadVPNManager()
|
||||
}
|
||||
}
|
||||
|
||||
func loadVPNManager() async {
|
||||
do {
|
||||
let managers = try await NETunnelProviderManager.loadAllFromPreferences()
|
||||
if let existing = managers.first {
|
||||
vpnManager = existing
|
||||
} else {
|
||||
let manager = NETunnelProviderManager()
|
||||
let proto = NETunnelProviderProtocol()
|
||||
proto.providerBundleIdentifier = ProxyConstants.extensionBundleIdentifier
|
||||
proto.serverAddress = ProxyConstants.proxyHost
|
||||
manager.protocolConfiguration = proto
|
||||
manager.localizedDescription = "Proxy"
|
||||
manager.isEnabled = true
|
||||
try await manager.saveToPreferences()
|
||||
try await manager.loadFromPreferences()
|
||||
vpnManager = manager
|
||||
}
|
||||
observeVPNStatus()
|
||||
vpnStatus = vpnManager?.connection.status ?? .disconnected
|
||||
} catch {
|
||||
print("[AppState] Failed to load VPN manager: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
func toggleVPN() async {
|
||||
guard let manager = vpnManager else {
|
||||
await loadVPNManager()
|
||||
return
|
||||
}
|
||||
|
||||
switch manager.connection.status {
|
||||
case .connected, .connecting:
|
||||
manager.connection.stopVPNTunnel()
|
||||
case .disconnected, .invalid:
|
||||
do {
|
||||
// Ensure saved and fresh before starting
|
||||
manager.isEnabled = true
|
||||
try await manager.saveToPreferences()
|
||||
try await manager.loadFromPreferences()
|
||||
try manager.connection.startVPNTunnel()
|
||||
} catch {
|
||||
print("[AppState] Failed to start VPN: \(error)")
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
var isVPNConnected: Bool {
|
||||
vpnStatus == .connected
|
||||
}
|
||||
|
||||
var vpnStatusText: String {
|
||||
switch vpnStatus {
|
||||
case .connected: "Connected"
|
||||
case .connecting: "Connecting..."
|
||||
case .disconnecting: "Disconnecting..."
|
||||
case .disconnected: "Disconnected"
|
||||
case .invalid: "Not Configured"
|
||||
case .reasserting: "Reconnecting..."
|
||||
@unknown default: "Unknown"
|
||||
}
|
||||
}
|
||||
|
||||
private func observeVPNStatus() {
|
||||
guard let manager = vpnManager else { return }
|
||||
|
||||
// Remove existing observer
|
||||
if let existing = statusObservation {
|
||||
NotificationCenter.default.removeObserver(existing)
|
||||
}
|
||||
|
||||
statusObservation = NotificationCenter.default.addObserver(
|
||||
forName: .NEVPNStatusDidChange,
|
||||
object: manager.connection,
|
||||
queue: .main
|
||||
) { [weak self] _ in
|
||||
Task { @MainActor in
|
||||
self?.vpnStatus = manager.connection.status
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
47
App/ContentView.swift
Normal file
47
App/ContentView.swift
Normal file
@@ -0,0 +1,47 @@
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@Environment(AppState.self) private var appState
|
||||
|
||||
enum Tab: Hashable {
|
||||
case home, pin, compose, more
|
||||
}
|
||||
|
||||
@State private var selectedTab: Tab = .home
|
||||
|
||||
var body: some View {
|
||||
TabView(selection: $selectedTab) {
|
||||
NavigationStack {
|
||||
HomeView()
|
||||
}
|
||||
.tabItem {
|
||||
Label("Home", systemImage: "house.fill")
|
||||
}
|
||||
.tag(Tab.home)
|
||||
|
||||
NavigationStack {
|
||||
PinView()
|
||||
}
|
||||
.tabItem {
|
||||
Label("Pin", systemImage: "pin.fill")
|
||||
}
|
||||
.tag(Tab.pin)
|
||||
|
||||
NavigationStack {
|
||||
ComposeListView()
|
||||
}
|
||||
.tabItem {
|
||||
Label("Compose", systemImage: "square.and.pencil")
|
||||
}
|
||||
.tag(Tab.compose)
|
||||
|
||||
NavigationStack {
|
||||
MoreView()
|
||||
}
|
||||
.tabItem {
|
||||
Label("More", systemImage: "ellipsis.circle.fill")
|
||||
}
|
||||
.tag(Tab.more)
|
||||
}
|
||||
}
|
||||
}
|
||||
14
App/Entitlements/ProxyApp.entitlements
Normal file
14
App/Entitlements/ProxyApp.entitlements
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.com.treyt.proxyapp</string>
|
||||
</array>
|
||||
<key>com.apple.developer.networking.networkextension</key>
|
||||
<array>
|
||||
<string>packet-tunnel-provider</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
35
App/Info.plist
Normal file
35
App/Info.plist
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Proxy</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>UILaunchScreen</key>
|
||||
<dict/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
13
App/ProxyApp.swift
Normal file
13
App/ProxyApp.swift
Normal file
@@ -0,0 +1,13 @@
|
||||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct ProxyApp: App {
|
||||
@State private var appState = AppState()
|
||||
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ContentView()
|
||||
.environment(appState)
|
||||
}
|
||||
}
|
||||
}
|
||||
14
PacketTunnel/Entitlements/PacketTunnel.entitlements
Normal file
14
PacketTunnel/Entitlements/PacketTunnel.entitlements
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.com.treyt.proxyapp</string>
|
||||
</array>
|
||||
<key>com.apple.developer.networking.networkextension</key>
|
||||
<array>
|
||||
<string>packet-tunnel-provider</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
29
PacketTunnel/Info.plist
Normal file
29
PacketTunnel/Info.plist
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.networkextension.packet-tunnel</string>
|
||||
<key>NSExtensionPrincipalClass</key>
|
||||
<string>$(PRODUCT_MODULE_NAME).PacketTunnelProvider</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
50
PacketTunnel/PacketTunnelProvider.swift
Normal file
50
PacketTunnel/PacketTunnelProvider.swift
Normal file
@@ -0,0 +1,50 @@
|
||||
import NetworkExtension
|
||||
import ProxyCore
|
||||
|
||||
class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
|
||||
private var proxyServer: ProxyServer?
|
||||
|
||||
override func startTunnel(options: [String: NSObject]? = nil) async throws {
|
||||
// Start the local proxy server
|
||||
let server = ProxyServer()
|
||||
try await server.start()
|
||||
proxyServer = server
|
||||
|
||||
// Configure tunnel to redirect HTTP/HTTPS to our local proxy
|
||||
let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: "127.0.0.1")
|
||||
|
||||
let proxySettings = NEProxySettings()
|
||||
proxySettings.httpServer = NEProxyServer(
|
||||
address: ProxyConstants.proxyHost,
|
||||
port: ProxyConstants.proxyPort
|
||||
)
|
||||
proxySettings.httpsServer = NEProxyServer(
|
||||
address: ProxyConstants.proxyHost,
|
||||
port: ProxyConstants.proxyPort
|
||||
)
|
||||
proxySettings.httpEnabled = true
|
||||
proxySettings.httpsEnabled = true
|
||||
proxySettings.matchDomains = [""] // Match all domains
|
||||
settings.proxySettings = proxySettings
|
||||
|
||||
// DNS settings to ensure proper resolution
|
||||
let dnsSettings = NEDNSSettings(servers: ["8.8.8.8", "8.8.4.4"])
|
||||
dnsSettings.matchDomains = [""] // Match all
|
||||
settings.dnsSettings = dnsSettings
|
||||
|
||||
try await setTunnelNetworkSettings(settings)
|
||||
|
||||
IPCManager.shared.post(.extensionStarted)
|
||||
}
|
||||
|
||||
override func stopTunnel(with reason: NEProviderStopReason) async {
|
||||
await proxyServer?.stop()
|
||||
proxyServer = nil
|
||||
IPCManager.shared.post(.extensionStopped)
|
||||
}
|
||||
|
||||
override func handleAppMessage(_ messageData: Data) async -> Data? {
|
||||
// Handle IPC messages from the main app
|
||||
return nil
|
||||
}
|
||||
}
|
||||
1065
ProxyApp.xcodeproj/project.pbxproj
Normal file
1065
ProxyApp.xcodeproj/project.pbxproj
Normal file
File diff suppressed because it is too large
Load Diff
7
ProxyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
ProxyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"originHash" : "b327656135bbe0b2015d567b05d112748ef896613ca69a92da75c18064ce73a1",
|
||||
"pins" : [
|
||||
{
|
||||
"identity" : "grdb.swift",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/groue/GRDB.swift.git",
|
||||
"state" : {
|
||||
"revision" : "36e30a6f1ef10e4194f6af0cff90888526f0c115",
|
||||
"version" : "7.10.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-algorithms",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-algorithms.git",
|
||||
"state" : {
|
||||
"revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023",
|
||||
"version" : "1.2.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-asn1",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-asn1.git",
|
||||
"state" : {
|
||||
"revision" : "9f542610331815e29cc3821d3b6f488db8715517",
|
||||
"version" : "1.6.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-async-algorithms",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-async-algorithms.git",
|
||||
"state" : {
|
||||
"revision" : "9d349bcc328ac3c31ce40e746b5882742a0d1272",
|
||||
"version" : "1.1.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-atomics",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-atomics.git",
|
||||
"state" : {
|
||||
"revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7",
|
||||
"version" : "1.3.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-certificates",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-certificates.git",
|
||||
"state" : {
|
||||
"revision" : "24ccdeeeed4dfaae7955fcac9dbf5489ed4f1a25",
|
||||
"version" : "1.18.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-collections",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-collections.git",
|
||||
"state" : {
|
||||
"revision" : "6675bc0ff86e61436e615df6fc5174e043e57924",
|
||||
"version" : "1.4.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-crypto",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-crypto.git",
|
||||
"state" : {
|
||||
"revision" : "95ba0316a9b733e92bb6b071255ff46263bbe7dc",
|
||||
"version" : "3.15.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-http-structured-headers",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-http-structured-headers.git",
|
||||
"state" : {
|
||||
"revision" : "76d7627bd88b47bf5a0f8497dd244885960dde0b",
|
||||
"version" : "1.6.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-http-types",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-http-types.git",
|
||||
"state" : {
|
||||
"revision" : "45eb0224913ea070ec4fba17291b9e7ecf4749ca",
|
||||
"version" : "1.5.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-log",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-log.git",
|
||||
"state" : {
|
||||
"revision" : "8c0f217f01000dd30f60d6e536569ad4e74291f9",
|
||||
"version" : "1.11.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-nio",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio.git",
|
||||
"state" : {
|
||||
"revision" : "558f24a4647193b5a0e2104031b71c55d31ff83a",
|
||||
"version" : "2.97.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-nio-extras",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio-extras.git",
|
||||
"state" : {
|
||||
"revision" : "abcf5312eb8ed2fb11916078aef7c46b06f20813",
|
||||
"version" : "1.33.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-nio-http2",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio-http2.git",
|
||||
"state" : {
|
||||
"revision" : "6d8d596f0a9bfebb925733003731fe2d749b7e02",
|
||||
"version" : "1.42.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-nio-ssl",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio-ssl.git",
|
||||
"state" : {
|
||||
"revision" : "df9c3406028e3297246e6e7081977a167318b692",
|
||||
"version" : "2.36.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-numerics",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-numerics.git",
|
||||
"state" : {
|
||||
"revision" : "0c0290ff6b24942dadb83a929ffaaa1481df04a2",
|
||||
"version" : "1.1.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-service-lifecycle",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/swift-server/swift-service-lifecycle.git",
|
||||
"state" : {
|
||||
"revision" : "9829955b385e5bb88128b73f1b8389e9b9c3191a",
|
||||
"version" : "2.11.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-system",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-system.git",
|
||||
"state" : {
|
||||
"revision" : "7c6ad0fc39d0763e0b699210e4124afd5041c5df",
|
||||
"version" : "1.6.4"
|
||||
}
|
||||
}
|
||||
],
|
||||
"version" : 3
|
||||
}
|
||||
BIN
ProxyApp.xcodeproj/project.xcworkspace/xcuserdata/treyt.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
BIN
ProxyApp.xcodeproj/project.xcworkspace/xcuserdata/treyt.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
Binary file not shown.
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>Associations (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>MyPlayground (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>PacketTunnel.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>ProxyApp.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>ProxyCore.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>Tour (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
<key>TransactionObserver (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
134
ProxyCore/Sources/DataLayer/Database/DatabaseManager.swift
Normal file
134
ProxyCore/Sources/DataLayer/Database/DatabaseManager.swift
Normal file
@@ -0,0 +1,134 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public final class DatabaseManager: Sendable {
|
||||
public let dbPool: DatabasePool
|
||||
|
||||
public static let shared: DatabaseManager = {
|
||||
let url = FileManager.default
|
||||
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.treyt.proxyapp")!
|
||||
.appendingPathComponent("proxy.sqlite")
|
||||
return try! DatabaseManager(path: url.path)
|
||||
}()
|
||||
|
||||
public init(path: String) throws {
|
||||
var config = Configuration()
|
||||
config.prepareDatabase { db in
|
||||
// WAL mode for cross-process concurrent access
|
||||
try db.execute(sql: "PRAGMA journal_mode = WAL")
|
||||
try db.execute(sql: "PRAGMA synchronous = NORMAL")
|
||||
}
|
||||
dbPool = try DatabasePool(path: path, configuration: config)
|
||||
try migrate()
|
||||
}
|
||||
|
||||
private func migrate() throws {
|
||||
var migrator = DatabaseMigrator()
|
||||
|
||||
migrator.registerMigration("v1_create_tables") { db in
|
||||
try db.create(table: "captured_traffic") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("requestId", .text).notNull().unique()
|
||||
t.column("domain", .text).notNull().indexed()
|
||||
t.column("url", .text).notNull()
|
||||
t.column("method", .text).notNull()
|
||||
t.column("scheme", .text).notNull()
|
||||
t.column("statusCode", .integer)
|
||||
t.column("statusText", .text)
|
||||
|
||||
t.column("requestHeaders", .text)
|
||||
t.column("requestBody", .blob)
|
||||
t.column("requestBodySize", .integer).notNull().defaults(to: 0)
|
||||
t.column("requestContentType", .text)
|
||||
t.column("queryParameters", .text)
|
||||
|
||||
t.column("responseHeaders", .text)
|
||||
t.column("responseBody", .blob)
|
||||
t.column("responseBodySize", .integer).notNull().defaults(to: 0)
|
||||
t.column("responseContentType", .text)
|
||||
|
||||
t.column("startedAt", .double).notNull()
|
||||
t.column("completedAt", .double)
|
||||
t.column("durationMs", .integer)
|
||||
|
||||
t.column("isSslDecrypted", .boolean).notNull().defaults(to: false)
|
||||
t.column("isPinned", .boolean).notNull().defaults(to: false)
|
||||
t.column("isWebsocket", .boolean).notNull().defaults(to: false)
|
||||
t.column("isHidden", .boolean).notNull().defaults(to: false)
|
||||
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
|
||||
try db.create(index: "idx_traffic_started_at", on: "captured_traffic", columns: ["startedAt"])
|
||||
try db.create(index: "idx_traffic_pinned", on: "captured_traffic", columns: ["isPinned"])
|
||||
|
||||
try db.create(table: "ssl_proxying_entries") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("domainPattern", .text).notNull()
|
||||
t.column("isInclude", .boolean).notNull()
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
|
||||
try db.create(table: "block_list_entries") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("name", .text)
|
||||
t.column("urlPattern", .text).notNull()
|
||||
t.column("method", .text).notNull().defaults(to: "ANY")
|
||||
t.column("includeSubpaths", .boolean).notNull().defaults(to: true)
|
||||
t.column("blockAction", .text).notNull().defaults(to: "block_and_hide")
|
||||
t.column("isEnabled", .boolean).notNull().defaults(to: true)
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
|
||||
try db.create(table: "breakpoint_rules") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("name", .text)
|
||||
t.column("urlPattern", .text).notNull()
|
||||
t.column("method", .text).notNull().defaults(to: "ANY")
|
||||
t.column("interceptRequest", .boolean).notNull().defaults(to: true)
|
||||
t.column("interceptResponse", .boolean).notNull().defaults(to: true)
|
||||
t.column("isEnabled", .boolean).notNull().defaults(to: true)
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
|
||||
try db.create(table: "map_local_rules") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("name", .text)
|
||||
t.column("urlPattern", .text).notNull()
|
||||
t.column("method", .text).notNull().defaults(to: "ANY")
|
||||
t.column("responseStatus", .integer).notNull().defaults(to: 200)
|
||||
t.column("responseHeaders", .text)
|
||||
t.column("responseBody", .blob)
|
||||
t.column("responseContentType", .text)
|
||||
t.column("isEnabled", .boolean).notNull().defaults(to: true)
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
|
||||
try db.create(table: "dns_spoof_rules") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("sourceDomain", .text).notNull()
|
||||
t.column("targetDomain", .text).notNull()
|
||||
t.column("isEnabled", .boolean).notNull().defaults(to: true)
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
|
||||
try db.create(table: "compose_requests") { t in
|
||||
t.autoIncrementedPrimaryKey("id")
|
||||
t.column("name", .text).notNull().defaults(to: "New Request")
|
||||
t.column("method", .text).notNull().defaults(to: "GET")
|
||||
t.column("url", .text)
|
||||
t.column("headers", .text)
|
||||
t.column("queryParameters", .text)
|
||||
t.column("body", .text)
|
||||
t.column("bodyContentType", .text)
|
||||
t.column("responseStatus", .integer)
|
||||
t.column("responseHeaders", .text)
|
||||
t.column("responseBody", .blob)
|
||||
t.column("lastSentAt", .double)
|
||||
t.column("createdAt", .double).notNull()
|
||||
}
|
||||
}
|
||||
|
||||
try migrator.migrate(dbPool)
|
||||
}
|
||||
}
|
||||
57
ProxyCore/Sources/DataLayer/Models/BlockListEntry.swift
Normal file
57
ProxyCore/Sources/DataLayer/Models/BlockListEntry.swift
Normal file
@@ -0,0 +1,57 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public enum BlockAction: String, Codable, Sendable, CaseIterable {
|
||||
case blockAndHide = "block_and_hide"
|
||||
case blockAndDisplay = "block_and_display"
|
||||
case hideOnly = "hide_only"
|
||||
|
||||
public var displayName: String {
|
||||
switch self {
|
||||
case .blockAndHide: "Block & Hide Request"
|
||||
case .blockAndDisplay: "Block & Display"
|
||||
case .hideOnly: "Hide but not Block"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct BlockListEntry: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var name: String?
|
||||
public var urlPattern: String
|
||||
public var method: String
|
||||
public var includeSubpaths: Bool
|
||||
public var blockAction: String
|
||||
public var isEnabled: Bool
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "block_list_entries"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(
|
||||
id: Int64? = nil,
|
||||
name: String? = nil,
|
||||
urlPattern: String,
|
||||
method: String = "ANY",
|
||||
includeSubpaths: Bool = true,
|
||||
blockAction: BlockAction = .blockAndHide,
|
||||
isEnabled: Bool = true,
|
||||
createdAt: Double = Date().timeIntervalSince1970
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.urlPattern = urlPattern
|
||||
self.method = method
|
||||
self.includeSubpaths = includeSubpaths
|
||||
self.blockAction = blockAction.rawValue
|
||||
self.isEnabled = isEnabled
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
|
||||
public var action: BlockAction {
|
||||
BlockAction(rawValue: blockAction) ?? .blockAndHide
|
||||
}
|
||||
}
|
||||
39
ProxyCore/Sources/DataLayer/Models/BreakpointRule.swift
Normal file
39
ProxyCore/Sources/DataLayer/Models/BreakpointRule.swift
Normal file
@@ -0,0 +1,39 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct BreakpointRule: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var name: String?
|
||||
public var urlPattern: String
|
||||
public var method: String
|
||||
public var interceptRequest: Bool
|
||||
public var interceptResponse: Bool
|
||||
public var isEnabled: Bool
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "breakpoint_rules"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(
|
||||
id: Int64? = nil,
|
||||
name: String? = nil,
|
||||
urlPattern: String,
|
||||
method: String = "ANY",
|
||||
interceptRequest: Bool = true,
|
||||
interceptResponse: Bool = true,
|
||||
isEnabled: Bool = true,
|
||||
createdAt: Double = Date().timeIntervalSince1970
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.urlPattern = urlPattern
|
||||
self.method = method
|
||||
self.interceptRequest = interceptRequest
|
||||
self.interceptResponse = interceptResponse
|
||||
self.isEnabled = isEnabled
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
}
|
||||
140
ProxyCore/Sources/DataLayer/Models/CapturedTraffic.swift
Normal file
140
ProxyCore/Sources/DataLayer/Models/CapturedTraffic.swift
Normal file
@@ -0,0 +1,140 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct CapturedTraffic: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var requestId: String
|
||||
public var domain: String
|
||||
public var url: String
|
||||
public var method: String
|
||||
public var scheme: String
|
||||
public var statusCode: Int?
|
||||
public var statusText: String?
|
||||
|
||||
// Request
|
||||
public var requestHeaders: String?
|
||||
public var requestBody: Data?
|
||||
public var requestBodySize: Int
|
||||
public var requestContentType: String?
|
||||
public var queryParameters: String?
|
||||
|
||||
// Response
|
||||
public var responseHeaders: String?
|
||||
public var responseBody: Data?
|
||||
public var responseBodySize: Int
|
||||
public var responseContentType: String?
|
||||
|
||||
// Timing
|
||||
public var startedAt: Double
|
||||
public var completedAt: Double?
|
||||
public var durationMs: Int?
|
||||
|
||||
// Metadata
|
||||
public var isSslDecrypted: Bool
|
||||
public var isPinned: Bool
|
||||
public var isWebsocket: Bool
|
||||
public var isHidden: Bool
|
||||
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "captured_traffic"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(
|
||||
id: Int64? = nil,
|
||||
requestId: String = UUID().uuidString,
|
||||
domain: String,
|
||||
url: String,
|
||||
method: String,
|
||||
scheme: String,
|
||||
statusCode: Int? = nil,
|
||||
statusText: String? = nil,
|
||||
requestHeaders: String? = nil,
|
||||
requestBody: Data? = nil,
|
||||
requestBodySize: Int = 0,
|
||||
requestContentType: String? = nil,
|
||||
queryParameters: String? = nil,
|
||||
responseHeaders: String? = nil,
|
||||
responseBody: Data? = nil,
|
||||
responseBodySize: Int = 0,
|
||||
responseContentType: String? = nil,
|
||||
startedAt: Double = Date().timeIntervalSince1970,
|
||||
completedAt: Double? = nil,
|
||||
durationMs: Int? = nil,
|
||||
isSslDecrypted: Bool = false,
|
||||
isPinned: Bool = false,
|
||||
isWebsocket: Bool = false,
|
||||
isHidden: Bool = false,
|
||||
createdAt: Double = Date().timeIntervalSince1970
|
||||
) {
|
||||
self.id = id
|
||||
self.requestId = requestId
|
||||
self.domain = domain
|
||||
self.url = url
|
||||
self.method = method
|
||||
self.scheme = scheme
|
||||
self.statusCode = statusCode
|
||||
self.statusText = statusText
|
||||
self.requestHeaders = requestHeaders
|
||||
self.requestBody = requestBody
|
||||
self.requestBodySize = requestBodySize
|
||||
self.requestContentType = requestContentType
|
||||
self.queryParameters = queryParameters
|
||||
self.responseHeaders = responseHeaders
|
||||
self.responseBody = responseBody
|
||||
self.responseBodySize = responseBodySize
|
||||
self.responseContentType = responseContentType
|
||||
self.startedAt = startedAt
|
||||
self.completedAt = completedAt
|
||||
self.durationMs = durationMs
|
||||
self.isSslDecrypted = isSslDecrypted
|
||||
self.isPinned = isPinned
|
||||
self.isWebsocket = isWebsocket
|
||||
self.isHidden = isHidden
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Computed Properties
|
||||
|
||||
extension CapturedTraffic {
|
||||
public var decodedRequestHeaders: [String: String] {
|
||||
guard let data = requestHeaders?.data(using: .utf8),
|
||||
let dict = try? JSONDecoder().decode([String: String].self, from: data) else {
|
||||
return [:]
|
||||
}
|
||||
return dict
|
||||
}
|
||||
|
||||
public var decodedResponseHeaders: [String: String] {
|
||||
guard let data = responseHeaders?.data(using: .utf8),
|
||||
let dict = try? JSONDecoder().decode([String: String].self, from: data) else {
|
||||
return [:]
|
||||
}
|
||||
return dict
|
||||
}
|
||||
|
||||
public var decodedQueryParameters: [String: String] {
|
||||
guard let data = queryParameters?.data(using: .utf8),
|
||||
let dict = try? JSONDecoder().decode([String: String].self, from: data) else {
|
||||
return [:]
|
||||
}
|
||||
return dict
|
||||
}
|
||||
|
||||
public var startDate: Date {
|
||||
Date(timeIntervalSince1970: startedAt)
|
||||
}
|
||||
|
||||
public var formattedDuration: String {
|
||||
guard let ms = durationMs else { return "-" }
|
||||
if ms < 1000 {
|
||||
return "\(ms) ms"
|
||||
} else {
|
||||
return String(format: "%.1f s", Double(ms) / 1000.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
54
ProxyCore/Sources/DataLayer/Models/ComposeRequest.swift
Normal file
54
ProxyCore/Sources/DataLayer/Models/ComposeRequest.swift
Normal file
@@ -0,0 +1,54 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct ComposeRequest: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var name: String
|
||||
public var method: String
|
||||
public var url: String?
|
||||
public var headers: String?
|
||||
public var queryParameters: String?
|
||||
public var body: String?
|
||||
public var bodyContentType: String?
|
||||
public var responseStatus: Int?
|
||||
public var responseHeaders: String?
|
||||
public var responseBody: Data?
|
||||
public var lastSentAt: Double?
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "compose_requests"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(
|
||||
id: Int64? = nil,
|
||||
name: String = "New Request",
|
||||
method: String = "GET",
|
||||
url: String? = nil,
|
||||
headers: String? = nil,
|
||||
queryParameters: String? = nil,
|
||||
body: String? = nil,
|
||||
bodyContentType: String? = nil,
|
||||
responseStatus: Int? = nil,
|
||||
responseHeaders: String? = nil,
|
||||
responseBody: Data? = nil,
|
||||
lastSentAt: Double? = nil,
|
||||
createdAt: Double = Date().timeIntervalSince1970
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.method = method
|
||||
self.url = url
|
||||
self.headers = headers
|
||||
self.queryParameters = queryParameters
|
||||
self.body = body
|
||||
self.bodyContentType = bodyContentType
|
||||
self.responseStatus = responseStatus
|
||||
self.responseHeaders = responseHeaders
|
||||
self.responseBody = responseBody
|
||||
self.lastSentAt = lastSentAt
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
}
|
||||
30
ProxyCore/Sources/DataLayer/Models/DNSSpoofRule.swift
Normal file
30
ProxyCore/Sources/DataLayer/Models/DNSSpoofRule.swift
Normal file
@@ -0,0 +1,30 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct DNSSpoofRule: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var sourceDomain: String
|
||||
public var targetDomain: String
|
||||
public var isEnabled: Bool
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "dns_spoof_rules"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(
|
||||
id: Int64? = nil,
|
||||
sourceDomain: String,
|
||||
targetDomain: String,
|
||||
isEnabled: Bool = true,
|
||||
createdAt: Double = Date().timeIntervalSince1970
|
||||
) {
|
||||
self.id = id
|
||||
self.sourceDomain = sourceDomain
|
||||
self.targetDomain = targetDomain
|
||||
self.isEnabled = isEnabled
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
}
|
||||
13
ProxyCore/Sources/DataLayer/Models/DomainGroup.swift
Normal file
13
ProxyCore/Sources/DataLayer/Models/DomainGroup.swift
Normal file
@@ -0,0 +1,13 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct DomainGroup: Decodable, FetchableRecord, Identifiable, Hashable, Sendable {
|
||||
public var id: String { domain }
|
||||
public var domain: String
|
||||
public var requestCount: Int
|
||||
|
||||
public init(domain: String, requestCount: Int) {
|
||||
self.domain = domain
|
||||
self.requestCount = requestCount
|
||||
}
|
||||
}
|
||||
45
ProxyCore/Sources/DataLayer/Models/MapLocalRule.swift
Normal file
45
ProxyCore/Sources/DataLayer/Models/MapLocalRule.swift
Normal file
@@ -0,0 +1,45 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct MapLocalRule: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var name: String?
|
||||
public var urlPattern: String
|
||||
public var method: String
|
||||
public var responseStatus: Int
|
||||
public var responseHeaders: String?
|
||||
public var responseBody: Data?
|
||||
public var responseContentType: String?
|
||||
public var isEnabled: Bool
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "map_local_rules"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(
|
||||
id: Int64? = nil,
|
||||
name: String? = nil,
|
||||
urlPattern: String,
|
||||
method: String = "ANY",
|
||||
responseStatus: Int = 200,
|
||||
responseHeaders: String? = nil,
|
||||
responseBody: Data? = nil,
|
||||
responseContentType: String? = nil,
|
||||
isEnabled: Bool = true,
|
||||
createdAt: Double = Date().timeIntervalSince1970
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.urlPattern = urlPattern
|
||||
self.method = method
|
||||
self.responseStatus = responseStatus
|
||||
self.responseHeaders = responseHeaders
|
||||
self.responseBody = responseBody
|
||||
self.responseContentType = responseContentType
|
||||
self.isEnabled = isEnabled
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
}
|
||||
22
ProxyCore/Sources/DataLayer/Models/SSLProxyingEntry.swift
Normal file
22
ProxyCore/Sources/DataLayer/Models/SSLProxyingEntry.swift
Normal file
@@ -0,0 +1,22 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public struct SSLProxyingEntry: Codable, FetchableRecord, MutablePersistableRecord, Identifiable, Sendable {
|
||||
public var id: Int64?
|
||||
public var domainPattern: String
|
||||
public var isInclude: Bool
|
||||
public var createdAt: Double
|
||||
|
||||
public static let databaseTableName = "ssl_proxying_entries"
|
||||
|
||||
public mutating func didInsert(_ inserted: InsertionSuccess) {
|
||||
id = inserted.rowID
|
||||
}
|
||||
|
||||
public init(id: Int64? = nil, domainPattern: String, isInclude: Bool, createdAt: Double = Date().timeIntervalSince1970) {
|
||||
self.id = id
|
||||
self.domainPattern = domainPattern
|
||||
self.isInclude = isInclude
|
||||
self.createdAt = createdAt
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public final class ComposeRepository: Sendable {
|
||||
private let db: DatabaseManager
|
||||
|
||||
public init(db: DatabaseManager = .shared) {
|
||||
self.db = db
|
||||
}
|
||||
|
||||
public func observeRequests() -> ValueObservation<ValueReducers.Fetch<[ComposeRequest]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try ComposeRequest.order(Column("createdAt").desc).fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func insert(_ request: inout ComposeRequest) throws {
|
||||
try db.dbPool.write { db in try request.insert(db) }
|
||||
}
|
||||
|
||||
public func update(_ request: ComposeRequest) throws {
|
||||
try db.dbPool.write { db in try request.update(db) }
|
||||
}
|
||||
|
||||
public func delete(id: Int64) throws {
|
||||
try db.dbPool.write { db in _ = try ComposeRequest.deleteOne(db, id: id) }
|
||||
}
|
||||
|
||||
public func deleteAll() throws {
|
||||
try db.dbPool.write { db in _ = try ComposeRequest.deleteAll(db) }
|
||||
}
|
||||
}
|
||||
128
ProxyCore/Sources/DataLayer/Repositories/RulesRepository.swift
Normal file
128
ProxyCore/Sources/DataLayer/Repositories/RulesRepository.swift
Normal file
@@ -0,0 +1,128 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public final class RulesRepository: Sendable {
|
||||
private let db: DatabaseManager
|
||||
|
||||
public init(db: DatabaseManager = .shared) {
|
||||
self.db = db
|
||||
}
|
||||
|
||||
// MARK: - SSL Proxying
|
||||
|
||||
public func observeSSLEntries() -> ValueObservation<ValueReducers.Fetch<[SSLProxyingEntry]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try SSLProxyingEntry.order(Column("createdAt").desc).fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func fetchAllSSLEntries() throws -> [SSLProxyingEntry] {
|
||||
try db.dbPool.read { db in
|
||||
try SSLProxyingEntry.fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func insertSSLEntry(_ entry: inout SSLProxyingEntry) throws {
|
||||
try db.dbPool.write { db in try entry.insert(db) }
|
||||
}
|
||||
|
||||
public func deleteSSLEntry(id: Int64) throws {
|
||||
try db.dbPool.write { db in _ = try SSLProxyingEntry.deleteOne(db, id: id) }
|
||||
}
|
||||
|
||||
public func deleteAllSSLEntries() throws {
|
||||
try db.dbPool.write { db in _ = try SSLProxyingEntry.deleteAll(db) }
|
||||
}
|
||||
|
||||
// MARK: - Block List
|
||||
|
||||
public func observeBlockListEntries() -> ValueObservation<ValueReducers.Fetch<[BlockListEntry]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try BlockListEntry.order(Column("createdAt").desc).fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func insertBlockEntry(_ entry: inout BlockListEntry) throws {
|
||||
try db.dbPool.write { db in try entry.insert(db) }
|
||||
}
|
||||
|
||||
public func updateBlockEntry(_ entry: BlockListEntry) throws {
|
||||
try db.dbPool.write { db in try entry.update(db) }
|
||||
}
|
||||
|
||||
public func deleteBlockEntry(id: Int64) throws {
|
||||
try db.dbPool.write { db in _ = try BlockListEntry.deleteOne(db, id: id) }
|
||||
}
|
||||
|
||||
public func deleteAllBlockEntries() throws {
|
||||
try db.dbPool.write { db in _ = try BlockListEntry.deleteAll(db) }
|
||||
}
|
||||
|
||||
// MARK: - Breakpoint Rules
|
||||
|
||||
public func observeBreakpointRules() -> ValueObservation<ValueReducers.Fetch<[BreakpointRule]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try BreakpointRule.order(Column("createdAt").desc).fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func insertBreakpointRule(_ rule: inout BreakpointRule) throws {
|
||||
try db.dbPool.write { db in try rule.insert(db) }
|
||||
}
|
||||
|
||||
public func updateBreakpointRule(_ rule: BreakpointRule) throws {
|
||||
try db.dbPool.write { db in try rule.update(db) }
|
||||
}
|
||||
|
||||
public func deleteBreakpointRule(id: Int64) throws {
|
||||
try db.dbPool.write { db in _ = try BreakpointRule.deleteOne(db, id: id) }
|
||||
}
|
||||
|
||||
public func deleteAllBreakpointRules() throws {
|
||||
try db.dbPool.write { db in _ = try BreakpointRule.deleteAll(db) }
|
||||
}
|
||||
|
||||
// MARK: - Map Local Rules
|
||||
|
||||
public func observeMapLocalRules() -> ValueObservation<ValueReducers.Fetch<[MapLocalRule]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try MapLocalRule.order(Column("createdAt").desc).fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func insertMapLocalRule(_ rule: inout MapLocalRule) throws {
|
||||
try db.dbPool.write { db in try rule.insert(db) }
|
||||
}
|
||||
|
||||
public func updateMapLocalRule(_ rule: MapLocalRule) throws {
|
||||
try db.dbPool.write { db in try rule.update(db) }
|
||||
}
|
||||
|
||||
public func deleteMapLocalRule(id: Int64) throws {
|
||||
try db.dbPool.write { db in _ = try MapLocalRule.deleteOne(db, id: id) }
|
||||
}
|
||||
|
||||
public func deleteAllMapLocalRules() throws {
|
||||
try db.dbPool.write { db in _ = try MapLocalRule.deleteAll(db) }
|
||||
}
|
||||
|
||||
// MARK: - DNS Spoof Rules
|
||||
|
||||
public func observeDNSSpoofRules() -> ValueObservation<ValueReducers.Fetch<[DNSSpoofRule]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try DNSSpoofRule.order(Column("createdAt").desc).fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func insertDNSSpoofRule(_ rule: inout DNSSpoofRule) throws {
|
||||
try db.dbPool.write { db in try rule.insert(db) }
|
||||
}
|
||||
|
||||
public func deleteDNSSpoofRule(id: Int64) throws {
|
||||
try db.dbPool.write { db in _ = try DNSSpoofRule.deleteOne(db, id: id) }
|
||||
}
|
||||
|
||||
public func deleteAllDNSSpoofRules() throws {
|
||||
try db.dbPool.write { db in _ = try DNSSpoofRule.deleteAll(db) }
|
||||
}
|
||||
}
|
||||
110
ProxyCore/Sources/DataLayer/Repositories/TrafficRepository.swift
Normal file
110
ProxyCore/Sources/DataLayer/Repositories/TrafficRepository.swift
Normal file
@@ -0,0 +1,110 @@
|
||||
import Foundation
|
||||
import GRDB
|
||||
|
||||
public final class TrafficRepository: Sendable {
|
||||
private let db: DatabaseManager
|
||||
|
||||
public init(db: DatabaseManager = .shared) {
|
||||
self.db = db
|
||||
}
|
||||
|
||||
// MARK: - Domain Groups
|
||||
|
||||
public func observeDomainGroups() -> ValueObservation<ValueReducers.Fetch<[DomainGroup]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try DomainGroup.fetchAll(db, sql: """
|
||||
SELECT domain, COUNT(*) as requestCount
|
||||
FROM captured_traffic
|
||||
WHERE isHidden = 0
|
||||
GROUP BY domain
|
||||
ORDER BY MAX(startedAt) DESC
|
||||
""")
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Traffic for Domain
|
||||
|
||||
public func observeTraffic(forDomain domain: String) -> ValueObservation<ValueReducers.Fetch<[CapturedTraffic]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try CapturedTraffic
|
||||
.filter(Column("domain") == domain)
|
||||
.filter(Column("isHidden") == false)
|
||||
.order(Column("startedAt").desc)
|
||||
.fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Pinned
|
||||
|
||||
public func observePinnedTraffic() -> ValueObservation<ValueReducers.Fetch<[CapturedTraffic]>> {
|
||||
ValueObservation.tracking { db in
|
||||
try CapturedTraffic
|
||||
.filter(Column("isPinned") == true)
|
||||
.order(Column("startedAt").desc)
|
||||
.fetchAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Single Request
|
||||
|
||||
public func traffic(byId id: Int64) throws -> CapturedTraffic? {
|
||||
try db.dbPool.read { db in
|
||||
try CapturedTraffic.fetchOne(db, id: id)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Write Operations
|
||||
|
||||
public func insert(_ traffic: inout CapturedTraffic) throws {
|
||||
try db.dbPool.write { db in
|
||||
try traffic.insert(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func updateResponse(
|
||||
requestId: String,
|
||||
statusCode: Int,
|
||||
statusText: String,
|
||||
responseHeaders: String?,
|
||||
responseBody: Data?,
|
||||
responseBodySize: Int,
|
||||
responseContentType: String?,
|
||||
completedAt: Double,
|
||||
durationMs: Int
|
||||
) throws {
|
||||
try db.dbPool.write { db in
|
||||
try db.execute(sql: """
|
||||
UPDATE captured_traffic SET
|
||||
statusCode = ?, statusText = ?,
|
||||
responseHeaders = ?, responseBody = ?,
|
||||
responseBodySize = ?, responseContentType = ?,
|
||||
completedAt = ?, durationMs = ?
|
||||
WHERE requestId = ?
|
||||
""", arguments: [
|
||||
statusCode, statusText,
|
||||
responseHeaders, responseBody,
|
||||
responseBodySize, responseContentType,
|
||||
completedAt, durationMs,
|
||||
requestId
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
public func togglePin(id: Int64, isPinned: Bool) throws {
|
||||
try db.dbPool.write { db in
|
||||
try db.execute(sql: "UPDATE captured_traffic SET isPinned = ? WHERE id = ?", arguments: [isPinned, id])
|
||||
}
|
||||
}
|
||||
|
||||
public func deleteAll() throws {
|
||||
try db.dbPool.write { db in
|
||||
_ = try CapturedTraffic.deleteAll(db)
|
||||
}
|
||||
}
|
||||
|
||||
public func deleteForDomain(_ domain: String) throws {
|
||||
try db.dbPool.write { db in
|
||||
_ = try CapturedTraffic.filter(Column("domain") == domain).deleteAll(db)
|
||||
}
|
||||
}
|
||||
}
|
||||
290
ProxyCore/Sources/ProxyEngine/CertificateManager.swift
Normal file
290
ProxyCore/Sources/ProxyEngine/CertificateManager.swift
Normal file
@@ -0,0 +1,290 @@
|
||||
import Foundation
|
||||
import X509
|
||||
import Crypto
|
||||
import SwiftASN1
|
||||
import NIOSSL
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#endif
|
||||
|
||||
/// Manages root CA generation, leaf certificate signing, and an LRU certificate cache.
|
||||
public final class CertificateManager: @unchecked Sendable {
|
||||
public static let shared = CertificateManager()
|
||||
|
||||
private let lock = NSLock()
|
||||
private var rootCAKey: P256.Signing.PrivateKey?
|
||||
private var rootCACert: Certificate?
|
||||
private var rootCANIOSSL: NIOSSLCertificate?
|
||||
|
||||
// LRU cache for generated leaf certificates
|
||||
private var certCache: [String: (NIOSSLCertificate, NIOSSLPrivateKey)] = [:]
|
||||
private var cacheOrder: [String] = []
|
||||
|
||||
private let keychainCAKeyTag = "com.treyt.proxyapp.ca.privatekey"
|
||||
private let keychainCACertTag = "com.treyt.proxyapp.ca.cert"
|
||||
|
||||
private init() {
|
||||
loadOrGenerateCA()
|
||||
}
|
||||
|
||||
// MARK: - Public API
|
||||
|
||||
public var hasCA: Bool {
|
||||
lock.lock()
|
||||
defer { lock.unlock() }
|
||||
return rootCACert != nil
|
||||
}
|
||||
|
||||
/// Get or generate a leaf certificate + key for the given domain.
|
||||
public func tlsServerContext(for domain: String) throws -> NIOSSLContext {
|
||||
lock.lock()
|
||||
defer { lock.unlock() }
|
||||
|
||||
if let cached = certCache[domain] {
|
||||
cacheOrder.removeAll { $0 == domain }
|
||||
cacheOrder.append(domain)
|
||||
return try makeServerContext(cert: cached.0, key: cached.1)
|
||||
}
|
||||
|
||||
guard let caKey = rootCAKey, let caCert = rootCACert else {
|
||||
throw CertificateError.caNotFound
|
||||
}
|
||||
|
||||
let (leafCert, leafKey) = try generateLeaf(domain: domain, caKey: caKey, caCert: caCert)
|
||||
|
||||
// Serialize to DER/PEM for NIOSSL
|
||||
var serializer = DER.Serializer()
|
||||
try leafCert.serialize(into: &serializer)
|
||||
let leafDER = serializer.serializedBytes
|
||||
let nioLeafCert = try NIOSSLCertificate(bytes: leafDER, format: .der)
|
||||
let leafKeyPEM = leafKey.pemRepresentation
|
||||
let nioLeafKey = try NIOSSLPrivateKey(bytes: [UInt8](leafKeyPEM.utf8), format: .pem)
|
||||
|
||||
certCache[domain] = (nioLeafCert, nioLeafKey)
|
||||
cacheOrder.append(domain)
|
||||
|
||||
while cacheOrder.count > ProxyConstants.certificateCacheSize {
|
||||
let evicted = cacheOrder.removeFirst()
|
||||
certCache.removeValue(forKey: evicted)
|
||||
}
|
||||
|
||||
return try makeServerContext(cert: nioLeafCert, key: nioLeafKey)
|
||||
}
|
||||
|
||||
/// Export the root CA as DER data for user installation.
|
||||
public func exportCACertificateDER() -> [UInt8]? {
|
||||
lock.lock()
|
||||
defer { lock.unlock() }
|
||||
guard let cert = rootCACert else { return nil }
|
||||
var serializer = DER.Serializer()
|
||||
try? cert.serialize(into: &serializer)
|
||||
return serializer.serializedBytes
|
||||
}
|
||||
|
||||
/// Export as PEM for display.
|
||||
public func exportCACertificatePEM() -> String? {
|
||||
lock.lock()
|
||||
defer { lock.unlock() }
|
||||
guard let cert = rootCACert else { return nil }
|
||||
guard let pem = try? cert.serializeAsPEM() else { return nil }
|
||||
return pem.pemString
|
||||
}
|
||||
|
||||
public var caNotValidAfter: Date? {
|
||||
lock.lock()
|
||||
defer { lock.unlock() }
|
||||
// notValidAfter is a Time, not directly a Date — we stored the date when generating
|
||||
return nil // Will be set properly after we store dates
|
||||
}
|
||||
|
||||
// MARK: - CA Generation
|
||||
|
||||
private func loadOrGenerateCA() {
|
||||
if loadCAFromKeychain() { return }
|
||||
|
||||
do {
|
||||
let key = P256.Signing.PrivateKey()
|
||||
let name = try DistinguishedName {
|
||||
CommonName("Proxy CA (\(deviceName()))")
|
||||
OrganizationName("ProxyApp")
|
||||
}
|
||||
|
||||
let now = Date()
|
||||
let twoYearsLater = now.addingTimeInterval(365 * 24 * 3600 * 2)
|
||||
|
||||
let extensions = try Certificate.Extensions {
|
||||
Critical(BasicConstraints.isCertificateAuthority(maxPathLength: 0))
|
||||
Critical(KeyUsage(keyCertSign: true, cRLSign: true))
|
||||
}
|
||||
|
||||
let cert = try Certificate(
|
||||
version: .v3,
|
||||
serialNumber: Certificate.SerialNumber(),
|
||||
publicKey: .init(key.publicKey),
|
||||
notValidBefore: now,
|
||||
notValidAfter: twoYearsLater,
|
||||
issuer: name,
|
||||
subject: name,
|
||||
signatureAlgorithm: .ecdsaWithSHA256,
|
||||
extensions: extensions,
|
||||
issuerPrivateKey: .init(key)
|
||||
)
|
||||
|
||||
self.rootCAKey = key
|
||||
self.rootCACert = cert
|
||||
|
||||
var serializer = DER.Serializer()
|
||||
try cert.serialize(into: &serializer)
|
||||
let der = serializer.serializedBytes
|
||||
self.rootCANIOSSL = try NIOSSLCertificate(bytes: der, format: .der)
|
||||
|
||||
saveCAToKeychain(key: key, certDER: der)
|
||||
print("[CertificateManager] Generated new root CA")
|
||||
} catch {
|
||||
print("[CertificateManager] Failed to generate CA: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Leaf Certificate Generation
|
||||
|
||||
private func generateLeaf(
|
||||
domain: String,
|
||||
caKey: P256.Signing.PrivateKey,
|
||||
caCert: Certificate
|
||||
) throws -> (Certificate, P256.Signing.PrivateKey) {
|
||||
let leafKey = P256.Signing.PrivateKey()
|
||||
let now = Date()
|
||||
let oneYearLater = now.addingTimeInterval(365 * 24 * 3600)
|
||||
|
||||
let extensions = try Certificate.Extensions {
|
||||
Critical(BasicConstraints.notCertificateAuthority)
|
||||
Critical(KeyUsage(digitalSignature: true))
|
||||
try ExtendedKeyUsage([.serverAuth])
|
||||
SubjectAlternativeNames([.dnsName(domain)])
|
||||
}
|
||||
|
||||
let leafName = try DistinguishedName {
|
||||
CommonName(domain)
|
||||
OrganizationName("ProxyApp")
|
||||
}
|
||||
|
||||
let cert = try Certificate(
|
||||
version: .v3,
|
||||
serialNumber: Certificate.SerialNumber(),
|
||||
publicKey: .init(leafKey.publicKey),
|
||||
notValidBefore: now,
|
||||
notValidAfter: oneYearLater,
|
||||
issuer: caCert.subject,
|
||||
subject: leafName,
|
||||
signatureAlgorithm: .ecdsaWithSHA256,
|
||||
extensions: extensions,
|
||||
issuerPrivateKey: .init(caKey)
|
||||
)
|
||||
|
||||
return (cert, leafKey)
|
||||
}
|
||||
|
||||
// MARK: - TLS Context
|
||||
|
||||
private func makeServerContext(cert: NIOSSLCertificate, key: NIOSSLPrivateKey) throws -> NIOSSLContext {
|
||||
var certs = [cert]
|
||||
if let caCert = rootCANIOSSL {
|
||||
certs.append(caCert)
|
||||
}
|
||||
var config = TLSConfiguration.makeServerConfiguration(
|
||||
certificateChain: certs.map { .certificate($0) },
|
||||
privateKey: .privateKey(key)
|
||||
)
|
||||
config.applicationProtocols = ["http/1.1"]
|
||||
return try NIOSSLContext(configuration: config)
|
||||
}
|
||||
|
||||
// MARK: - Keychain
|
||||
|
||||
private func loadCAFromKeychain() -> Bool {
|
||||
let keyQuery: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: keychainCAKeyTag,
|
||||
kSecAttrAccessGroup as String: ProxyConstants.appGroupIdentifier,
|
||||
kSecReturnData as String: true
|
||||
]
|
||||
var keyResult: AnyObject?
|
||||
guard SecItemCopyMatching(keyQuery as CFDictionary, &keyResult) == errSecSuccess,
|
||||
let keyData = keyResult as? Data else { return false }
|
||||
|
||||
let certQuery: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: keychainCACertTag,
|
||||
kSecAttrAccessGroup as String: ProxyConstants.appGroupIdentifier,
|
||||
kSecReturnData as String: true
|
||||
]
|
||||
var certResult: AnyObject?
|
||||
guard SecItemCopyMatching(certQuery as CFDictionary, &certResult) == errSecSuccess,
|
||||
let certData = certResult as? Data else { return false }
|
||||
|
||||
do {
|
||||
let key = try P256.Signing.PrivateKey(rawRepresentation: keyData)
|
||||
let cert = try Certificate(derEncoded: [UInt8](certData))
|
||||
let nioCert = try NIOSSLCertificate(bytes: [UInt8](certData), format: .der)
|
||||
|
||||
self.rootCAKey = key
|
||||
self.rootCACert = cert
|
||||
self.rootCANIOSSL = nioCert
|
||||
print("[CertificateManager] Loaded CA from Keychain")
|
||||
return true
|
||||
} catch {
|
||||
print("[CertificateManager] Failed to load CA from Keychain: \(error)")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private func saveCAToKeychain(key: P256.Signing.PrivateKey, certDER: [UInt8]) {
|
||||
let keyData = key.rawRepresentation
|
||||
|
||||
// Delete existing entries
|
||||
for tag in [keychainCAKeyTag, keychainCACertTag] {
|
||||
let deleteQuery: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: tag,
|
||||
kSecAttrAccessGroup as String: ProxyConstants.appGroupIdentifier
|
||||
]
|
||||
SecItemDelete(deleteQuery as CFDictionary)
|
||||
}
|
||||
|
||||
// Save key
|
||||
let addKeyQuery: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: keychainCAKeyTag,
|
||||
kSecAttrAccessGroup as String: ProxyConstants.appGroupIdentifier,
|
||||
kSecValueData as String: keyData,
|
||||
kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock
|
||||
]
|
||||
SecItemAdd(addKeyQuery as CFDictionary, nil)
|
||||
|
||||
// Save cert
|
||||
let addCertQuery: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: keychainCACertTag,
|
||||
kSecAttrAccessGroup as String: ProxyConstants.appGroupIdentifier,
|
||||
kSecValueData as String: Data(certDER),
|
||||
kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock
|
||||
]
|
||||
SecItemAdd(addCertQuery as CFDictionary, nil)
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
private func deviceName() -> String {
|
||||
#if canImport(UIKit)
|
||||
return UIDevice.current.name
|
||||
#else
|
||||
return Host.current().localizedName ?? "Unknown"
|
||||
#endif
|
||||
}
|
||||
|
||||
public enum CertificateError: Error {
|
||||
case notImplemented
|
||||
case generationFailed
|
||||
case caNotFound
|
||||
}
|
||||
}
|
||||
298
ProxyCore/Sources/ProxyEngine/ConnectHandler.swift
Normal file
298
ProxyCore/Sources/ProxyEngine/ConnectHandler.swift
Normal file
@@ -0,0 +1,298 @@
|
||||
import Foundation
|
||||
import NIOCore
|
||||
import NIOPosix
|
||||
import NIOHTTP1
|
||||
|
||||
/// Handles incoming proxy requests:
|
||||
/// - HTTP CONNECT → establishes TCP tunnel (GlueHandler passthrough, or MITM in Phase 3)
|
||||
/// - Plain HTTP → connects upstream, forwards request, captures request+response
|
||||
final class ConnectHandler: ChannelInboundHandler, RemovableChannelHandler {
|
||||
typealias InboundIn = HTTPServerRequestPart
|
||||
typealias OutboundOut = HTTPServerResponsePart
|
||||
|
||||
private let trafficRepo: TrafficRepository
|
||||
|
||||
// Buffer request parts until we've connected upstream
|
||||
private var pendingHead: HTTPRequestHead?
|
||||
private var pendingBody: [ByteBuffer] = []
|
||||
private var pendingEnd: HTTPHeaders?
|
||||
private var receivedEnd = false
|
||||
|
||||
init(trafficRepo: TrafficRepository) {
|
||||
self.trafficRepo = trafficRepo
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
let part = unwrapInboundIn(data)
|
||||
|
||||
switch part {
|
||||
case .head(let head):
|
||||
if head.method == .CONNECT {
|
||||
handleConnect(context: context, head: head)
|
||||
} else {
|
||||
pendingHead = head
|
||||
}
|
||||
case .body(let buffer):
|
||||
pendingBody.append(buffer)
|
||||
case .end(let trailers):
|
||||
if pendingHead != nil {
|
||||
pendingEnd = trailers
|
||||
receivedEnd = true
|
||||
handleHTTPRequest(context: context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - CONNECT (HTTPS tunnel)
|
||||
|
||||
private func handleConnect(context: ChannelHandlerContext, head: HTTPRequestHead) {
|
||||
let components = head.uri.split(separator: ":")
|
||||
let host = String(components[0])
|
||||
let port = components.count > 1 ? Int(components[1]) ?? 443 : 443
|
||||
|
||||
// Check if this domain should be MITM'd (SSL Proxying enabled + domain in include list)
|
||||
let shouldMITM = shouldInterceptSSL(domain: host)
|
||||
|
||||
// Send 200 Connection Established
|
||||
let responseHead = HTTPResponseHead(version: .http1_1, status: .ok)
|
||||
context.write(wrapOutboundOut(.head(responseHead)), promise: nil)
|
||||
context.writeAndFlush(wrapOutboundOut(.end(nil)), promise: nil)
|
||||
|
||||
if shouldMITM {
|
||||
// MITM mode: strip HTTP handlers, install MITMHandler
|
||||
setupMITM(context: context, host: host, port: port)
|
||||
} else {
|
||||
// Passthrough mode: record domain-level entry, tunnel raw bytes
|
||||
recordConnectTraffic(host: host, port: port)
|
||||
|
||||
// We don't need to connect upstream ourselves — GlueHandler does raw forwarding
|
||||
// But GlueHandler pairs two channels, so we need the remote channel first
|
||||
ClientBootstrap(group: context.eventLoop)
|
||||
.channelOption(.socketOption(.so_reuseaddr), value: 1)
|
||||
.connect(host: host, port: port)
|
||||
.whenComplete { result in
|
||||
switch result {
|
||||
case .success(let remoteChannel):
|
||||
self.setupGlue(context: context, remoteChannel: remoteChannel)
|
||||
case .failure(let error):
|
||||
print("[Proxy] CONNECT passthrough failed to \(host):\(port): \(error)")
|
||||
context.close(promise: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func shouldInterceptSSL(domain: String) -> Bool {
|
||||
guard IPCManager.shared.isSSLProxyingEnabled else { return false }
|
||||
guard CertificateManager.shared.hasCA else { return false }
|
||||
|
||||
// Check SSL proxying list from database
|
||||
let rulesRepo = RulesRepository()
|
||||
do {
|
||||
let entries = try rulesRepo.fetchAllSSLEntries()
|
||||
|
||||
// Check exclude list first
|
||||
for entry in entries where !entry.isInclude {
|
||||
if WildcardMatcher.matches(domain, pattern: entry.domainPattern) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Check include list
|
||||
for entry in entries where entry.isInclude {
|
||||
if WildcardMatcher.matches(domain, pattern: entry.domainPattern) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
print("[Proxy] Failed to check SSL proxying list: \(error)")
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
private func setupMITM(context: ChannelHandlerContext, host: String, port: Int) {
|
||||
let mitmHandler = MITMHandler(host: host, port: port, trafficRepo: trafficRepo)
|
||||
|
||||
// Remove HTTP handlers, keep raw bytes for MITMHandler
|
||||
context.channel.pipeline.handler(type: ByteToMessageHandler<HTTPRequestDecoder>.self)
|
||||
.whenSuccess { handler in
|
||||
context.channel.pipeline.removeHandler(handler, promise: nil)
|
||||
}
|
||||
|
||||
context.pipeline.removeHandler(context: context).whenComplete { _ in
|
||||
context.channel.pipeline.addHandler(mitmHandler).whenFailure { error in
|
||||
print("[Proxy] Failed to install MITM handler: \(error)")
|
||||
context.close(promise: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func setupGlue(context: ChannelHandlerContext, remoteChannel: Channel) {
|
||||
let localGlue = GlueHandler()
|
||||
let remoteGlue = GlueHandler()
|
||||
localGlue.partner = remoteGlue
|
||||
remoteGlue.partner = localGlue
|
||||
|
||||
// Remove all HTTP handlers from the client channel, leaving raw bytes
|
||||
context.channel.pipeline.handler(type: ByteToMessageHandler<HTTPRequestDecoder>.self)
|
||||
.whenSuccess { handler in
|
||||
context.channel.pipeline.removeHandler(handler, promise: nil)
|
||||
}
|
||||
|
||||
context.pipeline.removeHandler(context: context).whenComplete { _ in
|
||||
context.channel.pipeline.addHandler(localGlue).whenSuccess {
|
||||
remoteChannel.pipeline.addHandler(remoteGlue).whenFailure { _ in
|
||||
context.close(promise: nil)
|
||||
remoteChannel.close(promise: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Plain HTTP forwarding
|
||||
|
||||
private func handleHTTPRequest(context: ChannelHandlerContext) {
|
||||
guard let head = pendingHead else { return }
|
||||
|
||||
// Parse host and port from the absolute URI or Host header
|
||||
guard let (host, port, path) = parseHTTPTarget(head: head) else {
|
||||
let responseHead = HTTPResponseHead(version: .http1_1, status: .badRequest)
|
||||
context.write(wrapOutboundOut(.head(responseHead)), promise: nil)
|
||||
context.writeAndFlush(wrapOutboundOut(.end(nil)), promise: nil)
|
||||
return
|
||||
}
|
||||
|
||||
// Rewrite the request URI to relative path (upstream expects /path, not http://host/path)
|
||||
var upstreamHead = head
|
||||
upstreamHead.uri = path
|
||||
// Ensure Host header is set
|
||||
if !upstreamHead.headers.contains(name: "Host") {
|
||||
upstreamHead.headers.add(name: "Host", value: host)
|
||||
}
|
||||
|
||||
let captureHandler = HTTPCaptureHandler(trafficRepo: trafficRepo, domain: host, scheme: "http")
|
||||
|
||||
ClientBootstrap(group: context.eventLoop)
|
||||
.channelOption(.socketOption(.so_reuseaddr), value: 1)
|
||||
.channelInitializer { channel in
|
||||
// Remote channel: decode HTTP responses, encode HTTP requests
|
||||
channel.pipeline.addHandler(HTTPRequestEncoder()).flatMap {
|
||||
channel.pipeline.addHandler(ByteToMessageHandler(HTTPResponseDecoder(leftOverBytesStrategy: .forwardBytes)))
|
||||
}.flatMap {
|
||||
channel.pipeline.addHandler(captureHandler)
|
||||
}.flatMap {
|
||||
channel.pipeline.addHandler(
|
||||
HTTPRelayHandler(clientContext: context, wrapResponse: self.wrapOutboundOut)
|
||||
)
|
||||
}
|
||||
}
|
||||
.connect(host: host, port: port)
|
||||
.whenComplete { result in
|
||||
switch result {
|
||||
case .success(let remoteChannel):
|
||||
// Forward the buffered request to upstream
|
||||
remoteChannel.write(NIOAny(HTTPClientRequestPart.head(upstreamHead)), promise: nil)
|
||||
for bodyBuffer in self.pendingBody {
|
||||
remoteChannel.write(NIOAny(HTTPClientRequestPart.body(.byteBuffer(bodyBuffer))), promise: nil)
|
||||
}
|
||||
remoteChannel.writeAndFlush(NIOAny(HTTPClientRequestPart.end(self.pendingEnd)), promise: nil)
|
||||
|
||||
// Clear buffered data
|
||||
self.pendingHead = nil
|
||||
self.pendingBody.removeAll()
|
||||
self.pendingEnd = nil
|
||||
|
||||
case .failure(let error):
|
||||
print("[Proxy] HTTP forward failed to \(host):\(port): \(error)")
|
||||
let responseHead = HTTPResponseHead(version: .http1_1, status: .badGateway)
|
||||
context.write(self.wrapOutboundOut(.head(responseHead)), promise: nil)
|
||||
context.writeAndFlush(self.wrapOutboundOut(.end(nil)), promise: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - URL Parsing
|
||||
|
||||
private func parseHTTPTarget(head: HTTPRequestHead) -> (host: String, port: Int, path: String)? {
|
||||
// Absolute URI: "http://example.com:8080/path?query"
|
||||
if head.uri.hasPrefix("http://") || head.uri.hasPrefix("https://") {
|
||||
guard let url = URLComponents(string: head.uri) else { return nil }
|
||||
let host = url.host ?? ""
|
||||
let port = url.port ?? (head.uri.hasPrefix("https") ? 443 : 80)
|
||||
var path = url.path.isEmpty ? "/" : url.path
|
||||
if let query = url.query {
|
||||
path += "?\(query)"
|
||||
}
|
||||
return (host, port, path)
|
||||
}
|
||||
|
||||
// Relative URI with Host header
|
||||
if let hostHeader = head.headers.first(name: "Host") {
|
||||
let parts = hostHeader.split(separator: ":")
|
||||
let host = String(parts[0])
|
||||
let port = parts.count > 1 ? Int(parts[1]) ?? 80 : 80
|
||||
return (host, port, head.uri)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// MARK: - CONNECT traffic recording
|
||||
|
||||
private func recordConnectTraffic(host: String, port: Int) {
|
||||
var traffic = CapturedTraffic(
|
||||
domain: host,
|
||||
url: "https://\(host):\(port)",
|
||||
method: "CONNECT",
|
||||
scheme: "https",
|
||||
statusCode: 200,
|
||||
statusText: "Connection Established",
|
||||
startedAt: Date().timeIntervalSince1970,
|
||||
completedAt: Date().timeIntervalSince1970,
|
||||
durationMs: 0,
|
||||
isSslDecrypted: false
|
||||
)
|
||||
try? trafficRepo.insert(&traffic)
|
||||
IPCManager.shared.post(.newTrafficCaptured)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - HTTPRelayHandler
|
||||
|
||||
/// Relays HTTP responses from the upstream server back to the proxy client.
|
||||
final class HTTPRelayHandler: ChannelInboundHandler, RemovableChannelHandler {
|
||||
typealias InboundIn = HTTPClientResponsePart
|
||||
|
||||
private let clientContext: ChannelHandlerContext
|
||||
private let wrapResponse: (HTTPServerResponsePart) -> NIOAny
|
||||
|
||||
init(clientContext: ChannelHandlerContext, wrapResponse: @escaping (HTTPServerResponsePart) -> NIOAny) {
|
||||
self.clientContext = clientContext
|
||||
self.wrapResponse = wrapResponse
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
let part = unwrapInboundIn(data)
|
||||
|
||||
switch part {
|
||||
case .head(let head):
|
||||
let serverHead = HTTPResponseHead(version: head.version, status: head.status, headers: head.headers)
|
||||
clientContext.write(wrapResponse(.head(serverHead)), promise: nil)
|
||||
case .body(let buffer):
|
||||
clientContext.write(wrapResponse(.body(.byteBuffer(buffer))), promise: nil)
|
||||
case .end(let trailers):
|
||||
clientContext.writeAndFlush(wrapResponse(.end(trailers)), promise: nil)
|
||||
}
|
||||
}
|
||||
|
||||
func channelInactive(context: ChannelHandlerContext) {
|
||||
clientContext.close(promise: nil)
|
||||
}
|
||||
|
||||
func errorCaught(context: ChannelHandlerContext, error: Error) {
|
||||
print("[Proxy] Relay error: \(error)")
|
||||
context.close(promise: nil)
|
||||
clientContext.close(promise: nil)
|
||||
}
|
||||
}
|
||||
66
ProxyCore/Sources/ProxyEngine/GlueHandler.swift
Normal file
66
ProxyCore/Sources/ProxyEngine/GlueHandler.swift
Normal file
@@ -0,0 +1,66 @@
|
||||
import Foundation
|
||||
import NIOCore
|
||||
|
||||
/// Bidirectional TCP forwarder. Pairs two channels so bytes flow in both directions.
|
||||
/// Used for CONNECT tunneling (passthrough mode, no MITM).
|
||||
final class GlueHandler: ChannelInboundHandler, RemovableChannelHandler {
|
||||
typealias InboundIn = ByteBuffer
|
||||
typealias OutboundOut = ByteBuffer
|
||||
|
||||
var partner: GlueHandler?
|
||||
private var context: ChannelHandlerContext?
|
||||
private var pendingRead = false
|
||||
|
||||
func handlerAdded(context: ChannelHandlerContext) {
|
||||
self.context = context
|
||||
}
|
||||
|
||||
func handlerRemoved(context: ChannelHandlerContext) {
|
||||
self.context = nil
|
||||
self.partner = nil
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
partner?.write(unwrapInboundIn(data))
|
||||
}
|
||||
|
||||
func channelReadComplete(context: ChannelHandlerContext) {
|
||||
partner?.flush()
|
||||
}
|
||||
|
||||
func channelInactive(context: ChannelHandlerContext) {
|
||||
partner?.close()
|
||||
}
|
||||
|
||||
func errorCaught(context: ChannelHandlerContext, error: Error) {
|
||||
context.close(promise: nil)
|
||||
}
|
||||
|
||||
func channelWritabilityChanged(context: ChannelHandlerContext) {
|
||||
if context.channel.isWritable {
|
||||
partner?.read()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Partner operations
|
||||
|
||||
private func write(_ buffer: ByteBuffer) {
|
||||
context?.write(wrapOutboundOut(buffer), promise: nil)
|
||||
}
|
||||
|
||||
private func flush() {
|
||||
context?.flush()
|
||||
}
|
||||
|
||||
private func read() {
|
||||
if let context, !pendingRead {
|
||||
pendingRead = true
|
||||
context.read()
|
||||
pendingRead = false
|
||||
}
|
||||
}
|
||||
|
||||
private func close() {
|
||||
context?.close(promise: nil)
|
||||
}
|
||||
}
|
||||
141
ProxyCore/Sources/ProxyEngine/HTTPCaptureHandler.swift
Normal file
141
ProxyCore/Sources/ProxyEngine/HTTPCaptureHandler.swift
Normal file
@@ -0,0 +1,141 @@
|
||||
import Foundation
|
||||
import NIOCore
|
||||
import NIOHTTP1
|
||||
|
||||
/// Captures HTTP request/response pairs and writes them to the traffic database.
|
||||
/// Inserted into the pipeline after TLS termination (MITM) or for plain HTTP.
|
||||
final class HTTPCaptureHandler: ChannelDuplexHandler {
|
||||
typealias InboundIn = HTTPClientResponsePart
|
||||
typealias InboundOut = HTTPClientResponsePart
|
||||
typealias OutboundIn = HTTPClientRequestPart
|
||||
typealias OutboundOut = HTTPClientRequestPart
|
||||
|
||||
private let trafficRepo: TrafficRepository
|
||||
private let domain: String
|
||||
private let scheme: String
|
||||
|
||||
private var currentRequestId: String?
|
||||
private var requestHead: HTTPRequestHead?
|
||||
private var requestBody = Data()
|
||||
private var responseHead: HTTPResponseHead?
|
||||
private var responseBody = Data()
|
||||
private var requestStartTime: Double = 0
|
||||
|
||||
init(trafficRepo: TrafficRepository, domain: String, scheme: String = "https") {
|
||||
self.trafficRepo = trafficRepo
|
||||
self.domain = domain
|
||||
self.scheme = scheme
|
||||
}
|
||||
|
||||
// MARK: - Outbound (Request)
|
||||
|
||||
func write(context: ChannelHandlerContext, data: NIOAny, promise: EventLoopPromise<Void>?) {
|
||||
let part = unwrapOutboundIn(data)
|
||||
|
||||
switch part {
|
||||
case .head(let head):
|
||||
currentRequestId = UUID().uuidString
|
||||
requestHead = head
|
||||
requestBody = Data()
|
||||
requestStartTime = Date().timeIntervalSince1970
|
||||
case .body(.byteBuffer(let buffer)):
|
||||
if requestBody.count < ProxyConstants.maxBodySizeBytes {
|
||||
requestBody.append(contentsOf: buffer.readableBytesView)
|
||||
}
|
||||
case .end:
|
||||
saveRequest()
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
context.write(data, promise: promise)
|
||||
}
|
||||
|
||||
// MARK: - Inbound (Response)
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
let part = unwrapInboundIn(data)
|
||||
|
||||
switch part {
|
||||
case .head(let head):
|
||||
responseHead = head
|
||||
responseBody = Data()
|
||||
case .body(let buffer):
|
||||
if responseBody.count < ProxyConstants.maxBodySizeBytes {
|
||||
responseBody.append(contentsOf: buffer.readableBytesView)
|
||||
}
|
||||
case .end:
|
||||
saveResponse()
|
||||
}
|
||||
|
||||
context.fireChannelRead(data)
|
||||
}
|
||||
|
||||
// MARK: - Persistence
|
||||
|
||||
private func saveRequest() {
|
||||
guard let head = requestHead, let reqId = currentRequestId else { return }
|
||||
|
||||
let url = "\(scheme)://\(domain)\(head.uri)"
|
||||
let headersJSON = encodeHeaders(head.headers)
|
||||
let queryParams = extractQueryParams(from: head.uri)
|
||||
|
||||
var traffic = CapturedTraffic(
|
||||
requestId: reqId,
|
||||
domain: domain,
|
||||
url: url,
|
||||
method: head.method.rawValue,
|
||||
scheme: scheme,
|
||||
requestHeaders: headersJSON,
|
||||
requestBody: requestBody.isEmpty ? nil : requestBody,
|
||||
requestBodySize: requestBody.count,
|
||||
requestContentType: head.headers.first(name: "Content-Type"),
|
||||
queryParameters: queryParams,
|
||||
startedAt: requestStartTime,
|
||||
isSslDecrypted: scheme == "https"
|
||||
)
|
||||
|
||||
try? trafficRepo.insert(&traffic)
|
||||
}
|
||||
|
||||
private func saveResponse() {
|
||||
guard let reqId = currentRequestId, let head = responseHead else { return }
|
||||
|
||||
let now = Date().timeIntervalSince1970
|
||||
let durationMs = Int((now - requestStartTime) * 1000)
|
||||
|
||||
try? trafficRepo.updateResponse(
|
||||
requestId: reqId,
|
||||
statusCode: Int(head.status.code),
|
||||
statusText: head.status.reasonPhrase,
|
||||
responseHeaders: encodeHeaders(head.headers),
|
||||
responseBody: responseBody.isEmpty ? nil : responseBody,
|
||||
responseBodySize: responseBody.count,
|
||||
responseContentType: head.headers.first(name: "Content-Type"),
|
||||
completedAt: now,
|
||||
durationMs: durationMs
|
||||
)
|
||||
|
||||
IPCManager.shared.post(.newTrafficCaptured)
|
||||
}
|
||||
|
||||
private func encodeHeaders(_ headers: HTTPHeaders) -> String? {
|
||||
var dict: [String: String] = [:]
|
||||
for (name, value) in headers {
|
||||
dict[name] = value
|
||||
}
|
||||
guard let data = try? JSONEncoder().encode(dict) else { return nil }
|
||||
return String(data: data, encoding: .utf8)
|
||||
}
|
||||
|
||||
private func extractQueryParams(from uri: String) -> String? {
|
||||
guard let url = URLComponents(string: uri),
|
||||
let items = url.queryItems, !items.isEmpty else { return nil }
|
||||
var dict: [String: String] = [:]
|
||||
for item in items {
|
||||
dict[item.name] = item.value ?? ""
|
||||
}
|
||||
guard let data = try? JSONEncoder().encode(dict) else { return nil }
|
||||
return String(data: data, encoding: .utf8)
|
||||
}
|
||||
}
|
||||
294
ProxyCore/Sources/ProxyEngine/MITMHandler.swift
Normal file
294
ProxyCore/Sources/ProxyEngine/MITMHandler.swift
Normal file
@@ -0,0 +1,294 @@
|
||||
import Foundation
|
||||
import NIOCore
|
||||
import NIOPosix
|
||||
import NIOSSL
|
||||
import NIOHTTP1
|
||||
|
||||
/// After a CONNECT tunnel is established, this handler:
|
||||
/// 1. Reads the first bytes from the client to extract the SNI hostname from the TLS ClientHello
|
||||
/// 2. Generates a per-domain leaf certificate via CertificateManager
|
||||
/// 3. Terminates client-side TLS with the generated cert
|
||||
/// 4. Initiates server-side TLS to the real server
|
||||
/// 5. Installs HTTP codecs + HTTPCaptureHandler on both sides to capture decrypted traffic
|
||||
final class MITMHandler: ChannelInboundHandler, RemovableChannelHandler {
|
||||
typealias InboundIn = ByteBuffer
|
||||
|
||||
private let host: String
|
||||
private let port: Int
|
||||
private let trafficRepo: TrafficRepository
|
||||
private let certManager: CertificateManager
|
||||
|
||||
init(host: String, port: Int, trafficRepo: TrafficRepository, certManager: CertificateManager = .shared) {
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.trafficRepo = trafficRepo
|
||||
self.certManager = certManager
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
var buffer = unwrapInboundIn(data)
|
||||
|
||||
// Extract SNI from ClientHello if possible, otherwise use the CONNECT host
|
||||
let sniDomain = extractSNI(from: buffer) ?? host
|
||||
|
||||
// Remove this handler — we'll rebuild the pipeline
|
||||
context.pipeline.removeHandler(self, promise: nil)
|
||||
|
||||
// Get TLS context for this domain
|
||||
let sslContext: NIOSSLContext
|
||||
do {
|
||||
sslContext = try certManager.tlsServerContext(for: sniDomain)
|
||||
} catch {
|
||||
print("[MITM] Failed to get TLS context for \(sniDomain): \(error)")
|
||||
context.close(promise: nil)
|
||||
return
|
||||
}
|
||||
|
||||
// Add server-side TLS handler (we are the "server" to the client)
|
||||
let sslServerHandler = NIOSSLServerHandler(context: sslContext)
|
||||
let trafficRepo = self.trafficRepo
|
||||
let host = self.host
|
||||
let port = self.port
|
||||
|
||||
context.channel.pipeline.addHandler(sslServerHandler, position: .first).flatMap {
|
||||
// Add HTTP codec after TLS
|
||||
context.channel.pipeline.addHandler(ByteToMessageHandler(HTTPRequestDecoder()))
|
||||
}.flatMap {
|
||||
context.channel.pipeline.addHandler(HTTPResponseEncoder())
|
||||
}.flatMap {
|
||||
// Add the forwarding handler that connects to the real server
|
||||
context.channel.pipeline.addHandler(
|
||||
MITMForwardHandler(
|
||||
remoteHost: host,
|
||||
remotePort: port,
|
||||
domain: sniDomain,
|
||||
trafficRepo: trafficRepo
|
||||
)
|
||||
)
|
||||
}.whenComplete { result in
|
||||
switch result {
|
||||
case .success:
|
||||
// Re-fire the original ClientHello bytes so TLS handshake proceeds
|
||||
context.channel.pipeline.fireChannelRead(NIOAny(buffer))
|
||||
case .failure(let error):
|
||||
print("[MITM] Pipeline setup failed: \(error)")
|
||||
context.close(promise: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - SNI Extraction
|
||||
|
||||
/// Parse the SNI hostname from a TLS ClientHello message.
|
||||
private func extractSNI(from buffer: ByteBuffer) -> String? {
|
||||
var buf = buffer
|
||||
guard buf.readableBytes >= 43 else { return nil }
|
||||
|
||||
// TLS record header
|
||||
guard buf.readInteger(as: UInt8.self) == 0x16 else { return nil } // Handshake
|
||||
let _ = buf.readInteger(as: UInt16.self) // Version
|
||||
let _ = buf.readInteger(as: UInt16.self) // Length
|
||||
|
||||
// Handshake header
|
||||
guard buf.readInteger(as: UInt8.self) == 0x01 else { return nil } // ClientHello
|
||||
let _ = buf.readBytes(length: 3) // Length (3 bytes)
|
||||
|
||||
// Client version
|
||||
let _ = buf.readInteger(as: UInt16.self)
|
||||
// Random (32 bytes)
|
||||
guard buf.readBytes(length: 32) != nil else { return nil }
|
||||
// Session ID
|
||||
guard let sessionIdLen = buf.readInteger(as: UInt8.self) else { return nil }
|
||||
guard buf.readBytes(length: Int(sessionIdLen)) != nil else { return nil }
|
||||
// Cipher suites
|
||||
guard let cipherSuitesLen = buf.readInteger(as: UInt16.self) else { return nil }
|
||||
guard buf.readBytes(length: Int(cipherSuitesLen)) != nil else { return nil }
|
||||
// Compression methods
|
||||
guard let compMethodsLen = buf.readInteger(as: UInt8.self) else { return nil }
|
||||
guard buf.readBytes(length: Int(compMethodsLen)) != nil else { return nil }
|
||||
|
||||
// Extensions
|
||||
guard let extensionsLen = buf.readInteger(as: UInt16.self) else { return nil }
|
||||
var extensionsRemaining = Int(extensionsLen)
|
||||
|
||||
while extensionsRemaining > 4 {
|
||||
guard let extType = buf.readInteger(as: UInt16.self),
|
||||
let extLen = buf.readInteger(as: UInt16.self) else { return nil }
|
||||
extensionsRemaining -= 4 + Int(extLen)
|
||||
|
||||
if extType == 0x0000 { // SNI extension
|
||||
guard let _ = buf.readInteger(as: UInt16.self), // SNI list length
|
||||
let nameType = buf.readInteger(as: UInt8.self),
|
||||
nameType == 0x00, // hostname
|
||||
let nameLen = buf.readInteger(as: UInt16.self),
|
||||
let nameBytes = buf.readBytes(length: Int(nameLen)) else {
|
||||
return nil
|
||||
}
|
||||
return String(bytes: nameBytes, encoding: .utf8)
|
||||
} else {
|
||||
guard buf.readBytes(length: Int(extLen)) != nil else { return nil }
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - MITMForwardHandler
|
||||
|
||||
/// Handles decrypted HTTP from the client, forwards to the real server over TLS,
|
||||
/// and relays responses back. Captures everything via HTTPCaptureHandler.
|
||||
final class MITMForwardHandler: ChannelInboundHandler, RemovableChannelHandler {
|
||||
typealias InboundIn = HTTPServerRequestPart
|
||||
typealias OutboundOut = HTTPServerResponsePart
|
||||
|
||||
private let remoteHost: String
|
||||
private let remotePort: Int
|
||||
private let domain: String
|
||||
private let trafficRepo: TrafficRepository
|
||||
private var remoteChannel: Channel?
|
||||
|
||||
// Buffer request parts until upstream is connected
|
||||
private var pendingParts: [HTTPServerRequestPart] = []
|
||||
private var isConnected = false
|
||||
|
||||
init(remoteHost: String, remotePort: Int, domain: String, trafficRepo: TrafficRepository) {
|
||||
self.remoteHost = remoteHost
|
||||
self.remotePort = remotePort
|
||||
self.domain = domain
|
||||
self.trafficRepo = trafficRepo
|
||||
}
|
||||
|
||||
func handlerAdded(context: ChannelHandlerContext) {
|
||||
connectToRemote(context: context)
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
let part = unwrapInboundIn(data)
|
||||
|
||||
if isConnected, let remote = remoteChannel {
|
||||
// Forward to upstream as client request
|
||||
switch part {
|
||||
case .head(let head):
|
||||
var clientHead = HTTPRequestHead(version: head.version, method: head.method, uri: head.uri, headers: head.headers)
|
||||
if !clientHead.headers.contains(name: "Host") {
|
||||
clientHead.headers.add(name: "Host", value: domain)
|
||||
}
|
||||
remote.write(NIOAny(HTTPClientRequestPart.head(clientHead)), promise: nil)
|
||||
case .body(let buffer):
|
||||
remote.write(NIOAny(HTTPClientRequestPart.body(.byteBuffer(buffer))), promise: nil)
|
||||
case .end(let trailers):
|
||||
remote.writeAndFlush(NIOAny(HTTPClientRequestPart.end(trailers)), promise: nil)
|
||||
}
|
||||
} else {
|
||||
pendingParts.append(part)
|
||||
}
|
||||
}
|
||||
|
||||
func channelInactive(context: ChannelHandlerContext) {
|
||||
remoteChannel?.close(promise: nil)
|
||||
}
|
||||
|
||||
func errorCaught(context: ChannelHandlerContext, error: Error) {
|
||||
print("[MITMForward] Error: \(error)")
|
||||
context.close(promise: nil)
|
||||
remoteChannel?.close(promise: nil)
|
||||
}
|
||||
|
||||
private func connectToRemote(context: ChannelHandlerContext) {
|
||||
let captureHandler = HTTPCaptureHandler(trafficRepo: trafficRepo, domain: domain, scheme: "https")
|
||||
let clientContext = context
|
||||
|
||||
do {
|
||||
let tlsConfig = TLSConfiguration.makeClientConfiguration()
|
||||
let sslContext = try NIOSSLContext(configuration: tlsConfig)
|
||||
|
||||
ClientBootstrap(group: context.eventLoop)
|
||||
.channelOption(.socketOption(.so_reuseaddr), value: 1)
|
||||
.channelInitializer { channel in
|
||||
let sniHandler = try! NIOSSLClientHandler(context: sslContext, serverHostname: self.domain)
|
||||
return channel.pipeline.addHandler(sniHandler).flatMap {
|
||||
channel.pipeline.addHandler(HTTPRequestEncoder())
|
||||
}.flatMap {
|
||||
channel.pipeline.addHandler(ByteToMessageHandler(HTTPResponseDecoder()))
|
||||
}.flatMap {
|
||||
channel.pipeline.addHandler(captureHandler)
|
||||
}.flatMap {
|
||||
channel.pipeline.addHandler(
|
||||
MITMRelayHandler(clientContext: clientContext)
|
||||
)
|
||||
}
|
||||
}
|
||||
.connect(host: remoteHost, port: remotePort)
|
||||
.whenComplete { result in
|
||||
switch result {
|
||||
case .success(let channel):
|
||||
self.remoteChannel = channel
|
||||
self.isConnected = true
|
||||
self.flushPending(remote: channel)
|
||||
case .failure(let error):
|
||||
print("[MITMForward] Connect to \(self.remoteHost):\(self.remotePort) failed: \(error)")
|
||||
clientContext.close(promise: nil)
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
print("[MITMForward] TLS setup failed: \(error)")
|
||||
context.close(promise: nil)
|
||||
}
|
||||
}
|
||||
|
||||
private func flushPending(remote: Channel) {
|
||||
for part in pendingParts {
|
||||
switch part {
|
||||
case .head(let head):
|
||||
var clientHead = HTTPRequestHead(version: head.version, method: head.method, uri: head.uri, headers: head.headers)
|
||||
if !clientHead.headers.contains(name: "Host") {
|
||||
clientHead.headers.add(name: "Host", value: domain)
|
||||
}
|
||||
remote.write(NIOAny(HTTPClientRequestPart.head(clientHead)), promise: nil)
|
||||
case .body(let buffer):
|
||||
remote.write(NIOAny(HTTPClientRequestPart.body(.byteBuffer(buffer))), promise: nil)
|
||||
case .end(let trailers):
|
||||
remote.writeAndFlush(NIOAny(HTTPClientRequestPart.end(trailers)), promise: nil)
|
||||
}
|
||||
}
|
||||
pendingParts.removeAll()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - MITMRelayHandler
|
||||
|
||||
/// Relays responses from the real server back to the proxy client.
|
||||
final class MITMRelayHandler: ChannelInboundHandler, RemovableChannelHandler {
|
||||
typealias InboundIn = HTTPClientResponsePart
|
||||
|
||||
private let clientContext: ChannelHandlerContext
|
||||
|
||||
init(clientContext: ChannelHandlerContext) {
|
||||
self.clientContext = clientContext
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
let part = unwrapInboundIn(data)
|
||||
|
||||
switch part {
|
||||
case .head(let head):
|
||||
let serverResponse = HTTPResponseHead(version: head.version, status: head.status, headers: head.headers)
|
||||
clientContext.write(NIOAny(HTTPServerResponsePart.head(serverResponse)), promise: nil)
|
||||
case .body(let buffer):
|
||||
clientContext.write(NIOAny(HTTPServerResponsePart.body(.byteBuffer(buffer))), promise: nil)
|
||||
case .end(let trailers):
|
||||
clientContext.writeAndFlush(NIOAny(HTTPServerResponsePart.end(trailers)), promise: nil)
|
||||
}
|
||||
}
|
||||
|
||||
func channelInactive(context: ChannelHandlerContext) {
|
||||
clientContext.close(promise: nil)
|
||||
}
|
||||
|
||||
func errorCaught(context: ChannelHandlerContext, error: Error) {
|
||||
print("[MITMRelay] Error: \(error)")
|
||||
context.close(promise: nil)
|
||||
clientContext.close(promise: nil)
|
||||
}
|
||||
}
|
||||
55
ProxyCore/Sources/ProxyEngine/ProxyServer.swift
Normal file
55
ProxyCore/Sources/ProxyEngine/ProxyServer.swift
Normal file
@@ -0,0 +1,55 @@
|
||||
import Foundation
|
||||
import NIOCore
|
||||
import NIOPosix
|
||||
import NIOHTTP1
|
||||
|
||||
public final class ProxyServer: Sendable {
|
||||
private let host: String
|
||||
private let port: Int
|
||||
private let group: EventLoopGroup
|
||||
private let trafficRepo: TrafficRepository
|
||||
nonisolated(unsafe) private var channel: Channel?
|
||||
|
||||
public init(
|
||||
host: String = ProxyConstants.proxyHost,
|
||||
port: Int = ProxyConstants.proxyPort,
|
||||
trafficRepo: TrafficRepository = TrafficRepository()
|
||||
) {
|
||||
self.host = host
|
||||
self.port = port
|
||||
// Use only 1 thread to conserve memory in the extension (50MB budget)
|
||||
self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
||||
self.trafficRepo = trafficRepo
|
||||
}
|
||||
|
||||
public func start() async throws {
|
||||
let trafficRepo = self.trafficRepo
|
||||
|
||||
let bootstrap = ServerBootstrap(group: group)
|
||||
.serverChannelOption(.backlog, value: 256)
|
||||
.serverChannelOption(.socketOption(.so_reuseaddr), value: 1)
|
||||
.childChannelInitializer { channel in
|
||||
channel.pipeline.addHandler(
|
||||
ByteToMessageHandler(HTTPRequestDecoder(leftOverBytesStrategy: .forwardBytes))
|
||||
).flatMap {
|
||||
channel.pipeline.addHandler(HTTPResponseEncoder())
|
||||
}.flatMap {
|
||||
channel.pipeline.addHandler(ConnectHandler(trafficRepo: trafficRepo))
|
||||
}
|
||||
}
|
||||
.childChannelOption(.socketOption(.so_reuseaddr), value: 1)
|
||||
.childChannelOption(.maxMessagesPerRead, value: 16)
|
||||
|
||||
channel = try await bootstrap.bind(host: host, port: port).get()
|
||||
print("[ProxyServer] Listening on \(host):\(port)")
|
||||
}
|
||||
|
||||
public func stop() async {
|
||||
do {
|
||||
try await channel?.close()
|
||||
try await group.shutdownGracefully()
|
||||
} catch {
|
||||
print("[ProxyServer] Shutdown error: \(error)")
|
||||
}
|
||||
}
|
||||
}
|
||||
106
ProxyCore/Sources/Shared/CURLParser.swift
Normal file
106
ProxyCore/Sources/Shared/CURLParser.swift
Normal file
@@ -0,0 +1,106 @@
|
||||
import Foundation
|
||||
|
||||
public struct ParsedCURLRequest: Sendable {
|
||||
public var method: String = "GET"
|
||||
public var url: String = ""
|
||||
public var headers: [(key: String, value: String)] = []
|
||||
public var body: String?
|
||||
}
|
||||
|
||||
public enum CURLParser {
|
||||
public static func parse(_ curlString: String) -> ParsedCURLRequest? {
|
||||
var result = ParsedCURLRequest()
|
||||
let trimmed = curlString.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
|
||||
guard trimmed.lowercased().hasPrefix("curl") else { return nil }
|
||||
|
||||
let tokens = tokenize(trimmed)
|
||||
var i = 0
|
||||
|
||||
while i < tokens.count {
|
||||
let token = tokens[i]
|
||||
|
||||
switch token {
|
||||
case "curl":
|
||||
break
|
||||
case "-X", "--request":
|
||||
i += 1
|
||||
if i < tokens.count {
|
||||
result.method = tokens[i].uppercased()
|
||||
}
|
||||
case "-H", "--header":
|
||||
i += 1
|
||||
if i < tokens.count {
|
||||
let header = tokens[i]
|
||||
if let colonIndex = header.firstIndex(of: ":") {
|
||||
let key = String(header[header.startIndex..<colonIndex]).trimmingCharacters(in: .whitespaces)
|
||||
let value = String(header[header.index(after: colonIndex)...]).trimmingCharacters(in: .whitespaces)
|
||||
result.headers.append((key: key, value: value))
|
||||
}
|
||||
}
|
||||
case "-d", "--data", "--data-raw", "--data-binary":
|
||||
i += 1
|
||||
if i < tokens.count {
|
||||
result.body = tokens[i]
|
||||
if result.method == "GET" {
|
||||
result.method = "POST"
|
||||
}
|
||||
}
|
||||
default:
|
||||
if !token.hasPrefix("-") && result.url.isEmpty {
|
||||
result.url = token
|
||||
}
|
||||
}
|
||||
i += 1
|
||||
}
|
||||
|
||||
return result.url.isEmpty ? nil : result
|
||||
}
|
||||
|
||||
private static func tokenize(_ input: String) -> [String] {
|
||||
var tokens: [String] = []
|
||||
var current = ""
|
||||
var inSingleQuote = false
|
||||
var inDoubleQuote = false
|
||||
var escaped = false
|
||||
|
||||
for char in input {
|
||||
if escaped {
|
||||
current.append(char)
|
||||
escaped = false
|
||||
continue
|
||||
}
|
||||
|
||||
if char == "\\" && !inSingleQuote {
|
||||
escaped = true
|
||||
continue
|
||||
}
|
||||
|
||||
if char == "'" && !inDoubleQuote {
|
||||
inSingleQuote.toggle()
|
||||
continue
|
||||
}
|
||||
|
||||
if char == "\"" && !inSingleQuote {
|
||||
inDoubleQuote.toggle()
|
||||
continue
|
||||
}
|
||||
|
||||
if char.isWhitespace && !inSingleQuote && !inDoubleQuote {
|
||||
if !current.isEmpty {
|
||||
tokens.append(current)
|
||||
current = ""
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
current.append(char)
|
||||
}
|
||||
|
||||
if !current.isEmpty {
|
||||
tokens.append(current)
|
||||
}
|
||||
|
||||
return tokens
|
||||
}
|
||||
}
|
||||
18
ProxyCore/Sources/Shared/Constants.swift
Normal file
18
ProxyCore/Sources/Shared/Constants.swift
Normal file
@@ -0,0 +1,18 @@
|
||||
import Foundation
|
||||
|
||||
public enum ProxyConstants {
|
||||
public static let proxyHost = "127.0.0.1"
|
||||
public static let proxyPort: Int = 9090
|
||||
public static let appGroupIdentifier = "group.com.treyt.proxyapp"
|
||||
public static let extensionBundleIdentifier = "com.treyt.proxyapp.PacketTunnel"
|
||||
public static let maxBodySizeBytes = 1_048_576 // 1 MB - truncate larger bodies
|
||||
public static let certificateCacheSize = 500
|
||||
|
||||
public static let httpMethods = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]
|
||||
|
||||
public static let commonHeaders = [
|
||||
"Accept", "Accept-Charset", "Accept-Encoding", "Accept-Language",
|
||||
"Authorization", "Cache-Control", "Connection", "Content-Length",
|
||||
"Content-Type", "Cookie", "Host", "Origin", "Referer", "User-Agent"
|
||||
]
|
||||
}
|
||||
103
ProxyCore/Sources/Shared/IPCManager.swift
Normal file
103
ProxyCore/Sources/Shared/IPCManager.swift
Normal file
@@ -0,0 +1,103 @@
|
||||
import Foundation
|
||||
|
||||
/// Lightweight IPC between the main app and the packet tunnel extension
|
||||
/// using Darwin notifications (fire-and-forget signals) and shared UserDefaults.
|
||||
public final class IPCManager: Sendable {
|
||||
public static let shared = IPCManager()
|
||||
|
||||
private let suiteName = "group.com.treyt.proxyapp"
|
||||
|
||||
public enum Notification: String, Sendable {
|
||||
case newTrafficCaptured = "com.treyt.proxyapp.newTraffic"
|
||||
case configurationChanged = "com.treyt.proxyapp.configChanged"
|
||||
case extensionStarted = "com.treyt.proxyapp.extensionStarted"
|
||||
case extensionStopped = "com.treyt.proxyapp.extensionStopped"
|
||||
}
|
||||
|
||||
private init() {}
|
||||
|
||||
// MARK: - Darwin Notifications
|
||||
|
||||
public func post(_ notification: Notification) {
|
||||
let name = CFNotificationName(notification.rawValue as CFString)
|
||||
CFNotificationCenterPostNotification(
|
||||
CFNotificationCenterGetDarwinNotifyCenter(),
|
||||
name, nil, nil, true
|
||||
)
|
||||
}
|
||||
|
||||
public func observe(_ notification: Notification, callback: @escaping @Sendable () -> Void) {
|
||||
let name = notification.rawValue as CFString
|
||||
let center = CFNotificationCenterGetDarwinNotifyCenter()
|
||||
|
||||
// Store callback in a static dictionary keyed by notification name
|
||||
DarwinCallbackStore.shared.register(name: notification.rawValue, callback: callback)
|
||||
|
||||
CFNotificationCenterAddObserver(
|
||||
center, nil,
|
||||
{ _, _, name, _, _ in
|
||||
guard let cfName = name?.rawValue as? String else { return }
|
||||
DarwinCallbackStore.shared.fire(name: cfName)
|
||||
},
|
||||
name, nil,
|
||||
.deliverImmediately
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Shared UserDefaults
|
||||
|
||||
public var sharedDefaults: UserDefaults? {
|
||||
UserDefaults(suiteName: suiteName)
|
||||
}
|
||||
|
||||
public var isSSLProxyingEnabled: Bool {
|
||||
get { sharedDefaults?.bool(forKey: "sslProxyingEnabled") ?? false }
|
||||
set { sharedDefaults?.set(newValue, forKey: "sslProxyingEnabled") }
|
||||
}
|
||||
|
||||
public var isBlockListEnabled: Bool {
|
||||
get { sharedDefaults?.bool(forKey: "blockListEnabled") ?? false }
|
||||
set { sharedDefaults?.set(newValue, forKey: "blockListEnabled") }
|
||||
}
|
||||
|
||||
public var isBreakpointEnabled: Bool {
|
||||
get { sharedDefaults?.bool(forKey: "breakpointEnabled") ?? false }
|
||||
set { sharedDefaults?.set(newValue, forKey: "breakpointEnabled") }
|
||||
}
|
||||
|
||||
public var isNoCachingEnabled: Bool {
|
||||
get { sharedDefaults?.bool(forKey: "noCachingEnabled") ?? false }
|
||||
set { sharedDefaults?.set(newValue, forKey: "noCachingEnabled") }
|
||||
}
|
||||
|
||||
public var isDNSSpoofingEnabled: Bool {
|
||||
get { sharedDefaults?.bool(forKey: "dnsSpoofingEnabled") ?? false }
|
||||
set { sharedDefaults?.set(newValue, forKey: "dnsSpoofingEnabled") }
|
||||
}
|
||||
|
||||
public var hideSystemTraffic: Bool {
|
||||
get { sharedDefaults?.bool(forKey: "hideSystemTraffic") ?? false }
|
||||
set { sharedDefaults?.set(newValue, forKey: "hideSystemTraffic") }
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Darwin Callback Storage
|
||||
|
||||
private final class DarwinCallbackStore: @unchecked Sendable {
|
||||
static let shared = DarwinCallbackStore()
|
||||
private var callbacks: [String: @Sendable () -> Void] = [:]
|
||||
private let lock = NSLock()
|
||||
|
||||
func register(name: String, callback: @escaping @Sendable () -> Void) {
|
||||
lock.lock()
|
||||
callbacks[name] = callback
|
||||
lock.unlock()
|
||||
}
|
||||
|
||||
func fire(name: String) {
|
||||
lock.lock()
|
||||
let cb = callbacks[name]
|
||||
lock.unlock()
|
||||
cb?()
|
||||
}
|
||||
}
|
||||
40
ProxyCore/Sources/Shared/WildcardMatcher.swift
Normal file
40
ProxyCore/Sources/Shared/WildcardMatcher.swift
Normal file
@@ -0,0 +1,40 @@
|
||||
import Foundation
|
||||
|
||||
public enum WildcardMatcher {
|
||||
/// Matches a string against a glob pattern with `*` (zero or more chars) and `?` (single char).
|
||||
public static func matches(_ string: String, pattern: String) -> Bool {
|
||||
let s = Array(string.lowercased())
|
||||
let p = Array(pattern.lowercased())
|
||||
return matchHelper(s, 0, p, 0)
|
||||
}
|
||||
|
||||
private static func matchHelper(_ s: [Character], _ si: Int, _ p: [Character], _ pi: Int) -> Bool {
|
||||
var si = si
|
||||
var pi = pi
|
||||
var starIdx = -1
|
||||
var matchIdx = 0
|
||||
|
||||
while si < s.count {
|
||||
if pi < p.count && (p[pi] == "?" || p[pi] == s[si]) {
|
||||
si += 1
|
||||
pi += 1
|
||||
} else if pi < p.count && p[pi] == "*" {
|
||||
starIdx = pi
|
||||
matchIdx = si
|
||||
pi += 1
|
||||
} else if starIdx != -1 {
|
||||
pi = starIdx + 1
|
||||
matchIdx += 1
|
||||
si = matchIdx
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
while pi < p.count && p[pi] == "*" {
|
||||
pi += 1
|
||||
}
|
||||
|
||||
return pi == p.count
|
||||
}
|
||||
}
|
||||
6
Resources/Assets.xcassets/Contents.json
Normal file
6
Resources/Assets.xcassets/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
55
UI/Compose/CURLImportView.swift
Normal file
55
UI/Compose/CURLImportView.swift
Normal file
@@ -0,0 +1,55 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct CURLImportView: View {
|
||||
let onImport: (ParsedCURLRequest) -> Void
|
||||
|
||||
@State private var curlText = ""
|
||||
@State private var errorMessage: String?
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
Text("Paste a cURL command to import as a request.")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
TextEditor(text: $curlText)
|
||||
.font(.system(.caption, design: .monospaced))
|
||||
.frame(minHeight: 200)
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 8)
|
||||
.stroke(Color(.systemGray4))
|
||||
)
|
||||
|
||||
if let errorMessage {
|
||||
Text(errorMessage)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.red)
|
||||
}
|
||||
|
||||
Button("Import") {
|
||||
if let parsed = CURLParser.parse(curlText) {
|
||||
onImport(parsed)
|
||||
} else {
|
||||
errorMessage = "Invalid cURL command. Make sure it starts with 'curl'."
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
.buttonStyle(.borderedProminent)
|
||||
.disabled(curlText.isEmpty)
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
.navigationTitle("Import cURL")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button("Cancel") { dismiss() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
180
UI/Compose/ComposeEditorView.swift
Normal file
180
UI/Compose/ComposeEditorView.swift
Normal file
@@ -0,0 +1,180 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct ComposeEditorView: View {
|
||||
let requestId: Int64
|
||||
|
||||
@State private var method = "GET"
|
||||
@State private var url = ""
|
||||
@State private var headersText = ""
|
||||
@State private var queryText = ""
|
||||
@State private var bodyText = ""
|
||||
@State private var selectedTab: EditorTab = .headers
|
||||
@State private var isSending = false
|
||||
@State private var responseStatus: Int?
|
||||
@State private var responseBody: String?
|
||||
|
||||
private let composeRepo = ComposeRepository()
|
||||
|
||||
enum EditorTab: String, CaseIterable {
|
||||
case headers = "Headers"
|
||||
case query = "Query"
|
||||
case body = "Body"
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
// Method + URL
|
||||
HStack(spacing: 12) {
|
||||
Menu {
|
||||
ForEach(ProxyConstants.httpMethods, id: \.self) { m in
|
||||
Button(m) { method = m }
|
||||
}
|
||||
} label: {
|
||||
HStack(spacing: 4) {
|
||||
Text(method)
|
||||
.font(.subheadline.weight(.semibold))
|
||||
.foregroundStyle(.green)
|
||||
Image(systemName: "chevron.down")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.vertical, 6)
|
||||
.background(Color(.systemGray6), in: RoundedRectangle(cornerRadius: 8))
|
||||
}
|
||||
|
||||
TextField("Tap to edit URL", text: $url)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
.font(.subheadline)
|
||||
.textInputAutocapitalization(.never)
|
||||
.autocorrectionDisabled()
|
||||
}
|
||||
.padding()
|
||||
|
||||
// Tabs
|
||||
Picker("Tab", selection: $selectedTab) {
|
||||
ForEach(EditorTab.allCases, id: \.self) { tab in
|
||||
Text(tab.rawValue).tag(tab)
|
||||
}
|
||||
}
|
||||
.pickerStyle(.segmented)
|
||||
.padding(.horizontal)
|
||||
|
||||
// Tab Content
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
switch selectedTab {
|
||||
case .headers:
|
||||
headerEditor
|
||||
case .query:
|
||||
queryEditor
|
||||
case .body:
|
||||
bodyEditor
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
|
||||
// Response
|
||||
if let responseBody {
|
||||
Divider()
|
||||
ScrollView {
|
||||
Text(responseBody)
|
||||
.font(.system(.caption, design: .monospaced))
|
||||
.textSelection(.enabled)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding()
|
||||
}
|
||||
.frame(maxHeight: 200)
|
||||
.background(Color(.systemGray6))
|
||||
}
|
||||
}
|
||||
.navigationTitle("New Request")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button {
|
||||
Task { await sendRequest() }
|
||||
} label: {
|
||||
Text("Send")
|
||||
.font(.headline)
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.disabled(url.isEmpty || isSending)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var headerEditor: some View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
if headersText.isEmpty {
|
||||
EmptyStateView(
|
||||
icon: "list.bullet.rectangle",
|
||||
title: "No Headers",
|
||||
subtitle: "Tap 'Edit Headers' to add headers."
|
||||
)
|
||||
}
|
||||
|
||||
Button("Edit Headers") {
|
||||
// TODO: Open header editor sheet
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
.buttonStyle(.borderedProminent)
|
||||
}
|
||||
}
|
||||
|
||||
private var queryEditor: some View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
TextEditor(text: $queryText)
|
||||
.font(.system(.caption, design: .monospaced))
|
||||
.frame(minHeight: 100)
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 8)
|
||||
.stroke(Color(.systemGray4))
|
||||
)
|
||||
Text("Format: key=value, one per line")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
private var bodyEditor: some View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
TextEditor(text: $bodyText)
|
||||
.font(.system(.caption, design: .monospaced))
|
||||
.frame(minHeight: 200)
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 8)
|
||||
.stroke(Color(.systemGray4))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private func sendRequest() async {
|
||||
guard let requestURL = URL(string: url) else { return }
|
||||
|
||||
isSending = true
|
||||
defer { isSending = false }
|
||||
|
||||
var request = URLRequest(url: requestURL)
|
||||
request.httpMethod = method
|
||||
if !bodyText.isEmpty {
|
||||
request.httpBody = bodyText.data(using: .utf8)
|
||||
}
|
||||
|
||||
do {
|
||||
let (data, response) = try await URLSession.shared.data(for: request)
|
||||
if let httpResponse = response as? HTTPURLResponse {
|
||||
responseStatus = httpResponse.statusCode
|
||||
}
|
||||
if let string = String(data: data, encoding: .utf8) {
|
||||
responseBody = string
|
||||
} else {
|
||||
responseBody = "\(data.count) bytes (binary)"
|
||||
}
|
||||
} catch {
|
||||
responseBody = "Error: \(error.localizedDescription)"
|
||||
}
|
||||
}
|
||||
}
|
||||
133
UI/Compose/ComposeListView.swift
Normal file
133
UI/Compose/ComposeListView.swift
Normal file
@@ -0,0 +1,133 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct ComposeListView: View {
|
||||
@State private var requests: [ComposeRequest] = []
|
||||
@State private var showClearConfirmation = false
|
||||
@State private var showTemplatePicker = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let composeRepo = ComposeRepository()
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if requests.isEmpty {
|
||||
EmptyStateView(
|
||||
icon: "square.and.pencil",
|
||||
title: "No Requests",
|
||||
subtitle: "Create a new request to get started.",
|
||||
actionTitle: "New Request"
|
||||
) {
|
||||
createEmptyRequest()
|
||||
}
|
||||
} else {
|
||||
List {
|
||||
ForEach(requests) { request in
|
||||
NavigationLink(value: request.id) {
|
||||
HStack {
|
||||
MethodBadge(method: request.method)
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(request.name)
|
||||
.font(.subheadline.weight(.medium))
|
||||
if let url = request.url, !url.isEmpty {
|
||||
Text(url)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = requests[index].id {
|
||||
try? composeRepo.delete(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationDestination(for: Int64?.self) { id in
|
||||
if let id {
|
||||
ComposeEditorView(requestId: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Compose")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
Button {
|
||||
showClearConfirmation = true
|
||||
} label: {
|
||||
Image(systemName: "trash")
|
||||
}
|
||||
.disabled(requests.isEmpty)
|
||||
}
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Menu {
|
||||
Button("Empty Request") { createEmptyRequest() }
|
||||
Button("GET with Query") { createTemplate(method: "GET", name: "GET with Query") }
|
||||
Button("POST with JSON") { createTemplate(method: "POST", name: "POST with JSON", contentType: "application/json") }
|
||||
Button("POST with Form") { createTemplate(method: "POST", name: "POST with Form", contentType: "application/x-www-form-urlencoded") }
|
||||
Divider()
|
||||
Button("Import from cURL") { showTemplatePicker = true }
|
||||
} label: {
|
||||
Image(systemName: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
.confirmationDialog("Clear History", isPresented: $showClearConfirmation) {
|
||||
Button("Clear All", role: .destructive) {
|
||||
try? composeRepo.deleteAll()
|
||||
}
|
||||
} message: {
|
||||
Text("This will permanently delete all compose requests.")
|
||||
}
|
||||
.sheet(isPresented: $showTemplatePicker) {
|
||||
CURLImportView { parsed in
|
||||
var request = ComposeRequest(
|
||||
name: "Imported Request",
|
||||
method: parsed.method,
|
||||
url: parsed.url,
|
||||
headers: encodeHeaders(parsed.headers),
|
||||
body: parsed.body
|
||||
)
|
||||
try? composeRepo.insert(&request)
|
||||
showTemplatePicker = false
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = composeRepo.observeRequests()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("Compose observation error: \(error)")
|
||||
} onChange: { newRequests in
|
||||
withAnimation {
|
||||
requests = newRequests
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func createEmptyRequest() {
|
||||
var request = ComposeRequest()
|
||||
try? composeRepo.insert(&request)
|
||||
}
|
||||
|
||||
private func createTemplate(method: String, name: String, contentType: String? = nil) {
|
||||
var headers: String?
|
||||
if let contentType {
|
||||
headers = encodeHeaders([(key: "Content-Type", value: contentType)])
|
||||
}
|
||||
var request = ComposeRequest(name: name, method: method, headers: headers)
|
||||
try? composeRepo.insert(&request)
|
||||
}
|
||||
|
||||
private func encodeHeaders(_ headers: [(key: String, value: String)]) -> String? {
|
||||
var dict: [String: String] = [:]
|
||||
for h in headers { dict[h.key] = h.value }
|
||||
guard let data = try? JSONEncoder().encode(dict) else { return nil }
|
||||
return String(data: data, encoding: .utf8)
|
||||
}
|
||||
}
|
||||
82
UI/Home/DomainDetailView.swift
Normal file
82
UI/Home/DomainDetailView.swift
Normal file
@@ -0,0 +1,82 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct DomainDetailView: View {
|
||||
let domain: String
|
||||
|
||||
@State private var requests: [CapturedTraffic] = []
|
||||
@State private var searchText = ""
|
||||
@State private var filterChips: [FilterChip] = [
|
||||
FilterChip(label: "JSON"),
|
||||
FilterChip(label: "Form"),
|
||||
FilterChip(label: "HTTP"),
|
||||
FilterChip(label: "HTTPS"),
|
||||
]
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let trafficRepo = TrafficRepository()
|
||||
|
||||
var filteredRequests: [CapturedTraffic] {
|
||||
var result = requests
|
||||
|
||||
if !searchText.isEmpty {
|
||||
result = result.filter { $0.url.localizedCaseInsensitiveContains(searchText) }
|
||||
}
|
||||
|
||||
let activeFilters = filterChips.filter(\.isSelected).map(\.label)
|
||||
if !activeFilters.isEmpty {
|
||||
result = result.filter { request in
|
||||
for filter in activeFilters {
|
||||
switch filter {
|
||||
case "JSON":
|
||||
if request.responseContentType?.contains("json") == true { return true }
|
||||
case "Form":
|
||||
if request.requestContentType?.contains("form") == true { return true }
|
||||
case "HTTP":
|
||||
if request.scheme == "http" { return true }
|
||||
case "HTTPS":
|
||||
if request.scheme == "https" { return true }
|
||||
default: break
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
FilterChipsView(chips: $filterChips)
|
||||
.padding(.vertical, 8)
|
||||
|
||||
List {
|
||||
ForEach(filteredRequests) { request in
|
||||
NavigationLink(value: request.id) {
|
||||
TrafficRowView(traffic: request)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.searchable(text: $searchText)
|
||||
.navigationTitle(domain)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.navigationDestination(for: Int64?.self) { id in
|
||||
if let id {
|
||||
RequestDetailView(trafficId: id)
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = trafficRepo.observeTraffic(forDomain: domain)
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("Observation error: \(error)")
|
||||
} onChange: { newRequests in
|
||||
withAnimation {
|
||||
requests = newRequests
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
104
UI/Home/HomeView.swift
Normal file
104
UI/Home/HomeView.swift
Normal file
@@ -0,0 +1,104 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct HomeView: View {
|
||||
@Environment(AppState.self) private var appState
|
||||
@State private var domains: [DomainGroup] = []
|
||||
@State private var searchText = ""
|
||||
@State private var showClearConfirmation = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let trafficRepo = TrafficRepository()
|
||||
|
||||
var filteredDomains: [DomainGroup] {
|
||||
if searchText.isEmpty { return domains }
|
||||
return domains.filter { $0.domain.localizedCaseInsensitiveContains(searchText) }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if !appState.isVPNConnected && domains.isEmpty {
|
||||
ContentUnavailableView {
|
||||
Label("VPN Not Connected", systemImage: "bolt.slash")
|
||||
} description: {
|
||||
Text("Enable the VPN to start capturing network traffic.")
|
||||
} actions: {
|
||||
Button("Enable VPN") {
|
||||
Task { await appState.toggleVPN() }
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
}
|
||||
} else if domains.isEmpty {
|
||||
ContentUnavailableView {
|
||||
Label("No Traffic", systemImage: "network.slash")
|
||||
} description: {
|
||||
Text("Waiting for network requests. Open Safari or another app to generate traffic.")
|
||||
}
|
||||
} else {
|
||||
List {
|
||||
ForEach(filteredDomains) { group in
|
||||
NavigationLink(value: group) {
|
||||
HStack {
|
||||
Image(systemName: "globe")
|
||||
.foregroundStyle(.secondary)
|
||||
Text(group.domain)
|
||||
.lineLimit(1)
|
||||
Spacer()
|
||||
Text("\(group.requestCount)")
|
||||
.foregroundStyle(.secondary)
|
||||
Image(systemName: "chevron.right")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.tertiary)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.searchable(text: $searchText, prompt: "Filter Domains")
|
||||
.navigationTitle("Home")
|
||||
.navigationDestination(for: DomainGroup.self) { group in
|
||||
DomainDetailView(domain: group.domain)
|
||||
}
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarLeading) {
|
||||
Button {
|
||||
showClearConfirmation = true
|
||||
} label: {
|
||||
Image(systemName: "trash")
|
||||
}
|
||||
.disabled(domains.isEmpty)
|
||||
}
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button {
|
||||
Task { await appState.toggleVPN() }
|
||||
} label: {
|
||||
Image(systemName: appState.isVPNConnected ? "bolt.fill" : "bolt.slash")
|
||||
.foregroundStyle(appState.isVPNConnected ? .yellow : .secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.confirmationDialog("Clear All Domains", isPresented: $showClearConfirmation) {
|
||||
Button("Clear All", role: .destructive) {
|
||||
try? trafficRepo.deleteAll()
|
||||
}
|
||||
} message: {
|
||||
Text("This will permanently delete all captured traffic.")
|
||||
}
|
||||
.task {
|
||||
startObservation()
|
||||
}
|
||||
}
|
||||
|
||||
private func startObservation() {
|
||||
observation = trafficRepo.observeDomainGroups()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("[HomeView] Observation error: \(error)")
|
||||
} onChange: { newDomains in
|
||||
withAnimation {
|
||||
domains = newDomains
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
193
UI/Home/RequestDetailView.swift
Normal file
193
UI/Home/RequestDetailView.swift
Normal file
@@ -0,0 +1,193 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct RequestDetailView: View {
|
||||
let trafficId: Int64
|
||||
|
||||
@State private var traffic: CapturedTraffic?
|
||||
@State private var selectedSegment: Segment = .request
|
||||
|
||||
private let trafficRepo = TrafficRepository()
|
||||
|
||||
enum Segment: String, CaseIterable {
|
||||
case request = "Request"
|
||||
case response = "Response"
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if let traffic {
|
||||
VStack(spacing: 0) {
|
||||
Picker("Segment", selection: $selectedSegment) {
|
||||
ForEach(Segment.allCases, id: \.self) { segment in
|
||||
Text(segment.rawValue).tag(segment)
|
||||
}
|
||||
}
|
||||
.pickerStyle(.segmented)
|
||||
.padding()
|
||||
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
switch selectedSegment {
|
||||
case .request:
|
||||
requestContent(traffic)
|
||||
case .response:
|
||||
responseContent(traffic)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
.navigationTitle(traffic?.domain ?? "Request")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
if let traffic {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button {
|
||||
try? trafficRepo.togglePin(id: trafficId, isPinned: !traffic.isPinned)
|
||||
self.traffic?.isPinned.toggle()
|
||||
} label: {
|
||||
Image(systemName: traffic.isPinned ? "pin.fill" : "pin")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.task {
|
||||
traffic = try? trafficRepo.traffic(byId: trafficId)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Request Content
|
||||
|
||||
@ViewBuilder
|
||||
private func requestContent(_ traffic: CapturedTraffic) -> some View {
|
||||
// General
|
||||
DisclosureGroup("General") {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
KeyValueRow(key: "URL", value: traffic.url)
|
||||
KeyValueRow(key: "Method", value: traffic.method)
|
||||
KeyValueRow(key: "Scheme", value: traffic.scheme)
|
||||
KeyValueRow(key: "Time", value: traffic.startDate.formatted(.dateTime))
|
||||
if let duration = traffic.durationMs {
|
||||
KeyValueRow(key: "Duration", value: "\(duration) ms")
|
||||
}
|
||||
if let status = traffic.statusCode {
|
||||
KeyValueRow(key: "Status", value: "\(status) \(traffic.statusText ?? "")")
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
|
||||
// Headers
|
||||
let requestHeaders = traffic.decodedRequestHeaders
|
||||
if !requestHeaders.isEmpty {
|
||||
DisclosureGroup("Headers (\(requestHeaders.count))") {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
ForEach(requestHeaders.sorted(by: { $0.key < $1.key }), id: \.key) { key, value in
|
||||
KeyValueRow(key: key, value: value)
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
}
|
||||
|
||||
// Query Parameters
|
||||
let queryParams = traffic.decodedQueryParameters
|
||||
if !queryParams.isEmpty {
|
||||
DisclosureGroup("Query (\(queryParams.count))") {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
ForEach(queryParams.sorted(by: { $0.key < $1.key }), id: \.key) { key, value in
|
||||
KeyValueRow(key: key, value: value)
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
}
|
||||
|
||||
// Body
|
||||
if let body = traffic.requestBody, !body.isEmpty {
|
||||
DisclosureGroup("Body (\(formatBytes(body.count)))") {
|
||||
bodyView(data: body, contentType: traffic.requestContentType)
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Response Content
|
||||
|
||||
@ViewBuilder
|
||||
private func responseContent(_ traffic: CapturedTraffic) -> some View {
|
||||
if let status = traffic.statusCode {
|
||||
// Status
|
||||
HStack {
|
||||
StatusBadge(statusCode: status)
|
||||
Text(traffic.statusText ?? "")
|
||||
.font(.subheadline)
|
||||
}
|
||||
.padding(.vertical, 4)
|
||||
}
|
||||
|
||||
// Headers
|
||||
let responseHeaders = traffic.decodedResponseHeaders
|
||||
if !responseHeaders.isEmpty {
|
||||
DisclosureGroup("Headers (\(responseHeaders.count))") {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
ForEach(responseHeaders.sorted(by: { $0.key < $1.key }), id: \.key) { key, value in
|
||||
KeyValueRow(key: key, value: value)
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
}
|
||||
|
||||
// Body
|
||||
if let body = traffic.responseBody, !body.isEmpty {
|
||||
DisclosureGroup("Body (\(formatBytes(body.count)))") {
|
||||
bodyView(data: body, contentType: traffic.responseContentType)
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
}
|
||||
|
||||
if traffic.statusCode == nil {
|
||||
EmptyStateView(
|
||||
icon: "clock",
|
||||
title: "Waiting for Response",
|
||||
subtitle: "The response has not been received yet."
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Body View
|
||||
|
||||
@ViewBuilder
|
||||
private func bodyView(data: Data, contentType: String?) -> some View {
|
||||
if let contentType, contentType.contains("json"),
|
||||
let json = try? JSONSerialization.jsonObject(with: data),
|
||||
let pretty = try? JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
|
||||
let string = String(data: pretty, encoding: .utf8) {
|
||||
ScrollView(.horizontal) {
|
||||
Text(string)
|
||||
.font(.system(.caption, design: .monospaced))
|
||||
.textSelection(.enabled)
|
||||
}
|
||||
} else if let string = String(data: data, encoding: .utf8) {
|
||||
Text(string)
|
||||
.font(.system(.caption, design: .monospaced))
|
||||
.textSelection(.enabled)
|
||||
} else {
|
||||
Text("\(data.count) bytes (binary)")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
private func formatBytes(_ bytes: Int) -> String {
|
||||
if bytes < 1024 { return "\(bytes) B" }
|
||||
if bytes < 1_048_576 { return String(format: "%.1f KB", Double(bytes) / 1024) }
|
||||
return String(format: "%.1f MB", Double(bytes) / 1_048_576)
|
||||
}
|
||||
}
|
||||
50
UI/Home/TrafficRowView.swift
Normal file
50
UI/Home/TrafficRowView.swift
Normal file
@@ -0,0 +1,50 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct TrafficRowView: View {
|
||||
let traffic: CapturedTraffic
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
HStack(spacing: 6) {
|
||||
MethodBadge(method: traffic.method)
|
||||
StatusBadge(statusCode: traffic.statusCode)
|
||||
|
||||
Spacer()
|
||||
|
||||
Text(traffic.startDate, format: .dateTime.hour().minute().second().secondFraction(.fractional(3)))
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
Text(traffic.formattedDuration)
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
|
||||
Text(traffic.url)
|
||||
.font(.caption)
|
||||
.lineLimit(3)
|
||||
.foregroundStyle(.primary)
|
||||
|
||||
HStack(spacing: 12) {
|
||||
if traffic.requestBodySize > 0 {
|
||||
Label(formatBytes(traffic.requestBodySize), systemImage: "arrow.up.circle.fill")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.green)
|
||||
}
|
||||
if traffic.responseBodySize > 0 {
|
||||
Label(formatBytes(traffic.responseBodySize), systemImage: "arrow.down.circle.fill")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.blue)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 4)
|
||||
}
|
||||
|
||||
private func formatBytes(_ bytes: Int) -> String {
|
||||
if bytes < 1024 { return "\(bytes) B" }
|
||||
if bytes < 1_048_576 { return String(format: "%.1f KB", Double(bytes) / 1024) }
|
||||
return String(format: "%.1f MB", Double(bytes) / 1_048_576)
|
||||
}
|
||||
}
|
||||
27
UI/More/AdvancedSettingsView.swift
Normal file
27
UI/More/AdvancedSettingsView.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct AdvancedSettingsView: View {
|
||||
@State private var hideSystemTraffic = IPCManager.shared.hideSystemTraffic
|
||||
@State private var showImagePreview = true
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
Section {
|
||||
Toggle("Hide iOS System Traffic", isOn: $hideSystemTraffic)
|
||||
.onChange(of: hideSystemTraffic) { _, newValue in
|
||||
IPCManager.shared.hideSystemTraffic = newValue
|
||||
}
|
||||
} footer: {
|
||||
Text("Hide traffic from Apple system services like push notifications, iCloud sync, and analytics.")
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle("Show Image Preview", isOn: $showImagePreview)
|
||||
} footer: {
|
||||
Text("Display thumbnail previews for image responses in the traffic list.")
|
||||
}
|
||||
}
|
||||
.navigationTitle("Advanced")
|
||||
}
|
||||
}
|
||||
39
UI/More/AppSettingsView.swift
Normal file
39
UI/More/AppSettingsView.swift
Normal file
@@ -0,0 +1,39 @@
|
||||
import SwiftUI
|
||||
|
||||
struct AppSettingsView: View {
|
||||
@State private var analyticsEnabled = false
|
||||
@State private var crashReportingEnabled = true
|
||||
@State private var showClearCacheConfirmation = false
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
Section {
|
||||
Toggle("Analytics", isOn: $analyticsEnabled)
|
||||
Toggle("Crash Reporting", isOn: $crashReportingEnabled)
|
||||
} footer: {
|
||||
Text("Help improve the app by sharing anonymous usage data.")
|
||||
}
|
||||
|
||||
Section {
|
||||
Button("Clear App Cache", role: .destructive) {
|
||||
showClearCacheConfirmation = true
|
||||
}
|
||||
} footer: {
|
||||
Text("Remove all cached data. This does not delete captured traffic.")
|
||||
}
|
||||
|
||||
Section("About") {
|
||||
LabeledContent("Version", value: "1.0.0")
|
||||
LabeledContent("Build", value: "1")
|
||||
}
|
||||
}
|
||||
.navigationTitle("App Settings")
|
||||
.confirmationDialog("Clear Cache", isPresented: $showClearCacheConfirmation) {
|
||||
Button("Clear Cache", role: .destructive) {
|
||||
// TODO: Clear URL cache, image cache, etc.
|
||||
}
|
||||
} message: {
|
||||
Text("This will clear all cached data.")
|
||||
}
|
||||
}
|
||||
}
|
||||
144
UI/More/BlockListView.swift
Normal file
144
UI/More/BlockListView.swift
Normal file
@@ -0,0 +1,144 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct BlockListView: View {
|
||||
@State private var isEnabled = IPCManager.shared.isBlockListEnabled
|
||||
@State private var entries: [BlockListEntry] = []
|
||||
@State private var showAddRule = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let rulesRepo = RulesRepository()
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
ToggleHeaderView(
|
||||
title: "Block List",
|
||||
description: "Block requests matching these rules. Blocked requests will be dropped or hidden based on the action.",
|
||||
isEnabled: $isEnabled
|
||||
)
|
||||
.onChange(of: isEnabled) { _, newValue in
|
||||
IPCManager.shared.isBlockListEnabled = newValue
|
||||
IPCManager.shared.post(.configurationChanged)
|
||||
}
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
|
||||
Section("Rules") {
|
||||
if entries.isEmpty {
|
||||
Text("No block rules")
|
||||
.foregroundStyle(.secondary)
|
||||
.font(.subheadline)
|
||||
} else {
|
||||
ForEach(entries) { entry in
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(entry.name ?? entry.urlPattern)
|
||||
.font(.subheadline.weight(.medium))
|
||||
Text(entry.urlPattern)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
Text(entry.action.displayName)
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.tertiary)
|
||||
}
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = entries[index].id {
|
||||
try? rulesRepo.deleteBlockEntry(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Block List")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button { showAddRule = true } label: {
|
||||
Image(systemName: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddRule) {
|
||||
NewBlockRuleView { entry in
|
||||
var entry = entry
|
||||
try? rulesRepo.insertBlockEntry(&entry)
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = rulesRepo.observeBlockListEntries()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("Block list observation error: \(error)")
|
||||
} onChange: { newEntries in
|
||||
entries = newEntries
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - New Block Rule
|
||||
|
||||
struct NewBlockRuleView: View {
|
||||
let onSave: (BlockListEntry) -> Void
|
||||
|
||||
@State private var name = ""
|
||||
@State private var urlPattern = ""
|
||||
@State private var method = "ANY"
|
||||
@State private var includeSubpaths = true
|
||||
@State private var blockAction: BlockAction = .blockAndHide
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
Form {
|
||||
Section {
|
||||
TextField("Name (optional)", text: $name)
|
||||
TextField("URL Pattern", text: $urlPattern)
|
||||
.textInputAutocapitalization(.never)
|
||||
.autocorrectionDisabled()
|
||||
}
|
||||
|
||||
Section {
|
||||
Picker("Method", selection: $method) {
|
||||
Text("ANY").tag("ANY")
|
||||
ForEach(ProxyConstants.httpMethods, id: \.self) { m in
|
||||
Text(m).tag(m)
|
||||
}
|
||||
}
|
||||
Toggle("Include Subpaths", isOn: $includeSubpaths)
|
||||
}
|
||||
|
||||
Section {
|
||||
Picker("Block Action", selection: $blockAction) {
|
||||
ForEach(BlockAction.allCases, id: \.self) { action in
|
||||
Text(action.displayName).tag(action)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("New Block Rule")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button("Cancel") { dismiss() }
|
||||
}
|
||||
ToolbarItem(placement: .confirmationAction) {
|
||||
Button("Save") {
|
||||
let entry = BlockListEntry(
|
||||
name: name.isEmpty ? nil : name,
|
||||
urlPattern: urlPattern,
|
||||
method: method,
|
||||
includeSubpaths: includeSubpaths,
|
||||
blockAction: blockAction
|
||||
)
|
||||
onSave(entry)
|
||||
dismiss()
|
||||
}
|
||||
.disabled(urlPattern.isEmpty)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
99
UI/More/BreakpointRulesView.swift
Normal file
99
UI/More/BreakpointRulesView.swift
Normal file
@@ -0,0 +1,99 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct BreakpointRulesView: View {
|
||||
@State private var isEnabled = IPCManager.shared.isBreakpointEnabled
|
||||
@State private var rules: [BreakpointRule] = []
|
||||
@State private var showAddRule = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let rulesRepo = RulesRepository()
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
ToggleHeaderView(
|
||||
title: "Breakpoint",
|
||||
description: "Pause and modify HTTP requests and responses in real-time before they reach the server or the app.",
|
||||
isEnabled: $isEnabled
|
||||
)
|
||||
.onChange(of: isEnabled) { _, newValue in
|
||||
IPCManager.shared.isBreakpointEnabled = newValue
|
||||
IPCManager.shared.post(.configurationChanged)
|
||||
}
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
|
||||
Section("Rules") {
|
||||
if rules.isEmpty {
|
||||
EmptyStateView(
|
||||
icon: "pause.circle",
|
||||
title: "No Breakpoint Rules",
|
||||
subtitle: "Tap + to create a new breakpoint rule."
|
||||
)
|
||||
} else {
|
||||
ForEach(rules) { rule in
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(rule.name ?? rule.urlPattern)
|
||||
.font(.subheadline.weight(.medium))
|
||||
Text(rule.urlPattern)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
HStack(spacing: 8) {
|
||||
if rule.interceptRequest {
|
||||
Text("Request")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.blue)
|
||||
}
|
||||
if rule.interceptResponse {
|
||||
Text("Response")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.green)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = rules[index].id {
|
||||
try? rulesRepo.deleteBreakpointRule(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Breakpoint")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button { showAddRule = true } label: {
|
||||
Image(systemName: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddRule) {
|
||||
NavigationStack {
|
||||
Form {
|
||||
// TODO: Add breakpoint rule creation form
|
||||
Text("Breakpoint rule creation")
|
||||
}
|
||||
.navigationTitle("New Breakpoint Rule")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button("Cancel") { showAddRule = false }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = rulesRepo.observeBreakpointRules()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("Breakpoint observation error: \(error)")
|
||||
} onChange: { newRules in
|
||||
rules = newRules
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
50
UI/More/CertificateView.swift
Normal file
50
UI/More/CertificateView.swift
Normal file
@@ -0,0 +1,50 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct CertificateView: View {
|
||||
@Environment(AppState.self) private var appState
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
HStack {
|
||||
Image(systemName: appState.isCertificateTrusted ? "checkmark.shield.fill" : "exclamationmark.shield")
|
||||
.font(.largeTitle)
|
||||
.foregroundStyle(appState.isCertificateTrusted ? .green : .orange)
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text(appState.isCertificateTrusted
|
||||
? "Certificate is installed & trusted!"
|
||||
: "Certificate not installed")
|
||||
.font(.headline)
|
||||
Text("Required for HTTPS decryption")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
}
|
||||
|
||||
Section("Details") {
|
||||
LabeledContent("CA Certificate", value: "Proxy CA (\(UIDevice.current.name))")
|
||||
LabeledContent("Generated", value: "-")
|
||||
LabeledContent("Expires", value: "-")
|
||||
}
|
||||
|
||||
Section {
|
||||
Button("Install Certificate") {
|
||||
// TODO: Phase 3 - Export and open cert installation
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
|
||||
Section {
|
||||
Button("Regenerate Certificate", role: .destructive) {
|
||||
// TODO: Phase 3 - Generate new CA
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
}
|
||||
.navigationTitle("Certificate")
|
||||
}
|
||||
}
|
||||
92
UI/More/DNSSpoofingView.swift
Normal file
92
UI/More/DNSSpoofingView.swift
Normal file
@@ -0,0 +1,92 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct DNSSpoofingView: View {
|
||||
@State private var isEnabled = IPCManager.shared.isDNSSpoofingEnabled
|
||||
@State private var rules: [DNSSpoofRule] = []
|
||||
@State private var showAddRule = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let rulesRepo = RulesRepository()
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
ToggleHeaderView(
|
||||
title: "DNS Spoofing",
|
||||
description: "Redirect domain resolution to a different target. Useful for routing production domains to development servers.",
|
||||
isEnabled: $isEnabled
|
||||
)
|
||||
.onChange(of: isEnabled) { _, newValue in
|
||||
IPCManager.shared.isDNSSpoofingEnabled = newValue
|
||||
IPCManager.shared.post(.configurationChanged)
|
||||
}
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
|
||||
Section("Rules") {
|
||||
if rules.isEmpty {
|
||||
EmptyStateView(
|
||||
icon: "network",
|
||||
title: "No DNS Spoofing Rules",
|
||||
subtitle: "Tap + to create a new rule."
|
||||
)
|
||||
} else {
|
||||
ForEach(rules) { rule in
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
HStack {
|
||||
Text(rule.sourceDomain)
|
||||
.font(.subheadline)
|
||||
Image(systemName: "arrow.right")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
Text(rule.targetDomain)
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.blue)
|
||||
}
|
||||
}
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = rules[index].id {
|
||||
try? rulesRepo.deleteDNSSpoofRule(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("DNS Spoofing")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button { showAddRule = true } label: {
|
||||
Image(systemName: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddRule) {
|
||||
NavigationStack {
|
||||
Form {
|
||||
// TODO: Add DNS spoof rule creation form
|
||||
Text("DNS Spoofing rule creation")
|
||||
}
|
||||
.navigationTitle("New DNS Rule")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button("Cancel") { showAddRule = false }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = rulesRepo.observeDNSSpoofRules()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("DNS Spoof observation error: \(error)")
|
||||
} onChange: { newRules in
|
||||
rules = newRules
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
88
UI/More/MapLocalView.swift
Normal file
88
UI/More/MapLocalView.swift
Normal file
@@ -0,0 +1,88 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct MapLocalView: View {
|
||||
@State private var rules: [MapLocalRule] = []
|
||||
@State private var showAddRule = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let rulesRepo = RulesRepository()
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
Text("Map Local")
|
||||
.font(.headline)
|
||||
Text("Intercept requests and replace the response with local content. Define custom mock responses for matched URLs.")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
|
||||
Section("Rules") {
|
||||
if rules.isEmpty {
|
||||
EmptyStateView(
|
||||
icon: "doc.on.doc",
|
||||
title: "No Map Local Rules",
|
||||
subtitle: "Tap + to create a new rule."
|
||||
)
|
||||
} else {
|
||||
ForEach(rules) { rule in
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(rule.name ?? rule.urlPattern)
|
||||
.font(.subheadline.weight(.medium))
|
||||
Text(rule.urlPattern)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
Text("Status: \(rule.responseStatus)")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(.tertiary)
|
||||
}
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = rules[index].id {
|
||||
try? rulesRepo.deleteMapLocalRule(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Map Local")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Button { showAddRule = true } label: {
|
||||
Image(systemName: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddRule) {
|
||||
NavigationStack {
|
||||
Form {
|
||||
// TODO: Add map local rule creation form
|
||||
Text("Map Local rule creation")
|
||||
}
|
||||
.navigationTitle("New Map Local Rule")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button("Cancel") { showAddRule = false }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = rulesRepo.observeMapLocalRules()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("Map Local observation error: \(error)")
|
||||
} onChange: { newRules in
|
||||
rules = newRules
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
87
UI/More/MoreView.swift
Normal file
87
UI/More/MoreView.swift
Normal file
@@ -0,0 +1,87 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct MoreView: View {
|
||||
@Environment(AppState.self) private var appState
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
NavigationLink {
|
||||
SetupGuideView()
|
||||
} label: {
|
||||
Label {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Setup Guide")
|
||||
Text(appState.isVPNConnected ? "Ready to Intercept" : "Setup Required")
|
||||
.font(.caption)
|
||||
.foregroundStyle(appState.isVPNConnected ? .green : .orange)
|
||||
}
|
||||
} icon: {
|
||||
Image(systemName: "checkmark.shield.fill")
|
||||
.foregroundStyle(appState.isVPNConnected ? .green : .orange)
|
||||
}
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
CertificateView()
|
||||
} label: {
|
||||
Label("Certificate", systemImage: "lock.shield")
|
||||
}
|
||||
}
|
||||
|
||||
Section("Rules") {
|
||||
NavigationLink {
|
||||
SSLProxyingListView()
|
||||
} label: {
|
||||
Label("SSL Proxying List", systemImage: "lock.fill")
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
BlockListView()
|
||||
} label: {
|
||||
Label("Block List", systemImage: "xmark.shield")
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
BreakpointRulesView()
|
||||
} label: {
|
||||
Label("Breakpoint", systemImage: "pause.circle")
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
MapLocalView()
|
||||
} label: {
|
||||
Label("Map Local", systemImage: "doc.on.doc")
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
NoCachingView()
|
||||
} label: {
|
||||
Label("No Caching", systemImage: "arrow.clockwise.circle")
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
DNSSpoofingView()
|
||||
} label: {
|
||||
Label("DNS Spoofing", systemImage: "network")
|
||||
}
|
||||
}
|
||||
|
||||
Section("Settings") {
|
||||
NavigationLink {
|
||||
AdvancedSettingsView()
|
||||
} label: {
|
||||
Label("Advanced", systemImage: "gearshape.2")
|
||||
}
|
||||
|
||||
NavigationLink {
|
||||
AppSettingsView()
|
||||
} label: {
|
||||
Label("App Settings", systemImage: "gearshape")
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("More")
|
||||
}
|
||||
}
|
||||
42
UI/More/NoCachingView.swift
Normal file
42
UI/More/NoCachingView.swift
Normal file
@@ -0,0 +1,42 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct NoCachingView: View {
|
||||
@State private var isEnabled = IPCManager.shared.isNoCachingEnabled
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
ToggleHeaderView(
|
||||
title: "No Caching",
|
||||
description: "Bypass all caching layers to always see the latest server response. Strips cache headers from requests and responses.",
|
||||
isEnabled: $isEnabled
|
||||
)
|
||||
.onChange(of: isEnabled) { _, newValue in
|
||||
IPCManager.shared.isNoCachingEnabled = newValue
|
||||
IPCManager.shared.post(.configurationChanged)
|
||||
}
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
|
||||
Section("How it works") {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
Text("Request modifications:")
|
||||
.font(.caption.weight(.semibold))
|
||||
Text("Removes If-Modified-Since, If-None-Match\nAdds Pragma: no-cache, Cache-Control: no-cache")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
Text("Response modifications:")
|
||||
.font(.caption.weight(.semibold))
|
||||
Text("Removes Expires, Last-Modified, ETag\nAdds Expires: 0, Cache-Control: no-cache")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("No Caching")
|
||||
}
|
||||
}
|
||||
150
UI/More/SSLProxyingListView.swift
Normal file
150
UI/More/SSLProxyingListView.swift
Normal file
@@ -0,0 +1,150 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct SSLProxyingListView: View {
|
||||
@State private var isEnabled = IPCManager.shared.isSSLProxyingEnabled
|
||||
@State private var entries: [SSLProxyingEntry] = []
|
||||
@State private var showAddInclude = false
|
||||
@State private var showAddExclude = false
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let rulesRepo = RulesRepository()
|
||||
|
||||
var includeEntries: [SSLProxyingEntry] {
|
||||
entries.filter(\.isInclude)
|
||||
}
|
||||
|
||||
var excludeEntries: [SSLProxyingEntry] {
|
||||
entries.filter { !$0.isInclude }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
Section {
|
||||
ToggleHeaderView(
|
||||
title: "SSL Proxying",
|
||||
description: "Decrypt HTTPS traffic from included domains. Excluded domains are always passed through.",
|
||||
isEnabled: $isEnabled
|
||||
)
|
||||
.onChange(of: isEnabled) { _, newValue in
|
||||
IPCManager.shared.isSSLProxyingEnabled = newValue
|
||||
IPCManager.shared.post(.configurationChanged)
|
||||
}
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
|
||||
Section("Include") {
|
||||
if includeEntries.isEmpty {
|
||||
Text("No include entries")
|
||||
.foregroundStyle(.secondary)
|
||||
.font(.subheadline)
|
||||
} else {
|
||||
ForEach(includeEntries) { entry in
|
||||
Text(entry.domainPattern)
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = includeEntries[index].id {
|
||||
try? rulesRepo.deleteSSLEntry(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section("Exclude") {
|
||||
if excludeEntries.isEmpty {
|
||||
Text("No exclude entries")
|
||||
.foregroundStyle(.secondary)
|
||||
.font(.subheadline)
|
||||
} else {
|
||||
ForEach(excludeEntries) { entry in
|
||||
Text(entry.domainPattern)
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
if let id = excludeEntries[index].id {
|
||||
try? rulesRepo.deleteSSLEntry(id: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("SSL Proxying")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .topBarTrailing) {
|
||||
Menu {
|
||||
Button("Add Include Entry") { showAddInclude = true }
|
||||
Button("Add Exclude Entry") { showAddExclude = true }
|
||||
Divider()
|
||||
Button("Clear All Rules", role: .destructive) {
|
||||
try? rulesRepo.deleteAllSSLEntries()
|
||||
}
|
||||
} label: {
|
||||
Image(systemName: "ellipsis.circle")
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddInclude) {
|
||||
DomainEntrySheet(title: "New Include Entry", isInclude: true) { pattern in
|
||||
var entry = SSLProxyingEntry(domainPattern: pattern, isInclude: true)
|
||||
try? rulesRepo.insertSSLEntry(&entry)
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddExclude) {
|
||||
DomainEntrySheet(title: "New Exclude Entry", isInclude: false) { pattern in
|
||||
var entry = SSLProxyingEntry(domainPattern: pattern, isInclude: false)
|
||||
try? rulesRepo.insertSSLEntry(&entry)
|
||||
}
|
||||
}
|
||||
.task {
|
||||
observation = rulesRepo.observeSSLEntries()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("SSL observation error: \(error)")
|
||||
} onChange: { newEntries in
|
||||
entries = newEntries
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Domain Entry Sheet
|
||||
|
||||
struct DomainEntrySheet: View {
|
||||
let title: String
|
||||
let isInclude: Bool
|
||||
let onSave: (String) -> Void
|
||||
|
||||
@State private var domainPattern = ""
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
Form {
|
||||
Section {
|
||||
TextField("Domain Pattern", text: $domainPattern)
|
||||
.textInputAutocapitalization(.never)
|
||||
.autocorrectionDisabled()
|
||||
} footer: {
|
||||
Text("Supports wildcards: * (zero or more) and ? (single character). Example: *.example.com")
|
||||
}
|
||||
}
|
||||
.navigationTitle(title)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .cancellationAction) {
|
||||
Button("Cancel") { dismiss() }
|
||||
}
|
||||
ToolbarItem(placement: .confirmationAction) {
|
||||
Button("Save") {
|
||||
onSave(domainPattern)
|
||||
dismiss()
|
||||
}
|
||||
.disabled(domainPattern.isEmpty)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
116
UI/More/SetupGuideView.swift
Normal file
116
UI/More/SetupGuideView.swift
Normal file
@@ -0,0 +1,116 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
|
||||
struct SetupGuideView: View {
|
||||
@Environment(AppState.self) private var appState
|
||||
|
||||
var isReady: Bool {
|
||||
appState.isVPNConnected && appState.isCertificateTrusted
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 24) {
|
||||
// Status Banner
|
||||
HStack {
|
||||
Image(systemName: isReady ? "checkmark.circle.fill" : "exclamationmark.triangle.fill")
|
||||
.font(.title2)
|
||||
VStack(alignment: .leading) {
|
||||
Text(isReady ? "Ready to Intercept" : "Setup Required")
|
||||
.font(.headline)
|
||||
Text(isReady ? "All systems are configured correctly" : "Complete the steps below to start")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.white.opacity(0.8))
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
.foregroundStyle(.white)
|
||||
.padding()
|
||||
.background(isReady ? Color.green : Color.orange, in: RoundedRectangle(cornerRadius: 12))
|
||||
|
||||
Text("Follow these two steps to start capturing network traffic on your device.")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
// Step 1: VPN
|
||||
stepRow(
|
||||
title: "VPN Extension Enabled",
|
||||
subtitle: appState.isVPNConnected
|
||||
? "VPN is running and capturing traffic"
|
||||
: "Tap to enable VPN",
|
||||
isComplete: appState.isVPNConnected,
|
||||
action: {
|
||||
Task { await appState.toggleVPN() }
|
||||
}
|
||||
)
|
||||
|
||||
// Step 2: Certificate
|
||||
stepRow(
|
||||
title: "Certificate Installed & Trusted",
|
||||
subtitle: appState.isCertificateTrusted
|
||||
? "HTTPS traffic can now be decrypted"
|
||||
: "Install and trust the CA certificate",
|
||||
isComplete: appState.isCertificateTrusted,
|
||||
action: {
|
||||
// TODO: Phase 3 - Open certificate installation flow
|
||||
}
|
||||
)
|
||||
|
||||
Divider()
|
||||
|
||||
// Help section
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
Text("Need Help?")
|
||||
.font(.headline)
|
||||
|
||||
HStack {
|
||||
Image(systemName: "play.rectangle.fill")
|
||||
.foregroundStyle(.red)
|
||||
Text("Watch Video Tutorial")
|
||||
Spacer()
|
||||
Image(systemName: "arrow.up.forward")
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
.padding(.vertical, 4)
|
||||
|
||||
HStack {
|
||||
Image(systemName: "book.fill")
|
||||
.foregroundStyle(.blue)
|
||||
Text("Read Documentation")
|
||||
Spacer()
|
||||
Image(systemName: "arrow.up.forward")
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
.padding(.vertical, 4)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
.navigationTitle("Setup Guide")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
}
|
||||
|
||||
private func stepRow(title: String, subtitle: String, isComplete: Bool, action: @escaping () -> Void) -> some View {
|
||||
Button(action: action) {
|
||||
HStack(spacing: 12) {
|
||||
Image(systemName: isComplete ? "checkmark.circle.fill" : "circle")
|
||||
.font(.title2)
|
||||
.foregroundStyle(isComplete ? .green : .secondary)
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text(title)
|
||||
.font(.subheadline.weight(.medium))
|
||||
.foregroundStyle(isComplete ? .green : .primary)
|
||||
Text(subtitle)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
.background(Color(.secondarySystemGroupedBackground), in: RoundedRectangle(cornerRadius: 12))
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
}
|
||||
46
UI/Pin/PinView.swift
Normal file
46
UI/Pin/PinView.swift
Normal file
@@ -0,0 +1,46 @@
|
||||
import SwiftUI
|
||||
import ProxyCore
|
||||
import GRDB
|
||||
|
||||
struct PinView: View {
|
||||
@State private var pinnedRequests: [CapturedTraffic] = []
|
||||
@State private var observation: AnyDatabaseCancellable?
|
||||
|
||||
private let trafficRepo = TrafficRepository()
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if pinnedRequests.isEmpty {
|
||||
EmptyStateView(
|
||||
icon: "pin.slash",
|
||||
title: "No Pinned Requests",
|
||||
subtitle: "Pin requests from the Home tab to save them here for quick access."
|
||||
)
|
||||
} else {
|
||||
List {
|
||||
ForEach(pinnedRequests) { request in
|
||||
NavigationLink(value: request.id) {
|
||||
TrafficRowView(traffic: request)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationDestination(for: Int64?.self) { id in
|
||||
if let id {
|
||||
RequestDetailView(trafficId: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Pin")
|
||||
.task {
|
||||
observation = trafficRepo.observePinnedTraffic()
|
||||
.start(in: DatabaseManager.shared.dbPool) { error in
|
||||
print("Pin observation error: \(error)")
|
||||
} onChange: { pinned in
|
||||
withAnimation {
|
||||
pinnedRequests = pinned
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
37
UI/SharedComponents/EmptyStateView.swift
Normal file
37
UI/SharedComponents/EmptyStateView.swift
Normal file
@@ -0,0 +1,37 @@
|
||||
import SwiftUI
|
||||
|
||||
struct EmptyStateView: View {
|
||||
let icon: String
|
||||
let title: String
|
||||
let subtitle: String
|
||||
var actionTitle: String?
|
||||
var action: (() -> Void)?
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 16) {
|
||||
Image(systemName: icon)
|
||||
.font(.system(size: 48))
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
Text(title)
|
||||
.font(.headline)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
Text(subtitle)
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.tertiary)
|
||||
.multilineTextAlignment(.center)
|
||||
|
||||
if let actionTitle, let action {
|
||||
Button(action: action) {
|
||||
Text(actionTitle)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.padding(.horizontal, 40)
|
||||
.padding(.top, 8)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
34
UI/SharedComponents/FilterChipsView.swift
Normal file
34
UI/SharedComponents/FilterChipsView.swift
Normal file
@@ -0,0 +1,34 @@
|
||||
import SwiftUI
|
||||
|
||||
struct FilterChip: Identifiable {
|
||||
let id = UUID()
|
||||
let label: String
|
||||
var isSelected: Bool = false
|
||||
}
|
||||
|
||||
struct FilterChipsView: View {
|
||||
@Binding var chips: [FilterChip]
|
||||
|
||||
var body: some View {
|
||||
ScrollView(.horizontal, showsIndicators: false) {
|
||||
HStack(spacing: 8) {
|
||||
ForEach($chips) { $chip in
|
||||
Button {
|
||||
chip.isSelected.toggle()
|
||||
} label: {
|
||||
Text(chip.label)
|
||||
.font(.caption.weight(.medium))
|
||||
.padding(.horizontal, 12)
|
||||
.padding(.vertical, 6)
|
||||
.background(
|
||||
chip.isSelected ? Color.accentColor : Color(.systemGray5),
|
||||
in: Capsule()
|
||||
)
|
||||
.foregroundStyle(chip.isSelected ? .white : .primary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.horizontal)
|
||||
}
|
||||
}
|
||||
}
|
||||
18
UI/SharedComponents/KeyValueRow.swift
Normal file
18
UI/SharedComponents/KeyValueRow.swift
Normal file
@@ -0,0 +1,18 @@
|
||||
import SwiftUI
|
||||
|
||||
struct KeyValueRow: View {
|
||||
let key: String
|
||||
let value: String
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(key)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
Text(value)
|
||||
.font(.subheadline)
|
||||
.textSelection(.enabled)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
}
|
||||
27
UI/SharedComponents/MethodBadge.swift
Normal file
27
UI/SharedComponents/MethodBadge.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
import SwiftUI
|
||||
|
||||
struct MethodBadge: View {
|
||||
let method: String
|
||||
|
||||
var color: Color {
|
||||
switch method.uppercased() {
|
||||
case "GET": .green
|
||||
case "POST": .blue
|
||||
case "PUT": .orange
|
||||
case "PATCH": .purple
|
||||
case "DELETE": .red
|
||||
case "HEAD": .gray
|
||||
case "OPTIONS": .teal
|
||||
default: .secondary
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Text(method.uppercased())
|
||||
.font(.caption2.weight(.bold))
|
||||
.foregroundStyle(color)
|
||||
.padding(.horizontal, 6)
|
||||
.padding(.vertical, 2)
|
||||
.background(color.opacity(0.12), in: RoundedRectangle(cornerRadius: 4))
|
||||
}
|
||||
}
|
||||
45
UI/SharedComponents/StatusBadge.swift
Normal file
45
UI/SharedComponents/StatusBadge.swift
Normal file
@@ -0,0 +1,45 @@
|
||||
import SwiftUI
|
||||
|
||||
struct StatusBadge: View {
|
||||
let statusCode: Int?
|
||||
|
||||
var color: Color {
|
||||
guard let code = statusCode else { return .secondary }
|
||||
switch code {
|
||||
case 200..<300: return .green
|
||||
case 300..<400: return .blue
|
||||
case 400..<500: return .yellow
|
||||
case 500..<600: return .red
|
||||
default: return .secondary
|
||||
}
|
||||
}
|
||||
|
||||
var text: String {
|
||||
guard let code = statusCode else { return "..." }
|
||||
switch code {
|
||||
case 200: return "200 OK"
|
||||
case 201: return "201 Created"
|
||||
case 204: return "204 No Content"
|
||||
case 301: return "301 Moved"
|
||||
case 302: return "302 Found"
|
||||
case 304: return "304 Not Modified"
|
||||
case 400: return "400 Bad Request"
|
||||
case 401: return "401 Unauthorized"
|
||||
case 403: return "403 Forbidden"
|
||||
case 404: return "404 Not Found"
|
||||
case 500: return "500 Server Error"
|
||||
case 502: return "502 Bad Gateway"
|
||||
case 503: return "503 Unavailable"
|
||||
default: return "\(code)"
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Text(text)
|
||||
.font(.caption2.weight(.medium))
|
||||
.foregroundStyle(color)
|
||||
.padding(.horizontal, 6)
|
||||
.padding(.vertical, 2)
|
||||
.background(color.opacity(0.12), in: RoundedRectangle(cornerRadius: 4))
|
||||
}
|
||||
}
|
||||
20
UI/SharedComponents/ToggleHeaderView.swift
Normal file
20
UI/SharedComponents/ToggleHeaderView.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
import SwiftUI
|
||||
|
||||
struct ToggleHeaderView: View {
|
||||
let title: String
|
||||
let description: String
|
||||
@Binding var isEnabled: Bool
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
Toggle(title, isOn: $isEnabled)
|
||||
.font(.headline)
|
||||
|
||||
Text(description)
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
.padding()
|
||||
.background(Color(.systemBackground))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
framework module ProxyCore {
|
||||
header "ProxyCore-Swift.h"
|
||||
requires objc
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"case-sensitive":"false","roots":[],"version":0}
|
||||
@@ -0,0 +1,5 @@
|
||||
extern const unsigned char ProxyCoreVersionString[];
|
||||
extern const double ProxyCoreVersionNumber;
|
||||
|
||||
const unsigned char ProxyCoreVersionString[] __attribute__ ((used)) = "@(#)PROGRAM:ProxyCore PROJECT:ProxyApp-1" "\n";
|
||||
const double ProxyCoreVersionNumber __attribute__ ((used)) = (double)1.;
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"" : {
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyCore-primary.dia",
|
||||
"emit-module-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyCore-primary-emit-module.d",
|
||||
"emit-module-diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyCore-primary-emit-module.dia",
|
||||
"pch" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyCore-primary-Bridging-header.pch",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyCore-primary.swiftdeps"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Database/DatabaseManager.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/BlockListEntry.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/BreakpointRule.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/CapturedTraffic.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/ComposeRequest.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/DNSSpoofRule.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/DomainGroup.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/MapLocalRule.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/SSLProxyingEntry.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Repositories/ComposeRepository.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Repositories/RulesRepository.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Repositories/TrafficRepository.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/CertificateManager.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/ConnectHandler.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/GlueHandler.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/HTTPCaptureHandler.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/MITMHandler.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/ProxyServer.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/CURLParser.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/Constants.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/IPCManager.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager~partial.swiftmodule"
|
||||
},
|
||||
"/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/WildcardMatcher.swift" : {
|
||||
"const-values" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.d",
|
||||
"diagnostics" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.dia",
|
||||
"index-unit-output-path" : "/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.o",
|
||||
"llvm-bc" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.bc",
|
||||
"object" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.o",
|
||||
"swift-dependencies" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.swiftdeps",
|
||||
"swiftmodule" : "/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher~partial.swiftmodule"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyCore_vers.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.o
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/GRDB.swift/build/Release-iphoneos/GRDB.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOCore.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOAtomics.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOConcurrencyHelpers.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/_NIOBase64.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOOpenBSD.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIODarwin.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOLinux.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOWindows.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOWASI.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/_NIODataStructures.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-collections/build/Release-iphoneos/DequeModule.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-collections/build/Release-iphoneos/InternalCollectionsUtilities.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-collections/build/Release-iphoneos/ContainersPreview.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-atomics/build/Release-iphoneos/Atomics.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-atomics/build/Release-iphoneos/_AtomicsShims.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOPosix.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOPosix.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/NIOSSL.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/CNIOBoringSSL.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/CNIOBoringSSLShims.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIO.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOEmbedded.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOTLS.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOHTTP1.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOLLHTTP.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-extras/build/Release-iphoneos/NIOExtras.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-certificates/build/Release-iphoneos/X509.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-certificates/build/Release-iphoneos/_CertificateInternals.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-asn1/build/Release-iphoneos/SwiftASN1.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/Crypto.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/_CryptoExtras.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/CCryptoBoringSSL.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/CCryptoBoringSSLShims.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/CryptoBoringWrapper.o
|
||||
@@ -0,0 +1,22 @@
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BlockListEntry.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/BreakpointRule.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CURLParser.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CapturedTraffic.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/CertificateManager.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRepository.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ComposeRequest.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ConnectHandler.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/Constants.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DNSSpoofRule.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DatabaseManager.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/DomainGroup.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/GlueHandler.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/HTTPCaptureHandler.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/IPCManager.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MITMHandler.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/MapLocalRule.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/ProxyServer.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/RulesRepository.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/SSLProxyingEntry.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/TrafficRepository.swiftconstvalues
|
||||
/Users/treyt/Desktop/code/proxy_ios/build/ProxyApp.build/Debug-iphoneos/ProxyCore.build/Objects-normal/arm64/WildcardMatcher.swiftconstvalues
|
||||
@@ -0,0 +1,22 @@
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/BlockListEntry.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/BreakpointRule.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/CURLParser.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/CapturedTraffic.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/CertificateManager.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Repositories/ComposeRepository.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/ComposeRequest.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/ConnectHandler.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/Constants.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/DNSSpoofRule.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Database/DatabaseManager.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/DomainGroup.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/GlueHandler.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/HTTPCaptureHandler.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/IPCManager.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/MITMHandler.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/MapLocalRule.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/ProxyEngine/ProxyServer.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Repositories/RulesRepository.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Models/SSLProxyingEntry.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/DataLayer/Repositories/TrafficRepository.swift
|
||||
/Users/treyt/Desktop/code/proxy_ios/ProxyCore/Sources/Shared/WildcardMatcher.swift
|
||||
@@ -0,0 +1 @@
|
||||
["AppIntent","EntityQuery","AppEntity","TransientEntity","AppEnum","AppShortcutProviding","AppShortcutsProvider","AnyResolverProviding","AppIntentsPackage","DynamicOptionsProvider","_IntentValueRepresentable","_AssistantIntentsProvider","_GenerativeFunctionExtractable","IntentValueQuery","Resolver","AppExtension","ExtensionPointDefining"]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/GRDB.swift/build/Release-iphoneos/GRDB_GRDB.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CCryptoBoringSSL.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CCryptoBoringSSLShims.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_Crypto.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CryptoBoringWrapper.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto__CryptoExtras.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/swift-nio-ssl_NIOSSL.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/swift-nio_NIOPosix.bundle/Metadata.appintents/extract.actionsdata
|
||||
@@ -0,0 +1,35 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/GRDB.swift/build/Release-iphoneos/GRDB.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-asn1/build/Release-iphoneos/SwiftASN1.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-atomics/build/Release-iphoneos/Atomics.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-atomics/build/Release-iphoneos/_AtomicsShims.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-certificates/build/Release-iphoneos/X509.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-certificates/build/Release-iphoneos/_CertificateInternals.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-collections/build/Release-iphoneos/ContainersPreview.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-collections/build/Release-iphoneos/DequeModule.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-collections/build/Release-iphoneos/InternalCollectionsUtilities.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/CCryptoBoringSSL.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/CCryptoBoringSSLShims.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/Crypto.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/CryptoBoringWrapper.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/_CryptoExtras.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-extras/build/Release-iphoneos/NIOExtras.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/CNIOBoringSSL.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/CNIOBoringSSLShims.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/NIOSSL.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOAtomics.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIODarwin.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOLLHTTP.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOLinux.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOOpenBSD.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOPosix.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOWASI.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/CNIOWindows.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIO.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOConcurrencyHelpers.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOCore.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOEmbedded.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOHTTP1.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOPosix.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/NIOTLS.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/_NIOBase64.appintents/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/_NIODataStructures.appintents/Metadata.appintents/extract.actionsdata
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
framework module ProxyCore {
|
||||
header "ProxyCore-Swift.h"
|
||||
requires objc
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/_NIODataStructures.build/Objects-normal/arm64/Heap.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/_NIODataStructures.build/Objects-normal/arm64/PriorityQueue.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/_NIODataStructures.build/Objects-normal/arm64/_TinyArray.o
|
||||
@@ -0,0 +1,291 @@
|
||||
{
|
||||
"" : {
|
||||
"const-values" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary.swiftconstvalues",
|
||||
"dependencies" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary.d",
|
||||
"diagnostics" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary.dia",
|
||||
"emit-module-dependencies" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary-emit-module.d",
|
||||
"emit-module-diagnostics" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary-emit-module.dia",
|
||||
"pch" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary-Bridging-header.pch",
|
||||
"swift-dependencies" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosix-primary.swiftdeps"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPICommon.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPICommon.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPICommon.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPICommon.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPIPosix.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIPosix.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIPosix.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIPosix.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPIWindows.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIWindows.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIWindows.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIWindows.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocket.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocket.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocket.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocket.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel+AccessibleTransport.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+AccessibleTransport.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+AccessibleTransport.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+AccessibleTransport.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel+SocketOptionProvider.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+SocketOptionProvider.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+SocketOptionProvider.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+SocketOptionProvider.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseStreamSocketChannel.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseStreamSocketChannel.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseStreamSocketChannel.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseStreamSocketChannel.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Bootstrap.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Bootstrap.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Bootstrap.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Bootstrap.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ControlMessage.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ControlMessage.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ControlMessage.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ControlMessage.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/DatagramVectorReadManager.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/DatagramVectorReadManager.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/DatagramVectorReadManager.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/DatagramVectorReadManager.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Errors+Any.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Errors+Any.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Errors+Any.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Errors+Any.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/FileDescriptor.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/FileDescriptor.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/FileDescriptor.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/FileDescriptor.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/GetaddrinfoResolver.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/GetaddrinfoResolver.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/GetaddrinfoResolver.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/GetaddrinfoResolver.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/HappyEyeballs.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/HappyEyeballs.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/HappyEyeballs.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/HappyEyeballs.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/IO.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IO.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IO.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IO.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/IntegerBitPacking.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerBitPacking.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerBitPacking.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerBitPacking.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/IntegerTypes.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerTypes.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerTypes.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerTypes.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Linux.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Linux.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Linux.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Linux.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/LinuxCPUSet.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxCPUSet.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxCPUSet.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxCPUSet.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/LinuxUring.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxUring.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxUring.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxUring.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/MultiThreadedEventLoopGroup.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/MultiThreadedEventLoopGroup.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/MultiThreadedEventLoopGroup.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/MultiThreadedEventLoopGroup.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/NIOPosixSendableMetatype.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosixSendableMetatype.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosixSendableMetatype.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosixSendableMetatype.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/NIOThreadPool.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOThreadPool.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOThreadPool.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOThreadPool.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/NonBlockingFileIO.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NonBlockingFileIO.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NonBlockingFileIO.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NonBlockingFileIO.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PendingDatagramWritesManager.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingDatagramWritesManager.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingDatagramWritesManager.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingDatagramWritesManager.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingWritesManager.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingWritesManager.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingWritesManager.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PipeChannel.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipeChannel.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipeChannel.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipeChannel.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PipePair.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipePair.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipePair.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipePair.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Pool.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Pool.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Pool.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Pool.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PosixSingletons+ConcurrencyTakeOver.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons+ConcurrencyTakeOver.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons+ConcurrencyTakeOver.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons+ConcurrencyTakeOver.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PosixSingletons.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/RawSocketBootstrap.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/RawSocketBootstrap.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/RawSocketBootstrap.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/RawSocketBootstrap.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Resolver.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Resolver.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Resolver.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Resolver.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Selectable.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Selectable.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Selectable.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Selectable.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectableChannel.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableChannel.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableChannel.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableChannel.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableEventLoop.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableEventLoop.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableEventLoop.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorEpoll.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorEpoll.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorEpoll.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorEpoll.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorGeneric.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorGeneric.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorGeneric.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorGeneric.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorKqueue.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorKqueue.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorKqueue.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorKqueue.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorUring.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorUring.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorUring.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorUring.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorWSAPoll.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorWSAPoll.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorWSAPoll.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorWSAPoll.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ServerSocket.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ServerSocket.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ServerSocket.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ServerSocket.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Socket.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Socket.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Socket.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Socket.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SocketChannel.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketChannel.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketChannel.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketChannel.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SocketProtocols.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketProtocols.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketProtocols.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketProtocols.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/StructuredConcurrencyHelpers.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/StructuredConcurrencyHelpers.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/StructuredConcurrencyHelpers.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/StructuredConcurrencyHelpers.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/System.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/System.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/System.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/System.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Thread.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Thread.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Thread.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Thread.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ThreadPosix.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadPosix.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadPosix.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadPosix.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ThreadWindows.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadWindows.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadWindows.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadWindows.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Utilities.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Utilities.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Utilities.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Utilities.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/VsockAddress.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockAddress.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockAddress.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockAddress.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/VsockChannelEvents.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockChannelEvents.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockChannelEvents.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockChannelEvents.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Windows.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Windows.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Windows.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Windows.o"
|
||||
},
|
||||
"/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/DerivedSources/resource_bundle_accessor.swift" : {
|
||||
"index-unit-output-path" : "/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/resource_bundle_accessor.o",
|
||||
"llvm-bc" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/resource_bundle_accessor.bc",
|
||||
"object" : "/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/resource_bundle_accessor.o"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
-target arm64-apple-ios12.0 -fmodules -gmodules '-fmodule-name=CNIOAtomics' -fpascal-strings -Os -DSWIFT_PACKAGE -D_GNU_SOURCE -isysroot /Applications/Xcode-26.3.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.2.sdk -g -I/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/include -I/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/CNIOAtomics/include -I/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/CNIOAtomics.build/DerivedSources-normal/arm64 -I/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/CNIOAtomics.build/DerivedSources/arm64 -I/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/CNIOAtomics.build/DerivedSources -F/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos -iframework /Applications/Xcode-26.3.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Frameworks -iframework /Applications/Xcode-26.3.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.2.sdk/Developer/Library/Frameworks -DXcode
|
||||
@@ -0,0 +1,46 @@
|
||||
import class Foundation.Bundle
|
||||
import class Foundation.ProcessInfo
|
||||
import struct Foundation.URL
|
||||
|
||||
private class BundleFinder {}
|
||||
|
||||
extension Foundation.Bundle {
|
||||
/// Returns the resource bundle associated with the current Swift module.
|
||||
static let module: Bundle = {
|
||||
let bundleName = "swift-nio_NIOPosix"
|
||||
|
||||
let overrides: [URL]
|
||||
#if DEBUG
|
||||
// The 'PACKAGE_RESOURCE_BUNDLE_PATH' name is preferred since the expected value is a path. The
|
||||
// check for 'PACKAGE_RESOURCE_BUNDLE_URL' will be removed when all clients have switched over.
|
||||
// This removal is tracked by rdar://107766372.
|
||||
if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"]
|
||||
?? ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_URL"] {
|
||||
overrides = [URL(fileURLWithPath: override)]
|
||||
} else {
|
||||
overrides = []
|
||||
}
|
||||
#else
|
||||
overrides = []
|
||||
#endif
|
||||
|
||||
let candidates = overrides + [
|
||||
// Bundle should be present here when the package is linked into an App.
|
||||
Bundle.main.resourceURL,
|
||||
|
||||
// Bundle should be present here when the package is linked into a framework.
|
||||
Bundle(for: BundleFinder.self).resourceURL,
|
||||
|
||||
// For command-line tools.
|
||||
Bundle.main.bundleURL,
|
||||
]
|
||||
|
||||
for candidate in candidates {
|
||||
let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
|
||||
if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
|
||||
return bundle
|
||||
}
|
||||
}
|
||||
fatalError("unable to find bundle named swift-nio_NIOPosix")
|
||||
}()
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-certificates/build/swift-certificates.build/Release-iphoneos/_CertificateInternals.build/Objects-normal/arm64/_CertificateInternals-primary.swiftconstvalues
|
||||
@@ -0,0 +1,81 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/DerivedSources/resource_bundle_accessor.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/AEADs/AES/GCM/AES-GCM.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/AEADs/AES/GCM/BoringSSL/AES-GCM_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/AEADs/ChachaPoly/BoringSSL/ChaChaPoly_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/AEADs/ChachaPoly/ChaChaPoly.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/AEADs/Cipher.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/AEADs/Nonces.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/ASN1.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1Any.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1BitString.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1Boolean.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1Identifier.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1Integer.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1Null.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1OctetString.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ASN1Strings.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ArraySliceBigint.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/GeneralizedTime.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/Basic\ ASN1\ Types/ObjectIdentifier.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/ECDSASignature.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/PEMDocument.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/PKCS8PrivateKey.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/SEC1PrivateKey.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/ASN1/SubjectPublicKeyInfo.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/CryptoError_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/CryptoKitErrors.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Digests/BoringSSL/Digest_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Digests/Digest.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Digests/Digests.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Digests/HashFunctions.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Digests/HashFunctions_SHA2.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/HPKE-AEAD.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/HPKE-Ciphersuite.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/HPKE-KDF.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/HPKE-KexKeyDerivation.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/HPKE-LabeledExtract.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/HPKE-Utils.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/KEM/Conformances/DHKEM.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/KEM/Conformances/HPKE-KEM-Curve25519.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/KEM/Conformances/HPKE-NIST-EC-KEMs.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Ciphersuite/KEM/HPKE-KEM.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/HPKE-Errors.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/HPKE.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Key\ Schedule/HPKE-Context.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Key\ Schedule/HPKE-KeySchedule.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/HPKE/Modes/HPKE-Modes.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Insecure/Insecure.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Insecure/Insecure_HashFunctions.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/KEM/KEM.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Key\ Agreement/BoringSSL/ECDH_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Key\ Agreement/DH.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Key\ Agreement/ECDH.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Key\ Derivation/HKDF.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Key\ Wrapping/AESWrap.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Key\ Wrapping/BoringSSL/AESWrap_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/Ed25519_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/NISTCurvesKeys_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/BoringSSL/X25519Keys_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/Curve25519.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/Ed25519Keys.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/NISTCurvesKeys.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/EC/X25519Keys.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Keys/Symmetric/SymmetricKeys.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Message\ Authentication\ Codes/HMAC/HMAC.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Message\ Authentication\ Codes/MACFunctions.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Message\ Authentication\ Codes/MessageAuthenticationCode.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/PRF/AES.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Signatures/BoringSSL/ECDSASignature_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Signatures/BoringSSL/ECDSA_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Signatures/BoringSSL/EdDSA_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Signatures/ECDSA.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Signatures/Ed25519.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Signatures/Signature.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/BoringSSL/CryptoKitErrors_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/BoringSSL/RNG_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/BoringSSL/SafeCompare_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/BoringSSL/Zeroization_boring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/PrettyBytes.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/SafeCompare.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/SecureBytes.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/Sources/Crypto/Util/Zeroization.swift
|
||||
@@ -0,0 +1,56 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/resource_bundle_accessor.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPICommon.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIPosix.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BSDSocketAPIWindows.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocket.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+AccessibleTransport.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel+SocketOptionProvider.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseSocketChannel.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/BaseStreamSocketChannel.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Bootstrap.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ControlMessage.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/DatagramVectorReadManager.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Errors+Any.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/FileDescriptor.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/GetaddrinfoResolver.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/HappyEyeballs.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IO.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerBitPacking.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/IntegerTypes.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Linux.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxCPUSet.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/LinuxUring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/MultiThreadedEventLoopGroup.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOPosixSendableMetatype.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NIOThreadPool.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/NonBlockingFileIO.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingDatagramWritesManager.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PendingWritesManager.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipeChannel.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PipePair.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Pool.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons+ConcurrencyTakeOver.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/PosixSingletons.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/RawSocketBootstrap.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Resolver.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Selectable.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableChannel.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectableEventLoop.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorEpoll.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorGeneric.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorKqueue.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorUring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SelectorWSAPoll.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ServerSocket.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Socket.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketChannel.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/SocketProtocols.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/StructuredConcurrencyHelpers.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/System.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Thread.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadPosix.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/ThreadWindows.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Utilities.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockAddress.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/VsockChannelEvents.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/Objects-normal/arm64/Windows.o
|
||||
@@ -0,0 +1 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/_NIOBase64.build/Objects-normal/arm64/_NIOBase64-primary.swiftconstvalues
|
||||
@@ -0,0 +1,4 @@
|
||||
module NIOExtras {
|
||||
header "NIOExtras-Swift.h"
|
||||
export *
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
module InternalCollectionsUtilities {
|
||||
header "InternalCollectionsUtilities-Swift.h"
|
||||
export *
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
module NIOTLS {
|
||||
header "NIOTLS-Swift.h"
|
||||
export *
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CCryptoBoringSSL.bundle/Metadata.appintents/extract.actionsdata
|
||||
@@ -0,0 +1,56 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/swift-nio.build/Release-iphoneos/NIOPosix.build/DerivedSources/resource_bundle_accessor.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPICommon.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPIPosix.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPIWindows.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocket.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel+AccessibleTransport.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel+SocketOptionProvider.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/BaseStreamSocketChannel.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Bootstrap.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ControlMessage.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/DatagramVectorReadManager.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Errors+Any.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/FileDescriptor.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/GetaddrinfoResolver.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/HappyEyeballs.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/IO.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/IntegerBitPacking.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/IntegerTypes.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Linux.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/LinuxCPUSet.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/LinuxUring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/MultiThreadedEventLoopGroup.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/NIOPosixSendableMetatype.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/NIOThreadPool.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/NonBlockingFileIO.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PendingDatagramWritesManager.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PipeChannel.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PipePair.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Pool.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PosixSingletons+ConcurrencyTakeOver.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/PosixSingletons.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/RawSocketBootstrap.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Resolver.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Selectable.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectableChannel.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorEpoll.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorGeneric.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorKqueue.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorUring.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SelectorWSAPoll.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ServerSocket.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Socket.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SocketChannel.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/SocketProtocols.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/StructuredConcurrencyHelpers.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/System.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Thread.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ThreadPosix.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/ThreadWindows.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Utilities.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/VsockAddress.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/VsockChannelEvents.swift
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/Sources/NIOPosix/Windows.swift
|
||||
@@ -0,0 +1 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/_CryptoExtras.build/Objects-normal/arm64/_CryptoExtras-primary.swiftconstvalues
|
||||
@@ -0,0 +1,4 @@
|
||||
module NIOHTTP1 {
|
||||
header "NIOHTTP1-Swift.h"
|
||||
export *
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/CryptoBoringWrapper.build/Objects-normal/arm64/CryptoBoringWrapper-primary.swiftconstvalues
|
||||
@@ -0,0 +1,8 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/GRDB.swift/build/Release-iphoneos/GRDB_GRDB.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CCryptoBoringSSL.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CCryptoBoringSSLShims.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_Crypto.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto_CryptoBoringWrapper.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/Release-iphoneos/swift-crypto__CryptoExtras.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio-ssl/build/Release-iphoneos/swift-nio-ssl_NIOSSL.bundle/Metadata.appintents/extract.actionsdata
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-nio/build/Release-iphoneos/swift-nio_NIOPosix.bundle/Metadata.appintents/extract.actionsdata
|
||||
@@ -0,0 +1,4 @@
|
||||
module Atomics {
|
||||
header "Atomics-Swift.h"
|
||||
export *
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/resource_bundle_accessor.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/AES-GCM.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/AES-GCM_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ChaChaPoly_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ChaChaPoly.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Cipher.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Nonces.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1Any.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1BitString.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1Boolean.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1Identifier.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1Integer.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1Null.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1OctetString.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ASN1Strings.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ArraySliceBigint.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/GeneralizedTime.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ObjectIdentifier.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ECDSASignature.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/PEMDocument.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/PKCS8PrivateKey.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/SEC1PrivateKey.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/SubjectPublicKeyInfo.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/CryptoError_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/CryptoKitErrors.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Digest_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Digest.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Digests.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HashFunctions.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HashFunctions_SHA2.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-AEAD.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-Ciphersuite.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-KDF.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-KexKeyDerivation.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-LabeledExtract.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-Utils.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/DHKEM.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-KEM-Curve25519.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-NIST-EC-KEMs.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-KEM.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-Errors.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-Context.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-KeySchedule.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HPKE-Modes.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Insecure.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Insecure_HashFunctions.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/KEM.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ECDH_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/DH.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ECDH.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HKDF.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/AESWrap.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/AESWrap_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Ed25519_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/NISTCurvesKeys_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/X25519Keys_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Curve25519.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Ed25519Keys.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/NISTCurvesKeys.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/X25519Keys.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/SymmetricKeys.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/HMAC.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/MACFunctions.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/MessageAuthenticationCode.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/AES.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ECDSASignature_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ECDSA_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/EdDSA_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/ECDSA.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Ed25519.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Signature.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/CryptoKitErrors_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/RNG_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/SafeCompare_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Zeroization_boring.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/PrettyBytes.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/SafeCompare.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/SecureBytes.o
|
||||
/Users/treyt/Library/Developer/Xcode/DerivedData/ProxyApp-agvpcriuwtslyidmsipcqzpuhbvu/SourcePackages/checkouts/swift-crypto/build/swift-crypto.build/Release-iphoneos/Crypto.build/Objects-normal/arm64/Zeroization.o
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user