Slide 1

Slide 1 text

'JSFCBTFGPSJ04 ॳखʓʓ

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

ೳొཁ !OPUPSPJE w J04ΞϓϦ։ൃऀ w ԰߸͍Γ·͢ిࢉاը w !OPUPSPJE w !JSJNBTV w ࠷ۙͷಈ޲ w ϒϩά࡮৽͠·ͨ͠

Slide 4

Slide 4 text

ॆిใࠂ͞Μ #BUUFSFDFJWFS w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ w ࠷େ୆ ࣮ػϦϞʔτ୆ w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬ ೝՄೳ w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ ೳ

Slide 5

Slide 5 text

ॆిใࠂ͞Μ #BUUFSFDFJWFS w "QQMF8BUDIରԠ w $PNQMJDBUJPOTରԠ w ॆి׬ྃ௨஌ w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔΛέ Ξ͢Δ͜ͱ͕Մೳ w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗༻

Slide 6

Slide 6 text

࿩͢͜ͱ w 'JSFCBTFͷτϐοΫ w ϞόΠϧΞϓϦ։ൃͰͷ'JSFCBTFॳख

Slide 7

Slide 7 text

࿩͞ͳ͍͜ͱ w ͷ(PPHMF*0ʹ͍ͭͯ w 'JSFCBTFNFTTBHJOH w 'JSFCBTF$MPVE'VODUJPOT w 'JSFCBTF$MPVE)PTUJOH

Slide 8

Slide 8 text

୊໨ w 'JSFCBTF֓ཁ w 'JSFCBTFͷ࠷ۙͷτϐοΫ w J1IPOFΞϓϦϓϩδΣΫτ'JSFCBTFॳखϜʔϒ

Slide 9

Slide 9 text

'JSFCBTF֓ཁ

Slide 10

Slide 10 text

88%$։࠵ؒۙ

Slide 11

Slide 11 text

͜ͷ࣌ظ͸Appleͷωλ͕ͳ͍

Slide 12

Slide 12 text

͔ΘΓʹ(PPHMFͷΧϯϑΝϨϯ ε͸͋Δ (PPHMF*0

Slide 13

Slide 13 text

ϞόΠϧΞϓϦʹ͔͔ͤͳ͍ 'JSFCBTFͷॳखʹ͍ͭͯઆ໌

Slide 14

Slide 14 text

'JSFCBTFͱ͸

Slide 15

Slide 15 text

'JSFCBTFͱ͸ w (PPHMF͕ఏڙ͢ΔϞόΠϧΞϓϦ༻N#BB4 ͷϒϥϯυ w 'JSFCBTFͱ͍͏ϦΞϧλΠϜσʔλϕʔ εͷઌۦ͚ͷϕϯνϟʔΛങऩ w ͦͷ··ϒϥϯυͱͯ͠࢖༻ w ଞαʔϏε 'BCSJD ΋ٵऩ w (PPHMF$MPVEQMBUGPSNΛج൫ʹϞόΠ ϧαʔϏεʹదͨ͠ܗͰఏڙ w ैྔ՝ۚ੡

Slide 16

Slide 16 text

ϓϥοτϑΥʔϜαʔϏεରԠ w ϞόΠϧ޲͚ w 'JSFCBTFJ044%, w 'JSFCBTF"OESPJE4%, w 'JSFCBTF+BWBTDSJQU4%, 8FCϑϩϯτΤϯυ޲͚ w 'JSFCBTF"ENJO4%, αʔόʔαʔόʔϨε޲͚ ϞόΠϧΞϓϦͱόοΫΤϯυͰͷ'JSFCBTFػೳݺͼग़͠Λαϙʔτ

Slide 17

Slide 17 text

'JSFCBTFͷػೳ ൈਮ ʙ"VUIFOUJDBUJPO Ϣʔβʔೝূ ʙ$SBTIMZUJDT Ϋϥογϡ৘ใڞ༗ ʙ$MPVE.FTTBHJOH ϓογϡ௨஌ ʙ$MPVE'VODUJPOT αʔόʔϨείϯϐϡʔςΟϯά ʙ$MPVE'JSFTUPSF ϦΞϧλΠϜσʔλϕʔε ʙ)PTUJOH ϗεςΟϯάαʔϏε ʙ"QQ%JTUSJCVUJPO ݕূΞϓϦͷ഑෍ ʙ4UPSBHF ετϨʔδαʔϏε ʙ3FBMUJNF%BUBCBTF ϦΞϧλΠϜσʔλϕʔε ถࠃͷΈ ๛෋ͳػೳͱ͙͢࢖͑Δརศੑ

Slide 18

Slide 18 text

ϞόΠϧϓϥοτϑΥʔϜΛαϙʔτ͠ όοΫΤϯυ΋ରԠ͢ΔαʔϏεʹ੒௕

Slide 19

Slide 19 text

w ϓϩδΣΫτ୯ҐͰαʔϏε؅ཧ w ϓϩδΣΫτʹෳ਺ΞϓϦࢦఆՄೳ w ͭͷαʔϏεͰෳ਺ϓϥοτϑΥʔϜɺ αʔϏε͕ࢀরՄೳ

Slide 20

Slide 20 text

'JSFCBTFʹؔ͢Δ࿩୊

Slide 21

Slide 21 text

'JSFCBTFʹؔ͢Δ࿩୊ w 4XJGU1BDLBHF.BOBHFSରԠ w 'JSFCBTF'JSFTUPSF4XJGUͷػೳڧԽ w σʔλఆٛΛ4XJGUͷ$PEBCMFͰࢦఆՄೳʹ

Slide 22

Slide 22 text

4XJGU1BDLBHF.BOBHFSରԠ

Slide 23

Slide 23 text

4XJGU1BDLBHF.BOBHFSରԠ w 4XJGU1BDLBHF.BOBHFS w "QQMFۘ੡ͷϛυϧ΢ΣΞಋೖػೳ w 9DPEF্ͷૢ࡞Ͱ؆ܿ w ⁶$PDPBQPET $BSUIBHF w 9DPEFͰରԠ

Slide 24

Slide 24 text

%FSJWFE%BUBΛফڈͨ͠ࡍʹ4XJGU1BDLBHFTͷύοέʔδࢀর ʹࣦഊ͢Δࡍͷରॲํ๏ JSJNBTVDPNEFSJWFEEBUBTXJGUQBDLBHFT 4XJGU1BDLBHF.BOBHFSͷศར৘ใ

Slide 25

Slide 25 text

'JSFCBTF'JSFTUPSF4XJGUͷػೳڧԽ w σʔλετΞ $MPVE'JSFTUPSF ͸0CKFDUJWF$΋αϙʔτ w 4XJGU޲͚ػೳ֦ு͸ఏڙ͞Ε͍ͯͳ͍ w (PPHMFۘ੡ͷ'JSFCBTF'JSFTUPSF4XJGUͰ4XJGU޲͚ػೳ֦ு w 4XJGUͷ$PEBCMFରԠTUSVDUDMBTTͰσʔλఆٛՄೳʹ

Slide 26

Slide 26 text

import SwiftUI import FirebaseFirestore import FirebaseFirestoreSwift struct Activity: Codable { @DocumentID var id: String? var title: String var description: String var timstamp: Date } struct ActivityView: View { @State var count = 1 var body: some View { Button { let db = Firestore.firestore() let ref = db.collection("activities") count = count + 1 let now = Date() let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/", timstamp: now) do { let newDocReference = try ref.addDocument(from: activity) print("Book stored with new document reference: \(newDocReference)") } catch { print(error) } } label: { Text("Add Activity") } } }

Slide 27

Slide 27 text

import SwiftUI import FirebaseFirestore import FirebaseFirestoreSwift struct Activity: Codable { @DocumentID var id: String? var title: String var description: String var timstamp: Date } struct ActivityView: View { @State var count = 1 var body: some View { Button { let db = Firestore.firestore() let ref = db.collection("activities") count = count + 1 let now = Date() let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/", timstamp: now) do { let newDocReference = try ref.addDocument(from: activity) print("Book stored with new document reference: \(newDocReference)") } catch { print(error) } } label: { Text("Add Activity") } } } ඞཁͳJNQPSU

Slide 28

Slide 28 text

import SwiftUI import FirebaseFirestore import FirebaseFirestoreSwift struct Activity: Codable { @DocumentID var id: String? var title: String var description: String var timstamp: Date } struct ActivityView: View { @State var count = 1 var body: some View { Button { let db = Firestore.firestore() let ref = db.collection("activities") count = count + 1 let now = Date() let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/", timstamp: now) do { let newDocReference = try ref.addDocument(from: activity) print("Book stored with new document reference: \(newDocReference)") } catch { print(error) } } label: { Text("Add Activity") } } } σʔλఆٛ

Slide 29

Slide 29 text

import SwiftUI import FirebaseFirestore import FirebaseFirestoreSwift struct Activity: Codable { @DocumentID var id: String? var title: String var description: String var timstamp: Date } struct ActivityView: View { @State var count = 1 var body: some View { Button { let db = Firestore.firestore() let ref = db.collection("activities") count = count + 1 let now = Date() let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/", timstamp: now) do { let newDocReference = try ref.addDocument(from: activity) print("Book stored with new document reference: \(newDocReference)") } catch { print(error) } } label: { Text("Add Activity") } } } σʔλΛ௥Ճ͢Δ

Slide 30

Slide 30 text

'JSFTUPSF΁൓ө

Slide 31

Slide 31 text

'JSFCBTFॳखʓʓ

Slide 32

Slide 32 text

'JSFCBTF͸ͳΜͰ΋Ͱ͖Δ͕

Slide 33

Slide 33 text

ͱ͸ݴͬͯ΋

Slide 34

Slide 34 text

ػೳ͕ଟͯ͘ԿΛ͍͍͔ͯ͠ Θ͔Βͳ͍

Slide 35

Slide 35 text

'JSFCBTFΛ࢖͏ΞϓϦͷ ৽ن্ཱͪ͛͸ͦ͏ଟ͘ͳ͍

Slide 36

Slide 36 text

'JSFCBTFΛ࢖͏ࡍʹ͸ ॳखΛ͔ͬ͢Γ๨Ε͍ͯΔ

Slide 37

Slide 37 text

ࠓճ͸'JSFCBTFಋೖͷ ࠷ॳͷखॱΛղઆ

Slide 38

Slide 38 text

ಋೖϞσϧ

Slide 39

Slide 39 text

J04ΞϓϦ 'JSFCBTF ଞαʔϏε 'JSFCBTF $MPVE'VODUJPOT 􀟜 'JSFCBTF $MPVE'JSFTUPSF 'JSFCBTF $MPVE.FTTBHJOH 'JSFCBTF $SBTIMZUJDT 0UIFS 4FSWJDF 'JSFCBTF GPSJ04 "1/T (PPHMF$MPVE 1SBUGPSN 8FC)PPL )5513FRVFTU "ENJO4%, 1VTI/PUJ fi DBUJPO 1VTI/PUJ fi DBUJPOT

Slide 40

Slide 40 text

J04ΞϓϦ 'JSFCBTF ଞαʔϏε 'JSFCBTF $MPVE'VODUJPOT 􀟜 'JSFCBTF $MPVE'JSFTUPSF 'JSFCBTF $MPVE.FTTBHJOH 'JSFCBTF $SBTIMZUJDT 0UIFS 4FSWJDF 'JSFCBTF GPSJ04 "1/T (PPHMF$MPVE 1SBUGPSN 8FC)PPL )5513FRVFTU "ENJO4%, 1VTI/PUJ fi DBUJPO 1VTI/PUJ fi DBUJPOT ͜ͷൣғΛͳΜͱ͔͍ͨ͠

Slide 41

Slide 41 text

૝ఆΞϓϦ ϓϩδΣΫτ໊͸"DUJWJUZ5FTU ίʔυྔͷ౎߹্4XJGU6* ͓ͦΒ͘6*,JUɺ'MVUUFSͰ΋աఔมΘΒͳ͍͸ͣ લఏ 'JSFCBTFίϯιʔϧ΁ϩάΠϯՄೳ $PDPBQPET࢖༻ Ϋϥογϡ৘ใΛऩू͢Δ ϢʔβʔೝূΛ༗ޮʹ͢Δ "VUIFOUJDBUJPO 4JHO*OXJUI"QQMF 'JSFTPSF'JSFTUPSFΛ༗ޮԽ ͓஌ΒͤҰཡػೳΛ୲ΘͤΔͨΊͷج൫ͱͯ͠σʔλετΞΛར༻͍ͨ͠

Slide 42

Slide 42 text

ҎԼʹެ։த OPUPSPJE'JSFCBTF'JSTU.PWF'JSTU TUFQTUPVTJOH'JSFCBTFGPSJ04 HJUIVCDPNOPUPSPJE'JSFCBTF'JSTU.PWF

Slide 43

Slide 43 text

·ͣ͸'JSFCBTFίϯιʔϧʹͯ 'JSFCBTFϓϩδΣΫτΛ࡞੒

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

·ͣ࠷ॳʹ͢Δ͜ͱ͸

Slide 46

Slide 46 text

՝ۚϓϥϯͷมߋ

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

$MPVE'VODUJPOTͰͷར༻࣌ʹ ੍໿ͳͲ͕͋ΔͷͰͬ͞͞ͱ੾Γସ͑

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

࡞ۀ.BDͰ৽نϓϩδΣΫτ "DUJWJUZ5FTU࡞੒

Slide 51

Slide 51 text

#VOEMF*EFOUJ fi FSΛίϐʔ

Slide 52

Slide 52 text

'JSFCBTFͰϓϩδΣΫτʹ J04ΞϓϦΛ௥Ճ

Slide 53

Slide 53 text

J04ϘλϯΛλοϓ

Slide 54

Slide 54 text

#VOEMF*EFOUJ fi FSΛೖྗ

Slide 55

Slide 55 text

(PPHMF4FSWJDF*OGPQMJTU Λμ΢ϯϩʔυͯ͠9DPEF ϓϩδΣΫτʹ௥Ճ

Slide 56

Slide 56 text

ҎԼ͸'JGSFCBTFͷࢦࣔ௨Γʹ ਐΊΔ͕ɺ

Slide 57

Slide 57 text

1PE fi MF $PDPBQPET༻ఆٛ ͸ ͪ͜ΒΛ࢖༻͢Δ

Slide 58

Slide 58 text

# Uncomment the next line to define a global platform for your project platform :ios, '14.5' target 'ActivityTest' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! pod 'Firebase/Auth' pod 'Firebase/Crashlytics' pod 'Firebase/Firestore' pod 'FirebaseFirestoreSwift' pod 'Firebase/Messaging' end

Slide 59

Slide 59 text

# Uncomment the next line to define a global platform for your project platform :ios, '14.5' target 'ActivityTest' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! pod 'Firebase/Auth' pod 'Firebase/Crashlytics' pod 'Firebase/Firestore' pod 'FirebaseFirestoreSwift' pod 'Firebase/Messaging' end ೝূ༻ $SBTIMZUJDTू༻ σʔλετΞ༻ ϓογϡ௨஌༻

Slide 60

Slide 60 text

$PDPBQPETΛΠϯετʔϧޙɺ ௥Ճ͞ΕͨϫʔΫεϖʔεϑΝΠϧ "DUJWJUZ5FTUYDXPSLTQBDF Λ։͚͹'JSFCBTFͷಋೖ׬ྃ

Slide 61

Slide 61 text

֤ػೳ͝ͱʹಋೖ࡞ۀ͕ ඞཁʹͳΔ

Slide 62

Slide 62 text

αϯϓϧίʔυղઆ

Slide 63

Slide 63 text

ҎԼʹެ։த OPUPSPJE'JSFCBTF'JSTU.PWF'JSTU TUFQTUPVTJOH'JSFCBTFGPSJ04 HJUIVCDPNOPUPSPJE'JSFCBTF'JSTU.PWF

Slide 64

Slide 64 text

"DUJWJUZ5FTU w $SBTIMZUJDTૄ௨༻7JFX w 4JHO*OXJUI"QQMF֬ೝ༻7JFX w σʔλετΞ֬ೝ༻7JFX

Slide 65

Slide 65 text

"DUJWJUZ5FTU fi OJTI ʹ׬੒ίʔυ

Slide 66

Slide 66 text

$PDPBQPEͷΠϯετʔϧ (PPHMF4FSWJDF*OGPQMJTU ͕ඞཁ

Slide 67

Slide 67 text

"DUJWJUZ5FTU fi OJTI "DUJWJUZ5FTU "DUJWJUZ5FTU"QQTXJGU import SwiftUI @main struct ActivityTestApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { // original view ContentView() // step1) for Crashlytics activate // CrashView() // step2) for Signin with Apple test // SigninView() // step3) Firestore test // ActivityView() } } }

Slide 68

Slide 68 text

"DUJWJUZ5FTU fi OJTI "DUJWJUZ5FTU "DUJWJUZ5FTU"QQTXJGU import SwiftUI @main struct ActivityTestApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { // original view ContentView() // step1) for Crashlytics activate // CrashView() // step2) for Signin with Apple test // SigninView() // step3) Firestore test // ActivityView() } } } $SBTIMZUJDTૄ௨༻ 7JFX 4JHO*OXJUI"QQMF ֬ೝ༻7JFX σʔλετΞ֬ೝ༻7JFX

Slide 69

Slide 69 text

"DUJWJUZ5FTU"QQͷίϝϯτΞ΢τ͞Ε ͨ7JFXͱ'JSFTUPSFίϯιʔϧͷࢦࣔ௨ Γʹ͢Ε͹جຊ0,

Slide 70

Slide 70 text

ͨͩ͠$SBTIMZUJDTͷૄ௨ςετ࣌ɺ 9DPEFͷσϑΥϧτઃఆͱ ৯͍ҧ͏ͷͰ஫ҙ

Slide 71

Slide 71 text

$SBTIMZUJDTͱ9DPEFઃఆ %FCVH 3FMFBTFઃఆ 9DPEFͷ΢ΟβʔυͰͷઃఆ %(@*/'03."5*0/@'03."5 %8"3' %8"3'XJUIE4:.'JMF $SBTIMZUJDTͷૄ௨ςετ ࢖༻༗ແ ૄ௨ςετʹ࢖༻͢Δ ૄ௨ςετʹ࢖༻͠ͳ͍

Slide 72

Slide 72 text

$SBTIMZUJDTͱ9DPEFઃఆ %FCVH 3FMFBTFઃఆ 9DPEFͷ΢ΟβʔυͰͷઃఆ %(@*/'03."5*0/@'03."5 %8"3' %8"3'XJUIE4:.'JMF $SBTIMZUJDTͷૄ௨ςετ ࢖༻༗ແ ૄ௨ςετʹ࢖༻͢Δ ૄ௨ςετʹ࢖༻͠ͳ͍ %8"3'XJUIE4:.'JMF͕ ඞཁͳͷʹૄ௨ςετʹ࢖༻͢Δ %FCVH൛͸ແޮʹͳ͍ͬͯΔ

Slide 73

Slide 73 text

ࣗ࡞ΞϓϦͰͷ$SBTIMZUJDTରࡦ w $SBTIMZUJDTૄ௨ςετ͚࣌ͩ4FUUJOHͷ#6(@*/'03."5*0/@'03."5 ͷ%FCVHΛ%8"3'XJUIE4:.'JMF༗ޮԽ w ૄ௨ςετޙ͸9DPEFઃఆʹ໭͢ w 3VO4DSJQUҰ෦मਖ਼

Slide 74

Slide 74 text

%(Ҏ֎ͷ࣌ E4:.ϑΝΠϧΛίϐʔ

Slide 75

Slide 75 text

·ͱΊ w 'JSFCBTFͷॳखʹ͍ͭͯ·ͱΊ·ͨ͠ w 'JSFCBTF͕4XJGU1BDLBHF.BOBHFS͔Β௥ՃՄೳʹ w σʔλετΞ $MPVE'JSFTUPSF ͷ4XJGU͔Βͷརศੑ޲্͠·ͨ͠

Slide 76

Slide 76 text

IUUQTJSJNBTVDPN <13>#MPHਵ࣌౤ߘத

Slide 77

Slide 77 text

ࢀߟ w 4XJGU6*4JHO*O8JUI"QQMFVTJOH'JSFCBTF"VUIc#FUUFS1SPHSBNNJOH w IUUQTCFUUFSQSPHSBNNJOHQVCTJHOJOXJUIBQQMF fi SFCBTFBVUITXJGUVJFGFB w .BQQJOH'JSFTUPSF%BUBJO4XJGUŠ5IF$PNQSFIFOTJWF(VJEFcCZ1FUFS'SJFTFc'JSFCBTF %FWFMPQFSTc"QS c.FEJVN w IUUQTNFEJVNDPN fi SFCBTFEFWFMPQFSTNBQQJOH fi SFTUPSFEBUBJOTXJGUUIF DPNQSFIFOTJWFHVJEFBEGC w (JU)VC fi SFCBTFGVODUJPOTTBNQMFT$PMMFDUJPOPGTBNQMFBQQTTIPXDBTJOHQPQVMBSVTF DBTFTVTJOH$MPVE'VODUJPOTGPS'JSFCBTF w IUUQTHJUIVCDPN fi SFCBTFGVODUJPOTTBNQMFT