Skip to content

Commit 454dd7e

Browse files
authored
[iOS] specify minimum os version for native asset frameworks (#148504)
Fixes flutter/flutter#148501
1 parent e6fa865 commit 454dd7e

File tree

3 files changed

+76
-8
lines changed

3 files changed

+76
-8
lines changed

packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,9 @@ Future<void> _copyNativeAssetsIOS(
230230
}
231231
await lipoDylibs(dylibFile, sources);
232232
await setInstallNameDylib(dylibFile);
233-
await createInfoPlist(targetUri.pathSegments.last, frameworkDir);
233+
// TODO(knopp): Wire the value once there is a way to configure that in the hook.
234+
// https://github.com/dart-lang/native/issues/1133
235+
await createInfoPlist(targetUri.pathSegments.last, frameworkDir, minimumIOSVersion: '12.0');
234236
await codesignDylib(codesignIdentity, buildMode, frameworkDir);
235237
}
236238
globals.logger.printTrace('Copying native assets done.');

packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets_host.dart

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,23 @@ import '../../../globals.dart' as globals;
1818
/// The framework must be named [name].framework and the dylib [name].
1919
Future<void> createInfoPlist(
2020
String name,
21-
Directory target,
22-
) async {
21+
Directory target, {
22+
String? minimumIOSVersion,
23+
}) async {
2324
final File infoPlistFile = target.childFile('Info.plist');
24-
await infoPlistFile.writeAsString('''
25+
final String bundleIdentifier = 'io.flutter.flutter.native_assets.$name'.replaceAll('_', '-');
26+
await infoPlistFile.writeAsString(<String>[
27+
'''
2528
<?xml version="1.0" encoding="UTF-8"?>
2629
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
2730
<plist version="1.0">
2831
<dict>
2932
<key>CFBundleDevelopmentRegion</key>
30-
<string>en</string>
33+
<string>en</string>
3134
<key>CFBundleExecutable</key>
3235
<string>$name</string>
3336
<key>CFBundleIdentifier</key>
34-
<string>io.flutter.flutter.native_assets.$name</string>
37+
<string>$bundleIdentifier</string>
3538
<key>CFBundleInfoDictionaryVersion</key>
3639
<string>6.0</string>
3740
<key>CFBundleName</key>
@@ -44,9 +47,16 @@ Future<void> createInfoPlist(
4447
<string>????</string>
4548
<key>CFBundleVersion</key>
4649
<string>1.0</string>
50+
''',
51+
if (minimumIOSVersion != null)
52+
'''
53+
<key>MinimumOSVersion</key>
54+
<string>$minimumIOSVersion</string>
55+
''',
56+
'''
4757
</dict>
48-
</plist>
49-
''');
58+
</plist>'''
59+
].join());
5060
}
5161

5262
/// Combines dylibs from [sources] into a fat binary at [targetFullPath].

packages/flutter_tools/test/integration.shard/isolated/native_assets_test.dart

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,32 @@ void expectDylibIsBundledMacOS(Directory appDirectory, String buildMode) {
345345
final Link dylibLink = frameworkDir.childLink(frameworkName);
346346
expect(dylibLink, exists);
347347
expect(dylibLink.resolveSymbolicLinksSync(), dylibFile.path);
348+
final String infoPlist = resourcesDir.childFile('Info.plist').readAsStringSync();
349+
expect(infoPlist, '''
350+
<?xml version="1.0" encoding="UTF-8"?>
351+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
352+
<plist version="1.0">
353+
<dict>
354+
<key>CFBundleDevelopmentRegion</key>
355+
<string>en</string>
356+
<key>CFBundleExecutable</key>
357+
<string>package_with_native_assets</string>
358+
<key>CFBundleIdentifier</key>
359+
<string>io.flutter.flutter.native-assets.package-with-native-assets</string>
360+
<key>CFBundleInfoDictionaryVersion</key>
361+
<string>6.0</string>
362+
<key>CFBundleName</key>
363+
<string>package_with_native_assets</string>
364+
<key>CFBundlePackageType</key>
365+
<string>FMWK</string>
366+
<key>CFBundleShortVersionString</key>
367+
<string>1.0</string>
368+
<key>CFBundleSignature</key>
369+
<string>????</string>
370+
<key>CFBundleVersion</key>
371+
<string>1.0</string>
372+
</dict>
373+
</plist>''');
348374
}
349375

350376
void expectDylibIsBundledIos(Directory appDirectory, String buildMode) {
@@ -357,6 +383,36 @@ void expectDylibIsBundledIos(Directory appDirectory, String buildMode) {
357383
.childDirectory('$frameworkName.framework')
358384
.childFile(frameworkName);
359385
expect(dylib, exists);
386+
final String infoPlist = frameworksFolder
387+
.childDirectory('$frameworkName.framework')
388+
.childFile('Info.plist').readAsStringSync();
389+
expect(infoPlist, '''
390+
<?xml version="1.0" encoding="UTF-8"?>
391+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
392+
<plist version="1.0">
393+
<dict>
394+
<key>CFBundleDevelopmentRegion</key>
395+
<string>en</string>
396+
<key>CFBundleExecutable</key>
397+
<string>package_with_native_assets</string>
398+
<key>CFBundleIdentifier</key>
399+
<string>io.flutter.flutter.native-assets.package-with-native-assets</string>
400+
<key>CFBundleInfoDictionaryVersion</key>
401+
<string>6.0</string>
402+
<key>CFBundleName</key>
403+
<string>package_with_native_assets</string>
404+
<key>CFBundlePackageType</key>
405+
<string>FMWK</string>
406+
<key>CFBundleShortVersionString</key>
407+
<string>1.0</string>
408+
<key>CFBundleSignature</key>
409+
<string>????</string>
410+
<key>CFBundleVersion</key>
411+
<string>1.0</string>
412+
<key>MinimumOSVersion</key>
413+
<string>12.0</string>
414+
</dict>
415+
</plist>''');
360416
}
361417

362418
/// Checks that dylibs are bundled.

0 commit comments

Comments
 (0)