iOS
Requirements
- Xcode (version 16.3)
- An iPhone 16 Pro simulator (iOS 18.1) set up
Setup
-
Clone the repository:
$ git clone https://github.com/bitwarden/ios -
Install Mint:
$ brew install mintAlternatively, if you prefer to install Mint without
brew, clone the Mint repo into a temporary directory and runmake.$ git clone https://github.com/yonaskolb/Mint.git
$ cd Mint
$ make -
Bootstrap the project:
$ Scripts/bootstrap.shNote Because
Scripts/bootstrap.shis how the project is generated,bootstrap.shwill need to be run every time the project configuration or file structure has changed (for example, when files have been added, removed or moved). It is typically best practice to runbootstrap.shany time you switch branches or pull down changes.If you're using swiftly to manage Swift versions, some packages require a different Swift version than the default one, which can cause conflicts. If you see related errors, try
swiftly run Scripts/bootstrap.sh +xcode.Alternatively, you can create git hooks to automatically execute the
bootstrap.shscript every time a git hook occurs. To use the git hook scripts already defined in theScriptsdirectory, copy the scripts to the.git/hooksdirectory.$ cp Scripts/post-merge .git/hooks/
$ cp Scripts/post-checkout .git/hooks/ -
Install fastlane for automated package deployments:
Note We manage non-system Ruby installations with
rbenvas homebrew tends to break the required Ruby dependencies$ brew install rbenv
$ rbenv initFrom the root directory of the
iosrepo do the following:$ rbenv install -s
$ bundle installNote If
bundle installfails you may need to restart your shell orsourceyour appropriate profile to recognize the newly installed non-system Ruby, e.g.source ~/.zprofilethenbundle installagainOnce complete you can test fastlane with:
$ bundle exec fastlane --versionWhen necessary, update the Ruby version with:
$ rbenv install 3.4.4Update dependencies with:
$ bundle updateIf you're still having issues, here are some helpful commands for troubleshooting:
$ which -a ruby
$ which -a rbenv
$ which -a fastlane
$ rbenv which fastlane
$ echo $PATH
Run the app
- Open the project in Xcode 16.3+.
- Run the app in the Simulator with the
Bitwardentarget for the Password Manager app orAuthenticatorfor the Authenticator app.
[!TIP] To open the workspace in Xcode, just go to the root folder with the CLI and run:
open Bitwarden.xcworkspace
Running tests
Due to slight snapshot test variations between iOS versions, the test target requires running in an iPhone 16 Pro simulator (iOS 18.1).
-
In Xcode's toolbar, select the project and a connected device or simulator.
- The
Generic iOS Deviceused for builds will not work for testing.
- The
-
In Xcode's menu bar, select
Product > Test.- Test results appear in the Debug Area, which can be accessed from
View > Debug Area > Show Debug Areaif not already visible.
- Test results appear in the Debug Area, which can be accessed from
Linting
This project is linted using both SwiftLint and
SwiftFormat. Both tools run in linting mode with
every build of the Bitwarden target. However, if you would like to have SwiftFormat autocorrect
any issues that are discovered while linting, you can manually run the fix command
mint run swiftformat ..
Additionally, if you would like SwiftFormat to autocorrect any issues before every commit, you can
use a git hook script. To use the git hook script already defined in the Scripts directory, copy
the script to the .git/hooks directory.
$ cp Scripts/pre-commit .git/hooks/