react-native-acoustic-connect-beta 19.1.13 → 19.1.14

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 19.1.14 (2026-10-26)
2
+
3
+ ### Reverts
4
+
5
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/aipoweredmarketer/react-native-acoustic-connect-beta/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
1
6
  ## 19.1.13 (2026-10-26)
2
7
 
3
8
  ### Reverts
package/README.md CHANGED
@@ -134,6 +134,26 @@ directories, and re-running either command is safe. After install, run
134
134
  `npx acoustic-connect doctor` to validate the result — see
135
135
  [Setup CLI](#setup-cli-acoustic-connect) below.
136
136
 
137
+ ### Where the iOS Connect SDK is resolved from
138
+
139
+ The iOS Connect SDK pods are published to the Acoustic spec repo,
140
+ [`go-acoustic/PodSpecs`](https://github.com/go-acoustic/PodSpecs). CocoaPods
141
+ trunk becomes read-only on 2 December 2026 and receives no later versions.
142
+ A pod dependency cannot name its source, so list the repo near the top of
143
+ `ios/Podfile`:
144
+
145
+ ```ruby
146
+ source 'https://github.com/go-acoustic/PodSpecs.git'
147
+ source 'https://cdn.cocoapods.org/'
148
+ ```
149
+
150
+ Keep the CDN line. Declaring any source disables CocoaPods' implicit CDN
151
+ default, and React Native's own pods resolve from the CDN. CocoaPods merges
152
+ versions across sources, so versions that exist only on trunk still resolve.
153
+ Without the PodSpecs line, existing installs keep working but cannot update
154
+ to SDK versions released after 2 December 2026. Expo apps get both lines from
155
+ the config plugin, see [Using with Expo SDK 56+](#using-with-expo-sdk-56).
156
+
137
157
  ### Where the Android Connect SDK is resolved from
138
158
 
139
159
  You don't need to add any repositories. This package's `android/build.gradle`
@@ -325,9 +345,13 @@ During `expo prebuild` the plugin automatically:
325
345
  all three processes share the same pending store;
326
346
  - appends `ConnectNSE` and `ConnectNCE` targets to the generated `Podfile`,
327
347
  each linking the same Connect SDK pod as the app.
348
+ - adds the Acoustic `go-acoustic/PodSpecs` spec repo as the first `source` in
349
+ the generated `Podfile`, plus the CocoaPods CDN when the Podfile declares no
350
+ sources, so the Connect SDK pods keep resolving after CocoaPods trunk
351
+ becomes read-only.
328
352
 
329
353
  Re-running `expo prebuild` — with or without `--clean` — is idempotent: no
330
- duplicate targets, entitlements, or Podfile entries.
354
+ duplicate targets, entitlements, Podfile entries, or sources.
331
355
 
332
356
  The NCE renders notifications whose category matches
333
357
  `ACOUSTIC_RICH_NOTIFICATION` or `ACTIONABLE_NOTIFICATION` (the categories the
@@ -1,4 +1,4 @@
1
- #Mon Oct 26 12:34:56 GMT 2026
1
+ #Mon Oct 26 13:19:13 GMT 2026
2
2
  UseWhiteList=true
3
3
  PrintScreen=3
4
4
  UseRandomSample=false
package/package.json CHANGED
@@ -228,7 +228,7 @@
228
228
  "source": "src/index",
229
229
  "summary": "react-native ios android tealeaf connect cxa wxca er enhanced-replay",
230
230
  "types": "./lib/typescript/src/index.d.ts",
231
- "version": "19.1.13",
231
+ "version": "19.1.14",
232
232
  "workspaces": [
233
233
  "example",
234
234
  "Examples/bare-workflow"
@@ -3,6 +3,7 @@ import { withConnectNSE, type ConnectPluginProps } from './withConnectNSE';
3
3
  import { withConnectNCE } from './withConnectNCE';
4
4
  import { withConnectAndroidConfig, withConnectAndroidGoogleServicesMatch } from './withConnectAndroidConfig';
5
5
  import { withConnectIosSigning } from './withConnectIosSigning';
6
+ import { withConnectPodSources } from './withConnectPodSources';
6
7
  /**
7
8
  * Expo Config Plugin for react-native-acoustic-connect-beta.
8
9
  *
@@ -36,6 +37,6 @@ import { withConnectIosSigning } from './withConnectIosSigning';
36
37
  */
37
38
  declare const withAcousticConnect: ConfigPlugin<ConnectPluginProps | void>;
38
39
  export default withAcousticConnect;
39
- export { withConnectNSE, withConnectNCE, withConnectIosSigning, withConnectAndroidConfig, withConnectAndroidGoogleServicesMatch, };
40
+ export { withConnectNSE, withConnectNCE, withConnectIosSigning, withConnectPodSources, withConnectAndroidConfig, withConnectAndroidGoogleServicesMatch, };
40
41
  export type { ConnectPluginProps };
41
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EACtC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,QAAA,MAAM,mBAAmB,EAAE,YAAY,CAAC,kBAAkB,GAAG,IAAI,CAuBhE,CAAA;AAED,eAAe,mBAAmB,CAAA;AAClC,OAAO,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,qCAAqC,GACtC,CAAA;AACD,YAAY,EAAE,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EACtC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,QAAA,MAAM,mBAAmB,EAAE,YAAY,CAAC,kBAAkB,GAAG,IAAI,CA0BhE,CAAA;AAED,eAAe,mBAAmB,CAAA;AAClC,OAAO,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,qCAAqC,GACtC,CAAA;AACD,YAAY,EAAE,kBAAkB,EAAE,CAAA"}
@@ -7,7 +7,7 @@
7
7
  // be provided in an agreement with Acoustic, L.P. Any unauthorized copying or
8
8
  // distribution of content from this file is prohibited.
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.withConnectAndroidGoogleServicesMatch = exports.withConnectAndroidConfig = exports.withConnectIosSigning = exports.withConnectNCE = exports.withConnectNSE = void 0;
10
+ exports.withConnectAndroidGoogleServicesMatch = exports.withConnectAndroidConfig = exports.withConnectPodSources = exports.withConnectIosSigning = exports.withConnectNCE = exports.withConnectNSE = void 0;
11
11
  const withConnectNSE_1 = require("./withConnectNSE");
12
12
  Object.defineProperty(exports, "withConnectNSE", { enumerable: true, get: function () { return withConnectNSE_1.withConnectNSE; } });
13
13
  const withConnectNCE_1 = require("./withConnectNCE");
@@ -17,6 +17,8 @@ Object.defineProperty(exports, "withConnectAndroidConfig", { enumerable: true, g
17
17
  Object.defineProperty(exports, "withConnectAndroidGoogleServicesMatch", { enumerable: true, get: function () { return withConnectAndroidConfig_1.withConnectAndroidGoogleServicesMatch; } });
18
18
  const withConnectIosSigning_1 = require("./withConnectIosSigning");
19
19
  Object.defineProperty(exports, "withConnectIosSigning", { enumerable: true, get: function () { return withConnectIosSigning_1.withConnectIosSigning; } });
20
+ const withConnectPodSources_1 = require("./withConnectPodSources");
21
+ Object.defineProperty(exports, "withConnectPodSources", { enumerable: true, get: function () { return withConnectPodSources_1.withConnectPodSources; } });
20
22
  /**
21
23
  * Expo Config Plugin for react-native-acoustic-connect-beta.
22
24
  *
@@ -56,11 +58,14 @@ const withAcousticConnect = (config, props) => {
56
58
  // sections the NCE mod relies on.
57
59
  // - withConnectIosSigning must follow both so the ConnectNSE/ConnectNCE
58
60
  // targets exist before it stamps DEVELOPMENT_TEAM onto them.
61
+ // - withConnectPodSources only touches the Podfile's `source` lines and is
62
+ // independent of the others.
59
63
  // The Android mods are independent of that ordering.
60
64
  const mods = [
61
65
  withConnectNSE_1.withConnectNSE,
62
66
  withConnectNCE_1.withConnectNCE,
63
67
  withConnectIosSigning_1.withConnectIosSigning,
68
+ withConnectPodSources_1.withConnectPodSources,
64
69
  withConnectAndroidConfig_1.withConnectAndroidConfig,
65
70
  withConnectAndroidConfig_1.withConnectAndroidGoogleServicesMatch,
66
71
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,wDAAwD;;;AAGxD,qDAA0E;AAkExE,+FAlEO,+BAAc,OAkEP;AAjEhB,qDAAiD;AAkE/C,+FAlEO,+BAAc,OAkEP;AAjEhB,yEAGmC;AAgEjC,yGAlEA,mDAAwB,OAkEA;AACxB,sHAlEA,gEAAqC,OAkEA;AAhEvC,mEAA+D;AA8D7D,sGA9DO,6CAAqB,OA8DP;AA5DvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,mBAAmB,GAA4C,CACnE,MAAM,EACN,KAAK,EACL,EAAE;IACF,MAAM,aAAa,GACjB,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAEzD,8CAA8C;IAC9C,4EAA4E;IAC5E,6EAA6E;IAC7E,qCAAqC;IACrC,yEAAyE;IACzE,gEAAgE;IAChE,qDAAqD;IACrD,MAAM,IAAI,GAA4C;QACpD,+BAAc;QACd,+BAAc;QACd,6CAAqB;QACrB,mDAAwB;QACxB,gEAAqC;KACtC,CAAA;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;AAC/E,CAAC,CAAA;AAED,kBAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,wDAAwD;;;AAGxD,qDAA0E;AAsExE,+FAtEO,+BAAc,OAsEP;AArEhB,qDAAiD;AAsE/C,+FAtEO,+BAAc,OAsEP;AArEhB,yEAGmC;AAqEjC,yGAvEA,mDAAwB,OAuEA;AACxB,sHAvEA,gEAAqC,OAuEA;AArEvC,mEAA+D;AAkE7D,sGAlEO,6CAAqB,OAkEP;AAjEvB,mEAA+D;AAkE7D,sGAlEO,6CAAqB,OAkEP;AAhEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,mBAAmB,GAA4C,CACnE,MAAM,EACN,KAAK,EACL,EAAE;IACF,MAAM,aAAa,GACjB,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAEzD,8CAA8C;IAC9C,4EAA4E;IAC5E,6EAA6E;IAC7E,qCAAqC;IACrC,yEAAyE;IACzE,gEAAgE;IAChE,4EAA4E;IAC5E,gCAAgC;IAChC,qDAAqD;IACrD,MAAM,IAAI,GAA4C;QACpD,+BAAc;QACd,+BAAc;QACd,6CAAqB;QACrB,6CAAqB;QACrB,mDAAwB;QACxB,gEAAqC;KACtC,CAAA;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;AAC/E,CAAC,CAAA;AAED,kBAAe,mBAAmB,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { type ConfigPlugin } from '@expo/config-plugins';
2
+ export declare const PODSPECS_SOURCE = "source 'https://github.com/go-acoustic/PodSpecs.git'";
3
+ export declare const CDN_SOURCE = "source 'https://cdn.cocoapods.org/'";
4
+ /**
5
+ * Puts the PodSpecs source at the top of `podfileContent`.
6
+ *
7
+ * `source` calls are evaluated in order, so prepending makes PodSpecs the
8
+ * first source. CocoaPods merges versions across sources, so versions that
9
+ * exist only on trunk still resolve.
10
+ *
11
+ * When the Podfile declares no source at all (the `expo prebuild` template),
12
+ * the CDN is added as well: declaring any source disables CocoaPods' implicit
13
+ * CDN default, and every other pod would stop resolving.
14
+ *
15
+ * Idempotent: a Podfile that already lists PodSpecs is returned unchanged,
16
+ * whether this mod or the developer added it.
17
+ */
18
+ export declare function injectPodSources(podfileContent: string): string;
19
+ /**
20
+ * Expo Config Plugin mod that adds the PodSpecs source to the generated
21
+ * Podfile. Runs in the iOS dangerous-mod phase, after `expo prebuild` has
22
+ * written ios/Podfile.
23
+ */
24
+ export declare const withConnectPodSources: ConfigPlugin<unknown>;
25
+ //# sourceMappingURL=withConnectPodSources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withConnectPodSources.d.ts","sourceRoot":"","sources":["../src/withConnectPodSources.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,sBAAsB,CAAA;AAQ1E,eAAO,MAAM,eAAe,yDAC4B,CAAA;AACxD,eAAO,MAAM,UAAU,wCAAwC,CAAA;AAK/D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,OAAO,CAkBpD,CAAA"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.withConnectPodSources = exports.injectPodSources = exports.CDN_SOURCE = exports.PODSPECS_SOURCE = void 0;
27
+ // Copyright (C) 2026 Acoustic, L.P. All rights reserved.
28
+ //
29
+ // NOTICE: This file contains material that is confidential and proprietary to
30
+ // Acoustic, L.P. and/or other developers. No license is granted under any
31
+ // intellectual or industrial property rights of Acoustic, L.P. except as may
32
+ // be provided in an agreement with Acoustic, L.P. Any unauthorized copying or
33
+ // distribution of content from this file is prohibited.
34
+ const config_plugins_1 = require("@expo/config-plugins");
35
+ const fs = __importStar(require("fs"));
36
+ const path = __importStar(require("path"));
37
+ // go-acoustic/PodSpecs is the Acoustic CocoaPods spec repo. CocoaPods trunk
38
+ // becomes read-only on 2 December 2026 and receives no later Connect SDK
39
+ // versions, so they are published there instead. A podspec dependency cannot
40
+ // name its source, so the app's Podfile has to list it.
41
+ exports.PODSPECS_SOURCE = "source 'https://github.com/go-acoustic/PodSpecs.git'";
42
+ exports.CDN_SOURCE = "source 'https://cdn.cocoapods.org/'";
43
+ const MARKER = '# @generated CocoaPods sources (react-native-acoustic-connect-beta)';
44
+ /**
45
+ * Puts the PodSpecs source at the top of `podfileContent`.
46
+ *
47
+ * `source` calls are evaluated in order, so prepending makes PodSpecs the
48
+ * first source. CocoaPods merges versions across sources, so versions that
49
+ * exist only on trunk still resolve.
50
+ *
51
+ * When the Podfile declares no source at all (the `expo prebuild` template),
52
+ * the CDN is added as well: declaring any source disables CocoaPods' implicit
53
+ * CDN default, and every other pod would stop resolving.
54
+ *
55
+ * Idempotent: a Podfile that already lists PodSpecs is returned unchanged,
56
+ * whether this mod or the developer added it.
57
+ */
58
+ function injectPodSources(podfileContent) {
59
+ if (podfileContent.includes(exports.PODSPECS_SOURCE)) {
60
+ return podfileContent;
61
+ }
62
+ const declaresSources = /^\s*source\s+['"]/m.test(podfileContent);
63
+ const lines = [MARKER, exports.PODSPECS_SOURCE];
64
+ if (!declaresSources) {
65
+ lines.push(exports.CDN_SOURCE);
66
+ }
67
+ return `${lines.join('\n')}\n\n${podfileContent}`;
68
+ }
69
+ exports.injectPodSources = injectPodSources;
70
+ /**
71
+ * Expo Config Plugin mod that adds the PodSpecs source to the generated
72
+ * Podfile. Runs in the iOS dangerous-mod phase, after `expo prebuild` has
73
+ * written ios/Podfile.
74
+ */
75
+ const withConnectPodSources = (config) => (0, config_plugins_1.withDangerousMod)(config, [
76
+ 'ios',
77
+ async (c) => {
78
+ const podfilePath = path.join(c.modRequest.platformProjectRoot, 'Podfile');
79
+ if (!fs.existsSync(podfilePath)) {
80
+ throw new Error(`[react-native-acoustic-connect-beta] ios/Podfile not found at ${podfilePath}. ` +
81
+ 'The CocoaPods sources mod runs after `expo prebuild` generates the ios/ directory.');
82
+ }
83
+ const current = fs.readFileSync(podfilePath, 'utf8');
84
+ const updated = injectPodSources(current);
85
+ if (updated !== current) {
86
+ fs.writeFileSync(podfilePath, updated, 'utf8');
87
+ }
88
+ return c;
89
+ },
90
+ ]);
91
+ exports.withConnectPodSources = withConnectPodSources;
92
+ //# sourceMappingURL=withConnectPodSources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withConnectPodSources.js","sourceRoot":"","sources":["../src/withConnectPodSources.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAyD;AACzD,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,wDAAwD;AACxD,yDAA0E;AAC1E,uCAAwB;AACxB,2CAA4B;AAE5B,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,wDAAwD;AAC3C,QAAA,eAAe,GAC1B,sDAAsD,CAAA;AAC3C,QAAA,UAAU,GAAG,qCAAqC,CAAA;AAE/D,MAAM,MAAM,GACV,qEAAqE,CAAA;AAEvE;;;;;;;;;;;;;GAaG;AACH,SAAgB,gBAAgB,CAAC,cAAsB;IACrD,IAAI,cAAc,CAAC,QAAQ,CAAC,uBAAe,CAAC,EAAE;QAC5C,OAAO,cAAc,CAAA;KACtB;IACD,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,uBAAe,CAAC,CAAA;IACvC,IAAI,CAAC,eAAe,EAAE;QACpB,KAAK,CAAC,IAAI,CAAC,kBAAU,CAAC,CAAA;KACvB;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,cAAc,EAAE,CAAA;AACnD,CAAC;AAVD,4CAUC;AAED;;;;GAIG;AACI,MAAM,qBAAqB,GAA0B,CAAC,MAAM,EAAE,EAAE,CACrE,IAAA,iCAAgB,EAAC,MAAM,EAAE;IACvB,KAAK;IACL,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CACb,iEAAiE,WAAW,IAAI;gBAC9E,oFAAoF,CACvF,CAAA;SACF;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACzC,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;SAC/C;QACD,OAAO,CAAC,CAAA;IACV,CAAC;CACF,CAAC,CAAA;AAlBS,QAAA,qBAAqB,yBAkB9B"}
@@ -14,6 +14,7 @@ import {
14
14
  withConnectAndroidGoogleServicesMatch,
15
15
  } from './withConnectAndroidConfig'
16
16
  import { withConnectIosSigning } from './withConnectIosSigning'
17
+ import { withConnectPodSources } from './withConnectPodSources'
17
18
 
18
19
  /**
19
20
  * Expo Config Plugin for react-native-acoustic-connect-beta.
@@ -59,11 +60,14 @@ const withAcousticConnect: ConfigPlugin<ConnectPluginProps | void> = (
59
60
  // sections the NCE mod relies on.
60
61
  // - withConnectIosSigning must follow both so the ConnectNSE/ConnectNCE
61
62
  // targets exist before it stamps DEVELOPMENT_TEAM onto them.
63
+ // - withConnectPodSources only touches the Podfile's `source` lines and is
64
+ // independent of the others.
62
65
  // The Android mods are independent of that ordering.
63
66
  const mods: Array<ConfigPlugin<ConnectPluginProps>> = [
64
67
  withConnectNSE,
65
68
  withConnectNCE,
66
69
  withConnectIosSigning,
70
+ withConnectPodSources,
67
71
  withConnectAndroidConfig,
68
72
  withConnectAndroidGoogleServicesMatch,
69
73
  ]
@@ -76,6 +80,7 @@ export {
76
80
  withConnectNSE,
77
81
  withConnectNCE,
78
82
  withConnectIosSigning,
83
+ withConnectPodSources,
79
84
  withConnectAndroidConfig,
80
85
  withConnectAndroidGoogleServicesMatch,
81
86
  }
@@ -0,0 +1,72 @@
1
+ // Copyright (C) 2026 Acoustic, L.P. All rights reserved.
2
+ //
3
+ // NOTICE: This file contains material that is confidential and proprietary to
4
+ // Acoustic, L.P. and/or other developers. No license is granted under any
5
+ // intellectual or industrial property rights of Acoustic, L.P. except as may
6
+ // be provided in an agreement with Acoustic, L.P. Any unauthorized copying or
7
+ // distribution of content from this file is prohibited.
8
+ import { type ConfigPlugin, withDangerousMod } from '@expo/config-plugins'
9
+ import * as fs from 'fs'
10
+ import * as path from 'path'
11
+
12
+ // go-acoustic/PodSpecs is the Acoustic CocoaPods spec repo. CocoaPods trunk
13
+ // becomes read-only on 2 December 2026 and receives no later Connect SDK
14
+ // versions, so they are published there instead. A podspec dependency cannot
15
+ // name its source, so the app's Podfile has to list it.
16
+ export const PODSPECS_SOURCE =
17
+ "source 'https://github.com/go-acoustic/PodSpecs.git'"
18
+ export const CDN_SOURCE = "source 'https://cdn.cocoapods.org/'"
19
+
20
+ const MARKER =
21
+ '# @generated CocoaPods sources (react-native-acoustic-connect-beta)'
22
+
23
+ /**
24
+ * Puts the PodSpecs source at the top of `podfileContent`.
25
+ *
26
+ * `source` calls are evaluated in order, so prepending makes PodSpecs the
27
+ * first source. CocoaPods merges versions across sources, so versions that
28
+ * exist only on trunk still resolve.
29
+ *
30
+ * When the Podfile declares no source at all (the `expo prebuild` template),
31
+ * the CDN is added as well: declaring any source disables CocoaPods' implicit
32
+ * CDN default, and every other pod would stop resolving.
33
+ *
34
+ * Idempotent: a Podfile that already lists PodSpecs is returned unchanged,
35
+ * whether this mod or the developer added it.
36
+ */
37
+ export function injectPodSources(podfileContent: string): string {
38
+ if (podfileContent.includes(PODSPECS_SOURCE)) {
39
+ return podfileContent
40
+ }
41
+ const declaresSources = /^\s*source\s+['"]/m.test(podfileContent)
42
+ const lines = [MARKER, PODSPECS_SOURCE]
43
+ if (!declaresSources) {
44
+ lines.push(CDN_SOURCE)
45
+ }
46
+ return `${lines.join('\n')}\n\n${podfileContent}`
47
+ }
48
+
49
+ /**
50
+ * Expo Config Plugin mod that adds the PodSpecs source to the generated
51
+ * Podfile. Runs in the iOS dangerous-mod phase, after `expo prebuild` has
52
+ * written ios/Podfile.
53
+ */
54
+ export const withConnectPodSources: ConfigPlugin<unknown> = (config) =>
55
+ withDangerousMod(config, [
56
+ 'ios',
57
+ async (c) => {
58
+ const podfilePath = path.join(c.modRequest.platformProjectRoot, 'Podfile')
59
+ if (!fs.existsSync(podfilePath)) {
60
+ throw new Error(
61
+ `[react-native-acoustic-connect-beta] ios/Podfile not found at ${podfilePath}. ` +
62
+ 'The CocoaPods sources mod runs after `expo prebuild` generates the ios/ directory.'
63
+ )
64
+ }
65
+ const current = fs.readFileSync(podfilePath, 'utf8')
66
+ const updated = injectPodSources(current)
67
+ if (updated !== current) {
68
+ fs.writeFileSync(podfilePath, updated, 'utf8')
69
+ }
70
+ return c
71
+ },
72
+ ])