Linux도 Swift를 사용하여 GUI를 개발하려고 합니다!【SwiftGtk】

개시하다


VALU Advent Calendar 2018, 18일째 글!
오늘은 Swift가 개원화되었고, Swift는 Linux에서도 오랫동안 운행되기 시작했다.
아무리 스wift를 사용해 글을 쓰더라도 애플리케이션 개발자로서 코코아 UI에 익숙한 사람들은 CLI만으로 실행할 수 있는 스wift에 부족함을 느끼는 이들이 분명히 있겠죠.
따라서 이번에는 리눅스에서도 실행할 수 있는 스위프트 GUIGtk+의 스위프트 라이브러리TomasLinhart/SwiftGtk를 소개한다.

환경 건설


  • Ubuntu 18.04.1 LTS on VirtualBox ver 5.2.22 r126460
  • Swift 4.2.1
  • 초기화된 Ubuntu에 Swift 4.2.1을 삽입합니다.
    Terminal
    $ sudo apt install -y wget clang libpython2.7 libxml2 curl libbsd-dev
    $ wget https://swift.org/builds/swift-4.2.1-release/ubuntu1804/swift-4.2.1-$ RELEASE/swift-4.2.1-RELEASE-ubuntu18.04.tar.gz
    $ tar -zxvf swift-4.2.1-RELEASE-ubuntu18.04.tar.gz
    $ sudo mv swift-4.2.1-RELEASE-ubuntu18.04 /usr/local/swift
    $ echo 'export PATH="/usr/local/swift/usr/bin:$PATH"' >> ~/.bash_profile
    $ source ~/.bash_profile
    
    이상 swift -v에서'swift-4.2.1-REASE'의 문자를 확인하면 됩니다.

    Gtk 설치


    Gtk는 GIMP를 위해 개발한 멀티플랫폼 GUI 툴세트로, GNOME를 필두로 여러 가지 부분.에서 사용된다.
    설치는 다음과 같습니다.
    Terminal
    sudo apt install -y libgtk-3-dev
    

    Package.swift 편집


    편집(좋아)Package.swift.swift의 의존성을 해결하기 위해 가져오기vim.
    Terminal
    $ sudo apt install -y vim git
    
    Swift Package Manager로 프로젝트를 만듭니다.
    Terminal
    $ mkdir test && cd $_
    $ swift package init --type executable
    
    $ vi Package.swift
    
    이어서 편집git.추가해야 할 사항Package.swift이 있으면 추가합니다.
    Package.swift
    // swift-tools-version:4.2
    // The swift-tools-version declares the minimum version of Swift required to build this package.
    
    import PackageDescription
    
    let package = Package(
        name: "test",
        dependencies: [
            // Dependencies declare other packages that this package depends on.
            // .package(url: /* package url */, from: "1.0.0"),
            .package(url: "https://github.com/TomasLinhart/SwiftGtk", "0.3.1" ..< "0.4.0"),
        ],
        targets: [
            // Targets are the basic building blocks of a package. A target can define a module or a test suite.
            // Targets can depend on other targets in this package, and on products in packages which this package depends on.
            .target(
                name: "test",
                dependencies: ["SwiftGtk"]),
            .testTarget(
                name: "testTests",
                dependencies: ["test"]),
        ]
    )
    

    main.swift 편집


    https://github.com/TomasLinhart/SwiftGtk#demo.
    main.swift
    import SwiftGtk
    
    let app = Application(applicationId: "com.example.application")
    app.run { window in
        window.title = "Hello World"
        window.defaultSize = Size(width: 400, height: 400)
        window.resizable = true
    
        let button = Button(label: "Press Me")
        button.clicked = { _ in
            let newWindow = Window(windowType: .topLevel)
            newWindow.title = "Just a window"
            newWindow.defaultSize = Size(width: 200, height: 200)
            let labelPressed = Label(text: "Oh, you pressed the button.")
            newWindow.add(labelPressed)
    
            newWindow.showAll()
        }
    
        window.add(button)
    }
    
    뒷면에서 연결 오류를 볼 수 있으며 Swift에서 구축하고 실행한 후 다음과 같다.

    주의


    이번에 Swift에서 사용한TomasLinhart/SwiftGtkMIT license 배포하고 다른 한편GTK+ 자체는
    GTK+ is licensed under the GNU LGPL 2.1
    LGPL 아래에 게시되므로 주의가 필요합니다.

    올해의 총결산


    VALU Advent Calendar 2018에서 스위프트의 매력을 전했다.저도 RxSwift와 디자인에 관한 이슈를 좋아하고 물리적 컴퓨팅과 코코아를 제외한 GUI 개발 등 조금 이상한 사용법을 소개했다.
    독자들이 조금이나마 관심을 가질 수 있는 계기를 접해 스위프트의 매력을 전달했으면 한다.
    올해로 딱 2주일이 됐는데 현재와 내년 이후에는 VALU의 앱이 계속 진화할 것이니 많은 응원 부탁드립니다.

    인용하다

  • Swift for Linux and graphical interface?
  • What is GTK+, and how can I use it?
  • TomasLinhart/SwiftGtk
  • Ubuntu 18.04.1 LTS
  • Swift Package Manager
  • 좋은 웹페이지 즐겨찾기