From fef1841fee4a7da1fb5e47f6500ea6b5672bee11 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 21 Dec 2025 01:47:52 +0100 Subject: [PATCH] build: update iOS lint scripts --- apps/ios/Sources/Info.plist | 10 ++-- apps/ios/SwiftSources.input.xcfilelist | 56 +++++++++++++++++++ apps/ios/project.yml | 13 ++++- .../ClawdisChatUI/ChatMessageViews.swift | 34 +++++------ 4 files changed, 88 insertions(+), 25 deletions(-) create mode 100644 apps/ios/SwiftSources.input.xcfilelist diff --git a/apps/ios/Sources/Info.plist b/apps/ios/Sources/Info.plist index b389837a6..eac99a93e 100644 --- a/apps/ios/Sources/Info.plist +++ b/apps/ios/Sources/Info.plist @@ -22,6 +22,11 @@ 1.0 CFBundleVersion 1 + NSAppTransportSecurity + + NSAllowsArbitraryLoadsInWebContent + + NSBonjourServices _clawdis-bridge._tcp @@ -30,11 +35,6 @@ Clawdis can capture photos or short video clips when requested via the bridge. NSLocalNetworkUsageDescription Clawdis discovers and connects to your Clawdis bridge on the local network. - NSAppTransportSecurity - - NSAllowsArbitraryLoadsInWebContent - - NSMicrophoneUsageDescription Clawdis needs microphone access for voice wake. NSSpeechRecognitionUsageDescription diff --git a/apps/ios/SwiftSources.input.xcfilelist b/apps/ios/SwiftSources.input.xcfilelist new file mode 100644 index 000000000..e9ebed342 --- /dev/null +++ b/apps/ios/SwiftSources.input.xcfilelist @@ -0,0 +1,56 @@ +Sources/Bridge/BridgeClient.swift +Sources/Bridge/BridgeConnectionController.swift +Sources/Bridge/BridgeDiscoveryDebugLogView.swift +Sources/Bridge/BridgeDiscoveryModel.swift +Sources/Bridge/BridgeEndpointID.swift +Sources/Bridge/BridgeSession.swift +Sources/Bridge/BridgeSettingsStore.swift +Sources/Bridge/KeychainStore.swift +Sources/Camera/CameraController.swift +Sources/Chat/ChatSheet.swift +Sources/Chat/IOSBridgeChatTransport.swift +Sources/ClawdisApp.swift +Sources/Model/NodeAppModel.swift +Sources/RootCanvas.swift +Sources/RootTabs.swift +Sources/Screen/ScreenController.swift +Sources/Screen/ScreenRecordService.swift +Sources/Screen/ScreenTab.swift +Sources/Screen/ScreenWebView.swift +Sources/Settings/SettingsNetworkingHelpers.swift +Sources/Settings/SettingsTab.swift +Sources/Settings/VoiceWakeWordsSettingsView.swift +Sources/Status/StatusPill.swift +Sources/Status/VoiceWakeToast.swift +Sources/Voice/VoiceTab.swift +Sources/Voice/VoiceWakeManager.swift +Sources/Voice/VoiceWakePreferences.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatComposer.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatMarkdownSplitter.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatMessageViews.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatModels.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatPayloadDecoding.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatSessions.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatSheets.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatTheme.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatTransport.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatView.swift +../shared/ClawdisKit/Sources/ClawdisChatUI/ChatViewModel.swift +../shared/ClawdisKit/Sources/ClawdisKit/AnyCodable.swift +../shared/ClawdisKit/Sources/ClawdisKit/BonjourEscapes.swift +../shared/ClawdisKit/Sources/ClawdisKit/BonjourTypes.swift +../shared/ClawdisKit/Sources/ClawdisKit/BridgeFrames.swift +../shared/ClawdisKit/Sources/ClawdisKit/CameraCommands.swift +../shared/ClawdisKit/Sources/ClawdisKit/CanvasA2UIAction.swift +../shared/ClawdisKit/Sources/ClawdisKit/CanvasA2UICommands.swift +../shared/ClawdisKit/Sources/ClawdisKit/CanvasA2UIJSONL.swift +../shared/ClawdisKit/Sources/ClawdisKit/CanvasCommandParams.swift +../shared/ClawdisKit/Sources/ClawdisKit/CanvasCommands.swift +../shared/ClawdisKit/Sources/ClawdisKit/Capabilities.swift +../shared/ClawdisKit/Sources/ClawdisKit/ClawdisKitResources.swift +../shared/ClawdisKit/Sources/ClawdisKit/DeepLinks.swift +../shared/ClawdisKit/Sources/ClawdisKit/JPEGTranscoder.swift +../shared/ClawdisKit/Sources/ClawdisKit/NodeError.swift +../shared/ClawdisKit/Sources/ClawdisKit/ScreenCommands.swift +../shared/ClawdisKit/Sources/ClawdisKit/StoragePaths.swift +../shared/ClawdisKit/Sources/ClawdisKit/SystemCommands.swift diff --git a/apps/ios/project.yml b/apps/ios/project.yml index 437c9b3d9..acb594f93 100644 --- a/apps/ios/project.yml +++ b/apps/ios/project.yml @@ -33,24 +33,29 @@ targets: preBuildScripts: - name: SwiftFormat (lint) basedOnDependencyAnalysis: false + inputFileLists: + - $(SRCROOT)/SwiftSources.input.xcfilelist script: | set -euo pipefail + export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH" if ! command -v swiftformat >/dev/null 2>&1; then echo "error: swiftformat not found (brew install swiftformat)" >&2 exit 1 fi swiftformat --lint --config "$SRCROOT/../../.swiftformat" \ - "$SRCROOT/Sources" \ - "$SRCROOT/../shared/ClawdisKit/Sources" + --filelist "$SRCROOT/SwiftSources.input.xcfilelist" - name: SwiftLint basedOnDependencyAnalysis: false + inputFileLists: + - $(SRCROOT)/SwiftSources.input.xcfilelist script: | set -euo pipefail + export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH" if ! command -v swiftlint >/dev/null 2>&1; then echo "error: swiftlint not found (brew install swiftlint)" >&2 exit 1 fi - swiftlint lint --config "$SRCROOT/.swiftlint.yml" + swiftlint lint --config "$SRCROOT/.swiftlint.yml" --use-script-input-file-lists settings: base: PRODUCT_BUNDLE_IDENTIFIER: com.steipete.clawdis.ios @@ -66,6 +71,8 @@ targets: UIBackgroundModes: - audio NSLocalNetworkUsageDescription: Clawdis discovers and connects to your Clawdis bridge on the local network. + NSAppTransportSecurity: + NSAllowsArbitraryLoadsInWebContent: true NSBonjourServices: - _clawdis-bridge._tcp NSCameraUsageDescription: Clawdis can capture photos or short video clips when requested via the bridge. diff --git a/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatMessageViews.swift b/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatMessageViews.swift index e56d55b19..371961451 100644 --- a/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatMessageViews.swift +++ b/apps/shared/ClawdisKit/Sources/ClawdisChatUI/ChatMessageViews.swift @@ -27,21 +27,21 @@ private struct ChatBubbleShape: InsettableShape { } func path(in rect: CGRect) -> Path { - let rect = rect.insetBy(dx: insetAmount, dy: insetAmount) - switch tail { + let rect = rect.insetBy(dx: self.insetAmount, dy: self.insetAmount) + switch self.tail { case .left: - return self.leftTailPath(in: rect, radius: cornerRadius) + return self.leftTailPath(in: rect, radius: self.cornerRadius) case .right: - return self.rightTailPath(in: rect, radius: cornerRadius) + return self.rightTailPath(in: rect, radius: self.cornerRadius) case .none: - return Path(roundedRect: rect, cornerRadius: cornerRadius) + return Path(roundedRect: rect, cornerRadius: self.cornerRadius) } } private func rightTailPath(in rect: CGRect, radius r: CGFloat) -> Path { var path = Path() let bubbleMinX = rect.minX - let bubbleMaxX = rect.maxX - tailWidth + let bubbleMaxX = rect.maxX - self.tailWidth let bubbleMinY = rect.minY let bubbleMaxY = rect.maxY @@ -53,7 +53,7 @@ private struct ChatBubbleShape: InsettableShape { let baseTop = CGPoint(x: bubbleMaxX, y: baseTopY) let baseBottom = CGPoint(x: bubbleMaxX, y: baseBottomY) - let tip = CGPoint(x: bubbleMaxX + tailWidth, y: midY) + let tip = CGPoint(x: bubbleMaxX + self.tailWidth, y: midY) path.move(to: CGPoint(x: bubbleMinX + r, y: bubbleMinY)) path.addLine(to: CGPoint(x: bubbleMaxX - r, y: bubbleMinY)) @@ -63,12 +63,12 @@ private struct ChatBubbleShape: InsettableShape { path.addLine(to: baseTop) path.addCurve( to: tip, - control1: CGPoint(x: bubbleMaxX + tailWidth * 0.2, y: baseTopY + baseH * 0.05), - control2: CGPoint(x: bubbleMaxX + tailWidth * 0.95, y: midY - baseH * 0.15)) + control1: CGPoint(x: bubbleMaxX + self.tailWidth * 0.2, y: baseTopY + baseH * 0.05), + control2: CGPoint(x: bubbleMaxX + self.tailWidth * 0.95, y: midY - baseH * 0.15)) path.addCurve( to: baseBottom, - control1: CGPoint(x: bubbleMaxX + tailWidth * 0.95, y: midY + baseH * 0.15), - control2: CGPoint(x: bubbleMaxX + tailWidth * 0.2, y: baseBottomY - baseH * 0.05)) + control1: CGPoint(x: bubbleMaxX + self.tailWidth * 0.95, y: midY + baseH * 0.15), + control2: CGPoint(x: bubbleMaxX + self.tailWidth * 0.2, y: baseBottomY - baseH * 0.05)) path.addQuadCurve( to: CGPoint(x: bubbleMaxX - r, y: bubbleMaxY), control: CGPoint(x: bubbleMaxX, y: bubbleMaxY)) @@ -86,7 +86,7 @@ private struct ChatBubbleShape: InsettableShape { private func leftTailPath(in rect: CGRect, radius r: CGFloat) -> Path { var path = Path() - let bubbleMinX = rect.minX + tailWidth + let bubbleMinX = rect.minX + self.tailWidth let bubbleMaxX = rect.maxX let bubbleMinY = rect.minY let bubbleMaxY = rect.maxY @@ -99,7 +99,7 @@ private struct ChatBubbleShape: InsettableShape { let baseTop = CGPoint(x: bubbleMinX, y: baseTopY) let baseBottom = CGPoint(x: bubbleMinX, y: baseBottomY) - let tip = CGPoint(x: bubbleMinX - tailWidth, y: midY) + let tip = CGPoint(x: bubbleMinX - self.tailWidth, y: midY) path.move(to: CGPoint(x: bubbleMinX + r, y: bubbleMinY)) path.addLine(to: CGPoint(x: bubbleMaxX - r, y: bubbleMinY)) @@ -117,12 +117,12 @@ private struct ChatBubbleShape: InsettableShape { path.addLine(to: baseBottom) path.addCurve( to: tip, - control1: CGPoint(x: bubbleMinX - tailWidth * 0.2, y: baseBottomY - baseH * 0.05), - control2: CGPoint(x: bubbleMinX - tailWidth * 0.95, y: midY + baseH * 0.15)) + control1: CGPoint(x: bubbleMinX - self.tailWidth * 0.2, y: baseBottomY - baseH * 0.05), + control2: CGPoint(x: bubbleMinX - self.tailWidth * 0.95, y: midY + baseH * 0.15)) path.addCurve( to: baseTop, - control1: CGPoint(x: bubbleMinX - tailWidth * 0.95, y: midY - baseH * 0.15), - control2: CGPoint(x: bubbleMinX - tailWidth * 0.2, y: baseTopY + baseH * 0.05)) + control1: CGPoint(x: bubbleMinX - self.tailWidth * 0.95, y: midY - baseH * 0.15), + control2: CGPoint(x: bubbleMinX - self.tailWidth * 0.2, y: baseTopY + baseH * 0.05)) path.addLine(to: CGPoint(x: bubbleMinX, y: bubbleMinY + r)) path.addQuadCurve( to: CGPoint(x: bubbleMinX + r, y: bubbleMinY),