Skip to content

Fix all "Double-quoted include in framework header, expected angle-bracketed instead" warnings #60025

Description

@jmagman

Xcode 14 beta 1 is shipping with clang version 12.0.0 (clang-1200.0.22.7). First opening a newly created Flutter app suggests setting CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER=YES.

Warns when a quoted include is used instead of a framework style include in a framework header.

Turning it on spews warnings for all the places Flutter framework is using a project (quote) include instead of a framework (angle bracket) import.

While we're at it, can we switch all these from includes to imports?

Flutter.h:54:10: warning: double-quoted include "FlutterAppDelegate.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterAppDelegate.h"
         ^~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterAppDelegate.h>

FlutterAppDelegate.h:10:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

FlutterAppDelegate.h:11:10: warning: double-quoted include "FlutterPlugin.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlugin.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlugin.h>

FlutterPlugin.h:11:10: warning: double-quoted include "FlutterBinaryMessenger.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterBinaryMessenger.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterBinaryMessenger.h>

FlutterBinaryMessenger.h:10:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

FlutterPlugin.h:12:10: warning: double-quoted include "FlutterChannels.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterChannels.h"
         ^~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterChannels.h>

FlutterChannels.h:8:10: warning: double-quoted include "FlutterBinaryMessenger.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterBinaryMessenger.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterBinaryMessenger.h>
FlutterChannels.h:9:10: warning: double-quoted include "FlutterCodecs.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterCodecs.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterCodecs.h>

FlutterCodecs.h:9:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

FlutterPlugin.h:13:10: warning: double-quoted include "FlutterCodecs.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterCodecs.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterCodecs.h>
FlutterPlugin.h:14:10: warning: double-quoted include "FlutterPlatformViews.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlatformViews.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlatformViews.h>

FlutterPlatformViews.h:10:9: warning: double-quoted include "FlutterCodecs.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#import "FlutterCodecs.h"
        ^~~~~~~~~~~~~~~~~
        <Flutter/FlutterCodecs.h>
FlutterPlatformViews.h:11:9: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#import "FlutterMacros.h"
        ^~~~~~~~~~~~~~~~~
        <Flutter/FlutterMacros.h>

FlutterPlugin.h:15:10: warning: double-quoted include "FlutterTexture.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterTexture.h"
         ^~~~~~~~~~~~~~~~~~
         <Flutter/FlutterTexture.h>

FlutterTexture.h:11:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

Flutter.h:55:10: warning: double-quoted include "FlutterBinaryMessenger.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterBinaryMessenger.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterBinaryMessenger.h>
Flutter.h:56:10: warning: double-quoted include "FlutterCallbackCache.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterCallbackCache.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterCallbackCache.h>

FlutterCallbackCache.h:10:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

Flutter.h:57:10: warning: double-quoted include "FlutterChannels.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterChannels.h"
         ^~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterChannels.h>
Flutter.h:58:10: warning: double-quoted include "FlutterCodecs.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterCodecs.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterCodecs.h>
Flutter.h:59:10: warning: double-quoted include "FlutterDartProject.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterDartProject.h"
         ^~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterDartProject.h>

FlutterDartProject.h:10:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

Flutter.h:60:10: warning: double-quoted include "FlutterEngine.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterEngine.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterEngine.h>

FlutterEngine.h:11:10: warning: double-quoted include "FlutterBinaryMessenger.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterBinaryMessenger.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterBinaryMessenger.h>
FlutterEngine.h:12:10: warning: double-quoted include "FlutterDartProject.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterDartProject.h"
         ^~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterDartProject.h>
FlutterEngine.h:13:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>
FlutterEngine.h:14:10: warning: double-quoted include "FlutterPlugin.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlugin.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlugin.h>
FlutterEngine.h:15:10: warning: double-quoted include "FlutterTexture.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterTexture.h"
         ^~~~~~~~~~~~~~~~~~
         <Flutter/FlutterTexture.h>

Flutter.h:61:10: warning: double-quoted include "FlutterHeadlessDartRunner.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterHeadlessDartRunner.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterHeadlessDartRunner.h>

FlutterHeadlessDartRunner.h:10:10: warning: double-quoted include "FlutterBinaryMessenger.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterBinaryMessenger.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterBinaryMessenger.h>
FlutterHeadlessDartRunner.h:11:10: warning: double-quoted include "FlutterDartProject.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterDartProject.h"
         ^~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterDartProject.h>
FlutterHeadlessDartRunner.h:12:10: warning: double-quoted include "FlutterEngine.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterEngine.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterEngine.h>
FlutterHeadlessDartRunner.h:13:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>

Flutter.h:62:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>
Flutter.h:63:10: warning: double-quoted include "FlutterPlatformViews.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlatformViews.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlatformViews.h>
Flutter.h:64:10: warning: double-quoted include "FlutterPlugin.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlugin.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlugin.h>
Flutter.h:65:10: warning: double-quoted include "FlutterPluginAppLifeCycleDelegate.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPluginAppLifeCycleDelegate.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterPluginAppLifeCycleDelegate.h>

FlutterPluginAppLifeCycleDelegate.h:8:10: warning: double-quoted include "FlutterPlugin.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlugin.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlugin.h>

Flutter.h:66:10: warning: double-quoted include "FlutterTexture.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterTexture.h"
         ^~~~~~~~~~~~~~~~~~
         <Flutter/FlutterTexture.h>
Flutter.h:67:10: warning: double-quoted include "FlutterViewController.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterViewController.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterViewController.h>

FlutterViewController.h:11:10: warning: double-quoted include "FlutterBinaryMessenger.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterBinaryMessenger.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterBinaryMessenger.h>
FlutterViewController.h:12:10: warning: double-quoted include "FlutterDartProject.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterDartProject.h"
         ^~~~~~~~~~~~~~~~~~~~~~
         <Flutter/FlutterDartProject.h>
FlutterViewController.h:13:10: warning: double-quoted include "FlutterEngine.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterEngine.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterEngine.h>
FlutterViewController.h:14:10: warning: double-quoted include "FlutterMacros.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterMacros.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterMacros.h>
FlutterViewController.h:15:10: warning: double-quoted include "FlutterPlugin.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterPlugin.h"
         ^~~~~~~~~~~~~~~~~
         <Flutter/FlutterPlugin.h>
FlutterViewController.h:16:10: warning: double-quoted include "FlutterTexture.h" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]
#include "FlutterTexture.h"
         ^~~~~~~~~~~~~~~~~~
         <Flutter/FlutterTexture.h>

Activity

  1. added
    platform-iosiOS applications specifically
    engineflutter/engine related. See also e: labels.
    on Jun 22, 2020
  2. paulb777 commented on Jul 7, 2020

    @paulb777

    See CocoaPods/CocoaPods#9902 along with its fix targeted for CocoaPods 1.10

  3. jmagman commented on Jul 7, 2020

    @jmagman
    MemberAuthor
  4. self-assigned this
    on Sep 15, 2020
  5. cbracken commented on Sep 15, 2020

    @cbracken
    Member

    Partial fix in flutter-team-archive/engine#21193, which covers the #include -> #import migration but not the double-quote to angle-bracket bit.

  6. added a commit that references this issue on Sep 16, 2020
  7. removed their assignment
    on Sep 16, 2020
  8. xster commented on Sep 16, 2020

    @xster
    Member

    May or may not be possible: could we make these appear when building in GN as well? Or tweak IosUnitTests to error on warnings?

  9. jmagman commented on Sep 16, 2020

    @jmagman
    MemberAuthor

    @xster I merged flutter-team-archive/engine#21203 last night to make that easier.

    Adding -Wquoted-include-in-framework-header to copy_and_verify_framework_module makes the warning show when building the engine:

    shared_library("copy_and_verify_framework_module") {
      framework_search_path = rebase_path("$root_out_dir")
      visibility = [ ":*" ]
      cflags_objc = [
        "-F$framework_search_path",
        "-fmodules",
        "-Wnon-modular-include-in-framework-module",
        "-Wquoted-include-in-framework-header",
      ]
    

    My first attempt at fixing this is at flutter-team-archive/engine@master...jmagman:angle-imports (see comments on jmagman/engine@de122d1)

  10. xster commented on Sep 16, 2020

    @xster
    Member

    oh awesome, thanks!

  11. jmagman commented on Sep 16, 2020

    @jmagman
    MemberAuthor

    Would really just like combining Flutter/FlutterMacOS into one fat Flutter.framework/Flutter.xcframework so Catalyst would work out of the box...

  12. cbracken commented on Sep 16, 2020

    @cbracken
    Member

    Heads up that fixing this will likely require a manual engine roll due to this check:

    checkFileContains(
    <String>['#import "FlutterEngine.h"'],
    path.join(outputPath, mode, 'Flutter.framework', 'Headers', 'Flutter.h'),
    );
    }

    Mostly just so that when this gets fixed, we remember to do that. (I just set off that check with flutter-team-archive/engine#21193)

  13. jmagman commented on Sep 16, 2020

    @jmagman
    MemberAuthor

    @cbracken That import doesn't seem super useful, I'm going to change it to just confirm that header exists. Then no manual roll needed.

  14. jmagman commented on Sep 16, 2020

    @jmagman
    MemberAuthor
  15. 12 remaining items

  16. added
    P1High-priority issues at the top of the work list
    and removed
    P3Issues that are less important to the Flutter project
    on Dec 8, 2020
  17. jmagman commented on Jun 24, 2021

    @jmagman
    MemberAuthor

    This isn't getting fixed in the engine any time soon and I'm tired of seeing this warning. Filed #85177 to give in and and set CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER=NO in the apps.

  18. added
    P2Important issues not at the top of the work list
    and removed
    P1High-priority issues at the top of the work list
    on Apr 21, 2023
  19. removed their assignment
    on Apr 21, 2023
  20. added
    P3Issues that are less important to the Flutter project
    and removed
    P2Important issues not at the top of the work list
    on Feb 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Issues that are less important to the Flutter projecta: qualityA truly polished experienceengineflutter/engine related. See also e: labels.platform-iosiOS applications specificallyteam-iosOwned by iOS platform teamtriaged-iosTriaged by iOS platform team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions