Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
More Swift App Startup Time
Search
giginet
PRO
June 16, 2017
Programming
2.2k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
More Swift App Startup Time
#otemachi_swift #1
https://nikkei.connpass.com/event/58452/
giginet
PRO
June 16, 2017
More Decks by giginet
See All by giginet
🀄️ on swiftc
giginet
PRO
0
560
15年メンテしてきたdotfilesから開発トレンドを振り返る 2011 - 2026
giginet
PRO
2
430
Claude Codeログ基盤の構築
giginet
PRO
7
4.5k
Inside of Swift Export
giginet
PRO
1
3.3k
Swiftビルド弾丸ツアー - Swift Buildが作る新しいエコシステム
giginet
PRO
0
2.9k
SwiftでMCPサーバーを作ろう!
giginet
PRO
3
470
Creating Intuitive Developer Tool in Swift
giginet
PRO
0
1.6k
Mergeable Libraryで 高速なアプリ起動を実現しよう!
giginet
PRO
2
8.4k
5分でわかるExplicitly Built Modules
giginet
PRO
2
1.9k
Other Decks in Programming
See All in Programming
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
1
2k
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
300
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
200
仕様駆動開発の消費期限
watany
20
8.9k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
270
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
460
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
260
「人を評価する AI」の設計と実装
ryoyanara
0
240
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
420
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
For a Future-Friendly Web
brad_frost
183
10k
How to make the Groovebox
asonas
2
2.3k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
640
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
440
Crafting Experiences
bethany
1
260
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
210
Transcript
More Swift App Startup Time @giginet
@giginet • iOS Engineer @ Cookpad • ։ൃج൫ͬͯ·͢ • झຯɿήʔϜ։ൃ
• Contributor of fastlane
None
Agenda • ࠔ͍ͬͯΔ͜ͱ • Dynamic Linkerͱdyld 3 • LabͰฉ͍ͨ͜ͱ •
ىಈ࣌ؒͷޮՌతͳܭଌํ๏ • LabͰੜ͖Δʹ
ࠔ͍ͬͯΔ͜ͱ • Dynamic Framework͕͍
ࠔ͍ͬͯΔ͜ͱ • SwiftͷϥΠϒϥϦDynamic Frameworkͱͯ͠Ϧϯ Ϋ͞ΕΔ • Carthage • CocoaPods(use_frameworks!) •
૿͢ͱىಈ͕͘ͳΔ • ڥʹΑͬͯΫϥογϡ͢Δ
ཧ
ݱ࣮
Φεεϝηογϣϯ • App Startup Time: Past, Present, and Future •
https://developer.apple.com/videos/play/ wwdc2017/413/ • Optimizing App Startup Time • https://developer.apple.com/videos/play/ wwdc2016/406/
dyld 3 • ৽͍͠Dynamic Linker࡞ͬͯΔ • ࣮༻ஈ֊ʹͳͬͨΒϦϯΫ͕ΊͬͪΌૣ͘ͳ ΔΒ͍͠
Optimizing Startup Time • ىಈ࣌ؒߴԽͷݟͷηογϣϯ • ܭଌख๏ͱվળͷํ๏
Optimizing Startup Time Lab • ΊͬͪΌχονͳLab͕͔͋ͬͨΒฉ͖ʹ͍ͬ ͨ
LabͰฉ͍ͨ͜ͱ
Q. Dynamic FrameworkΛ૿ ͠·͘ΔͱΊͬͪΌ͘ͳͬ ͯࠔͬͯΔΜ͚ͩͲ૿͢ ͖Ͱͳ͍ʁ
A. ͤͳ
Q. Swiftͷݴޠػೳʹ namespaceͳ͍͠ɺ frameworkΘ͚ͳ͍ͱݫ͍͠ ͱࢥ͏Μ͚ͩͲ
A. ΫϥεʹprefixΛ͚ͭ· ͠ΐ͏
Q. dyld 3iOS 11ͰೖΔͷ ͔ʁ
A. ͳʹݴ͑Δ͜ͱͳ͍
• ۜͷؙͳ͍
ىಈ࣌ؒͷܭଌํ๏
1. InstrumentsΛ͏ • ʮApp Startup Time: Past, Present, and FutureʯͰհ͞ΕͯΔ
• Time Profiler • Static Initializer Call(iOS 11)
None
2. Instruments via CLI • ಉ͜͡ͱ͕ίϚϯυϥΠϯ͔ΒͰ͖Δ • instrumentsίϚϯυ • ͨͩ͠ɺग़ྗͨ͠σʔλGUIͰͳ͍ͱӾཡͰ
͖ͳ͍ʢύʔε͢Δํ๏ͳ͍ʣ • ৄ͘͠man instruments
$ instruments -t 'Time Profiler' -w ‘36AF1B72-C261-45BD- AE4A-6593D22F0A' ‘com.yourcompany.InitializeTimeProfiler' Instruments
Trace Complete (Duration : 11.811208s; Output : /Users/ giginet/Desktop/InitializeTimeProfiler/instrumentscli1.trace)
3. task_info + UI Test • task_infoͰCPU࣌ؒऔͬͯܭଌ͢Δͱྑ͍ͷ ͰʁͱݴΘΕͨ • didFinishLaunchingWithOptionsͰͷ࣌ؒΛ
औΔ
var info = mach_task_basic_info() var count = mach_msg_type_number_t(MemoryLayout.size(ofValue: info) /
MemoryLayout<integer_t>.size) _ = withUnsafeMutablePointer(to: &info) { infoPointer in return infoPointer.withMemoryRebound(to: integer_t.self, capacity: Int(count)) { (machPoin return task_info( mach_task_self_, task_flavor_t(TASK_BASIC_INFO), task_info_t(machPointer), &count ) } } print(info.system_time) print(info.user_time)
4. DYLD_PRINT_STATISTICS • ʮOptimizing App Startup TimeʯͰհ͞Ε ͯΔ • ͦΕͧΕͷͷҙຯηογϣϯΛݟΔ͜ͱ
None
Total pre-main time: 307.08 milliseconds (100.0%) dylib loading time: 213.98
milliseconds (69.6%) rebase/binding time: 39.27 milliseconds (12.7%) ObjC setup time: 25.78 milliseconds (8.3%) initializer time: 27.96 milliseconds (9.1%) slowest intializers : libSystem.dylib : 3.17 milliseconds (1.0%) libswiftCoreImage.dylib : 17.56 milliseconds (5.7%)
·ͱΊ • ͍ͷݱঢ়Ͳ͏͠Α͏ͳ͍ • ΞϓϦͷىಈ࣌ؒܭଌख๏ฉ͚ͨ • ࣗಈԽ͍ͨ͠ • Micro Framework
Architectureݬ • dyld 3Λ࠲͔ͯͭ͠͠ແ͍
See also • giginet/xcprofiler • https://github.com/giginet/xcprofiler
ΦϚέ LabͰੜ͖Δʹ
ΦϚέɿLabͰੜ͖Δʹ • ຊΛ࡞͍ͬͯ͘ • ʮΏͬ͘Γͬͯ͘ΕʯͱఝΛ͢ • ಉ͜͡ͱΛ2ਓҎ্ʹฉ͘
ຊΛ࡞͍ͬͯ͘ • ฉ͘͜ͱΛϦετԽɻจষ࡞จ͓ͯ͘͠ • ϝϞΛݟͤͳ͕Β࣭͢Δ
ʮΏͬ͘Γͬͯ͘Εʯͱ ఝΛ͢ • ѫࡰͨ͠Β߈ʮΏͬ͘Γͯ͘͠ΕཔΉʯ ͱ͔ݴ͓ͬͯ͘ͱେΏͬ͘Γͬͯ͘ΕΔ • ࠷ѱɺଧͪࠐΜͰΒ͏
ಉ͜͡ͱΛ2ਓҎ্ʹฉ͘ • ࣝྔʹ͕ࠩ͋Δ • ଞͷਓʹdelegate͞ΕΔ͜ͱ͕͋Δ • ͱΓ͋͑ͣಉ࣭͡Λผʑʹ͓ͯ͘͠ • ҧ͏ճ͕ಘΒΕΔ͜ͱ͋Δ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠