-
Notifications
You must be signed in to change notification settings - Fork 29.1k
[tools]build ipa validate template icon files #114841
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[tools]build ipa validate template icon files #114841
Conversation
70d0d4d
to
78dafcd
Compare
CC @leighajarett for the output format |
Should we link to the documentation? For example:
Otherwise LGTM! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like to see the full output of flutter build ipa
with this change.
The output looks really noisy, I suggest replacing the warnings with something that just says some default images were detected, and maybe listing just the (idiom, size, scale)
on one line. We can link to docs that give more info if needed.
This warning is similar:
flutter/packages/flutter_tools/lib/src/ios/mac.dart
Lines 195 to 196 in 378387b
globals.printError('Action Required: You must set a build name and number in the pubspec.yaml ' | |
'file version field before submitting to the App Store.'); |
We don't want the output to be a wall of text that scrolls out other useful information. Particularly this being a box, next to the validation also in a box you added to #113412.
@leighajarett @jmagman how about reusing the existing box for
I'd like to keep BOTH |
We can add that info to https://docs.flutter.dev/deployment/ios#add-an-app-icon then? The box seems huge compared to the rest of the output, which may have a lot more important information, the user may not be ready to change their icon. I'd rather add this as a single line to the validation box you added in the other PR, it seems spiritually the same as the other "You must set up the missing settings". Paste the entire |
@jmagman @leighajarett does this look good? |
c0c0533
to
58d88ce
Compare
e6c14a5
to
75b9032
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor nits.
cc @InMatrix to follow up later: we could use some UXR polish for the changes the iOS team has recently made to add additional info during app publication.
|
||
testUsingContext('returns project app icon dirname', () async { | ||
final BuildableIOSApp iosApp = BuildableIOSApp( | ||
IosProject.fromFlutter(FlutterProject.fromDirectory(globals.fs.currentDirectory)), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's extra 2 spaces in a few places in this test file and template_test.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hmmm, i was probably using the wrong IntelliJ settings. It's odd that the linter doesn't catch it. Filed an issue here
@InMatrix Just double check if i answered your question before we land this change. Thanks! |
Yes, you did. I think the message is fine, since it seems to be a mild warning the user doesn't have to address right away. |
@InMatrix Thanks for the input. Yes it is more mild than the error output "failed to register bundle identifier" (which is a separate error). In fact, even if developers use the template icons, they can still create a valid IPA (e.g. distribute with TestFlight). Though if they want to submit for app review and release it on the app store, they will want to change their icons |
Is the issue going to be pretty obvious when they install the app to their device / simulator? |
Yep. Though it's possible that they only update the home screen app icon and forget about the rest (sometimes do that personally). There are many other icons (such as the ones used in push notification, iOS settings page, etc) that needs update. BTW there's a potential project that allows developers to just provide a single large icon in flutter, and Flutter tools will just scale it into different sizes for different platforms. |
This sounds very useful. How does Xcode handles this? I remember seeing an asset manager GUI. |
With Xcode you have to manually provide like 20 different sizes The GUI you are seeing is helpful that you can drag and drop the files, and Xcode will automatically update JSON for you if you used a different file name. |
@jmagman friendly ping |
That's not true in Xcode 14, you can just supply one large image: https://useyourloaf.com/blog/xcode-14-single-size-app-icon/ |
Wow nice to see Xcode finally supports single icon. The original idea behind multiple icons is that designers may want to show less details or slight variation in lower resolution, which seems to be a valid argument. But in practice 99% of people just resize the icons |
* 338841a Revert "Revert "Revert "Scribble mixin (#104128)" (#114647)" (#114698)" (flutter/flutter#115146) * 229b39e [flutter_tools] Fix so that the value set by `--dart-define-from-file` can be passed to Gradle (flutter/flutter#114297) * 3895786 Revert "Load assets in flutter_test without turning event loop. (#115123)" (flutter/flutter#115156) * a6e3ec8 mark firebase test lab test flaky because of upstream infra issues (flutter/flutter#115178) * 8d808b5 Roll Flutter Engine from 7326e5b3354b to 329900fc85d6 (7 revisions) (flutter/flutter#115185) * 10dc566 Add drone_dimensions to devicelab_build_test. (flutter/flutter#115183) * 0a5b531 b6e45ae35 extend const_finder to allow skipping particular classes (flutter/engine#37257) (flutter/flutter#115189) * 0e9ee36 [web] Add `--local-web-sdk` flag and use precompiled platform kernels for dart2js and ddc (flutter/flutter#114639) * 9e314ff Make FutureBuilder handle SynchronousFuture correctly, reland SynchronousFuture usage in test assets (flutter/flutter#115173) * 673fd97 17d428e68 Roll Dart SDK from 2b6909ba35e5 to 190040da0bc8 (2 revisions) (flutter/engine#37536) (flutter/flutter#115191) * edcdb00 Roll Flutter Engine from 17d428e688a9 to 38c4f1d78630 (2 revisions) (flutter/flutter#115192) * 8772768 Roll Flutter Engine from 38c4f1d78630 to 1f0dd2c0f5bb (2 revisions) (flutter/flutter#115194) * 6ec2bd0 M3 Segmented Button widget (flutter/flutter#113723) * b7b6758 f3dfdf4cc Roll Skia from 3bbdd5bc54f2 to a727f7ac8a98 (1 revision) (flutter/engine#37544) (flutter/flutter#115196) * 94e753d Roll Flutter Engine from f3dfdf4ccf38 to e3b3950f0fab (3 revisions) (flutter/flutter#115200) * 61e927d e63c9443b [Impeller] Include the new primitive type in the pipeline hash (flutter/engine#37546) (flutter/flutter#115201) * c05d887 Roll Flutter Engine from e63c9443bc04 to 9500d8c4a4ce (2 revisions) (flutter/flutter#115212) * 1f82985 1c8c23754 Roll Fuchsia Linux SDK from xDY5B0-NZzq2idRNU... to IE4logHFoa8ZZQAw3... (flutter/engine#37554) (flutter/flutter#115214) * 61b3d5a a0d8cd68c Add a limit to the Gaussian blur downsampling curve (flutter/engine#37550) (flutter/flutter#115217) * 2bf64aa fd56b7ee8 Roll Fuchsia Mac SDK from j3vspnGJcQvIfsXXu... to iPqmEVwAbmYwPlh5a... (flutter/engine#37557) (flutter/flutter#115218) * 53ab17d Roll Flutter Engine from fd56b7ee87f0 to 1ae285897eae (2 revisions) (flutter/flutter#115220) * 4488166 d4e2188e9 [Impeller] Fix DrawPaint regression (flutter/engine#37561) (flutter/flutter#115222) * bf906e6 2bdeaf7d7 Fix inertia cancel event on macOS Ventura (flutter/engine#37067) (flutter/flutter#115226) * 1a19409 06c390470 Roll Fuchsia Mac SDK from iPqmEVwAbmYwPlh5a... to N-iOLgSVYYh_AfC7Q... (flutter/engine#37566) (flutter/flutter#115236) * 1a460cf 54795869b Roll Skia from c0f87aed019b to 38edf6197aa9 (1 revision) (flutter/engine#37567) (flutter/flutter#115239) * 8230ef5 Revert "[web] Add `--local-web-sdk` flag and use precompiled platform kernels for dart2js and ddc (#114639)" (flutter/flutter#115242) * 8994920 7269f2f91 Roll Skia from 38edf6197aa9 to 0f515e97d535 (1 revision) (flutter/engine#37571) (flutter/flutter#115244) * 7ac00f7 40b071c75 Roll Fuchsia Linux SDK from IE4logHFoa8ZZQAw3... to AE_mBWzdDqUvn4r1N... (flutter/engine#37572) (flutter/flutter#115247) * fa94a3c b63e6cf55 [Impeller] dont include sampler offset in float offset (flutter/engine#37573) (flutter/flutter#115248) * cb224d1 b7567b92c Roll Fuchsia Mac SDK from N-iOLgSVYYh_AfC7Q... to WYzUv6RnWjJpAiqYp... (flutter/engine#37575) (flutter/flutter#115252) * d587fe4 a1b5507e5 Add playground to demonstrate mask blur problems (flutter/engine#37574) (flutter/flutter#115260) * f5205b1 6f7447efa Roll Fuchsia Linux SDK from AE_mBWzdDqUvn4r1N... to dRHIZSishiboEHMdw... (flutter/engine#37577) (flutter/flutter#115266) * 2c4051f b077c1c46 Roll Dart SDK from 996fe4d7ea9a to 45b7433f9015 (1 revision) (flutter/engine#37578) (flutter/flutter#115271) * 0b5f3fd 743cec5ba Roll Skia from 0f515e97d535 to b2109e6bbbe7 (1 revision) (flutter/engine#37580) (flutter/flutter#115279) * 80bcc3a 035313ae2 Roll Dart SDK from 45b7433f9015 to 7cbcf48157cf (1 revision) (flutter/engine#37582) (flutter/flutter#115281) * fdd2fe4 036f8ea88 Roll Fuchsia Mac SDK from WYzUv6RnWjJpAiqYp... to XvXKIR_SSUfSyGwxe... (flutter/engine#37583) (flutter/flutter#115293) * 436fb4c c290de693 Roll Skia from b2109e6bbbe7 to 2ad14e25f6f7 (7 revisions) (flutter/engine#37585) (flutter/flutter#115294) * 2449907 Fixed the color curve issue (flutter/flutter#115188) * 9359c25 1a79e8686 [macOS] Move to new update semantics embedder API (flutter/engine#37404) (flutter/flutter#115301) * 59e1edc Roll Flutter Engine from 1a79e8686036 to 8c73ffff5b6f (2 revisions) (flutter/flutter#115302) * f2ec1c4 42bc762b6 Roll Skia from 2ad14e25f6f7 to a434f9b69660 (11 revisions) (flutter/engine#37591) (flutter/flutter#115304) * ea4e11d Fix test in preparation of the Dart VM dropping support for language versions < 2.12.0 (flutter/flutter#115176) * a0a7b3a 14ecaeb91 [Impeller] error earlier on uint types (flutter/engine#37593) (flutter/flutter#115308) * 2e51077 Do not strip architecture suffixes from host local-engine (flutter/flutter#115320) * 8e3ea14 Incorrect rendering of `SnapshotWidget` (flutter/flutter#114400) * 59ecc75 [flutter_tools] add uint compilation test (flutter/flutter#115317) * 1aeb172 Roll Flutter Engine from 14ecaeb915e0 to 78ae2414003a (10 revisions) (flutter/flutter#115335) * e391812 9dedab305 Roll Skia from b474a43dcc34 to 2cebc1ce363c (2 revisions) (flutter/engine#37612) (flutter/flutter#115338) * 9d64a0f 31ee28684 Combine results of all the test batches. (flutter/engine#37610) (flutter/flutter#115340) * e9c6212 [Impeller] Add shader include with FlutterFragCoord for use by FragmentProgram (flutter/flutter#114214) * a27bb3c 06bd5a816 Roll Skia from 2cebc1ce363c to d758b240cad0 (1 revision) (flutter/engine#37614) (flutter/flutter#115341) * abbffcc c6a513ecd Roll Fuchsia Mac SDK from XvXKIR_SSUfSyGwxe... to 32kfSm94FGtJJeUjg... (flutter/engine#37615) (flutter/flutter#115344) * 0f56ed1 f01de9f6b Roll Skia from d758b240cad0 to 24523449b1b3 (1 revision) (flutter/engine#37616) (flutter/flutter#115346) * 25d74e6 0b338ed86 Roll Dart SDK from 6f5478a58387 to 987faaf6d1d4 (2 revisions) (flutter/engine#37617) (flutter/flutter#115352) * 1f28f99 721fbe111 Roll Skia from 24523449b1b3 to 4d519a8ba97a (3 revisions) (flutter/engine#37618) (flutter/flutter#115354) * c37f255 [tools] Fix plugin_ffi template lint violation (flutter/flutter#115356) * 3c3f136 b4fd07fa4 Roll Dart SDK from 987faaf6d1d4 to 42f87c0521f8 (1 revision) (flutter/engine#37619) (flutter/flutter#115362) * 2ed5283 58495f077 [Impeller] Add debug names to additional VK objects (flutter/engine#37592) (flutter/flutter#115363) * afafde6 7f74f34a4 Roll Fuchsia Linux SDK from B0OuUvWOY24LI1WoF... to agStiOtzmc9Fmw6gc... (flutter/engine#37621) (flutter/flutter#115365) * af2ec91 Roll Plugins from 3ca3410 to e500884 (10 revisions) (flutter/flutter#115366) * 3a298d0 Roll Flutter Engine from 7f74f34a408a to eead7b0d8656 (2 revisions) (flutter/flutter#115369) * acf01eb 905862722 [dart] Run generate_sdk_version_file.py to be compatible with dart ch… (flutter/engine#37624) (flutter/flutter#115372) * 95ace11 Include initial offset when using PlatformViewSurface (flutter/flutter#114103) * 39a9ed5 Updated tokens to v0.141 (flutter/flutter#115298) * ba47c29 216702f3d Roll Skia from 1991515dd191 to 826b3ea577f3 (4 revisions) (flutter/engine#37628) (flutter/flutter#115377) * 2d77ac5 49f8326df Roll Skia from 826b3ea577f3 to 02e2101a75f7 (4 revisions) (flutter/engine#37631) (flutter/flutter#115385) * 136b46b Hint text semantics to be excluded in a11y read out if textfield in not empty and label text is provided (flutter/flutter#115010) * 700de09 Change button and label text to sentence case for Material 3 (flutter/flutter#115187) * b2b8391 Roll Flutter Engine from 49f8326df6f0 to 84cb1f833ac4 (3 revisions) (flutter/flutter#115387) * 2c44f4a Remove dev branch reference from build ios-frameworks error (flutter/flutter#115166) * 792eefe Roll Flutter Engine from 84cb1f833ac4 to af6e47f1d5c4 (4 revisions) (flutter/flutter#115395) * 341a9b1 6d41b2ffb update Scene.toImageSync test to use proper bounds in the request (flutter/engine#37638) (flutter/flutter#115398) * e66183d Bump github/codeql-action from 2.1.25 to 2.1.32 (flutter/flutter#115394) * d0e5b2f Add a way to customize padding in BottomAppBar (flutter/flutter#115175) * 349d648 baad8f2c5 Roll Skia from 02e2101a75f7 to cfb6de45f39b (7 revisions) (flutter/engine#37640) (flutter/flutter#115399) * 7d2b011 Fix logic error in `markNeedsPaint` (flutter/flutter#112735) * 93c4b09 Add `RestorableEnumN<T>` and `RestorableEnum<T>` to restorable primitive types (flutter/flutter#115050) * 2c1536a Create a main alias for master channel. (flutter/flutter#115388) * bbb349b Roll Flutter Engine from baad8f2c553b to e56ed93faab5 (6 revisions) (flutter/flutter#115406) * bacd770 c062f7ea7 Roll Skia from cfb6de45f39b to cdf8348e6fba (4 revisions) (flutter/engine#37649) (flutter/flutter#115407) * 27ff6a5 Roll Flutter Engine from c062f7ea7195 to 03e9a97f8abe (3 revisions) (flutter/flutter#115410) * 58728c6 Roll Flutter Engine from 03e9a97f8abe to 21a572e4e4d0 (2 revisions) (flutter/flutter#115411) * e54c8a8e2 3e15c1925 Roll Dart SDK from 7163c9627d98 to c3f1b3642181 (2 revisions) (flutter/engine#37664) (flutter/flutter#115417) * 484e09e Roll Flutter Engine from 3e15c192560f to 0241f18cbedf (2 revisions) (flutter/flutter#115423) * 4fdaf7a Revert "Roll Flutter Engine from 3e15c192560f to 0241f18cbedf (2 revisions) (#115423)" (flutter/flutter#115456) * 4301731 Make Flutter Driver actively wait for runnable isolate (flutter/flutter#113969) * c940f31 Marks Mac_ios flavors_test_ios to be unflaky (flutter/flutter#115458) * 243a830 Roll Flutter Engine from 3e15c192560f to 223e1f092dd5 (4 revisions) (flutter/flutter#115463) * d7454d5 removing default values for [reporter] and [timeout] in flutter test (flutter/flutter#115160) * a2233ea [flutter_tools] remove all body_might_complete_normally_catch_error ignores (flutter/flutter#115184) * b5345ff d72164776 Revert "[Impeller] Refactor color source resolution to use explicit factory types (#37656)" (flutter/engine#37673) (flutter/flutter#115467) * dcae424 [tools]build ipa validate template icon files (flutter/flutter#114841)
* [tools]build ipa validate template icon files * use the same box for both validations, and added some unit test, and some nits * add unit test for templateImageDirectory * use fs.path.join intead of raw path * use the correct filesystem * lint * use absolute path for flutter_template_images * fix rebase * update indentation
* [tools]build ipa validate template icon files * use the same box for both validations, and added some unit test, and some nits * add unit test for templateImageDirectory * use fs.path.join intead of raw path * use the correct filesystem * lint * use absolute path for flutter_template_images * fix rebase * update indentation
Validate if any of the icons are still using flutter template icon when building IPA.
The basic idea is to parse the
Contents.json
file to get a map of(idiom, size, scale) => image_file_name
, and then read the bytes of matching pairs of icon images, to check if any conflicts.Note that
flutter_gallery
's icons are different from what's used in the template assets (so i had toflutter create
a new project). This PR only checks the exact match. It is probably not worth the effort to check for similarity (e.g. machine learning stuff).When fails the validation, We want to print out both(idiom, size, scale)
and thefile path
.(idiom, size, scale)
is helpful if developers want to edit icons in xcode;file path
is helpful if they directly replace files inAppIcon.appiconset
folder (personally i tend to do the latter, but editing in xcode has the benefit that xcode checks for icon size for you).We want to print out each conflicting file, because it's possible that developer only updates the home screen icon file when they start developing the app, and forget about other icons later (I made that mistake sometimes).In the future, we may also want to validate the image size of app icons. Xcode gives warning about the wrong size, but developers may directly replace images without using Xcode (me, for example).
List which issues are fixed by this PR. You must list at least one issue.
#97730
If you had to change anything in the flutter/tests repo, include a link to the migration guide as per the breaking change policy.
Pre-launch Checklist
///
).If you need help, consider asking for advice on the #hackers-new channel on Discord.