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

How I Became an iOS Developer for Fun and Debt

How I Became an iOS Developer for Fun and Debt

With the explosive growth of both the iOS and Android platforms, building an “app” is the new “I built a web site!” in terms of nerdy pursuits. Unfortunately, developing an app in traditional methods can be overwhelming for even a reasonably technical person who doesn’t possess a proper foundation in application programming. Come hear not only how RubyMotion can destroy the learning-curve associated with iOS app development, but also hear the steps and frustrations involved in starting a business and getting an app into the Apple App Store. Examples of RubyMotion code and its resulting app will be demoed.

Mark Stanislav

April 20, 2013
Tweet

More Decks by Mark Stanislav

Other Decks in Technology

Transcript

  1. ME • Building iOS apps using RubyMotion since June •

    Never developed a mobile application prior • No background in Objective-C development Development Business • Running a single-member LLC out of Michigan • Single Goal: Make more than I spend (America!) • Passable amount of business/accounting sense
  2. A historical Thought • In 1996, everyone wanted to make

    a web site. • In 2013, everyone wants to make a mobile app. 2013 1996 Unlocking the true power of technology, regardless of platform!
  3. MY Company; An Overview • Pardalis Labs, LLC • Single-Member

    (Disregarded Entity) • Limited Liability Corporation • Articles of Organization filed on June 15th, 2012 • Purposes • iOS app sales via Apple’s “App Store” • Consulting (Linux & Information Security) • Learning experience!
  4. Why build a company? • Protect you, as an individual,

    from being sued and all of your stuff taken by a court ruling • Represent yourself more professionally as an entity rather than just a person making stuff • Give clarity to accounting (personal v. business) • Have a clear direction for tax season • Logos! Business Cards! Web Sites! Stickers! Solve (Mitigate?) Problems ...by the way, I am NOT a lawyer and/or an accountant
  5. Naming your company • Make sure it’s original (enough) •

    Michigan Government Name Availability Search • U.S. Trademark Electronic Search System (TESS) • WHOIS records (i.e. see what domains exist) • Social Media (Facebook, Twitter, Linked In) • ...or hire a lawyer to find this all out for you! • After that, it’s just a matter of being creative enough to satisfy your own desires...
  6. My company • Pardalis Labs, LLC • Leopardus pardalis is

    an Ocelot • Labs is just a cool word • LLC is the company type I designated Cool Thing + Geeky = A Company Name!
  7. Articles of Organization • Stuff to fill out • Your

    personal name and address • Name of the company • The “resident agent” (yourself) • The “registered office” (your home) • Date and Sign $50 and a week later, you’re a registered company!
  8. Operating Agreement • Specifics of how your company will operate

    • Overview of LLC declarations • Capital investments from members • Ownership interest percentages • Cost/Profit sharing percentages • Accounting decisions (fiscal year, basis, etc.) • Management (Voting, New Members, etc.) Sign-up to Rocket Lawyer, get document, cancel service
  9. IRS EIN • EIN: Employer Identification Number • Free from

    the IRS and can be done entirely online • Creation of a business-named bank account • If you’re an S-Corp or C-Corp, you will need one • Under a single-member LLC you’ll use your personal SSN and not EIN for tax-related stuff • Forming an LLC does not mean you are a corporation, that is important to know early on!
  10. Banking/Accounting • Financial Accounts • Checking: Huntington Bank (w/ debit

    card) • ePayments: PayPal Business Account • Business Management • Time Tracking: Paymo • Accounting: Kashoo • Invoicing: invoiceto.me All accounts + services, 100% free for my usage of them
  11. Other Services I use (for free) Web Hosting General Software

    Two-Factor Authentication E-Mail & Misc.
  12. Logo Creation • Paid $149 to “The Logo Company” for

    the design • I have no measurable graphic design talent • Design process involves filling out a survey about your desired logo, multiple designers submitting initial drafts, then selecting one and iterating on it • Entire process took a handful of communications and about two weeks from start to finish.
  13. Business Creation Articles of Organization Filed Jun. 15th IRS EIN/

    Operating Agreem ent Jun. 28th Bank Account Created Jun. 30th pardalislabs.com registered Jul. 9th Started logo design process Jul. 10th Apple Account Creation Jul. 25th D-U-N-S Process Started Jul. 27th D-U-N-S Process Com plete Aug. 29th Apple Developer Account Created Sep. 17th First app subm itted Nov. 3rd First app accepted Nov. 11th
  14. RubyMotion • Write Ruby and get 100%-compliant iOS apps •

    Built by the former MacRuby Apple engineer • No code interpretation needed, fully compiled • No binary size or performance costs to using it • Only utilizes public APIs (keeps things legit!) • A thriving open-source community on Github • 37 Signals, Living Social, Scribd are all using it
  15. Cost of Doing Business • RubyMotion costs $200 (I got

    it early for $150) • License includes support and updates • Apple Developer Program costs $100 per year • You’re going to need this to release usable apps • A Mac OS X system is required to run RubyMotion • Could just use a Virtual Machine... • Apple will be taking 30% of your sales revenue
  16. The Power of Community • 370 RubyMotion-related repositories on GitHub

    • 1881 projects at rubymotionapps.com • 18 video tutorials at motioncasts.tv • 1 conference dedicated to RubyMotion (#inspect) https://github.com/mstanislav/pool-100 https://github.com/mstanislav/lets-camp https://github.com/mstanislav/ptcb-study https://github.com/mstanislav/michigan-pistol-safety-quiz ...and I’ve given back, too.
  17. A Quick Comparison [button addTarget:self action:@selector(buttonTapped:) forControlEvents: UIControlEventTouchUpInside]; - (void)buttonTapped:(id)sender

    { self.view.backgroundColor = [UIColor redColor]; } button.when(UIControlEventTouchUpInside) do self.view.backgroundColor = UIColor.redColor end Objective-C RubyMotion Source: http://clayallsopp.com/posts/the-ruby-motion-way/
  18. Example AppDelegate class AppDelegate def application(application, didFinishLaunchingWithOptions:launchOptions) @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)

    @quizController = QuizController.alloc.init @quizController.tabBarItem.title = 'Pistol Safety' @quizController.tabBarItem.image = UIImage.imageNamed('quiz.png') @quizController.navigationItem.title = 'Pistol Safety' @quizController.window = @window @infoController = InfoController.alloc.init @infoController.tabBarItem.title = 'Buying Process' @infoController.tabBarItem.image = UIImage.imageNamed('info.png') @infoController.navigationItem.title = 'Buying Process' @infoController.window = @window tabbar = UITabBarController.alloc.init tabbar.viewControllers = [@quizController,@infoController] tabbar.selectedIndex = 0 @window.rootViewController = UINavigationController.alloc.initWithRootViewController(tabbar) @window.rootViewController.wantsFullScreenLayout = true @window.makeKeyAndVisible @quizController.tabbar = tabbar end end
  19. Example Controller class InfoController < UIViewController attr_accessor :window def loadView

    self.view = UIView.alloc.init self.view.backgroundColor = UIColor.blackColor title = UILabel.new title.font = UIFont.systemFontOfSize(22) title.textColor = UIColor.whiteColor title.backgroundColor = UIColor.clearColor title.lineBreakMode = UILineBreakModeWordWrap title.textAlignment = NSTextAlignmentCenter title.numberOfLines = 0 title.frame = [[5, 5], [315, 30]] title.text = "Buying Process" view.addSubview title content = UILabel.new content.font = UIFont.systemFontOfSize(14) content.textColor = UIColor.whiteColor content.backgroundColor = UIColor.clearColor content.lineBreakMode = UILineBreakModeWordWrap content.numberOfLines = 0 content.frame = [[5, 40], [315, 100]] content.text = "Where all of the text would go...” content.sizeToFit view.addSubview content end end Result
  20. Wrappers & Libraries • BubbleWrap http://bubblewrap.io/ • SugarCube https://github.com/rubymotion/sugarcube •

    ProMotion https://github.com/clearsightstudio/ProMotion • TeaCup https://github.com/rubymotion/teacup • NanoStoreInMotion https://github.com/siuying/NanoStoreInMotion • Geomotion https://github.com/clayallsopp/geomotion
  21. App Store Submission • Things I always do wrong •

    Forget to change the code-signing certificate from development to production • Use rake archive instead of rake archive:distribution • Attempt to build on a machine without my keys • Process • From submission to availability, about a week • ...unless you get rejected; then things get fun! ;)
  22. Michigan Basic Pistol Safety Quiz • Submission: January 19th •

    Rejection: January 25th • Submission: February 12th • Rejection: February 18th • Submission: February 23rd • Acceptance: February 28th
  23. Michigan Basic Pistol Safety Quiz Version #1 Version #2 Version

    #3 Images for buttons apparently is the magic required!
  24. Sales Numbers As of 04/16/2013 0 50 100 150 13

    6 101 128 Pool 100 Let’s Camp PTCB Study Guide MI Pistol Quiz
  25. Overall Lessons Learned • Content is king unless your idea

    is brilliant • Start the process well in advanced of your desire to be publishing iOS apps to the App Store • Register for your D&B D-U-N-S as soon as possible or pay for rushed processing • Separate your personal & business finances completely to protect yourself as much as possible • Use RubyMotion frameworks and libraries as able • Find a friend who can do design if you can’t...
  26. Additional Information, Part 1 • Small Business Administration: How to

    name a business http://www.sba.gov/content/how-name-business • Michigan Name Availability Search http://bit.ly/12mu6PE • Trademark Electronic Search System (TESS) http://tess2.uspto.gov/bin/gate.exe?f=tess&state=4003:qp0g8h.1.1 • WHOIS Record Lookup https://www.easywhois.com/ • The Logo Company http://thelogocompany.net/ • Apply for IRS EIN https://sa1.www4.irs.gov/modiein/individual/index.jsp • Articles of Organization, State of Michigan http://www.dleg.state.mi.us/bcsc/forms/corp/llc/700.pdf
  27. Additional Information, Part 2 • Rocket Lawyer LLC Operating Agreement

    http://www.rocketlawyer.com/document/llc-operating-agreement.rl • Microsoft BizSpark http://www.microsoft.com/bizspark/ • Duo Security http://duosecurity.com/ • Amazon Web Services (Free Tier) http://aws.amazon.com/free/ • Google Apps for Business http://www.google.com/intl/en/enterprise/apps/business/ • Paymo http://www.paymo.biz/ • Kashoo https://www.kashoo.com/
  28. Additional Information, Part 3 • invoiceto.me http://invoiceto.me/ • PayPal for

    Business https://www.paypal.com/webapps/mpp/merchant • Huntington Bank - Free Small Business Checking https://www.huntington.com/bas/HNB2320.htm • Apple Developer Program https://developer.apple.com/programs/ • Dun & Bradstreet D-U-N-S Registration http://www.dnb.com/get-a-duns-number.html • RubyMotion http://www.rubymotion.com/ • Pardalis Labs iOS Apps https://itunes.apple.com/us/artist/pardalis-labs/id576194764