/basic-ios-template

The template for SwiftPM-based highly modularized (iOS) applications

Primary LanguageSwiftOtherNOASSERTION

basic-ios-template

SwiftPM 5.6 @maximkrouk

Getting started

  1. Fork the repo as a template.

  2. Create a local folder for your app and navigate to it

mkdir <YourAppName>
cd <YourAppName>
  1. Clone the template, rename cloned folder to App and navigate to it
git clone https://github.com/<your-profile>/<your-app-name>-ios.git
mv <your-app-name>-ios App
cd App

You can choose any name or avoid nesting, but we recommend to follow the example (including the case) to get the best result 😌

  1. Rename project.yml, .config/project.yml and .config/preview.yml contents accordingly to your needs
  • bundleIdPrefix: org-domain.org-host to your bundleID prefix
  • targets: MyTarget to <your-app-name>-ios
  • info.properties.CFBundleDisplayName: MyApp to <YourAppName>
  1. Bootstrap the environment
make bootstrap

See Makefile for details

Than you can commit changes and you are ready for the actual development 😎

open Package.xcworkspace

Structure

See Extensions and Dependencies for more details for these modules

Main work is happenning in the root package.

  • <#Module#>Feature naming is used for modules user directly interact with
  • <#Service#> naming modules is used for modules that are used by developers to build feature modules

Basically your Sources folder structure will look kinda like this

Sources { // Main modules
  AppFeature // Entry point for the app, contains AppDelegate, RootViewController, AppState etc., coordinates app flows
  MainFeature // Main app flow, non-main flows may be Onboarding/Admin/Auth for example.
  <#SomeFeature#>Feature // Any other feature
  AppUI // App-specific UI components
  APIClient // Service module example
  Resources // Contains shared resources and generated boilerplate, but you can declare target-specific resources too, see https://github.com/capturecontext/spmgen
}

Note:

Scripts can be improved later so we advice you to keep an eye on the repo and a tracking reference to our main branch to keep your infrastructure up to date 🚀

Recommended dependencies

Will be recommended later (yet in alpha or beta)