Slide 1

Slide 1 text

iOSΞϓϦͷ
 ϦδΣΫτϦεΫΛૣظʹ ൃݟ͢ΔͨΊͷऔΓ૊Έ iOSDC Japan 2019 Ճ੉݈ଠ @Kesin11 ൃද։࢝લʹ͓खݩʹipaΛ͝༻ҙ͠
 zipղౚͯ͠௖͚ΔͱΑΓָ͠Ή͜ͱ͕Ͱ͖·͢

Slide 2

Slide 2 text

ࣗݾ঺հ • ॴଐɿDeNAͷSWETάϧʔϓ
 (SoftWare Engineer in Test) • Twitterɿ@Kesin11 • GitHubɿKesin11 • ͓࢓ࣄɿCI/CD׆༻αϙʔτɺؔ࿈ٕज़ͳͲͷݕূ • ൒೥લ·Ͱ͸QAνʔϜͷࣗಈԽαϙʔτ

Slide 3

Slide 3 text

DeNA Testing Blog swet.dena.com

Slide 4

Slide 4 text

ओ࠵ษڧձ TestNight ࣍ճ͸10/02 CICD Test Night #5

Slide 5

Slide 5 text

ಥવͰ͕͢ΫΠζͰ͢

Slide 6

Slide 6 text

લճApp Store ReviewΨΠυ ϥΠϯ͕ߋ৽͞Εͨͷ͸͍ͭʁ • ᶃɹ1-3݄ • ᶄɹ4-6݄ • ᶅɹ7-8݄ • ᶆɹࠓ೥͸·ͩߋ৽͞Ε͍ͯͳ͍

Slide 7

Slide 7 text

લճApp Store ReviewΨΠυ ϥΠϯ͕ߋ৽͞Εͨͷ͸͍ͭʁ • ᶃɹ1-3݄ • ᶄɹ4-6݄ • ᶅɹ7-8݄ • ᶆɹࠓ೥͸·ͩߋ৽͞Ε͍ͯͳ͍

Slide 8

Slide 8 text

લճApp Store ReviewΨΠυ ϥΠϯ͕ߋ৽͞Εͨͷ͸͍ͭʁ • ਖ਼ղ: ᶄ 4-6݄ʢ۩ମతʹ͸6/3ʣ • ࢠڙ޲͚ΞϓϦͰͷ3rd޿ࠂ΍σʔλऩूͷ੍ݶ • MDM͕ڐ͞ΕΔέʔεʹϖΞϨϯλϧίϯτ ϩʔϧΛ௥Ճ • ҰํͰऩूͨ͠σʔλͷऔΓѻ੍͍ݶΛ໌ه

Slide 9

Slide 9 text

։ൃऀ΍૊৫ͱͯ͠
 ϓϥοτϑΥʔϜ͔Βͷ
 Ξφ΢ϯεΛ
 ೺Ѳ͓ͯ͘͜͠ͱ͸େࣄ

Slide 10

Slide 10 text

ࣾ಺ͷ։ൃɾϦϦʔεϑϩʔ ϑϩʔͷޙ΄Ͳ໰୊͕ى͖ͨͱ͖ͷख໭Γ͕େ͖͍

Slide 11

Slide 11 text

৽ػೳ͕૿͑Ε͹
 ReviewΨΠυϥΠϯ΋૿͑Δ ਓ͕ؒશͯνΣοΫ͍ͯ͘͠ମ੍͸
 ͍͔ͭݶք͕དྷͯ͠·͏

Slide 12

Slide 12 text

ϦδΣΫτϦεΫΛݕࠪ͢Δ FastlaneϓϥάΠϯΛ࡞Γ·ͨ͠

Slide 13

Slide 13 text

AppChecker • FastfileʹϏϧυޙͷipaͷύεΛॻ͚ͩ͘Ͱ؆ ୯ʹಋೖՄೳ

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

ܯࠂϨϕϧ • error • App StoreʹΞοϓϩʔυ࣌ʹΤϥʔʹͳΔɺ
 ͋Δ͍͸৹ࠪ࣌ʹϦδΣΫτͷϦεΫ͕ߴ͍ • warn • error΄Ͳ໰୊ʹͳΒͳ͍͜ͱ΋͋Δ͕मਖ਼͕๬·͍͠ • info • ৚݅࣍ୈͰwarnఔ౓ͷϦεΫ͕͋Δ΋ͷ • QAଆͰ༻్Λ೺Ѳ͓͖͍߲ͯͨ͠໨

Slide 17

Slide 17 text

νΣοΫ͍ͯ͠Δ߲໨ - error • App StoreʹΞοϓϩʔυ࣌ʹΤϥʔʹͳΔɺ ͋Δ͍͸৹ࠪ࣌ʹϦδΣΫτͷϦεΫ͕ߴ͍ • ݕ஌͞Εͨ৔߹͸ݪଇͱͯ͠मਖ਼ඞਢ

Slide 18

Slide 18 text

νΣοΫ͍ͯ͠Δ߲໨ - error • iOS SDKόʔδϣϯ͕ݹ͗͢ͳ͍͔ • Xcodeόʔδϣϯ͕ݹ͗͢ͳ͍͔ • ΞΠίϯαΠζ͕ἧ͍ͬͯΔ͔ • PrivateFrameworkΛϦϯΫ͍ͯ͠ͳ͍͔ • ඇެ։url schemeΛ࢖͍ͬͯͳ͍͔ • ϓϥΠόγʔʹؔ͢Δػೳͷઆ໌จ͕ۭͰͳ͍͔ • 64bitରԠ

Slide 19

Slide 19 text

νΣοΫ͍ͯ͠Δ߲໨ - error • iOS SDKόʔδϣϯ͕ݹ͗͢ͳ͍͔ • Xcodeόʔδϣϯ͕ݹ͗͢ͳ͍͔ • ΞΠίϯαΠζ͕ἧ͍ͬͯΔ͔ • PrivateFrameworkΛϦϯΫ͍ͯ͠ͳ͍͔ • ඇެ։url schemeΛ࢖͍ͬͯͳ͍͔ • ϓϥΠόγʔʹؔ͢Δػೳͷઆ໌จ͕ۭͰͳ͍͔ • 64bitରԠ

Slide 20

Slide 20 text

iOS SDKόʔδϣϯ
 Xcodeόʔδϣϯ
 ݹ͗͢ͳ͍͔

Slide 21

Slide 21 text

iOS SDKɺXcodeͷόʔδϣϯ • ݹ͍όʔδϣϯͰϏϧυͨ͠ipa͸ϦϦʔεͰ͖ͳ͍ • ݱࡏ͸iOS 12.1 SDKҎ্ͰϏϧυ͕ඞཁ • ipa಺ͷinfo.plist͔Β֬ೝ͕Մೳ • DTXcode: Xcodeͷόʔδϣϯ • DTPlatformVersion: iOS SDKͷόʔδϣϯ

Slide 22

Slide 22 text

iOS SDKɺXcodeͷόʔδϣϯ • ࣮ࡍʹipaΛղౚͯ͠த਎ΛݟͯΈ·͠ΐ͏ • plutil -p {ΞϓϦ໊}.app/Info.plist iOS 12.1 SDKͰϏϧυ͞Εͨ Xcode 10.1ͰϏϧυ͞Εͨ

Slide 23

Slide 23 text

iOS SDKɺXcodeͷόʔδϣϯ • πʔϧʢrubyʣͰͷ࣮૷ • ॳظ͸FastlaneCore::IpaFileAnalyzerͰInfo.plistͷத਎Λࢀর • ipa಺ͷϑΝΠϧ਺͕64KΛ௒͑Δ৔߹ɺrubyzip͕ݪҼͰղ ౚͰ͖ͳ͔ͬͨ • ֎෦ϓϩηεͰunzipΛ࢖ͬͯzipղౚΛࣗલͰߦ͏Α͏ʹมߋ • ஋ΛGem::VersionͷΦϒδΣΫτʹͯ͠όʔδϣϯൺֱ

Slide 24

Slide 24 text

ΞΠίϯͷαΠζͷछྨ͕
 ෆ଍͍ͯ͠ͳ͍͔

Slide 25

Slide 25 text

ΞΠίϯͷαΠζ • iPhone, iPadຖʹඞཁͳαΠζ͕଍Γ͍ͯͳ͍ ͱΞοϓϩʔυͰ͖ͳ͍ • Human Interface Guidelinesͷicons and ImagesΛࢀর • https://developer.apple.com/design/human-interface- guidelines/ios/icons-and-images/app-icon/

Slide 26

Slide 26 text

ΞΠίϯͷαΠζ • xcrun --sdk iphoneos assetutil --info {ASSETS_CAR_PATH} • ipa಺ͷAssets.carΛࢦఆ͢Δͱ ΞΠίϯΛؚΉΞηοτͷϝλ σʔλ͕jsonͰऔಘͰ͖Δ • jsonΛύʔεͯ͠ඞཁͳαΠζ ͷఆٛͱൺֱͯ͠ෆ଍͍ͯ͠ ͳ͍͔νΣοΫ

Slide 27

Slide 27 text

PrivateFrameworkΛ
 ࢖͍ͬͯͳ͍͔

Slide 28

Slide 28 text

PrivateFrameworkΛ࢖͍ͬͯͳ͍͔ • ͦ΋ͦ΋PrivateFrameworkͱ͸ʁ • ϔομʔ͕ެ։͞Ε͍ͯͳ͍Framework • ී௨͸ϦϯΫ΋ݺͼग़͢͜ͱ΋Ͱ͖ͳ͍ • ΋͠࢖͍ͬͯΔͱϦδΣΫτର৅

Slide 29

Slide 29 text

ϦϯΫ͞Ε͍ͯΔ
 FrameworkΛௐ΂Δ

Slide 30

Slide 30 text

ΞϓϦͷόΠφϦຊମ • otool -L {ΞϓϦ໊}.app/{ΞϓϦ໊} • όΠφϦʹϦϯΫ͞Ε͍ͯΔ΋ͷΛௐ΂Δ͜ͱ͕ Ͱ͖Δ • ipaΛղౚͯ͠ɺΞϓϦຊମͷόΠφϦʹotool Λ͔͚Δ

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

3rdύʔςΟͷFramework

Slide 33

Slide 33 text

γεςϜͷFramework

Slide 34

Slide 34 text

Swiftؔ܎ͬΆ͍ʁ

Slide 35

Slide 35 text

ґଘ͍ͯ͠Δ֎෦SDK • ࣮͸ຊ౰ʹௐ΂͍ͨͷ͸ͪ͜Β • ֎෦SDK͕ѱ͞Λ͍ͯ͠ͳ͍͔֬ೝ͍ͨ͠ • ղౚͨ͠ipaͷFrameworks/ͷதʹ֎෦SDKͳ ͲͷFrameworkؚ͕·Ε͍ͯΔ

Slide 36

Slide 36 text

֤FrameworkͷόΠφϦʹ
 ·ͱΊͯotoolΛ࣮ߦ

Slide 37

Slide 37 text

QRCodeReader͕ϦϯΫ͍ͯ͠Δ
 Framework

Slide 38

Slide 38 text

ࣗ෼ͷΞϓϦʹؚ·ΕΔ શͯͷFramework͕
 ϦετΞοϓͰ͖ͨ

Slide 39

Slide 39 text

PrivateFramework͸
 ؚ·Ε͍ͯΔʁ

Slide 40

Slide 40 text

ͦ΋ͦ΋Frameworkͷ
 ৔ॴ͸ʁ

Slide 41

Slide 41 text

Frameworkͷ৔ॴ • /Applications/Xcode.app/Contents/Developer/ Platforms/iPhoneOS.platform/Developer/ SDKs/iPhoneOS.sdk/System/Library/ Frameworks/ • ͜͜ʹ͸iPhoneʹؚ·ΕΔFrameworkͷϔο μʔ͔͠ͳ͍ • ౰વPrivateFrameworkͷϔομʔ͸ଘࡏ͠ͳ͍

Slide 42

Slide 42 text

Frameworkͷ࣮ମ͸
 օ͞ΜͷiPhoneͷதʹ

Slide 43

Slide 43 text

Ͱ΋࣮͸΋͏Ұͭmacͷதʹ΋ ࣮ମ͕ଘࡏ͠·͢ iOSγϛϡϨʔλʔ

Slide 44

Slide 44 text

γϛϡϨʔλʔ༻ͷFramework ͷ৔ॴ • /Applications/Xcode.app/Contents/Developer/Platforms/ iPhoneOS.platform/Developer/Library/CoreSimulator/ Profiles/Runtimes/iOS.simruntime/Contents/Resources/ RuntimeRoot/System/Library/Frameworks/ • Frameworks/͕ଘࡏ͢Δಉ֊૚ʹPrivateFrameworks/͕ ଘࡏ͢Δ • ͜ͷσΟϨΫτϦ಺Λௐ΂Δ͜ͱͰɺͲͷΑ͏ͳ໊લͷ PrivateFramework͕ଘࡏ͢Δ͔஌Δ͜ͱ͕Ͱ͖Δ

Slide 45

Slide 45 text

ݕ஌͢΂͖ PrivateFramework͕
 ϦετΞοϓͰ͖ͨ

Slide 46

Slide 46 text

࠷ऴతͳνΣοΫͷ࢓૊Έ • otool -LͰΞϓϦʹؚ·ΕΔશͯͷFrameworkΛϦετΞοϓ • ਖ਼نදݱͰҎԼͷFrameworkؚ͕·Ε͍ͯͨΒNGͱ͢Δ • PrivateFrameworks/*.framework • Frameworks/IOKit.framework • IOKit͸Frameworks/ʹଘࡏ͢Δ͕ී௨͸࢖͑ͳ͍ • ࢖͏ͱϦδΣΫτ͞ΕΔͷ͸ଟ෼݁ߏ༗໊ͳ࿩

Slide 47

Slide 47 text

νΣοΫ͍ͯ͠Δ߲໨ - warn • App StoreΞοϓϩʔυ΍৹ࠪͰ100%
 ϦδΣΫτ͞ΕΔͱ͸ݴ͑ͳ͍͕
 मਖ਼͕๬·͍͠

Slide 48

Slide 48 text

νΣοΫ͍ͯ͠Δ߲໨ - warn • ετΞʹରԠݴޠ͕೔ຊޠͱͯ͠දࣔ͞ΕΔ ͔ • UIRequiredDeviceCapabilitiesʹ࢖͏ػೳ͕ minimumOSVersionΛຬ͍ͨͯ͠Δ͔

Slide 49

Slide 49 text

νΣοΫ͍ͯ͠Δ߲໨ - warn • ετΞʹରԠݴޠ͕೔ຊޠͱͯ͠දࣔ͞ΕΔ ͔ • UIRequiredDeviceCapabilitiesʹ࢖͏ػೳ͕ minimumOSVersionΛຬ͍ͨͯ͠Δ͔ ࣌ؒͷ౎߹্·ͱΊͯεΩοϓ͠·͢

Slide 50

Slide 50 text

νΣοΫ͍ͯ͠Δ߲໨ - info • ৚݅࣍ୈͰwarnఔ౓ͷϦεΫ͕͋Δ΋ͷ • QAଆͰ༻్Λ೺Ѳ͓͖͍߲ͯͨ͠໨

Slide 51

Slide 51 text

νΣοΫ͍ͯ͠Δ߲໨ - info • ϓϥΠόγʔσʔλʹΞΫηε͢Δ Frameworkͷ༻్ • ࢖༻͍ͯ͠ΔόοΫάϥ΢ϯυαʔϏε • λʔήοτσόΠε iPhone, iPad༻͔

Slide 52

Slide 52 text

νΣοΫ͍ͯ͠Δ߲໨ - info • ϓϥΠόγʔσʔλʹΞΫηε͢Δ Frameworkͷ༻్ • ࢖༻͍ͯ͠ΔόοΫάϥ΢ϯυαʔϏε • λʔήοτσόΠε iPhone, iPad༻͔

Slide 53

Slide 53 text

ϓϥΠόγʔσʔλʹ
 ΞΫηε͢ΔFramework

Slide 54

Slide 54 text

ϓϥΠόγʔσʔλʹΞΫηε͢Δ Framework • ReviewΨΠυϥΠϯΑΓɺऔΓѻ͍ʹ஫ҙ͢ ΂͖σʔλΛऔಘͰ͖ΔFrameworkΛ
 ࢖༻͍ͯ͠Δ͔Ͳ͏͔ • otoolͰ࢖༻͍ͯ͠ΔFrameworkΛௐ΂Δ • QAଆͰ༻్Λ֬ೝ͢ΔͨΊ

Slide 55

Slide 55 text

ϓϥΠόγʔσʔλʹΞΫηε͢Δ Framework • App Store ReviewΨΠυϥΠϯΛࢀর • 5.1.2 σʔλͷ࢖༻ͱڞ༗ʢviʣ • 5.1.3 ݈߁͓Αͼ݈߁ʹؔ͢Δௐࠪʢiʣ • ϚʔέςΟϯά΍޿ࠂ໨తͳͲʹ࢖༻ͯ͠͸͍͚ͳ͍ɺͳͲ͕ ఆΊΒΕ͍ͯΔ • ର৅ͱͳΔAPIͳͲ΋໌ه͞Ε͍ͯΔ • ϔϧεέΞ΍ࣸਅͳͲ

Slide 56

Slide 56 text

AppCheckerΛ
 Ͳ͏׆༻͍͔ͯ͘͠

Slide 57

Slide 57 text

AppCheckerಋೖޙͷશମͷϑϩʔ Logo by
 https://www.bitrise.io/presskit
 https://github.com/logos

Slide 58

Slide 58 text

HTMLͷϨϙʔτ શମ݁ՌͷαϚϦʔ

Slide 59

Slide 59 text

։ൃऀ͔Βͷϝοηʔδ

Slide 60

Slide 60 text

ผͷYAMLʹهࡌͨ͠ϝοηʔδ͕
 సࣸ͞ΕΔ࢓૊Έ

Slide 61

Slide 61 text

ݩͷInfo.plist΋ࢀরͰ͖ΔΑ͏ʹදࣔ

Slide 62

Slide 62 text

։ൃɾQAͰͷνΣοΫ͕
 ࣗಈԽɺলྗԽ͞Ε·ͨ͠

Slide 63

Slide 63 text

ΨΠυϥΠϯΛ
 ௥͍ଓ͚Δํ๏

Slide 64

Slide 64 text

ΨΠυϥΠϯΛ௥͍ଓ͚Δํ๏ • Appleͷσϕϩούʔ޲͚News • https://developer.apple.com/news/ • ཁٻSDKόʔδϣϯߋ৽ͳͲॏཁͳ৘ใ΋ྲྀΕΔ • ࣾ಺ͷաڈͷϦδΣΫτࣄྫΛڞ༗ͯ͠ԣల։ • ReviewΨΠυϥΠϯ͕ߋ৽͞ΕͨࡍʹdiffΛऔΔ

Slide 65

Slide 65 text

·ͱΊ • ϦδΣΫτϦεΫΛݕ஌͢Δࣾ಺Fastlane
 ϓϥάΠϯΛ࡞੒͠·ͨ͠ • νΣοΫࣗಈԽʹΑΓૣظϑΟʔυόοΫɺ
 HTMLϨϙʔτʹΑΓQAνΣοΫͷলྗԽ • ϦδΣΫτʹΑΔख໭ΓΛͳ͍͖͍ͯͨ͘͠ • App Store ReviewΨΠυϥΠϯ͸ৗʹཁνΣοΫ