@radhya/mach 2.2.5 → 2.3.0

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.
@@ -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.0",
4
4
  "description": "Mach CLI: Cloud Build Orchestrator for React Native & Expo",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",