混淆Flutter代码并为iOS生成地图文件

这个故事说明了如何在错误跟踪服务(例如Sentry)上读取混淆的Dart代码。

Flutter部署手册中有关于混淆Dart代码的内容。

准备发布iOS应用

本指南提供了将Flutter应用发布到[App Store] [appstore]的分步指南,并…

混淆Dart代码颤动/颤振Wiki

Flutter使构建精美的移动应用程序变得轻松快捷。 –颤振/颤振

github.com

只要遵循上述文件,就不需要对以下文件进行任何修改。

  • /packages/flutter_tools/bin/xcode_backend.sh
  • /ios/Flutter/Release.xcconfig

然后执行fluuter buil ios ,您将在构建的App.framework上看到混淆的结果。

  $ string build / ios / Release-iphoneos / Runner.app / Frameworks / App.framework / App 
...
得到:_vxa @ 7048458x
得到:_aLa @ 9040228x
得到:_DLa @ 7048458x
...

无需混淆, App.framework将像这样。

  $ string build / ios / Release-iphoneos / Runner.app / Frameworks / App.framework / App 
...
得到:_count @ 7048458
得到:_onData @ 9040228
得到:_isSubscribed @ 7048458
...

如您所见,我们代码中的名称已更改为无意义的字符串。

目前,Sentry是管理Flutter应用程序中错误的简便方法。

向服务报告错误

尽管我们始终竭尽全力来创建没有错误的应用程序,但是它们一定会不时出现。 由于越野车…

您可以使用此Dart代码片段导致测试崩溃。

 抛出新的ArgumentError('Test error'); 

从以上崩溃中,Sentry将报告这样的错误。

 第48行的SampleApp.build中的main.dart 

但是经过混淆后,错误报告将像这样。

  SEd in bZ.opa在第48行 

要阅读混淆的错误报告,请在/ios/Flutter/Release.xcconfig添加--save-obfuscation-map选项。

  EXTRA_GEN_SNAPSHOT_OPTIONS =-混淆,-save-obfuscation-map = build / ios_dart_symbols _ $ {FLUTTER_BUILD_NUMBER} .json 

生成的地图将有助于阅读混淆的错误报告。

  $ cat ios_dart_symbols_1.json 
...
“ _BuildJsonListener”,“ _ Gf”,
“ CustomSymbolRenderer”,“ cs”,
“ devicePixelRatio”,“ saa”,
...

在这个故事中,我刚刚提到了iOS。 我们也可以在Android构建步骤中生成模糊的地图文件。 只需添加--save-obfuscation-map选项即可。

我相信Firebase Crashlytics会在不久的将来支持Flutter。 在此之前,希望这个故事对Flutter开发人员有所帮助。