swift package manager

40
let swift(16) 스위프트 패키지 매니저 Swift Package Manager 윤성관 lingostar

Upload: -

Post on 06-Jan-2017

3.097 views

Category:

Technology


1 download

TRANSCRIPT

let swift(16)

스위프트�패키지�매니저Swift�Package�Manager

윤성관�lingostar

let swift(16)

윤성관lingostar�Coder’sHigh

Agenda

들어가기�

용어정리�

패키지�매니저�준비�

간단한�프로그램�빌드�

의존성을�포함한�프로그램�빌드�

Xcode�프로젝트�?

let swift(16)

들어가기

–Hair Froce one

“Swift is now open source.”

리눅스에서도�스위프트�사용할�수�있어�

코어�라이브러리는�멋있어졌어�

스위프트�패키지�매니저도�만들었어

WWDC16에서�패키지�매니저

60초~!�

1분~!�

7,000여분�중에�1분�~!

목표�:

WWDC2017의��패키지�매니저�세션�관전�포인트

let swift(16)

용어정리

패키지

소프트웨어,�응용프로그램,�데이터의�‘배포판’�

메타데이터를�포함

패키지�매니저

설치,�업데이트,�설정,�삭제를�자동화�해주는�툴�

소프트웨어의�의존성이나�버전�정보�관리�

ex)�앱�스토어�

ex)�MacPorts,�Homebrew,�CocoaPods�

ex)�Alcatraz�-�Xcode용�플러그인�패키지�매니저

패키지�컨벤션

원활한�배포를�위해�패키지�구조에�대한�규칙�정의�

앱스토어에�앱�올릴�때�패키지�검사�

엔드유저는�패키지�매니저의�사용법만�알면�됨�

앱스토어�사용법만�아시면�됩니다�(카드�비번이랑)�

원활한�배포�-�의존성�문제

let swift(16)

패키지�매니저�준비

Swift�Dev.�Snapshot�설치

https://swift.org/download/#snapshots

Dev�Snapshot�설치

/Library/Developer/Toolchains�

/usr/bin/�

swift-build��

swift-package�

Xcode�버전에�따라�

export�TOOLCHAINS=swift�

export�PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"

let swift(16)

간단한�프로그램�빌드

매니페스트

메타데이터를�가지고�있는�파일.�화물선의�화물�리스트�

Package.swift�

스위프트�언어로�패키지�매니저의�매니페스트를�정의�

여러분,�스위프트를�배우면�프로젝트�설정도�가능합니다.

프로젝트�폴더�구조

프로젝트�폴더�

Package.swift�

Sources�

소스코드들�

.build/debug/

let swift(16)

Demo�-�간단한�빌드

방금�한�예제는

swift.org�

Getting�Started

let swift(16)

의존성을�포함한�프로그램�빌드

프로젝트�폴더�구조

프로젝트�폴더�

Package.swift�

Sources�

소스코드들�

Packages�

의존성을�가지는�패키지들�

.build/debug/

Dealer

DeckOfPlayingCard

FisherYatesPlayingCard

swift build

let swift(16)

Demo�-�의존성�빌드

Package�클래스

내부에�Dependency�클래스를�정의�

Target에서�다시�Dependency를�enum으로�정의하기�때문

let name:String? let pkgConfig:String? let providers: [SystemPackageProvider]? var targets: [Target] var dependencies: [Dependency] var exclude: [String]

Package�클래스

SystemPackageProvider�는�enum�

case�Brew�,�Apt

let name:String? let pkgConfig:String? let providers: [SystemPackageProvider]? var targets: [Target] var dependencies: [Dependency] var exclude: [String]

Dependency�클래스

let versionRange: Range<Version> let url: String

Package(…,…) -> Dependency

Target�클래스

내부에�Dependency�enum을�정의

let name: String var dependencies: [Dependency]

샘플�매니페스트

샘플�매니페스트

let swift(16)

Xcode�프로젝트�빌드

Xcode�프로젝트�만들기

빈�폴더�만들기�

swift�package�init�

swift�package�generate-xcodeproj�

많은�오픈소스�프로젝트들이�SPM을�도입�

Katrina�도�SwiftyJSON등의�의존성�관리

UIKit�프레임워크

import�UIKit�

error�

아직�사례�없음

SPM�@�GitHub

GitHub�Apple�페이지��

https://github.com/apple�

https://github.com/apple/swift-package-manager�

번역본�

https://github.com/lingostar/swift-package-manager

참고자료

Kostiantyn�Koval�(Swift�High�Performance)�

http://kostiakoval.github.io/posts/swift-package-manager�

Swift�Package�Lists�

https://github.com/donald-pinckney/swift-packages

let swift(16)