Revision control

Copy as Markdown

This branch (main)
This branch works with [Xcode 14.1.0](, Swift 5.7 and supports iOS 13 and above.
*Please note:* Both Intel and M1 macs are supported 🎉 and we use swift package manager.
Please make sure you aim your pull requests in the right direction.
For bug fixes and features for a specific release, use the version branch.
Getting involved
Want to contribute but don't know where to start? Here is a list of [issues that are contributor friendly](
Building the code
1. Install the latest [Xcode developer tools]( from Apple.
1. Install, [Brew](, Node, and a Python3 virtualenv for localization scripts:
brew update
brew install node
pip3 install virtualenv
1. Clone the repository:
1. Install Node.js dependencies, build user scripts and update content blocker:
cd firefox-ios
sh ./
1. Open `Client.xcodeproj` in Xcode.
1. Build the `Fennec` scheme in Xcode.
Note: In case you have dependencies issues with SPM, you can try:
- Xcode -> File -> Packages -> Reset Package Caches
- Xcode -> File -> Packages -> Resolve Package Versions
Building User Scripts
User Scripts (JavaScript injected into the `WKWebView`) are compiled, concatenated, and minified using [webpack]( User Scripts to be aggregated are placed in the following directories:
|-- /Frontend
|-- /UserContent
|-- /UserScripts
|-- /AllFrames
| |-- /AtDocumentEnd
| |-- /AtDocumentStart
|-- /MainFrame
|-- /AtDocumentEnd
|-- /AtDocumentStart
This reduces the total possible number of User Scripts down to four. The compiled output from concatenating and minifying the User Scripts placed in these folders resides in `/Client/Assets` and are named accordingly:
* `AllFramesAtDocumentEnd.js`
* `AllFramesAtDocumentStart.js`
* `MainFrameAtDocumentEnd.js`
* `MainFrameAtDocumentStart.js`
To simplify the build process, these compiled files are checked-in to this repository. When adding or editing User Scripts, these files can be re-compiled with `webpack` manually. This requires Node.js to be installed, and all required `npm` packages can be installed by running `npm install` in the project's root directory. User Scripts can be compiled by running the following `npm` command in the root directory of the project:
npm run build
Want to contribute to this repository? Check out [Contributing Guidelines](
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at