( installablePath: string, )
| 167 | } |
| 168 | |
| 169 | async function detectIosAppMetadata( |
| 170 | installablePath: string, |
| 171 | ): Promise<MaterializedArtifact['detected']> { |
| 172 | const bundleId = await readIosPlistValue(installablePath, 'CFBundleIdentifier'); |
| 173 | const displayName = await readIosPlistValue(installablePath, 'CFBundleDisplayName'); |
| 174 | const bundleName = await readIosPlistValue(installablePath, 'CFBundleName'); |
| 175 | const appName = displayName ?? bundleName ?? readBaseNameIfMeaningful(installablePath, '.app'); |
| 176 | |
| 177 | return { |
| 178 | ...(bundleId ? { bundleId } : {}), |
| 179 | ...(appName ? { appName } : {}), |
| 180 | }; |
| 181 | } |
| 182 | |
| 183 | async function readIosPlistValue(appBundlePath: string, key: string): Promise<string | undefined> { |
| 184 | const infoPlistPath = path.join(appBundlePath, 'Info.plist'); |
no test coverage detected
searching dependent graphs…