Slide 1

Slide 1 text

@niw 09/18/2021 — Online iOSDC Japan 2021 ࣮ફ iOS ΦʔϓϯιʔεϓϩδΣΫτͷ࢝Ίํ

Slide 2

Slide 2 text

Yoshimasa Niwa @niw

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

ϥΠϒϥϦͷ։ൃ

Slide 5

Slide 5 text

ϥΠϒϥϦͷ։ൃ API σβΠϯ

Slide 6

Slide 6 text

API σβΠϯ جຊతͳϙΠϯτ Θ͔Γ΍໊͍͢લΛ͚ͭΔ ίϯϙʔωϯτؒͷ஌ࣝͷ෼཭ Α͘஌ΒΕ͍ͯΔύλʔϯʹै͏

Slide 7

Slide 7 text

APIσβΠϯ ԼҐޓ׵ੑͷ୲อ ޓ׵ੑͷഁյʹ͸ϝδϟʔόʔδϣϯΞοϓ͕ඞཁ ར༻ऀ΁ͷෛ୲ Swift ͷ௨ৗͷϓϩτίϧ͸มߋ͕Ͱ͖ͳ͍ @objc @optional ͷ׆༻΋ݕ౼

Slide 8

Slide 8 text

API σβΠϯ ڞ௨ͷػೳ΍ઃఆ ϩάͷૹΓઌɺσόοάΦϓγϣϯͳͲ ґଘੑ஫ೖͰΞϓϦέʔγϣϯ͕ػೳΛఏڙͰ͖ΔΑ͏ʹ͢ Δ Singleton ͷΦϒδΣΫτΛ໊લۭؒʹ༻ҙ

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ϥΠϒϥϦͷ։ൃ ϥΠηϯε

Slide 11

Slide 11 text

ϥΠηϯε ๏తͳ໰୊͕Θ͔Δਓʹ૬ஊ Ұൠతʹ͸ Apache License 2.0 ΍ MIT License ͕ଟ͍ͱࢥ͍ ·͢ ͲͷϥΠηϯεΛ࢖͏͔

Slide 12

Slide 12 text

ϥΠηϯε Ͳ͏΍ͬͯදࣔ͢Δ͔ LICENSE ϑΝΠϧ ֤ιʔείʔυʹϥΠηϯεͷ৚จΛϔομͱͯ͠ೖΕΔ

Slide 13

Slide 13 text

ϥΠηϯε SPDX(Software Package Data Exchange) ͸ϥΠηϯε৘ใͳ ͲΛهड़͢ΔϑΥʔϚοτ 1. spdx.org/licenses Ͱ࢖༻͢ΔϥΠηϯεͷ Identifier Λ୳͢ 2. Identifier Λ SPDX short-form identifiers ͷܗࣜͰ֘౰͢Δ ιʔείʔυʹίϝϯτͰ௥Ճ SPDX Λ࢖͏

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

ϥΠηϯε IDETemplateMacros.plist υΩϡϝϯτ͕ Xcode ͷϔϧϓʹ͔͠ͳ͍΄΅ൿີͷػೳ …xcodeproj/xcshareddata ʹ഑ஔͯ͠ɺϓϩδΣΫτ ͝ͱʹࢦఆͰ͖Δ Xcode ͕σϑΥϧτͰ࡞ΔϑΝΠϧͷϔομΛมߋͰ͖Δ

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Copyright ͷ೥͸ຖ೥
 ม͑Δඞཁ͋Δͷʁ

Slide 18

Slide 18 text

͍͍͑

Slide 19

Slide 19 text

ϓϩδΣΫτͷެ։ ύοέʔδϯά

Slide 20

Slide 20 text

ύοέʔδϯά Swift Package Manager ͷ࠾༻ Apple ͷϓϥοτϑΥʔϜͰ͸ݱঢ়ɺࣄ্࣮ͷσϑΝΫτɾ ελϯμʔυ Xcode ͷαϙʔτ͕͋Δ ଞͷύοέʔδϚωʔδϟʔͱ΋͋Δఔ౓͸ڞଘͰ͖Δ

Slide 21

Slide 21 text

ύοέʔδϯά CocoaPods ΍ Carthage ΁ͷରԠ ଞͷϥΠϒϥϦ΁ͷґଘ͕ͳ͍৔߹͸ɺPodspec ϑΝΠϧ ͳͲΛར༻ऀ͕هड़͢Δ͜ͱͰར༻Ͱ͖Δ ଞͷϥΠϒϥϦ΁ͷґଘ͕͋Δ৔߹͸ɺPodspec ϑΝΠϧͳ Ͳ΋ఏڙ͢Δ͜ͱ͕ߟ͑ΒΕΔ͕ɺόʔδϣϯͷҰ؏ੑͳͲ ؾΛ͚ͭΔ͜ͱ͕૿͑Δ

Slide 22

Slide 22 text

Example ΞϓϦͷಉࠝ ͙͢ʹࢼͤΔΑ͏ʹ͢Δ ϥΠϒϥϦΛධՁͯ͠΋Β͏ͨΊʹ͸͙͢ʹࢼͤΔΑ͏ʹ͠ ͓ͯ͘ͱྑ͍ Example ΞϓϦͷϓϩδΣΫτ͸ͦͷ··ϥΠϒϥϦͷ։ൃ ؀ڥͱͯ͠΋࢖͑Δ

Slide 23

Slide 23 text

Examples Sources Tests Example.xcodeproj Package Local Package

Slide 24

Slide 24 text

ϥΠϒϥϦͷ։ൃ ·ͱΊ API σβΠϯʹ͸ԼҐޓ׵ੑͷߟྀͳͲීஈΑΓߟྀ͢Δ͜ ͱ͕ଟ͍ ϥΠηϯεͷදࣔΛͪΌΜͱ͢Δ Swift Package Manager Λ࢖͏

Slide 25

Slide 25 text

ϝϯςφϯεͷܭը

Slide 26

Slide 26 text

ϝϯςφϯεͷܭը Pull Request ͷऔΓѻ͍

Slide 27

Slide 27 text

Pull Request?

Slide 28

Slide 28 text

Pull Request ͷऔΓѻ͍ Pull Request Λड͚෇͚Δ ͦ΋ͦ΋ Pull Request Λड͚෇͚Δ͔Ͳ͏͔ΛܾΊ͓ͯ͘ Pull Request Λड͚෇͚Δ৔߹ɺCLA (Contributor License Agreements) ΁ͷಉҙͷ֬ೝͳͲ͕ඞཁ CONTRIBUTING ϑΝΠϧͷ௥Ճ

Slide 29

Slide 29 text

Pull Request ͷऔΓѻ͍ ϓϥΠϚϦͷϨϙδτϦ ΦʔϓϯιʔεͷϨϙδτϦΛͦͷ··ϓϥΠϚϦͱͯ͠ϥ ΠϒϥϦͷ։ൃʹ࢖͏৔߹͸໰୊͕ͳ͍ ։ൃʹ࢖͏ϨϙδτϦ͕ΦʔϓϯιʔεͷϨϙδτϦͰ͋Δ ͱ͸ݶΒͳ͍

Slide 30

Slide 30 text

Pull Request ͷऔΓѻ͍ Mono Repo ͷ৔߹ ಛʹ Mono Repo (Monolitic Repository) Ͱ։ൃ͍ͯ͠Δ৔߹͸ ΦʔϓϯιʔεϨϙδτϦΛϓϥΠϚϦʹ͢Δͷ͕೉͍͠ Pull Request ͱɺ಺෦ͷ Mono Repo ͷมߋͷಉظ͕ඞཁʹͳ Δ

Slide 31

Slide 31 text

Mono Repo Frameworks Open Source Library Sources Tests Applications Open Source Repo Sources Tests

Slide 32

Slide 32 text

Mono Repo Open Source Repo Pull Request Contribution

Slide 33

Slide 33 text

Pull Request ͷऔΓѻ͍ Pull Request ͷऔΓࠐΈ GitHub API Λ࢖ͬͯ Pull Request ͔Βίϛοτϝοηʔδͱ ύονΛ࡞Δ git apply --directory ͰύονΛద༻ͯ͠ίϛοτ ͢Δ

Slide 34

Slide 34 text

Pull Request ͷऔΓѻ͍ Commit Author ֤ Commit ͷ Author Λҡ࣋͢Δ Pull Request ʹ͸ Author ͕ෳ਺ਓ͍Δ৔߹͕͋Δ ίϛοτϝοηʔδͰ Co-authored-by: name Λ࢖͏

Slide 35

Slide 35 text

Mono Repo Open Source Repo Pull Request GitHub API Contribution Testing Application

Slide 36

Slide 36 text

Pull Request ͷऔΓѻ͍ git format-patch, git am git format-patch Ͱ Mono Repo ͷಛఆͷσΟϨΫτϦ ಺ͷมߋͷύονΛ࡞੒ git am ͰύονΛΦʔϓϯιʔεͷϨϙδτϦʹద༻

Slide 37

Slide 37 text

ϝϯςφϯεͷܭը ίϛοτνΣοΫ

Slide 38

Slide 38 text

ίϛοτνΣοΫ λεΫͷछྨ Linting ΍ϑΥʔϚοτ Ϣχοτςετ υΩϡϝϯτੜ੒

Slide 39

Slide 39 text

ίϛοτνΣοΫ CI؀ڥͷޓ׵ੑ ։ൃʹ͔ͭ͏ϨϙδτϦͱΦʔϓϯιʔεͷϨϙδτϦͰCI ͷ࣮ߦ؀ڥ͕ҟͳΔ৔߹΋͋Δ ίϛοτνΣοΫͷͦΕͧΕͷλεΫ͸ݸผʹ࣮ߦͰ͖ΔΑ ͏ʹ͓ͯ͘͠

Slide 40

Slide 40 text

ίϛοτνΣοΫ GNU make ͷ׆༻ ίϛοτνΣοΫͷλεΫ͸ make ͷλʔήοτͱͯ͠هड़ ͓͖ͯ͠ɺ೚ҙͷ؀ڥͱλΠϛϯάͰ࣮ߦͰ͖ΔΑ͏ʹͯ͠ ͓͘ Python ΍ Ruby ʹґଘ͢ΔπʔϧΛ࢖͏৔߹͸ɺεΫϦϓτ ͷ࣮ߦ؀ڥΛִ཭͢ΔΑ͏ͳ࢓૊ΈΛಋೖ͢Δ VirtualEnv, Bundler ͳͲ

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

GNU make 3.81?
 Ruby 2.6?

Slide 43

Slide 43 text

ϝϯςφϯεͷܭը ·ͱΊ Pull Request Λड͚෇͚Δ৔߹ɺͦͷͨΊͷखॱ΍λεΫͳ ͲΛ੔͓͑ͯ͘ ίϛοτνΣοΫͷλεΫΛ೚ҙͷ؀ڥͱλΠϛϯάͰ࣮ߦ Ͱ͖ΔΑ͏ʹ͓ͯ͘͠

Slide 44

Slide 44 text

ϓϩδΣΫτͷެ։

Slide 45

Slide 45 text

ϓϩδΣΫτͷެ։ GitHub ࣄ্࣮ Swift Package Manager ͷσϑΥϧτͷϨδετϦ ಛผͳཧ༝ͳͲ͕ͳ͚Ε͹ GitHub Λར༻͢Ε͹ྑ͍

Slide 46

Slide 46 text

ϓϩδΣΫτͷެ։ GitHub Actions macOS ͕࢖͑ΔͷͰɺίϛοτνΣοΫͷ Xcode Λ࢖ͬͨ λεΫ͕࣮ߦՄೳ Pull Request ΍ίϛοτͷ Push ͷࡍʹίϛοτνΣοΫΛ ࣮ߦ͢Δ GitHub Pages Λ࢖ͬͯੜ੒ͨ͠υΩϡϝϯτΛϗεςΟϯά

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

ϓϩδΣΫτͷެ։ ISSUE_TEMPLATE ࣗ༝ʹهड़Ͱ͖Δ Issue ͸ҙਤ͕໌֬Ͱ͸ͳ͍৔߹͕͋Δ όάใࠂͷϑΥʔϚοτΛఆܕจͱͯ͠༻ҙ͓ͯ͘͠

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

ϓϩδΣΫτͷެ։ PULL_REQUEST_TEMPLATE ಉ༷ʹ Pull Request ΋ࣗ༝ʹهड़Ͱ͖Δͱҙਤ͕໌֬Ͱ͸ͳ ͍৔߹͕͋Δ Pull Request ͸ͦͷ··ίϛοτϝοηʔδͱͯ͠ར༻Ͱ͖ ΔΑ͏ʹɺఆܕจΛ༻ҙ͓ͯ͘͠

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

ϓϩδΣΫτͷެ։ ·ͱΊ Swift Package Manager ͷࣄ্࣮ͷσϑΥϧτͷϨδετϦ ͕ GitHub ͳͷͰɺGitHub Ͱެ։͢Δͷ͕ྑ͍ GitHub ActionsɺIssue ΍ Pull Request ͷఆܕจͷ࡞੒ͯ͠ ͓͘

Slide 53

Slide 53 text

޿͘஌ͬͯ΋Β͏

Slide 54

Slide 54 text

Φʔϓϯιʔεͷҙٛ ίϛϡχςΟ΁ͷؐݩ