Skip to content

Commit 2b9166e

Browse files
committed
chore(plugin): drop legacy billing/gms cleanup; target openiap-google only
1 parent 5b081dc commit 2b9166e

File tree

3 files changed

+32
-26
lines changed

3 files changed

+32
-26
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ dependencies {
5858
implementation project(":openiap-google")
5959
} else {
6060
// Fallback to published artifact when local project isn't linked
61-
implementation "io.github.hyochan.openiap:openiap-google:1.0.1"
61+
implementation "io.github.hyochan.openiap:openiap-google:1.1.0"
6262
}
6363
}

plugin/src/withIAP.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,29 +49,32 @@ const modifyAppBuildGradle = (
4949
): string => {
5050
let modified = gradle;
5151

52-
// Add OpenIAP dependency to app-level build.gradle(.kts)
52+
// Ensure OpenIAP dependency exists at desired version in app-level build.gradle(.kts)
5353
const impl = (ga: string, v: string) =>
5454
language === 'kotlin'
5555
? ` implementation("${ga}:${v}")`
5656
: ` implementation "${ga}:${v}"`;
5757
// Pin OpenIAP Google library to 1.1.0
5858
const openiapDep = impl('io.github.hyochan.openiap:openiap-google', '1.1.0');
5959

60-
const hasGA = (ga: string) =>
61-
new RegExp(String.raw`\b(?:implementation|api)\s*\(?["']${ga}:`, 'm').test(
62-
modified,
63-
);
64-
65-
let hasAddedDependency = false;
66-
67-
if (!hasGA('io.github.hyochan.openiap:openiap-google')) {
68-
modified = addLineToGradle(modified, /dependencies\s*{/, openiapDep, 0);
69-
hasAddedDependency = true;
60+
// Remove any existing openiap-google lines (any version, groovy/kotlin, implementation/api)
61+
const openiapAnyLine =
62+
/^\s*(?:implementation|api)\s*\(?\s*["']io\.github\.hyochan\.openiap:openiap-google:[^"']+["']\s*\)?\s*$/gm;
63+
const hadExisting = openiapAnyLine.test(modified);
64+
if (hadExisting) {
65+
modified = modified.replace(openiapAnyLine, '').replace(/\n{3,}/g, '\n\n');
7066
}
7167

72-
// Log only once and only if we actually added dependencies
73-
if (hasAddedDependency)
74-
logOnce('🛠️ expo-iap: Added OpenIAP dependency to build.gradle');
68+
// Ensure the desired dependency line is present
69+
if (!new RegExp(String.raw`io\.github\.hyochan\.openiap:openiap-google:1\.1\.0`).test(modified)) {
70+
// Insert just after the opening `dependencies {` line
71+
modified = addLineToGradle(modified, /dependencies\s*{/, openiapDep, 1);
72+
logOnce(
73+
hadExisting
74+
? '🛠️ expo-iap: Replaced OpenIAP dependency with 1.1.0'
75+
: '🛠️ expo-iap: Added OpenIAP dependency (1.1.0) to build.gradle',
76+
);
77+
}
7578

7679
return modified;
7780
};
@@ -173,12 +176,13 @@ const withIap: ConfigPlugin<ExpoIapPluginOptions | void> = (
173176
options,
174177
) => {
175178
try {
176-
const isLocalDev = !!(options?.enableLocalDev || options?.localPath);
179+
// Respect explicit flag; fall back to presence of localPath only when flag is unset
180+
const isLocalDev = options?.enableLocalDev ?? !!options?.localPath;
177181
// Apply Android modifications (skip adding deps when linking local module)
178182
let result = withIapAndroid(config, {addDeps: !isLocalDev});
179183

180184
// iOS: choose one path to avoid overlap
181-
if (options?.enableLocalDev || options?.localPath) {
185+
if (isLocalDev) {
182186
if (!options?.localPath) {
183187
WarningAggregator.addWarningIOS(
184188
'expo-iap',

plugin/src/withLocalOpenIAP.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,12 @@ const withLocalOpenIAP: ConfigPlugin<{localPath?: LocalPathOption} | void> = (
196196
const gradle = config.modResults;
197197
const dependencyLine = ` implementation project(':openiap-google')`;
198198

199-
// Remove any previously injected external deps that can conflict with the local module
199+
// Remove any previously added Maven deps for openiap-google to avoid duplicate classes
200200
const removalPatterns = [
201-
/\n\s*implementation\s+"com\.android\.billingclient:billing-ktx:[^"]+"\s*\n/g,
202-
/\n\s*implementation\s+"com\.google\.android\.gms:play-services-base:[^"]+"\s*\n/g,
201+
// Groovy DSL: implementation "io.github.hyochan.openiap:openiap-google:x.y.z" or api "..."
202+
/^\s*(?:implementation|api)\s+["']io\.github\.hyochan\.openiap:openiap-google:[^"']+["']\s*$/gm,
203+
// Kotlin DSL: implementation("io.github.hyochan.openiap:openiap-google:x.y.z") or api("...")
204+
/^\s*(?:implementation|api)\s*\(\s*["']io\.github\.hyochan\.openiap:openiap-google:[^"']+["']\s*\)\s*$/gm,
203205
];
204206
let contents = gradle.contents;
205207
let removedAny = false;
@@ -211,9 +213,7 @@ const withLocalOpenIAP: ConfigPlugin<{localPath?: LocalPathOption} | void> = (
211213
}
212214
if (removedAny) {
213215
gradle.contents = contents;
214-
console.log(
215-
'🧹 Removed external Play Billing/GMS deps to use local :openiap-google',
216-
);
216+
console.log('🧹 Removed Maven openiap-google to use local :openiap-google');
217217
}
218218
if (!gradle.contents.includes(dependencyLine)) {
219219
const anchor = /dependencies\s*\{/m;
@@ -244,8 +244,10 @@ const withLocalOpenIAP: ConfigPlugin<{localPath?: LocalPathOption} | void> = (
244244
if (fs.existsSync(appBuildGradle)) {
245245
let contents = fs.readFileSync(appBuildGradle, 'utf8');
246246
const patterns = [
247-
/\n\s*implementation\s+"com\.android\.billingclient:billing-ktx:[^"]+"\s*\n/g,
248-
/\n\s*implementation\s+"com\.google\.android\.gms:play-services-base:[^"]+"\s*\n/g,
247+
// Groovy DSL
248+
/^\s*(?:implementation|api)\s+["']io\.github\.hyochan\.openiap:openiap-google:[^"']+["']\s*$/gm,
249+
// Kotlin DSL
250+
/^\s*(?:implementation|api)\s*\(\s*["']io\.github\.hyochan\.openiap:openiap-google:[^"']+["']\s*\)\s*$/gm,
249251
];
250252
let changed = false;
251253
for (const p of patterns) {
@@ -257,7 +259,7 @@ const withLocalOpenIAP: ConfigPlugin<{localPath?: LocalPathOption} | void> = (
257259
if (changed) {
258260
fs.writeFileSync(appBuildGradle, contents);
259261
console.log(
260-
'🧹 expo-iap: Cleaned app/build.gradle billing/gms deps for local :openiap-google',
262+
'🧹 expo-iap: Cleaned Maven openiap-google for local :openiap-google',
261263
);
262264
}
263265
}

0 commit comments

Comments
 (0)