apps folders add adds the folder (template note, refusals with reasons); MCP: .mcp.json never spawns a missing plugin path (sh fallback to PATH, npx), mcp/serve skip the self-update, spawned handshake test; store build minimums in one dated table: Play target API 36 and App Store Xcode 26 / SDK 26 blocked in scan, validate, play upload/release, apple upload; pitfalls 81-83
This commit is contained in:
parent
9805582278
commit
9ab64bcbdf
16 changed files with 323 additions and 14 deletions
|
|
@ -8,6 +8,7 @@ import { basename, dirname, extname, join, relative, sep } from 'node:path';
|
|||
import { resolvePackage } from '../node-packages';
|
||||
import { isBuildCopyPath, type Manifest, parseManifest } from '../privacy-manifest';
|
||||
import { type DepRef, type Eco, matchesSdk, SDKS, type SdkDef } from './sdks';
|
||||
import { exportedIpas, ipaInfo } from '../xcode';
|
||||
|
||||
export interface Loc { file: string; line: number }
|
||||
export interface PlistEntry { key: string; value: unknown; at: Loc }
|
||||
|
|
@ -88,6 +89,8 @@ export interface ProjectFacts {
|
|||
sources: { path: string; text: string }[];
|
||||
/** Folders of built web output inside the project (Capacitor webDir): low-trust evidence, see isBuilt. */
|
||||
builtDirs: string[];
|
||||
/** Xcode / SDK of the newest IPA in build/ios/export (Info.plist DTXcode, DTSDKName, DTPlatformVersion). */
|
||||
iosBuild?: { file: string; xcode?: string; sdkName?: string; platformVersion?: string } | null;
|
||||
/** Files looked at, relative to root (for the report). */
|
||||
scanned: number;
|
||||
}
|
||||
|
|
@ -542,7 +545,7 @@ export function detectProject(root: string): ProjectFacts {
|
|||
for (const x of extra.services) if (!svc.has(key('service', x.name))) android.services.push(x);
|
||||
}
|
||||
}
|
||||
return { root, stacks: [...stacks], ios, android: isAndroid, deps, sdks, plist, plistSources, entitlements, privacyManifests, androidInfo: android, native, remoteStart, sources, builtDirs, scanned: files.length };
|
||||
return { root, stacks: [...stacks], ios, android: isAndroid, deps, sdks, plist, plistSources, entitlements, privacyManifests, androidInfo: android, native, remoteStart, sources, builtDirs, iosBuild: newestIpaBuild(root), scanned: files.length };
|
||||
}
|
||||
|
||||
/** NDK r27 flag and the linker flag of older NDKs that make native libraries 16 KB aligned. */
|
||||
|
|
@ -640,3 +643,13 @@ export const where = (l: Loc): string => `${l.file}:${l.line}`;
|
|||
|
||||
/** Ecosystems in a readable order for the report. */
|
||||
export const ECO_LABEL: Record<Eco, string> = { cocoapods: 'CocoaPods', spm: 'SwiftPM', carthage: 'Carthage', gradle: 'Gradle', npm: 'npm', pub: 'pub', unity: 'Unity', godot: 'Godot' };
|
||||
|
||||
/** The build tools of the newest IPA under build/ios/export, or null (no IPA, or unreadable). */
|
||||
function newestIpaBuild(root: string): ProjectFacts['iosBuild'] {
|
||||
try {
|
||||
const ipa = exportedIpas(join(root, 'build/ios/export'))[0];
|
||||
if (!ipa) return null;
|
||||
const i = ipaInfo(ipa);
|
||||
return { file: relative(root, ipa).split(sep).join('/'), xcode: i.xcode, sdkName: i.sdkName, platformVersion: i.platformVersion };
|
||||
} catch { return null; }
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue