Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ten Commandments for iPhone Software Development

Ten Commandments for iPhone Software Development

Presentation shown at the JAOO iPhone Dev Days in Zürich, Switzerland.

88dd97cf2dc7f06cc51a01d450f0b1e5?s=128

Adrian Kosmaczewski
PRO

October 03, 2009
Tweet

Transcript

  1. Ten Commandments for iPhone Software Development

  2. None
  3. Adrian Kosmaczewski

  4. akosma software

  5. all in lowercase!

  6. akosma.com akosma.tumblr.com github.com/akosma linkedin.com/in/akosma facebook.com/akosma

  7. twitter.com/akosma kosmaczewski.net

  8. None
  9. None
  10. Some questions

  11. Who’s new to iPhone?

  12. Which technologies?

  13. J2EE J2ME .NET Ruby / Rails others?

  14. Which programming languages?

  15. C / C++? Java, C#? Ruby, Python, Lua? JavaScript? Fortran,

    Lisp, COBOL?
  16. None
  17. 10 Commandments

  18. http://www.flickr.com/photos/oseillo/345879263/

  19. None
  20. 1

  21. Thou shalt manage memory properly

  22. http://www.flickr.com/photos/blakespot/3030107382/

  23. 128 or 256 MB RAM

  24. ±70 MB for the OS!

  25. no swap file

  26. (no virtual memory)

  27. http://www.flickr.com/photos/cheek/699407283/

  28. no garbage collection

  29. Objects have a “retain count”

  30. http://cocoadevcentral.com/d/learn_objectivec/

  31. basic rule:

  32. for every [alloc], [retain], [copy] there must be a [release]

  33. beware:

  34. Objective-C only allows objects on the heap

  35. http://linguiniontheceiling.blogspot.com/2008/10/thats-madame-trash-heap-to-you.html

  36. No automatic objects on the stack (C++)

  37. http://www.futuregov.net/photologue/photo/2008/aug/30/stack-papers/

  38. // C++ // Memory freed when out of scope std::string

    name(“Adrian”); std::string *name = NULL; name = new std::string(“Adrian”); delete name;
  39. iPhone OS memory warnings

  40. None
  41. http://www.flickr.com/photos/tbuser/2763035540/

  42. http://kosmaczewski.net/2009/01/28/10-iphone-memory-management-tips/

  43. None
  44. 2

  45. Thou shalt remove all compiler warnings

  46. None
  47. None
  48. GCC_TREAT_WARNINGS_AS_ERRORS -Werror

  49. None
  50. Why Warnings?

  51. •Using deprecated symbols; •Calling method names not declared in included

    headers; •Calling methods belonging to implicit protocols; •Forgetting to return a result in methods not returning “void”; •Forgetting to #import the header file of a class declared as a forward “@class”; •Downcasting values and pointers implicitly.
  52. Solutions

  53. Make your intentions explicit to the compiler

  54. •Make implicit protocols explicit •Create categories for private methods •Turn

    implicit type conversions and casts into explicit ones •Use @class in the @interface, #import on the @implementation
  55. http://kosmaczewski.net/2009/07/16/objective-c-compiler-warnings/

  56. None
  57. 3

  58. Honor the Human Interface Guidelines

  59. http://developer.apple.com/ iphone/library/documentation/ userexperience/conceptual/ mobilehig/

  60. None
  61. None
  62. Your Objective:

  63. avoid rejections

  64. None
  65. http://flyosity.com/application-design/iphone-application-design-patterns.php

  66. http://www.smashingmagazine.com/2009/07/21/ iphone-apps-design-mistakes-overblown-visuals/

  67. http://www.mobileorchard.com/avoiding-iphone-app-rejection-from-apple/

  68. http://www.apprejected.com/

  69. http://appreview.tumblr.com/

  70. http://kosmaczewski.net/2009/08/03/risk-management-in-iphone-projects/

  71. Your Objective:

  72. avoid this

  73. http://www.flickr.com/photos/gruber/2635257578/

  74. and this

  75. http://smokingapples.com/iphone/app-store-iphone/the-worst-twitter-client-ever/

  76. “ I can’t find one redeeming quality about this app.

    It’s slow to start [on a 3GS], doesn’t respond to taps while it’s trying to load other things, and crashes if you try to change modes a lot. It’s limited to only timeline, replies, and messages. It has no other functionality. Oh wait… I forgot its killer feature, you can have custom backgrounds and choose the color of your tweets. That totally makes up for its lack of useful features and sluggish performance. I’m not sure why someone would bother building such an inferior app other than that they wanted to find some suckers and score a quick buck. It seems even more insane to me that they’d be actively seeking out reviewers to cover this. I was given a promo code for ChillTwit, and even for free I didn’t want it on my phone. I was sad just from looking at screenshots. Actually seeing it running confirmed all of my fears. If it was a free app, I might forgive the developer, but the fact that he’s trying to get $0.99 out of people pisses me off to no end. Go buy Tweetie. If you somehow weren’t scared away by all my bitching and whinning, you can see ChillTwit on the app store here. But seriously, if you buy this, we’re not friends anymore.
  77. None
  78. 4

  79. Thou shalt optimize for performance

  80. •Drawing and scrolling •Application launch •Files and data •Power and

    battery life
  81. Drawing and scrolling

  82. •UIView subclasses are already optimized •Custom views should use setNeedsDisplayInRect:

    whenever possible •Cache static objects
  83. •Use opaque views •Avoid allocating while scrolling •Reuse table cells

    •Collapse view hierarchies
  84. Application Launch

  85. •Design apps for quick launch and short use •Load data

    lazily •Load only images needed
  86. Files and Data

  87. •Use Core Data for large datasets •Avoid loading large files

    in memory •Use plist files for structured static data
  88. Power management

  89. •3G communications are expensive •Wi-Fi slightly cheaper •Send small chunks

    of data at low frequency •Prefer “chunky” to “chatty” protocols •Better performance == longer battery life
  90. None
  91. 5

  92. Thou shalt test in the device

  93. http://blogs.tech-recipes.com/itouchmyiphone/2008/03/26/ from-iphone-sdk-to-simple-app-in-less-than-452-seconds/

  94. http://www.flickr.com/photos/edans/1526393678/

  95. •Camera •Accelerometer •GPS •Compass •Battery •Network •... Speed! http://www.flickr.com/photos/tensafefrogs/728581345/

  96. http://www.flickr.com/photos/schill/969088410/

  97. http://www.flickr.com/photos/jaytamboli/3788327603/

  98. None
  99. 6

  100. Remember your developer tools

  101. None
  102. None
  103. Shark

  104. None
  105. None
  106. Instruments

  107. None
  108. None
  109. None
  110. None
  111. 7

  112. Thou shalt use PNG files

  113. Portable Network Graphics (PNG) is a bitmapped image format that

    employs lossless data compression. PNG was created to improve upon and replace GIF (Graphics Interchange Format) as an image-file format not requiring a patent license. It is pronounced /ˈpɪŋ/ [1] or spelled out as P-N-G. The PNG acronym is optionally recursive, unofficially standing for “PNG's Not GIF”.[2] http://en.wikipedia.org/wiki/Portable_Network_Graphics
  114. Advantages

  115. Compression on build

  116. Low memory footprint

  117. Supported by all editors

  118. Quality

  119. http://en.wikipedia.org/wiki/File:Comparison_of_JPEG_and_PNG.png

  120. Transparency

  121. http://en.wikipedia.org/wiki/Portable_Network_Graphics

  122. •App icon: 57x57 “Icon.png” •Default image: 480x320 “Default.png” •Settings icon:

    29x29 “Icon-Small.png”
  123. App Icon

  124. Design in maximum quality, then reduce

  125. Do not apply effects

  126. http://developer.apple.com/iphone/library/documentation/userexperience/conceptual/mobilehig/

  127. 512x512 72 DPI TIFF file for App Store

  128. None
  129. 8

  130. Thou shalt use static analysis

  131. http://llvm.org/

  132. http://clang-analyzer.llvm.org/

  133. None
  134. Source: Apple Documentation

  135. Source: Apple Documentation

  136. Source: Apple Documentation

  137. Source: Apple Documentation

  138. None
  139. 9

  140. Thou shalt have project management hygiene

  141. •Project management •Human resource management •Developer working conditions •Prototypes •Quality

    management •Code organization
  142. http://kosmaczewski.net/2009/07/28/code-organization-in-xcode-projects/

  143. Your objective:

  144. avoid chaos

  145. http://www1.standishgroup.com/newsroom/chaos_2009.php

  146. http://www.geekonomicsbook.com/

  147. None
  148. 10

  149. Thou shalt have fun!

  150. and

  151. be creative!

  152. None
  153. None
  154. None
  155. Recap’

  156. 1. Manage memory properly 2. Remove compiler warnings 3. Read

    the Human Interface Guidelines 4. Optimize for performance 5. Test in the device
  157. 6. Know your developer tools 7. Use PNG files 8.

    Use static analysis 9. Have project management hygiene 10. Have fun and be creative!
  158. Thanks!

  159. Slides available in slideshare.net/akosma/presentations

  160. Questions?