Upgrade to Pro — share decks privately, control downloads, hide ads and more …

10年以上の歴史を持つプロダクトのRosettaフリー / zozotown-rosetta-free

10年以上の歴史を持つプロダクトのRosettaフリー / zozotown-rosetta-free

Satoshi Komatsu

July 11, 2023
Tweet

More Decks by Satoshi Komatsu

Other Decks in Technology

Transcript

  1. © ZOZO, Inc. 2 ͱ͠ !UPTI@ ೥;0;0ςΫϊϩʔδʔζ ݱ;0;0 ʹ৽ଔೖࣾɻ ৽ଔೖࣾҎདྷɺ;0;0508/ͷJ04ΞϓϦ։ൃʹؔΘΔɻ

    झຯɿόεέοτϘʔϧ 
 िʹճҎ্όεέΛ͢Δͱක͕௧͘ͳΔ͜ͱ͕࠷ۙͷ೰Έɻ Ұݴɿ5XJUUFS͔Β཭Ε͍ͯΔΤϯδχΞͷօ͞Μͷߦํ͕ؾʹͳ͍ͬͯ·͢ɻ ๻͸࠷ۙ5ISFBET͸͡Ί·ͨ͠ɻ
  2. © ZOZO, Inc. 9 w ͍͔ͭඞͣ΍Βͳ͍ͱ͍͚ͳ͍λεΫ w 9DPEFͷ3PTFUUBରԠ͍ͬͯͭ·Ͱʁ w 4JNVMBUPS͸3PTFUUBαϙʔτऴྃɻ

    w 4JNVMBUPS 3PTFUUBͳ͠ ͱ9DPEF 3PTFUUB͋Γ ͷ૬ੑ͕ѱ͔ͬͨɻ w ׳ੑεΫϩʔϧ͕ޮ͔ͳ͘ͳΔ໰୊ ͳͥɺ3PTFUUBϑϦʔ͕ඞཁͳͷ͔ɻ ˠ࠷৽ͷ9DPEFͰ։ൃͰ͖ͳ͍ɻɻɻ
  3. © ZOZO, Inc. 11 ݱঢ়೺Ѳ (PBM·Ͱͷ50%0Λ֬ೝ͢Δɻ Կ͕ୡ੒͞ΕΕ͹ɺ3PTFUUBϑϦʔͰ͖Δͷ͔ɻ ༷ʑͳՄೳੑʹ͍ͭͯݕ౼ Xcode 14.2対応の際にRosettaフリー化を目指しましたが、リリーススケジュールに間に合わず諦めました。その際に調査した内容を一旦まとめま

    す。またそこから今後やるべきこともまとめたいです。 現時点でやってみたこと(途中・成功してなくても可) きた Rosetta前提のCarthageのXCFramework化は完了 https://github.com/ Rosetta前提 = arm64-simulatorなし carthage-fixのxconfigはそのままで、--use-xcframeworksをつかう手法 下記でopencvのXCFramework化もできた https://medium.com/strava-engineering/convert-a-universal-fat-framework-to-an-xcframework-39e33b7bd861 carthageコマンドに上記のXCFramework化をフックさせる方法が不明 Rosettaフリーに向けたstatic libraryのXCFramework化はこれでできるかも?(再ビルド不要なやり方もありそう) これはまだ成功してない https://anuragajwani.medium.com/how-to-build-universal-ios-static-libraries-using-xcframework-a3f70f998c38 ばんじゅんさん Carthageを消して(つまりZOZOMATも消して)、Rosettaフリー化できるか試して、(おそらく)成功した Rosettaフリー化 = ios-arm64 と ios-arm64-simulator の両方を達成する ZOZOGLASSなどCocoaPodsのもの、 については、Rosettaフリー用の特別なビルドをする ことはなく、xcframeworkに置き換えていくことでできる。ただしちょっと裏技っぽい ↑ bogoの手法による(mach-oの書き換え) https://bogo.wtf/arm64-to-sim.html ZOZOGLASSのopencvもこれでやった x86_64は実験手順短縮のために、入れていない。けど入れられるんじゃないかな?予想 手でつくれるだけで、手順化はしてない Carthageのときのフックみたいなシナリオは、つくらないといけない。つくってない 最悪は、post installで、最終形へのdiffをpatchにしたやつをapplyでも、ギリギリ許容? Carthage側で同様の手法は、別種の課題があることまでが分かっている Lottieですでにつまずく dynamic frameworkだから? swiftmoduleだから? みたいな。よくわかってない。 としさん CarthageでZOZOMATのXCFramework化 OpenCVはXCFrameworkにする必要がある この時はそれぞれビルドしてまとめる方法で実現した Arm64-simulatorとArm64-iPhone持っている https://www.cathand.app/entry/2020/11/23/214000 ここのbuild.shが改修の必要がありそうだなーと直感的にみています。 https://github.com/ 現状の分岐だとArm64-iPhoneとArm64-simulatorの違いを見分けるのが難しい → (ばんじゅん) bogoの手法でごまかしてもいいんじゃない? ZOZOMATのCocoaPods移行 計測チームよきさんによる解析 https://github.com 自分が挑戦した際のログ https://github.com 当時はx86_64のsimulatorに対してやっていた(かも) これに関しては致命的ではないのだが、CocoaPods移行に際して、ライブラリの参照の衝突があるので、grpcのアップデートは必 要になる StaticFrameworksについては GoogleMapsは一応公式でもXCFrameworkは提供されている(beta表記ではあるが) ただし手動で入れる必要あり CocoaPodsやCarthageでは現状無理 BuildSettingsのExcluded ArchitectureにArm64を追加する(XcodeはRosettaを外すことができる) 実際の動きとしては、x86_64向けのバイナリが作成されているので、Simulatorの慣性は効かない 細かいメモ
  4. © ZOZO, Inc. 13 ΍Βͳ͍͜ͱΛܾΊΔ ;0;0."5ͷ$PDPB1PETԽʹࡍ͠ɺ΍Βͳ͍ͱܾΊͨ͜ͱ w ػೳ΍ґଘͷେ͖ͳมߋ͸ߦΘͳ͍ w ґଘ͍͍ͯͯ͠ΔϥΠϒϥϦͷߋ৽ͳͲ

    w 41.Խ͸ɺ΍Βͳ͍ w ϓϩδΣΫτ͕ͦ΋ͦ΋$PDPB1PETʹد͍ͤͯΔ w Ұ౓ʹ΍Βͳͯ͘΋͍͍ w νʔϜ಺Ͱ͞΄Ͳ஌ݟ͕͋ΔΘ͚Ͱ΋ͳ͍
  5. © ZOZO, Inc. 15 w 4UBUJD'SBNFXPSL͕ଟ͗͢Δ w ;0;0."5͕$BSUIBHF͔͠ରԠͯ͠ͳ͍͚Ͳɺґଘؔ܎ͷղফ͕೉͍͠ w 9$'SBNFXPSLͱ'SBNFXPSLͰͷϏϧυ࣌ͷ֬ೝͷҧ͍

    w 0QFO$7ͷόʔδϣϯݹ͗ͯ͢ɺ9$'SBNFXPSLະରԠ w ։ൃҊ݅΋΍ΔதͰͲ͏΍ͬͯɺ͜ͷରԠͷ࣌ؒΛऔΖ͏ w ιʔείʔυͳ͍4UBUJD'SBNFXPSLΛͲ͏΍ͬͯ9$'SBNFXPSLʹ͠Α͏ w $PDPB1PETͱ$BSUIBHFͷซ༻ ՝୊
  6. © ZOZO, Inc. 16 w 4UBUJD'SBNFXPSL͕ଟ͗͢Δ w ;0;0."5͕$BSUIBHF͔͠ରԠͯ͠ͳ͍͚Ͳɺґଘؔ܎ͷղফ͕೉͍͠ w 9$'SBNFXPSLͱ'SBNFXPSLͰͷϏϧυ࣌ͷ֬ೝͷҧ͍

    w 0QFO$7ͷόʔδϣϯݹ͗ͯ͢ɺ9$'SBNFXPSLະରԠ w ։ൃҊ݅΋΍ΔதͰͲ͏΍ͬͯɺ͜ͷରԠͷ࣌ؒΛऔΖ͏ w ιʔείʔυͳ͍4UBUJD'SBNFXPSLΛͲ͏΍ͬͯ9$'SBNFXPSLʹ͠Α͏ w $PDPB1PETͱ$BSUIBHFͷซ༻ ՝୊
  7. © ZOZO, Inc. 17 w 4UBUJD'SBNFXPSL͕ଟ͗͢Δ w ;0;0."5͕$BSUIBHF͔͠ରԠͯ͠ͳ͍͚Ͳɺґଘؔ܎ͷղফ͕೉͍͠ w 9$'SBNFXPSLͱ'SBNFXPSLͰͷϏϧυ࣌ͷ֬ೝͷҧ͍

    w 0QFO$7ͷόʔδϣϯݹ͗ͯ͢ɺ9$'SBNFXPSLະରԠ w ։ൃҊ݅΋΍ΔதͰͲ͏΍ͬͯɺ͜ͷରԠͷ࣌ؒΛऔΖ͏ w ιʔείʔυͳ͍4UBUJD'SBNFXPSLΛͲ͏΍ͬͯ9$'SBNFXPSLʹ͠Α͏ w $PDPB1PETͱ$BSUIBHFͷซ༻ w 4UBUJD'SBNFXPSL͕ଟ͗͢Δ w ;0;0."5͕$BSUIBHF͔͠ରԠͯ͠ͳ͍͚Ͳɺґଘؔ܎ͷղফ͕೉͍͠ w 9$'SBNFXPSLͱ'SBNFXPSLͰͷϏϧυ࣌ͷ֬ೝͷҧ͍ w 0QFO$7ͷόʔδϣϯݹ͗ͯ͢ɺ9$'SBNFXPSLະରԠ w ։ൃҊ݅΋΍ΔதͰͲ͏΍ͬͯɺ͜ͷରԠͷ࣌ؒΛऔΖ͏ w ιʔείʔυͳ͍4UBUJD'SBNFXPSLΛͲ͏΍ͬͯ9$'SBNFXPSLʹ͠Α͏ w $PDPB1PETͱ$BSUIBHFͷซ༻ ՝୊
  8. © ZOZO, Inc. 19 ;0;0."5 $BSUIBHFͩͱɺશͯͷϏϧυͷґଘΛղফ͢Δඞཁ͕͋Δɻ ྫ͑͹ɺ$PSFΞϧΰϦζϜɻ J04 "OESPJE ଞͷΫϩεϓϥοτϑΥʔϜͷϏϧυΛ.BLF

    fi MFͰ΍͍ͬͯΔɻ 
 6OJWFSTBM#JOBSZ͘Β͍ͳΒ·ͩ͠΋ɺJ04ͷதͰ͞Βʹ෼ذͯ͠9$'SBNFXPSLΛ࡞੒͢Δ࢓૊Έ· ͰೖΕΔͷ͸Өڹൣғ͕େ͖͗͢Δɻ Core ZOZOMAT C++ Swift ZOZOMAT.xcframework carthage build ❌ opencv.framework
  9. w 4UBUJD'SBNFXPSL͕ଟ͗͢Δ w ;0;0."5͕$BSUIBHF͔͠ରԠͯ͠ͳ͍͚Ͳɺґଘؔ܎ͷղফ͕೉͍͠ w 9$'SBNFXPSLͱ'SBNFXPSLͰͷϏϧυ࣌ͷ֬ೝͷҧ͍ w 0QFO$7ͷόʔδϣϯݹ͗ͯ͢ɺ9$'SBNFXPSLະରԠ w ։ൃҊ݅΋΍ΔதͰͲ͏΍ͬͯɺ͜ͷରԠͷ࣌ؒΛऔΖ͏

    w ιʔείʔυͳ͍4UBUJD'SBNFXPSLΛͲ͏΍ͬͯ9$'SBNFXPSLʹ͠Α͏ w $PDPB1PETͱ$BSUIBHFͷซ༻ w 4UBUJD'SBNFXPSL͕ଟ͗͢Δ w ;0;0."5͕$BSUIBHF͔͠ରԠͯ͠ͳ͍͚Ͳɺґଘؔ܎ͷղফ͕೉͍͠ w 9$'SBNFXPSLͱ'SBNFXPSLͰͷϏϧυ࣌ͷ֬ೝͷҧ͍ w 0QFO$7ͷόʔδϣϯݹ͗ͯ͢ɺ9$'SBNFXPSLະରԠ w ։ൃҊ݅΋΍ΔதͰͲ͏΍ͬͯɺ͜ͷରԠͷ࣌ؒΛऔΖ͏ w ιʔείʔυͳ͍4UBUJD'SBNFXPSLΛͲ͏΍ͬͯ9$'SBNFXPSLʹ͠Α͏ w $PDPB1PETͱ$BSUIBHFͷซ༻ ՝୊
  10. 9$'SBNFXPSL͕ཉ͍͠ʂ B͔Β طʹ͋Δ΋ͷ ཉ͍͠΋ͷ libA.a Y@TJN BSNJPT A.xcframework ┗ ios-arm64

    ɹ┗ libA.a ┗ ios-arm64_x86_64-simulator ɹ┗ libA.a BSNJPT Y@TJN BSNTJN ? lipo
  11. 9$'SBNFXPSL͕ཉ͍͠ʂ GSBNFXPSL͔Β طʹ͋Δ΋ͷ ཉ͍͠΋ͷ B.xcframework ┗ ios-arm64 ɹ┗ B.framework/B ┗

    ios-arm64_x86_64-simulator ɹ┗ B.framework/B BSNJPT Y@TJN BSNTJN ? B.framework Y@TJN BSNJPT ┗ B lipo
  12. BSNJPTͱBSNTJNͷҧ͍ͱɺͦͷม׵ طʹ͋Δ΋ͷ ཉ͍͠΋ͷ BSNTJN BSNJPT bogo/arm64-to-sim ˢΛ΋ͱʹ֬ೝ͢Δͱɺࠩ෼͸େ͖͘͸ͳ͘ɺ୯ʹ͜͏͍͏͜ͱ 
 
 όΠφϦʹ

    
 -$@#6*-%@7&34*0/͕͍ͭͯΔˠγϛϡϨʔλʔ༻ -$@7&34*0/@.*/@*1)0/&04͕͍ͭͯΔˠσόΠε༻ 
 Ͳͬͪ΋͍ͭͯͳ͍ˠσόΠε༻ IUUQTCPHPXUGBSNUPTJNIUNM -$@7&34*0/@.*/@*1)0/&04 -$@#6*-%@7&34*0/
  13. ࠶Ϗϧυͳ͠9$'SBNFXPSLੜ੒׬ྃʂ طʹ͋Δ΋ͷ ཉ͍͠΋ͷ arm64-to-sim .a
 .framework Y@TJN BSNJPT .xcframework ┗

    ios-arm64 ┗ ios-arm64_x86_64-simulator BSNJPT Y@TJN BSNTJN lipo lipo • खͰࣄલม׵ • pod installͰม׵εΫϦϓτ࣮ߦ ม׵εΫϦϓτࢀߟ: https://gist.github.com/banjun/a8b46c26e7328137dc278ec045f0d1d5
  14. © ZOZO, Inc. 30 ࠓճͷॾʑͷରԠͰಘΒΕͨ͜ͱ ౰ॳͷϞνϕʔγϣϯͷୡ੒ w 9DPEFͷ3PTFUUBαϙʔτऴྃʹک͑Δ͜ͱ͕ͳ͘ͳͬͨ w 4JNVMBUPS

    3PTFUUBͳ͠ ͱ9DPEF 3PTFUUB ͋Γͷ૬ੑ໰୊͕ղফͰ͖ͨɻ ෭࣍తͳޮՌ w Ϗϧυ͕࣌ؒૣ͘ͳͬͨ w $BSUIBHF͔Β$PDPB1PET΁ͱ׬શҠߦ w ৽͘͠ϝϯόʔ͕δϣΠϯͨ࣌͠ͷηοτΞοϓ͕؆୯ʹͳΓɺ͙͢ʹ։ൃʹ ೖΕΔΑ͏ʹͳͬͨ w 9DPEFͷΞοϓσʔτʹ൐͏ɺෆ۩߹ղফͷճ਺͕େ෯ʹݮͬͨ