Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
370
Navigating Dependency Injection with Metro
l2hyunwoo
1
160
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
160
これならできる!個人開発のすゝめ
tinykitten
PRO
0
120
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
420
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
130
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
2
420
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
260
マスタデータ問題、マイクロサービスでどう解くか
kts
0
110
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
110
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
Fireside Chat
paigeccino
41
3.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
170
Producing Creativity
orderedlist
PRO
348
40k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
47k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
22
What's in a price? How to price your products and services
michaelherold
246
13k
First, design no harm
axbom
PRO
1
1k
The Cult of Friendly URLs
andyhume
79
6.7k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
290
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ΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ