Skip to content

Latest commit

 

History

History
154 lines (109 loc) · 6.25 KB

File metadata and controls

154 lines (109 loc) · 6.25 KB

iOS

  1. Supported OS Versions
  2. Supported Devices
  3. Development Tools
  4. Codesigning
  5. Dependency Management
  6. Coding Conventions
  7. Apple Guidelines
  8. .gitignore
  9. Test-Driven Development
  10. Automated Builds
  11. Crash Logs
  12. Best Practices
  13. Distributing To AppStore

Supported OS Versions

iOS

  • iOS 8.1+
  • iOS 9.x

watchOS

  • watchOS 2.0+

tvOS

  • tvOS 9.0+

Supported Devices

We support:

  • iPhones:
    • iPhone 4S
    • iPhone 5, iPhone 5C, iPhone 5S
    • iPhone 6, iPhone 6 Plus
    • iPhone 6s, iPhone 6s Plus
  • iPads:
    • iPad 2, iPad 3, iPad 4
    • iPad Air, iPad Air 2
    • iPad Mini 1st generation, iPad Mini Retina
    • iPad Pro
  • iPods:
    • iPod 5th generation
    • iPod 6th generation

Development Tools

Programming Languages

  • Swift 2.1+ (preferred)
  • Objective-C

IDE

  • xCode 7.2+

Other Tools

  • Homebrew for package management (not MacPorts)
  • If you need to manage Ruby environment, prefer rbenv to rvm. System Ruby is OK for iOS development needs, though.

Codesigning

  • Never revoke certificates yourself, ask Team Leader to do that if needed.
  • Never use "Fix Issue" option of xCode when you experience any issue with certificate (but you can use it for provisioning profile issues).
  • Use MLSDev development certificate for running apps which do not use Push Notifications.
  • For testing Push Notifications use client's development certificate.
  • Follow Provisioning Portal Naming Conventions (profiles, certificates and devices)
  • Use match from Fastlane for generating development and distribution certificates as well as provisioning profiles. When generating certificates, specify not empty password, other way you won't be able to open certificate by tools like Knuff.

Dependency Management

Use CocoaPods to add third-party components (frameworks, libraries) to your project. Use frameworks, not static libraries, for dependencies. This is done by calling use_frameworks! method in Podfile.

Pods directory is considered a build artefact, and therefore should be added to .gitignore.

Podfile.lock file should be committed to repository, along with .xcworkspace file.

Coding Conventions

Apple Guidelines

Strictly follow these guidelines:

.gitignore

https://www.gitignore.io/api/swift

Test-Driven Development

Use XCTest for unit tests

Matcher Frameworks:

Mocking Frameworks(Objective-C):

Automated Builds

  • Use fastlane for app building and submission
  • Make schemes shared and commit them to repository
  • Before submitting build, all unit tests must pass. If even 1 test is failing, build should also fail
  • Stable builds are made in the end of each development cycle (Iteration, Sprint, Milestone etc)
  • Access should be given to developers, testers, managers and client team
  • Apple's Testflight is preferred service for delivering beta builds
  • There should be 2 types of builds - nightly and stable

Crash Logs

Use Fabric for crash logs.

Preferred libraries and frameworks

Push notifications

  • Use Knuff for testing push notifications.
  • Do not store push certificates in repository.
  • Use development certificate for debug builds and production certificate for release builds.

Best Practices

  • Create app user interface in Interface Builder, using XIBs or Storyboards. Custom UIView creation in a source code files is undesirable.
  • Avoid big Storyboards. Split Storyboards into smaller ones. More than 7-8 ViewControllers in one Storyboard are unacceptable. Use Storyboard references in XCode 7 to refactor large storyboards into small ones.
  • Do not let UIViewController subclasses grow to more than 400 lines of code. Always try to keep them simple and short, preferably under 100 lines of code.

Distributing To AppStore

  • Make sure, that your app works with correct server and API version
  • Update your changelog with relevant changes
  • Merge develop branch to master branch
  • Create a tag in repository, that represents your Release