Slide 1

Slide 1 text

XcodeGen௒ೖ໳ try! Swift Tokyo 2020 Meetup!! @giginet

Slide 2

Slide 2 text

୭ • ΫοΫύουϞόΠϧج൫෦ • ج൫վળ͍ͯ͠Δ • Core Commiter of fastlane/Carthage/ XcodeGen • झຯɿϙέοτϞϯελʔιʔυγʔ ϧυ

Slide 3

Slide 3 text

XcodeGenͱ͸ • XcodeϓϩδΣΫτ(*.pbxproj)Λఆ͔ٛΒࣗಈੜ੒͢Δ։ൃ πʔϧ

Slide 4

Slide 4 text

project.yml targets: MyApp: type: application platform: iOS sources: - path: MyApp

Slide 5

Slide 5 text

$ xcodegen Loaded project: Name: MyApp Targets: MyApp: iOS application Schemes: MyApp ⚙ Generating project... ⚙ Writing project... Created project at MyApp.xcodeproj

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

େن໛ͳiOS։ൃͷ໰୊఺

Slide 8

Slide 8 text

ΫοΫύουΞϓϦͷ։ൃ • ௕͍ྺ࢙(2012/8~) • िʹ10ਓҎ্͕։ൃʹࢀՃ • σΧ͍(291,000ߦ) • Ϗϧυ͕࣌ؒ௕͍

Slide 9

Slide 9 text

ίϯϑϦΫτ͕ى͜Γ·͘Δ • XcodeͰ͸ϑΝΠϧͷ௥Ճ͚ͩͰίϯϑϦΫτ͕ൃੜ͢Δ • ΫοΫύουͷΞϓϦͰ͸ɺिʹ10ਓҎ্͕։ൃ͍ͯ͠Δͷ ͰɺpbxprojͷίϯϑϦΫτ͕೔ৗ஡൧ࣄͩͬͨ

Slide 10

Slide 10 text

ϓϩδΣΫτ͕ࢄΒ͔Δ • XcodeϓϩδΣΫτ͸ɺϑΝΠϧγεςϜ্ͷπϦʔͱϓϩ δΣΫτ಺ͷϑΝΠϧҐஔ͕ඞͣ͠΋Ұக͠ͳ͍ • ιʔτ΋खಈ

Slide 11

Slide 11 text

λʔήοτͷ௥Ճ͕೉͍͠ • ϚϧνϞδϡʔϧԽɻݱࡏ20λʔήο τ΄Ͳ • ϨϏϡʔ͕೉͍͠ • ίϯϑϦΫτͷղফ͕ෆՄೳ • ಉ༷ͷઃఆͷίϐʔ͕೉͍͠

Slide 12

Slide 12 text

XcodeGenࣄྫ • 2018/11 XcodeGenΛಋೖ • 2019/4 XcodeGen঺հهࣄΛॻ͍ͨ • 2019/9 XcodeGenίϛολʔʹ XcodeGenʹΑΔ৽࣌୅ͷiOSϓϩδΣΫτ؅ཧ - ΫοΫύου։ ൃऀϒϩά https://techlife.cookpad.com/entry/2019/04/26/110000

Slide 13

Slide 13 text

ೖΕͯྑ͔ͬͨ͜ͱ • ϑΝΠϧγεςϜ͔ΒϑΝΠϧπϦʔ Λ૊Έཱͯͯ͘ΕΔ • ίϯϑϦΫτ͠ͳ͍ • ࢄΒ͔Βͳ͍ • λʔήοτͷ௥Ճ΋༰қʹ • ઃఆͷมߋ͕͠΍͘͢

Slide 14

Slide 14 text

ηοτΞοϓ $ brew install xcodegen • ࣮ࡍͷӡ༻Ͱ͸HomebrewͰೖΕͳ͍ํ͕ྑ͍ʢޙड़ʣ

Slide 15

Slide 15 text

Project Spec • ϓϩδΣΫτͷఆٛϑΝΠϧʢproject.ymlʣ • هड़ํ๏͸υΩϡϝϯτ XcodeGen/ProjectSpec.md at master · yonaskolb/XcodeGen https://github.com/yonaskolb/XcodeGen/blob/master/Docs/ ProjectSpec.md

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

options: deploymentTarget: iOS: "12.0" name: MyApp targets: MyFramework: sources: MyFramework platform: iOS type: framework sources: MyFramework MyApp: type: application platform: iOS sources: MyApp settings: base: INFOPLIST_FILE: MyApp/Info.plist PRODUCT_BUNDLE_IDENTIFIER: com.myapp Debug: GCC_PREPROCESSOR_DEFINITIONS: DEBUG=1 dependencies: - target: MyFramework

Slide 18

Slide 18 text

ߴ౓ͳػೳ

Slide 19

Slide 19 text

Include • ଞͷProject SpecΛ෼཭ͯ͠ಡΈࠐΊΔ • ෳ਺ͷSpec͸Ϛʔδ͞ΕΔ • ಡΈࠐΜͩॱʹΦʔόʔϥΠυ include: - other_spec.yml targets: MyApp: ...

Slide 20

Slide 20 text

Target Template • ςϯϓϨʔτ͔ΒλʔήοτΛෳ੡Ͱ͖Δ • ϚϧνϞδϡʔϧԽͳͲʹศརɹ targetTemplates: Framework: platform: iOS type: framework sources: - ${frameworkName} targets: MyFramework: templates: - Framework templateAttributes: frameworkName: AwesomeFramework

Slide 21

Slide 21 text

Carthage • Carthageͷґଘؔ܎Λهड़Ͱ͖Δ • ґଘؔ܎ͷઃఆ΍Copy FrameworkͳͲ΋উखʹૠೖͯ͘͠ΕΔ targets: MyTarget: dependencies: - target: MyFramework - carthage: RxSwift MyFramework: type: framework

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

SwiftPM • SwiftPMύοέʔδΛ૊ΈࠐΊΔ packages: Yams: url: https://github.com/jpsim/Yams from: 2.0.0 targets: App: dependencies: - package: Yams

Slide 24

Slide 24 text

Α͋͘Δ࣭໰

Slide 25

Slide 25 text

ສ͕ҰXcodeGenͷ։ൃ͕ࢭ·ͬͨΒࠔΓ·ͤΜ͔ʁ • Xcode͕ޙํޓ׵ੑΛอ͍ͬͯΔݶΓେৎ෉ • ݹ͍όʔδϣϯͰ࡞੒ͨ͠෺͸৽͍͠෺Ͱ΋։͚Δ • ສ͕ҰXcodeGenΛ΍Ί͍ͨͱ͖͸ɺ࠷ऴ੒Ռ෺Λ·ͨϦϙδ τϦʹؚΊΕ͹OK

Slide 26

Slide 26 text

νʔϜશମͰXcodeGenΛ࢖͍͍ͨͰ͢ • Mint + MintfileΛ༻͍ͨόʔδϣϯ؅ཧΛ͍ͯ͠Δ • νʔϜ಺ͰXcodeGenࣗମͷόʔδϣϯΛἧ͍͑ͨͨΊ • minimumXcodeGenVersion ΋ࢦఆͰ͖Δ

Slide 27

Slide 27 text

Mintfile yonaskolb/[email protected] setup.sh $ mint run XcodeGen xcodegen

Slide 28

Slide 28 text

CocoaPodsΛ࢖͍͍ͨͰ͢ • xcodegenͰੜ੒͔ͯ͠Β pod install ͠·͠ΐ͏ • CocoaPods͸ *.xcodeproj ΛݩʹઃఆΛ஫ೖͯ͠ *.xcworkspaceΛੜ੒͢ΔͨΊɺຖճ࣮ߦ͕ඞཁ • Shell ScriptͳͲͰbootstrapͷखஈΛ༻ҙ͓ͯ͘͠ $ xcodegen $ pod install

Slide 29

Slide 29 text

ঃʑʹطଘͷϓϩδΣΫτΛҠߦ͍ͨ͠Ͱ͢ • ϑΝΠϧ੔ཧ͔Β࢝ΊΔɻಉ͡Groupͷ෺Λಉ͡σΟϨΫτϦ ʹҠ͢ • طଘͷϓϩδΣΫτ͸ϦϙδτϦʹ࢒ͨ͠··ɺXcodeGenͰ্ ॻ͖͢Δͷ͕Φεεϝ • CI؀ڥ͔Β΍Ұ෦ͷਓ͔ΒҠߦͯ͠ɺͷͪʹશ։ൃऀʹదԠ

Slide 30

Slide 30 text

1. ϑΝΠϧ੔ཧ͢Δ 2. project.ymlॻ͘ɻطଘͷ*.xcodeproj͸ignore͠ͳ͍ 3. ಛఆͷ؀ڥ͚ͩXcodeGenΛ࣮ߦ͢ΔɻطଘͷxcodeprojΛ্ॻ ͖͠ɺ͠͹Β͘໰୊͕ແ͍͔؂ࢹ͢Δ • CI্ͷΈɻ؀ڥม਺Λ༗ޮʹͨ͠ͱ͖ͷΈ 4. ྑͦ͞͏ͳΒຖճηοτΞοϓΛඞਢʹ͢Δɻ *.xcodeprojΛ ϦϙδτϦ͔Β࡟আͯ͠ignore

Slide 31

Slide 31 text

࢖Θͳ͍΂͖ϓϩδΣΫτ͸͋Γ·͔͢ʁ • খن໛ͳϓϩδΣΫτ͸ඞͣ͠΋ෆཁ • Ҡߦʹ΋ίετ͕͔͔ΔͷͰϓϩδΣΫτͷن໛ʹΑΔ • ࠷ॳ͔ΒೖΕͯ΋ྑ͍ • ΞϓϦέʔγϣϯҎ֎ʢϥΠϒϥϦʣͰ͸࢖Θͳ͍ํ͕ແ೉ • SwiftPMࣗମ͕*.xcodeprojΛੜ੒͢ΔػೳΛ͍࣋ͬͯΔ • CarthageରԠͷͨΊʹ݁ہ*.xcodeproj͕ඞཁ

Slide 32

Slide 32 text

XcodeGen΁ͷߩݙ

Slide 33

Slide 33 text

ίϛολʔͰ͢ • 4Ґͷίϛοτྔ • ඞཁͳػೳΛೖΕͯͨΒ͜͏ͳͬͨ

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

؀ڥηοτΞοϓ 1. git clone https://github.com/yonaskolb/XcodeGen.git 2. XcodeͰSwift Packageͱͯ͠։͘

Slide 36

Slide 36 text

σόοάํ๏ • xcodegenεΩʔϚΛϏϧυͯ͠σόοά • XcodeͷεΩʔϚͰίϚϯυϥΠϯҾ਺Λ౉͢ͷ͕Φεεϝ

Slide 37

Slide 37 text

PRΛૹΔ • ԿΛղܾ͍ͨ͠ͷ͔ॻ͘(Motivation) • όάͷ৔߹͸࠶ݱঢ়گΛॻ͘(Project SpecͳͲ) • मਖ਼ޙͷڍಈΛॻ͘(Description) • εΫϦʔϯγϣοτ΋షΔ • Ϣχοτςετ͸ॻ͘ • ӳޠ͸ؤுΔ

Slide 38

Slide 38 text

ྫ • @giginet͕ߦͬͨվળΛ͍͔ͭ͘঺հ

Slide 39

Slide 39 text

-pΦϓγϣϯͷ૬ରύε͕յΕΔ https://github.com/yonaskolb/XcodeGen/pull/681

Slide 40

Slide 40 text

Carthage Static FrameworkରԠ targets: MyTarget: dependencies: - carthage: AStaticFramework linkType: static https://github.com/yonaskolb/XcodeGen/pull/688

Slide 41

Slide 41 text

એ఻ • SwiftPMύοέʔδͷ։ൃख๏͕໾ཱ ͭ • SwiftPMೖ໳هࣄΛॻ͖·ͨ͠ • WEB+DB PRESS Vol.115 2020೥2݄22 ೔ൃച • ʰXcode 11ʹΑΔSwiftύοέʔδೖ ໳ʱ

Slide 42

Slide 42 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ • ࠙਌ձͰͳΜͰ΋ฉ͍ͯ͘Εʂʂʂ • XcodeGenɺfastlaneɺCarthageɺϙέϞϯͳͲ