You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成youtube_player_flutter时iOS编译失败问题求助

Flutter集成YouTube播放器iOS编译失败(flutter_inappwebview依赖报错)

问题说明

我在Flutter应用中集成YouTube播放器,使用youtube_player_flutter: ^8.0.0包,但iOS编译失败。由于设备是MacBook Mid 2012,无法安装最新版Xcode,当前Xcode版本为12.4,因此使用Flutter 2.5.3版本。编译错误来自依赖的flutter_inappwebview-5.5.0+2,核心问题是MyCookieManager.swift中domainUrl.host()调用失败(提示“无法调用非函数类型'String?'”),同时伴随多处API弃用警告。已修改Podfile设置IPHONEOS_DEPLOYMENT_TARGET为'9.0',但问题未解决。

编译报错详情

Xcode build done.                                           43.0s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **


Xcode's output:
↳
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppBrowser/InAppBrowserWebViewController.swift:562:13: warning: setter for 'statusBarStyle'
    was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]
                UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: previousStatusBarStyle)!
                ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppWebView/InAppWebView.swift:521:31: warning: 'mediaPlaybackRequiresUserAction' was
    deprecated in iOS 9.0
                    configuration.mediaPlaybackRequiresUserAction =
                    options.mediaPlaybackRequiresUserGesture
                                  ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppWebView/InAppWebView.swift:932:31: warning: 'mediaPlaybackRequiresUserAction' was
    deprecated in iOS 9.0
                    configuration.mediaPlaybackRequiresUserAction =
                    newOptions.mediaPlaybackRequiresUserGesture
                                  ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppWebView/InAppWebViewOptions.swift:103:81: warning: 'mediaPlaybackRequiresUserAction' was
    deprecated in iOS 9.0
                    realOptions["mediaPlaybackRequiresUserGesture"] =
                    configuration.mediaPlaybackRequiresUserAction
                                                                                    ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/MyCookieManager.swift:260:44: error: cannot call value of non-function type 'String?'
                            domain = domainUrl.host()
                                               ^   ~~

    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/MyCookieManager.swift:294:44: error: cannot call value of non-function type 'String?'
                            domain = domainUrl.host()
                                               ^   ~~

    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/Types/URLCredential.swift:14:25: warning: comparing non-optional value of type '[Any]' to
    'nil' always returns true
            if certificates != nil {
               ~~~~~~~~~~~~ ^  ~~~
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/Util.swift:216:21: warning: immutable value 'j' was never used; consider replacing with '_'
    or removing it
                    for j in ipv6.count...8 {
                        ^
                        _
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppBrowser/InAppBrowserWebViewController.swift:562:13: warning: setter for 'statusBarStyle'
    was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]
                UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: previousStatusBarStyle)!
                ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppWebView/InAppWebView.swift:521:31: warning: 'mediaPlaybackRequiresUserAction' was
    deprecated in iOS 9.0
                    configuration.mediaPlaybackRequiresUserAction =
                    options.mediaPlaybackRequiresUserGesture
                                  ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppWebView/InAppWebView.swift:932:31: warning: 'mediaPlaybackRequiresUserAction' was
    deprecated in iOS 9.0
                    configuration.mediaPlaybackRequiresUserAction =
                    newOptions.mediaPlaybackRequiresUserGesture
                                  ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/InAppWebView/InAppWebViewOptions.swift:103:81: warning: 'mediaPlaybackRequiresUserAction' was
    deprecated in iOS 9.0
                    realOptions["mediaPlaybackRequiresUserGesture"] =
                    configuration.mediaPlaybackRequiresUserAction
                                                                                    ^
    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/MyCookieManager.swift:260:44: error: cannot call value of non-function type 'String?'
                            domain = domainUrl.host()
                                               ^   ~~

    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/MyCookieManager.swift:294:44: error: cannot call value of non-function type 'String?'
                            domain = domainUrl.host()
                                               ^   ~~

    /Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/
    Classes/Types/URLCredential.swift:14:25: warning: comparing non-optional value of type '[Any]' to
    'nil' always returns true
            if certificates != nil {
               ~~~~~~~~~~~~ ^  ~~~
    Command CompileSwift failed with a nonzero exit code
    ...
Could not build the application for the simulator.
Error launching application on iPhone 12 Pro Max.

已尝试的Podfile配置

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
    end
  end
end

环境信息

[✓] Flutter (Channel stable, 2.5.3, on Mac OS X 10.15.7 19H15 darwin-x64, locale en-ET)
    • Flutter version 2.5.3 at /Users/mobix/Development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 18116933e7 (1 year ago), 2021-10-15 10:46:35 -0700
    • Engine revision d3ea636dc5
    • Dart version 2.14.4

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.11.3
...

解决方案

1. 直接修改flutter_inappwebview源码修复语法错误

报错核心是Swift版本兼容性:Xcode 12对应的Swift版本中,URL.host是属性而非方法,不需要加括号。操作步骤:

  • 找到本地pub缓存文件:/Users/mobix/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.5.0+2/ios/Classes/MyCookieManager.swift
  • 定位第260行和第294行,将domainUrl.host()修改为domainUrl.host
  • 执行以下命令重新构建:
flutter clean && flutter pub get && cd ios && pod install && cd .. && flutter run

2. 锁定兼容版本的flutter_inappwebview

如果不想修改源码,可在pubspec.yaml中指定与Xcode 12兼容的flutter_inappwebview版本,比如4.0.0+4(需确认与youtube_player_flutter: ^8.0.0兼容):

dependencies:
  youtube_player_flutter: ^8.0.0
  flutter_inappwebview: 4.0.0+4

然后执行:

flutter clean && flutter pub get && cd ios && pod update && cd ..

3. 消除API弃用警告(可选)

弃用警告不影响编译,若要消除,可在Podfile的post_install块中添加Swift版本指定:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
      config.build_settings['SWIFT_VERSION'] = '5.3' # Xcode 12.4支持的Swift版本
    end
  end
end

内容的提问来源于stack exchange,提问作者Mohammed Bekele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:50:25