1P by GN⁺ | ★ favorite | 댓글 1개
  • xtool은 Linux, WSL, macOS에서 SwiftPM 기반 iOS 앱을 빌드·배포할 수 있게 하는 크로스플랫폼 Xcode 대체 도구임
  • SwiftPM 패키지를 iOS 앱으로 빌드하고, 앱 서명과 설치까지 처리할 수 있음
  • Apple Developer Services와 프로그래밍 방식으로 상호작용하는 기능을 제공함
  • 명령줄에서는 setup, auth, sdk, new, dev, ds, devices, install, uninstall, launch 같은 하위 명령을 제공함
  • 자체 앱에서 Apple Developer Services와 iOS 기기 등을 다루려면 SwiftPM 의존성으로 XKit 라이브러리를 추가해 사용할 수 있음

xtool의 목적

  • xtool은 Xcode 기능을 공개 표준 기반으로 재현하는 크로스플랫폼 도구임
  • 지원 환경은 Linux/WSL/macOS
  • SwiftPM 패키지를 iOS 앱으로 빌드하고 배포하는 흐름을 제공함

제공 기능

  • SwiftPM 패키지를 iOS 앱으로 빌드할 수 있음
  • iOS 앱을 서명하고 기기에 설치할 수 있음
  • Apple Developer Services와 프로그래밍 방식으로 상호작용할 수 있음

시작 방법

명령줄 인터페이스

  • xtool --helpCross-platform Xcode replacement 개요와 xtool <subcommand> 사용법을 표시함
  • 구성 관련 하위 명령
    • setup: iOS 개발용 xtool 설정
    • auth: Apple Developer Services 인증 관리
    • sdk: Darwin Swift SDK 관리
  • 개발 관련 하위 명령
    • new: 새 xtool SwiftPM 프로젝트 생성
    • dev: xtool SwiftPM 프로젝트 빌드 및 실행
    • ds: Apple Developer Services와 상호작용
  • 기기 관련 하위 명령
    • devices: 기기 목록 표시
    • install: ipa 파일을 기기에 설치
    • uninstall: 설치된 앱 제거
    • launch: 설치된 앱 실행

XKit 라이브러리

  • xtool에는 자체 앱에서 Apple Developer Services, iOS 기기 등과 상호작용할 수 있는 라이브러리가 포함됨
  • SwiftPM에서 XKit을 의존성으로 추가해 사용할 수 있음
// package dependency:
.package(url: "https://github.com/xtool-org/xtool";, .upToNextMinor(from: "1.2.0"))
// target dependency:
.product(name: "XKit", package: "xtool")

댓글과 토론

Hacker News 의견들
  • 이 도구가 “Xcode replacement”와 “Xcode-free development”를 말하길래, Xcode 없이 앱을 빌드할 방법이 없다고 생각했음
    라이브러리나 컴파일러 등을 어떻게 대체하나 더 찾아보니 역시 아니었고, “Xcode 빌드 시스템에 의존하지는 않지만 iOS SDK와 도구 체인을 위해 Xcode 설치는 필요하다”고 되어 있음
    메시지를 더 명확히 해야 함. 이건 대체재나 대안이라기보다, 더 나은 경험이라고 생각하는 것을 위해 Xcode 위에 얹는 계층에 가까움

    • 여기서는 몇 가지 개념이 섞인 듯함. 이건 Xcode/xcodebuild 위의 계층이라기보다, 현재 Apple이 iOS/Swift 관련 도구를 Xcode 릴리스에 함께 묶어 배포하기 때문에 생기는 문제임
      Xcode IDE 자체나 xcodebuild 빌드 시스템에 관심이 전혀 없어도, 그 도구 체인을 다운로드하고 설치하는 유일한 방법이 Xcode라서 필요함. Apple이 따로 제공할 수도 있지만 그렇게 하지 않을 뿐임
  • JetBrains가 예전에 AppCode를 개발했음
    AppCode는 iOS/macOS 개발용 스마트 IDE였고, 2022년 12월 14일부터 상용 제품으로는 더 이상 제공되지 않음
    https://www.jetbrains.com/objc/

    • Fleet이 XCode 앱 빌드를 지원할 것 같지만, AppCode에 비하면 큰 후퇴처럼 보임. 현재 Fleet은 내 macOS 앱을 컴파일하지 못하고, 새 업데이트가 나올 때마다 정기적으로 시도해 보고 있음. 안타깝게도 대안이 없음
    • ObjC 쪽에는 도움이 안 될 가능성이 크지만, Swift 부분은 CLion 플러그인으로 옮겨졌음: https://plugins.jetbrains.com/plugin/8240-swift
      아쉽게도 ObjC 부분은 별도로 뭔가 한 흔적이 없고, 그냥 /dev/null로 보낸 듯함
  • 이론적으로 Flutter 앱 개발자가 Linux에서 iOS 앱 빌드와 배포를 할 수 있게 해 주는 건가? 제발 그랬으면 좋겠음

    • 아는 한 기술적으로는 Apple Developer Agreement를 위반하지만, 이것도 또 하나의 소송감처럼 보임
    • 이 프로젝트가 도움이 되긴 하지만 이것만으로는 충분하지 않음
      1. Dart는 아직 Linux에서 iOS로 교차 컴파일할 수 없음. Dart 인터프리터를 쓸 수는 있지만 성능이 크게 떨어짐
      2. Flutter iOS 프로젝트는 Xcode 프로젝트 형식을 쓰므로, xtool의 프로젝트 형식으로 이전해야 함
      3. Flutter는 플러그인 생태계를 CocoaPods에서 SwiftPM으로 옮기는 작업을 아직 끝내지 못했음. 아직 SwiftPM으로 이전하지 않은 플러그인은 xtool에서 동작하지 않을 가능성이 큼
    • 아는 한 이미 darling으로 가능함. Nixpkgs에도 xcbuild 대체재가 있지만, 코드 서명까지 처리할 수 있는지는 모르겠음
    • CodeMagic 같은 걸 쓰는 편이 낫겠음. Apple 계정이 정지될 위험은 감수하지 않겠음
  • 관련 Swift 포럼 글도 있음: https://forums.swift.org/t/xtool-cross-platform-xcode-replac...
    HN 논의도 있음: https://news.ycombinator.com/item?id=43952239

  • 몇 달마다 다운로드에 9시간 걸리고, 내 XML과 plist 파일을 무작위로 수정하는 그 Xcode 말하는 건가?

  • Sweetpad(https://sweetpad.hyzyla.dev/)가 떠오름. 설정이 좀 번거로운데, XTool은 더 나은 개발자 경험을 제공하는 것처럼 보임. 이 프로젝트가 크게 성장했으면 좋겠음

  • 이전 글로 “Build iOS Apps on Linux and Windows”가 있었음: https://news.ycombinator.com/item?id=43952239

  • GitHub 조직명이 xtool-org인 걸 보니, 레이저 각인기와 창작·공예 기술 제품을 만드는 XTool 회사가 문제 삼을지 궁금함

  • Swift UI로 만든 인터페이스를 실시간 미리보기할 수 있는, XCode에서 분리된 비슷한 도구도 있으면 좋겠음

  • 스크린샷에 vscode 아이콘이 있네?

    • 맞음. 이 도구 자체는 빌드 도구를 대체하는 명령줄 앱일 뿐이고 IDE를 대체하지는 않음. 코드는 원하는 도구에서 편집하면 됨