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
LINE Developer Meet Up #2
Search
Yosuke Ishikawa
March 26, 2014
Technology
710
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
250
アプリを起動せずにアプリを開発して品質と生産性を上げる
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.8k
実践クライアントサイドSwift
ishkawa
23
4.5k
JSON-RPC on APIKit
ishkawa
5
69k
Other Decks in Technology
See All in Technology
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
570
関東Kaggler会発表資料
takoi
1
220
日本語を汚染するAI
route250
1
120
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
220
TypeScript入門 2026
recruitengineers
PRO
3
560
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.3k
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
190
第3回しろおびセキュリティスポンサーセッション
log0417
0
170
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.6k
モダンフロントエンド 開発研修
recruitengineers
PRO
4
610
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The Pragmatic Product Professional
lauravandoore
37
7.4k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Rails Girls Zürich Keynote
gr2m
96
14k
Utilizing Notion as your number one productivity tool
mfonobong
4
530
Into the Great Unknown - MozCon
thekraken
41
2.7k
How to train your dragon (web standard)
notwaldorf
97
6.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
Balancing Empowerment & Direction
lara
6
1.2k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
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ΤϯδχΞΛืू͍ͯ͠·͢