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.8k
GraphQL放談
cockscomb
4
2k
GraphQL Highway
cockscomb
28
8.4k
吉田を支える技術
cockscomb
0
2.3k
コーポレートサイトを静的化して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
Go Modules: From Basics to Beyond / Go Modulesの基本とその先へ
kuro_kurorrr
0
110
無関心の谷
kanayannet
0
160
〜可視化からアクセス制御まで〜 BigQuery×Looker Studioで コスト管理とデータソース認証制御する方法
cuebic9bic
3
320
從零到一:搭建你的第一個 Observability 平台
blueswen
1
780
SODA - FACT BOOK
sodainc
1
700
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
140
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
650
💎 My RubyKaigi Effect in 2025: Top Ruby Companies 🌐
yasulab
PRO
1
130
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
730
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
Rails産でないDBを Railsに引っ越すHACK - Omotesando.rb #110
lnit
1
160
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
140
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
123
52k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
4 Signs Your Business is Dying
shpigford
183
22k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Code Reviewing Like a Champion
maltzj
524
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
106
19k
Thoughts on Productivity
jonyablonski
69
4.7k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
The Invisible Side of Design
smashingmag
299
50k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
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ΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ