You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [1.1.42] — 2026-02-27
9
+
10
+
### Fixed
11
+
- Fixed non-interactive iOS EAS build failures caused by `ShareExtension` credential setup requirements by disabling iOS share-extension target generation in `expo-share-intent` plugin config for now (`disableIOS: true`).
12
+
13
+
### Changed
14
+
- Kept Android share-link intake enabled through tracked native manifest intent filters while plugin Android mutation remains disabled (`disableAndroid: true`).
Copy file name to clipboardExpand all lines: documents/planning/location-share-links-plan.md
+39-2Lines changed: 39 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,7 +32,7 @@ Completed:
32
32
5. Added `apps/mobile/src/services/shareIntake.ts` and `apps/mobile/tests/share-intake.test.ts` for normalized external-link intake plumbing (linking path implemented; share-target source wiring still pending).
33
33
6. Added `expo-share-intent` integration for Expo SDK 54:
34
34
- dependency + peer deps in `apps/mobile/package.json`
35
-
- plugin registration in `apps/mobile/app.json` (configured with `disableAndroid: true`)
35
+
- plugin registration in `apps/mobile/app.json` (configured with `disableAndroid: true`, `disableIOS: true` for CI credential stability)
36
36
-`useShareIntent` wiring in `RootNavigator` to forward shared text/web URLs into the same parser + navigation path used by deep links.
37
37
7. Added Android native intent filter for share payload intake in `apps/mobile/android/app/src/main/AndroidManifest.xml` (`ACTION_SEND`, `text/*`) so tracked Android native config does not rely on CNG/plugin mutation.
38
38
8. Added pnpm native patching for `xcode@3.0.1` (`package.json``pnpm.patchedDependencies` + `patches/xcode@3.0.1.patch`) to avoid known Expo prebuild/share-extension config sync issues.
@@ -212,6 +212,35 @@ This keeps location application near existing timer state APIs and avoids adding
212
212
213
213
Implementation note: platform integration should be done via a maintained Expo-compatible package/config plugin to avoid hand-maintained native extension code where possible.
214
214
215
+
### 6.6 iOS differences and extra requirements
216
+
217
+
Why iOS is different from Android:
218
+
219
+
1. Android can receive shared text via `ACTION_SEND` intent filters directly on the main activity.
220
+
2. iOS share-sheet ingestion is implemented through a separate `Share Extension` target, not the main app target.
221
+
3. The `Share Extension` is treated as a second iOS target with its own bundle identifier and provisioning profile requirements.
222
+
4. Because there are multiple iOS targets, EAS credentials setup must succeed for both targets (`EclipseTimer` and `ShareExtension`) in non-interactive CI.
223
+
224
+
What this means for this project:
225
+
226
+
1.`expo-share-intent` is currently configured with `disableIOS: true` to keep CI stable until extension credentials are explicitly prepared.
227
+
2. Android share flow remains enabled through tracked `AndroidManifest.xml` intent filters and JS intake wiring.
228
+
3. iOS share-sheet ingestion is pending only for credential/provisioning setup; parser and navigator logic are already in place.
229
+
230
+
Extra iOS work required to re-enable `ShareExtension`:
231
+
232
+
1. Re-enable iOS plugin generation by setting `disableIOS: false` in `apps/mobile/app.json`.
233
+
2. Ensure extension identifiers and entitlements are created/consistent:
- app group entitlement used by the plugin (currently `group.com.lallimaven.eclipse-timer`)
237
+
3. Configure credentials for both iOS targets in EAS (interactive run required once):
238
+
-`pnpm -C apps/mobile exec eas credentials --platform ios`
239
+
4. Confirm CI can build iOS in non-interactive mode after credentials exist for both targets:
240
+
-`pnpm -C apps/mobile exec eas build --profile production --platform ios --local --non-interactive`
241
+
5. Validate only one intended extension target is present in iOS build output and EAS credentials mapping.
242
+
6. Run manual iOS share flow matrix (cold/warm/foreground) and confirm map pin/status behavior.
243
+
215
244
## 7. File Touchpoints (Planned)
216
245
217
246
1.`apps/mobile/src/navigation/RootNavigator.tsx`
@@ -258,7 +287,15 @@ Progress: In progress.
258
287
1. JS and config integration is implemented (`expo-share-intent` dependency/plugin + `useShareIntent` wiring).
259
288
2. Android native share intent filter is implemented in tracked manifest (`ACTION_SEND` + `text/*`).
260
289
3. Known prebuild hardening applied (`xcode@3.0.1` patch via pnpm patchedDependencies).
261
-
4. Remaining work is platform validation and any native configuration hardening discovered during device/EAS testing.
290
+
4. iOS share-extension target generation is temporarily disabled (`disableIOS: true`) because non-interactive CI failed on missing `ShareExtension` credentials; re-enable after provisioning profile setup.
291
+
5. Remaining work is platform validation and any native configuration hardening discovered during device/EAS testing.
292
+
293
+
iOS re-enable checklist:
294
+
295
+
1. Toggle `disableIOS` to `false` in `apps/mobile/app.json`.
296
+
2. Run interactive iOS credentials setup for both targets with EAS.
297
+
3. Verify a successful non-interactive iOS production build in CI.
0 commit comments