$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The front-line of iOS app development at Hatena
Search
cockscomb
April 14, 2015
Programming
0
170
The front-line of iOS app development at Hatena
Presented at “【DeployGate x はてな】スマートフォンアプリ開発最前線”, 13 April 2015.
cockscomb
April 14, 2015
Tweet
Share
More Decks by cockscomb
See All by cockscomb
jq at the Shortcuts
cockscomb
1
2k
GraphQL放談
cockscomb
4
2.1k
GraphQL Highway
cockscomb
28
8.6k
吉田を支える技術
cockscomb
0
2.4k
コーポレートサイトを静的化してAmplify Consoleにデプロイする
cockscomb
0
3.4k
ユーザインターフェイスと非同期処理
cockscomb
5
2k
GUIアプリケーションの構造と設計
cockscomb
10
10k
イカリング2におけるシングルページアプリケーション
cockscomb
2
7.6k
あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい
cockscomb
1
7.5k
Other Decks in Programming
See All in Programming
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
150
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
360
エディターってAIで操作できるんだぜ
kis9a
0
700
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
380
AIコーディングエージェント(Gemini)
kondai24
0
200
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
310
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.3k
CSC305 Lecture 17
javiergs
PRO
0
340
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
Music & Morning Musume
bryan
46
7k
Embracing the Ebb and Flow
colly
88
4.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Automating Front-end Workflow
addyosmani
1371
200k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Building Applications with DynamoDB
mza
96
6.8k
Transcript
ͯͳʹ͓͚ΔiOSΞϓϦ։ൃ࠷લઢ MicroframeworksΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ
cockscomb
cockscomb • גࣜձࣾͯͳɺΞϓϦέʔγϣϯΤϯδχΞ • iOS/Android/αʔόʔαΠυ • WATCH SPORT 42mm
Space Gray Aluminum Case with Black Sport Band
ͯͳʹ͓͚ΔiOSΞϓϦ։ൃ࠷લઢ MicroframeworksΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ
࠷લઢ • Swift • Microframeworks • Automation
Swift
Swift • ܕ҆શ • ߴ (?) • Ϟμϯͳݴޠػೳ
ͯͳʹ͓͚ΔSwift • ৽͍͠ίʔυશͯSwift • ։ൃதͷΞϓϦSwift͚ͩͰॻ͔Ε͍ͯΔ • ࣾϥΠϒϥϦ΄ͱΜͲSwiftʹҠߦ
Swift͍͍ͱ͜Ζ • දݱྗ͕๛͔ • ܕ, δΣωϦΫε, Ϋϩʔδϟ, ߴ֊ؔ • ؆ܿ
• ܕਪ, Ϋϩʔδϟ • SwiftͷݴޠػೳΛ׆͔ͤΔઃܭ͕ඞཁ
SwiftΛ׆͔͢ • ܕΛ׆༻͢Δ • ܕύϥϝʔλͳͲͰใΛ૿͢ • Enum͕͍͍͢ • Objective-Cͷಈతͳಛੑʹґଘ͠ͳ͍
SwiftࠔΓϙΠϯτ • πʔϧνΣʔϯ͕͍͍͍ͭͯͳ͍ • Xcode, AppCode • ίϯύΠϧ͕গ͍͠ • Swiftͷਐาʹ͍͚ͭͳ͍
• Circle CI
Swiftͷকདྷͷظ • Swift 1.2 • Swiftʹ߹ΘͤͨFoundationͷ֦ு • πʔϧνΣʔϯͷਐา
Microframeworks
–James Lewis and Martin Fowler, Microservices “In short, the microservice
architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.”
View View Controller Model Foundation UIKit
Frameworks
Frameworks ໊લۭؒΛ࣋ͭ ΞΫηεཧͷ୯Ґ ݸผʹίϯύΠϧ͞ΕΔ όϯυϧ͕͍ͯ͠Δ
Authenticator.framework APIClient.framework AwesomeKit.framework AFNetworking.framework AwesomeApp AwesomeApp.bundle AwesomeToday.appex …
Developing frameworks • ୯ମςετͰಈ࡞Λ֬ೝ • CIαʔόʔͷςετͰಈ࡞Λอূ (Jenkins) • ґଘΛཧ •
CocoaPods (>= 0.36) • Carthage
Pros • ϑϨʔϜϫʔΫͷશͯͷϝϦοτ • ݎ͍ެ։ΠϯλʔϑΣʔε • υϝΠϯຖͷ໌ࣔతͳ • ։ൃʹςετ͕ඞཁ •
ՄೳͳݶΓϓϥοτϑΥʔϜʹඇґଘ
Cons • ϞϊϦγοΫͳํ͕ॊೈ • iOS 7ΛαϙʔτͰ͖ͳ͍
Automation
OS X Server
Jenkins
What’s been automated? • ୯ମςετͷ࣮ߦ • ϕʔλ൛ͷϏϧυͱ • ਃ༻όΠφϦͷϏϧυ •
εΫϦʔϯγϣοτͷऔಘ
Why automated? • ࠶ݱੑͷ୲อ • ͍ͭͰςετ͕௨ΓϏϧυͰ͖Δ͜ͱΛอূ • ଵ͚͍ͨ • ख࡞ۀͰ͕ΜΔͱർΕΔ
• 3.5/4.0/4.7/5.5/9.7 inchͷσΟεϓϨΠͰ 5छྨͣͭͷεΫϦʔϯγϣοτࡱΔͷർΕΔ
XCJobs require 'XCJobs' XCJobs::Test.new do |t| t.workspace = 'HatenaBlog'
t.scheme = 'HatenaBlogTests' t.configuration = 'Debug' t.add_destination('name=iPhone 6,OS=8.2') t.formatter = 'xcpretty -c -r junit' end
XCJobs #!/bin/sh -e bundle install --path vendor/bundle bundle exec
pod install bundle exec rake build:archive bundle exec rake build:export bundle exec rake distribute:deploygate
snapshot • snapshot gemΛ͏ • UIAutomationͷΈΛ͍ͬͯΔ
snapshot devices([ "iPhone 6", "iPhone 6 Plus", "iPhone 5", "iPhone
4s", "iPad Air", ]) languages([ 'ja' ]) screenshots_path "./screenshots" js_file './snapshot/snapshot.js' scheme 'HatenaBlog' project_path './HatenaBlog.xcworkspace'
snapshot #import "SnapshotHelper.js" var target = UIATarget.localTarget(); var app =
target.frontMostApp(); var window = app.mainWindow(); target.setDeviceOrientation( UIA_DEVICE_ORIENTATION_PORTRAIT); target.delay(1) captureLocalizedScreenshot("1-Dashboard") window.tableViews()[0].cells()[0].tap(); target.delay(1) captureLocalizedScreenshot("2-EntryBrowser")
࠷લઢ • Swift • Microframeworks • Automation
ͯͳʹ͓͚ΔiOSΞϓϦ։ൃ࠷લઢ MicroframeworksΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ