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
A Frank Discussion About iOS BDD
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tim Bugai
May 27, 2014
Technology
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
A Frank Discussion About iOS BDD
Tim Bugai
May 27, 2014
More Decks by Tim Bugai
See All by Tim Bugai
Automate All The Things!
tbugai
0
62
RubyMotion
tbugai
0
140
Other Decks in Technology
See All in Technology
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
1k
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
290
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
320
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.6k
技術・能力を向上する原理原則 #きのこセッションa #きのこ2026
bash0c7
0
140
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
140
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
910
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
3
850
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
1
360
toB プロダクトから見たWAF
tokai235
0
210
徹底討論!ECS vs EKS!
daitak
3
1.8k
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
190
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
800
Everyday Curiosity
cassininazir
0
240
Raft: Consensus for Rubyists
vanstee
141
7.6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
430
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
Facilitating Awesome Meetings
lara
57
7k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
740
Unsuck your backbone
ammeep
672
58k
First, design no harm
axbom
PRO
2
1.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Transcript
collectiveidea.com A Frank Discussion About iOS BDD Tim Bugai collectiveidea.com
@timbugai
collectiveidea.com About Me… • B.S. in C.S. from GVSU •
Software Developer for 5+ years professionally. • Lead iOS Developer at Collective Idea • Woodworker
collectiveidea.com Collective Idea • Ruby on Rails, DevOps, and mobile
development shop • Holland, MI
collectiveidea.com Tenn Pinn Simple bowling average tracker. ! tenpinn.com
collectiveidea.com Dead Man’s Snitch Dead Simple Periodic Process Monitoring !
deadmanssnitch.com
collectiveidea.com Downside Pay attention to your friends… ! downsideapp.com
collectiveidea.com Demo Application
collectiveidea.com HarmonyApp
collectiveidea.com Mockups • Login page
collectiveidea.com Mockups • UICollectionView of a users sites
collectiveidea.com Mockups • UICollectionView of pages for the selected site
collectiveidea.com Harmony API • Application/JSON • RESTfull endpoints • Authentication
collectiveidea.com BDD
collectiveidea.com Framework Options • UISpec • Zucchini • Frank
collectiveidea.com UISpec • Objective-C • [[app.navigationButton.label text:@"Save"] touch]; • Last
updated April, 2013 • iOS 7 support?
collectiveidea.com Zucchini • UIAutomation wrapper • Screen Objects (Coffeescript) •
Ruby DSL
collectiveidea.com Zucchini class BooksScreen extends Screen anchor: -> view.navigationBars()["Books"] constructor:
-> super 'books' extend @elements, 'Edit' : -> view.navigationBars()[0].buttons()["Edit"], 'Add' : -> view.navigationBars()[0].buttons()["Add"] extend @actions, 'Scroll to "([^"]*)"$': (elementName) -> view.tableViews()[0].scrollToElementWithName(elementName)
collectiveidea.com Zucchini Start on the "Books" screen: Take a screenshot
Tap "Add"
collectiveidea.com Frank • Cucumber for iOS • Ruby • Client/Server
architecture • Symbiote
collectiveidea.com Accessibility Labels
collectiveidea.com Setup Frank • gem install frank-cucumber • frank setup
• frank build • frank launch —idiom=ipad
collectiveidea.com First Test Given I launch the app using iOS
7.0 and the iPad simulator And I am on the login page ! When I enter the username “
[email protected]
” And I enter the password “glsec2014” And I touch “Sign In” ! Then I should be on the sites page
collectiveidea.com Step Definitions Given(/^I am on the login page$/) do
check_element_exists “view marked:’username’” end
collectiveidea.com !! Live Code Ahead !!
collectiveidea.com Unit Tests
collectiveidea.com Unit Test Options • XCTest • specta & expecta
• Cedar
collectiveidea.com XCTest • Native to Xcode 5.1 • Replaces SenTest
• XCTAssertEqual, XCTAssertNotEqual, etc
collectiveidea.com Specta & Expecta • RSpec-like Syntax • XCTest •
expect([bar isBar]).to.equal(YES);
collectiveidea.com Cedar • Created by Pivotal Labs • RSpec-like block
syntax • Native mocking ability
collectiveidea.com API Tests • Mock network responses
collectiveidea.com Continuous Integration
collectiveidea.com Travis CI • travis-ci.org
collectiveidea.com travis.yml language: objective-c ! before_install: bundle install script: frank
build && bundle exec cucumber Frank
collectiveidea.com Xcode Test Server • Local Repos • Remote Repos
(remote polling)
collectiveidea.com Questions?
collectiveidea.com Thanks!