Let’Swift는 Swift 개발자들이 만나고, 배우고, 즐기는 컨퍼런스로 총 13개의 세션으로 이뤄졌습니다. Swift 개발자들이 모여 iOS의 넥스트 스텝을 이야기한 행사였습니다. 빠르게 발전하는 언어 Swift에 대한 뜨거운 열의를 엿볼 수 있었던 Let’Swift 행사 동영상을 공유합니다
혹시 최근 오픈소스 프로젝트에서 Swift Package Manager를 본 적 있으신가요? Swift Package Manager라는 주제로 lingostar라는 닉네임으로 유명한 윤성관님이 발표한 세션 동영상을 통해 조만간 Apple에서 자세한 사용법이 발표할 것으로 예상되는 Swift Package Manager를 미리 알아보세요.
들어가기
- 2015년 9월 Swift가 오픈 소스가 되면서 한 주요 발표
- 리눅스에서도 사용 가능
- Core Library 개선
- Swift 패키지 매니저: 2016 WWDC에서 만들고 있다는 소개뿐
- 2016년 WWDC에서 큰 발표가 없었으므로 2017년 WWDC 관전 포인트를 주제로 함
- HomeBrew의 개발자 Max Howell이 2015년 8월 Apple 입사
- Apple에서 Swift 패키지 매니저를 만들고 있을 것이라 유추
용어 정리
- 패키지
- 소프트웨어, 응용프로그램, 데이터의 ‘배포판’
- 메타데이터를 포함
- 패키지 매니저
- 설치, 업데이트, 설정, 삭제를 자동화 해주는 툴
- 소프트웨어의 의존성이나 버전 정보 관리
- ex) 앱 스토어, MacPorts, Homebrew, CocoaPods, Alcatraz - Xcode용 플러그인 패키지 매니저
- 패키지 컨벤션
- 원활한 배포를 위해 패키지 구조에 대한 규칙 정의: ex) 앱스토어에 앱 올릴 때 패키지 검사
- 엔드유저는 패키지 매니저의 사용법만 알면 됨: ex) 앱스토어 사용법만 알면 사용 가능
- 원활한 배포 : 의존성 문제 해결
패키지 매니저 준비
- Swift Snapshots에서 Swift Dev. Snapshot 설치
- Dev Snapshot 설치
- /Library/Developer/Toolchains 아래 /usr/bin/ 폴더에서
- swift-build와 swift-package이 설치됨을 확인
- Xcode 버전에 따라 터미널에서 아래 명령 실행
// 7.3 version
export TOOLCHAINS=swift
// 7.2 version
export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"
간단한 프로그램 빌드
- 매니페스트
- 메타데이터를 가지고 있는 파일 (어원: 화물선의 화물 리스트)
- Package.swift
- 스위프트 언어로 패키지 매니저의 매니페스트를 정의 (프로젝트 설정도 가능)
- 프로젝트 폴더 구조
- 프로젝트 폴더
- Package.swift
- Sources: 소스코드들
- .build/debug/
- 프로젝트 폴더
- 간단한 데모 예제를 swift.org - getting started에서 확인 가능
의존성을 포함한 프로그램 빌드
-
데모 프로젝트 구조 및 실행 화면
- 프로젝트 폴더 구조
- 프로젝트 폴더
- Package.swift
- Sources: 소스코드들
- Packages: 의존성을 가지는 패키지들
- .build/debug/
- 프로젝트 폴더
-
Package 클래스
-
내부에 Dependency 클래스를 정의: Target에서 다시 Dependency를 enum으로 정의하기 때문
- SystemPackageProvider는 enum: Brew, Apt 선택 가능
-
Package
함수로 dependancy 정의
-
let package = Package(
name: "Dealer",
dependencies: [
.Package(url: "//",
majorVersion: 2)
]
)
Xcode 프로젝트 만들기
- 빈 폴더 만들기
swift package init
swift package generate-xcodeproj
- 많은 오픈소스 프로젝트들이 스위프트 패키지 매니저를 도입함
- Katrina도 SwiftyJSON 등의 의존성 관리
- 주의) UIKit 프레임워크 미지원
- 아직 적용 사례 없음
- import UIKit를 해보면 에러 발생
- SPM @ GitHub
참고 자료
발표 슬라이드는 아래를 참고해주세요.
컨텐츠에 대하여
이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.