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
190
0
Share
The front-line of iOS app development at Hatena
Presented at “【DeployGate x はてな】スマートフォンアプリ開発最前線”, 13 April 2015.
cockscomb
April 14, 2015
More Decks by cockscomb
See All by cockscomb
jq at the Shortcuts
cockscomb
1
2.1k
GraphQL放談
cockscomb
4
2.1k
GraphQL Highway
cockscomb
28
8.8k
吉田を支える技術
cockscomb
0
2.5k
コーポレートサイトを静的化してAmplify Consoleにデプロイする
cockscomb
0
3.5k
ユーザインターフェイスと非同期処理
cockscomb
5
2k
GUIアプリケーションの構造と設計
cockscomb
10
10k
イカリング2におけるシングルページアプリケーション
cockscomb
2
7.7k
あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい
cockscomb
1
7.6k
Other Decks in Programming
See All in Programming
New "Type" system on PicoRuby
pocke
1
420
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
210
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
120
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
130
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
660
Oxlintのカスタムルールの現況
syumai
5
970
Claspは野良GASの夢をみるか
takter00
0
150
OSもどきOS
arkw
0
380
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
340
関係性から理解する"同一性"の型用語たち
pvcresin
2
630
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.2k
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Scaling GitHub
holman
464
140k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
Mobile First: as difficult as doing things right
swwweet
225
10k
HDC tutorial
michielstock
2
680
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
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ΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ