how i became an ios developer for fun and debt
DESCRIPTION
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.TRANSCRIPT
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
A historical Thought
• In 1996, everyone wanted to make a web site.• In 2013, everyone wants to make a mobile app.
20131996
Unlocking the true
power of technology, regardless
of platform!
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!
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
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...
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!
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!
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
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!
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
Other Services I use (for free)
Web Hosting General Software
Two-Factor AuthenticationE-Mail & Misc.
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.
Business CreationArti
cles o
f Org
aniza
tion F
iled
Jun. 15th
IRS E
IN/ O
pera
ting A
gree
men
t
Jun. 28th
Bank
Acc
ount
Crea
ted
Jun. 30th
pard
alisla
bs.co
m re
gister
ed
Jul. 9th
Starte
d log
o des
ign pr
oces
sJul. 10th
Apple
Accou
nt C
reatio
n
Jul. 25th
D-U-N
-S Pr
oces
s Star
ted
Jul. 27th
D-U-N
-S Pr
oces
s Com
plete
Aug. 29th
Apple
Develo
per A
ccou
nt C
reated
Sep. 17th
First
app s
ubm
itted
Nov. 3rd
First
app a
ccep
ted
Nov. 11th
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
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
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-100https://github.com/mstanislav/lets-camphttps://github.com/mstanislav/ptcb-studyhttps://github.com/mstanislav/michigan-pistol-safety-quiz
...and I’ve given back, too.
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.redColorend
Objective-C
RubyMotion
Source: http://clayallsopp.com/posts/the-ruby-motion-way/
RubyMotion Build Demo
RubyMotion REPL
Example AppDelegateclass 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 endend
Example Controllerclass 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 endend
Result
Wrappers & Libraries• BubbleWrap
http://bubblewrap.io/
• SugarCubehttps://github.com/rubymotion/sugarcube
• ProMotionhttps://github.com/clearsightstudio/ProMotion
• TeaCuphttps://github.com/rubymotion/teacup
• NanoStoreInMotionhttps://github.com/siuying/NanoStoreInMotion
• Geomotionhttps://github.com/clayallsopp/geomotion
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! ;)
Michigan Basic Pistol Safety Quiz
• Submission: January 19th• Rejection: January 25th
• Submission: February 12th• Rejection: February 18th
• Submission: February 23rd• Acceptance: February 28th
Michigan Basic Pistol Safety Quiz
Version #1 Version #2 Version #3Images for buttons apparently is the magic required!
My Apps
99¢ 99¢
99¢ Free
Quick App Demos
Sales NumbersAs of 04/16/2013
0 50 100 150
13
6
101
128
Pool 100
Let’s Camp
PTCB Study Guide
MI Pistol Quiz
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...
Additional Information, Part 1• Small Business Administration: How to name a business
http://www.sba.gov/content/how-name-business
• Michigan Name Availability Searchhttp://bit.ly/12mu6PE
• Trademark Electronic Search System (TESS)http://tess2.uspto.gov/bin/gate.exe?f=tess&state=4003:qp0g8h.1.1
• WHOIS Record Lookuphttps://www.easywhois.com/
• The Logo Companyhttp://thelogocompany.net/
• Apply for IRS EINhttps://sa1.www4.irs.gov/modiein/individual/index.jsp
• Articles of Organization, State of Michiganhttp://www.dleg.state.mi.us/bcsc/forms/corp/llc/700.pdf
Additional Information, Part 2• Rocket Lawyer LLC Operating Agreement
http://www.rocketlawyer.com/document/llc-operating-agreement.rl
• Microsoft BizSparkhttp://www.microsoft.com/bizspark/
• Duo Securityhttp://duosecurity.com/
• Amazon Web Services (Free Tier)http://aws.amazon.com/free/
• Google Apps for Businesshttp://www.google.com/intl/en/enterprise/apps/business/
• Paymohttp://www.paymo.biz/
• Kashoohttps://www.kashoo.com/
Additional Information, Part 3• invoiceto.me
http://invoiceto.me/
• PayPal for Businesshttps://www.paypal.com/webapps/mpp/merchant
• Huntington Bank - Free Small Business Checkinghttps://www.huntington.com/bas/HNB2320.htm
• Apple Developer Programhttps://developer.apple.com/programs/
• Dun & Bradstreet D-U-N-S Registrationhttp://www.dnb.com/get-a-duns-number.html
• RubyMotionhttp://www.rubymotion.com/
• Pardalis Labs iOS Appshttps://itunes.apple.com/us/artist/pardalis-labs/id576194764
Thanks! Questions?
•[email protected]•uncompiled.com•@markstanislav•github.com/mstanislav