"Flutter Meetup Tokyo #6"で使った資料です。 https://flutter-jp.connpass.com/event/105834/
FlutterΞϓϦͷಡԽͱΤϥʔϨϙʔτ(iOS)Hiroki MatsueDec 6th, 2018Flutter Meetup Tokyo #6
View Slide
Hiroki Matsue (@macs_6)
FlutterͰIIJmio͚ʹʮΈ͓εΠονʯΛϦϦʔε
[࣭] FlutterͰΞϓϦΛϦϦʔε͍ͯ͠Δਓʁ
[࣭] ϦϦʔεલʹಡԽͨ͠ਓʁ
ϦϦʔεؔ࿈ͷυΩϡϝϯτhttps://flutter.io/docs/deployment/ios
࠷ॳʹॻ͍͚ͯ͋ͬͨͲݟམͱͯͨ͠(AndroidͷProGuardରԠͯͯ͠ؾ͍ͮͨ)
ͪͳΈʹ
(ϦϦʔεؔ࿈Ͱઢ)ΞΠίϯ࡞"flutterlaunchericons"͏ͱ1ͭͷը૾͔Β͍͍ײ͡ʹ࡞ͬͯ͘ΕΔ
iOSDartίʔυ෦͕ಡԽͷର
Δ͜ͱbuild࣌ʹΦϓγϣϯΛ͚ͭΔ͚ͩ(Կނ͔ॳظঢ়ଶͰରԠ͞Εͯͳ͍ )https://github.com/flutter/flutter/wiki/Obfuscating-Dart-Code
/ios/Flutter/Release.xcconfigEXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate
# /packages/flutter_tools/bin/xcode_backend.shlocal extra_gen_snapshot_options_or_none=""if [[ -n "$EXTRA_GEN_SNAPSHOT_OPTIONS" ]]; thenextra_gen_snapshot_options_or_none="--extra-gen-snapshot-options=$EXTRA_GEN_SNAPSHOT_OPTIONS"fi...RunCommand "${FLUTTER_ROOT}/bin/flutter" --suppress-analytics \${verbose_flag} \build aot \--output-dir="${build_dir}/aot" \--target-platform=ios \--target="${target_path}" \--${build_mode} \--ios-arch="${archs}" \${local_engine_flag} \${track_widget_creation_flag} \${extra_gen_snapshot_options_or_none}
xcode_backend.sh ͱʁBuild PhaseͷRun ScriptͰΘΕ͍ͯΔεΫϦϓτXcode͔ΒDartίʔυ͕build͞ΕΔͷ͜Εͷ͓͔͛
(ઢ2)طଘΞϓϦʹFlutterΛಋೖ͢Δ࣌xcode_backend.sh embedAdd2AppϘʔυ্Ͱઈࢍ։ൃத
͜ΕͰϏϧυ͢ΕಡԽྃʂΧϯλϯʂ
ಡԽͷ֬ೝํ๏ʁ
App.frameworkΛ֬ೝ͢Δ$ strings build/ios/Release-iphoneos/Runner.app/Frameworks/App.framework/App...get:_vxa@7048458xget:_aLa@9040228xget:_DLa@7048458x...
ಡԽͷલޙͰൺֱbeforeget:_count@7048458get:_onData@9040228get:_isSubscribed@7048458afterget:_vxa@7048458xget:_aLa@9040228xget:_DLa@7048458x
Dartίʔυ͕ಡԽ͞Εͨ
...ϦϦʔεޙͷ͋Δ
SentryͷΤϥʔϨϙʔτಡԽ͞ΕͯΔ
ಡԽલͷΤϥʔϨϙʔτ
։ൃதؾ͔ͮͳ͔ͬͨ
ಡԽͷલޙͰൺֱbeforemain.dart in SampleApp.build at line 48afterSEd in bZ.opa at line 48
ࣗಡΊͳ͍
ϦϦʔεࡁΞϓϦͷΤϥʔݟ͍ͨ
mapϑΝΠϧΛग़ྗ͢Δઌ΄ͲͷυΩϡϝϯτʹ͋ͬͨઃఆEXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscatemapϑΝΠϧΛग़ྗ͢ΔઃఆΛՃEXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate,ɹ --save-obfuscation-map=ios_dart_symbols_${FLUTTER_BUILD_NUMBER}.json
ग़ྗ͞ΕͨmapϑΝΠϧ$ cat ios_dart_symbols_5.json..."_BuildJsonListener","_Gf","CustomSymbolRenderer","cs","devicePixelRatio","saa"...͜ΕΛࢀর͢ΕಡΊΔ!
աڈʹϦϦʔεͨ͠ΞϓϦͷmapϑΝΠϧʁࢼͨ͠ͱ͜Ζɺੜݩͷίʔυ͕ಉ͡Ͱ͋Εmapಉ͡ʹͳͬͨ
·ͱΊ
·ͱΊ• FlutterͩͱiOSͰDartίʔυͷಡԽ࡞ۀ͕͋Δ• stringsίϚϯυͰνΣοΫ͢Δͷָ͕• mapϑΝΠϧग़ྗ͓ͯ͘͠ͱSentryղಡʹ͑Δ# beforemain.dart in SampleApp.build at line 48# afterSEd in bZ.opa at line 48
Έ͓εΠονɺੋඇ͝ར༻͍ͩ͘͞
Thanks