FrameLayoutKit Swift and Platform Version Support Requirements

FrameLayoutKit supports iOS 9.0+, tvOS 9.0+, and requires Swift 5.0 or later to compile, though the library requires iOS 11.0+ at runtime for full functionality.

FrameLayoutKit is a Swift-based layout library hosted at kennic/framelayoutkit that simplifies iOS and tvOS interface construction using declarative stack-based layouts. Understanding the FrameLayoutKit Swift and platform version requirements ensures your project meets the necessary deployment targets and toolchain specifications for successful integration.

Minimum Platform Deployment Targets

According to the Package.swift manifest at line 8, FrameLayoutKit declares minimum deployment targets of iOS 9.0 and tvOS 9.0. These declarations allow the Swift Package Manager to resolve dependencies for projects targeting these legacy versions.

However, the README.md documentation at lines 89-90 states that the library requires iOS 11.0+ at runtime. This distinction means that while the package will install on projects with iOS 9 or 10 deployment targets, the actual layout functionality requires iOS 11.0 or later to execute properly. You should configure your Xcode project with a minimum deployment target of iOS 11.0 to avoid runtime issues.

Swift Language Version Requirements

The Package.swift file at line 20 specifies Swift 5 as the required language version using the .v5 identifier in the swiftLanguageVersions array. This constraint means FrameLayoutKit requires Swift 5.0 or later to compile successfully.

The library leverages modern Swift 5 features including:

  • Operator overloading for the + operator used to add subviews to layout containers
  • Trailing closure syntax and @resultBuilder-like patterns in the DSL-style API
  • Method chaining via self-returning configuration methods on VStackLayout, HStackLayout, and ZStackLayout classes

These language features are unavailable in Swift 4.x or earlier, making Swift 5 a hard requirement.

Source Files Defining Compatibility

The following key source files establish and enforce the version constraints:

Practical Implementation Examples

The following code examples demonstrate FrameLayoutKit usage on supported platforms and Swift versions.

Vertical Stack Layout (iOS 11+, Swift 5)

import FrameLayoutKit
import UIKit

class SampleViewController: UIViewController {
    private let titleLabel = UILabel()
    private let subtitleLabel = UILabel()
    private let actionButton = UIButton(type: .system)

    private lazy var vStack: VStackLayout = {
        let stack = VStackLayout()
        stack.spacing = 12
        stack.padding(top: 20, left: 20, bottom: 20, right: 20)

        // Add sub‑views using the `+` operator
        stack + titleLabel
        stack + subtitleLabel
        stack + actionButton

        // Configure sub‑views
        titleLabel.text = "Welcome"
        subtitleLabel.text = "Frame Layout Kit Demo"
        actionButton.setTitle("Tap Me", for: .normal)

        return stack
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .systemBackground
        view.addSubview(vStack)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        // Layout the stack to fill the whole view
        vStack.frame = view.bounds
    }
}

Chainable API Configuration (iOS 9+, Swift 5)

let hStack = HStackLayout()
    .spacing(8)
    .distribution(.center)
    .padding(top: 10, left: 10, bottom: 10, right: 10)
    .debug(true)          // visual debug overlay

hStack + UIImageView(image: UIImage(named: "icon"))
hStack + UILabel().also { $0.text = "Hello" }   // `also` is a helper to configure inline

DSL-Style Layout Syntax

let dslStack = VStackView {
    UILabel().also { $0.text = "Header" }
    SpaceItem(16)
    HStackView {
        UIImageView(image: UIImage(named: "avatar"))
        FlexibleSpace()
        UIButton(type: .system).also { $0.setTitle("Edit", for: .normal) }
    }
}

These snippets compile on any iOS 9+ or tvOS 9+ target using Xcode 12 or later with Swift 5.

Summary

  • FrameLayoutKit requires Swift 5.0 or later as defined in Package.swift line 20
  • iOS 9.0+ and tvOS 9.0+ are declared as minimum deployment targets in the package manifest at line 8
  • Runtime functionality requires iOS 11.0 or later according to README.md lines 89-90
  • The library uses modern Swift features including operator overloading and chainable APIs available only in Swift 5+
  • Core layout classes including VStackLayout, HStackLayout, and ZStackLayout are implemented in StackFrameLayout.swift

Frequently Asked Questions

Does FrameLayoutKit support iOS versions earlier than 11.0?

While the Package.swift manifest declares iOS 9.0 as the minimum deployment target, the README documentation explicitly states that iOS 11.0+ is required at runtime. You should target iOS 11.0 or later in your project to ensure full layout functionality.

What version of Xcode is required to build FrameLayoutKit?

You need Xcode 12 or later to compile FrameLayoutKit because it requires the Swift 5.0 toolchain. Xcode 12 introduced the Swift 5 compiler that supports the library's syntax features including the also helper and result builder-style DSL patterns.

Is FrameLayoutKit compatible with tvOS applications?

Yes, FrameLayoutKit supports tvOS 9.0+ according to the Package.swift manifest, making it suitable for Apple TV interface development. The same Swift 5 requirements apply to tvOS targets as iOS targets, and the layout classes work identically on both platforms.

Can I use FrameLayoutKit in a SwiftUI project?

FrameLayoutKit is a UIKit-based layout library designed for UIView hierarchies. While you can integrate UIKit views into SwiftUI using UIViewRepresentable, FrameLayoutKit does not provide native SwiftUI views or modifiers, and requires iOS 11.0+ UIKit features to function.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →