The State of App
Development: 2013
• 4 years ago: the single developer.
• The status quo for iOS Development is
  changing rapidly.

• Many of these changes are a result of the
  ecosystem surrounding the iOS platform.
Third-Party Libraries
CocoaPods

• CocoaPod is a dependency manager similar
  to Ruby gems.
• This is the biggest change to my workflow
  as an iOS Developer.
• http://cocoapods.org
In a text editor, make a Podfile:
platform :ios
pod 'AFNetworking',   '1.0'
pod 'JSONKit',        '~> 1.4'




On the command line:
> pod install




Also useful:
> pod search <name>
You can make you own Podspec like this:
Pod::Spec.new do |s|
  s.name         = "Cocoa-Touch-Barcodes"
  s.version      = "0.0.1"
  s.summary      = "Fork of Jeff Lamarche's original barcode generator
library at http://code.google.com/p/cocoabarcodes/"
  s.homepage     = "http://code.google.com/p/cocoabarcodes/"
  s.license      = { :type => 'New BSD', :text => "" }
  s.author       = { "Jeff LaMarche" => "jeff.lamarche@gmail.com" }
  s.source       = { :git => "
https://github.com/netshade/Cocoa-Touch-Barcodes.git", :commit =>
"d0aabd00efa" }
  s.platform     = :ios
  s.source_files = ''
  s.public_header_files = '*.h'
end
end
end
end
end
end
end
end
end
end
end
end
The number of third-
  party libraries is
      growing.
http://www.cocoacontrols.com/
Ditching XCode
AppCode
Clang does code completion

#include <stdio.h>int main(){   printf("nHello
Worldn");    return 0;}




> clang -cc1 -xc -fsyntax-only -code-completion-at -:5:12 - < test.c

COMPLETION: __func__COMPLETION: __FUNCTION__COMPLETION:
__PRETTY_FUNCTION__COMPLETION: asprintf : [#int#]asprintf(<#char **#>,
<#const char *, ...#>)COMPLETION: clearerr : [#void#]clearerr(<#FILE
*#>)COMPLETION: ctermid : [#char *#]ctermid(<#char *#>)COMPLETION:
ctermid_r : [#char *#]ctermid_r(<#char *#>)COMPLETION: dprintf :
[#int#]dprintf(<#int#>, <#const char *restrict, ...#>)COMPLETION:
fclose : [#int#]fclose(<#FILE *#>)COMPLETION: fdopen : [#FILE
*#]fdopen(<#int#>, <#const char *#>)...
COMPLETION: printf : [#int#]printf(<#const char *restrict, ...#>)
...
It is Possible to Autocomplete in Other
                Text Editors



• Vim has ClangComplete
• Emacs has YASnippet and autocomplete
• Sublime Text has SublimeClang
Not Objective-C (or C++, or C
         or Objective C++)
alternatives.

Now there are more
    and more.
Now there are more
    and more.
Now there are more
Stuff That Has Been
  Around for a while

• JavaScript frameworks (PhoneGap, Titanium,
  ...)
• Game frameworks: (Unity, Corona...)
Not a comprehensive list




RubyMotion has some attention because it
        allows access to UIKit.
Not a comprehensive list

  Xamarin (formerly MonoTouch, which
*has* been around for awhile) announced
2.0, which can write iOS apps in C# using
              Visual Studio.
Objective C will be Apple’s mainstay
 language for long time to come.
But other tools are available and have
 even been maturing for a long time.
One reason is that Apple used to reject
 alternative programming languages.

 That fear is almost completely gone.
 That fear is almost completely gone.
 That fear is almost completely gone.
NOTE: At this meetup, we have never
had a presentation on developing in a
  language other than Objective C.
Testing
Unit Tests

• GHUnit (https://github.com/gabriel/gh-unit)
• Cedar (https://github.com/pivotal/cedar)
• Kiwi (https://github.com/allending/Kiwi)
• WiteBox (
  http://code.google.com/p/witebox/)
Integration Tests

• Frank (http://testingwithfrank.com)
• Kif (https://github.com/square/KIF)
• Zucchini (
  http://www.zucchiniframework.org)
Most of the standard practices from web
development are now available in mobile
       app development as well.
PonyDebugger


• https://github.com/square/PonyDebugger
Super Debugger


• http://shopify.github.com/superdb/
App Services
Not a comprehensive list

 TestFlight (https://testflightapp.com) /
  HockeyApp (http://hockeyapp.net)
Not a comprehensive list


   Hosted CI: https://hosted-ci.com
Not a comprehensive list


  Localization (http://applingua.com)
Not a comprehensive list


Crash Reports (http://try.crashlytics.com)
Not a comprehensive list

             Device Testing
(http://www.keynotedeviceanywhere.com
                   )
Not a comprehensive list

 If you have a problem, some one has a
           service to solve it.
One of the biggest changes is that the
ecosystem surrounding app development
       is growing at a rapid rate.
People who recognize these changes, and
  that things are changing, will be able to
   develop quality apps more quickly by
         making use of these tools.
But, following all of the developments is
      becoming harder and harder.
The moral of the story: the days of a
single developer making a successful app
are probably much harder, but following
the ecosystem will probably to give you
           the best advantage.

State ofappdevelopment

  • 1.
    The State ofApp Development: 2013
  • 2.
    • 4 yearsago: the single developer. • The status quo for iOS Development is changing rapidly. • Many of these changes are a result of the ecosystem surrounding the iOS platform.
  • 3.
  • 4.
    CocoaPods • CocoaPod isa dependency manager similar to Ruby gems. • This is the biggest change to my workflow as an iOS Developer. • http://cocoapods.org
  • 5.
    In a texteditor, make a Podfile: platform :ios pod 'AFNetworking', '1.0' pod 'JSONKit', '~> 1.4' On the command line: > pod install Also useful: > pod search <name>
  • 6.
    You can makeyou own Podspec like this: Pod::Spec.new do |s| s.name = "Cocoa-Touch-Barcodes" s.version = "0.0.1" s.summary = "Fork of Jeff Lamarche's original barcode generator library at http://code.google.com/p/cocoabarcodes/" s.homepage = "http://code.google.com/p/cocoabarcodes/" s.license = { :type => 'New BSD', :text => "" } s.author = { "Jeff LaMarche" => "jeff.lamarche@gmail.com" } s.source = { :git => " https://github.com/netshade/Cocoa-Touch-Barcodes.git", :commit => "d0aabd00efa" } s.platform = :ios s.source_files = '' s.public_header_files = '*.h' end end end end end end end end end end end end
  • 7.
    The number ofthird- party libraries is growing.
  • 8.
  • 9.
  • 10.
  • 12.
    Clang does codecompletion #include <stdio.h>int main(){ printf("nHello Worldn"); return 0;} > clang -cc1 -xc -fsyntax-only -code-completion-at -:5:12 - < test.c COMPLETION: __func__COMPLETION: __FUNCTION__COMPLETION: __PRETTY_FUNCTION__COMPLETION: asprintf : [#int#]asprintf(<#char **#>, <#const char *, ...#>)COMPLETION: clearerr : [#void#]clearerr(<#FILE *#>)COMPLETION: ctermid : [#char *#]ctermid(<#char *#>)COMPLETION: ctermid_r : [#char *#]ctermid_r(<#char *#>)COMPLETION: dprintf : [#int#]dprintf(<#int#>, <#const char *restrict, ...#>)COMPLETION: fclose : [#int#]fclose(<#FILE *#>)COMPLETION: fdopen : [#FILE *#]fdopen(<#int#>, <#const char *#>)... COMPLETION: printf : [#int#]printf(<#const char *restrict, ...#>) ...
  • 13.
    It is Possibleto Autocomplete in Other Text Editors • Vim has ClangComplete • Emacs has YASnippet and autocomplete • Sublime Text has SublimeClang
  • 14.
    Not Objective-C (orC++, or C or Objective C++)
  • 15.
    alternatives. Now there aremore and more. Now there are more and more. Now there are more
  • 16.
    Stuff That HasBeen Around for a while • JavaScript frameworks (PhoneGap, Titanium, ...) • Game frameworks: (Unity, Corona...)
  • 17.
    Not a comprehensivelist RubyMotion has some attention because it allows access to UIKit.
  • 18.
    Not a comprehensivelist Xamarin (formerly MonoTouch, which *has* been around for awhile) announced 2.0, which can write iOS apps in C# using Visual Studio.
  • 19.
    Objective C willbe Apple’s mainstay language for long time to come.
  • 20.
    But other toolsare available and have even been maturing for a long time.
  • 21.
    One reason isthat Apple used to reject alternative programming languages. That fear is almost completely gone. That fear is almost completely gone. That fear is almost completely gone.
  • 22.
    NOTE: At thismeetup, we have never had a presentation on developing in a language other than Objective C.
  • 23.
  • 24.
    Unit Tests • GHUnit(https://github.com/gabriel/gh-unit) • Cedar (https://github.com/pivotal/cedar) • Kiwi (https://github.com/allending/Kiwi) • WiteBox ( http://code.google.com/p/witebox/)
  • 25.
    Integration Tests • Frank(http://testingwithfrank.com) • Kif (https://github.com/square/KIF) • Zucchini ( http://www.zucchiniframework.org)
  • 26.
    Most of thestandard practices from web development are now available in mobile app development as well.
  • 27.
  • 28.
  • 29.
  • 30.
    Not a comprehensivelist TestFlight (https://testflightapp.com) / HockeyApp (http://hockeyapp.net)
  • 31.
    Not a comprehensivelist Hosted CI: https://hosted-ci.com
  • 32.
    Not a comprehensivelist Localization (http://applingua.com)
  • 33.
    Not a comprehensivelist Crash Reports (http://try.crashlytics.com)
  • 34.
    Not a comprehensivelist Device Testing (http://www.keynotedeviceanywhere.com )
  • 35.
    Not a comprehensivelist If you have a problem, some one has a service to solve it.
  • 36.
    One of thebiggest changes is that the ecosystem surrounding app development is growing at a rapid rate.
  • 37.
    People who recognizethese changes, and that things are changing, will be able to develop quality apps more quickly by making use of these tools.
  • 38.
    But, following allof the developments is becoming harder and harder.
  • 39.
    The moral ofthe story: the days of a single developer making a successful app are probably much harder, but following the ecosystem will probably to give you the best advantage.