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
.xcworkspace and .xcodeproj
- Open all.xcworkspace 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.
Warning: do not open the .xcodeproj
as this file does not configure the “Legacy Build System”. If you do open this file, many things won‘t work properly (clicking on an error won’t open the corresponding file, ...).
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.workspace
- 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.