Bug 1621950 - fix some myst ref warnings r=firefox-source-docs-reviewers,devtools-reviewers,sylvestre

Differential Revision: https://phabricator.services.mozilla.com/D173843
This commit is contained in:
ogiorgis 2023-03-30 08:01:22 +00:00
parent 7dbd46b28a
commit f59f695642
32 changed files with 72 additions and 72 deletions

View File

@ -1,6 +1,6 @@
# Architecture
This document provides a high-level overview of how the accessibility code is structured. See [the Document Accessibility Lifecycle page](/accessible/DocumentAccessibilityLifecycle.html#docaccessible-creation) for a lower level description of the code.
This document provides a high-level overview of how the accessibility code is structured. See [the Document Accessibility Lifecycle page](DocumentAccessibilityLifecycle.md#docaccessible-creation) for a lower level description of the code.
## Process Model
The accessibility component spans multiple processes. In the parent process, it creates an accessibility tree of the Firefox UI and responds to requests from screen readers. In content processes, the accessibility component creates accessibility trees from web content.

View File

@ -31,11 +31,11 @@ Please note that some targeting attributes require stricter controls on the tele
* [topFrecentSites](#topfrecentsites)
* [totalBookmarksCount](#totalbookmarkscount)
* [usesFirefoxSync](#usesfirefoxsync)
* [isFxAEnabled](#isFxAEnabled)
* [isFxASignedIn](#isFxASignedIn)
* [isFxAEnabled](#isfxaenabled)
* [isFxASignedIn](#isfxasignedin)
* [creditCardsSaved](#creditcardssaved)
* [addressesSaved](#addressessaved)
* [xpinstallEnabled](#xpinstallEnabled)
* [xpinstallEnabled](#xpinstallenabled)
* [hasPinnedTabs](#haspinnedtabs)
* [hasAccessedFxAPanel](#hasaccessedfxapanel)
* [isWhatsNewPanelEnabled](#iswhatsnewpanelenabled)
@ -59,12 +59,12 @@ Please note that some targeting attributes require stricter controls on the tele
* [doesAppNeedPrivatePin](#doesappneedprivatepin)
* [isBackgroundTaskMode](#isbackgroundtaskmode)
* [backgroundTaskName](#backgroundtaskname)
* [userPrefersReducedMotion](#userPrefersReducedMotion)
* [colorwaysActive](#colorwaysActive)
* [userEnabledActiveColorway](#userEnabledActiveColorway)
* [inMr2022Holdback](#inMr2022Holdback)
* [distributionId](#distributionId)
* [fxViewButtonAreaType](#fxViewButtonAreaType)
* [userPrefersReducedMotion](#userprefersreducedmotion)
* [colorwaysActive](#colorwaysactive)
* [userEnabledActiveColorway](#userenabledactivecolorway)
* [inMr2022Holdback](#inmr2022holdback)
* [distributionId](#distributionid)
* [fxViewButtonAreaType](#fxviewbuttonareatype)
## Detailed usage

View File

@ -261,7 +261,7 @@ A descriptor for an accessor property has the form:
where *getter* and *setter* are grips on the property's getter and setter functions. These may be `{ "type":"undefined" }` if the property lacks the given accessor function.
A **safe getter value descriptor** provides a value that an inherited accessor returned when applied to an instance. (See [Finding An Object's Prototype And Properties](#finding-an-objects-prototype-and-properties) for an explanation of why and when such descriptors are used.) Such a descriptor has the form:
A **safe getter value descriptor** provides a value that an inherited accessor returned when applied to an instance. (See [Finding An Object's Prototype And Properties](#finding-an-object-s-prototype-and-properties) for an explanation of why and when such descriptors are used.) Such a descriptor has the form:
```
{ "getterValue": <value>, "getterPrototypeLevel": <level>,
@ -282,7 +282,7 @@ then a grip on this value would have the form:
{ "type":"object", "class":"Object", "actor":<actor> }
```
and sending a ["prototypeAndProperties"](#finding-an-objects-prototype-and-properties) request to *actor* would produce the following reply:
and sending a ["prototypeAndProperties"](#finding-an-object-s-prototype-and-properties) request to *actor* would produce the following reply:
```
{ "from":<actor>, "prototype":{ "type":"object", "class":"Object", "actor":<objprotoActor> },
@ -297,7 +297,7 @@ and sending a ["prototypeAndProperties"](#finding-an-objects-prototype-and-prope
```
Sending a ["prototypeAndProperties"](#finding-an-objects-prototype-and-properties) request to an object actor referring to a DOM mouse event might produce the following reply:
Sending a ["prototypeAndProperties"](#finding-an-object-s-prototype-and-properties) request to an object actor referring to a DOM mouse event might produce the following reply:
```
{ "from":<mouseEventActor>, "prototype":{ "type":"object", "class":"MouseEvent", "actor":<mouseEventProtoActor> },

View File

@ -40,12 +40,12 @@ It can also be useful for patch authors: if the changes comply with these guidel
* Test changes:
* The feature or bug is [tested by new tests, or a modification of existing tests](../tests/writing-tests.md).
* [Test logging](../tests/writing-tests.md#logs-and-comments) is sufficient to help investigating test failures/timeouts.
* [Test is e10s compliant](../tests/writing-tests.md#e10s-electrolysis) (doesn't try to access web content from the parent process, etc…).
* [Test is e10s compliant](../tests/writing-tests.md#electrolysis) (doesn't try to access web content from the parent process, etc…).
* Tests are [clean and maintainable](../tests/writing-tests.md#writing-clean-maintainable-test-code).
* A try push has started (or even better, is green already).
* User facing changes:
* If any user-facing interfaces are added/modified, double-check the changes with the UX mockups or specs, if available. If there's any confusion, need-info the UX designer.<!--TODO this needs updating with the new process-->
* If a user facing string has been added, it is localized and follows [the localization guidelines](../files/adding-files.html#localization-l10n).
* If a user facing string has been added, it is localized and follows [the localization guidelines](../files/adding-files.md#localization-l10n).
* If a user-facing string has changed meaning, [the key has been updated](https://mozilla-l10n.github.io/documentation/localization/making_string_changes.html).
* If a new image is added, it is a SVG image or there is a reason for not using a SVG.
* If a SVG is added/modified, it follows [the SVG guidelines](../frontend/svgs.md).

View File

@ -23,7 +23,7 @@ ac_add_options RUSTC_OPT_LEVEL=2
## Profile Guided Optimization (PGO)
[Profile Guided
Optimization](/build/buildsystem/pgo.html#profile-guided-optimization) is
Optimization](/build/buildsystem/pgo.rst#profile-guided-optimization) is
disabled by default and may improve runtime by up to 20%. However, it takes a
long time to build. To enable, add the following to your [mozconfig]:
```
@ -95,4 +95,4 @@ include Instruments on OSX (part of XCode), [RotateRight
Zoom](http://www.rotateright.com/) on Linux (uses perf underneath), and
Intel VTune on Windows or Linux.
[mozconfig]: /setup/configuring_build_options.html#using-a-mozconfig-configuration-file
[mozconfig]: /setup/configuring_build_options.rst#using-a-mozconfig-configuration-file

View File

@ -73,7 +73,7 @@ instances:
![](../img/memory-tool-in-group.png)
For each instance, you can see the [retained size and shallow
size](dominators.html#shallow_and_retained_size) of
size](dominators.md#shallow_and_retained_size) of
that instance. In this case, you can see that the first three arrays
have a fairly large shallow size (5% of the total heap usage) and a much
larger retained size (26% of the total).
@ -81,7 +81,7 @@ larger retained size (26% of the total).
On the right-hand side is a pane that just says \"Select an item to view
its retaining paths\". If you select an item, you\'ll see the [Retaining
paths
panel](/dominators_view.html#retaining_paths_panel)
panel](dominators_view.md#retaining_paths_panel)
for that item:
![](../img/memory-tool-in-group-retaining-paths.png)

View File

@ -78,7 +78,7 @@ Interesting things to look for:
having your classes in the list is *not* ok. That means no one is
looking at them, and we won't be able to tell if someone introduces
a leak. (See
[below](bloatview.html#how-to-instrument-your-objects-for-bloatview)
[below](#how-to-instrument-your-objects-for-bloatview)
for how to fix this.)
- **The Bytes Leaked for your classes should be zero!** - Need I say
more? If it isn't, you should use the other tools to fix it.

View File

@ -23,16 +23,16 @@ To see the Dominators view for a snapshot, select \"Dominators\" in the
The Dominators view consists of two panels:
- the [Dominators Tree
panel](dominators_view.html#dominators_tree_panel)
panel](#dominators-tree-panel)
shows you which nodes in the snapshot are retaining the most memory
- the [Retaining Paths
panel](dominators_view.html#retaining_paths_panel)
panel](#retaining-paths-panel)
(new in Firefox 47) shows the 5 shortest retaining paths for a
single node.
![](../img/dominators-2.png)
### Dominators Tree panel {#Dominators_Tree_panel}
### Dominators Tree panel
The Dominators Tree tells you which objects in the snapshot are
retaining the most memory.
@ -117,7 +117,7 @@ allocation stacks are currently only recorded for objects, not for
arrays, strings, or internal structures.
:::
### Retaining Paths panel {#Retaining_Paths_panel}
### Retaining Paths panel
::: {.geckoVersionNote}
The Retaining Paths panel is new in Firefox 47.

View File

@ -12,17 +12,17 @@ your code you are allocating memory.
## The basics
- Opening [the memory
tool](basic_operations.html#opening-the-memory-tool)
tool](basic_operations.md#opening-the-memory-tool)
- [Taking a heap
snapshot](basic_operations.html#saving-and-loading-snapshots)
snapshot](basic_operations.md#saving-and-loading-snapshots)
- [Comparing two
snapshots](basic_operations.html#comparing-snapshots)
snapshots](basic_operations.md#comparing-snapshots)
- [Deleting
snapshots](basic_operations.html#clearing-a-snapshot)
snapshots](basic_operations.md#clearing-a-snapshot)
- [Saving and loading
snapshots](basic_operations.html#saving-and-loading-snapshots)
snapshots](basic_operations.md#saving-and-loading-snapshots)
- [Recording call
stacks](basic_operations.html#recording-call-stacks)
stacks](basic_operations.md#recording-call-stacks)
------------------------------------------------------------------------

View File

@ -214,7 +214,7 @@ physical meaning. Avoid them.
The most notable example of a hybrid proxy measurement is the ["Energy
Impact" used by OS X's Activity
Monitor](Activity_Monitor_and_top.md#What_does_Energy_Impact_measure).
[Monitor](activity_monitor_and_top.md#What-does-Energy-Impact-measure).
## Ways to user power-related measurements
@ -305,7 +305,7 @@ power consumption.
residency, GPU usage, etc.) may be helpful.
- Animations are sometimes the cause of high power consumption. The
[animation
inspector](/en-US/docs/Tools/Page_Inspector/How_to/Work_with_animations#Animation_inspector)
inspector](/devtools-user/page_inspector/how_to/work_with_animations/index.rst#animation-inspector)
in the Firefox Devtools can identify them. Alternatively, [here is
an
explanation](https://bugzilla.mozilla.org/show_bug.cgi?id=1190721#c10)

View File

@ -108,6 +108,6 @@ The distribution data is omitted if there was zero or one samples taken.
## Combining with `powermetrics`
On Mac, you can use the [mach power](powermetrics.html#mach-power) command
On Mac, you can use the [mach power](powermetrics.md#mach-power) command
to run `rapl` in combination with `powermetrics` in a way that gives the
most useful summary measurements for each of Firefox, Chrome and Safari.

View File

@ -251,4 +251,4 @@ it will leave the exception's `cause` property undefined.
[debugger]: Debugger-API.md
[inv fr]: Debugger.Frame.html#invocation-functions-and-debugger-frames
[inv fr]: Debugger.Frame.md#invocation-functions-and-debugger-frames

View File

@ -479,11 +479,11 @@ Accessing this property will throw if `.onStack == false`.
[vf]: #visible-frames
[debugger-object]: Debugger.md
[object]: Debugger.Object.md
[dbg code]: Conventions.html#debuggee-code
[dbg code]: Conventions.md#debuggee-code
[inv fr]: #invocation-functions-and-debugger-frames
[cv]: Conventions.html#completion-values
[cv]: Conventions.md#completion-values
[script]: Debugger.Script.md
[environment]: Debugger.Environment.md
[rv]: Conventions.html#resumption-values
[rv]: Conventions.md#resumption-values
[fr eval]: #eval-code-options
[saved-frame]: ../SavedFrame/index

View File

@ -567,9 +567,9 @@ In a census, all the various forms of JavaScript code are placed in the
[bernoulli-trial]: https://en.wikipedia.org/wiki/Bernoulli_trial
[alloc-sampling-probability]: #allocsamplingprobability
[object]: Debugger.Object.md
[allocation-site]: Debugger.Object.html#allocationsite
[allocation-site]: Debugger.Object.md#allocationsite
[saved-frame]: ../SavedFrame/index
[drain-alloc-log]: #drainAllocationsLog
[max-alloc-log]: #maxAllocationsLogLength
[take-census]: #takecensus-options
[timestamps]: ./Conventions.html#timestamps
[timestamps]: ./Conventions.md#timestamps

View File

@ -675,8 +675,8 @@ promise. There are several different sorts of reaction records:
[promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
[saved-frame]: ../SavedFrame/index
[tracking-allocs]: Debugger.Memory.html#trackingallocationsites
[inv fr]: Debugger.Frame.html#invocation-functions-and-debugger-frames
[wouldrun]: Conventions.html#the-debugger-debuggeewouldrun-exception
[cv]: Conventions.html#completion-values
[fr eval]: Debugger.Frame.html#eval-code-options
[tracking-allocs]: Debugger.Memory.md#trackingallocationsites
[inv fr]: Debugger.Frame.md#invocation-functions-and-debugger-frames
[wouldrun]: Conventions.md#the-debugger-debuggeewouldrun-exception
[cv]: Conventions.md#completion-values
[fr eval]: Debugger.Frame.md#eval-code-options

View File

@ -502,4 +502,4 @@ script. The object has the following properties:
[source]: Debugger.Source.md
[object]: Debugger.Object.md
[frame]: Debugger.Frame.md
[rv]: ./Conventions.html#resumption-values
[rv]: Conventions.md#resumption-values

View File

@ -540,8 +540,8 @@ The functions described below are not called with a `this` value.
[add]: #adddebuggee-global
[source]: Debugger.Source.md
[script]: Debugger.Script.md
[rv]: Conventions.html#resumption-values
[rv]: Conventions.md#resumption-values
[object]: Debugger.Object.md
[vf]: Debugger.Frame.html#visible-frames
[tracking-allocs]: Debugger.Memory.html#trackingallocationsites
[vf]: Debugger.Frame.md#visible-frames
[tracking-allocs]: Debugger.Memory.md#trackingallocationsites
[frame]: Debugger.Frame.md

View File

@ -70,4 +70,4 @@ a try run failing due to a simple linting issue.
[mozlint]: /code-quality/lint/mozlint.rst
[eslint]: /code-quality/lint/linters/eslint.rst
[enable automatic linting]: /tools/lint/usage.html#using-a-vcs-hook
[enable automatic linting]: /code-quality/lint/usage.rst#using-a-vcs-hook

View File

@ -200,7 +200,7 @@ other modules. Documentation for non-exported symbols is not required.
Marionette consists mostly of JavaScript (server) and Python (client,
harness, test runner) code. We lint our code with [mozlint],
which harmonises the output from [eslint] and [flake8].
which harmonises the output from [eslint] and [ruff].
To run the linter with a sensible output:
@ -225,5 +225,5 @@ failing due to a stupid linting issue.
[mozlint]: /code-quality/lint/mozlint.rst
[eslint]: /code-quality/lint/linters/eslint.rst
[flake8]: /code-quality/lint/linters/flake8.rst
[enable automatic linting]: /code-quality/lint/usage.html#using-a-vcs-hook
[ruff]: /code-quality/lint/linters/ruff.rst
[enable automatic linting]: /code-quality/lint/usage.rst#using-a-vcs-hook

View File

@ -50,7 +50,7 @@ have a curated set of [good first bugs] you may consider attempting first.
We have collected a lot of good advice for working on Marionette
code in our [code style document], which we highly recommend you read.
[ask questions]: ./index.rst#communication
[ask questions]: index.rst#communication
[mozilla-central]: https://searchfox.org/mozilla-central/source/remote/marionette/
[Testing :: Marionette]: https://bugzilla.mozilla.org/buglist.cgi?resolution=---&component=Marionette
[good first bugs]: https://codetribute.mozilla.org/projects/automation?project%3DMarionette

View File

@ -33,7 +33,7 @@ actual bug, yay!
someone may have answered you in the mean time.
5. If you're having trouble reaching us over Element, you are welcome to send an
email to our [mailing list](index.html#communication) instead. It's a good
email to our [mailing list](index.rst#communication) instead. It's a good
idea to include your Element nick in your email message.
[Element]: https://chat.mozilla.org

View File

@ -11,7 +11,7 @@ implemented in [`Assert.sys.mjs`](../assert.rst).
These tests are used to test UI-related behaviour in Firefox for
Desktop. They do not run on Android. If you're testing internal code that
does not directly interact with the user interface,
[xpcshell tests](../xpcshell/index.md) are probably a better fit for your needs.
[xpcshell tests](../xpcshell/index.rst) are probably a better fit for your needs.
Running the tests

View File

@ -1,6 +1,6 @@
# Writing new browser mochitests
After [creating a new empty test file](index.html#adding-new-tests), you will
After [creating a new empty test file](index.md#adding-new-tests), you will
have an empty `add_task` into which you can write your test.
## General guidance
@ -29,7 +29,7 @@ To help do this, a number of useful primitives are available:
- `add_setup` allows you to add setup tasks that run before any `add_task` tasks.
- `SpecialPowers.pushPrefEnv` ([see below](#changing-preferences)) allows you to set prefs that will be automatically
reverted when the test file has finished running.
- [`BrowserTestUtils.withNewTab`](browsertestutils.html#BrowserTestUtils.withNewTab), allows you to easily run async code
- [`BrowserTestUtils.withNewTab`](browsertestutils.rst#BrowserTestUtils.withNewTab), allows you to easily run async code
talking to a tab that you open and close it when done.
- `registerCleanupFunction` takes an async callback function that you can use
to do any other cleanup your test might need.
@ -95,13 +95,13 @@ order for your test to pass reliably on macOS if it uses keyboard focus.
### Wait for an observer service notification topic or DOM event
Use the utilities for this on [`TestUtils`](../testutils.html#TestUtils.topicObserved):
Use the utilities for this on [`TestUtils`](../testutils.rst#TestUtils.topicObserved):
```js
await TestUtils.topicObserved("sync-pane-loaded");
```
and [`BrowserTestUtils`](browsertestutils.html#BrowserTestUtils.waitForEvent), respectively:
and [`BrowserTestUtils`](browsertestutils.rst#BrowserTestUtils.waitForEvent), respectively:
```js
await BrowserTestUtils.waitForEvent(domElement, "click");
@ -109,7 +109,7 @@ await BrowserTestUtils.waitForEvent(domElement, "click");
### Wait for some DOM to update.
Use [`BrowserTestUtils.waitForMutationCondition`](browsertestutils.html#BrowserTestUtils.waitForMutationCondition).
Use [`BrowserTestUtils.waitForMutationCondition`](browsertestutils.rst#BrowserTestUtils.waitForMutationCondition).
Do **not** use `waitForCondition`, which uses a timeout loop and often
leads to intermittent failures.

View File

@ -38,7 +38,7 @@ character, we will continue with triaging it and file a bug where it
is appropriate. Bugs specific to geckodriver will be filed in the
[`Testing :: geckodriver`] component in Bugzilla.
[mailing list]: ./#communication
[mailing list]: index.rst/#communication
[trace-level log]: TraceLogs.md
[GitHub issue tracker]: https://github.com/mozilla/geckodriver/issues
[ISSUE_TEMPLATE.md]: https://raw.githubusercontent.com/mozilla/geckodriver/master/ISSUE_TEMPLATE.md

View File

@ -162,7 +162,7 @@ supported release from Mozilla.
To run tests on Android specific capabilities under `moz:firefoxOptions`
have to be set when requesting a new session. See the Android section under
[Firefox Capabilities](Capabilities.html#android) for more details.
[Firefox Capabilities](Capabilities.md#android) for more details.
[geckodriver releases]: https://github.com/mozilla/geckodriver/releases
[Selenium]: https://github.com/seleniumhq/selenium

View File

@ -196,7 +196,7 @@ into sets of 100 (controlled by the pref
#### Debugging
For debugging purposes, it's easiest to trigger storage clearing by
triggering the service directly via the [Browser Console command line](/devtools-user/browser_console/index.html#browser_console_command_line).
triggering the service directly via the [Browser Console command line](/devtools-user/browser_console/index.rst#browser_console_command_line).
Note that this is different from the normal [Web Console](/devtools-user/web_console/index.rst)
you might use to debug a website, and requires the
`devtools.chrome.enabled` pref to be set to true to use it interactively.

View File

@ -83,7 +83,7 @@ XPCOM component to await child data's arrival:
```js
await Services.fog.testFlushAllChildren();
```
See [the test documentation](testing) for more details on testing FOG.
See [the test documentation](testing.md) for more details on testing FOG.
For writing tests about instrumentation, see
[the instrumentation test documentation](../user/instrumentation_tests).

View File

@ -74,7 +74,7 @@ If you are in C++ and didn't come from JS, use `MOZ_LOG` with module `fog`.
Use the logging macros from `log`, e.g. `log::info!` or `log::error!`.
Remember that, no matter the log level, `log::debug!` and `log::trace!`
[will not appear in non-debug builds](/testing-rust-code/index.html#gecko-logging)
[will not appear in non-debug builds](/testing-rust-code/index.md#gecko-logging)
If you are logging due to a situation caused by and fixable by a developer using the API,
use `log::error!(...)`. Otherwise, use a quieter level.

View File

@ -1,9 +1,9 @@
# Using Firefox on Glean
This section of docs is designed to be helpful to people instrumenting Firefox Desktop.
You may wish to begin with the [Getting Started](./getting_started.md) docs.
You may wish to begin with the [Getting Started](getting_started.md) docs.
Or, if you're already acquainted with Glean concepts and what FOG is,
you might want to know [how to migrate a piece of Firefox Telemetry to Glean](migration).
you might want to know [how to migrate a piece of Firefox Telemetry to Glean](migration.md).
```{toctree}
:titlesonly:

View File

@ -194,7 +194,7 @@ is a good thing to review first.
Unfortunately, FOG requires gecko
(to tell it where the profile dir is, and other things),
which means we need to use the
[GTest + FFI approach](/testing-rust-code/index.html#gtests)
[GTest + FFI approach](/testing-rust-code/index.md#gtests)
where GTest is the runner and Rust is just the language the test is written in.
This means your test will look like a GTest like this:

View File

@ -1,7 +1,7 @@
# Using macOS APIs
With each new macOS release, new APIs are added. Due to the wide range of platforms that Firefox runs on,
and due to the [wide range of SDKs that we support building with](./sdks.html#supported-sdks),
and due to the [wide range of SDKs that we support building with](sdks.md#supported-sdks),
using macOS APIs in Firefox requires some extra care.
## Availability of APIs, and runtime checks
@ -66,7 +66,7 @@ if CONFIG['OS_ARCH'] == 'Darwin':
If you want to use an API that was introduced after 10.12, you now have one extra thing to worry about.
In addition to the runtime check [described in the previous section](#using-macos-apis), you also
have to jump through extra hoops in order to allow the build to succeed, because
[our build target for Firefox has to remain at 10.12 in order for Firefox to run on macOS versions all the way down to macOS 10.12](./sdks.html#supported-sdks).
[our build target for Firefox has to remain at 10.12 in order for Firefox to run on macOS versions all the way down to macOS 10.12](sdks.md#supported-sdks).
In order to make the compiler accept your code, you will need to copy some amount of the API declaration
into your own code. Copy it from the newest recent SDK you can get your hands on.
@ -82,7 +82,7 @@ but the general approach looks like this:
#endif
```
See the [Supporting Multiple SDKs](./sdks.html#supporting-multiple-sdks) docs for more information on the `MAC_OS_X_VERSION_MAX_ALLOWED` macro.
See the [Supporting Multiple SDKs](sdks.md#supporting-multiple-sdks) docs for more information on the `MAC_OS_X_VERSION_MAX_ALLOWED` macro.
Keep these three things in mind:

View File

@ -167,7 +167,7 @@ being used. Here's [an example](https://searchfox.org/mozilla-central/rev/9ad88f
We can also use this macro to supply missing API definitions in such a way that
they don't conflict with the definitions from the SDK.
This is described in the "Using macOS APIs" document, under [Using new APIs with old SDKs](./macos-apis.html#using-new-apis-with-old-sdks).
This is described in the "Using macOS APIs" document, under [Using new APIs with old SDKs](./macos-apis.md#using-new-apis-with-old-sdks).
## Overriding SDK-dependent runtime behavior