Successfully reported this slideshow.

CLR/H78 CI at iOS

1,451 views

Published on

Published in: Technology
  • Be the first to comment

CLR/H78 CI at iOS

  1. 1. 仕事で使え る!iPhone アプリ開発でも 継続的インテグレーション #CLRH78 Tsuyoshi Maehana @sandinist13年1月20日日曜日
  2. 2. Self Intro • Tsuyoshi Maehana • @sandinist • Objective-C, Ruby, C#, VB.net • ♥Ruby • ♥Agile13年1月20日日曜日
  3. 3. @jcoplien @sandinist13年1月20日日曜日
  4. 4. 侍 Samurai Episode13年1月20日日曜日
  5. 5. Ruby13年1月20日日曜日 Sapporo
  6. 6. Agile Sapporo13年1月20日日曜日
  7. 7. Soup13年1月20日日曜日 Curry♥
  8. 8. 仕事で使え る!iPhone アプリ開発でも 継続的インテグレーション #CLRH78 Tsuyoshi Maehana @sandinist13年1月20日日曜日
  9. 9. チームに感謝を13年1月20日日曜日
  10. 10. Table of Contents • Unit Tests • Acceptance Tests • Continuous Integration13年1月20日日曜日 in iOS
  11. 11. iOS Development N ote • XCode • iOS Developer Program • Objective-C13年1月20日日曜日
  12. 12. ! Use Version Control? • Git • Mercurial • Bazaar • ...etc13年1月20日日曜日
  13. 13. Three Pillar Version Testing Automation Control13年1月20日日曜日
  14. 14. Use Version Control. XCode Standard • Git • Mercurial • Bazaar • ...etc13年1月20日日曜日
  15. 15. Table of Contents • Unit Tests • Acceptance Tests • Continuous Integration13年1月20日日曜日 in iOS
  16. 16. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac git git (bare) Jenkins ircd XCode & irc Instruments13年1月20日日曜日
  17. 17. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac push git git (bare) Jenkins ircd XCode & irc Instruments13年1月20日日曜日
  18. 18. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac hook git git (bare) Jenkins ircd XCode & irc Instruments13年1月20日日曜日
  19. 19. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac git git (bare) Jenkins Run Tests ircd XCode & irc Instruments13年1月20日日曜日
  20. 20. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac git git (bare) Jenkins Notify ircd XCode & irc Instruments13年1月20日日曜日
  21. 21. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac git git (bare) Jenkins Notify ircd XCode & irc Instruments13年1月20日日曜日
  22. 22. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac git git (bare) Jenkins ircd XCode & irc Instruments13年1月20日日曜日
  23. 23. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac push hook git git (bare) Jenkins Notify Notify ircd XCode & irc Instruments Run Tests13年1月20日日曜日
  24. 24. Table of Contents • Unit Tests • Acceptance Tests • Continuous Integration13年1月20日日曜日 in iOS
  25. 25. Three Pillar Version Testing Automation Control13年1月20日日曜日
  26. 26. what’s kinds of? • Unit • Integration • Functional • Join • Acceptance13年1月20日日曜日
  27. 27. what’s kinds of? • Unit • Integration For Developer • Functional • Join • Acceptance13年1月20日日曜日
  28. 28. what’s kinds of? • Unit • Integration • Functional • Join • Acceptance For Customer13年1月20日日曜日
  29. 29. what’s kinds of? • Unit • Integration • Functional • Join • Acceptance • NonFunctional For QA13年1月20日日曜日
  30. 30. To Do in the UnitTests • Models • Own Libraries • Communications13年1月20日日曜日
  31. 31. Not Do the UnitTests • Views • ViewControllers • External Libraries • Built-in Libraries13年1月20日日曜日
  32. 32. Table of Contents • Unit Tests • Acceptance Tests • Continuous Integration13年1月20日日曜日 in iOS
  33. 33. Unit Tests Frameworks. • SenTestingKit • GHUnit • Cedar • Kiwi13年1月20日日曜日
  34. 34. Unit Tests Frameworks. • SenTestingKit • GHUnit • Cedar • Kiwi13年1月20日日曜日
  35. 35. We use. 2010 2011 2012 2013 GHUnit Kiwi Is troublesome.. SenTesting13年1月20日日曜日
  36. 36. SenTestingKit • XCode Standard • Poor Matcher? • Can’t Mocking? • Async Difficult? • Fixture there?13年1月20日日曜日
  37. 37. Poor Matcher? • OCHamcrest  • https://github.com/hamcrest/OCHamcrest allOf equalTo sameInstance hasItem closeTo lessThan endsWith ...13年1月20日日曜日
  38. 38. Can’t Mocking? • OCMock • https://github.com/erikdoe/ocmock13年1月20日日曜日
  39. 39. OCMock Attention • Can’t Partial Mocking toll- free bridge Classes. • Use mockForClass13年1月20日日曜日
  40. 40. OCMock Attention• Double Pointer Argument• Use OCMOCK_ANYPTR Macro.• ex) • error:OCMOCK_ANYPTR(NSError *)13年1月20日日曜日
  41. 41. OCMock Attention• union Argument is Can’t Stub.13年1月20日日曜日
  42. 42. Async Difficult? • SenAsyncTestCase  • https://github.com/akisute/SenAsyncTestCase13年1月20日日曜日
  43. 43. Fixture there? Tell me!13年1月20日日曜日
  44. 44. Fixture there? Make It!13年1月20日日曜日
  45. 45. Other Topic • Method Swizzling • ex) NSDate date • Use JRSwizzle • https://github.com/rentzsch/jrswizzle13年1月20日日曜日
  46. 46. Our Rule • 1 to 1 test class to class • No Device Access (In Mock All) • No Really Communicate (In Mock All) • To Succeed xcodebuild • Wait during asynchronous test as short as possible • Do not write tests of getter / setter13年1月20日日曜日
  47. 47. 13年1月20日日曜日
  48. 48. 13年1月20日日曜日
  49. 49. Take a Break..13年1月20日日曜日
  50. 50. 13年1月20日日曜日
  51. 51. _人人人人人人_ > 突然の縄 <  ̄Y^Y^Y^Y^Y ̄13年1月20日日曜日
  52. 52. 13年1月20日日曜日
  53. 53. Table of Contents • Unit Tests • Acceptance Tests • Continuous Integration13年1月20日日曜日 in iOS
  54. 54. To Do in the Acceptance Tests • User Action • Running the Scenario13年1月20日日曜日
  55. 55. Acceptance Tests Framework • UIAutomation • Kif • Frank • FoneMonkey • Zucchini13年1月20日日曜日
  56. 56. Acceptance Tests Framework • UIAutomation +tuneup.js • Kif • Frank • FoneMonkey • Zucchini13年1月20日日曜日
  57. 57. Instruments13年1月20日日曜日
  58. 58. UIAutomation + tuneup.js13年1月20日日曜日
  59. 59. UIAutomation + tuneup.js13年1月20日日曜日
  60. 60. Acceptance Tests Framework • UIAutomation +tuneup.js • Kif • Frank • FoneMonkey • Zucchini13年1月20日日曜日
  61. 61. KIF • KIF iOS Integration Testing Framework • https://github.com/square/KIF13年1月20日日曜日
  62. 62. Three Pillar Version Testing Automation Control13年1月20日日曜日
  63. 63. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac push git git (bare) XCode & Instruments Run Tests13年1月20日日曜日
  64. 64. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac push hook git git (bare) Jenkins Notify Notify ircd XCode & irc Instruments Run Tests13年1月20日日曜日
  65. 65. Automation • Jenkins • TeamCity • CruiseControl.rb • zapp • buildbot13年1月20日日曜日
  66. 66. Jenkins13年1月20日日曜日
  67. 67. Jenkins • Building/testing software projects continuously • Work with version controls • Many Plug-in • Easy to Install & Configure • Run Any Scripts13年1月20日日曜日
  68. 68. Jenkins Plug-ins • Jenkins Git Plugin • Jenkins IRC Plugin • Parameterized Job Plugin13年1月20日日曜日
  69. 69. ! Proxy Setting • Manage Jenkins • System Setting • Global Properties • Environment Variable ON • set http_proxy etc13年1月20日日曜日
  70. 70. Run Test from the Command Line • xcodebuild • instruments • xcrun13年1月20日日曜日
  71. 71. Run Unit Testsxcodebuild -scheme CLRHTest -sdk iphonesimulator TEST_AFTER_BUILD=YES -configuration Release clean build13年1月20日日曜日
  72. 72. Run Unit Testsxcodebuild -scheme CLRHTest -sdk iphonesimulator TEST_AFTER_BUILD=YES -configuration Release clean build Setting Clean Build Test13年1月20日日曜日
  73. 73. Run Acceptance TestsAPP="$(pwd)/build/Release-iphonesimulator/CLRH.app"TEMPLATE=`instruments -s 2>&1 > /dev/null |sed -n s/*"([^",]*/Automation.tracetemplate)",*/1/p`SCRIPTS="$(pwd)/AcceptanceTest/*.js"for SCRIPT in $SCRIPTSdo instruments -t $TEMPLATE $APP -e UIASCRIPT $SCRIPT if [ "$?" -ne 0 ]; then exit $? fidone13年1月20日日曜日
  74. 74. Run Acceptance TestsAPP="$(pwd)/build/Release-iphonesimulator/CLRH.app" "/Applications/Xcode.app/Contents/Applications/TEMPLATE=`instruments -s 2>&1 > /dev/null |sed -n Instruments.app/Contents/PlugIns/ s/ AutomationInstrument.bundle/Contents/Resources/*"([^",]*/Automation.tracetemplate)",*/1/p` Automation.tracetemplate"SCRIPTS="$(pwd)/AcceptanceTest/*.js"for SCRIPT in $SCRIPTSdo instruments -t $TEMPLATE $APP -e UIASCRIPT $SCRIPT if [ "$?" -ne 0 ]; then exit $? fidone13年1月20日日曜日
  75. 75. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac push hook git git (bare) Jenkins Notify Notify ircd XCode & irc Instruments Run Tests13年1月20日日曜日
  76. 76. git hook13年1月20日日曜日
  77. 77. Eco! #!/bin/bash wol [MAC ADDRESS] for i in {0..5} do ping -c1 host > /dev/null if [ $? == 0 ]; then break fi sleep 1 done wget --no-proxy -q "http://host:8080/job/Start/build? token=[token]&delay=0" if [ "$?" -eq 0 ]; then echo "Jenkins build run." else echo "Jenkins build failed." fi13年1月20日日曜日
  78. 78. Overview - Team Continuous Integration Dev Mac VC& irc Linux CI Mac push hook git git (bare) Jenkins Notify Notify ircd XCode & irc Instruments Run Tests13年1月20日日曜日
  79. 79. xcrun? xcodebuild -project ./CLRH.xcodeproj clean build xcrun -sdk iphoneos PackageApplication -v ./build/ Release-iphoneos/CLRH.app -o "`pwd`/CLRH.ipa" Set Valid Distribution Identifier for Release Build.13年1月20日日曜日
  80. 80. Continuous Delivery • Use xcrun our case is all done manually. • In no constraint case, you can use Testflight.13年1月20日日曜日
  81. 81. Overview - Release Continuous Delivery Dev Mac VC Linux CI Mac git git (bare) Jenkins Destination VC Linux git XCode & web Instruments browser Repository browser13年1月20日日曜日
  82. 82. Overview - Release Continuous Delivery Dev Mac VC Linux CI Mac push polling git git (bare) Jenkins push Destination VC Linux DL git XCode & web Instruments browser Repository browser Run Tests13年1月20日日曜日
  83. 83. 13年1月20日日曜日
  84. 84. Any Auestion? ;-)13年1月20日日曜日

×