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.