[native_assets] Fix framework name deduplication (#149761)

Applies 02d5286e02 to MacOS.

I'm hoping this will fix:

* https://github.com/flutter/flutter/issues/148955
This commit is contained in:
Daco Harkes 2024-06-07 09:07:08 +02:00 committed by GitHub
parent ae47edab7a
commit 2a543aa43b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 5 deletions

View File

@ -214,10 +214,19 @@ Map<AssetImpl, KernelAsset> _assetTargetLocations(
Uri? absolutePath,
) {
final Set<String> alreadyTakenNames = <String>{};
return <AssetImpl, KernelAsset>{
for (final AssetImpl asset in nativeAssets)
asset: _targetLocationMacOS(asset, absolutePath, alreadyTakenNames),
};
final Map<String, KernelAssetPath> idToPath = <String, KernelAssetPath>{};
final Map<AssetImpl, KernelAsset> result = <AssetImpl, KernelAsset>{};
for (final AssetImpl asset in nativeAssets) {
final KernelAssetPath path = idToPath[asset.id] ??
_targetLocationMacOS(asset, absolutePath, alreadyTakenNames).path;
idToPath[asset.id] = path;
result[asset] = KernelAsset(
id: (asset as NativeCodeAssetImpl).id,
target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
path: path,
);
}
return result;
}
KernelAsset _targetLocationMacOS(

View File

@ -177,12 +177,25 @@ void main() {
nativeAssetsYaml,
projectUri.resolve('build/native_assets/macos/native_assets.yaml'),
);
final String nativeAssetsYamlContents =
await fileSystem.file(nativeAssetsYaml).readAsString();
expect(
await fileSystem.file(nativeAssetsYaml).readAsString(),
nativeAssetsYamlContents,
contains('package:bar/bar.dart'),
);
expect(buildRunner.buildDryRunInvocations, 1);
expect(buildRunner.linkDryRunInvocations, 1);
// Check that the framework uri is identical for both archs.
final String pathSeparator = const LocalPlatform().pathSeparator;
expect(
nativeAssetsYamlContents,
stringContainsInOrder(
<String>[
'bar.framework${pathSeparator}bar',
'bar.framework${pathSeparator}bar',
],
),
);
});
testUsingContext('build with assets but not enabled', overrides: <Type, Generator>{