chromium/docs/ios/xcode_tips.md

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