Slide 1

Slide 1 text

Binary Framework in Swift https://developer.apple.com/videos/play/wwdc2019/416/

Slide 2

Slide 2 text

Binary Framework in Swift • ABI Stability • Module Stability • XCFramework • Swift Package Manager

Slide 3

Slide 3 text

Swift 5.0 ABI Stability

Slide 4

Slide 4 text

Swift 5.1 Module Stability

Slide 5

Slide 5 text

Module Stability • Ϟδϡʔϧ͕҆ఆʢมΘΓʹ͍͘ʣͰ͋Δ • ʹʹϞδϡʔϧʹޓ׵ੑ͕͋Δ • ʹʹҟͳΔόʔδϣϯͷίϯύΠϥ͔Βੜ੒͞ΕͨϞδϡʔϧΛղऍͰ ͖Δ • ʹʹҟͳΔόʔδϣϯͷίϯύΠϥ͔Βੜ੒͞ΕͨϞδϡʔϧΛΠϯ ϙʔτͰ͖Δ

Slide 6

Slide 6 text

Module Stability

Slide 7

Slide 7 text

Module Stability

Slide 8

Slide 8 text

Module Stability

Slide 9

Slide 9 text

Module Stability • Swift 5.1ະຬͷSwift͸ɺҟͳΔόʔδϣϯͷίϯύΠϥ͔Βੜ੒͞ΕͨϞ δϡʔϧʢʹswiftmoduleʣΛImportͰ͖ͳ͍

Slide 10

Slide 10 text

Module Stability Swift Module Interfaces

Slide 11

Slide 11 text

Swift Module Interfaces

Slide 12

Slide 12 text

Swift Module Interfaces

Slide 13

Slide 13 text

Swift Module Interfaces

Slide 14

Slide 14 text

Swift Module Interfaces // swift-interface-format-version: 1.0 // swift-tools-version: Apple Swift version 5.1 effective-4.2 (swiftlang-1100.0.38.29 clang-1100.0.20.14) // swift-module-flags: -target x86_64-apple-ios12.1-simulator -enable-objc-interop -enable-library-evolution -swift-version 4.2 -enforce-exclusivity=checked -Onone -module-name A @_exported import A import Foundation import Swift public struct A { public init() public func f() }

Slide 15

Slide 15 text

https://forums.swift.org/t/plan-for-module-stability/14551

Slide 16

Slide 16 text

ABI Stability • ABI == όΠφϦؒͷΠϯλʔϑΣʔε • ؔ਺ݺͼग़͠ن໿ • ωʔϜϚϯάϦϯά • ϝϞϦϨΠΞ΢τ • ͦͷଞϝλσʔλ • etc.

Slide 17

Slide 17 text

ABI Stability • ҟͳΔόʔδϣϯͷίϯύΠϥͰੜ੒͞ΕͨόΠφϦʢ㲈ϥΠϒϥϦʣͱ ϦϯΫ͢Δ͜ͱ͕Ͱ͖Δ

Slide 18

Slide 18 text

ABI Stability

Slide 19

Slide 19 text

ABI Stability

Slide 20

Slide 20 text

ABI Stability • @frozen enum • @frozen struct • @inlinable functions • @usableFromInline

Slide 21

Slide 21 text

ABI Stability

Slide 22

Slide 22 text

ABI Stability • @frozen΍@inlinableΛ෇͚ΔલʹύϑΥʔϚϯεΛܭଌ͠·͠ΐ͏ʂ

Slide 23

Slide 23 text

Swift 5.1 XCFramework

Slide 24

Slide 24 text

XCFramework xcodebuild archive \ -scheme KeychainAccess \ -destination 'generic/platform=iOS' \ -destination 'generic/platform=iOS Simulator' \ -destination 'generic/platform=watchOS' \ -destination 'generic/platform=watchOS Simulator' \ -destination 'generic/platform=tvOS' \ -destination 'generic/platform=tvOS Simulator' \ -destination 'platform=OS X,arch=x86_64' \ SKIP_INSTALL=NO

Slide 25

Slide 25 text

XCFramework

Slide 26

Slide 26 text

xcodebuild archive \ -scheme KeychainAccess \ -destination 'generic/platform=iOS' \ -archivePath ./KeychainAccess-iOS \ SKIP_INSTALL=NO xcodebuild archive \ -scheme KeychainAccess \ -destination 'generic/platform=iOS Simulator' \ -archivePath ./KeychainAccess-iOS-Simulator \ SKIP_INSTALL=NO xcodebuild archive \ -scheme KeychainAccess \ -destination 'generic/platform=watchOS' \ -archivePath ./KeychainAccess-watchOS \ SKIP_INSTALL=NO ...

Slide 27

Slide 27 text

XCFramework

Slide 28

Slide 28 text

xcodebuild -create-xcframework \ -framework ./KeychainAccess-iOS.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -framework ./KeychainAccess-iOS-Simulator.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -framework ./KeychainAccess-watchOS.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -framework ./KeychainAccess-watchOS-Simulator.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -framework ./KeychainAccess-tvOS.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -framework ./KeychainAccess-tvOS-Simulator.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -framework ./KeychainAccess-macOS.xcarchive/Products/Library/Frameworks/KeychainAccess.framework \ -output KeychainAccess.xcframework XCFramework

Slide 29

Slide 29 text

XCFramework

Slide 30

Slide 30 text

XCFramework

Slide 31

Slide 31 text

Swift Package Manager

Slide 32

Slide 32 text

Swift Package Manager

Slide 33

Slide 33 text

Swift Package Manager

Slide 34

Slide 34 text

Swift Package Manager

Slide 35

Slide 35 text

Swift Package Manager

Slide 36

Slide 36 text

SPM & XCFramework • OSSϥΠϒϥϦʹ͓͍ͯ͸SPMͰಋೖ͢Δ΄͏͕ϝϦοτ͕ଟ͍ • ґଘղܾ • όʔδϣϯ؅ཧ • Package.swiftΛஔ͚ͩ͘ • XCFramework͸౰໘ϕϯμʔϥΠϒϥϦʹ࢖ΘΕΔͷͰ͸

Slide 37

Slide 37 text

SPM & XCFramework • CarthageͷDistribution͕XCFrameworkʹͳΔͷ͸͘͢͝ศར • ηοτΞοϓ͕؆୯ʢυϥοάˍυϩοϓ͢Δ͚ͩʣ • copy-frameworks͕ෆཁʹͳΔ