@leonxin/meetgames 0.1.12 → 0.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.
Files changed (49) hide show
  1. package/dist/android/manifest.d.ts.map +1 -1
  2. package/dist/android/manifest.js +9 -0
  3. package/dist/android/manifest.js.map +1 -1
  4. package/dist/android/meetSdkRemoteGradle.d.ts.map +1 -1
  5. package/dist/android/meetSdkRemoteGradle.js +126 -6
  6. package/dist/android/meetSdkRemoteGradle.js.map +1 -1
  7. package/dist/contracts/types.d.ts +3 -0
  8. package/dist/contracts/types.d.ts.map +1 -1
  9. package/dist/core/pipeline.d.ts.map +1 -1
  10. package/dist/core/pipeline.js +3 -0
  11. package/dist/core/pipeline.js.map +1 -1
  12. package/dist/core/reporter.d.ts.map +1 -1
  13. package/dist/core/reporter.js +4 -0
  14. package/dist/core/reporter.js.map +1 -1
  15. package/dist/ios/channelConfig.d.ts.map +1 -1
  16. package/dist/ios/channelConfig.js +18 -2
  17. package/dist/ios/channelConfig.js.map +1 -1
  18. package/dist/ios/codeUtils.d.ts +1 -0
  19. package/dist/ios/codeUtils.d.ts.map +1 -1
  20. package/dist/ios/codeUtils.js +3 -0
  21. package/dist/ios/codeUtils.js.map +1 -1
  22. package/dist/ios/integrate.d.ts.map +1 -1
  23. package/dist/ios/integrate.js +242 -97
  24. package/dist/ios/integrate.js.map +1 -1
  25. package/dist/ios/pbxprojEditor.d.ts.map +1 -1
  26. package/dist/ios/pbxprojEditor.js +52 -1
  27. package/dist/ios/pbxprojEditor.js.map +1 -1
  28. package/dist/ops/handlers.d.ts.map +1 -1
  29. package/dist/ops/handlers.js +35 -3
  30. package/dist/ops/handlers.js.map +1 -1
  31. package/docs/API.md +1 -1
  32. package/docs/INTEGRATION.md +48 -1
  33. package/package.json +1 -1
  34. package/src/android/manifest.ts +11 -0
  35. package/src/android/meetSdkRemoteGradle.ts +125 -7
  36. package/src/contracts/types.ts +3 -0
  37. package/src/core/pipeline.ts +3 -0
  38. package/src/core/reporter.ts +3 -0
  39. package/src/ios/channelConfig.ts +18 -2
  40. package/src/ios/codeUtils.ts +4 -0
  41. package/src/ios/integrate.ts +253 -96
  42. package/src/ios/pbxprojEditor.ts +51 -1
  43. package/src/ops/handlers.ts +38 -3
  44. package/tests/doctor.test.ts +43 -3
  45. package/tests/meetSdkRemoteConfig.test.ts +1 -1
  46. package/tests/meetSdkRemoteGradle.test.ts +2 -2
  47. package/tests/pipeline.android.test.ts +64 -10
  48. package/tests/pipeline.ios.test.ts +219 -32
  49. package/tests/platformSelection.test.ts +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"codeUtils.js","sourceRoot":"","sources":["../../src/ios/codeUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codeUtils.js","sourceRoot":"","sources":["../../src/ios/codeUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"integrate.d.ts","sourceRoot":"","sources":["../../src/ios/integrate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA6B3E,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AAqRD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAqKrB"}
1
+ {"version":3,"file":"integrate.d.ts","sourceRoot":"","sources":["../../src/ios/integrate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA8B3E,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AAqcD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAiJrB"}
@@ -6,25 +6,48 @@ import { CodeUtils, findDelegateFiles, findSceneDelegateFiles } from "./codeUtil
6
6
  import { DEFAULT_PERFORM_SETTINGS } from "./types.js";
7
7
  import { TopSdkFileManager } from "./fileManager.js";
8
8
  import { addPlistParam, addQueriesScheme, addUrlScheme, buildPlistXml, parsePlistXml, setAppTransportSecurity, } from "./infoPlist.js";
9
- import { addCopyFile, addOtherLinkerFlag, addSourceOrResourceFile, addSystemFramework, addSystemLib, addThirdPartyFramework, findInfoPlistPathsFromPbx, loadPbxFromStore, savePbxToStore, setBuildSetting, } from "./pbxprojEditor.js";
9
+ import { addCopyFile, addOtherLinkerFlag, addSourceOrResourceFile, addSystemFramework, addSystemLib, addThirdPartyFramework, findInfoPlistPathsFromPbx, getTargetBuildSettings, loadPbxFromStore, savePbxToStore, setBuildSetting, } from "./pbxprojEditor.js";
10
10
  import { findPluginByFolder, listSdkCoreConfigs, validateLoadedPluginResources } from "./pluginConfig.js";
11
11
  import { resolveIosSdkRoot } from "./sdkBundle.js";
12
12
  import { applyChannelTemplate, applyChannelTemplateValue } from "./template.js";
13
13
  import { ensureAppleSignInEntitlement } from "./entitlements.js";
14
14
  const IOS_FIREBASE_CONFIG_FILE = "GoogleService-Info.plist";
15
- function ok(changed, warnings = []) {
16
- return { ok: true, changedFiles: changed, warnings, errors: [] };
15
+ function logValue(value) {
16
+ if (value === undefined)
17
+ return "<missing>";
18
+ if (typeof value === "string")
19
+ return value;
20
+ return JSON.stringify(value);
17
21
  }
18
- function fail(errors, warnings = []) {
19
- return { ok: false, changedFiles: [], warnings, errors };
22
+ function pushValueChangeLog(logs, label, before, after) {
23
+ if (valuesEqual(before, after)) {
24
+ logs.push(`SUCCESS: ${label} 未变化 value:${logValue(after)}`);
25
+ return;
26
+ }
27
+ logs.push(`SUCCESS: ${label} ${logValue(before)} -> ${logValue(after)}`);
28
+ }
29
+ function valuesEqual(before, after) {
30
+ return JSON.stringify(before) === JSON.stringify(after);
31
+ }
32
+ function cloneValue(value) {
33
+ if (value === undefined)
34
+ return undefined;
35
+ return JSON.parse(JSON.stringify(value));
20
36
  }
21
- function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryRun, remoteSources = new Map()) {
37
+ function ok(changed, warnings = [], logs = []) {
38
+ return { ok: true, changedFiles: changed, logs, warnings, errors: [] };
39
+ }
40
+ function fail(errors, warnings = [], logs = []) {
41
+ return { ok: false, changedFiles: [], logs, warnings, errors };
42
+ }
43
+ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryRun, logs, remoteSources = new Map()) {
22
44
  const { config, sourceDir } = loaded;
23
- const srcRoot = pbx.srcRoot;
45
+ logs.push(`- 插件:${config.name}, 类型:${config.type},版本:${config.pluginVersion}`);
24
46
  if (perform.includes("frameworks") && config.frameworks?.length) {
25
47
  for (const fw of config.frameworks) {
26
48
  if (fw.system) {
27
49
  addSystemFramework(pbx, fw.name);
50
+ logs.push(`SUCCESS: 导入系统依赖framework ${fw.name} 完成`);
28
51
  continue;
29
52
  }
30
53
  const src = path.join(sourceDir, fw.name);
@@ -38,6 +61,7 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
38
61
  fm.copyFramework(src);
39
62
  }
40
63
  addThirdPartyFramework(pbx, relTo, Boolean(fw.embed));
64
+ logs.push(`SUCCESS: 导入三方依赖framework ${fw.name} 完成`);
41
65
  if (fw.copyFile)
42
66
  addCopyFile(pbx, relTo);
43
67
  }
@@ -46,6 +70,7 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
46
70
  for (const lib of config.libs) {
47
71
  if (lib.system) {
48
72
  addSystemLib(pbx, lib.name);
73
+ logs.push(`SUCCESS: 导入系统依赖lib ${lib.name} 完成`);
49
74
  continue;
50
75
  }
51
76
  const src = path.join(sourceDir, lib.name);
@@ -57,6 +82,7 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
57
82
  else
58
83
  fm.copyFile(src);
59
84
  addSourceOrResourceFile(pbx, relTo);
85
+ logs.push(`SUCCESS: 导入三方依赖lib ${lib.name} 完成`);
60
86
  }
61
87
  }
62
88
  if (perform.includes("sources") && config.sources?.length) {
@@ -64,6 +90,7 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
64
90
  const remoteRel = remoteSources.get(`${config.name}:${source}`);
65
91
  if (remoteRel) {
66
92
  addSourceOrResourceFile(pbx, remoteRel);
93
+ logs.push(`SUCCESS: 引入资源 ${source} 完成`);
67
94
  continue;
68
95
  }
69
96
  const src = path.join(sourceDir, source);
@@ -81,6 +108,7 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
81
108
  if (fs.statSync(full).isDirectory()) {
82
109
  if (name.endsWith(".bundle")) {
83
110
  addSourceOrResourceFile(pbx, fm.relFromSrc(full));
111
+ logs.push(`SUCCESS: 引入资源 ${name} 完成`);
84
112
  }
85
113
  else {
86
114
  walk(full);
@@ -89,6 +117,7 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
89
117
  }
90
118
  if (/\.(h|m|mm|plist|a)$/.test(name)) {
91
119
  addSourceOrResourceFile(pbx, fm.relFromSrc(full));
120
+ logs.push(`SUCCESS: 引入资源 ${name} 完成`);
92
121
  }
93
122
  }
94
123
  };
@@ -104,17 +133,26 @@ function applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryR
104
133
  else
105
134
  fm.copyFile(src);
106
135
  addSourceOrResourceFile(pbx, relTo);
136
+ logs.push(`SUCCESS: 引入资源 ${source} 完成`);
107
137
  }
108
138
  }
109
139
  }
110
140
  if (perform.includes("buildSettings") && config.buildSettings) {
111
141
  for (const [k, v] of Object.entries(config.buildSettings)) {
112
- setBuildSetting(pbx, k, v);
142
+ const beforeValues = [...new Set(getTargetBuildSettings(pbx).map((settings) => settings[k]))];
143
+ if (beforeValues.length === 0 || beforeValues.some((before) => !valuesEqual(before, v))) {
144
+ setBuildSetting(pbx, k, v);
145
+ }
146
+ for (const before of beforeValues.length ? beforeValues : [undefined]) {
147
+ pushValueChangeLog(logs, `BuildSetting设置${k}`, before, v);
148
+ }
149
+ logs.push(`SUCCESS: BuildSetting设置${k}为${v} 完成`);
113
150
  }
114
151
  }
115
152
  if (perform.includes("OtherLinkerFlags") && config.OtherLinkerFlags?.length) {
116
153
  for (const flag of config.OtherLinkerFlags) {
117
154
  addOtherLinkerFlag(pbx, flag);
155
+ logs.push(`SUCCESS: 添加other link flag:${flag} 完成`);
118
156
  }
119
157
  }
120
158
  }
@@ -168,6 +206,41 @@ function iosFirebaseConfigRelPath(plistDocs) {
168
206
  const dir = path.posix.dirname(relPlist.replace(/\\/g, "/"));
169
207
  return dir === "." ? IOS_FIREBASE_CONFIG_FILE : path.posix.join(dir, IOS_FIREBASE_CONFIG_FILE);
170
208
  }
209
+ function hasSwiftSource(srcRoot) {
210
+ const walk = (dir) => {
211
+ let entries;
212
+ try {
213
+ entries = fs.readdirSync(dir, { withFileTypes: true });
214
+ }
215
+ catch {
216
+ return false;
217
+ }
218
+ for (const entry of entries) {
219
+ if (entry.name.startsWith("."))
220
+ continue;
221
+ const full = path.join(dir, entry.name);
222
+ if (entry.isDirectory()) {
223
+ if (!["Pods", "build", "DerivedData", "topSDK"].includes(entry.name) && walk(full))
224
+ return true;
225
+ continue;
226
+ }
227
+ if (entry.name.endsWith(".swift"))
228
+ return true;
229
+ }
230
+ return false;
231
+ };
232
+ return walk(srcRoot);
233
+ }
234
+ function ensureTopSdkInstallSwift(store, ctx, pbx) {
235
+ if (hasSwiftSource(pbx.srcRoot))
236
+ return null;
237
+ const relFromSrc = path.join(pbx.targetName, "TopSDKInstall.swift").split(path.sep).join("/");
238
+ const abs = path.join(pbx.srcRoot, relFromSrc);
239
+ const relFromProject = path.relative(ctx.projectRoot, abs).split(path.sep).join("/");
240
+ store.write(relFromProject, "import Foundation\n\n");
241
+ addSourceOrResourceFile(pbx, relFromSrc);
242
+ return relFromProject;
243
+ }
171
244
  function appDelegateCodeShouldMoveToSceneDelegate(code) {
172
245
  if (code.type === "header")
173
246
  return false;
@@ -209,26 +282,43 @@ function validateRequiredChannelConfigs(loadedConfigs, channelConfig) {
209
282
  }
210
283
  return missing;
211
284
  }
212
- function mergePlistParams(docs, loaded, channelConfig, perform) {
285
+ function mergePlistParams(docs, loaded, channelConfig, perform, logs, dirtyDocs) {
213
286
  if (!perform.includes("infoParams") && !perform.includes("urlScheme") && !perform.includes("queriesSchemes")) {
214
287
  return;
215
288
  }
216
289
  for (const doc of docs) {
217
290
  if (perform.includes("infoParams") && loaded.config.infoParams) {
218
291
  for (const [key, raw] of Object.entries(loaded.config.infoParams)) {
219
- addPlistParam(doc.data, key, applyChannelTemplateValue(raw, channelConfig));
292
+ const value = applyChannelTemplateValue(raw, channelConfig);
293
+ const before = doc.data[key];
294
+ if (!valuesEqual(before, value)) {
295
+ addPlistParam(doc.data, key, value);
296
+ dirtyDocs.add(doc);
297
+ }
298
+ pushValueChangeLog(logs, `info.plist配置key:${key}`, before, value);
299
+ logs.push(`SUCCESS: info.plist添加配置key:${key} value:${String(value)} 完成`);
220
300
  }
221
301
  }
222
302
  if (perform.includes("queriesSchemes") && loaded.config.queriesSchemes?.length) {
223
303
  for (const scheme of loaded.config.queriesSchemes) {
304
+ const before = cloneValue(doc.data.LSApplicationQueriesSchemes ?? []);
224
305
  addQueriesScheme(doc.data, scheme);
306
+ if (!valuesEqual(before, doc.data.LSApplicationQueriesSchemes))
307
+ dirtyDocs.add(doc);
308
+ pushValueChangeLog(logs, `info.plist queriesSchemes ${scheme}`, before, doc.data.LSApplicationQueriesSchemes);
309
+ logs.push(`SUCCESS: 添加queriesSchemes:${scheme} 完成`);
225
310
  }
226
311
  }
227
312
  if (perform.includes("urlScheme") && loaded.config.urlScheme) {
228
313
  let scheme = applyChannelTemplate(loaded.config.urlScheme, channelConfig);
229
314
  if (scheme.endsWith("://"))
230
315
  scheme = scheme.replace("://", "");
316
+ const before = cloneValue(doc.data.CFBundleURLTypes ?? []);
231
317
  addUrlScheme(doc.data, scheme);
318
+ if (!valuesEqual(before, doc.data.CFBundleURLTypes))
319
+ dirtyDocs.add(doc);
320
+ pushValueChangeLog(logs, `info.plist URL Scheme ${scheme}`, before, doc.data.CFBundleURLTypes);
321
+ logs.push(`SUCCESS: 设置urlScheme:${scheme}完成`);
232
322
  }
233
323
  }
234
324
  }
@@ -254,24 +344,103 @@ function buildTopSdkPluginInfo(plugins, channelConfig) {
254
344
  }
255
345
  return { pluginsInfo, dataPluginsInfo };
256
346
  }
347
+ function injectDelegateCodes(loadedConfigs, ctx, store, pbx, warnings, changed, logs) {
348
+ const hasAppDelegateCodes = loadedConfigs.some((loaded) => (loaded.config.appDelegateCodes ?? []).length > 0);
349
+ const hasSceneDelegateCodes = loadedConfigs.some((loaded) => (loaded.config.sceneDelegateCodes ?? []).length > 0);
350
+ if (!hasAppDelegateCodes && !hasSceneDelegateCodes)
351
+ return;
352
+ const sceneDelegateRelPaths = [];
353
+ for (const abs of findSceneDelegateFiles(pbx.srcRoot)) {
354
+ sceneDelegateRelPaths.push(path.relative(ctx.projectRoot, abs).split(path.sep).join("/"));
355
+ }
356
+ const hasUniqueSceneDelegate = sceneDelegateRelPaths.length === 1;
357
+ const delegateRelPaths = [];
358
+ for (const abs of findDelegateFiles(pbx.srcRoot)) {
359
+ delegateRelPaths.push(path.relative(ctx.projectRoot, abs).split(path.sep).join("/"));
360
+ }
361
+ if (hasAppDelegateCodes && !delegateRelPaths.length) {
362
+ warnings.push("no UIApplicationDelegate .m/.mm found; skipped AppDelegate injection (SwiftUI @main is not supported yet)");
363
+ }
364
+ if (hasAppDelegateCodes && delegateRelPaths.length > 1) {
365
+ warnings.push(`multiple UIApplicationDelegate files found; skipped AppDelegate injection: ${delegateRelPaths.join(", ")}`);
366
+ }
367
+ for (const rel of hasAppDelegateCodes && delegateRelPaths.length === 1 ? delegateRelPaths : []) {
368
+ const cu = CodeUtils.fromFile(path.join(ctx.projectRoot, rel));
369
+ logs.push("检测到工程UIApplicationDelegate实现类,将自动接入对应接口");
370
+ let okInject = true;
371
+ for (const loaded of loadedConfigs) {
372
+ for (const code of appDelegateCodesForLifecycle(loaded, hasUniqueSceneDelegate)) {
373
+ const existed = cu.hasCode(code.content);
374
+ if (code.type === "header") {
375
+ if (!cu.addHeader(code.content))
376
+ okInject = false;
377
+ }
378
+ else if ((code.type === "method" || code.type === "code") && code.method) {
379
+ if (!cu.addCodeToMethod(code.method, code.content, Boolean(code.addToReturn)))
380
+ okInject = false;
381
+ }
382
+ if (okInject) {
383
+ logs.push(`SUCCESS: 代码文件${path.join(ctx.projectRoot, rel)},${existed ? "已存在代码" : "添加代码"}${code.content}${existed ? "" : "完成"}`);
384
+ }
385
+ }
386
+ }
387
+ if (!okInject)
388
+ warnings.push(`AppDelegate injection incomplete for ${rel}`);
389
+ const before = store.read(rel);
390
+ cu.applyToStore((c) => store.write(rel, c));
391
+ if (store.read(rel) !== before)
392
+ changed.add(rel);
393
+ }
394
+ if (hasSceneDelegateCodes && sceneDelegateRelPaths.length > 1) {
395
+ warnings.push(`multiple UIWindowSceneDelegate files found; skipped SceneDelegate injection: ${sceneDelegateRelPaths.join(", ")}`);
396
+ }
397
+ for (const rel of hasSceneDelegateCodes && sceneDelegateRelPaths.length === 1 ? sceneDelegateRelPaths : []) {
398
+ const cu = CodeUtils.fromFile(path.join(ctx.projectRoot, rel));
399
+ logs.push("检测到工程存在UIWindowSceneDelegate实现类,将自动接入对应接口");
400
+ let okInject = true;
401
+ for (const loaded of loadedConfigs) {
402
+ for (const code of loaded.config.sceneDelegateCodes ?? []) {
403
+ const existed = cu.hasCode(code.content);
404
+ if (code.type === "header") {
405
+ if (!cu.addHeader(code.content))
406
+ okInject = false;
407
+ }
408
+ else if ((code.type === "method" || code.type === "code") && code.method) {
409
+ if (!cu.addCodeToMethod(code.method, code.content, Boolean(code.addToReturn)))
410
+ okInject = false;
411
+ }
412
+ if (okInject) {
413
+ logs.push(`SUCCESS: 代码文件${path.join(ctx.projectRoot, rel)},${existed ? "已存在代码" : "添加代码"}${code.content}${existed ? "" : "完成"}`);
414
+ }
415
+ }
416
+ }
417
+ if (!okInject)
418
+ warnings.push(`SceneDelegate injection incomplete for ${rel}`);
419
+ const before = store.read(rel);
420
+ cu.applyToStore((c) => store.write(rel, c));
421
+ if (store.read(rel) !== before)
422
+ changed.add(rel);
423
+ }
424
+ }
257
425
  export async function runIosIntegrateTopSdk(ctx, store, binaryCopies, options = {}) {
258
426
  if (!ctx.ios?.ok)
259
427
  return fail(["iOS project not detected"]);
260
428
  const warnings = [];
429
+ const logs = [];
261
430
  const changed = new Set();
262
431
  const configPath = ctx.remoteConfigPath ?? path.join(ctx.projectRoot, MEETSDK_REMOTE_CONFIG_FILENAME);
263
432
  if (!fs.existsSync(configPath)) {
264
- return fail([`${MEETSDK_REMOTE_CONFIG_FILENAME} not found at ${configPath}; run fetch-config or setup first`]);
433
+ return fail([`${MEETSDK_REMOTE_CONFIG_FILENAME} not found at ${configPath}; run fetch-config or setup first`], warnings, logs);
265
434
  }
266
435
  let remote;
267
436
  try {
268
437
  remote = tryParseAsMeetSdkRemoteConfig(JSON.parse(fs.readFileSync(configPath, "utf8")));
269
438
  }
270
439
  catch (e) {
271
- return fail([e instanceof Error ? e.message : String(e)]);
440
+ return fail([e instanceof Error ? e.message : String(e)], warnings, logs);
272
441
  }
273
442
  if (!remote) {
274
- return fail([`invalid ${MEETSDK_REMOTE_CONFIG_FILENAME}`]);
443
+ return fail([`invalid ${MEETSDK_REMOTE_CONFIG_FILENAME}`], warnings, logs);
275
444
  }
276
445
  const validation = validateMeetSdkRemoteConfig(remote);
277
446
  if (!validation.ok) {
@@ -282,12 +451,14 @@ export async function runIosIntegrateTopSdk(ctx, store, binaryCopies, options =
282
451
  sdkRoot = ctx.iosSdkRoot ?? resolveIosSdkRoot(ctx.packageRoot);
283
452
  }
284
453
  catch (e) {
285
- return fail([e instanceof Error ? e.message : String(e)]);
454
+ return fail([e instanceof Error ? e.message : String(e)], warnings, logs);
286
455
  }
287
456
  const targetName = options.targetName ?? ctx.ios.targetName ?? path.basename(ctx.ios.xcodeprojPath, ".xcodeproj");
288
457
  const perform = options.performSettings ?? DEFAULT_PERFORM_SETTINGS;
289
458
  const executeAppDelegate = options.executeAppDelegate !== false;
290
459
  const dryRun = Boolean(options.dryRun);
460
+ logs.push("6、执行 SDK 接入");
461
+ logs.push(`*** 项目根目录:${ctx.projectRoot} ***`);
291
462
  const channelConfig = buildChannelConfigMap(remote);
292
463
  const coreConfigs = listSdkCoreConfigs(sdkRoot);
293
464
  const pluginFolders = enabledIosPluginFolders(remote);
@@ -310,116 +481,90 @@ export async function runIosIntegrateTopSdk(ctx, store, binaryCopies, options =
310
481
  plistDocs = await ensureInfoPlists(store, ctx, pbx, targetName);
311
482
  }
312
483
  catch (e) {
313
- return fail([e instanceof Error ? e.message : String(e)], warnings);
484
+ return fail([e instanceof Error ? e.message : String(e)], warnings, logs);
314
485
  }
486
+ const dirtyPlistDocs = new Set();
315
487
  const firebaseDownload = await downloadIosFirebaseConfig(remote, pbx, dryRun, iosFirebaseConfigRelPath(plistDocs));
316
488
  warnings.push(...firebaseDownload.warnings);
317
489
  if (firebaseDownload.errors.length)
318
- return fail(firebaseDownload.errors, warnings);
490
+ return fail(firebaseDownload.errors, warnings, logs);
319
491
  const resourceErrors = [...coreConfigs, ...pluginConfigs].flatMap(validateLoadedPluginResourcesForIos);
320
492
  if (resourceErrors.length)
321
- return fail(resourceErrors, warnings);
493
+ return fail(resourceErrors, warnings, logs);
322
494
  const missingRequiredConfigs = validateRequiredChannelConfigs(pluginConfigs, channelConfig);
323
495
  if (missingRequiredConfigs.length) {
324
- return fail([`iOS remote config missing required channel params: ${missingRequiredConfigs.join(", ")}`], warnings);
325
- }
326
- for (const loaded of coreConfigs) {
327
- applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryRun, firebaseDownload.remoteSources);
496
+ return fail([`iOS remote config missing required channel params: ${missingRequiredConfigs.join(", ")}`], warnings, logs);
328
497
  }
329
498
  for (const loaded of pluginConfigs) {
330
- applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryRun, firebaseDownload.remoteSources);
499
+ applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryRun, logs, firebaseDownload.remoteSources);
500
+ if (loaded.config.name === "FacebookSignin" && perform.includes("sources")) {
501
+ const swiftRel = ensureTopSdkInstallSwift(store, ctx, pbx);
502
+ if (swiftRel) {
503
+ changed.add(swiftRel);
504
+ logs.push("SUCCESS: 未检测到Swift代码文件,自动添加TopSDKInstall.swift完成");
505
+ }
506
+ }
507
+ mergePlistParams(plistDocs, loaded, channelConfig, perform, logs, dirtyPlistDocs);
508
+ if (perform.includes("infoParams")) {
509
+ const doc = plistDocs[0];
510
+ if (doc) {
511
+ const before = cloneValue(doc.data.NSAppTransportSecurity);
512
+ setAppTransportSecurity(doc.data, true);
513
+ if (!valuesEqual(before, doc.data.NSAppTransportSecurity))
514
+ dirtyPlistDocs.add(doc);
515
+ }
516
+ }
517
+ if (perform.includes("infoParams") && loaded.config.name === "AppleSignin") {
518
+ for (const rel of ensureAppleSignInEntitlement(store, ctx.projectRoot, pbx)) {
519
+ changed.add(rel);
520
+ }
521
+ logs.push("SUCCESS: 启用SigninWithApple完成");
522
+ }
523
+ logs.push(`SUCCESS: 插件${loaded.config.name}接入完成`);
331
524
  }
332
- for (const loaded of [...coreConfigs, ...pluginConfigs]) {
333
- mergePlistParams(plistDocs, loaded, channelConfig, perform);
525
+ for (const loaded of coreConfigs) {
526
+ applyPlugin(loaded, pbx, fm, channelConfig, perform, binaryCopies, dryRun, logs, firebaseDownload.remoteSources);
527
+ mergePlistParams(plistDocs, loaded, channelConfig, perform, logs, dirtyPlistDocs);
334
528
  if (perform.includes("infoParams")) {
335
- setAppTransportSecurity(plistDocs[0]?.data ?? {}, true);
529
+ const doc = plistDocs[0];
530
+ if (doc) {
531
+ const before = cloneValue(doc.data.NSAppTransportSecurity);
532
+ setAppTransportSecurity(doc.data, true);
533
+ if (!valuesEqual(before, doc.data.NSAppTransportSecurity))
534
+ dirtyPlistDocs.add(doc);
535
+ }
336
536
  }
537
+ if (executeAppDelegate) {
538
+ injectDelegateCodes([loaded], ctx, store, pbx, warnings, changed, logs);
539
+ }
540
+ logs.push(`SUCCESS: 插件${loaded.config.name}接入完成`);
337
541
  }
338
542
  for (const doc of plistDocs) {
339
543
  if (perform.includes("infoParams")) {
340
544
  const { pluginsInfo, dataPluginsInfo } = buildTopSdkPluginInfo(pluginConfigs, channelConfig);
341
- addPlistParam(doc.data, "TOPSDK", {
545
+ const before = doc.data.TOPSDK;
546
+ const nextTopSdk = {
342
547
  APP_ID: remote.topsdk.appId,
343
548
  Plugins: pluginsInfo,
344
549
  dataPlugins: dataPluginsInfo,
345
- });
550
+ };
551
+ if (!valuesEqual(before, nextTopSdk)) {
552
+ addPlistParam(doc.data, "TOPSDK", nextTopSdk);
553
+ dirtyPlistDocs.add(doc);
554
+ }
555
+ pushValueChangeLog(logs, "info.plist配置key:TOPSDK", before, nextTopSdk);
346
556
  }
347
557
  const rel = path.relative(ctx.projectRoot, path.join(pbx.srcRoot, doc.relPath)).split(path.sep).join("/");
348
- store.write(rel, buildPlistXml(doc.data));
349
- changed.add(rel);
350
- }
351
- if (perform.includes("infoParams") && pluginConfigs.some((p) => p.config.name === "AppleSignin")) {
352
- for (const rel of ensureAppleSignInEntitlement(store, ctx.projectRoot, pbx)) {
558
+ if (dirtyPlistDocs.has(doc)) {
559
+ store.write(rel, buildPlistXml(doc.data));
353
560
  changed.add(rel);
354
561
  }
355
562
  }
356
563
  savePbxToStore(store, pbx);
357
564
  changed.add(pbx.rel);
358
- if (executeAppDelegate) {
359
- const sceneDelegateRelPaths = [];
360
- for (const abs of findSceneDelegateFiles(pbx.srcRoot)) {
361
- sceneDelegateRelPaths.push(path.relative(ctx.projectRoot, abs).split(path.sep).join("/"));
362
- }
363
- const hasUniqueSceneDelegate = sceneDelegateRelPaths.length === 1;
364
- const delegateRelPaths = [];
365
- for (const abs of findDelegateFiles(pbx.srcRoot)) {
366
- delegateRelPaths.push(path.relative(ctx.projectRoot, abs).split(path.sep).join("/"));
367
- }
368
- if (!delegateRelPaths.length) {
369
- warnings.push("no UIApplicationDelegate .m/.mm found; skipped AppDelegate injection (SwiftUI @main is not supported yet)");
370
- }
371
- if (delegateRelPaths.length > 1) {
372
- warnings.push(`multiple UIApplicationDelegate files found; skipped AppDelegate injection: ${delegateRelPaths.join(", ")}`);
373
- }
374
- for (const rel of delegateRelPaths.length === 1 ? delegateRelPaths : []) {
375
- const cu = CodeUtils.fromFile(path.join(ctx.projectRoot, rel));
376
- let okInject = true;
377
- for (const loaded of [...coreConfigs, ...pluginConfigs]) {
378
- for (const code of appDelegateCodesForLifecycle(loaded, hasUniqueSceneDelegate)) {
379
- if (code.type === "header") {
380
- if (!cu.addHeader(code.content))
381
- okInject = false;
382
- }
383
- else if ((code.type === "method" || code.type === "code") && code.method) {
384
- if (!cu.addCodeToMethod(code.method, code.content, Boolean(code.addToReturn)))
385
- okInject = false;
386
- }
387
- }
388
- }
389
- if (!okInject)
390
- warnings.push(`AppDelegate injection incomplete for ${rel}`);
391
- const before = store.read(rel);
392
- cu.applyToStore((c) => store.write(rel, c));
393
- if (store.read(rel) !== before)
394
- changed.add(rel);
395
- }
396
- if (sceneDelegateRelPaths.length > 1) {
397
- warnings.push(`multiple UIWindowSceneDelegate files found; skipped SceneDelegate injection: ${sceneDelegateRelPaths.join(", ")}`);
398
- }
399
- for (const rel of sceneDelegateRelPaths.length === 1 ? sceneDelegateRelPaths : []) {
400
- const cu = CodeUtils.fromFile(path.join(ctx.projectRoot, rel));
401
- let okInject = true;
402
- for (const loaded of [...coreConfigs, ...pluginConfigs]) {
403
- for (const code of loaded.config.sceneDelegateCodes ?? []) {
404
- if (code.type === "header") {
405
- if (!cu.addHeader(code.content))
406
- okInject = false;
407
- }
408
- else if ((code.type === "method" || code.type === "code") && code.method) {
409
- if (!cu.addCodeToMethod(code.method, code.content, Boolean(code.addToReturn)))
410
- okInject = false;
411
- }
412
- }
413
- }
414
- if (!okInject)
415
- warnings.push(`SceneDelegate injection incomplete for ${rel}`);
416
- const before = store.read(rel);
417
- cu.applyToStore((c) => store.write(rel, c));
418
- if (store.read(rel) !== before)
419
- changed.add(rel);
420
- }
421
- }
422
- return ok([...changed], warnings);
565
+ logs.push("SUCCESS: info.plist配置写入完成");
566
+ logs.push("!! 接入流程已全部结束 !!");
567
+ return ok([...changed], warnings, logs);
423
568
  }
424
569
  async function ensureInfoPlists(store, ctx, pbx, targetName) {
425
570
  const absPaths = findInfoPlistPathsFromPbx(pbx);