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
The front-line of iOS app development at Hatena
Search
cockscomb
April 14, 2015
Programming
0
160
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
1.9k
GraphQL放談
cockscomb
4
2k
GraphQL Highway
cockscomb
28
8.5k
吉田を支える技術
cockscomb
0
2.4k
コーポレートサイトを静的化してAmplify Consoleにデプロイする
cockscomb
0
3.4k
ユーザインターフェイスと非同期処理
cockscomb
5
1.9k
GUIアプリケーションの構造と設計
cockscomb
10
10k
イカリング2におけるシングルページアプリケーション
cockscomb
2
7.5k
あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい
cockscomb
1
7.5k
Other Decks in Programming
See All in Programming
新世界の理解
koriym
0
130
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
1.6k
Comparing decimals in Swift Testing
417_72ki
0
170
リッチエディターを安全に開発・運用するために
unachang113
1
380
What's new in Adaptive Android development
fornewid
0
140
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
2.1k
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
5
590
0から始めるモジュラーモノリス-クリーンなモノリスを目指して
sushi0120
0
280
Reactの歴史を振り返る
tutinoko
1
180
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
segadevtech
3
860
変化を楽しむエンジニアリング ~ いままでとこれから ~
murajun1978
0
720
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
GitHub's CSS Performance
jonrohan
1031
460k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
The Invisible Side of Design
smashingmag
301
51k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
How STYLIGHT went responsive
nonsquared
100
5.7k
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ΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ