GN⁺: Swift로 GNOME 앱 개발하기
(swift.org)- Swift는 깔끔한 문법, 정적 타이핑, 코드 작성을 용이하게 하는 특별한 기능 덕분에 사용자 인터페이스를 만드는 데 적합
- Adwaita for Swift는 이러한 Swift의 기능을 활용하여 GNOME 플랫폼용 애플리케이션 개발을 위한 직관적인 인터페이스를 제공
- GNOME은 리눅스용으로 인기 있는 오픈 소스 데스크톱 환경으로, 단순함과 접근성에 중점을 둠
코드 예시
- Adwaita for Swift를 사용한 코드 예시에서는
Counter
라는 뷰를 정의하여 창 내부의 사용자 인터페이스 부분을 표시 - 뷰는 다른 뷰 내에 중첩되거나 창의 자식으로 추가될 수 있으며, 뷰 계층 내 위치에 따라 외부에서 내용을 수정할 수 있음
- 이를 통해 다양한 결과를 생성하기 위해 뷰를 조합하는 것이 더 쉬워짐
동기
- Swift를 사용하여 GNOME 앱을 작성할 수 있게 하기 위한 것
- 기존의 libadwaita와 GTK 바인딩은 명령어 시리즈를 사용하여 사용자 인터페이스를 구축하는 명령형 코딩 스타일을 따름
- Adwaita for Swift는 데이터 중심으로 구축되어 있어, 예를 들어 버튼을 눌러
count
변수를 변경하면 사용자 인터페이스가 자동으로 업데이트됨
사용의 용이성
- 전통적인 바인딩은 값이 변경될 때마다 위젯이 내용을 업데이트하도록 객체에 함수를 호출해야 함
- Adwaita for Swift는 저장해야 할 변수에 고유 식별자를 추가하기만 하면 나머지를 처리함
가독성
- 데이터 중심 접근 방식은 가독성에 긍정적인 영향을 줌
- 사용자 인터페이스 자체의 선언적 정의로 인해, 결과를 얻기 위한 방법보다 앱의 모양과 행동에 집중할 수 있음
크로스 플랫폼 앱 개발
- Adwaita for Swift는 Linux, macOS, Windows에서 단일 코드베이스로 실행되는 앱을 작성할 수 있게 함
- SwiftUI 앱과 GNOME 앱 간에 백엔드 Swift 코드를 공유할 수 있음
- Swift를 사용하여 새로운 GNOME 앱을 만들 수 있으며, 훌륭한 코드 가독성과 메모리 안전성을 달성할 수 있음
앱 출시
- Adwaita for Swift는 Flathub와 잘 작동하여, 데스크톱 리눅스용 앱의 설치와 출시를 단순화함
- Swift 5를 위한 Freedesktop SDK 확장과 Swift Package Manager 종속성을 Flatpak 소스로 변환하는 도구가 있음
GN⁺의 의견
- Swift와 GNOME의 결합은 개발자들에게 새로운 플랫폼에서의 앱 개발 기회를 제공하며, 특히 Swift의 강력한 언어 기능과 GNOME의 사용자 친화적인 환경이 결합되어 효율적인 개발 경험을 가능하게 함.
- 이 기사는 리눅스 데스크톱 환경에 대한 새로운 접근 방식을 제시하며, 기존의 개발 방식에 비해 선언적 스타일을 통한 개발의 편의성과 가독성을 강조함.
- 크로스 플랫폼 개발의 장점을 강조하며, 다양한 운영 체제에서 동일한 사용자 경험을 제공하는 것의 중요성을 부각함
- 기술적인 배경 지식으로는, Swift의 정적 타이핑과 메모리 안전성은 앱의 성능과 안정성을 높이는 데 기여할 수 있음
- 비판적인 시각에서 볼 때, GNOME 환경이 아닌 다른 데스크톱 환경에서의 호환성 문제나 성능 이슈가 발생할 가능성을 고려해야 함
Hacker News 의견
-
SwiftUI와 유사한 래퍼에 대한 논의
- SwiftUI와 유사한 선언적 래퍼를 제공하는 접근 방식에 대해 언급함. Gnome 기능을 위한 SwiftUI 스타일의 래퍼를 제공하고자 함이 핵심 전제임.
- SwiftUI 자체는 적절한 스레드에서 처리/업데이트를 수행하고 데이터 바인딩을 올바르게 하는 것과 관련하여 성장통을 겪고 있음.
- swift.org 또는 Apple의 블로그 글들은 대체로 잘 동작하는 경로를 보여주는 작은 데모에 불과함. 새로운 프레임워크나 플랫폼을 논할 때, 저자들이 주요 이슈를 이해하고 해결하며 개발을 지속할 것이라는 더 많은 증거를 보고 싶어함.
- 크로스플랫폼 UI 프레임워크는 빠르게 복잡해지며, Flutter나 Java/Eclipse 등과 같이 사용자나 클라이언트에게 장애물이 될 수 있는 장기적인 문제들을 가지고 있음.
- Swift의 경우, 여러 가지 동시성 모델과 Apple 플랫폼과 Linux에서의 다른 동작(공식적으로 UI가 테스트되지 않음)으로 인해 도움이 되지 않음.
-
다른 프로젝트와 도구들에 대한 언급
- SwiftUI와 유사한 래퍼, Tokamak, 그리고 내장형 사용 사례를 위한 FlutterSwift에 대한 링크를 제공함.
-
개인적인 프로젝트 경험 공유
- Vala와 gtk4를 사용하여 작은 사이드 프로젝트를 작성한 경험을 공유함.
- Blueprint의 포맷을 좋아했지만, 좀 더 고급 기능을 수행하는 방법에 대한 문서 부족으로 어려움을 겪음.
- Vala 언어를 매우 좋아하지만, 모든 로직과 모델을 Vala로 작성한 다음, UI에 이 Swift 라이브러리를 사용하는 것이 좋을 것이라고 생각함.
-
과거의 경험과 비교
- 약 20년 전 Mono를 사용하여 C#으로 Gnome 앱을 작성했던 경험과 유사함을 느낌.
-
Mac에서의 실행 문제
- Mac에서 실행을 시도했지만, adwaita.h가 누락된 문제를 겪음.
-
개인적인 "꿈의 프레임워크"에 대한 의견
- SwiftUI와 같은 오픈 소스이며 GTK4를 타겟팅하는 것이 꿈의 크로스플랫폼 데스크톱 UI 프레임워크에 가까움.
- Swift 문법은 익숙해지는 데 시간이 걸리지만, 일단 모든 개념에 익숙해지면 매우 사용하기 좋은 언어임.
- Swift를 사용하지 않는 유일한 이유는 Linux에서의 지원이 Apple 플랫폼만큼 좋지 않기 때문임.
-
gtk4에서의 3D 지원에 대한 질문
- gtk4에서 3D를 사용할 때 여전히 OpenGL 컨텍스트에 제한되어 있는지에 대한 의문을 제기함.
-
함수 매개변수에서의 키 사용에 대한 의견
- 함수 매개변수에 키를 도입하는 것이 실수였다고 생각함.
-
Swift 코드베이스 테스팅에 대한 논의
- Swift 코드베이스를 테스트하는 방법에 대해 논의함. 테스팅에 관한 문서가 부족하고, 모의 객체, 스텁, 보고, 코드 커버리지 등에 대한 전략을 제공하지 않음.
- 네트워크 확장을 사용하는 앱의 경우, 서명 제한 때문에 물리적 기기에서만 테스트해야 함.
- iOS와 macOS 기기 모두를 지원하는 좋은 물리적 기기 CI 서비스를 아는 사람이 있는지에 대한 질문을 함.
-
Swift가 데스크톱 개발에 흥미로운 옵션이 되고 있음을 발견
- Swift가 데스크톱 개발에 흥미로운 옵션이 되고 있다는 것을 최근 발견함. 이 예제 외에도 macOS와 Windows를 위한 Arc를 추가함.