# Why
Fixes#3679
# How
Upgraded ngrok at https://github.com/expo/ngrok/tree/main (no pr, just fork from [upstream v4.1.0](https://github.com/bubenshchykov/ngrok/tree/v4.1.0) and cherry-pick necessary patches). Major changes from the new version:
- async/await support
- ship typings in `ngrok.d.ts`
- `onStatusChange` status callback to fulfill our needs
# Test Plan
since the our ngrok fork is not published yet, this is how i tested:
```sh
cd /path/to/expo-cli/packages/xdl && yarn add -D /path/to/expo/ngrok
cd /path/to/expo-cli && yarn build
/path/to/packages/expo-cli/bin/expo.js init ~/ngrok_test # choose managed blank template
cd ~/ngrok_test
yarn add /path/to/expo/ngrok
/path/to/packages/expo-cli/bin/expo.js start --tunnel
# check tunnel is connected and send a manifest test http request through tunnel url
```
# Checklist
- [x] Review and publish our [ngrok fork](https://github.com/expo/ngrok/tree/main), perhaps to promote main branch as default branch.
- [x] Update new `@expo/ngrok` version in `packages/xdl/pacakge.json` and `packages/xdl/yarn.lock`
# Why
If an app is running with hermes runtime, `expo export` for self hosting update should also generate hermes bytecode instead of plain javascript.
# How
Assuming project should setup with pre-defined shape which set the runtime in gradle.properties like expo/expo#13052.
If exporting project is running with hermes, right after calling metro to build js bundles, we should further call `hermesc` to compile hbc.
The sourcemap also needs to re-compose by metro-source-map.
The overall flow is reference from [react-native's react.gradle](https://github.com/facebook/react-native/blob/0.63-stable/react.gradle).
# Test Plan
### Unit Test
```
HermesBundler-test.ts
parseGradleProperties
should return array of key-value tuple (2 ms)
should keep "=" in value if there are multiple "="
should exclude comment (1 ms)
getHermesBytecodeBundleVersionAsync
should return hermes bytecode version 74 for plain.74.hbc (13 ms)
should throw exception for plain javascript file (5 ms)
should throw exception for nonexistent file
isHermesBytecodeBundleAsync
should return true for hermes bytecode bundle file
should return false for plain javascript file
should throw exception for nonexistent file
```
### E2E Test
```
export-test.ts
should export hbc bundle if running with hermes (31292 ms)
```
# Why
For dev-menu to launch Hermes inspector.
# How
Through from metro-inspector-proxy (http://localhost:8081/json/list), we could get the url to open inspector. This requires manual steps to open inspector.
In this PR, we will launch chromium to open the inspector automatically.
# Test Plan
### Unit Test
```
createJsInspectorMiddleware
should return specific app entity for GET request with given applicationId (5 ms)
should return 404 for GET request with nonexistent applicationId (1 ms)
should return 400 for GET request without parameters
should open browser for PUT request with given applicationId (14 ms)
```
* [config-plugins] rename getBuildConfigurationForId -> getBuildConfigurationsForListId
* [config-plugins] make getBundleIdentifierFromPbxproj return bundle id for a named target
* [config-plugins] make setProvisioningProfileForPbxprojAsync set provisioning profile only for a particular build configuration
* address PR feedback
* Rename @expo/xdl to xdl
* Remove unused modules from the xdl interface
* Remove unused TurtleApi
* Remove unused Detach.detachAsync
* Remove unused code in src/detach folder
- Remove StandaloneContextService (this code now always runs in user context)
- Remove unused functions in ExponentTools and IosWorkspace
- Remove unused modules
- All of the remaining files in src/detach folder are now TypeScript for easier refactoring
* Remove `xdl.Modules`