Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(): sync with main #3405

Merged
merged 80 commits into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
08300e2
docs(radio): playground for compareWith (#3237)
mapsandapps Nov 9, 2023
2c86917
docs(toast): add swipeGesture playground (#3247)
liamdebeasi Nov 27, 2023
ea8c1e2
feat(input, textarea, select): add section for start and end slots (#…
averyjohnston Dec 1, 2023
34540d7
chore(select): remove unneeded patch from start/end slots demo (#3295)
averyjohnston Dec 6, 2023
f7b80ff
chore: release feature-7.6 docs
liamdebeasi Dec 6, 2023
d363369
chore(deps): update dependency @types/react to v18.2.41 (#3294)
renovate[bot] Dec 6, 2023
37e5f6d
chore(deps): update dependency vite to v4.5.1 [security] (#3293)
renovate[bot] Dec 7, 2023
82c2aa6
chore(deps): update dependency @types/node to v20.10.3 (#3297)
renovate[bot] Dec 7, 2023
16bafa1
chore(deps): update dependency @types/react to v18.2.42 (#3299)
renovate[bot] Dec 8, 2023
460b8e9
chore(deps): update dependency @vitejs/plugin-react to v4.2.1 (#3300)
renovate[bot] Dec 8, 2023
a178016
chore(deps): update dependency @vitejs/plugin-vue to v4.5.2 (#3308)
renovate[bot] Dec 11, 2023
8a15b44
chore(deps): update dependency @types/node to v20.10.4 (#3307)
renovate[bot] Dec 11, 2023
f050871
docs(angular): note jest transformIgnorePatterns for es modules (#3298)
liamdebeasi Dec 11, 2023
61f02a4
chore(deps): update dependency typescript to v5.3.3 (#3309)
renovate[bot] Dec 11, 2023
1dbb624
chore(deps): update ionic to v7.6.0 (#3311)
renovate[bot] Dec 11, 2023
5f3034a
docs(item): clarify usage for text wrapping (#3314)
liamdebeasi Dec 11, 2023
8f2929d
docs(layout): fix path from dynamic font to typography (#3312)
ptmkenny Dec 12, 2023
e2ee025
chore(renovate): package vite with related plugins (#3266)
brandyscarney Dec 12, 2023
95847a3
chore(deps): update dependency @types/react to v18.2.43 (#3317)
renovate[bot] Dec 13, 2023
5bcdee0
chore(deps): update dependency vite to v5 (#3318)
renovate[bot] Dec 13, 2023
f4d8e1a
chore(deps): update dependency vite to v5 (#3319)
renovate[bot] Dec 13, 2023
74cf281
docs(app-store): update release build to include capacitor steps (#3324)
brandyscarney Dec 15, 2023
c5648fc
docs(radio): fix radio demo (#3326)
mapsandapps Dec 15, 2023
1d7a03a
chore(deps): update dependency @types/react to v18.2.45 (#3329)
renovate[bot] Dec 18, 2023
9a5bada
chore(deps): update ionic to v7.6.1 (#3332)
renovate[bot] Dec 18, 2023
cd13afd
chore(deps): update dependency vite to v5.0.9 (#3331)
renovate[bot] Dec 18, 2023
fbe9dee
chore(deps): update dependency @types/react-dom to v18.2.18 (#3336)
renovate[bot] Dec 19, 2023
a278104
chore(deps): update dependency vite to v5.0.10 (#3337)
renovate[bot] Dec 19, 2023
6a76e70
docs: show how to account for this (#3333)
liamdebeasi Dec 19, 2023
688a950
docs(popover): warn about popover attribute on v5 (#3339)
liamdebeasi Dec 20, 2023
421db3c
docs(support): revise wording (#3341)
liamdebeasi Dec 20, 2023
96750d7
chore(deps): update dependency @types/node to v20.10.5 (#3343)
renovate[bot] Dec 21, 2023
d52c3e9
docs(refresher): add rubber band effect for virtual scroll (#3345)
liamdebeasi Dec 21, 2023
2ff4488
chore(deps): update dependency vite to v5.0.9 (#3330)
renovate[bot] Dec 27, 2023
88be454
chore(deps): update ionic to v7.6.2 (#3348)
renovate[bot] Dec 27, 2023
dcd3cc8
chore(deps): update dependency vite to v5.0.10 (#3349)
renovate[bot] Dec 28, 2023
dc2c7d5
chore(deps): update dependency @vitejs/plugin-vue to v5 (#3350)
renovate[bot] Dec 28, 2023
bbb819c
chore(deps): update dependency vue to v3.3.10 (#3301)
renovate[bot] Dec 29, 2023
a3a4a81
chore(deps): update dependency vue-tsc to v1.8.25 (#3310)
renovate[bot] Dec 29, 2023
8c747d0
chore(deps): update dependency vue to v3.4.0 (#3355)
renovate[bot] Jan 2, 2024
f4cc5db
chore(deps): update dependency @angular/platform-browser-dynamic to v…
renovate[bot] Jan 2, 2024
d6fcbac
chore(deps): update dependency @vitejs/plugin-vue to v5.0.1 (#3357)
renovate[bot] Jan 2, 2024
f3b8851
chore(deps): update dependency vue to v3.4.3 (#3361)
renovate[bot] Jan 3, 2024
efb7a7d
chore(deps): update dependency vue-tsc to v1.8.27 (#3353)
renovate[bot] Jan 3, 2024
239f37c
chore(deps): update dependency clsx to v2.1.0 (#3358)
renovate[bot] Jan 3, 2024
2d44e05
chore(deps): update dependency @types/react to v18.2.46 (#3352)
renovate[bot] Jan 3, 2024
aff7c9c
chore(deps): update dependency web-vitals to v3.5.1 (#3354)
renovate[bot] Jan 8, 2024
1188304
docs(many): remove implications that we support desktop apps (#3366)
mapsandapps Jan 8, 2024
ae539cb
chore(deps): update dependency @types/node to v20.10.6 (#3356)
renovate[bot] Jan 9, 2024
a8e4445
docs(desktop): remove desktop app deployment docs (#3365)
mapsandapps Jan 9, 2024
c0d0ba5
chore(deps): update dependency vue to v3.4.5 (#3371)
renovate[bot] Jan 9, 2024
4f0a1bc
fix(playground): use correct usage target or mode, when limited (#3367)
mapsandapps Jan 10, 2024
7788b0c
chore(deps): update dependency vite to v5.0.11 (#3375)
renovate[bot] Jan 10, 2024
64a017f
chore(deps): update dependency vue to v3.4.6 (#3382)
renovate[bot] Jan 12, 2024
2723b77
chore(deps): update dependency vue to v3.4.10 (#3385)
renovate[bot] Jan 15, 2024
9c801f1
chore(docusaurus): upgrade to v3 (#3322)
thetaPC Jan 16, 2024
b058f51
chore(playgrounds): update demos to use latest major version (#3388)
brandyscarney Jan 16, 2024
a07b224
chore(deps): update dependency vue to v3.4.11 (#3387)
renovate[bot] Jan 16, 2024
e32fb82
docs(label): clarify usage for text wrapping (#3386)
mapsandapps Jan 16, 2024
9d1eb72
chore(deps): update dependency @vitejs/plugin-vue to v5.0.2 (#3360)
renovate[bot] Jan 17, 2024
0810c13
chore(deps): update ionic to v7.6.3 (#3372)
renovate[bot] Jan 17, 2024
26cce48
chore(deps): update dependency @types/react to v18.2.47 (#3376)
renovate[bot] Jan 17, 2024
92447d9
chore(deps): update dependency @types/node to v20.10.7 (#3379)
renovate[bot] Jan 17, 2024
2a59966
chore(deps): update dependency vue to v3.4.13 (#3389)
renovate[bot] Jan 17, 2024
71859ae
chore(deps): update dependency @types/node to v20.11.0 (#3392)
renovate[bot] Jan 17, 2024
1ffd2a1
chore(deps): update ionic to v7.6.4 (#3391)
renovate[bot] Jan 17, 2024
f27b518
chore(deps): update dependency @types/node to v20.11.1 (#3393)
renovate[bot] Jan 18, 2024
dad48fc
chore(deps): update dependency @types/react to v18.2.48 (#3394)
renovate[bot] Jan 18, 2024
8ff26ee
chore(deps): update dependency vue to v3.4.14 (#3397)
renovate[bot] Jan 19, 2024
941ce64
chore(deps): update dependency @types/node to v20.11.3 (#3396)
renovate[bot] Jan 19, 2024
c18ab27
chore(deps): update dependency vue to v3.4.15 (#3400)
renovate[bot] Jan 22, 2024
5933c19
chore(deps): update dependency vite to v5.0.12 [security] (#3398)
renovate[bot] Jan 22, 2024
9893c37
chore(deps): update dependency @types/node to v20.11.5 (#3399)
renovate[bot] Jan 22, 2024
15b8108
chore(deps): update ionic to v7.6.5 (#3401)
renovate[bot] Jan 22, 2024
19bdc0d
chore(deps): update dependency vite to v5.0.12 [security] (#3403)
renovate[bot] Jan 22, 2024
0e7b70f
chore(deps): update dependency @vitejs/plugin-vue to v5.0.3 (#3390)
renovate[bot] Jan 22, 2024
c5cee3c
docs(input): update `Maskito` documentation (according to the latest …
nsbarsukov Jan 24, 2024
f2116cd
Merge remote-tracking branch 'origin/main' into feature-8.0-sync
thetaPC Jan 26, 2024
bdf2598
chore(): fix prettier syntax
thetaPC Jan 26, 2024
ed70acf
chore(): add missing import
thetaPC Jan 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
src/theme/DocItem
src/theme/DocPage
src/theme/DocRoot
legacy-stencil-components
scripts/bak

docs/api
docs/native
versioned_docs/version-v*/native
docs/cli/commands

static/code/stackblitz
Expand Down
53 changes: 51 additions & 2 deletions docs/angular/build-options.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Build Options

Developers have two options for using Ionic components: Standalone or Modules. This guide covers both options as well as the benefits and downsides of each approach.
Expand Down Expand Up @@ -28,7 +31,7 @@ See the [Standalone Migration Guide](#migrating-from-modules-to-standalone) for

### Usage with Standalone-based Applications

:::caution
:::warning
All Ionic imports should be imported from the `@ionic/angular/standalone` submodule. This includes imports such as components, directives, providers, and types. Importing from `@ionic/angular` may pull in lazy loaded Ionic code which can interfere with treeshaking.
:::

Expand Down Expand Up @@ -175,9 +178,32 @@ export class HomePage {}
<ion-button routerLink="/foo" routerDirection="root">Go to Foo Page</ion-button>
```

**Testing**

Ionic Angular's standalone components use ES Modules. As a result, developers using Jest should ensure that ES Modules are transpiled to a format that Jest can use. Developers using Jest should add the following to their Jest config:

<Tabs groupId="package-manager" defaultValue="npm" values={[{ value: 'npm', label: 'npm' }, { value: 'pnpm', label: 'pnpm' }]}>
<TabItem value="npm">

```json

"transformIgnorePatterns": ["<rootDir>/node_modules/(?!(@ionic/angular|@ionic/core|ionicons|@stencil/core|@angular/*)/)"]
```

</TabItem>
<TabItem value="pnpm">

```json

"transformIgnorePatterns": ["<rootDir>/node_modules/.pnpm/(?!(@ionic/angular|@ionic/core|ionicons|@stencil/core|@angular/*)@)"]
```

</TabItem>
</Tabs>

### Usage with NgModule-based Applications

:::caution
:::warning
All Ionic imports should be imported from the `@ionic/angular/standalone` submodule. This includes imports such as components, directives, providers, and types. Importing from `@ionic/angular` may pull in lazy loaded Ionic code which can interfere with treeshaking.
:::

Expand Down Expand Up @@ -315,6 +341,29 @@ export class HomePageModule {}
<ion-button routerLink="/foo" routerDirection="root">Go to Foo Page</ion-button>
```

**Testing**

Ionic Angular's standalone components use ES Modules. As a result, developers using Jest should ensure that ES Modules are transpiled to a format that Jest can use. Developers using Jest should add the following to their Jest config:

<Tabs groupId="package-manager" defaultValue="npm" values={[{ value: 'npm', label: 'npm' }, { value: 'pnpm', label: 'pnpm' }]}>
<TabItem value="npm">

```json

"transformIgnorePatterns": ["<rootDir>/node_modules/(?!(@ionic/angular|@ionic/core|ionicons|@stencil/core|@angular/*)/)"]
```

</TabItem>
<TabItem value="pnpm">

```json

"transformIgnorePatterns": ["<rootDir>/node_modules/.pnpm/(?!(@ionic/angular|@ionic/core|ionicons|@stencil/core|@angular/*)@)"]
```

</TabItem>
</Tabs>

## Modules

### Overview
Expand Down
2 changes: 1 addition & 1 deletion docs/angular/navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ Here, we have a typical Angular Module setup, along with a RouterModule import,

## Standalone Components

:::caution Experimental API
:::warning Experimental API

Standalone components is an experimental API introduced in Angular 14.x and available in Ionic 6.3 and later. This feature may change before it is stable.

Expand Down
2 changes: 1 addition & 1 deletion docs/angular/slides.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import TabItem from '@theme/TabItem';
/>
</head>

:::caution Looking for `ion-slides`?
:::warning Looking for `ion-slides`?
`ion-slides` was deprecated in v6.0.0 and removed in v7.0.0. We recommend using the Swiper.js library directly. The migration process is detailed below.
:::

Expand Down
2 changes: 1 addition & 1 deletion docs/angular/virtual-scroll.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Virtual Scroll

:::caution Looking for `ion-virtual-scroll`?
:::warning Looking for `ion-virtual-scroll`?

`ion-virtual-scroll` was deprecated in v6.0.0 and removed in v7.0.0. We recommend using the `@angular/cdk` package detailed below.

Expand Down
4 changes: 2 additions & 2 deletions docs/angular/your-first-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ Here’s the finished app running on all 3 platforms:
width="560"
height="315"
src="https://www.youtube.com/embed/0ASQ13Y1Rk4"
frameborder="0"
frameBorder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
allowFullScreen
></iframe>

:::note
Expand Down
20 changes: 18 additions & 2 deletions docs/api/input.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ import Slots from '@ionic-internal/component-api/v8/input/slots.md';

<head>
<title>ion-input: Custom Input With Styling and CSS Properties</title>
<meta name="description" content="ion-input is a wrapper to the HTML input element, with custom value type styling and functionality. It works on desktops and integrates with mobile keyboards." />
<meta name="description" content="ion-input is a wrapper to the HTML input element, with custom value type styling and functionality. It integrates with the keyboard on mobile devices." />
</head>

import EncapsulationPill from '@components/page/api/EncapsulationPill';

<EncapsulationPill type="scoped" />


The input component is a wrapper to the HTML input element with custom styling and additional functionality. It accepts most of the same properties as the HTML input, but works great on desktop devices and integrates with the keyboard on mobile devices.
The input component is a wrapper to the HTML input element with custom styling and additional functionality. It accepts most of the same properties as the HTML input and integrates with the keyboard on mobile devices.


## Basic Usage
Expand Down Expand Up @@ -148,6 +148,22 @@ Please submit bug reports with Maskito to the [Maskito Github repository](https:

:::

## Start and End Slots (experimental)

The `start` and `end` slots can be used to place icons, buttons, or prefix/suffix text on either side of the input.

Note that this feature is considered experimental because it relies on a simulated version of [Web Component slots](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_templates_and_slots). As a result, the simulated behavior may not exactly match the native slot behavior.

:::note
In most cases, [Icon](./icon.md) components placed in these slots should have `aria-hidden="true"`. See the [Icon accessibility docs](https://ionicframework.com/docs/api/icon#accessibility) for more information.

If slot content is meant to be interacted with, it should be wrapped in an interactive element such as a [Button](./button.md). This ensures that the content can be tabbed to.
:::

import StartEndSlots from '@site/static/usage/v7/input/start-end-slots/index.md';

<StartEndSlots />

## Theming

### Colors
Expand Down
8 changes: 8 additions & 0 deletions docs/api/radio.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ import LabelPlacement from '@site/static/usage/v8/radio/label-placement/index.md

<LabelPlacement />

## Object Value References

By default, the radio group uses strict equality (`===`) to determine if an option is selected. This can be overridden by providing a property name or a function to the `compareWith` property.

import UsingComparewith from '@site/static/usage/v7/radio/using-comparewith/index.md';

<UsingComparewith />

## Alignment

Developers can use the `alignment` property to control how the label and control are aligned on the cross axis. This property mirrors the flexbox `align-items` property.
Expand Down
16 changes: 15 additions & 1 deletion docs/api/select.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ import RespondingToInteractionExample from '@site/static/usage/v8/select/basic/r

When using objects for select values, it is possible for the identities of these objects to change if they are coming from a server or database, while the selected value's identity remains the same. For example, this can occur when an existing record with the desired object value is loaded into the select, but the newly retrieved select options now have different identities. This will result in the select appearing to have no value at all, even though the original selection in still intact.

By default, the select uses object equality (`===`) to determine if an option is selected. This can be overridden by providing a property name or a function to the `compareWith` property.
By default, the select uses strict equality (`===`) to determine if an option is selected. This can be overridden by providing a property name or a function to the `compareWith` property.

### Using compareWith

Expand Down Expand Up @@ -173,6 +173,20 @@ import InterfaceOptionsExample from '@site/static/usage/v8/select/customization/

<InterfaceOptionsExample />

## Start and End Slots

The `start` and `end` slots can be used to place icons, buttons, or prefix/suffix text on either side of the select. If the slot content is clicked, the select will not open.

:::note
In most cases, [Icon](./icon.md) components placed in these slots should have `aria-hidden="true"`. See the [Icon accessibility docs](https://ionicframework.com/docs/api/icon#accessibility) for more information.

If slot content is meant to be interacted with, it should be wrapped in an interactive element such as a [Button](./button.md). This ensures that the content can be tabbed to.
:::

import StartEndSlots from '@site/static/usage/v7/select/start-end-slots/index.md';

<StartEndSlots />

## Customization

There are two units that make up the Select component and each need to be styled separately. The `ion-select` element is represented on the view by the selected value(s), or placeholder if there is none, and dropdown icon. The interface, which is defined in the [Interfaces](#interfaces) section above, is the dialog that opens when clicking on the `ion-select`. The interface contains all of the options defined by adding `ion-select-option` elements. The following sections will go over the differences between styling these.
Expand Down
16 changes: 16 additions & 0 deletions docs/api/textarea.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,22 @@ import ClearOnEditPlayground from '@site/static/usage/v8/textarea/clear-on-edit/

<ClearOnEditPlayground />

## Start and End Slots (experimental)

The `start` and `end` slots can be used to place icons, buttons, or prefix/suffix text on either side of the textarea.

Note that this feature is considered experimental because it relies on a simulated version of [Web Component slots](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_templates_and_slots). As a result, the simulated behavior may not exactly match the native slot behavior.

:::note
In most cases, [Icon](./icon.md) components placed in these slots should have `aria-hidden="true"`. See the [Icon accessibility docs](https://ionicframework.com/docs/api/icon#accessibility) for more information.

If slot content is meant to be interacted with, it should be wrapped in an interactive element such as a [Button](./button.md). This ensures that the content can be tabbed to.
:::

import StartEndSlots from '@site/static/usage/v7/textarea/start-end-slots/index.md';

<StartEndSlots />

## Migrating from Legacy Textarea Syntax

A simpler textarea syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an textarea, resolves accessibility issues, and improves the developer experience.
Expand Down
8 changes: 8 additions & 0 deletions docs/api/toast.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,14 @@ import PositionAnchor from '@site/static/usage/v8/toast/position-anchor/index.md

<PositionAnchor />

## Swipe to Dismiss

Toasts can be swiped to dismiss by using the `swipeGesture` property. This feature is position-aware, meaning the direction that users need to swipe will change based on the value of the `position` property. Additionally, the distance users need to swipe may be impacted by the `positionAnchor` property.

import SwipeGesture from '@site/static/usage/v7/toast/swipe-gesture/index.md';

<SwipeGesture />

## Layout

Button containers within the toast can be displayed either on the same line as the message or stacked on separate lines using the `layout` property. The stacked layout should be used with buttons that have long text values. Additionally, buttons in a stacked toast layout can use a `side` value of either `start` or `end`, but not both.
Expand Down
7 changes: 3 additions & 4 deletions docs/components.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,8 @@ Ionic apps are made of high-level building blocks called Components, which allow
</DocsCard>

<DocsCard header="Card" href="api/card" icon="/icons/component-card-icon.png">
<p>
Cards are a great way to display an important piece of content, and can contain images, buttons, text, and more.
</p>
<!-- prettier-ignore -->
<p>Cards are a great way to display an important piece of content, and can contain images, buttons, text, and more.</p>
</DocsCard>

<DocsCard header="Checkbox" href="api/checkbox" icon="/icons/component-checkbox-icon.png">
Expand All @@ -67,7 +66,7 @@ Ionic apps are made of high-level building blocks called Components, which allow
</DocsCard>

<DocsCard header="Icons" href="api/icon" img="/icons/feature-component-icons-icon.png">
<p>Beautifully designed icons for use in web, iOS, Android, and desktop apps.</p>
<p>Beautifully designed icons for use in web, iOS, and Android apps.</p>
</DocsCard>

<DocsCard header="Grid" href="api/grid" icon="/icons/component-grid-icon.png">
Expand Down
6 changes: 3 additions & 3 deletions docs/core-concepts/cross-platform.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ This bit of code can be incredibly helpful when targeting environments where acc

Many native APIs that people use (for example, the File API), are not available in the browser. The APIs are always improving and catching up to native, so it is recommended to research them. Taking the first two points into consideration, it's fairly easy to create a nice experience that will adapt for the platform the app is running on.

## Desktop
## Responsive UI

When planning to deploy an app to desktop, either using <a href="https://electronjs.org" target="_blank">Electron</a> or as a <strong>Progressive Web App</strong>, it is important to ensure the app works smoothly on larger devices.
When planning to deploy an app that may be used across a variety of devices, it is important to ensure the app works smoothly on larger screen sizes.

### Layout

Expand All @@ -63,7 +63,7 @@ Many people rarely notice the layout of an app, but it can have a massive impact
</ion-content>
```

This will render 5 items with a width of 100% each. This may look great on a mobile device, as seen below, but viewing this on a desktop browser is a different story. The items become stretched to fill the entire screen because of the wide screen width, leaving screen space unused.
This will render 5 items with a width of 100% each. This may look great on a phone, but viewing this on a larger screen is a different story. The items become stretched to fill the entire screen because of the wide screen width, leaving screen space unused.

<img src={require('@site/static/img/building/cross-platform-items.png').default} />

Expand Down
46 changes: 46 additions & 0 deletions docs/deployment/app-store.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ title: iOS App Store Deployment
sidebar_label: iOS App Store
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<head>
<title>Publish to iOS App Store: Apple App Store Deployment for Ionic</title>
<meta
Expand All @@ -24,6 +27,46 @@ To enroll in the Apple Developer Program, follow the instructions [listed here](

## Generating a release build

<Tabs groupId="runtime">
<TabItem value="capacitor" label="Capacitor" default>

If the iOS platform is not already added, be sure to add it:

```shell
ionic cap add ios
```

With the platform added, run the build command with the `--prod` flag:

```shell
ionic build --prod
```

This will generate the minified code for the web portion of an app.

For this first build, and after you make any binary changes like adding a plugin, use the sync command:

```shell
npx cap sync ios
```

This will also copy the minified web code over. However, if your build is only source change then you can just copy the minified web files using:

```shell
npx cap copy ios
```

From here, the project is now managed as if it was a native Xcode app (because it is).

Open the project in `./ios/` to start Xcode:

```shell
npx cap open ios
```

</TabItem>
<TabItem value="cordova" label="Cordova">

If the iOS platform is not already added, be sure to add it:

```shell
Expand All @@ -44,6 +87,9 @@ From here, open the `.xcworkspace` file in `./platforms/ios/` to start Xcode.
You can also have a release build generated automatically by using the `--release` flag.
:::

</TabItem>
</Tabs>

## Generating Signing Certs

Generating certificates for iOS is a bit of an involved process, so be sure to check [Apple's official documentation](https://help.apple.com/xcode/mac/current/#/dev3a05256b8) on what certificates are and how to generate them.
Expand Down
Loading