Fix all SwiftLint violations across codebase

Resolves 130+ violations including deployment target checks, code style issues, and formatting inconsistencies. Adds SwiftLint disable comments for compiler-required availability checks while maintaining deployment target compliance.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Arkadiusz Fal
2025-11-09 17:56:15 +01:00
parent 4840c9a05f
commit be4e1adb9b
58 changed files with 257 additions and 303 deletions

View File

@@ -114,6 +114,7 @@ import SwiftUI
func setupController() {
controller.delegate = PlayerModel.shared.appleAVPlayerViewControllerDelegate
controller.allowsPictureInPicturePlayback = true
// swiftlint:disable:next deployment_target
if #available(iOS 14.2, *) {
controller.canStartPictureInPictureAutomaticallyFromInline = true
}

View File

@@ -7,6 +7,7 @@ struct ControlBackgroundModifier: ViewModifier {
func body(content: Content) -> some View {
if enabled {
// swiftlint:disable:next deployment_target
if #available(iOS 15, macOS 12, *) {
content
.background(.thinMaterial)

View File

@@ -3,6 +3,7 @@ import SwiftUI
extension Backport where Content: View {
@ViewBuilder func playbackSettingsPresentationDetents() -> some View {
// swiftlint:disable:next deployment_target
if #available(iOS 16.0, macOS 13.0, tvOS 16.0, *) {
content
.presentationDetents([.height(400), .large])

View File

@@ -12,10 +12,6 @@ import Foundation
wantsLayer = true
}}
override init(frame frameRect: CGRect) {
super.init(frame: frameRect)
}
override func makeBackingLayer() -> CALayer {
player.avPlayerBackend.playerLayer
}
@@ -28,12 +24,13 @@ import Foundation
final class PlayerLayerView: UIView {
var player: PlayerModel { .shared }
private var layerAdded = false
// swiftlint:disable:next unneeded_override
override init(frame: CGRect) {
super.init(frame: frame)
}
private var layerAdded = false
@available(*, unavailable)
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")

View File

@@ -7,7 +7,7 @@ import SwiftUI
struct CommentView: View {
let comment: Comment
@Binding var repliesID: Comment.ID?
var availableWidth: CGFloat
var availableWidth: Double
@State private var subscribed = false
@@ -228,27 +228,20 @@ struct CommentView: View {
private var commentText: some View {
Group {
let rawText = comment.text
if #available(iOS 15.0, macOS 12.0, *) {
#if os(iOS)
ActiveLabelCommentRepresentable(
text: rawText,
availableWidth: availableWidth
)
#elseif os(macOS)
Text(rawText)
.font(.system(size: 14))
.lineSpacing(3)
.fixedSize(horizontal: false, vertical: true)
.textSelection(.enabled)
#else
Text(comment.text)
#endif
} else {
#if os(iOS)
ActiveLabelCommentRepresentable(
text: rawText,
availableWidth: availableWidth
)
#elseif os(macOS)
Text(rawText)
.font(.system(size: 15))
.font(.system(size: 14))
.lineSpacing(3)
.fixedSize(horizontal: false, vertical: true)
}
.textSelection(.enabled)
#else
Text(comment.text)
#endif
}
}
@@ -263,7 +256,7 @@ struct CommentView: View {
#if os(iOS)
struct ActiveLabelCommentRepresentable: UIViewRepresentable {
var text: String
var availableWidth: CGFloat
var availableWidth: Double
@State private var label = ActiveLabel()

View File

@@ -38,6 +38,7 @@ struct CommentsView: View {
struct CommentsView_Previews: PreviewProvider {
static var previews: some View {
// swiftlint:disable:next deployment_target
if #available(iOS 15.0, macOS 12.0, tvOS 15.0, *) {
CommentsView()
.previewInterfaceOrientation(.landscapeRight)

View File

@@ -80,14 +80,16 @@ struct InspectorView: View {
.foregroundColor(.secondary)
Spacer()
let value = Text(value).lineLimit(1)
if #available(iOS 15.0, macOS 12.0, *) {
#if !os(tvOS)
// swiftlint:disable:next deployment_target
if #available(iOS 15.0, macOS 12.0, *) {
value.textSelection(.enabled)
} else {
value
}
#else
value
#if !os(tvOS)
.textSelection(.enabled)
#endif
} else {
value
}
#endif
}
.font(.caption)
}

View File

@@ -58,28 +58,19 @@ struct VideoDescription: View {
@ViewBuilder var textDescription: some View {
#if canImport(AppKit)
Group {
if #available(macOS 12, *) {
DescriptionWithLinks(description: description, detailsSize: detailsSize)
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(expand ? 500 : collapsedLinesDescription)
.textSelection(.enabled)
} else {
Text(description)
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(expand ? 500 : collapsedLinesDescription)
}
}
.multilineTextAlignment(.leading)
.font(.system(size: 14))
.lineSpacing(3)
.allowsHitTesting(expand)
DescriptionWithLinks(description: description, detailsSize: detailsSize)
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(expand ? 500 : collapsedLinesDescription)
.textSelection(.enabled)
.multilineTextAlignment(.leading)
.font(.system(size: 14))
.lineSpacing(3)
.allowsHitTesting(expand)
#endif
}
// If possibe convert URLs to clickable links
#if canImport(AppKit)
@available(macOS 12, *)
struct DescriptionWithLinks: View {
let description: String
let detailsSize: CGSize?

View File

@@ -49,6 +49,7 @@ struct VideoDetails: View {
.padding(.trailing, 5)
// TODO: when setting tvOS minimum to 16, the platform modifier can be removed
#if !os(tvOS)
.accessibilityAddTraits(.isButton)
.simultaneousGesture(
TapGesture() // Ensures the button tap is recognized
)
@@ -63,11 +64,11 @@ struct VideoDetails: View {
.lineLimit(1)
// TODO: when setting tvOS minimum to 16, the platform modifier can be removed
#if !os(tvOS)
.accessibilityAddTraits(.isButton)
.onTapGesture {
guard let channel = video?.channel else { return }
NavigationModel.shared.openChannel(channel, navigationStyle: .sidebar)
}
.accessibilityAddTraits(.isButton)
#endif
} else if model.videoBeingOpened != nil {
Text("Yattee")