Slide 1

Slide 1 text

ύοέʔδ؅ཧͰϞόΠϧ։ൃΛ ҆શʹਐΊΔ גࣜձࣾVoicy Entaku

Slide 2

Slide 2 text

ࣗݾ঺հ • Name: entaku(ԕ౻୓໻) • Work: גࣜձࣾVoicyɹ • Twitter: https://twitter.com/entaku_0818 • Hobby: • ԻָϑΣε • ݸਓ։ൃ • https://apps.apple.com/jp/developer/takuya-endo/id1601100107 • Other: SwiftѪ޷ձӡӦ https://love-swift.connpass.com/

Slide 3

Slide 3 text

https://love-swift.connpass.com/event/319801/

Slide 4

Slide 4 text

ϞόΠϧ։ൃͷ҆શʹਐΊΔͱ͸ʁ

Slide 5

Slide 5 text

҆શͷࠃࡍඪ४ͷఆٛʮڐ༰Ͱ͖ͳ͍ϦεΫ͕ͳ͍͜ͱʯ[1][2]ͱɺʮةݥΛθϩ ʹ͢Δʢઈର҆શʣʯʹ͍ͭͯղઆΛ͢Δɻ https://ja.wikipedia.org/wiki/%E5%AE%89%E5%85%A8 ϞόΠϧ։ൃͷ҆શʹਐΊΔͱ͸ʁ

Slide 6

Slide 6 text

Voicy΋ϦϦʔεͯ͠8೥ ϑΣʔζ΍؀ڥ͕มΘΓ౰ॳ͔ΒมΘ͍ͬͯΔ͜ͱ΋ଟ͍

Slide 7

Slide 7 text

ϓϩμΫτͷมԽ ༷ʑͳػೳ͕௥Ճ͞Ε͍ͯΔ

Slide 8

Slide 8 text

νʔϜͷมԽ • ϦϦʔε౰ॳ • ΦϑγϣΞͰϕτφϜνʔ Ϝ͕։ൃ • iOS/AndroidͰಉ͡νʔϜ ͩͬͨ • ݱࡏ(2024/05/21) • iOS: 5໊(಺1໊ۀ຿ҕୗ) • Android: 1໊ • ͦΕͧΕ3ͭͷνʔϜʹ෼͔Ε ͯ։ൃ͍ͯ͠Δ

Slide 9

Slide 9 text

ա౓ͳڞ௨Խ class VoicyChannel: Codable { var id: Int64 var channelViewId: String var personalityID: Int64 var name: String ʙʙ …100͘Β͍ύϥϝʔλ͕͋Δ ྫ͑͹…Channelͷσʔλ

Slide 10

Slide 10 text

ա౓ͳڞ௨Խ class VoicyChannel: Codable { var id: Int64 var channelViewId: String var personalityID: Int64 var name: String ʙʙ …100͘Β͍ύϥϝʔλ͕͋Δ var is_premium: Bool ྫ͑͹…Channelͷσʔλ

Slide 11

Slide 11 text

ա౓ͳڞ௨Խ ྫ͑͹…UI • ڞ௨ͷViewͷதͰ৚݅෼ذ͞ Ε͍ͯΔ͜ͱ͕͋Δ • HelperʹೖͬͯΔ͕1͔ͭΒ ͔͠ݺͼग़͞Εͳ͍͜ͱ͕͋ Δ

Slide 12

Slide 12 text

✅ߟ͑ͯڞ௨ԽΛ͢Δ ✅ߟ͑ͯ੹຿෼͚Λ͍ͯ͘͠

Slide 13

Slide 13 text

UI UI newUI channnel UI ✅ߟ͑ͯ੹຿෼͚Λ͍ͯ͘͠ Recommend Channnel ৽͍͠UI͸ඞཁͳσʔλͷΈ੾Γग़ͯ͠࢖͏

Slide 14

Slide 14 text

UI Helper UI ✅ߟ͑ͯڞ௨ԽΛ͢Δ Recommend ຊ౰ʹ࢖͍·ΘͤΔUI͚ͩڞ௨͔Ͱ͖ΔΑ͏ʹ͢Δ

Slide 15

Slide 15 text

✅ߟ͑ͯڞ௨ԽΛ͢Δ →ڞ௨ԽʹΑͬͯಘΒΕΔϝϦοτΑΓݻ༗ԽͷϝϦοτΛऔΓ ʹߦ͘ ✅ߟ͑ͯ੹຿෼͚Λ͍ͯ͘͠ →ίʔυΛ࢖͍·ΘͤΔϝϦοτΑΓɺίʔυ͕कΒΕ͍ͯΔϝ ϦοτΛऔΓʹߦ͘

Slide 16

Slide 16 text

✅ߟ͑ͯڞ௨ԽΛ͢Δ →ڞ௨ԽʹΑͬͯಘΒΕΔϝϦοτΑΓݻ༗ԽͷϝϦοτΛऔΓ ʹߦ͘ ✅ߟ͑ͯ੹຿෼͚Λ͍ͯ͘͠ →ίʔυΛ࢖͍·ΘͤΔϝϦοτΑΓɺίʔυ͕कΒΕ͍ͯΔϝ ϦοτΛऔΓʹߦ͘ ύοέʔδͰ؅ཧ͢Δ

Slide 17

Slide 17 text

Package Manager The Swift Package Manager (SwiftPM) is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies. The Package Manager is included in Swift 3.0 and above. https://www.swift.org/documentation/package-manager/

Slide 18

Slide 18 text

Packageͷ֓ཁ Main (ݱߦͷϓϩδΣΫτ) UIPackage Usecase ✅Main͸΄ͱΜͲมߋ͠ͳ͍ ✅UIͱUsecase(ϏδωεϩδοΫ)Λ෼ׂ͢Δ ✅MainͰUIͱUsecaseΛ૊ΈཱͯΔ 2024/05/21࣌఺

Slide 19

Slide 19 text

UIPackage ͷPackage.swift let package = Package( name: "UIPackage", platforms: [ .iOS(.v15), ], products: [ .library( name: "UIPackage", targets: ["XXXXScreen", "XXXXScreen"]), ], dependencies: [ .package(path: "../UseCase") ], targets: [ .target( name: "XXXXScreen", dependencies: ["UseCase"]), .target( name: "XXXXScreen", dependencies: ["UseCase"]), .testTarget( name: "UIPackageTests", dependencies: ["XXXXScreen", "XXXXScreen"]), ] ) ໌ࣔతʹͲͷPackageΛར༻͢Δ͔Λࢦఆ͢Δ

Slide 20

Slide 20 text

UseCase ͷPackage.swift let package = Package( name: "UseCase", platforms: [ .iOS(.v15), ], products: [ .library( name: "UseCase", targets: ["Interactor"]), ], targets: [ .target( name: "Interactor", dependencies: ["Service", "Domain"]), .target( name: "Domain", dependencies: []), .target( name: "Noah", dependencies: []), .target( name: "Service", dependencies: ["Domain", “Noah"]), .testTarget( name: "InteractorTests", dependencies: ["Interactor", "Service", "Noah"]), ] ) ໌ࣔతʹͲͷPackageΛར༻͢Δ͔Λࢦఆ͢Δ

Slide 21

Slide 21 text

طଘͷApp͔Β͸ೖΓޱͷΈެ։͢Δ final public class XXXXScreen { var router: Router public init(useCase: UseCase) { self.router = Router(useCase: useCase) } public func factory(channelId: String) -> UIViewController { let xxx = xxxx let hostingController = UIHostingController(rootView: xxx) return hostingController } } PackageͰ͸ඞཁͳPublicͰҙਤతʹެ։͢Δ

Slide 22

Slide 22 text

Unitςετ class XXX: XCTestCase { func νϟϯωϧͰڐՄ͞Ε͍ͯΔػೳΛऔಘ͢Δ() async { let mockUsecase = ChannelFeatureUsecaseMock() mockUsecase.getChannelFeatureHandler = { _, _ in return [] } let presenter = MainTabViewPresenter(usecase: mockUsecase) await presenter.getChannelFeature() XCTAssertTrue(presenter.state.canXXXXXX) } } UsecaseʹΑΔεςʔλεͷมԽΛςετ͢Δ

Slide 23

Slide 23 text

CIͰUIͱUseCaseͷςετΛճ͢

Slide 24

Slide 24 text

ઃܭ͸มΘ͍ͬͯ͘ɻมԽ͢Δ͜ͱΛલఏʹߟ͑Δ

Slide 25

Slide 25 text

·ͱΊ • ߟ͑ͯڞ௨Խߟ͑ͯ੹຿෼͚͢Δ͜ͱͰɺඞཁͳ࣌ʹ ඞཁͳ΋ͷΛݺͼग़ͤΔΑ͏ʹ͢Δ • ઃܭ͸มΘ͍ͬͯ͘ɻมԽ͢Δ͜ͱΛલఏʹߟ͑Δ

Slide 26

Slide 26 text

ࢀߟ • Swift Package centered project • https://speakerdeck.com/d_date/swift-package-centered-project-build- and-practice • XcodeCloud • https://developer.apple.com/xcode-cloud/