# Developing Chrome for iOS with the Xcode IDE
This document contains notes used during a presentation about how to use Xcode
to develop Chrome for iOS.
## Background
### .xcodeproj
* Open all.xcodeproj only.
* Generated from BUILD.gn files.
* Don't make changes to it as it is a "fake" representation of the project
- changes will not be committed
- changes will be overwritten without warning
* Modify BUILD files instead
* Added BUILD.gn files/`source_sets` need to be referenced from other ones as
a `dep` in order for it to be shown in xcode.
### Adding new files
* Create new files with `tools/boilerplate.py`
* Add files to BUILD.gn `mate ios/chrome/...BUILD.gn`
* Add new source_set target as a dep of another target
* Execute `gclient runhooks` or `gclient sync`
### Simulators
* Simulators build for Mac architecture, not emulators. Fast, generally good
for most development
* To run on device, need provisioning profiles and certificate
## Xcode
* Project location is `src/out/build/`, open `all.xcodeproj`
* Choose "Automatically generate targets" after a `gclient sync`
* Start typing while dropdowns are presented to filter the displayed items
### Targets
* `chrome' is the main application target
* `ios_web_shell` and `ios_web_view_shell` test lower level of application
### Tests
* Unittests/Inttests
- Add flags to specify tests to run (Option-Click on unittest target name,
select Run from left panel, add to "Arguments Passed on Launch")
- `gtest_filter=TestClass.*`
- `gtest_repeat=20`
- Full list of options available by sending an unknown option
* EarlGrey
- EG1 deprecated
- EG2 are current UI tests
- A separate "test" process communicates with "the app".
- EDO is term for "distant object" on "the other side".
- egtest files can run under both EG1 and EG2 with correct setup in
BUILD.gn because the layer of helpers encapsulate the necessary
differences.