Slide 1

Slide 1 text

͸ͯͳʹ͓͚ΔiOSΞϓϦ։ൃ࠷લઢ MicroframeworksΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ

Slide 2

Slide 2 text

cockscomb

Slide 3

Slide 3 text

cockscomb • גࣜձࣾ͸ͯͳɺΞϓϦέʔγϣϯΤϯδχΞ • iOS/Android/αʔόʔαΠυ •  WATCH SPORT
 42mm Space Gray Aluminum Case with Black Sport Band

Slide 4

Slide 4 text

͸ͯͳʹ͓͚ΔiOSΞϓϦ։ൃ࠷લઢ MicroframeworksΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ

Slide 5

Slide 5 text

࠷લઢ • Swift • Microframeworks • Automation

Slide 6

Slide 6 text

Swift

Slide 7

Slide 7 text

Swift • ܕ҆શ • ߴ଎ (?) • Ϟμϯͳݴޠػೳ

Slide 8

Slide 8 text

͸ͯͳʹ͓͚ΔSwift • ৽͍͠ίʔυ͸શͯSwift • ։ൃதͷΞϓϦ͸Swift͚ͩͰॻ͔Ε͍ͯΔ • ࣾ಺ϥΠϒϥϦ΋΄ͱΜͲSwiftʹҠߦ

Slide 9

Slide 9 text

Swift͍͍ͱ͜Ζ • දݱྗ͕๛͔ • ܕ, δΣωϦΫε, Ϋϩʔδϟ, ߴ֊ؔ਺ • ؆ܿ • ܕਪ࿦, Ϋϩʔδϟ • SwiftͷݴޠػೳΛ׆͔ͤΔઃܭ͕ඞཁ

Slide 10

Slide 10 text

SwiftΛ׆͔͢ • ܕΛ׆༻͢Δ • ܕύϥϝʔλͳͲͰ৘ใΛ૿΍͢ • Enum͕࢖͍΍͍͢ • Objective-Cͷಈతͳಛੑʹґଘ͠ͳ͍

Slide 11

Slide 11 text

SwiftࠔΓϙΠϯτ • πʔϧνΣʔϯ͕௥͍͍͍ͭͯͳ͍ • Xcode, AppCode • ίϯύΠϧ͕গ͠஗͍ • Swiftͷਐาʹ௥͍͚ͭͳ͍ • Circle CI

Slide 12

Slide 12 text

Swiftͷকདྷ΁ͷظ଴ • Swift 1.2 • Swiftʹ߹ΘͤͨFoundationͷ֦ு • πʔϧνΣʔϯͷਐา

Slide 13

Slide 13 text

Microframeworks

Slide 14

Slide 14 text

–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.”

Slide 15

Slide 15 text

View View Controller Model Foundation UIKit

Slide 16

Slide 16 text

Frameworks

Slide 17

Slide 17 text

Frameworks ໊લۭؒΛ࣋ͭ ΞΫηε؅ཧͷ୯Ґ ݸผʹίϯύΠϧ͞ΕΔ όϯυϧ͕෼཭͍ͯ͠Δ

Slide 18

Slide 18 text

Authenticator.framework APIClient.framework AwesomeKit.framework AFNetworking.framework AwesomeApp AwesomeApp.bundle AwesomeToday.appex …

Slide 19

Slide 19 text

Developing frameworks • ୯ମςετͰಈ࡞Λ֬ೝ • CIαʔόʔͷςετͰಈ࡞Λอূ (Jenkins) • ґଘΛ؅ཧ • CocoaPods (>= 0.36) • Carthage

Slide 20

Slide 20 text

Pros • ϑϨʔϜϫʔΫͷશͯͷϝϦοτ • ݎ͍ެ։ΠϯλʔϑΣʔε • υϝΠϯຖͷ໌ࣔతͳ෼཭ • ։ൃʹςετ͕ඞཁ • ՄೳͳݶΓϓϥοτϑΥʔϜʹඇґଘ

Slide 21

Slide 21 text

Cons • ϞϊϦγοΫͳํ͕ॊೈ • iOS 7ΛαϙʔτͰ͖ͳ͍

Slide 22

Slide 22 text

Automation

Slide 23

Slide 23 text

OS X Server

Slide 24

Slide 24 text

Jenkins

Slide 25

Slide 25 text

What’s been automated? • ୯ମςετͷ࣮ߦ • ϕʔλ൛ͷϏϧυͱ഑෍ • ਃ੥༻όΠφϦͷϏϧυ • εΫϦʔϯγϣοτͷऔಘ

Slide 26

Slide 26 text

Why automated? • ࠶ݱੑͷ୲อ • ͍ͭͰ΋ςετ͕௨ΓϏϧυͰ͖Δ͜ͱΛอূ • ଵ͚͍ͨ • ख࡞ۀͰ͕Μ͹ΔͱർΕΔ • 3.5/4.0/4.7/5.5/9.7 inchͷσΟεϓϨΠͰ
 5छྨͣͭͷεΫϦʔϯγϣοτࡱΔͷ͸ർΕΔ

Slide 27

Slide 27 text

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


Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

snapshot • snapshot gemΛ࢖͏ • UIAutomationͷ࢓૊ΈΛ࢖͍ͬͯΔ

Slide 30

Slide 30 text

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'

Slide 31

Slide 31 text

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")

Slide 32

Slide 32 text

࠷લઢ • Swift • Microframeworks • Automation

Slide 33

Slide 33 text

͸ͯͳʹ͓͚ΔiOSΞϓϦ։ൃ࠷લઢ MicroframeworksΞʔΩςΫνϟͱςετࣗಈԽʹΑΔݎ࿚ͳΞϓϦ։ൃ