Swift로 GitHub 오픈 소스 라이브러리를 만들고 SPM으로 배포하는 과정 정리

cheshire0105·2025년 1월 15일

iOS

목록 보기
30/45
post-thumbnail

Swift로 GitHub 오픈 소스 라이브러리를 만들고 SPM으로 배포하는 과정 정리

iOS 개발을 하다 보면 반복적으로 사용하는 컴포넌트나 유틸리티가 생긴다. 이를 직접 라이브러리화해서 오픈 소스로 공개하면, 다른 개발자들과 지식을 나누고 함께 발전시킬 수 있다. Swift Package Manager(SPM)를 통해 간편하게 배포할 수도 있어, 점점 더 많은 개발자가 애용하는 방식이다. 이번 글에선 Swift 패키지를 생성하고, GitHub에 올려 오픈 소스로 관리하면서, SPM을 통해 배포하는 전 과정을 자세하고 쉽게 정리해본다.


1. 라이브러리 기획 및 폴더 구조 준비

먼저 라이브러리를 어떤 목적과 기능으로 제작할지 구상한다. 예를 들어, 자주 사용하는 Custom ViewUtility 코드를 오픈 소스로 만들기로 결정했다고 가정한다. 이후 Xcode 메뉴를 통해 Swift 패키지를 생성할 준비를 한다.

패키지가 생성 되면 아래와 같은 폴더 구조를 가지게 된다.

MySwiftLibrary/
├─ Sources/
│   └─ MySwiftLibrary/
│       └─ MyFeature.swift
└─ Tests/
    └─ MySwiftLibraryTests/
        └─ MyFeatureTests.swift
  • Sources 폴더에는 라이브러리를 구성하는 Swift 파일들을 넣는다.
  • Tests 폴더에는 유닛 테스트 코드를 작성한다.

2. Xcode에서 Swift Package 생성하기

터미널에서 swift package init --type library 명령어를 사용하지 않고, Xcode 메뉴를 통해 Swift 패키지를 만드는 과정을 살펴본다.

  1. Xcode를 실행한 뒤, 상단 메뉴에서 File > New로 이동한다.
  2. New 서브 메뉴에서 Package...를 선택한다.
    • File > New > Package
    • 이미지 설명
  1. 다음으로 Choose a template for your new package 창이 뜬다.

    • Library 템플릿을 선택하고 Next 버튼을 누른다.

    • 이미지 설명
  1. 패키지 이름, 저장 위치 등을 입력하고 Create를 누르면 Swift Package 초기화가 완료된다.

이 과정을 마치면, Package.swift를 포함해 기본 폴더 구조가 자동으로 생성된다. 이제 Sources 폴더와 Tests 폴더를 활용해 라이브러리를 구성할 수 있다.


3. 라이브러리 코드 작성

라이브러리의 핵심 기능을 작성한다. 예를 들어, Sources/MySwiftLibrary 폴더 내부에 OneThingPerPageView.swift와 같은 Swift 파일을 만들어 원하는 코드를 작성한다. 간단한 예시로, 아래와 같은 코드가 있다고 가정한다.

import SwiftUI

public struct OneThingPerPageView: View {
    private let title: String
    private let subTitle: String
    
    public init(title: String, subTitle: String) {
        self.title = title
        self.subTitle = subTitle
    }
    
    public var body: some View {
        VStack {
            Text(title)
                .font(.largeTitle)
                .padding()
            Text(subTitle)
                .font(.subheadline)
        }
    }
}

위 코드는 제목과 서브타이틀을 표시해주는 간단한 SwiftUI View다. 공개(public) 접근 제어자를 사용해야 다른 프로젝트에서 사용할 수 있다.


4. 유닛 테스트 작성

오픈 소스로 공개하기 전, 기본적인 유닛 테스트 코드를 작성해두면 여러 가지 이점이 있다. 버그를 조기에 발견할 수 있고, 다른 개발자도 라이브러리의 동작 방식을 테스트 코드로 파악할 수 있기 때문이다.

Tests/MySwiftLibraryTests 폴더 내부에 테스트 코드를 작성한다.

import XCTest
@testable import MySwiftLibrary

final class MyFeatureTests: XCTestCase {
    func testExample() throws {
        // 주어진 View나 함수가 올바르게 동작하는지 간단히 테스트한다
        let expectedTitle = "Hello"
        let expectedSubTitle = "World"
        
        let view = OneThingPerPageView(title: expectedTitle, subTitle: expectedSubTitle)
        // SwiftUI View 자체를 테스트할 때는 스냅샷 테스트 등을 사용하기도 한다
        // 이 예시에서는 단순히 속성 확인 혹은 실제 로직 테스트를 한다
    }
}

간단한 테스트라도 작성해두면 협업 시 큰 도움이 된다.


5. GitHub 저장소 생성 및 소스 업로드

  1. GitHub에서 새 저장소(Repository)를 생성한다. 예를 들어 MySwiftLibrary라는 이름으로 생성한다고 가정한다.
  2. Xcode에서 생성된 Swift Package 프로젝트 폴더로 이동한 뒤, Git으로 관리할 준비를 한다. (Xcode에서 Source Control 설정을 통해 Git 초기화를 해도 된다.)

터미널을 사용한다면 아래와 같은 명령어를 입력할 수 있다.

git init
git remote add origin https://github.com/사용자명/MySwiftLibrary.git
git add .
git commit -m "Initial commit"
git push -u origin main

이제 GitHub에서 Package.swift 파일과 소스 코드들을 확인할 수 있다.


6. README 및 라이선스 작성

오픈 소스 프로젝트에서 README.md 파일은 매우 중요하다. 이 라이브러리를 어떻게 사용하고 설치하는지, 어떤 기능이 있는지, 간단한 예시가 무엇인지 등을 작성해두면 다른 개발자들이 이해하기 쉽다.

또한, 라이선스(License) 파일을 명시해서 사용 범위를 명확히 해야 한다. 많이 쓰이는 MIT License 같은 것을 활용하면 유연하게 오픈 소스를 배포할 수 있다.


7. GitHub Release 및 버전 태깅

Swift Package Manager로 간편하게 이용하려면 태그(Tag)릴리스(Release)를 지정해야 한다. 예를 들어, 첫 번째 공식 버전을 1.0.0으로 지정하려면 아래와 같이 진행한다.

git tag 1.0.0
git push origin 1.0.0

이렇게 하면 GitHub 저장소에 1.0.0 태그가 등록된다. GitHub에서 Releases 메뉴로 이동해 새로운 릴리스를 생성하고, 릴리스 노트를 작성해 공식 배포할 수 있다.


8. SPM을 통한 라이브러리 설치 방법 안내

이제 다른 프로젝트에서 아래와 같이 Package.swift 혹은 Xcode의 Package Dependencies를 통해 이 라이브러리를 불러올 수 있다. 예를 들어, Xcode를 사용 중이면 다음 과정을 거친다.

  1. Xcode에서 프로젝트 설정으로 이동한다.
  2. Package Dependencies 탭을 선택한다.
  3. + 버튼을 누르고, GitHub 저장소 주소(https://github.com/사용자명/MySwiftLibrary)를 입력한다.
  4. 원하는 버전을 선택(예: 1.0.0)하고 추가한다.

또는, Package.swift 파일에 직접 의존성을 추가하려면 아래와 같이 작성한다.

dependencies: [
    .package(url: "https://github.com/사용자명/MySwiftLibrary.git", from: "1.0.0")
]

9. 라이브러리 활용 예시

다른 SwiftUI 프로젝트에서 라이브러리를 설치했다면, 간단히 import MySwiftLibrary를 통해 라이브러리를 사용할 수 있다.

import SwiftUI
import MySwiftLibrary

struct ContentView: View {
    var body: some View {
        OneThingPerPageView(title: "Hello", subTitle: "World")
    }
}

빌드가 성공적으로 완료되면, 프로젝트 내에서 라이브러리가 제공하는 모든 컴포넌트와 함수들을 활용할 수 있다.


10. 유지보수 및 버전 업데이트

  • 새 기능 추가나 버그 픽스가 이루어지면, 세부 버전을 올려가며 릴리스한다. 예를 들어 1.0.1, 1.0.2 등으로 태깅한다.
  • 큰 기능 변경이나 호환성 이슈가 있으면 2.0.0 등의 Major 버전을 선언한다.
  • 이슈나 PR(Pull Request)을 통해 다른 개발자들과 피드백을 주고받고, 오픈 소스 프로젝트를 함께 발전시켜 나간다.

마무리

이상으로 Xcode 메뉴를 활용해 Swift 패키지를 생성하고, GitHub에 오픈 소스로 공개한 뒤, Swift Package Manager를 통해 배포하는 전 과정을 살펴보았다.

라이브러리를 오픈 소스로 공개하면, 코드의 가시성과 활용도가 높아지는 장점이 있다. 다른 개발자들의 피드백을 받아 더 나은 품질로 발전시켜 나갈 수 있다. 이번 기회를 통해 본인이 가진 노하우나 자주 쓰는 컴포넌트를 오픈 소스로 만들어 보는 것을 권장한다.


참고: OneThingPerPageView

위 예시는 SwiftUI로 구현된 커스텀 뷰와 Alert, ButtonStyle 등이 포함되어 있다.
궁금한 점이나 개선사항이 있다면 언제든지 이슈 혹은 PR로 소통할 수 있다.

0개의 댓글