# 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.