Slide 1

Slide 1 text

Swift Package Manager Otemachi.swift #01 - WWDC17 ৼΓฦΓ Friday June 16th 2017

Slide 2

Slide 2 text

Satoshi Hachiya Twitter: @jpmartha_jp • Living in Kobe ⚓ • Developing an iOS app, Player! • Organizer of try! Swift Tokyo 2017 "# & try! Swift NYC 2017 $% • Speaker of MobileOptimized 2017 &

Slide 3

Slide 3 text

WWDC ʹ͸ࢀՃ͍ͯ͠·ͤΜ͕

Slide 4

Slide 4 text

San Jose ʹ͸ߦ͖·ͨ͠

Slide 5

Slide 5 text

࿩͢͜ͱ Swift Package Manager Version 4 Ͱͷมߋ಺༰

Slide 6

Slide 6 text

Swift Package Manager (SwiftPM) ! ࢖ͬͯ·͔͢ʁ "

Slide 7

Slide 7 text

ʢݟͨݶΓʣ΄ͱΜͲޠΒΕ͍ͯͳ͍ SwiftPM ʹ͍ͭͯ৮Ε͍ͯΔηογϣϯ • Session 102: Platforms State of the Union (?) • Session 402: What’s New in Swift ʢ⚠ ΄͔ʹ͝ଘ஌Ͱͨ͠Β͝ࢦఠ͍ͩ͘͞ "ʣ

Slide 8

Slide 8 text

ͨͩ͠ ωλͱͯ͠͸ͦͷ΄͏͕޷Έ

Slide 9

Slide 9 text

ʴ աڈͷ… ✨

Slide 10

Slide 10 text

Ͱ͸ݟ͍͖ͯ·͠ΐ͏ !

Slide 11

Slide 11 text

Platforms State of the Union Session 102 Video: [00:20:44] / Slides: 70 • Improved Package Manager ʢεϥΠυʹ͋Δ͕ಛʹݴٴ͸͞Ε͍ͯͳ͍ʁʣ

Slide 12

Slide 12 text

What’s New in Swift Session 402

Slide 13

Slide 13 text

Video: [02:25] / Slides: 7 • Growing ecosystem • 7,000+ packages on GitHub • Popular for server-side Swift

Slide 14

Slide 14 text

Video: [02:25] / Slides: 7 • Significant improvements in Swift 4 • New manifest API • Better development workflow, diagnostics, dependency resolution • Xcode project generation

Slide 15

Slide 15 text

Video: [10:25] / Slides: 32 • Swift package manager will pick the appropriate Swift version for each package let package = Package( name: "HTTP", ... swiftLanguageVersions: [3, 4])

Slide 16

Slide 16 text

!!!!

Slide 17

Slide 17 text

Swift Evolution https://apple.github.io/swift-evolution/ ͰݕࡧͰ͖·͢ !

Slide 18

Slide 18 text

Swift Evolution (Implemented in Swift 4) • SE-0146 Package Manager Product Definitions • SE-0149 Package Manager Support for Top of Tree development • SE-0150 Package Manager Support for branches • SE-0158 Package Manager Manifest API Redesign • SE-0162 Package Manager Custom Target Layouts • SE-0175 Package Manager Revised Dependency Resolution

Slide 19

Slide 19 text

New manifest API? • SE-0158 Package Manager Manifest API Redesign • https://github.com/apple/swift-evolution/blob/master/ proposals/0158-package-manager-manifest-api- redesign.md • SE-0162 Package Manager Custom Target Layouts • https://github.com/apple/swift-evolution/blob/master/ proposals/0162-package-manager-custom-target- layouts.md

Slide 20

Slide 20 text

Better development workflow? • SE-0149 Package Manager Support for Top of Tree development • https://github.com/apple/swift-evolution/blob/master/ proposals/0149-package-manager-top-of-tree.md • SE-0150 Package Manager Support for branches • https://github.com/apple/swift-evolution/blob/master/ proposals/0150-package-manager-branch-support.md

Slide 21

Slide 21 text

Better development dependency resolution? • SE-0146 Package Manager Product Definitions • https://github.com/apple/swift-evolution/blob/master/ proposals/0146-package-manager-product-definitions.md • SE-0175 Package Manager Revised Dependency Resolution • https://github.com/apple/swift-evolution/blob/master/ proposals/0175-package-manager-revised-dependency- resolution.md

Slide 22

Slide 22 text

Package Manifest File Format Reference • PackageDescription API Version 3 • PackageDescription API Version 4

Slide 23

Slide 23 text

PackageDescription API Version 3 Package( name: String, pkgConfig: String? = nil, providers: [SystemPackageProvider]? = nil, targets: [Target] = [], dependencies: [Package.Dependency] = [], swiftLanguageVersions: [Int]? = nil, exclude: [String] = [] )

Slide 24

Slide 24 text

PackageDescription API Version 4 Package( name: String, pkgConfig: String? = nil, providers: [SystemPackageProvider]? = nil, products: [Product] = [], dependencies: [Dependency] = [], targets: [Target] = [], swiftLanguageVersions: [Int]? = nil )

Slide 25

Slide 25 text

products ͕૿͑ͨʢ2 typeʣ • library • static • dynamic • automaticʢ! ਪ঑ʣ • executable: ίϚϯυϥΠϯπʔϧΛ΄͔ͷύοέʔδͰ࢖͑Δ Α͏ʹ͢Δ৔߹ͷΈ

Slide 26

Slide 26 text

exclude ͕ͳ͘ͳͬͨʁ • Target ͰࢦఆʢPackage Ͱ͸ͳ͘ʣ • path • excludeʢ!ʣ • sources • publicHeadersPath

Slide 27

Slide 27 text

Example let package = Package( name: "Paper", products: [ .executable(name: "tool", targets: ["tool"]), .library(name: "Paper", targets: ["Paper"]), .library(name: "PaperStatic", type: .static, targets: ["Paper"]), .library(name: "PaperDynamic", type: .dynamic, targets: ["Paper"]), ], ...

Slide 28

Slide 28 text

... dependencies: [ .package(url: "http://github.com/SwiftyJSON/SwiftyJSON", from: "1.2.3"), .package(url: "../CHTTPParser", .upToNextMinor(from: "2.2.0")), .package(url: "http://some/other/lib", .exact("1.2.3")), ], ...

Slide 29

Slide 29 text

... targets: [ .target( name: "tool", dependencies: [ "Paper", "SwiftyJSON" ]), .target( name: "Paper", dependencies: [ "Basic", .target(name: "Utility"), .product(name: "CHTTPParser"), ]) ] )

Slide 30

Slide 30 text

! ·ͩࢼ͍ͯ͠·ͤΜ " • Xcode 9 beta ʹ͸ Version 4 $ swift package --version Apple Swift Package Manager - Swift 4.0.0-dev (swiftpm-13081.9) • SwiftPM ࣗମ΋ Xcode ϓϩδΣΫτΛੜ੒Մೳ $ swift package generate-xcodeproj generated: ./SwiftPM.xcodeproj

Slide 31

Slide 31 text

Options $ swift package --help OVERVIEW: Perform operations on Swift packages USAGE: swift package [options] subcommand OPTIONS: --build-path Specify build/cache directory [default: ./.build] --chdir, -C Change working directory before any other operation --disable-sandbox Disable using the sandbox when executing subprocesses --enable-prefetching Enable prefetching in resolver --verbose, -v Increase verbosity of informational output -Xcc Pass flag through to all C compiler invocations -Xlinker Pass flag through to all linker invocations -Xswiftc Pass flag through to all Swift compiler invocations --help Display available options

Slide 32

Slide 32 text

Subcommands SUBCOMMANDS: clean Delete build artifacts describe Describe the current package dump-package Print parsed Package.swift as JSON edit Put a package in editable mode generate-xcodeproj Generates an Xcode project init Initialize a new package reset Reset the complete cache/build directory resolve Resolve package dependencies show-dependencies Print the resolved dependency graph tools-version Manipulate tools version of the current package unedit Remove a package from editable mode update Update package dependencies

Slide 33

Slide 33 text

·ͱΊ • ݱঢ়͸ίϚϯυϥΠϯπʔϧ΍αʔόʔαΠυ Swift Ͱ׆༻ • ഁյతมߋ͸ͳ͘ Version 4 ΁ͷҠߦ͕εϜʔζΒ͍͠ • ·ͩൃల్্ʢཁௐࠪʣ • CocoaPods ΍ Carthage ͸ܧଓར༻͞Εͦ͏ • ৄࡉ͸ Swift.org ͷϝʔϦϯάϦετΛࢀর

Slide 34

Slide 34 text

ࢀߟ • ʮ࣮ફ Swift Package Managerʯ@ikesyo • https://speakerdeck.com/ikesyo/shi-jian-swift-package- manager • ʮSwift Package Manager (SwiftPM) Ͱ࡞ΔίϚϯυϥΠϯ πʔϧʯ@_mono • http://qiita.com/mono0926/items/e8fdd97115780204f797

Slide 35

Slide 35 text

ࢀߟ • ʮ࣮ફServer Side Swiftʯ@noppoMan722 • https://speakerdeck.com/noppoman/shi-jian-server-side- swift

Slide 36

Slide 36 text

Thanks !