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
LINE Developer Meet Up #2
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yosuke Ishikawa
March 26, 2014
Technology
720
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LINE Developer Meet Up #2
Yosuke Ishikawa
March 26, 2014
More Decks by Yosuke Ishikawa
See All by Yosuke Ishikawa
効率的な開発手段として VRTを活用する
ishkawa
1
260
アプリを起動せずにアプリを開発して品質と生産性を上げる
ishkawa
0
4.6k
Achieving Testability in Presentation Layer
ishkawa
4
4k
Introducing Wire: Dependency Injection by Code Generator
ishkawa
12
1.4k
Declarative UICollectionView
ishkawa
28
8.6k
Nuxt.jsが掲げる"Universal Vue.js Applications"とは何者か
ishkawa
10
2.9k
Static Dependency Injection by Code Generation
ishkawa
15
6.9k
実践クライアントサイドSwift
ishkawa
23
4.5k
JSON-RPC on APIKit
ishkawa
5
70k
Other Decks in Technology
See All in Technology
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
570
特殊変数大全
dak2
0
120
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
540
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
160
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.4k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
750
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
メルカリにおけるAI時代の高速プロトタイピング基盤「Arca」
ryotarai
4
2.4k
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
290
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
280
ほんとうの信頼性はヒーローが死んでからはじまる / True reliability begins after the hero dies
vtryo
0
120
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
710
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Documentation Writing (for coders)
carmenintech
77
5.5k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Bash Introduction
62gerente
615
220k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Balancing Empowerment & Direction
lara
6
1.3k
Transcript
iOS Development in LINE Corp. @_ishkawa
None
None
None
• iOSΤϯδχΞ4 • খ͞Ίͷձࣾ → େ͖Ίͷձࣾ
• ίϯϙʔωϯτͷ࠶ར༻ • ձࣾͰͷiOSΤϯδχΞͷׂ ࠓͷ
• ίϯϙʔωϯτͷ࠶ར༻ • ձࣾͰͷiOSΤϯδχΞͷׂ ࠓͷ LINEʹiOSΤϯδχΞ͕ͨ͘͞Μ͍ΔͷͰ
• ίϯϙʔωϯτͷ࠶ར༻ • ձࣾͰͷiOSΤϯδχΞͷׂ ࠓͷ LINEʹඇΤϯδχΞͨ͘͞Μ͍ΔͷͰ
None
ίϯϙʔωϯτʁ
[SVProgressHUD show];
• ؆୯ʹ࣮Ͱ͖ͦ͏ʹݟ͑Δ • ࡉ෦·ͰϚδϝʹͭ͘Δͷେม • SVProgressHUD800ߦ
֤ʑ͕ಠཱʹಉ͡ͷΛ ͭ͘Δͷ͍ͬͨͳ͍ 1ॻ͍ͨΒଞͷਓ ͑ΔΑ͏ʹ͠Α͏ʂ
• ։ൃ࣌ؒͷॖ • ࣭ͷ্ • ϝϯςφϯείετͷ੍ ϝϦοτ
͍ͭॻ͍ͯΔͷʁ
ΞϓϦݻ༗Ͱͳ͍ίʔυΛ ॻ͍ͯͨΒͦͷ෦ΛΓग़͢
ྫ: ISCyclicPagesView https://github.com/ishkawa/ISCyclicPagesView
• ແݶεΫϩʔϧόφʔ • 22ίϛοτ • 200ߦ
ΞϓϦͷίʔυͱಉ͡ॻ͖ํʁ
ΞϓϦͷίʔυͱಉ͡ॻ͖ํʁ
• ඞཁेͳΠϯλʔϑΣʔε • ଞͷ෭࡞༻Λؚ·ͳ͍ ཁ͢ΔʹߦّΑ͘
• ඞཁेͳΠϯλʔϑΣʔε • ଞͷ෭࡞༻Λؚ·ͳ͍
มߋՄೳͳϓϩύςΟΛߜΔ @interface ISCyclicPagesView : UIScrollView ! @property (nonatomic, readonly) NSInteger
currentPage; @property (nonatomic, readonly) NSInteger numberOfPages; @property (nonatomic, assign) id <ISCyclicPagesViewDataSource> dataSource; @property (nonatomic, assign) id <ISCyclicPagesViewDelegate> delegate; ! - (void)reloadData; - (void)scrollToPage:(NSInteger)page direction:(NSInteger)direction animated:(BOOL)animated; ! - (NSInteger)pageForView:(UIView *)view; - (UIView *)viewForPage:(NSInteger)page; ! @end
֎͔ΒݺΕ͍͍ͯϝιουͷΈΛެ։ @interface ISCyclicPagesView : UIScrollView ! @property (nonatomic, readonly) NSInteger
currentPage; @property (nonatomic, readonly) NSInteger numberOfPages; @property (nonatomic, assign) id <ISCyclicPagesViewDataSource> dataSource; @property (nonatomic, assign) id <ISCyclicPagesViewDelegate> delegate; ! - (void)reloadData; - (void)scrollToPage:(NSInteger)page direction:(NSInteger)direction animated:(BOOL)animated; ! - (NSInteger)pageForView:(UIView *)view; - (UIView *)viewForPage:(NSInteger)page; ! @end
෦ॲཧ༻ͷϓϩύςΟެ։͠ͳ͍ @interface ISCyclicPagesView () ! @property (nonatomic) NSInteger currentPage; @property
(nonatomic) NSInteger numberOfPages; @property (nonatomic, strong) NSArray *reusableViews; ! @end
෦ॲཧ༻ͷఆެ։͠ͳ͍ static NSInteger const ISReusableViewsCount = 3;
• ඞཁेͳΠϯλʔϑΣʔε • ଞͷ෭࡞༻Λؚ·ͳ͍
Өڹൣғͷେ͖͍֦ு view.frame = CGRectMake(10.f, view.frame.origin.x, view.frame.size.width, view.frame.size.height); view.x = 10.f;
Өڹൣғͷେ͖͍֦ு @implementation UIView (Additions) ! - (CGFloat)x { return self.frame.origin.x;
} ! - (void)setX:(CGFloat)x { CGRect frame = self.frame; frame.origin.x = x; self.frame = frame; } ! @end
App Library x setX: x setX: ͲͪΒͷx, setX:ͷ࣮͕࣮ߦ͞ΕΔͷ͔ෆఆ
Өڹൣғͷେ͖͍֦ு @implementation UIView (Additions) ! - (CGFloat)x { return self.frame.origin.x;
} ! - (void)setX:(CGFloat)x { CGRect frame = self.frame; frame.origin.x = x; self.frame = frame; } ! @end
ϥΠϒϥϦ֎ͷมߋΛͳΔ͘ආ͚Δ [UIView appearance].backgroundColor = [UIColor blueColor]; ! [UIApplication sharedApplication].statusBarHidden =
YES;
Ͳ͜ͰίʔυΛެ։͢Δ͔ʁ
None
ձࣾݻ༗ͷίʔυ߹
Πϯετʔϧߋ৽Λ ؆୯ʹ͢Δʹʁ
http://cocoapods.org
Demo
ϥΠϒϥϦΛॻ͍ͨΒ CocoaPodsʹରԠͤ͞Α͏
ϥΠϒϥϦΛॻ͍ͨΒ podspecΛॻ͜͏
Pod::Spec.new do |s| s.name = "ISDiskCache" s.version = "0.1.1" s.platform
= :ios, "4.3" s.summary = "LRU disk cache for iOS." s.homepage = "https://github.com/ishkawa/ISDiskCache" s.source_files = "ISDiskCache/**/*.{h,m}" s.requires_arc = true s.author = { "Yosuke Ishikawa" => "
[email protected]
" } s.source = { :git => "https://github.com/ishkawa/ISDiskCache.git", :tag => "0.1.1" } s.license = { :type => "MIT", :text => <<-LICENSE ... LICENSE } end podspec
podspecͷஔ͖ʁ
• ϥΠϒϥϦͷϦϙδτϦ • CocoaPodsͷϦϙδτϦ • In HouseͷϦϙδτϦ
• ϥΠϒϥϦͷϦϙδτϦ • CocoaPodsͷϦϙδτϦ • In HouseͷϦϙδτϦ
None
None
pod 'ISDiskCache', :git => ‘https://github.com/ishkawa/ISDiskCache.git', :tag => '0.1.1' Podfile
• ϥΠϒϥϦͷϦϙδτϦ • CocoaPodsͷϦϙδτϦ • In HouseͷϦϙδτϦ
CocoaPods/Specs ͜͜ʹొ͞Ε͍ͯΕ ࣗಈతʹօͷखݩʹೖΔ podspec Pull Request https://github.com/CocoaPods/Specs
https://github.com/CocoaPods/Specs/pull/2780
pod 'ISDiskCache', '~> 0.1.1' Podfile
• ϥΠϒϥϦͷϦϙδτϦ • CocoaPodsͷϦϙδτϦ • In HouseͷϦϙδτϦ
CocoaPods/Specs ಠࣗͷpodspecஔ͖ΛՃͰ͖Δ LINE-Corp/Specs
None
pod repo add in-house https://github.com/ishkawa/CocoaPodsSpecs.git Command
pod 'ISDiskCache', '~> 0.1.1' Podfile
None
LINEͰͷίʔυͷ࠶ར༻ͷ·ͱΊ
• ͔ͤͬ͘ॻ͍ͨίϯϙʔωϯτෳνʔϜͰ࠶ར༻ • ΞϓϦݻ༗Ͱͳ͚ΕϥΠϒϥϦͱͯ͠Γग़ͯ͠ެ։ • ϥΠϒϥϦͷίʔυߦّྑ͘ॻ͘ • CocoaPodsʹରԠͤͯ͞ར༻͘͢͢͠Δ
LINEͰGitHub Enterpriseͱ CocoaPodsΛར༻ͯ͠ ίʔυͷ࠶ར༻ΛਐΊ͍ͯ·͢
• Pull RequestͰίʔυϨϏϡʔ • Ϣχοτςετͷಋೖ ࠷ۙࣾʹ͜ΜͳྲྀΕ͋Γ·͢
None
iOSΤϯδχΞͷׂ = iOSΞϓϦͷ։ൃ
ϓϩάϥϜΛॻ͘ + ͦͷଞଟ
αʔϏεઃܭ UIઃܭ UIϓϩτλΠϐϯά ςετέʔεͷ࡞ શόʔδϣϯͰಈ࡞֬ೝ ϞϯΩʔςετ ར༻౷ܭͷઃܭ Dev Centerͷ࡞ۀ iTunes
Connectͷ࡞ۀ
ϓϩάϥϜΛॻ͘ + ͦͷଞଟ ͬͪ͜ʹूத͍ͨ͠
• اը/σβΠϯઌߦͷϑϩʔ • खް͍QA LINEͷಛ
• اը/σβΠϯઌߦͷϑϩʔ • खް͍QA LINEͷಛ
αʔϏεઃܭ UIσβΠϯ ࣮ QA ͜͜ͰࢀՃ͢Δ
• اը/σβΠϯઌߦͷϑϩʔ • खް͍QA LINEͷಛ
• QAઐ෦͕୲ • ෳਓ͕શόʔδϣϯͷOSͰςετ • ࠶ݱঢ়گΛৄࡉʹใࠂͯ͠Β͑Δ • ༧ͷ3ഒͷෆ۩߹Λൃݟͯ͠Β͑Δ ※ ݸਓͷײͰ͢
ϦϦʔεલޙͷετϨε͕͔ͳΓܰݮ͞ΕΔ
LINEʹiOSΤϯδχΞ͕ ։ൃʹूதͰ͖Δڥ͕͍ͬͯ·͢
LINEͰiOSΤϯδχΞΛืू͍ͯ͠·͢