Slide 1

Slide 1 text

Swift Package Manager V4Ͱ Alfred WorkflowΛ࡞Ζ͏ iOSษڧձ 2017/10/16 satoshin21

Slide 2

Slide 2 text

Agenda • Swift Package Manager V4جૅ • Alfred Workflow with SwiftPM V4 • ͦͷଞ

Slide 3

Slide 3 text

Swift Package Manager

Slide 4

Slide 4 text

Swift Package Manager • Appleͷఏڙ͢ΔύοέʔδϚωʔδϟ • like CocoaPods, Carthage • ࠓͷͱ͜ΖɺαʔόαΠυ΍CLIπʔϧʹಛԽ

Slide 5

Slide 5 text

؀ڥ $ swift --version > Apple Swift version 4.0 (swiftlang-900.0.65 clang-900.0.37) > Target: x86_64-apple-macosx10.9

Slide 6

Slide 6 text

Hello World - init $ mkdir MyFirstPackage $ cd MyFirstPackage/ $ swift package init --type executable > Creating executable package: MyFirstPackage > Creating Package.swift > Creating README.md > Creating .gitignore > Creating Sources/ > Creating Sources/MyFirstPackage/main.swift > Creating Tests/

Slide 7

Slide 7 text

Hello World - build $ swift build Compile Swift Module 'MyFirstPackage' (1 sources) Linking ./.build/x86_64-apple-macosx10.10/debug/MyFirstPackage $ swift run # or .build/debug/MyFirstPackage Hello, world!

Slide 8

Slide 8 text

Files / Dirs • Package.swift • ґଘؔ܎΍ύοέʔδ໊Λఆٛ͢ΔϚχϑΣετϑΝΠϧ • Sources/ • ιʔεɾϑΝΠϧΛ֨ೲ • αϒσΟϨΫτϦ͕TargetͱͳΔ

Slide 9

Slide 9 text

Files / Dirs • Tests/ • TestϑΝΠϧΛ֨ೲ • αϒσΟϨΫτϦ͕testTargetͱͳΔ • --type libraryͷΈ testTarget͕ࣗಈతʹ࡞੒͞ΕΔ

Slide 10

Slide 10 text

package init --type • executable • CLI͔Β࣮ߦՄೳͳόΠφϦΛϏϧυՄೳ • library • executable, libraryͳͲ͔ΒґଘՄೳ • empty • system-module

Slide 11

Slide 11 text

Package.swift • ґଘؔ܎ఆٛϑΝΠϧ • Podfile, Cartfile, Gemfile...

Slide 12

Slide 12 text

Package.swift // swift-tools-version:4.0 import PackageDescription let package = Package( name: "MyFirstPackage", dependencies: [ // .package(url: /* package url */, from: "1.0.0"), ], targets: [ .target( name: "MyFirstPackage", dependencies: []), ] )

Slide 13

Slide 13 text

Swift.package swift-tools-version // swift-tools-version:4.0 • 1ߦ໨ʹఆٛ • ࢦఆ͠ͳ͍৔߹ɺswift-tools-version:3.1.0ͱͳΔ

Slide 14

Slide 14 text

Swift.Package targets, products • products • library or executable • ֎෦͔ΒࢀরՄೳ • targets • target or testTarget • Ϟδϡʔϧ΍ςετεΠʔτΛఆٛ

Slide 15

Slide 15 text

Swift.Package targets, products let package = Package( name: "AlfredKit", products: [ .library( name: "AlfredKit", targets: ["AlfredKit"]), ], targets: [ .target( name: "AlfredKit", dependencies: []), .testTarget( name: "AlfredKitTests", dependencies: ["AlfredKit"]), ] )

Slide 16

Slide 16 text

Package.Dependency • ґଘύοέʔδΛఆٛ dependencies: [ // `from`ͰVersionࢦఆ(Version͸tagͰࢦఆ͢Δ) .package(url: "[email protected]...", from: "1.0.0") .package(url: "[email protected]...", from: .init(1, 0, 0)) // Rangeࢦఆ .package(url: "[email protected]...", "1.0.0"..<"2.0.0") // ϒϥϯνɺϦϏδϣϯ౳ࢦఆՄೳ .package(url: "[email protected]...", .branch("develop")) .package(url: "[email protected]...", .revision("8b4975a")) }

Slide 17

Slide 17 text

Alfred WorkflowΛ࡞Δ

Slide 18

Slide 18 text

Alfred • ࠷ڧϥϯνϟʔ • ΞϓϦىಈ͔ΒWebݕࡧɺiTunesͷૢ ࡞·ͰσϑΥϧτͰՄೳ • ϑϦʔ΢ΣΞ͕ͩɺPower PackΛߪೖ ͢ΔࣄͰ֮੧͢Δ • (ଟ෼)όοτϚϯͷ(͔͍͍ͬ͜)ࣥࣄ͔ Β໊લ͕͖ͯΔ

Slide 19

Slide 19 text

Alfred Workflow • Power PackΛߪೖ͢ΔࣄͰར༻Ͱ͖Δ • ϗοτΩʔɺ΋͘͠͸ΩʔϫʔυΛࢦఆͯ͠εΫϦϓτΛ࣮ߦ • SwiftͰ΋࡞ΕΔʂ

Slide 20

Slide 20 text

ࠓճ࡞ͬͨαϯϓϧ • https://github.com/satoshin21/GitHubWorkflow • executable • APIKitͰϦϙδτϦΛݕࡧ • AlfredKitΛ࢖ͬͯScript FilterΛexport • https://github.com/satoshin21/AlfredKit • library

Slide 21

Slide 21 text

Alfred WorkflowΛ࡞੒ • Alfred Preferences͔ΒworkflowΛબ୒

Slide 22

Slide 22 text

Package.swift // swift-tools-version:4.0 import PackageDescription let package = Package( name: "GitHubSearch", dependencies: [ // AlfredKitͱAPIKitΛґଘؔ܎ͱͯ͠ఆٛ .package(url: "[email protected]:satoshin21/AlfredKit", from: "0.1.0"), .package(url: "[email protected]:ishkawa/APIKit.git", from: "3.1.2") ], targets: [ // targetʹґଘઌͷPackageΛࢦఆ .target( name: "GitHubSearch", dependencies: ["AlfredKit", "APIKit"]), ] )

Slide 23

Slide 23 text

DEMO

Slide 24

Slide 24 text

SwiftPM Tips - testTarget • main.swiftΛϞδϡʔϧͷςετ͕Ͱ͖ͳ͍ͷෆ۩߹(ͱ͍͏͔ ࢓༷)͕͋Δ (SR-1503) • Linux؀ڥԼͷ৔߹ɺObjective-CϥϯλΠϜͰಈ͘XCTest͕ଘࡏ ͤͣɺTest༻ͷmain.swift(࣮ߦϑΝΠϧ)͕ඞཁʹͳΔ • executableͷmain.swiftͱόοςΟϯά͢Δҝʁ • testίʔυΛॻ͘৔߹ɺlibraryͱͯ͠ϏδωεϩδοΫΛ੾Γग़ ͯ͠ɺtestTargetΛผʹࢦఆͨ͠ํ͕ૉ௚ʹಈ͘

Slide 25

Slide 25 text

Editable Packages $ swift package edit AlfredKit • ґଘઌͷύοέʔδΛ /PackagesσΟϨΫτϦҎԼʹ֨ೲ • libraryͱexecutableΛಉ࣌ʹฤू͢Δ৔߹ʹศར • Packages/ҎԼ͕༏ઌͯ͠ίϯύΠϧ͞ΕΔҝɺ஫ҙ

Slide 26

Slide 26 text

END