Slide 1

Slide 1 text

10೥Ҏ্ͷྺ࢙Λ࣋ͭϓϩμΫτͷ RosettaϑϦʔ ʙͦͷதͰૺ۰ͨ͠໰୊ͱղܾ๏Λެ։͠·͢ʙ גࣜձࣾZOZO ZOZOTOWN։ൃຊ෦ ZOZOTOWNΞϓϦ෦ iOS1ϒϩοΫ খদ ޛ Copyright © ZOZO, Inc.

Slide 2

Slide 2 text

© ZOZO, Inc. 2 ͱ͠ !UPTI@ ೥;0;0ςΫϊϩʔδʔζ ݱ;0;0 ʹ৽ଔೖࣾɻ ৽ଔೖࣾҎདྷɺ;0;0508/ͷJ04ΞϓϦ։ൃʹؔΘΔɻ झຯɿόεέοτϘʔϧ 
 िʹճҎ্όεέΛ͢Δͱක͕௧͘ͳΔ͜ͱ͕࠷ۙͷ೰Έɻ Ұݴɿ5XJUUFS͔Β཭Ε͍ͯΔΤϯδχΞͷօ͞Μͷߦํ͕ؾʹͳ͍ͬͯ·͢ɻ ๻͸࠷ۙ5ISFBET͸͡Ί·ͨ͠ɻ

Slide 3

Slide 3 text

© ZOZO, Inc. 3 w ։ൃ؀ڥΛ"QQMFTJMJDPOʹҠߦ͠·ͨ͠ w ͨͩɺ3PTFUUBͳ͠ͰͷϏϧυ͸Ͱ͖͍ͯͳ͍ঢ়ଶ ;0;0508/ͷ౰࣌ͷঢ়ଶ IUUQTTQFBLFSEFDLDPNUPTIJOUSPEVDJOHBQQMF TJMJDPOBOEJUTCFIJOEUIFTDFOFT

Slide 4

Slide 4 text

© ZOZO, Inc. 4 "QQMFTJMJDPOҠߦͷλΠϛϯάͰ͸ݟૹΓ ͦͷޙɺ;0;046*5͸αϙʔτऴྃ ;0;0508/ͷ౰࣌ͷঢ়ଶ

Slide 5

Slide 5 text

© ZOZO, Inc. 5 w 3PTFUUBϑϦʔʹରͯ͠ԿΒ͔ͷ՝୊Λ๊͍͑ͯΔਓ͕3PTFUUBϑϦʔΛͰ͖ΔΑ͏ʹͳΔ w GSBNFXPSL Bͷ࠶Ϗϧυແ͠Ͱ3PTFUUBΛফͤΔΑ͏ʹͳΔ ͜ͷτʔΫͰ঺հ͢Δ͜ͱ

Slide 6

Slide 6 text

© ZOZO, Inc. 6 ඵͰ෮श

Slide 7

Slide 7 text

© ZOZO, Inc. 7 ඵͰ෮श

Slide 8

Slide 8 text

© ZOZO, Inc. 8 ඵͰ෮श

Slide 9

Slide 9 text

© ZOZO, Inc. 9 w ͍͔ͭඞͣ΍Βͳ͍ͱ͍͚ͳ͍λεΫ w 9DPEFͷ3PTFUUBରԠ͍ͬͯͭ·Ͱʁ w 4JNVMBUPS͸3PTFUUBαϙʔτऴྃɻ w 4JNVMBUPS 3PTFUUBͳ͠ ͱ9DPEF 3PTFUUB͋Γ ͷ૬ੑ͕ѱ͔ͬͨɻ w ׳ੑεΫϩʔϧ͕ޮ͔ͳ͘ͳΔ໰୊ ͳͥɺ3PTFUUBϑϦʔ͕ඞཁͳͷ͔ɻ ˠ࠷৽ͷ9DPEFͰ։ൃͰ͖ͳ͍ɻɻɻ

Slide 10

Slide 10 text

© ZOZO, Inc. 10 ઓུͷཱͯํ

Slide 11

Slide 11 text

© 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の慣性は効かない 細かいメモ

Slide 12

Slide 12 text

© ZOZO, Inc. 12 ํ਑ܾΊ େ͖͘෼͚ͯɺTUFQT w ;0;0."5ͷ$PDPB1PETҠߦ w GSBNFXPSLɺBϑΝΠϧΛYDGSBNFXPSL΁ͱม׵͢Δ

Slide 13

Slide 13 text

© ZOZO, Inc. 13 ΍Βͳ͍͜ͱΛܾΊΔ ;0;0."5ͷ$PDPB1PETԽʹࡍ͠ɺ΍Βͳ͍ͱܾΊͨ͜ͱ w ػೳ΍ґଘͷେ͖ͳมߋ͸ߦΘͳ͍ w ґଘ͍͍ͯͯ͠ΔϥΠϒϥϦͷߋ৽ͳͲ w 41.Խ͸ɺ΍Βͳ͍ w ϓϩδΣΫτ͕ͦ΋ͦ΋$PDPB1PETʹد͍ͤͯΔ w Ұ౓ʹ΍Βͳͯ͘΋͍͍ w νʔϜ಺Ͱ͞΄Ͳ஌ݟ͕͋ΔΘ͚Ͱ΋ͳ͍

Slide 14

Slide 14 text

© ZOZO, Inc. 14 ݁ہ࠷ޙ͸ɺɺɺ ؾ߹͍ɻؾ߹͍͕େࣄɻؾ߹͍Λ࣋ͬͯڧ͍ҙࢤͰ΍Γ੾Δ͜ͱɺେࣄɻ

Slide 15

Slide 15 text

© 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ͷซ༻ ՝୊

Slide 16

Slide 16 text

© 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ͷซ༻ ՝୊

Slide 17

Slide 17 text

© 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ͷซ༻ ՝୊

Slide 18

Slide 18 text

© ZOZO, Inc. 18 ;0;0."5 Core ZOZOMAT C++ Swift ZOZOMAT.framework carthage build opencv.framework

Slide 19

Slide 19 text

© 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

Slide 20

Slide 20 text

© ZOZO, Inc. 20 ;0;0."5 $PDPB1PETͰ͋Ε͹ɺ;0;0508/ຊମͷϏϧυͷλΠϛϯάͰɺશͯͷґଘؔ܎͕ղফ ͞Ε͍ͯΕ͹ྑ͍ɻ ࠓճͷέʔεͰ͸ɺίΞͷΞϧΰϦζϜΛࣄલʹ9$'SBNFXPSLͷܗࣜͰϏϧυͨ͠΋ͷΛ $PDPB1PETͰ؅ཧɻ ZOZOMAT Swift ZOZOMAT- core.xcframework CocoaPods opencv.xcframework

Slide 21

Slide 21 text

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ͷซ༻ ՝୊

Slide 22

Slide 22 text

9$'SBNFXPSL͕ཉ͍͠ʂ طʹ͋Δ΋ͷ ཉ͍͠΋ͷ libA.a B.framework Y@TJN BSNJPT Y@TJN BSNJPT ┗ B A.xcframework B.xcframework ??? ???

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

BSNJPTͱBSNTJNͷҧ͍ طʹ͋Δ΋ͷ ཉ͍͠΋ͷ BSNTJN BSNJPT ? "QQMF͸ɺͦΕͧΕιʔείʔυ͔ΒϏϧυ͢Ε͹Α͍ɺͱ͍ͯ͠Δ ͱ͸͍͑ɺ࣮࣭΄΅ಉ͡΋ͷͰ͋Δ ࠩ͸Կ͔ ࠩ෼͚ͩม׵Ͱ͖ͳ͍͔ IUUQTCPHPXUGBSNUPTJNIUNM

Slide 26

Slide 26 text

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/

Slide 27

Slide 27 text

BSNJPT͔Βͷม׵ɺछྨ طʹ͋Δ΋ͷ ཉ͍͠΋ͷ BSNTJN BSNJPT arm64-to-sim Mach-O object͕ೖͬͯΔ.framework ar archive͕ೖͬͯΔ.framework ar archive͕ೖͬͯΔ.a BSNJPT arm64-to-sim P P P P P P P P P P BSNTJN ar x ar crv

Slide 28

Slide 28 text

࠶Ϗϧυͳ͠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

Slide 29

Slide 29 text

© ZOZO, Inc. 29 8SBQ6Q

Slide 30

Slide 30 text

© ZOZO, Inc. 30 ࠓճͷॾʑͷରԠͰಘΒΕͨ͜ͱ ౰ॳͷϞνϕʔγϣϯͷୡ੒ w 9DPEFͷ3PTFUUBαϙʔτऴྃʹک͑Δ͜ͱ͕ͳ͘ͳͬͨ w 4JNVMBUPS 3PTFUUBͳ͠ ͱ9DPEF 3PTFUUB ͋Γͷ૬ੑ໰୊͕ղফͰ͖ͨɻ ෭࣍తͳޮՌ w Ϗϧυ͕࣌ؒૣ͘ͳͬͨ w $BSUIBHF͔Β$PDPB1PET΁ͱ׬શҠߦ w ৽͘͠ϝϯόʔ͕δϣΠϯͨ࣌͠ͷηοτΞοϓ͕؆୯ʹͳΓɺ͙͢ʹ։ൃʹ ೖΕΔΑ͏ʹͳͬͨ w 9DPEFͷΞοϓσʔτʹ൐͏ɺෆ۩߹ղফͷճ਺͕େ෯ʹݮͬͨ

Slide 31

Slide 31 text

No content