@radhya/mach 2.2.5 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,6 +95,29 @@ When `--output` is not provided, Mach uses `public` if that folder exists; other
95
95
  }
96
96
  ```
97
97
 
98
+ ## OAuth and Credential Sharing
99
+
100
+ When the selected platform includes iOS, interactive setup asks whether to enable **iOS Web Credentials for HTTPS OAuth callbacks**. Enable it when an OAuth flow returns to an HTTPS URL through `expo-web-browser` or a similar browser-based callback. Mach then writes the `webcredentials` section to the Apple App Site Association file and, for Expo, adds `webcredentials:<domain>` to `ios.associatedDomains`.
101
+
102
+ When the selected platform includes Android, setup also offers **Android Login Credentials for website password and passkey sharing**. Enable it only when the Android app and website intentionally share credentials. Mach adds `delegate_permission/common.get_login_creds` to `assetlinks.json` alongside the normal App Links relation.
103
+
104
+ Both options are disabled by default. When enabled, they are persisted only as the following explicit opt-ins:
105
+
106
+ ```json
107
+ {
108
+ "deepLinks": {
109
+ "ios": {
110
+ "webCredentials": true
111
+ },
112
+ "android": {
113
+ "loginCredentials": true
114
+ }
115
+ }
116
+ }
117
+ ```
118
+
119
+ `mach deeplink setup --yes` does not enable either feature automatically. It preserves an existing setting or keeps the default disabled.
120
+
98
121
  ## Expo Projects
99
122
 
100
123
  For Expo projects, Mach wires a config plugin that applies:
@@ -145,6 +145,41 @@ Mach applies the resolved value after Expo prebuild, so `app.json` or `app.confi
145
145
 
146
146
  This updates native build numbers only. Apple also requires the marketing version to increase when a released version train is closed. In Expo projects, that is usually `expo.version` in `app.json` or `app.config.*`.
147
147
 
148
+ ## iOS app extensions
149
+
150
+ For Expo CNG projects, declare app extensions in the EAS-compatible Expo field:
151
+
152
+ ```json
153
+ {
154
+ "expo": {
155
+ "extra": {
156
+ "eas": {
157
+ "build": {
158
+ "experimental": {
159
+ "ios": {
160
+ "appExtensions": [
161
+ {
162
+ "targetName": "ShareExtension",
163
+ "bundleIdentifier": "com.example.app.share"
164
+ }
165
+ ]
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ ```
174
+
175
+ Mach reads this field before prebuild, resolves a separate saved provisioning
176
+ profile for the main app and each extension, then applies the profiles to the
177
+ generated Xcode targets. If an Expo project commits its native `ios/` directory,
178
+ Mach can also detect extension targets from Xcode. `ios.appExtensions` in
179
+ `mach.config.json` is available as an explicit override.
180
+
181
+ Single-target Expo projects continue to use the existing single-profile path.
182
+
148
183
  ## Common Commands
149
184
 
150
185
  ```bash
@@ -119,6 +119,39 @@ For store builds, upload iOS signing credentials and App Store Connect credentia
119
119
 
120
120
  `ios.buildNumber: "auto"` allocates the next scoped Dashboard value. An explicit value is used exactly as configured. Mach applies the resolved value to the app and extension targets, then verifies the final IPA before upload.
121
121
 
122
+ ### iOS app extensions
123
+
124
+ Mach detects committed Xcode app-extension targets and resolves one provisioning
125
+ profile for each exact bundle identifier. The same compatible Apple signing
126
+ certificate is reused across the targets. Upload a profile for the main app and
127
+ for every extension under the same Mach project.
128
+
129
+ Automatic Xcode detection is the default. For generated or unusual projects,
130
+ declare the targets explicitly:
131
+
132
+ ```json
133
+ {
134
+ "ios": {
135
+ "bundleIdentifier": "com.example.app",
136
+ "iosScheme": "Example",
137
+ "appExtensions": [
138
+ {
139
+ "targetName": "ShareExtension",
140
+ "bundleIdentifier": "com.example.app.share"
141
+ },
142
+ {
143
+ "targetName": "CallerDirectoryExtension",
144
+ "bundleIdentifier": "com.example.app.callerid"
145
+ }
146
+ ]
147
+ }
148
+ }
149
+ ```
150
+
151
+ Mach installs every profile, applies it only to the matching Xcode target, and
152
+ writes all bundle-to-profile mappings to `ExportOptions.plist`. Projects with no
153
+ extensions continue through the original single-profile signing path.
154
+
122
155
  ## Android Notes
123
156
 
124
157
  Mach runs Gradle from `android/gradlew` when present. Production builds default to `bundleRelease`; internal builds default to `assembleRelease`; development-client style builds default to `assembleDebug`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radhya/mach",
3
- "version": "2.2.5",
3
+ "version": "2.3.2",
4
4
  "description": "Mach CLI: Cloud Build Orchestrator for React Native & Expo",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",