feat(share): "Biz Connect" in the iOS share sheet — share a photo/file into a chat
Adds the reverse direction: share FROM Photos/Files/Safari INTO a Biz Connect conversation. An app can only appear in the iOS share sheet as an app-extension target, so this is real native work, not a web change. Pieces: - mobile/ios-share/ShareViewController.swift: a UI-less Share Extension. It stages the shared items into the App Group container and opens bizconnect://share. It deliberately does NOT reimplement the chat picker — that lives in the app, which already has the chat list, search and upload progress. Appends to the manifest (never overwrites), so sharing twice before opening the app loses nothing. - mobile/scripts/add-share-extension.rb: injects the extension target into the Capacitor-generated Xcode project on every CI build (Codemagic checks out fresh), using the xcodeproj gem that ships with CocoaPods. Embeds it, sets the bundle id <app>.share, and MERGES the App Group into the app's entitlements rather than clobbering them (push's aps-environment must survive). Idempotent. - mobile/plugins/share-inbox: getPending()/clear() to read that manifest — the App Group container isn't one of Filesystem's known directories, so it needs a bridge. - home.html: on bizconnect://share (and every resume, and cold-launch), read the inbox and show a "Send to…" picker over the chat list; chosen files run the SAME upload + /api/messages send as an in-app attachment. Reuses convertFileSrc to read the staged bytes with no base64 marshalling. - ios-patch.sh registers the bizconnect URL scheme; codemagic.yaml fetches a profile for the .share bundle id too. One-time manual gate (CI cannot toggle App capabilities): the App Group group.com.bizgaze.connect must be created and enabled on both App IDs in the Apple portal — documented in mobile/IOS_SETUP.md. Without it the two processes can't see each other's files and sharing silently no-ops; everything else still works. Validated cross-file: pod-name/jsName/method wiring for all three plugins, App Group id identical in all 4 files, URL scheme consistent across extension/plist/web, entitlement-merge preserves push. Needs a new iOS build (new targets + plugins). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,14 @@ workflows:
|
||||
script: |
|
||||
bash mobile/scripts/ios-patch.sh
|
||||
|
||||
- name: Add the Share Extension target
|
||||
script: |
|
||||
# Inject the second target (Biz Connect in the iOS share sheet) into the freshly-generated
|
||||
# Xcode project. Uses the `xcodeproj` gem that ships with CocoaPods, so no extra install.
|
||||
# Runs BEFORE pod install: the extension uses no pods, and this way the workspace that pods
|
||||
# generates already contains the new target.
|
||||
ruby mobile/scripts/add-share-extension.rb
|
||||
|
||||
- name: Set up code signing
|
||||
script: |
|
||||
# Create the distribution certificate + provisioning profile from the ASC API key and add the
|
||||
@@ -65,11 +73,21 @@ workflows:
|
||||
# cert it has no key for ("Cannot save Signing Certificates without certificate private key").
|
||||
# By passing our own fixed private key (CERTIFICATE_PRIVATE_KEY, a secure var in the
|
||||
# `ios_signing` group), the cert is created once from that key and reused by every build.
|
||||
#
|
||||
# TWO bundle ids now need signing: the app AND the share extension (<app>.share). Each gets its
|
||||
# own App Store profile. The App Group capability (group.com.bizgaze.connect) must be enabled on
|
||||
# BOTH App IDs in the Apple Developer portal — see mobile/IOS_SETUP.md. fetch-signing-files
|
||||
# registers a missing bundle id and creates its profile, but does NOT toggle the App Group
|
||||
# capability, so that stays a one-time manual step.
|
||||
keychain initialize
|
||||
app-store-connect fetch-signing-files "$BUNDLE_ID" \
|
||||
--type IOS_APP_STORE \
|
||||
--certificate-key="@env:CERTIFICATE_PRIVATE_KEY" \
|
||||
--create
|
||||
app-store-connect fetch-signing-files "${BUNDLE_ID}.share" \
|
||||
--type IOS_APP_STORE \
|
||||
--certificate-key="@env:CERTIFICATE_PRIVATE_KEY" \
|
||||
--create
|
||||
keychain add-certificates
|
||||
|
||||
- name: Install CocoaPods
|
||||
|
||||
Reference in New Issue
Block a user