Skip to content
This repository has been archived by the owner on Oct 15, 2019. It is now read-only.

Updating the BraveRewards framework

Kyle Hickinson edited this page Jul 3, 2019 · 7 revisions

Prerequisites

  1. Clone brave-browser if you haven't already
  2. Make sure you meet brave-browser's prerequisites
  3. Make sure its up to date:
    cd brave-browser
    git checkout -- "*" && git pull
    npm run init -- --target_os=ios

Setting up an Xcode work environment

You can now setup an Xcode workspace to make working on iOS code much easier.

Run one of the following command while at the root folder of brave-browser:

# Creates a debug target
npm run build -- --target_os=ios --xcode_gen=ios
# Creates a release target
npm run build -- Release --target_os=ios --xcode_gen=ios
# Creates a device build target
npm run build -- --target_os=ios --target_arch=arm64 --xcode_gen=ios

Assuming you ran the first command, this will create a folder at src/out/ios_Debug_Xcode which will contain Workspace.xcworkspace with two projects:

  • Products: This will be what you build. You will likely only ever be choosing the BraveRewards.framework target scheme. You can remain on this scheme and still have proper autocomplete

  • Sources: This has all the sources of BraveRewards.framework found in its BUILD.gn and its dependencies.

    If a file does not appear here, it is because it either:

    • Does not appear in the sources list in its accompanying BUILD.gn file, or
    • Is a generated file (such as mojo generated models)

    These files can still be navigated to by ⌘-clicking #imports even though they don't appear in the project after you have built the project at least once

Important Note: Edits to this Xcode project do not affect the ninja build, so if you add/remove a file, you must update BUILD.gn to reflect that.

Debugging

Assuming you have created a debug simulator Xcode environment (npm run build -- --target_os=ios --xcode_gen=ios), you can debug both the test app and unit tests.

To debug BraveRewardsExample attach to BraveRewardsExample via Xcode, using Debug > Attach to Process or Attach to Process by PID or Name if you need the debugger attached immediately at startup

To debug unit tests, attach to brave_rewards_ios_tests via Xcode, using Debug > Attach to Process by PID or Name before running them via command below

Unit Tests

At the moment this doesn't support setting up a unit test bundle, so any changes to the tests files must still be ran using npm run test brave_rewards_ios_tests -- --target_os=ios as seen below

Making Changes to BraveRewards.framework

When you have changes that need to be fixed in the BraveRewards.framework (such as ledger or ads API), this needs to happen in brave-core.

  1. Create an issue with your problem and required changes and add the brave-core label to that issue
  2. Create your branch on brave-core:
    cd src/brave
    git checkout -b my-feature-branch
  3. Make your changes to the BraveRewards.framework files located in src/brave/vendor/brave-ios
    • Any files added or removed must be reflected in BUILD.gn (sources)
    • Any directories added or removed must be reflected in BUILD.gn (include_dirs)
  4. Build your changes either using Xcode or running one of the following commands:
    # This has to be run at brave-browser root dir
    cd ../..
    # Creates debug build
    npm run build -- target_os=ios
    # Creates release build
    npm run build -- Release target_os=ios
    # Creates arm64 build
    npm run build -- target_os=ios target_arch=arm64
  5. Run the tests:
    npm run test brave_rewards_ios_tests -- --target_os=ios
  6. Copy a FAT framework to brave-rewards-ios by running scripts/build_in_core.sh --skip-update ~/path/to/brave-browser.
    • Note: You must include --skip-update or your local changes will be removed
    • If your PR is likely to take some time and your branch is on the brave-core remote you can edit package.json in brave-browser to point brave-core to your branch. This means any npm run init will set brave-core to your branch and not master.
  7. When things are working correctly, open a PR in brave-core and add all recommended reviewers.
    • Add auto-closing words to your PR description that references your original issue created in step 1 (i.e. resolves https://github.com/brave/brave-rewards-ios/issues/9000)
    • If your changeset does not affect the desktop build (i.e. no changes were made to non-ios files), make sure to add the appropriate CI labels to your PR on creation: CI/skip-windows, CI/skip-linux, CI/skip-macos, and CI/skip-android. This will cut the time waiting for CI to complete and save CI resources. If you forget to add these you can login to Jenkins and abort the build, add the labels, then restart the build.
  8. Upon your PR being merged by you or another member and assuming your brave-rewards-ios changeset requires the updated brave-core code, update your library using scripts/build_in_core.sh ~/path/to/brave-browser again (this time ommiting skip-upgrade) and submit a PR on brave-rewards-ios with the changes related to your brave-core changes.