iOS obfuscation for Flutter / Dart
A Flutter iOS archive is an Xcode project plus a Dart AOT snapshot and plugin native code. Two Flutter apps that share the same plugin set, asset catalog names, and Dart library layout can look similar under review even when the Dart UI differs. Crab added Flutter support in the v1.6 line and treats Dart as a first-class language alongside ObjC and Swift.
What gets obfuscated
Types, fields, and functions in C/C++/ObjC/Swift/Dart, plus source expansion and constant encryption where configured. Resource files in the iOS runner can be renamed and encrypted. Call-stack obfuscation applies to the compiled languages. Mixed projects (Flutter module inside a native app, or native plugins) do not need a separate rewrite of the language mix.
What you should exclude
Plugin channels, method names expected by the Flutter engine, and any native API you call through hardcoded strings should stay stable. Use file-level or language-level exclusion in the tool. The docs page 「排除混淆设置」 lists wildcards for class, property, and inheritance-based skips. More narrative is in Flutter / Dart notes.
Debug and trial
After obfuscation you can still debug in Xcode. Start from a Release-like archive that matches what you will upload. Request a trial with your Bundle Id and a note that the project is Flutter. Pair this page with 4.3 if you are shipping more than one similar client, and with the docs for the button-by-button flow.
Request a trial, then archive and submit
Download App Center, choose the General or Uni-app edition, then apply for a license on the registration-code page. The docs cover the operator steps.