Welcome
- Part 1: Foundation
1 Your Foundation
- What Is Your Foundation
- There Is No Clear Path
2 Where to Start
- Setting Yourself Up for Success
- A Path Without Distractions
- Choose Your Teacher Wisely
3 Know Your Tools
- Xcode
- Developer Portal
- Provisioning
- Instruments
- Command Line
- Third Party Tools
4 Adopt Best Practices
- What Are Best Practices
- Patterns
- Anti-patterns
- Good Practices for Swift
- Be Critical
5 Security
- Make It Hard
- Plain Text
- Obfuscating Information
- Fetching Sensitive Information
- Encryption
- Privacy
- Logging and Debugging
- Educating Your Client
6 Don’t Ignore Your Foundation
- Under the Hood
- Dependencies
- Don’t Ignore the Fundamentals
7 Respect the SDK
- Know Your Limitations
- Respect the SDK
9 Design Patterns
- Model-View-Controller
- Model-View-ViewModel
- Singletons
- Dependency Injection
- References, Delegation, and Notifications
- Master These Patterns
- 6 Protocol-Oriented Programming
- 7 Reactive Programming
- Part 2: Swift
1 Learn Swift With an Open Mind
- Reference Types and Value Types
- Protocol-Oriented Programming
- Type Safety
- Best Practices
- Forget What You Know
2 Be Critical
3 Embracing Optionals
- Warning Sign
- Elegance and Beauty
- Swift to the Rescue
- Embrace Optionals
4 Mind the Exclamation Mark
- Use Cases
- Convenience and Laziness
- Don’t Be Lazy
- When I Use the Exclamation Mark
- A Personal Choice
5 Exclamation Marks and Fatal Errors
- Clarity Over Subtleness
- Choosing for Clarity
6 Smelly Code
- Forced Unwrapping and Conversion
- Monster Classes
- Massive Methods
- Ignoring Errors
- Singletons
- String Literals
- Is Your Code Smelly
7 Value Types and Reference Types
- What’s the Fuss
- An Example
- Benefits of Value Types
- When to Use Value Types
8 Catching Errors
- When Should You Handle Errors
- Where Should You Handle Errors
- Notifying the User
- Monitoring Application Health
- Don’t Ignore Them
9 Using Fatal Errors to Write Elegant Swift
- What to Do When You Don’t Know What to Do
- Guarding Against Unexpected Events
- Use Fatal Errors Sparingly
- Clarity and Elegance
- Part 3: Projects
1 A Brand New Project
- Step 1: Setting Up the Project
- Step 2: Organizing the Project
- Step 3: Adding a README.md
- Step 4: Build and Run
- Step 5: Adding a .gitignore
- Step 6: Putting the Project Under Source Control
- Step 7: Pushing the Project to GitHub
- Step 8: Optional Steps
2 Project Structure
- An Example
- View Controllers
- Test Target
- On Disk
- What Do I Gain
- Tools
- Caveats
3 Project Hygiene
- Projects Evolve
- Obsolete Files
- Comments
- Documentation
- Don’t Commit Everything
- Guidelines and Exceptions
4 Document Everything
- Start With the Basics
- Make It Easy
- What to Document
- Up to Date
- Make It a Core Tool
- I’m a Team of One
- Make It a Habit
- Time Is Money
- Part 4: Workflow
1 Testing
- Where to Start
- Code Coverage
- Writing Better Code
- Dependency Injection
- Xcode and Testing
- My Current Test Setup
- What Are You Testing
- It Takes Time
2 Continuous Integration
- What Is It
- Why Is This Useful
- Long Hanging Fruit
- Avoid Human Tinkering
- TestFlight
- Painless Releases
- Make It Robust
- Transparency
- Learning Curve
3 Refactoring
- Technical Debt
- Building for the Future
- The Fallacy of Sunk Cost
- Starting Anew
4 Source Control
- The Basics
- Don’t Break These Rules
- Commits
- Stashing
- Patching
- Git Flow
- Some Tips
5 Dependencies
- Minimize Dependencies
- What Is a Dependency
- Fewer Dependencies
- Mapping the Liabilities of a Project
- Don’t Make Your Life Too Easy
- Rolling Your Own
- Choose Wisely
- Becoming a Better Developer
- Watch Out for the Defaults
- Challenge Yourself
6 Automation
- Scripting
- Build Phases
- Automated Testing
- Documentation
- Continuous Integration
- fastlane
- Keep It Simple
7 Privacy
- Protecting the User’s Privacy
- Who Do You Work With
- Giving the User Control
- Third Party SDKs
- Choose Wisely
8 What to Do When You Inherit a Software Project
- First Things First
- Build and Run
- Collect Data
- Dependencies
- Working on the Project
- Document Everything
- And Beyond
9 Speed, Quality, and Technical Debt
- Speed and Quality
- Technical Debt
- Focus
- How to Get Rid of Technical Debt
- Taking Shortcuts
- Part 5: Team
1 Code Reviews
- Just Start
- Calendar and Agenda
- Make Them Actionable
- Keep Them Small
- Be Prepared
- Tools
- That Hurts
- Convincing Management
- Frequency
- But It’s Just Me
- Give It a Try
2 Adopt a Style Guide
- Why Have One
- Automation
- Rough Transition
3 Working In a Team
- Hire the Right People
- Leadership
- Communication
- Give It Time
- Respect
- When Things Hit the Fan
- Ownership and Responsibility
- Share and Ask
4 Being a Leader
- Listen and Be Open
- Modesty, Humility, and Respect
- Work as a Team
- Working With People
- Follow Your Gut
- Lead
- Part 6: Career
1 Open Source
- Start Small
- Taking the Plunge
- Documentation
- Taking It Seriously
- Giving Up Control
- Taking Responsibility
2 You Are the Constant in Your Career
- Putting Yourself First
- Setting Goals
- Learning Requires an Investment
- Take Care of Yourself
- Looking Back
3 Build That Application
- Build and Ship
- Show What You Can
- Stay Ahead
- Rinse and Repeat
- Build That Application
4 Protect Your Productivity
- Working From Home
- Working In an Office
- Minimizing Interruptions
- Find a Quiet Place
- Deal With It
5 Building Your Portfolio
- Scratch an Itch
- Setting Goals
- Learn the Basics
- But Start Creating
6 How Badly Do You Want It
- Contribute
- Build
- Maintain
- Plan and Manage
- Gain Experience
- Be Yourself
- How Badly Do You Want It
- What About You
7 Freelancing and Subcontracting
- Freelancing and Subcontracting
- Being Picky
- Firing Clients
- Part 7: Products
1 Ship, Ship, Ship
- It’s Hard
- How to Ship Consistently
- Internal Deadlines
- Remove Friction and Clutter
2 Talk to Your Customers
- Solve a Problem
- Ground Zero
- Is This for You
- But It’s Fantastic
- A Recipe for Success
3 What Is Stopping You From Shipping
- Why Is This Important
- Start Small
- Remove Clutter
4 Motivation Will Get You Only Halfway
- Motivation Won’t Cut It
- Running a Marathon
- Pulling the Plug
- Start and Persevere
- Challenge Yourself
5 How to Make a Living as a Mobile Developer
- Paid Up Front
- Freemium
- Advertising
- In-App Purchases
- Subscriptions
- Donations
- Finding the Right Business Model
- Experiment But Be Smart
- Evolution
- Part 8: You
1 Being and Staying Productive
- Maintaining Focus
- Protect Your Productivity
- Distraction Is Addictive
- Take Care of Yourself
2 Stop Looking for the Silver Bullet
- An Example
- Investigate and Test
- Stop Looking for the Silver Bullet
3 You Are Not an Imposter
- What Is It
- Why Do I Bring This Up
- Curing Imposter Experience
- Talk About It
- It’s Common
- Don’t Believe Everything You Read
- Don’t Let It Affect You
- Success Through Failure
- Part 9: Learning
1 Choose Your Teacher Wisely
- Information Overload
- Who to Trust
- Focus, Focus, Focus
- Never Stop Learning
2 Taking a Shortcut
- Internship
- Freelancing and Subcontracting
- Learn, Learn, Learn
- Build, Build, Build
- Choose Wisely
3 Some Things Are Hard
- Cut Yourself Some Slack
4 Learn the Rules, Then Break Them
- Examples
- Growing as a Developer
- Creating Something Better