# Swift로 GNOME 앱 개발하기

> Clean Markdown view of GeekNews topic #14040. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14040](https://news.hada.io/topic?id=14040)
- GeekNews Markdown: [https://news.hada.io/topic/14040.md](https://news.hada.io/topic/14040.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-03-28T15:35:20+09:00
- Updated: 2024-03-28T15:35:20+09:00
- Original source: [swift.org](https://www.swift.org/blog/adwaita-swift/)
- Points: 6
- Comments: 3

## Topic Body

- 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 환경이 아닌 다른 데스크톱 환경에서의 호환성 문제나 성능 이슈가 발생할 가능성을 고려해야 함

## Comments



### Comment 24094

- Author: bbulbum
- Created: 2024-03-30T09:49:49+09:00
- Points: 1

https://stuff.mit.edu/afs/athena/astaff/project/aui/html/pronunciation.html  
  
Gnome 은 노움이 아니라 그놈 으로 읽는것이 공식 발음입니다.

### Comment 24081

- Author: neoroman
- Created: 2024-03-29T10:42:49+09:00
- Points: 1

훌륭하네요.

### Comment 24067

- Author: neo
- Created: 2024-03-28T15:35:21+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39844936) 
- **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를 추가함.
