Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
わいわいSwift Package Manager
Search
giginet
PRO
September 12, 2018
Programming
710
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
わいわいSwift Package Manager
https://iosdiscord.connpass.com/event/97606/
giginet
PRO
September 12, 2018
More Decks by giginet
See All by giginet
🀄️ on swiftc
giginet
PRO
0
630
15年メンテしてきたdotfilesから開発トレンドを振り返る 2011 - 2026
giginet
PRO
2
510
Claude Codeログ基盤の構築
giginet
PRO
7
4.8k
Inside of Swift Export
giginet
PRO
1
3.6k
Swiftビルド弾丸ツアー - Swift Buildが作る新しいエコシステム
giginet
PRO
0
3k
SwiftでMCPサーバーを作ろう!
giginet
PRO
3
500
Creating Intuitive Developer Tool in Swift
giginet
PRO
0
1.7k
Mergeable Libraryで 高速なアプリ起動を実現しよう!
giginet
PRO
2
8.7k
5分でわかるExplicitly Built Modules
giginet
PRO
2
2k
Other Decks in Programming
See All in Programming
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
290
React Native経験者が Flutterを30⽇間触って驚いたこと
3saito
0
160
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
160
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
160
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
410
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
230
Getting Started with Vibe Coding
miccheng
0
190
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
200
はじめてのPLATEAU
nokonoko1203
1
590
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
320
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Chasing Engaging Ingredients in Design
codingconduct
0
390
My Coaching Mixtape
mlcsv
0
380
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
620
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
590
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Documentation Writing (for coders)
carmenintech
77
5.6k
Transcript
Θ͍Θ͍Swift Package Manager Θ͍Θ͍swiftc #5 @giginet
Agenda • SPM System library • Package Description V4.2 •
How to develop
Motivation • App Store Connect APIΫϥΠΞϯτΛSwiftͰ࡞ͬͯͨ • ৄࡉiOSDC Reject Conference
Day1Ͱʂʂʂ • JSON Web TokenͷॲཧʹCͷϥΠϒϥϦΛ͍͔ͨͬͨ
System Library • ΄͔ͷύοέʔδϚωʔδϟʔͰೖΕͨStatic LibraryΛSPMͰ ఏڙ͢Δͭ
OpenSSL • https://github.com/IBM-Swift/OpenSSL . !"" LICENSE.txt !"" Package.swift !""
[email protected]
!"" README.md !"" module.modulemap #"" shim.h
module.modulemap • libssl, libcryptoʹlink module OpenSSL [system] { header "shim.h"
link "ssl" link "crypto" }
shim.h #ifndef OpenSSLHelper_h #define OpenSSLHelper_h #include <openssl/conf.h> #include <openssl/evp.h> #include
<openssl/err.h> #include <openssl/bio.h> #include <openssl/ssl.h> #include <openssl/md4.h> #include <openssl/md5.h> #include <openssl/sha.h> #include <openssl/hmac.h> #include <openssl/rand.h> #include <openssl/pkcs12.h> #include <openssl/x509v3.h> // (ry
Package.swift import PackageDescription let package = Package( name: "OpenSSL", providers:
[ .apt(["openssl libssl-dev"]), .brew(["openssl"]), ], products: [ .library( name: "OpenSSL", targets: ["OpenSSL"] ) ], targets: [ .target(name: "OpenSSL") ] )
How to init modulemap $ swift package init --type modulemap
How to use • .packageͰଞͷύοέʔδͱಉ͡Α͏ʹΈࠐΊΔ • Swift͔Β؆୯ʹCͷAPIୟ͚Δ import PackageDescription let
package = Package( name: "Wormhole", products: [ .library( name: "Wormhole", targets: ["Wormhole"]), ], dependencies: [ .package(url: "https://github.com/giginet/libjwt-swift.git", from: "1.0.0"), ], targets: [ .target( name: "Wormhole", dependencies: ["Result", "JWT"]), ] )
libjwt-swift • https://github.com/giginet/libjwt-swift • JWTΛѻ͏CϥΠϒϥϦΛSwift͔Β͔ͭ͑ΔΑ͏ʹౕͨ͠
! import Foundation import JWT struct JWTEncoder { func encode(issuerID:
UUID, keyID: String) throws -> String { let object = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: MemoryLayout<OpaquePointer>.size) jwt_new(object) defer { jwt_free(object.pointee) } let keyPointer = convertToCString(privateKey) defer { keyPointer.deallocate() } jwt_set_alg(object.pointee, JWT_ALG_ES256, keyPointer, Int32(privateKey.utf16.count + 1)) // https://github.com/benmcollins/libjwt/pull/71 jwt_add_header(object.pointee, "kid", keyID) jwt_add_grant(object.pointee, "iss", issuerID.uuidString.lowercased()) let expirationDate = Date().addingTimeInterval(expirationInterval) jwt_add_grant_int(object.pointee, "exp", Int(expirationDate.timeIntervalSince1970)) jwt_add_grant(object.pointee, "aud", "appstoreconnect-v1") guard let encodedCString = jwt_encode_str(object.pointee) else { throw Error.decodeError } return String(cString: encodedCString) } }
Deprecation • Xcode beta 6ͷToolchainͩͱͳ͘ಈ͘ • DEVELOPMENT SNAPSHOT(9/8ݱࡏ)ͩͱwarningग़Δ
None
ࠓ·Ͱͷ4.2͔Βdeprecatedͳ ͷͰΕ͍ͯͩ͘͞
System Library(>=4.2) • SPM Package Description v4.2͔ΒSystem Library͕αϙʔτ • System
LibraryΛύοέʔδ͔ΒࢀরͰ͖ΔΑ͏ʹ • https://github.com/apple/swift-package-manager/blob/master/ Documentation/PackageDescriptionV4_2.md
How to Use • .systemLibraryͷଘࡏυΩϡϝϯτʹॻ͍ͯ͋Δ • ͍ํͷυΩϡϝϯτ͕ͳ͍ • ॻ͖͔͚ͷυΩϡϝϯτ͕Ϛʔδ͞Εͯͳ͍ঢ়ଶͰൃݟ͞Εͨ •
https://github.com/apple/swift-package-manager/blob/ 40d319d7bb1a8cb42b187a4cbfa72515c61ebc44/ Documentation/Usage.md
Directories Sources !"" jwt #"" jwt.h !"" module.modulemap
// swift-tools-version:4.2 // The swift-tools-version declares the minimum version of
Swift required to build this package. import PackageDescription let package = Package( name: "Wormhole", products: [ .library( name: "Wormhole", targets: ["Wormhole"]), ], targets: [ .systemLibrary(name: "JWT", path: "./Sources/jwt", providers: [.brew(["libjwt"]), .apt(["libjwt"])]), .target( name: "Wormhole", dependencies: ["Result", "JWT"]), ] )
Local Package • PD v4.2͔ΒϩʔΧϧύεͰͷdependencyʹରԠ import PackageDescription let package =
Package( name: "MyPackage", dependencies: [ .package(path: "../example-package-playingcard"), ], targets: [ .target( name: "MyPackage", dependencies: ["PlayingCard"] ), ] )
Achievement • ~ͷల։͕όά͍ͬͯͨͷͰࡢͨ͠ • https://github.com/apple/swift-package-manager/pull/1779 $ swift build --disable-package-manifest-caching error:
/Users/giginet/work/myexecutable/~/work/MyPackage has no manifest 'myexecutable' /Users/giginet/work/myexecutable: error: product dependency 'MyPackage' not found
Starting SPM development
SPM • SwiftͰ։ൃՄೳ • llbuildC++ • ͪΐͬͱPython(2) • Ϗϧυͷཱྀ͕ͳ͍ •
ϏϧυࡁΈToolchainΛ͑ྑ͍ • SPMͱswift-llbuild͚ͩඞཁ
Bootstrap • Documentation/Development.mdͱREADME.mdΛಡΉ • ͦΕͰएׯϋϚΔ
Select Toolchain • /Library/Developer/Toolchains/swift-latest.xctoolchain/ Info.plistΛݟΔ • CFBundleVersionͷΛڥมͰ͢ $ export TOOLCHAINS=org.swift.4220180908a
Build $ ./Utilities/bootstrap --verbose
Use development SPM #!/usr/bin/env bash /path/to/swift-source/swiftpm/.build/debug/spm "$@"
Xcode $ ./Utilities/bootstrap --generate-xcodeproj generated: ./SwiftPM.xcodeproj $ open SwiftPM.xcodeproj
LLDB • Xcode > Debug > Attach to Process by
PID or Name...
Next • ManifestͷύʔαʔͰόάݟ͚ͭͨͷͰۙʑ͢༧ఆ • ։ൃڥͰDynamic FrameworkͷLinkʹࣦഊ͢Δ • swift-llbuild৮ͬͯΈΔ
Wormhole • ϥΠϒϥϦ࡞ͬͯexecutableͰ͏ࢀߟྫ • https://github.com/giginet/Wormhole • iOS Reject Conference Day1Ͱ͢༧ఆ
• https://iosdc-reject-conference.connpass.com/event/93314/
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠