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.