Flutter项目无法在iOS上运行。

14

我之前有一个运行良好的应用程序,但现在不再运行,我已经尝试解决了几个星期。现在已经将它调试到几乎可以运行,但却在最后一步遇到以下问题:

flutter run -v

看起来应用程序已成功构建并启动,屏幕短暂地变白,然后应用程序关闭。终端输出的最后几条记录为:

[ +293 ms] ------ Debug phase ------
[        ] Starting debug of 53225g34b4c604fe43a334525340e269626a (D111AP,
iPhone 7 Plus, iphoneos, arm64) a.k.a. 'iPhone' connected through USB...
[ +935 ms] [  0%] Looking up developer disk image
[  +27 ms] [ 95%] Developer disk image mounted successfully
[ +367 ms] [100%] Connecting to remote debug server
[        ] -------------------------
[+1080 ms] (lldb) command source -s 0
'/tmp/1D186BA70/fruitstrap-lldb-prep-cmds-4c604fe43a334525340e269626a'
[        ] Executing commands in
'/tmp/1D186BA70/fruitstrap-lldb-prep-cmds-4c604fe43a334525340e269626a'
[        ] (lldb)     platform select remote-ios --sysroot
'/Users/sjr/Library/Developer/Xcode/iOS DeviceSupport/13.3.1 (17D50)/Symbols'
[        ]   Platform: remote-ios
[        ]  Connected: no
[        ]   SDK Path: "/Users/sjr/Library/Developer/Xcode/iOS
DeviceSupport/13.3.1 (17D50)/Symbols"
[        ] (lldb)     target create
"/Users/sjr/Projects/my_app/build/ios/iphoneos/Runner.app"
[+10050 ms] Current executable set to
'/Users/sjr/Projects/my_app/build/ios/iphoneos/Runner.app' (arm64).
[        ] (lldb)     script
fruitstrap_device_app="/private/var/containers/Bundle/Application/62B3E66E1/Runner.app"
[ +443 ms] (lldb)     script fruitstrap_connect_url="connect://127.0.0.1:49422"
[        ] (lldb)     script fruitstrap_output_path=""
[        ] (lldb)     script fruitstrap_error_path=""
[        ] (lldb)     target modules search-paths add /usr
"/Users/sjr/Library/Developer/Xcode/iOS DeviceSupport/13.3.1
(17D50)/Symbols/usr" /System "/Users/sjr/Library/Developer/Xcode/iOS
DeviceSupport/13.3.1 (17D50)/Symbols/System"
"/private/var/containers/Bundle/Application/62B3E66E1
" "/Users/sjr/Projects/my_app/build/ios/iphoneos"
"/var/containers/Bundle/Application/62B3E66E1"
"/Users/sjr/Projects/my_app/build/ios/iphoneos" /Developer
"/Users/sjr/Library/Developer/Xcode/iOS DeviceSupport/13.3.1
(17D50)/Symbols/Developer"
[  +35 ms] (lldb)     command script import
"/tmp/1D186BA70/fruitstrap_4c604fe43a334525340e269626a.py"
[   +4 ms] (lldb)     command script add -f
fruitstrap_4c604fe43a334525340e269626a.connect_command connect
[        ] (lldb)     command script add -s asynchronous -f
fruitstrap_4c604fe43a334525340e269626a.run_command run
[        ] (lldb)     command script add -s asynchronous -f
fruitstrap_4c604fe43a334525340e269626a.autoexit_command autoexit
[        ] (lldb)     command script add -s asynchronous -f
fruitstrap_4c604fe43a334525340e269626a.safequit_command safequit
[        ] (lldb)     connect
[  +52 ms] (lldb)     run
[ +277 ms] success
[        ] (lldb)     safequit
[ +120 ms] Process 434 detached
[  +48 ms] Application launched on the device. Waiting for observatory port.
[   +4 ms] Checking for advertised Dart observatories...
[+5026 ms] mDNS lookup failed, attempting fallback to reading device log.
[        ] Waiting for observatory port.

而在Xcode中,这个问题看起来有些不同(虽然很可能是完全相同的问题)。似乎可能是内存泄漏?我不确定如何阅读这些信息。出现了一个错误,像这样:

io.flutter.204.ui (625): signal SIGABRT

然后在下面的日志中,我有:

Runner(439,0x1009c5800) malloc: enabling scribbling to detect mods to free blocks

Runner(439,0x1009c5800) malloc: recording malloc and VM allocation stacks using lite mode

2020-03-31 07:54:22.330547+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

2020-03-31 07:54:22.475589+0800 Runner[439:345566] Metal API Validation Enabled

2020-03-31 07:54:22.864937+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

2020-03-31 07:54:22.932713+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

2020-03-31 07:54:22.976036+0800 Runner[439:345823] flutter: Observatory listening on http://127.0.0.1:51027/Wl9caPukKFs=/

2020-03-31 07:54:22.993612+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

2020-03-31 07:54:23.030173+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

还有数百个完全相同的部分:

2020-03-31 07:54:23.030173+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

然后它继续:

../../third_party/dart/runtime/vm/clustered_snapshot.cc: 68: error: Out of memory.

2020-03-31 07:54:35.497087+0800 Runner[439:346457] version=2.5.0 (Fri Sep 6 20:10:36 2019 +0200) on "ios_arm64"

thread=1245963, isolate=main(0x2cb9de000)

2020-03-31 07:54:35.510204+0800 Runner[439:346457]   pc 0x00000001013019ac fp 0x00000002d76837e0 Dart_DumpNativeStackTrace

2020-03-31 07:54:35.510996+0800 Runner[439:346457]   pc 0x0000000100e94518 fp 0x00000002d7683800 dart::Assert::Fail(char const*, ...)

2020-03-31 07:54:35.511862+0800 Runner[439:346457]   pc 0x0000000100f2969c fp 0x00000002d7683860 dart::FunctionDeserializationCluster::ReadFill(dart::Deserializer*)

2020-03-31 07:54:35.512319+0800 Runner[439:346457]   pc 0x0000000100f2e4ec fp 0x00000002d76839b0 dart::FullSnapshotReader::ReadIsolateSnapshot()

2020-03-31 07:54:35.512738+0800 Runner[439:346457]   pc 0x0000000100f34d88 fp 0x00000002d7683f70 dart::Dart::InitializeIsolate(unsigned char const*, unsigned char const*, unsigned char const*, unsigned char const*, unsigned char const*, long, void*)

2020-03-31 07:54:35.513417+0800 Runner[439:346457]   pc 0x00000001012e8220 fp 0x00000002d7684010 dart::CreateIsolate(dart::IsolateGroup*, char const*, void*, char**)

2020-03-31 07:54:35.514492+0800 Runner[439:346457]   pc 0x0000000100b0ccd4 fp 0x00000002d7684270 flutter::DartIsolate::CreateDartVMAndEmbedderObjectPair(char const*, char const*, char const*, char const*, Dart_IsolateFlags*, std::__1::shared_ptr<flutter::DartIsolate>*, bool, char**)

2020-03-31 07:54:35.515065+0800 Runner[439:346457]   pc 0x0000000100b0c4fc fp 0x00000002d7684450 flutter::DartIsolate::CreateRootIsolate(flutter::Settings const&, fml::RefPtr<flutter::DartSnapshot const>, fml::RefPtr<flutter::DartSnapshot const>, flutter::TaskRunners, std::__1::unique_ptr<flutter::Window, std::__1::default_delete<flutter::Window> >, fml::WeakPtr<flutter::IOManager>, fml::WeakPtr<flutter::ImageDecoder>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Dart_IsolateFlags*, std::__1::function<void ()>, std::__1::function<void ()>)

2020-03-31 07:54:35.515707+0800 Runner[439:346457]   pc 0x0000000100b15000 fp 0x00000002d7684720 flutter::RuntimeController::RuntimeController(flutter::RuntimeDelegate&, flutter::DartVM*, fml::RefPtr<flutter::DartSnapshot const>, fml::RefPtr<flutter::DartSnapshot const>, flutter::TaskRunners, fml::WeakPtr<flutter::IOManager>, fml::WeakPtr<flutter::ImageDecoder>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::function<void (long long)>, flutter::RuntimeController::WindowData, std::__1::function<void ()>, std::__1::function<void ()>)

2020-03-31 07:54:35.516437+0800 Runner[439:346457]   pc 0x0000000100b1b858 fp 0x00000002d7684b50 flutter::Engine::Engine(flutter::Engine::Delegate&, flutter::DartVM&, fml::RefPtr<flutter::DartSnapshot const>, fml::RefPtr<flutter::DartSnapshot const>, flutter::TaskRunners, flutter::Settings, std::__1::unique_ptr<flutter::Animator, std::__1::default_delete<flutter::Animator> >, fml::WeakPtr<flutter::IOManager>)

2020-03-31 07:54:35.517172+0800 Runner[439:346457]   pc 0x0000000100b2c1d0 fp 0x00000002d7684fe0 std::__1::__function::__func<fml::internal::CopyableLambda<flutter::Shell::CreateShellOnPlatformThread(flutter::DartVMRef, flutter::TaskRunners, flutter::Settings, fml::RefPtr<flutter::DartSnapshot const>, fml::RefPtr<flutter::DartSnapshot const>, std::__1::function<std::__1::unique_ptr<flutter::PlatformView, std::__1::default_delete<flutter::PlatformView> > (flutter::Shell&)>, std::__1::function<std::__1::unique_ptr<flutter::Rasterizer, std::__1::default_delete<flutter::Rasterizer> > (flutter::Shell&)>)::$_0>, std::__1::allocator<fml::internal::CopyableLambda<flutter::Shell::CreateShellOnPlatformThread(flutter::DartVMRef, flutter::TaskRunners, flutter::Settings, fml::RefPtr<flutter::DartSnapshot const>, fml::RefPtr<flutter::DartSnapshot const>, std::__1::function<std::__1::unique_ptr<flutter::PlatformView, std::__1::default_delete<flutter::PlatformView> > (flutter::Shell&)>, std::__1::function<std::__1::unique_ptr<flutter::Rasterizer, std::__1::default_delete<flutter::Rasterizer> > (flutter::Shell&)>)::$_0> >, void ()>::operator()()

2020-03-31 07:54:35.518362+0800 Runner[439:346457]   pc 0x0000000100add9e8 fp 0x00000002d7685030 fml::MessageLoopImpl::FlushTasks(fml::FlushType)

2020-03-31 07:54:35.518837+0800 Runner[439:346457]   pc 0x0000000100ae209c fp 0x00000002d7685050 fml::MessageLoopDarwin::OnTimerFire(__CFRunLoopTimer*, fml::MessageLoopDarwin*)

2020-03-31 07:54:35.519148+0800 Runner[439:346457]   pc 0x000000019eb6503c fp 0x00000002d7685060 <redacted>

2020-03-31 07:54:35.519351+0800 Runner[439:346457]   pc 0x000000019eb64d78 fp 0x00000002d7686110 <redacted>

2020-03-31 07:54:35.519583+0800 Runner[439:346457]   pc 0x000000019eb64448 fp 0x00000002d76861a0 <redacted>

那么在我这个外行人看来,它似乎是在尝试做这件事:

2020-03-31 07:54:23.030173+0800 Runner[439:345566] Failed to find snapshot: /private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

尝试执行数千次,直到内存耗尽,但我不确定这是什么,也不知道从何开始解决。

编辑:Flutter Doctor 输出。

flutter doctor -v

[✓] Flutter (Channel stable, v1.9.1+hotfix.6, on Mac OS X 10.15.4 19E264b,

    locale en-AU)

    • Flutter version 1.9.1+hotfix.6 at /Users/sjr/flutter

    • Framework revision 68587a0916 (7 months ago), 2019-09-13 19:46:58 -0700

    • Engine revision b863200c37

    • Dart version 2.5.0



[✗] Android toolchain - develop for Android devices

    ✗ Unable to locate Android SDK.

      Install Android Studio from:

      https://developer.android.com/studio/index.html

      On first launch it will assist you in installing the Android SDK

      components.

      (or visit https://flutter.dev/setup/#android-setup for detailed

      instructions).

      If the Android SDK has been installed to a custom location, set

      ANDROID_HOME to that location.

      You may also want to add it to your PATH environment variable.







[✓] Xcode - develop for iOS and macOS (Xcode 11.4)

    • Xcode at /Applications/Xcode.app/Contents/Developer

    • Xcode 11.4, Build version 11E146

    • CocoaPods version 1.7.5



[!] Android Studio (not installed)

    • Android Studio not found; download from

      https://developer.android.com/studio/index.html

      (or visit https://flutter.dev/setup/#android-setup for detailed

      instructions).



[!] Connected device

    ! No devices available



! Doctor found issues in 3 categories.

编辑:

根据 @Hannes Sverrisson 提出的建议导致的错误代码:

Running pod install...                                              4.7s
Running Xcode build...                                                                                                 

Xcode build done.                                           16.8s
Failed to build iOS app

Error output from Xcode build:
    ** BUILD FAILED **

Xcode's output:

 === BUILD TARGET PromisesObjC OF PROJECT Pods WITH CONFIGURATION Release ===

    In file included from

    /Users/sjr/Projects/my_app/ios/Pods/GoogleDataTransport/GoogleDataTran

    sport/GDTCORLibrary/GDTCORLifecycle.m:22:

    In file included from

    /Users/sjr/Projects/my_app/ios/Pods/GoogleDataTransport/GoogleDataTran

    sport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h:17:

    In file included from

    /Users/sjr/Projects/my_app/build/ios/Release-iphoneos/GoogleDataTransp

    ort/GoogleDataTransport.framework/Headers/GDTCORRegistrar.h:19:

    In file included from

    /Users/sjr/Projects/my_app/build/ios/Release-iphoneos/GoogleDataTransp

    ort/GoogleDataTransport.framework/Headers/GDTCORPrioritizer.h:19:

    /Users/sjr/Projects/my_app/build/ios/Release-iphoneos/GoogleDataTransp

    ort/GoogleDataTransport.framework/Headers/GDTCORLifecycle.h:26:11: error:

    duplicate protocol definition of 'GDTCORLifecycleProtocol' is ignored

    [-Werror,-Wduplicate-protocol]

    @protocol GDTCORLifecycleProtocol <NSObject>

然后会出现成千上万个类似“在文件中”的错误,直到失败。

编辑:在git push之后,重新创建和拉取:在构建过程中Xcode显示错误。

在此输入图像描述


1
好的,你能发布一下flutter doctor的输出吗? - Edin
1
你的应用程序集成 Firebase 后出现了这种情况吗?如果是的话,那么你是否正确地按照 pub 页面上提到的步骤进行了操作? - RoyalGriffin
1
如果您进入项目文件夹并运行“flutter build ios”,安装是否有效? - Edin
1
你有开发者账户吗?如果是 iOS 13.3.1,那么您需要一个开发者账户才能在真机上运行它。https://github.com/flutter/flutter/issues/49693。您尝试在模拟器上运行吗? - Zeynal
2
这是你下一个问题的重复:Flutter项目在iOS上无法运行(尝试2) - halfer
显示剩余6条评论
4个回答

13

执行步骤

  1. 更新 Xcode 和 macOS。

  2. 打开 Xcode 并下载/安装模拟器。

  3. 在 Flutter 应用目录中,在 Xcode 中打开 ios/Runner.xcworkspace,并在“Signing & Capabilities”下选择一个开发团队。

  4. 按照这些说明进行操作: https://flutter.dev/docs/development/ios-project-migration

  5. 然后在您的项目文件夹中的终端中运行:

    flutter clean && flutter build ios && flutter run

仅当仍无法正常工作时才继续以下步骤!

6a) 如果以上方法不起作用,并且您正在使用git或另一个源代码控制工具,则我提交了所有更改并将其推送。 然后,我删除了文件夹,重新获取 git 内容,一切都正常工作。

6b) 另一种解决方案是删除所有 pods:

Delete the Pods folder and the `Podfile.lock` file.

然后在终端中从您的项目文件夹中使用以下命令重建pods和项目:

cd ios && pod deintegrate && cd ..
flutter clean && flutter build ios

@Bisclavret,这个新的错误信息与以往不同,因此我已经根据你添加的新错误信息为你添加了步骤6b。如果步骤6a不可行(你没有说明是否重新进行了git clone),那么这应该有助于你的构建。 - Sverrisson
谢谢Hannes。尝试了您的第6b步骤后,flutter build ios现在已经成功完成(或者至少它声称如此)。再次尝试flutter run -v后,我又回到了这个问题的起点:[+5026毫秒] mDNS查找失败,尝试回退到读取设备日志。等待观察端口。所以虽然它可能做了一些事情,但不幸的是它对原始问题没有任何影响。非常感谢您的时间。我很乐意听取任何进一步的建议。 - Bisclavret
我注意到的一件事,不确定是否有帮助,就是我的iOS/Frameworks文件夹完全为空。 在Xcode调试中,它一遍又一遍地寻找这里的文件,直到崩溃。 这个文件夹里应该有文件吗?如果是这样,为什么我没有呢?再次感谢。 - Bisclavret
@Bisclavret,至少应该有Runner.pods,但如果您可以构建,则会出现ios/Frameworks文件夹。删除Pods文件夹和Podfile.lock文件。之后再次运行:“flutter build ios”。如果这不起作用,请将代码推送到git并执行解决方案6a。 - Sverrisson
如果我创建一个全新的构建并尝试再次拉取我的存储库,我是否仍然需要经历痛苦的过程来设置所有的Xcode配置设置?所有这些构建设置等等...我花费的时间比编写整个应用程序还要多。或者它也会拉取所有这些信息吗? - Bisclavret
显示剩余10条评论

5

我曾遇到过类似的问题。我下载了一个Flutter示例,在简短的白屏后不断崩溃,没有任何可理解的错误信息。最终我发现,一些代码或包依赖于比稳定版本更新的Flutter版本。

在终端输入:

flutter channel

查看您当前的频道,然后可以尝试主或测试频道:

flutter channel master
flutter upgrade

看看这个能否帮到您!

还可以检查一下这个建议的解决方案:https://github.com/flutter/flutter/issues/29286

You need to run

flutter build ios --debug (or --profile or --release) 
flutter run --release

before you launch the project in Xcode.


@bisclavret 我更新了答案,并提供了一个建议的解决方案链接。看看它是否能解决你的问题。 - aldobaie
嗨aldobaie,感谢你抽出时间发表建议,但更新flutter绝对不行。在排除了每一个可能的修复方法后会是绝对的最后手段。原因是flutter开发糟糕,至今每一次我更新flutter都会导致我的应用程序奔溃,通常需要数周或数月的全职工作才能修复。你可以在此处查看我的帖子:https://github.com/flutter/flutter/issues/54088 一个Flutter开发人员建议我这样做,我克隆了我的系统给他一个交代。灾难性的结果已经发布在那里了。 - Bisclavret
这个解决方案对我有效。 - Onur Kağan Aldemir

1
现在似乎没有足够的信息来解决您的问题,但从 flutter doctor 来看,可能是因为您使用了7个月前的flutter SDK版本,并且正在使用新版本的 xcode 来构建项目。看起来有类似于您遇到的与该SDK版本相关的问题。参考 首先,请尝试使用 flutter upgrade 更新 flutter sdk。
请在更新后更新 flutter doctor 和您最新的调试运行输出,以便我们可以尽力帮助您。
此外,您能否尝试在模拟的iOS设备上运行它以及在外部设备上运行它,以查看可能是由于xcode项目的配置方式而导致的问题?

嗨Jwildsmith,谢谢你的回复,但我想让你参考一下我的评论,你绝不能允许任何关于Flutter的更新。后端开发太不稳定,而且很差。升级的结果已经发布在这个线程里:https://github.com/flutter/flutter/issues/54088 - Bisclavret
关于信息方面,有没有工具可以用来找到这个内存泄漏的来源?就像某些地方一定会试图做这件事:未能找到快照:/private/var/containers/Bundle/Application/E00E6D3690/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin ... 有什么东西可以让我知道是谁在试图做这件事吗?这个平台的开发人员肯定知道是谁在做这件事。否则他们在做什么? - Bisclavret

0

我之前也遇到过这个错误,但是在安装了最新版本的Android Studio之后,这个问题就解决了。我认为这是由系统而非手动操作引起的。你也应该尝试一下。


嗨,伙计。这是为iOS开发的。使用Xcode进行开发。在我的运行Android Studio的Windows机器上,该应用程序没有任何问题。该应用已经在安卓商店发布了一年了。 - Bisclavret
你知道什么是Android Studio吗?它是一个类似于VSCode的编码平台。对于Flutter应用程序,我们中的许多人更喜欢使用Android Studio,并且您可以从Android Studio在iOS上运行该应用程序。 - Globe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接