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
みんな使おう! AWS Device Farm
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Sato Takeshi
February 23, 2017
Technology
840
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
みんな使おう! AWS Device Farm
GEEK GARAGE iOS vol1
https://geekgarage.connpass.com/event/50929/
の資料です。
Sato Takeshi
February 23, 2017
More Decks by Sato Takeshi
See All by Sato Takeshi
まさかのバグ!SwiftUIプレビューでハマった国際化対応の落とし穴
satotakeshi
0
430
Swift愛好会 の 思い出
satotakeshi
0
140
Xcode 15, Swift 5.9で変わる開発体験
satotakeshi
3
3.1k
Meet passkeys
satotakeshi
2
430
What's new in Vision
satotakeshi
0
2.4k
Swift Concurrency入門
satotakeshi
11
5.6k
複数端末のつらさを乗り越えてiOS UITestを実行
satotakeshi
1
480
Xcodegenを個人アプリに導入
satotakeshi
3
930
SwiftUIで作る開閉式メニュー
satotakeshi
2
3.3k
Other Decks in Technology
See All in Technology
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
260
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
130
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
180
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
590
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
110
Fabricをフル活用する AI Agent Hub -製造業特化AIエージェントの設計
iotcomjpadmin
0
150
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
490
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
150
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
220
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
150
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
220
toB プロダクトから見たWAF
tokai235
0
250
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
How to build a perfect <img>
jonoalderson
1
5.7k
Building AI with AI
inesmontani
PRO
1
1.1k
Paper Plane
katiecoart
PRO
1
52k
The Curious Case for Waylosing
cassininazir
1
400
Between Models and Reality
mayunak
4
350
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
570
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Building an army of robots
kneath
306
46k
Navigating Team Friction
lara
192
16k
Transcript
ΈΜͳ͓͏ʂ AWS Device Farm 20172݄23 ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23
1
ࣗݾհ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 2
ࠤ౻߶࢜(@hatakenokakashi) SIاۀͷอकӡ༻͔ΒɺελʔτΞοϓͷCTOΛܦͯɺ MAMORIOגࣜձࣾʹ2݄͔ΒiOSΤϯδχΞΛ͍ͯ͠·͢ɻ RailsͱJavaScript(ES6)ͱGolangͱ༑ୡʹͳΔͷ͕ࠓͷඪɻ ίʔώʔͱϛϯτςΟ͕͖ɻ ϒϩάɿhttp://blog.personal-factory.com/ ΈΜͳ͓͏ʂ AWS Device Farm
2017/2/23 3
ςετͭΒ͍ͬ͢ΑͶ! ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 4
։ൃͲΜͲΜਐΉ ͦͷͨͼʹશΛςετ͠ͳ͖Ό͍ ͚ͳ͍ɻ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 5
ͦ͜ʹཱ͔ͪΔ • ༻ҙ͕େม • ૿େ͢Δςετ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23
6
Ͳ͏͠Α͏(´ɾТɾʆ) ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 7
ͦ͜ͰԞ͞Μʂ Device Farmͷग़൪Ͱ͢ʂ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 8
Device FarmͬͯԿʁ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 9
Device Farm • AWSͷεϚϑΥ&WebΞϓϦ͚ςετࣗಈԽαʔϏε • iOSɺAndroid֤֤OSόʔδϣϯΛऔΓἧ͑Δ • ࠷ॳͷ߹ܭ250·Ͱແྉɻޙ0.17 USD/ ΈΜͳ͓͏ʂ
AWS Device Farm 2017/2/23 10
๛ͳछྨ&OSόʔδϣϯ • iPhone4s-iPhone7PlusͷiOS7.1͔ΒiOS10·Ͱ • iPad2/iPad miniୈҰੈ/iPad Pro • Android΄΅ओཁͳΛͦΖ͍͑ͯΔʢͨͩ͠άϩʔόϧ൛) •
AndroidຊΩϟϦΞ͕ΧελϚΠζ͍ͯ͠ΔͷͰ ҙʂ https://aws.amazon.com/jp/device-farm/device-list/ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 11
ͲΜͳςετ͕Ͱ͖Δ͔ʁ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 12
Fuzz • DeviceFarmʹ༧Ί༻ҙ͞Ε͍ͯΔϑϨʔϜϫʔΫ • σλϥϝʹUIΞΫγϣϯΛ࣮ߦ͢Δɻ • ϞϯΩʔςετͱͯ͠ΞϓϦ͕མͪͳ͍͔Ͳ͏͔νΣοΫͰ ͖Δɻ ΈΜͳ͓͏ʂ AWS
Device Farm 2017/2/23 13
Appium • Java JUnitɺJava TestNGɺPython • iOS/AndroidʹରԠ͢ΔςετϑϨʔϜϫʔΫɻ • Appiumࣗମ༷ʑͳݴޠͰಈ͚͘ͲDeviceFarmͰରԠ͠ ͍ͯΔͷJavaͱPythonͷΈɻ
ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 14
Calabash • Xamarin͕ࣾϝϯςϯφεΛ͍ͯ͠ΔΦʔϓϯιʔεςετϑ ϨʔϜϫʔΫ • iOS/AndroidʹରԠ • RubyͰಈ͘ ΈΜͳ͓͏ʂ AWS
Device Farm 2017/2/23 15
UI Automation(Xcode7·Ͱ) • Xcodeʹ͍ͭͯ͘ΔInstrumentsʹଐ͢ΔςετϑϨʔϜϫ ʔΫ • iOSʹରԠ • JavaScriptͰiOSΞϓϦͷUIΛૢ࡞Ͱ͖Δɻ •
Xcode8͔ΒInstruments͔Βআ͞Ε༻Ͱ͖ͳ͍ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 16
XCTest (XCUI ͓Αͼ KIF ΛؚΉ) • Xcodeʹଐ͢ΔiOSΞϓϦͷςετϑϨʔϜϫʔΫ • Ϣχοτςετ͕XCTest •
UIςετΛ͢ΔʹXCUI ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 17
AndroidͷςετϑϨʔϜϫʔΫ • Instrumentation • UI Automator • JUnit • Espresso
• Robotium ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 18
ࢼͯ͠ΈΔ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 19
XCUIͰͬͯΈΔ 1. ΞϓϦΛϏϧυ͢Δ 2. XCUIΛϏϧυ͢Δ 3. Payload.ipaϑΝΠϧΛͭ͘Δ 4. Device FarmʹΞϓϦͱςετΛొ࣮͠ߦ
5. ςετ݁ՌΛΈΔ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 20
ΞϓϦΛϏϧυ͢Δ XcodeͷProduct -> ArchiveͰΞʔΧΠ ϒ OrganaizerϖʔδͰExport ΈΜͳ͓͏ʂ AWS Device Farm
2017/2/23 21
Save for Development DeploymentΛ બ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23
22
Device SupportΛExport one app for all compatible devicesʹબ ΈΜͳ͓͏ʂ AWS
Device Farm 2017/2/23 23
XCUIͰςετίʔυΛॻ͘ import XCTest class MAMORIOUITests: XCTestCase { override func setUp()
{ super.setUp() continueAfterFailure = false XCUIApplication().launch() } func test1Tutorial() {} } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 24
XCUIΛϏϧυ͢Δ Product > Build For > Testing ΈΜͳ͓͏ʂ AWS Device
Farm 2017/2/23 25
[UITestName]-Runner.appΛऔಘ ϏϧυύεΛݟΔ /Users/<UserName>/Library/ Developer/Xcode/DerivedData/ <App Name>-xxxxxxxxxxxxxxxxx/ Build/Products/Debug-iphoneos/ ΈΜͳ͓͏ʂ AWS Device
Farm 2017/2/23 26
ιʔεҰཡͷ Products >ɹ[APPNAME].app ΛӈΫϦοΫͰFinderΛ։͍ͯྑ͍ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 27
Payload.ipaϑΝΠϧΛͭ͘Δ 1. PayloadσΟϨΫτϦΛ࡞Γ[UITestName]-Runner.appΛೖΕ Δɻ 2. ͦͷޙʹzipͰPayloadσΟϨΫτϦΛѹॖ͢Δɻ 3. Payload.zipΛPayload.ipaʹϦωʔϜ͢Δɻ ΈΜͳ͓͏ʂ AWS
Device Farm 2017/2/23 28
mkdir Payload mv [UITestName]-Runner.app Payload zip Payload.zip Payload mv Payload.zip
Payload.ipa ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 29
Device FarmʹΞϓϦͱςε τΛొ࣮͠ߦ Create a new project ΛΫϦοΫ Create a
new run ΛΫϦοΫ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 30
ΞϓϦͷipaϑΝΠϧ ΛΞοϓϩʔυ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 31
XCTest UIΛબΜͰ Payload.ipaΛΞοϓ ϩʔυ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 32
DeviceΛબͼ·͢ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 33
DeviceͷৄࡉΛ͠·͢ ϩέʔγϣϯΛJapanʹ͢Ε͍͍ͱࢥ ͏ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 34
DeviceͷλΠϜΞ τઃఆΛ͢Δ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 35
ςετ݁ՌΛΈΔ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 36
DEMO DeviceFarmͷίϯιʔϧ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 37
XCUIͷઆ໌ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 38
XCUIͷઆ໌ • XCUIApplicationͰΞϓϦऔಘͯ͠ • XCUIElementQueryͰUI෦Λݕࡧ ͯ͠ • XCUIElementͰλοϓͳͲUIૢ࡞Λ ͢Δ let
app = XCUIApplication() app.buttons["startButton"].tap() ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 39
XCUIElementQueryͰݕࡧ Ͱ͖ΔΑ͏ʹ accessibilityIdentifierΛઃఆ͠·͠ΐ ͏ɻ Storyboard͜Ε ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23
40
ίʔυͪ͜Β let title : UILabel = UILabel.init(frame:CGRect(x:0 ,y:0, width:100, height:90))
title.isAccessibilityElement = true title.accessibilityIdentifier = "logoutLabel" ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 41
XCUIͰTips 1. γεςϜΞϥʔτͷλοϓํ๏(ϓογϡ௨ڐՄɺϩέʔγ ϣϯڐՄ) 2. webαΠτͷදࣔ(openͰ։͘ͱΕͳ͍ɻwebViewͰදࣔ ͠Α͏) 3. XCUIͷςετ࣮ߦॱ(ϝιου໊ͷιʔτ) 4.
Device Farmͷ࣮ߦॱ(ϝιου࣮ͷԼ͔Β࣮ߦ͞ΕΔ) ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 42
γεςϜΞϥʔτͷλοϓํ ๏(ϓογϡ௨ڐՄɺϩέʔ γϣϯڐՄ) ͜ΕͩΊ let app = XCUIApplication() let notifiAlert
= app.alerts["“MAMORIO”௨Λૹ৴͠·͢ɻΑΖ͍͠Ͱ͔͢?"] let comfirmButton = notifiAlert.buttons["ڐՄ"] if comfirmButton.exists { comfirmButton.tap() } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 43
addUIInterruptionMonitor ϝιουΛ࣮ߦ͢Δඞཁ͕͋Δ //͜Ε͕ඞཁ addUIInterruptionMonitor(withDescription: "notificationAlert", handler: { alert in if
alert.buttons["ڐՄ"].exists { alert.buttons["ڐՄ"].tap() return true } if alert.buttons["Allow"].exists { alert.buttons["Allow"].tap() return true } return false }) app.tap() ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 44
webαΠτͷදࣔ UIApplicationͷopenͰSafariΞϓϦΛ։͘ͱΕͳ͍ɻ func linkURL(string :String) { if let url =
URL(string:string) { if #available(iOS 10.0, *) { UIApplication.shared.open(url) } else { UIApplication.shared.openURL(url) } } } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 45
WebViewͰදࣔ͠Α͏ɻ if let url = URL(string:string) { if let rootViewController
= self.keyWindow?.rootViewController { let safariViewController = SFSafariViewController.init(url: url) rootViewController.present(safariViewController, animated: true, completion: nil) } } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 46
XCUIͷςετ࣮ߦॱ XCTestCaseͷςετͷ࣮ߦॱϝιου໊ͷঢॱɻ ॳճىಈϢʔβʔొͳͲ࣮ߦॱ͕େࣄʹͳΔ߹ʹؾΛͭ ͚Δɻ func test4PasswordReset(){} func test3RegisterUser(){} func test2TemporaryLogin(){}
func test1Tutorial() {} ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 47
Device Farmͷ࣮ߦॱ ϝιου࣮ॱͷԼ͔Β࣮ߦ͞ΕΔɻ ϝιου໊ͷঢॱͰͳ͍ͷͰҙʂ func test4PasswordReset(){} func test3RegisterUser(){} func test2TemporaryLogin(){}
func test1Tutorial() {} ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 48
Α͍ςετϥΠϑΛա͝ ͠·͠ΐ͏✨ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 49