1# Developing Chrome for iOS with the Xcode IDE
2
3This document contains notes used during a presentation about how to use Xcode
4to develop Chrome for iOS.
5
6## Background
7
8### .xcodeproj
9
10*   Open all.xcodeproj only.
11*   Generated from BUILD.gn files.
12*   Don't make changes to it as it is a "fake" representation of the project
13    -   changes will not be committed
14    -   changes will be overwritten without warning
15*   Modify BUILD files instead
16*   Added BUILD.gn files/`source_sets` need to be referenced from other ones as
17    a `dep` in order for it to be shown in xcode.
18
19### Adding new files
20
21*   Create new files with `tools/boilerplate.py`
22*   Add files to BUILD.gn `mate ios/chrome/...BUILD.gn`
23*   Add new source_set target as a dep of another target
24*   Execute `gclient runhooks` or `gclient sync`
25
26### Simulators
27
28*   Simulators build for Mac architecture, not emulators. Fast, generally good
29    for most development
30*   To run on device, need provisioning profiles and certificate
31
32## Xcode
33
34*   Project location is `src/out/build/`, open `all.xcodeproj`
35*   Choose "Automatically generate targets" after a `gclient sync`
36*   Start typing while dropdowns are presented to filter the displayed items
37
38### Targets
39
40*   `chrome' is the main application target
41*   `ios_web_shell` and `ios_web_view_shell` test lower level of application
42
43### Tests
44
45*   Unittests/Inttests
46    -   Add flags to specify tests to run (Option-Click on unittest target name,
47        select Run from left panel, add to "Arguments Passed on Launch")
48    -   `gtest_filter=TestClass.*`
49    -   `gtest_repeat=20`
50    -   Full list of options available by sending an unknown option
51
52*   EarlGrey
53    -   EG1 deprecated
54    -   EG2 are current UI tests
55        -   A separate "test" process communicates with "the app".
56        -   EDO is term for "distant object" on "the other side".
57        -   egtest files can run under both EG1 and EG2 with correct setup in
58            BUILD.gn because the layer of helpers encapsulate the necessary
59            differences.
60